:root{--ink:#1d2433;--ink-2:#4b5468;--muted:#7a8295;--line:#e3e6ec;--line-2:#d0d4dc;--bg:#f4f5f8;--card:#fff;--navy:#1f2a44;--navy-2:#2c3a5c;--accent:#2f6fed;--team:#a5a5a5;--team-ink:#1f1f1f;--danger:#d1342f;--radius:10px;--shadow:0 1px 2px #141c2d0f, 0 4px 16px #141c2d0d;color:var(--ink);font-family:Inter,Segoe UI,system-ui,-apple-system,Roboto,sans-serif;font-size:14px}*{box-sizing:border-box}body{background:var(--bg);margin:0}button,input,select,textarea{font:inherit;color:inherit}h1,h2,h3{margin:0}.muted{color:var(--muted);margin:0}.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px}.right{text-align:right}.spacer{flex:1}.splash{min-height:60vh;color:var(--muted);place-items:center;display:grid}.btn{cursor:pointer;background:#fff;border:1px solid #0000;border-radius:8px;padding:8px 14px;font-weight:600}.btn.sm{padding:5px 10px;font-size:13px}.btn.block{width:100%;padding:11px}.btn.primary{background:var(--accent);color:#fff}.btn.primary:hover{background:#255ed0}.btn.ghost{border-color:var(--line-2);color:var(--ink-2);background:0 0}.btn.ghost:hover{background:#0000000a}.btn.danger{color:var(--danger);background:#fff;border-color:#f0c4c2}.btn:disabled{opacity:.6;cursor:default}input,select,textarea{border:1px solid var(--line-2);background:#fff;border-radius:8px;min-width:0;padding:8px 10px}input:focus,select:focus,textarea:focus{border-color:var(--accent);outline:2px solid #2f6fed59}.error{color:#9b1c17;background:#fdecea;border-radius:8px;margin:8px 0;padding:8px 12px}.success{color:#17623a;background:#e7f6ec;border-radius:8px;padding:8px 12px}.brand{white-space:nowrap;align-items:center;gap:10px;font-size:16px;display:flex}.brand b{font-weight:700}.logo{background:var(--navy);border-radius:7px;gap:3px;width:28px;padding:6px;display:inline-grid}.logo i{background:#ffc000;border-radius:2px;height:3px;display:block}.logo i:nth-child(2){background:#00b050}.logo i:nth-child(3){background:red;width:65%}.brand.big{margin-bottom:28px;font-size:18px}.brand.big .logo{width:34px;padding:8px}.login{grid-template-columns:1.1fr 1fr;min-height:100vh;display:grid}.login-art{background:linear-gradient(160deg, var(--navy), #111827);color:#fff;flex-direction:column;justify-content:center;gap:18px;padding:56px;display:flex}.login-art h2{max-width:460px;font-size:30px;line-height:1.2}.login-art p{color:#b9c2d6;max-width:420px;margin:0}.sheet{grid-template-columns:repeat(3,1fr);gap:10px;max-width:520px;margin-bottom:24px;display:grid}.sheet-col{background:#ffffff0f;border-radius:8px;padding:8px}.sheet-head{letter-spacing:.06em;text-transform:uppercase;color:#cfd6e6;padding:2px 4px 8px;font-size:12px;font-weight:700}.sheet-row{border-top:1px solid #ffffff12;align-items:center;gap:6px;padding:5px 4px;display:flex}.sheet-row .bar{background:#ffffff40;border-radius:3px;height:6px}.sheet-row .dot{border-radius:3px;width:18px;height:8px;margin-left:auto}.login-panel{background:#fff;place-items:center;padding:32px 16px;display:grid}.login-card{gap:14px;width:100%;max-width:360px;display:grid}.login-card h1{font-size:24px}.login-card label,.form label{color:var(--ink-2);gap:6px;font-size:13px;font-weight:600;display:grid}.login-card input{padding:11px 12px}.hint{color:var(--muted);text-align:center;margin:0;font-size:13px}.topbar{border-bottom:1px solid var(--line);z-index:20;background:#fff;align-items:center;gap:24px;padding:10px 20px;display:flex;position:sticky;top:0}.mainnav{gap:4px;display:flex}.mainnav a{color:var(--ink-2);border-radius:8px;padding:7px 12px;font-weight:600;text-decoration:none}.mainnav a:hover{background:var(--bg)}.mainnav a.active{color:var(--accent);background:#e9effd}.userbox{align-items:center;gap:8px;margin-left:auto;display:flex}.who{text-align:right;margin-right:6px;line-height:1.25;display:grid}.who span{color:var(--muted);font-size:12px}main{padding:16px 20px 40px}.weekbar{align-items:center;gap:12px;margin-bottom:14px;display:flex}.weektabs{border-bottom:1px solid var(--line-2);flex:1;gap:2px;display:flex;overflow-x:auto}.weektab{cursor:pointer;color:var(--ink-2);white-space:nowrap;background:0 0;border:1px solid #0000;border-bottom:none;border-radius:8px 8px 0 0;padding:7px 14px;font-weight:600}.weektab:hover{background:#fff}.weektab.active{border-color:var(--line-2);color:var(--ink);background:#fff;margin-bottom:-1px;box-shadow:inset 0 3px #00b050}.titlebar{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:12px;display:flex}.titlebar h1{font-size:22px}.summary{flex-wrap:wrap;gap:6px;display:flex}.chip{border:1px solid var(--line-2);cursor:pointer;background:#fff;border-radius:999px;align-items:center;gap:7px;padding:5px 12px;display:inline-flex}.chip .code{font-size:13px;font-weight:600}.chip b{font-variant-numeric:tabular-nums}.chip.on{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink)}.swatch{vertical-align:-1px;border-radius:3px;width:12px;height:12px;display:inline-block}.swatch.blank{border:1px solid var(--line-2);background:repeating-linear-gradient(45deg,#fff 0 3px,#ccd 3px 5px)}.filters{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px;display:flex}.filters input[type=search]{width:280px;max-width:100%}.toggle{color:var(--ink-2);align-items:center;gap:6px;font-weight:600;display:inline-flex}.depttabs{display:none}.grid{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:14px;transition:opacity .15s;display:grid}.grid.loading{opacity:.5}.dept{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.dept table{border-collapse:collapse;table-layout:fixed;width:100%}.c-no{width:34px}.c-serv{width:92px}.c-st{width:66px}.dept th,.dept td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:5px 6px}.dept-head th{background:var(--navy);color:#fff;letter-spacing:.02em;padding:10px 12px;font-size:15px}.col-head th{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:#f7f8fa;font-size:11px;font-weight:700}.col-head th:nth-child(n+4){text-align:center}.team-head td{background:var(--team);color:var(--team-ink);border-bottom-color:#949494;font-weight:700}.team-head td:first-child{text-align:center}.team-head .count{opacity:.75;margin-left:8px;font-size:12px;font-weight:500}.addbtn{cursor:pointer;background:#ffffff8c;border:0;border-radius:6px;padding:2px 8px;font-size:12px;font-weight:700}.addbtn:hover{background:#fff}.job td.no{text-align:right;color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.job td.title{overflow:hidden}.linkish{text-align:left;cursor:pointer;background:0 0;border:0;width:100%;padding:0;line-height:1.3}.linkish:hover{color:var(--accent);text-decoration:underline}.note-dot{background:var(--accent);vertical-align:2px;border-radius:50%;width:6px;height:6px;margin-left:5px;display:inline-block}.job td.serv{color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.job td.st{text-align:center;padding:3px 4px}.job:hover td{background:#fafbfd}.job.empty td{color:var(--muted);font-size:12px;font-style:italic}.team:not(.editable) .job .title .linkish{color:inherit}.pill{border:1px solid var(--line-2);text-align:center;text-align-last:center;letter-spacing:.02em;border-radius:6px;width:100%;min-width:0;padding:3px 2px;font-size:12px;font-weight:700;display:inline-block}select.pill{appearance:none;cursor:pointer;background-image:none}select.pill:hover{filter:brightness(.95)}.pill.blank{color:#b7bcc8;background:#fff;border-style:dashed}span.pill.blank{border-color:#0000}select.pill option{color:var(--ink);text-align:left;background:#fff}.legend{color:var(--ink-2);flex-wrap:wrap;gap:18px;margin-top:18px;font-size:13px;display:flex}.empty-state{text-align:center;justify-items:center;gap:10px;padding:80px 16px;display:grid}.modal-backdrop{z-index:50;background:#11182773;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;width:100%;max-width:480px;max-height:calc(100vh - 32px);overflow:auto;box-shadow:0 20px 60px #00000040}.modal.wide{max-width:640px}.modal header{border-bottom:1px solid var(--line);background:#fff;justify-content:space-between;align-items:center;padding:16px 20px;display:flex;position:sticky;top:0}.modal header h2{font-size:17px}.modal .x{cursor:pointer;color:var(--muted);background:0 0;border:0;font-size:24px;line-height:1}.modal-body{padding:18px 20px}.form{gap:14px;display:grid}.form fieldset{border:0;gap:14px;margin:0;padding:0;display:grid}.form .row{grid-template-columns:1fr 1fr;gap:12px;display:grid}.form label.check{align-items:flex-start;gap:8px;font-weight:500;display:flex}.form label.check input{margin-top:2px}.actions{align-items:center;gap:8px;display:flex}.history{border-top:1px solid var(--line);margin-top:22px;padding-top:14px}.history h3{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:8px;font-size:13px}.history ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.history li{gap:2px;display:grid}.history small{color:var(--muted)}.page{max-width:1100px;margin:0 auto}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:16px;display:flex}.page-head h1{margin-bottom:4px;font-size:22px}.card{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#fff;overflow:auto}.card-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:12px 14px;display:flex}.card-head h2{font-size:16px}table.list{border-collapse:collapse;width:100%}table.list th,table.list td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:10px 14px}table.list th{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:#f7f8fa;font-size:11px}tr.inactive td,li.inactive{opacity:.5}.role{background:#eef0f4;border-radius:999px;padding:2px 8px;font-size:12px;font-weight:700}.role-admin{color:#fff;background:#1f2a44}.role-head{color:#2f5bc4;background:#e9effd}.teams-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:14px;display:grid}.teamlist{margin:0;padding:0;list-style:none}.teamlist li{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:8px 14px;display:flex}.teamlist .n{width:20px;color:var(--muted);text-align:right;font-size:12px}.teamlist .name{flex:1;font-weight:600}.teamlist .tools{gap:4px;display:flex}.icon{border:1px solid var(--line-2);cursor:pointer;background:#fff;border-radius:6px;width:28px;height:28px}.icon:disabled{opacity:.35;cursor:default}.beta-tag{color:#6b4fd8;white-space:nowrap;background:#efeafe;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:700}.kpis{flex-wrap:wrap;gap:10px;margin-bottom:14px;display:flex}.kpi{border:1px solid var(--line);border-radius:var(--radius);min-width:120px;box-shadow:var(--shadow);background:#fff;padding:10px 16px;display:grid}.kpi b{font-variant-numeric:tabular-nums;font-size:24px;line-height:1.1}.kpi span{color:var(--muted);font-size:12px}.kpi.stages{flex-wrap:wrap;align-items:center;gap:6px;margin-left:auto;display:flex}.stagechip{border:1px solid var(--line-2);cursor:pointer;background:#fff;border-radius:999px;align-items:center;gap:6px;padding:5px 11px;font-size:13px;font-weight:600;display:inline-flex}.stagechip b{font-size:14px}.stagechip.on{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink)}.clients{gap:12px;transition:opacity .15s;display:grid}.clients.loading{opacity:.5}.client{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#fff;overflow:hidden}.client-head{background:var(--navy);color:#fff;cursor:pointer;text-align:left;border:0;align-items:center;gap:12px;width:100%;padding:12px 16px;display:flex}.client-head .chev{opacity:.7;width:14px}.client-name{font-size:17px;font-weight:700}.client-meta{color:#c3cbe0;font-size:13px}.client-meta b{color:#fff}.mixbar{background:#ffffff26;border-radius:4px;width:160px;height:8px;margin-left:auto;display:flex;overflow:hidden}.mixbar i{display:block}.work{border-top:1px solid var(--line);grid-template-columns:minmax(200px,1.6fr) 150px repeat(3,minmax(120px,1fr)) 64px;align-items:center;gap:12px;padding:10px 16px;display:grid}.work:hover:not(.work-headrow){background:#fafbfd}.work-headrow{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:#f7f8fa;padding-top:7px;padding-bottom:7px;font-size:11px;font-weight:700}.work-headrow span:last-child{text-align:center}.w-title{gap:2px;min-width:0;display:grid}.w-title strong{font-size:15px;line-height:1.3}.w-title small{color:var(--muted)}.w-people{align-items:center;gap:8px;display:flex}.avatars{display:flex}.av{color:#fff;background:#64748b;border:2px solid #fff;border-radius:50%;place-items:center;width:28px;height:28px;margin-left:-8px;font-size:11px;font-weight:700;display:grid}.av:first-child{margin-left:0}.av.d1{background:#2f6fed}.av.d2{background:#c2410c}.av.d3{background:#0f766e}.av.more{color:var(--ink-2);background:#e3e6ec}.pcount{color:var(--ink-2);white-space:nowrap;font-size:13px}.pcount b{color:var(--ink);font-size:16px}.w-dept{flex-wrap:wrap;gap:4px;min-width:0;display:flex}.w-dept .none{color:#c3c8d2}.who-chip{border:1px solid var(--line-2);cursor:pointer;background:#fff;border-radius:6px;align-items:center;gap:6px;max-width:100%;padding:3px 7px 3px 0;font-size:12px;display:inline-flex;overflow:hidden}.who-chip:hover{border-color:var(--ink-2)}.who-chip .bar{align-self:stretch;width:4px}.who-chip .nm{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.who-chip .st{color:var(--muted);font-size:11px;font-weight:700}.w-stage{text-align:center}.w-stage .pill{width:52px}.footnote{max-width:760px;margin-top:16px;font-size:13px}@media (width<=1100px){.work{grid-template-columns:1fr auto;gap:8px 12px}.work-headrow{display:none}.w-title{grid-column:1}.w-stage{grid-area:1/2}.w-people,.w-dept{grid-column:1/-1}.w-dept:before{content:attr(data-label);text-transform:uppercase;letter-spacing:.05em;width:78px;color:var(--muted);align-self:center;font-size:11px;font-weight:700}.kpi.stages{margin-left:0}}@media (width<=720px){.mixbar{width:70px}.client-head{flex-wrap:wrap;gap:4px 10px}.kpis{grid-template-columns:1fr 1fr;display:grid}.kpi{min-width:0}.kpi.stages{grid-column:1/-1}}@media (width<=1180px){.c-serv{width:78px}.c-st{width:58px}.dept th,.dept td{padding:5px 4px}}@media (width<=980px){.grid{grid-template-columns:1fr}.depttabs{background:#e8eaef;border-radius:10px;gap:4px;margin-bottom:10px;padding:4px;display:flex}.depttabs button{cursor:pointer;color:var(--ink-2);background:0 0;border:0;border-radius:7px;flex:1;padding:8px;font-weight:700}.depttabs button.active{color:var(--ink);box-shadow:var(--shadow);background:#fff}.dept:not(.mobile-on){display:none}.c-serv{width:90px}.c-st{width:64px}.login{grid-template-columns:1fr}.login-art{display:none}}@media (width<=720px){main{padding:12px 16px 32px}.topbar{flex-wrap:wrap;gap:8px 12px;padding:10px 16px}.userbox{width:100%;margin-left:0}.who{text-align:left;margin-right:auto}.mainnav{order:3;width:100%}.brand>span:last-child{font-size:15px}.filters input[type=search]{width:100%}.form .row{grid-template-columns:1fr}.c-serv{width:70px}.weekbar{flex-wrap:wrap}}@media print{@page{size:A3 landscape;margin:10mm}body{background:#fff}.topbar,.weekbar,.filters,.summary,.depttabs,.addbtn,.legend{display:none!important}main{padding:0}.grid{gap:6px;grid-template-columns:repeat(3,1fr)!important}.dept{box-shadow:none;border-color:#999;border-radius:0;display:block!important}.dept th,.dept td{border:1px solid #bbb;padding:2px 4px;font-size:10px}.dept-head th{color:#000;background:#fff}.pill{-webkit-print-color-adjust:exact;print-color-adjust:exact;border:0;border-radius:0}.team-head td{-webkit-print-color-adjust:exact;print-color-adjust:exact}.job.empty{display:none}}
