.portal-body{background:var(--paper-2)}.login{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr}.login-art{position:relative;background:var(--ink);overflow:hidden;padding:54px;display:flex;flex-direction:column;justify-content:space-between}.login-art .grid{position:absolute;inset:0;opacity:.5;background-image:linear-gradient(hsla(0,0%,100%,.06) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.06) 1px,transparent 0);background-size:54px 54px;-webkit-mask-image:radial-gradient(90% 70% at 80% 10%,#000,transparent 70%);mask-image:radial-gradient(90% 70% at 80% 10%,#000,transparent 70%)}.login-art .brand,.login-art .brand .net{color:#fff;position:relative;z-index:2}.login-art .pitch{position:relative;z-index:2;max-width:380px}.login-art .pitch h2{font-family:var(--font-serif);font-weight:500;font-size:34px;color:#fff;line-height:1.12;letter-spacing:-.02em;margin-bottom:16px}.login-art .pitch h2 em{font-style:italic;color:#6ee7b7}.login-art .pitch p{color:#aeb7d6;font-size:15.5px}.login-art .foot{position:relative;z-index:2;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#6b76a0}.login-art svg{position:absolute;right:-40px;bottom:60px;width:340px;height:340px;opacity:.9;z-index:1}.login-form{display:flex;align-items:center;justify-content:center;padding:40px}.login-card{width:100%;max-width:380px}.login-card .label{margin-bottom:14px;display:block}.login-card h1{font-family:var(--font-serif);font-weight:500;font-size:30px;color:var(--ink);letter-spacing:-.02em;margin-bottom:8px}.login-card .sub{font-size:15px;color:var(--slate);margin-bottom:30px}.field{margin-bottom:18px}.field label{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}.field input{width:100%;padding:13px 15px;border:1px solid var(--line-2);border-radius:2px;font-family:var(--font-body);font-size:15px;color:var(--ink);background:#fff;transition:.2s}.field input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(5,48,173,.1)}.row-between{display:flex;justify-content:space-between;align-items:center;margin:6px 0 24px}.row-between a{font-size:13px;color:var(--blue)}.remember{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--slate)}.login-note{margin-top:24px;padding-top:20px;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}.login-note a{color:var(--blue)}.login-card .btn-primary{width:100%}.app{min-height:100vh;display:grid;grid-template-columns:248px 1fr}.side{background:#fff;border-right:1px solid var(--line);padding:22px 16px;display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh}.side .brand{padding:6px 10px 22px}.side nav{display:flex;flex-direction:column;gap:2px;height:auto}.side nav a{display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:3px;font-size:14.5px;color:var(--slate);font-weight:500;cursor:pointer;transition:.15s}.side nav a .ico{width:16px;height:16px;flex:none;color:var(--muted)}.side nav a:hover{background:var(--paper-2);color:var(--ink)}.side nav a.on{background:var(--tint)}.side nav a.on,.side nav a.on .ico{color:var(--blue)}.side .badge{margin-left:auto;font-family:var(--font-mono);font-size:11px;background:var(--ink);color:#fff;border-radius:20px;padding:1px 8px}.side .acct{margin-top:auto;border-top:1px solid var(--line);padding-top:16px}.side .acct .who{gap:11px;padding:6px 10px}.avatar,.side .acct .who{display:flex;align-items:center}.avatar{width:34px;height:34px;border-radius:50%;background:var(--tint);color:var(--blue);justify-content:center;font-weight:700;font-size:14px;flex:none}.side .acct .who .nm{font-size:13.5px;color:var(--ink);font-weight:600;line-height:1.2}.side .acct .who .co{font-size:12px;color:var(--muted)}.side .signout{display:block;padding:9px 10px;font-size:13px;color:var(--muted);cursor:pointer}.side .signout:hover{color:var(--red)}.main{padding:0 0 60px}.topbar{background:#fff;border-bottom:1px solid var(--line);padding:16px 36px;display:flex;justify-content:space-between;align-items:center;position:-webkit-sticky;position:sticky;top:0;z-index:20}.topbar .crumb{font-size:12px;color:var(--muted)}.topbar .crumb,.topbar .net-status{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase}.topbar .net-status{display:flex;align-items:center;gap:9px;font-size:11.5px;color:var(--green-deep)}.net-dot{width:8px;height:8px;border-radius:50%;background:var(--green);animation:pulse 2.6s infinite}.menutoggle{display:none}.view{padding:36px}.vhead{margin-bottom:28px}.vhead h1{font-family:var(--font-serif);font-weight:500;font-size:30px;color:var(--ink);letter-spacing:-.02em}.vhead h1 em{font-style:italic;color:var(--blue)}.vhead p{color:var(--slate);margin-top:6px;font-size:15px}.cards{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16px;gap:16px;margin-bottom:32px}.card{background:#fff;border:1px solid var(--line);border-radius:5px;padding:22px}.card .k{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.card .v{font-family:var(--font-serif);font-weight:500;font-size:34px;color:var(--ink);line-height:1;margin-top:12px}.card .v .u{font-family:var(--font-body);font-size:14px;color:var(--blue)}.card .meta{font-size:12.5px;color:var(--muted);margin-top:8px}.panel{background:#fff;border:1px solid var(--line);border-radius:5px;overflow:hidden}.panel .ph{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid var(--line)}.panel .ph h3{font-family:var(--font-serif);font-weight:500;font-size:18px;color:var(--ink)}.panel .ph a{font-size:13px;color:var(--blue);cursor:pointer}table{width:100%;border-collapse:collapse}thead th{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);text-align:left;padding:13px 22px;font-weight:500}tbody td,thead th{border-bottom:1px solid var(--line)}tbody td{padding:15px 22px;font-size:14px;color:var(--ink)}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:var(--paper-2)}td .tid{font-family:var(--font-mono);font-size:13px;color:var(--blue)}td .subj{color:var(--ink);font-weight:500}.pri{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.pri.high{color:var(--red)}.pri.normal{color:var(--slate)}.pri.low{color:var(--muted)}.badge-st{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;padding:4px 11px;border-radius:20px}.badge-st .d{width:7px;height:7px;border-radius:50%}.st-new{background:#eaf0ff;color:var(--blue)}.st-new .d{background:var(--blue)}.st-prog{background:#fbf3e4;color:var(--amber)}.st-prog .d{background:var(--amber)}.st-wait{background:#fdeaec;color:var(--red)}.st-wait .d{background:var(--red)}.st-done{background:#e6f5ec;color:var(--green-deep)}.st-done .d{background:var(--green)}.upd{font-family:var(--font-mono);font-size:12px;color:var(--muted)}.proj{padding:24px 22px;border-bottom:1px solid var(--line)}.proj:last-child{border-bottom:none}.proj .pt{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:16px}.proj .pt h4{font-family:var(--font-serif);font-weight:500;font-size:18px;color:var(--ink)}.proj .pt .loc{font-family:var(--font-mono);font-size:12px;color:var(--muted);margin-top:4px}.phase-row{display:flex;gap:6px;margin-bottom:12px}.phase{flex:1 1;text-align:center}.phase .bar{height:5px;border-radius:3px;background:var(--line-2)}.phase.done .bar{background:var(--green)}.phase.cur .bar{background:var(--blue)}.phase .nm{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-top:7px}.phase.cur .nm{color:var(--blue)}.phase.done .nm{color:var(--green-deep)}.proj .next{display:flex;justify-content:space-between;align-items:center;margin-top:14px;font-size:13.5px;color:var(--slate)}.proj .next b,.proj .pct{color:var(--ink)}.proj .pct{font-family:var(--font-serif);font-size:22px;font-weight:500}@media(max-width:900px){.login{grid-template-columns:1fr}.login-art{display:none}.app{grid-template-columns:1fr}.side{position:fixed;left:0;top:0;z-index:120;transform:translateX(-100%);transition:transform .3s;width:248px}.side.open{transform:none}.menutoggle{display:inline-flex;background:none;border:1px solid var(--line-2);color:var(--ink);width:40px;height:38px;border-radius:2px;font-size:18px;cursor:pointer;align-items:center;justify-content:center}.cards{grid-template-columns:1fr 1fr}.topbar{padding:14px 20px}.view{padding:24px 20px}}@media(max-width:560px){.cards{grid-template-columns:1fr}tbody td:nth-child(3),thead th:nth-child(3){display:none}}tbody tr.trow{cursor:pointer}.panel .ph a.newt{font-weight:600}.modal-overlay{position:fixed;inset:0;z-index:200;background:rgba(10,20,55,.55);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;padding:24px}.modal{width:100%;max-width:560px;max-height:86vh;background:#fff;border:1px solid var(--line);border-radius:8px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 60px rgba(10,20,55,.28)}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:20px 24px;border-bottom:1px solid var(--line)}.modal-head .tid{font-family:var(--font-mono);font-size:12px;color:var(--blue)}.modal-head h3{font-family:var(--font-serif);font-weight:500;font-size:20px;color:var(--ink);margin-top:4px;line-height:1.2}.modal-head .mh-right{display:flex;align-items:center;gap:14px;flex:none}.mclose{background:none;border:none;font-size:17px;color:var(--muted);cursor:pointer;line-height:1}.mclose:hover{color:var(--ink)}.modal-body{padding:22px 24px;overflow-y:auto}.modal-body .label{color:var(--muted)}.thread{display:flex;flex-direction:column;gap:14px;background:var(--paper-2)}.thread .empty{color:var(--muted);font-size:14px;text-align:center;padding:20px 0}.cmt{border:1px solid var(--line);border-radius:7px;padding:13px 15px;background:#fff;max-width:90%}.cmt.staff{align-self:flex-start;border-left:3px solid var(--blue)}.cmt.client{align-self:flex-end;border-left:3px solid var(--green)}.cmt-head{display:flex;align-items:center;gap:9px;margin-bottom:6px}.cmt-who{font-size:13px;font-weight:700;color:var(--ink)}.cmt-role{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;background:var(--paper-2);padding:1px 6px;border-radius:4px}.cmt-role,.cmt-time{font-family:var(--font-mono);color:var(--muted)}.cmt-time{font-size:11px;margin-left:auto}.cmt-body{font-size:14px;color:var(--ink);line-height:1.5;white-space:pre-wrap}.modal-foot{padding:16px 24px;border-top:1px solid var(--line);background:#fff}.modal-foot textarea{width:100%;min-height:78px;resize:vertical;padding:12px 14px;border:1px solid var(--line-2);border-radius:4px;font-family:var(--font-body);font-size:14.5px;color:var(--ink);background:#fff}.modal-foot textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(5,48,173,.1)}.modal-foot .foot-actions{display:flex;justify-content:space-between;align-items:center;margin-top:12px;gap:14px}.modal-foot .hint{font-size:12px;color:var(--muted)}.modal-body.form .field select,.modal-body.form .field textarea{width:100%;padding:12px 14px;border:1px solid var(--line-2);border-radius:4px;font-family:var(--font-body);font-size:14.5px;color:var(--ink);background:#fff}.modal-body.form .field textarea{min-height:120px;resize:vertical}.modal-body.form .field select:focus,.modal-body.form .field textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(5,48,173,.1)}.ferr{color:var(--red);font-size:13px;margin-bottom:10px}@media(max-width:560px){.modal{max-height:92vh}.cmt{max-width:100%}}.otag{font-family:var(--font-mono);font-size:11px;color:var(--muted)}.ctl-row{display:flex;gap:12px;margin-bottom:16px}.ctl-row .field{flex:1 1;margin-bottom:0}.ctl-row select{width:100%;padding:10px 12px;border:1px solid var(--line-2);border-radius:4px;font-family:var(--font-body);font-size:14px;color:var(--ink);background:#fff}.ctl-row select:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(5,48,173,.1)}.saving{font-family:var(--font-mono);font-size:11px;color:var(--muted)}.proj-edit{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-top:16px;padding-top:16px;border-top:1px dashed var(--line)}.proj-edit .field{margin-bottom:0}.proj-edit .field.sm{width:86px}.proj-edit .field.md{width:150px}.proj-edit .grow{flex:1 1;min-width:160px}.proj-edit input,.proj-edit select{width:100%;padding:9px 11px;border:1px solid var(--line-2);border-radius:4px;font-family:var(--font-body);font-size:13.5px;color:var(--ink);background:#fff}.proj-edit input:focus,.proj-edit select:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(5,48,173,.1)}.ob-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px;gap:20px}@media(max-width:760px){.ob-grid{grid-template-columns:1fr}}.ob-grid .panel{padding:0}.ob-body{padding:20px 22px}.ob-body .field select{width:100%;padding:12px 14px;border:1px solid var(--line-2);border-radius:4px;font-family:var(--font-body);font-size:14.5px;color:var(--ink);background:#fff}.ob-body .field select:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(5,48,173,.1)}.ob-actions{display:flex;justify-content:flex-end;margin-top:6px}.ok-msg{color:var(--green-deep);font-size:13px;margin-top:8px}.ov-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.ov-row:last-child{border-bottom:none}.ov-count{font-family:var(--font-serif);font-size:20px;color:var(--ink);font-weight:500}.ov-phase{font-size:14px;color:var(--ink)}.btn.btn-sm{padding:6px 12px;font-size:12px}.rolepill{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;padding:2px 9px;border-radius:20px}.role-admin{background:#fdeaec;color:var(--red)}.role-staff{background:#eaf0ff;color:var(--blue)}.role-client{background:var(--paper-2);color:var(--muted)}.clientcard{cursor:pointer;transition:.15s}.clientcard:hover{border-color:var(--blue);box-shadow:0 2px 12px rgba(5,48,173,.08)}.backlink{font-family:var(--font-mono);font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--blue);cursor:pointer;display:inline-block;margin-bottom:10px}.net-status.down{color:var(--red)}.net-status.down .net-dot{background:var(--red)}.assignee{font-size:13px;color:var(--ink)}.unassigned{font-size:12px;color:var(--muted);font-style:italic}