
/* ============================================================
   COOPER YOUNG PRACTICE DESK — design system v3
   Brand burgundy used only for primary actions, selected
   navigation, active tabs and meaningful emphasis.
   Spacing scale: 4px increments (--s1 … --s10).
   ============================================================ */
:root{
  color-scheme:light;
  --brand:#790D32; --brand-deep:#570820; --brand-tint:#F6EBEF; --brand-tint-2:#EED9E1; --on-brand:#FFFFFF;
  --bg:#F7F6F3; --surface:#FFFFFF; --surface-2:#F3F1EE; --surface-3:#ECE9E5;
  --ink:#28252A; --ink-2:#4A464C; --muted:#716C74; --faint:#9C979E;
  --line:#E6E1DD; --line-soft:#EFEBE8; --line-strong:#D3CDC8;
  --ok:#2F6B45; --ok-bg:#E8F2EB; --warn:#8A5A00; --warn-bg:#FBF1DD; --err:#B42318; --err-bg:#FCEBEA; --info:#2F4F7F; --info-bg:#EAF0F8; --neu-bg:#EFEDEA;
  --focus:#790D32;
  --f-ui:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  --f-head:'Manrope','Inter',system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  --f-title:var(--f-head);
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--s7:28px;--s8:32px;--s10:40px;
  --r-sm:4px;--r:6px;--r-lg:10px;
  --side-w:248px;--side-w-c:64px;--top-h:60px;
  --shadow-pop:0 12px 32px rgba(40,20,28,.14),0 2px 6px rgba(40,20,28,.08);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){color-scheme:dark;
  --brand:#E3879F;--brand-deep:#F0A3B7;--brand-tint:#3A1E27;--brand-tint-2:#4A2632;--on-brand:#260A13;
  --bg:#17151A;--surface:#201D22;--surface-2:#27242A;--surface-3:#2F2B32;
  --ink:#F1EDF0;--ink-2:#D8D2D7;--muted:#AEA7AD;--faint:#857E85;
  --line:#37323A;--line-soft:#2D2930;--line-strong:#4A444D;
  --ok:#7FC79A;--ok-bg:#1C3326;--warn:#E9C276;--warn-bg:#3A2D12;--err:#FF9A90;--err-bg:#40201E;--info:#A9C2EA;--info-bg:#1E2A40;--neu-bg:#2C2830;--focus:#E3879F;
  --shadow-pop:0 12px 32px rgba(0,0,0,.5);}}
:root[data-theme="dark"]{color-scheme:dark;
  --brand:#E3879F;--brand-deep:#F0A3B7;--brand-tint:#3A1E27;--brand-tint-2:#4A2632;--on-brand:#260A13;
  --bg:#17151A;--surface:#201D22;--surface-2:#27242A;--surface-3:#2F2B32;
  --ink:#F1EDF0;--ink-2:#D8D2D7;--muted:#AEA7AD;--faint:#857E85;
  --line:#37323A;--line-soft:#2D2930;--line-strong:#4A444D;
  --ok:#7FC79A;--ok-bg:#1C3326;--warn:#E9C276;--warn-bg:#3A2D12;--err:#FF9A90;--err-bg:#40201E;--info:#A9C2EA;--info-bg:#1E2A40;--neu-bg:#2C2830;--focus:#E3879F;
  --shadow-pop:0 12px 32px rgba(0,0,0,.5);}

*{box-sizing:border-box}
html,body{margin:0;background:var(--bg)}
body{color:var(--ink);font-family:var(--f-ui);font-size:14px;line-height:20px;-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}
a{color:var(--brand);text-underline-offset:2px}
a:hover{color:var(--brand-deep)}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:var(--r-sm)}
h1,h2,h3,h4{margin:0;text-wrap:balance}
h1{font-family:var(--f-title);font-weight:600;font-size:28px;line-height:36px;letter-spacing:-.01em}
h2{font-size:16px;line-height:24px;font-weight:600}
h3{font-size:14px;line-height:20px;font-weight:600}
p{margin:0}
button,input,select,textarea{font:inherit;color:inherit}
[hidden]{display:none!important}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- shell ---------- */
.app{display:grid;grid-template-columns:var(--side-w) minmax(0,1fr);min-height:100vh}
.app.collapsed{grid-template-columns:var(--side-w-c) minmax(0,1fr)}
.side{position:sticky;top:0;height:100vh;overflow-y:auto;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:var(--s4) var(--s3);gap:var(--s5);z-index:30}
.brand{display:flex;align-items:center;gap:var(--s3);padding:0 var(--s1);min-height:44px;text-decoration:none;color:var(--ink)}
.brand img{width:40px;height:40px;border-radius:var(--r);flex:none;background:#fff;border:1px solid var(--line)}
.brand-t{display:flex;flex-direction:column;min-width:0}
.brand-t b{font-weight:600;font-size:14px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand-t span{font-size:12px;line-height:16px;color:var(--muted);white-space:nowrap}
.navg{display:flex;flex-direction:column;gap:2px}
.navg-h{font-size:12px;line-height:16px;color:var(--faint);padding:0 var(--s3) var(--s1);font-weight:500}
.nav-a{display:flex;align-items:center;gap:var(--s3);min-height:36px;padding:0 var(--s3);border-radius:var(--r);color:var(--ink-2);text-decoration:none;white-space:nowrap;position:relative}
.nav-a svg{flex:none;width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;color:var(--muted)}
.nav-a:hover{background:var(--surface-2);color:var(--ink)}
.nav-a[aria-current="page"]{background:var(--brand-tint);color:var(--brand);font-weight:500}
.nav-a[aria-current="page"] svg{color:var(--brand)}
.nav-a .lbl{flex:1;overflow:hidden;text-overflow:ellipsis}
.nav-a .cnt{font-size:12px;line-height:18px;color:var(--muted);min-width:20px;text-align:right}
.nav-a .cnt.hot{color:var(--err);font-weight:600}
.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:var(--s2)}
.collapse-btn{display:flex;align-items:center;gap:var(--s3);min-height:36px;padding:0 var(--s3);border:none;background:none;border-radius:var(--r);color:var(--muted);cursor:pointer;width:100%}
.collapse-btn:hover{background:var(--surface-2);color:var(--ink)}
.collapse-btn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
.app.collapsed .brand-t,.app.collapsed .navg-h,.app.collapsed .nav-a .lbl,.app.collapsed .nav-a .cnt,.app.collapsed .collapse-btn .lbl{display:none}
.app.collapsed .nav-a,.app.collapsed .collapse-btn{justify-content:center;padding:0}
.app.collapsed .nav-a .cnt.hot{display:block;position:absolute;top:4px;right:6px;width:7px;height:7px;min-width:0;border-radius:50%;background:var(--err);font-size:0}
.app.collapsed .collapse-btn svg{transform:scaleX(-1)}

.mainwrap{min-width:0;display:flex;flex-direction:column}
.top{position:sticky;top:0;z-index:20;height:var(--top-h);background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:saturate(1.2) blur(6px);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:var(--s3);padding:0 var(--s6)}
.top .menu-btn{display:none}
.search{position:relative;flex:1 1 auto;max-width:520px}
.search input{width:100%;height:38px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:0 var(--s10) 0 36px;font-size:14px}
.search input::placeholder{color:var(--faint)}
.search>svg{position:absolute;left:12px;top:11px;width:16px;height:16px;stroke:var(--muted);fill:none;stroke-width:1.8}
.search kbd{position:absolute;right:10px;top:9px;font:12px/18px var(--f-ui);color:var(--faint);border:1px solid var(--line);border-radius:var(--r-sm);padding:0 6px;background:var(--surface-2)}
.sres{position:absolute;top:44px;left:0;right:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:var(--s2);max-height:70vh;overflow:auto;z-index:50}
.sres-h{font-size:12px;color:var(--faint);padding:var(--s2) var(--s2) var(--s1)}
.sres a{display:flex;justify-content:space-between;gap:var(--s3);padding:var(--s2);border-radius:var(--r);text-decoration:none;color:var(--ink)}
.sres a:hover,.sres a.on{background:var(--surface-2)}
.sres a small{color:var(--muted);font-size:12px;white-space:nowrap}
.top-sp{flex:1}
.viewas{display:flex;align-items:center;gap:var(--s2);font-size:13px;color:var(--muted)}
.viewas select{height:34px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:0 var(--s2);max-width:170px}

.canvas{padding:var(--s6) var(--s6) var(--s10);width:100%;max-width:1600px}
.proto{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s2) var(--s4);border:1px solid color-mix(in srgb,var(--warn) 30%,var(--line));background:var(--warn-bg);color:var(--warn);border-radius:var(--r);padding:var(--s2) var(--s2) var(--s2) var(--s4);font-size:13px;line-height:18px;margin-bottom:var(--s5)}
.proto a{color:inherit;font-weight:500}
.proto>span:first-child{flex:1 1 420px}

/* ---------- page header ---------- */
.ph{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--s4);margin-bottom:var(--s5)}
.ph-t{display:flex;flex-direction:column;gap:var(--s1);min-width:0;max-width:760px}
.ph-t .sub{color:var(--muted);font-size:14px;line-height:20px}
.crumb{font-size:13px;color:var(--muted);display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap}
.crumb a{color:var(--muted);text-decoration:none}.crumb a:hover{color:var(--brand)}
.stack{display:flex;flex-direction:column;gap:var(--s5)}
.stack-s{display:flex;flex-direction:column;gap:var(--s3)}
.cols{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:var(--s5);align-items:start}
.cols-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--s5);align-items:start}

/* ---------- buttons ---------- */
.btns{display:flex;flex-wrap:wrap;gap:var(--s2);align-items:center}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-height:36px;padding:0 var(--s4);border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface);color:var(--ink);font-weight:500;font-size:14px;cursor:pointer;text-decoration:none;white-space:nowrap;transition:background .12s,border-color .12s}
.btn:hover{background:var(--surface-2);color:var(--ink)}
.btn:active{background:var(--surface-3)}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.btn.primary{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
.btn.primary:hover{background:var(--brand-deep);border-color:var(--brand-deep);color:var(--on-brand)}
.btn.danger{color:var(--err);border-color:color-mix(in srgb,var(--err) 35%,var(--line))}
.btn.danger:hover{background:var(--err-bg)}
.btn.danger.solid{background:var(--err);border-color:var(--err);color:#fff}
.btn.ghost{border-color:transparent;background:transparent}
.btn.ghost:hover{background:var(--surface-2)}
.btn.sm{min-height:30px;padding:0 var(--s3);font-size:13px}
.btn.xs{min-height:26px;padding:0 var(--s2);font-size:12px}
.btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.linkbtn{background:none;border:none;padding:0;color:var(--brand);cursor:pointer;font-weight:500;text-decoration:underline;text-underline-offset:2px;font-size:inherit}

/* ---------- cards & sections ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);min-width:0}
.card-h{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s2) var(--s4);padding:var(--s4) var(--s5);border-bottom:1px solid var(--line-soft)}
.card-h .sub{color:var(--muted);font-size:13px}
.card-b{padding:var(--s4) var(--s5)}
.card-f{padding:var(--s3) var(--s5);border-top:1px solid var(--line-soft);font-size:13px;color:var(--muted)}
.flat{border:none;border-radius:0}

/* ---------- KPI strip (one row, joined; not separate cards) ---------- */
.kstrip{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.kpi{display:flex;flex-direction:column;gap:2px;padding:var(--s4) var(--s5);border:none;border-right:1px solid var(--line-soft);background:none;text-align:left;cursor:pointer;color:inherit;text-decoration:none;min-width:0}
.kpi:last-child{border-right:none}
.kpi:hover{background:var(--surface-2)}
.kpi .l{font-size:13px;color:var(--muted)}
.kpi .v{font-size:26px;line-height:34px;font-weight:600;letter-spacing:-.01em}
.kpi .m{font-size:12px;line-height:16px;color:var(--muted)}
.kpi.err .v{color:var(--err)}.kpi.warn .v{color:var(--warn)}

/* ---------- tables ---------- */
.tbox{overflow-x:auto}
table{border-collapse:separate;border-spacing:0;width:100%}
th{position:sticky;top:0;font-size:12px;line-height:16px;font-weight:500;color:var(--muted);text-align:left;padding:var(--s2) var(--s3);border-bottom:1px solid var(--line);background:var(--surface-2);white-space:nowrap;z-index:1}
th:first-child,td:first-child{padding-left:var(--s5)}
th:last-child,td:last-child{padding-right:var(--s5)}
td{padding:10px var(--s3);border-bottom:1px solid var(--line-soft);vertical-align:top}
tbody tr:last-child td{border-bottom:none}
tr.rowlink{cursor:pointer}
tr.rowlink:hover td{background:color-mix(in srgb,var(--surface-2) 70%,var(--surface))}
tr.sel td{background:var(--brand-tint)!important}
td.num,th.num{text-align:right;white-space:nowrap}
td.nw,th.nw{white-space:nowrap}
.selc{width:40px;padding-right:0!important}
.selc input{width:16px;height:16px;accent-color:var(--brand);margin:2px 0 0}
.cell-t{display:block;font-weight:500;color:var(--ink)}
a.cell-t{text-decoration:none}a.cell-t:hover{color:var(--brand);text-decoration:underline}
.meta{display:block;font-size:12px;line-height:16px;color:var(--muted)}
.meta.bad,.bad{color:var(--err)}
.meta.warnc{color:var(--warn)}
.ident{font-variant-numeric:tabular-nums;letter-spacing:.01em;color:var(--ink-2)}
.tfoot-note{padding:var(--s3) var(--s5);font-size:13px;color:var(--muted);border-top:1px solid var(--line-soft)}

/* ---------- status indicators ---------- */
.pill{display:inline-flex;align-items:center;gap:6px;padding:1px 8px;border-radius:999px;font-size:12px;line-height:18px;font-weight:500;white-space:nowrap;background:var(--neu-bg);color:var(--ink-2)}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.75}
.pill.plain::before{display:none}
.p-ok{background:var(--ok-bg);color:var(--ok)}.p-warn{background:var(--warn-bg);color:var(--warn)}.p-err{background:var(--err-bg);color:var(--err)}.p-info{background:var(--info-bg);color:var(--info)}.p-neu{background:var(--neu-bg);color:var(--ink-2)}.p-brand{background:var(--brand-tint);color:var(--brand)}
.tags{display:flex;flex-wrap:wrap;gap:4px}
.flagset{display:flex;flex-wrap:wrap;gap:4px}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}
.d-ok{background:var(--ok)}.d-warn{background:#C98A00}.d-err{background:var(--err)}.d-info{background:var(--info)}.d-neu{background:var(--line-strong)}
.stagebar{display:flex;gap:2px;margin-top:6px;max-width:180px}
.stagebar i{flex:1;height:4px;border-radius:2px;background:var(--line)}
.stagebar i.on{background:var(--brand)}

/* ---------- tabs ---------- */
.tabs{display:flex;gap:var(--s5);border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none;padding:0 var(--s5)}
.tabs::-webkit-scrollbar{display:none}
.tabs.flush{padding:0}
.tab{position:relative;min-height:44px;background:none;border:none;padding:0;color:var(--muted);cursor:pointer;white-space:nowrap;font-weight:500;text-decoration:none;display:inline-flex;align-items:center;gap:6px}
.tab:hover{color:var(--ink)}
.tab[aria-selected="true"]{color:var(--brand)}
.tab[aria-selected="true"]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--brand);border-radius:2px 2px 0 0}
.tab .n{font-size:12px;color:var(--faint);font-weight:400}
.tab .n.hot{color:var(--err);font-weight:600}
.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--r);overflow:hidden;background:var(--surface)}
.seg button{border:none;background:none;min-height:32px;padding:0 var(--s3);cursor:pointer;font-size:13px;color:var(--ink-2);border-right:1px solid var(--line)}
.seg button:last-child{border-right:none}
.seg button[aria-pressed="true"]{background:var(--brand-tint);color:var(--brand);font-weight:500}

/* ---------- filters & forms ---------- */
.toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--s3);padding:var(--s4) var(--s5)}
.field{display:flex;flex-direction:column;gap:6px;font-size:13px;line-height:16px;color:var(--ink-2);font-weight:500;min-width:0}
.field .hint{font-weight:400;color:var(--muted);font-size:12px}
.field .err-msg{font-weight:400;color:var(--err);font-size:12px}
.inp,.field input:not([type=checkbox]):not([type=radio]),.field select,.field textarea{min-height:38px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface);color:var(--ink);font-size:14px;font-weight:400;width:100%}
.field textarea{min-height:88px;resize:vertical;line-height:20px}
.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--faint)}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}
.field.invalid input,.field.invalid select{border-color:var(--err)}
.field.inline{flex-direction:row;align-items:center;gap:var(--s2)}
.field.inline select{min-height:30px;padding:2px 8px;font-size:13px;width:auto}
.fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--s4)}
.fsec{display:flex;flex-direction:column;gap:var(--s3);padding-top:var(--s5);border-top:1px solid var(--line-soft)}
.fsec:first-of-type{border-top:none;padding-top:0}
.fsec>h3{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s2)}
.fsec>h3 span{font-weight:400;color:var(--muted);font-size:12px}
.checks{display:flex;flex-wrap:wrap;gap:var(--s2)}
.checks label{display:inline-flex;align-items:center;gap:var(--s2);min-height:34px;padding:0 var(--s3);border:1px solid var(--line-strong);border-radius:var(--r);font-size:13px;cursor:pointer;background:var(--surface)}
.checks label:has(input:checked){border-color:var(--brand);background:var(--brand-tint);color:var(--brand)}
.checks input{accent-color:var(--brand)}
.qsel{min-height:30px;font-size:13px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:2px 6px;max-width:100%;color:var(--ink)}

/* ---------- key-value ---------- */
.kv{display:grid;grid-template-columns:minmax(120px,38%) minmax(0,1fr);gap:10px var(--s4);margin:0}
.kv dt{color:var(--muted);font-size:13px}
.kv dd{margin:0;overflow-wrap:anywhere;white-space:pre-line}
.kv dd .none{color:var(--faint)}

/* ---------- lists ---------- */
.ilist{list-style:none;margin:0;padding:0}
.ilist>li{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s3) var(--s5);border-bottom:1px solid var(--line-soft)}
.ilist>li:last-child{border-bottom:none}
.ilist .grow{flex:1;min-width:0}
.ilist .act{flex:none;display:flex;gap:var(--s2);align-items:center}
.ilist .dot{margin-top:6px}
.empty{padding:var(--s8) var(--s5);color:var(--muted);text-align:center;display:flex;flex-direction:column;gap:var(--s3);align-items:center}
.empty b{color:var(--ink);font-weight:500}
.loading{padding:var(--s10);display:flex;flex-direction:column;gap:var(--s3)}
.skel{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--surface-2),var(--surface-3),var(--surface-2));background-size:200% 100%;animation:sk 1.2s infinite linear}
@keyframes sk{to{background-position:-200% 0}}

/* ---------- client workspace ---------- */
.ws-head{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ws-top{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:var(--s4);padding:var(--s5) var(--s5) var(--s4)}
.ws-name{font-family:var(--f-title);font-size:28px;line-height:34px;font-weight:600;letter-spacing:-.01em}
.ws-facts{display:flex;flex-wrap:wrap;gap:var(--s1) var(--s5);margin-top:var(--s2);color:var(--muted);font-size:13px}
.ws-facts b{color:var(--ink-2);font-weight:500}
.ws-status{display:flex;flex-wrap:wrap;gap:6px;margin-top:var(--s3)}
/* signature: 12-month obligations timeline */
.tl{position:relative;padding:var(--s3) var(--s5) var(--s4);border-top:1px solid var(--line-soft);background:var(--surface-2)}
.tl-h{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-bottom:var(--s2)}
.tl-track{position:relative;height:64px}
.tl-months{position:absolute;inset:auto 0 0 0;display:grid;grid-template-columns:repeat(12,1fr);font-size:11px;line-height:14px;color:var(--faint)}
.tl-months span{border-left:1px solid var(--line);padding-left:4px}
.tl-months span.now{color:var(--brand);font-weight:600}
.tl-axis{position:absolute;left:0;right:0;top:30px;height:2px;background:var(--line-strong);border-radius:1px}
.tl-today{position:absolute;top:8px;bottom:14px;width:2px;background:var(--brand);border-radius:1px}
.tl-today::after{content:"Today";position:absolute;top:-6px;left:5px;font-size:11px;color:var(--brand);font-weight:600}
.tl-mk{position:absolute;top:22px;transform:translateX(-50%);width:18px;height:18px;border-radius:50%;border:2px solid var(--surface);background:var(--info);cursor:pointer;padding:0;box-shadow:0 0 0 1px var(--line-strong)}
.tl-mk.late{background:var(--err)}.tl-mk.soon{background:#C98A00}.tl-mk.client{background:var(--warn)}.tl-mk.done{background:var(--ok)}
.tl-mk:hover,.tl-mk:focus-visible{transform:translateX(-50%) scale(1.2)}
.tl-od{position:absolute;left:0;top:18px;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--err);font-weight:600;background:var(--err-bg);padding:2px 8px;border-radius:999px;cursor:pointer;border:none}
.tl-tip{position:absolute;z-index:5;background:var(--ink);color:var(--bg);font-size:12px;line-height:16px;padding:6px 8px;border-radius:var(--r);pointer-events:none;white-space:nowrap;transform:translate(-50%,-100%);top:16px}
.tl-legend{display:flex;flex-wrap:wrap;gap:var(--s4);font-size:12px;color:var(--muted);margin-top:var(--s2)}
.tl-legend span{display:inline-flex;align-items:center;gap:6px}
.ws-tabs{background:var(--surface);border-top:1px solid var(--line-soft)}
.ws-tabs .tabs{border-bottom:none}
.actions-list li .grow b{font-weight:500}

/* checklist chips */
.pf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:var(--s2)}
.pf{display:flex;justify-content:space-between;align-items:center;gap:var(--s2);border:1px solid var(--line);border-radius:var(--r);padding:var(--s2) var(--s3);background:var(--surface)}
.pf.held{border-color:color-mix(in srgb,var(--ok) 45%,var(--line));background:color-mix(in srgb,var(--ok-bg) 50%,var(--surface))}
.pf.missing{border-color:color-mix(in srgb,var(--err) 45%,var(--line));background:color-mix(in srgb,var(--err-bg) 50%,var(--surface))}
.pf span{font-size:13px}
.pf select{min-height:28px;font-size:12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);padding:0 4px}

/* stage stepper (job drawer) */
.stepper{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
.step{border:1px solid var(--line);background:var(--surface);border-radius:var(--r);padding:6px 6px 8px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:4px;font-size:11px;line-height:14px;color:var(--muted);min-height:64px}
.step i{display:block;height:3px;border-radius:2px;background:var(--line)}
.step.past i{background:var(--brand)}
.step.cur{border-color:var(--brand);color:var(--brand);background:var(--brand-tint);font-weight:500}
.step.cur i{background:var(--brand)}
.step:hover{border-color:var(--faint)}

/* board v3.1: compact kanban */
.canvas.wide{max-width:none}
.board-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2);margin-bottom:var(--s3)}
.board-bar .sp{flex:1}
.search-in{position:relative;flex:0 1 340px;min-width:200px}
.search-in svg{position:absolute;left:10px;top:10px;width:16px;height:16px;stroke:var(--muted);fill:none;stroke-width:1.8}
.search-in input{width:100%;height:36px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface);padding:0 10px 0 32px;font-size:14px}
.search-in input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}
.qsel.lg{height:36px;min-height:36px;font-size:14px;padding:0 8px}
.chip{height:36px;padding:0 var(--s3);border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);cursor:pointer;font-size:13px;font-weight:500;color:var(--ink-2)}
.chip:hover{background:var(--surface-2)}
.chip.on{background:var(--err-bg);border-color:color-mix(in srgb,var(--err) 40%,var(--line));color:var(--err)}
.bb-sum{font-size:13px;color:var(--muted)}
.bb-sum b{font-weight:600}
.board{display:flex;gap:var(--s3);overflow-x:auto;align-items:flex-start;padding-bottom:var(--s3);height:calc(100vh - 190px);min-height:440px}
.bcol{flex:0 0 280px;display:flex;flex-direction:column;max-height:100%;background:var(--surface-2);border:1px solid var(--line-soft);border-radius:var(--r-lg);min-width:0;transition:background .12s,border-color .12s}
.bcol-h{padding:var(--s3) var(--s3) var(--s2);border-top:3px solid var(--line-strong);border-radius:var(--r-lg) var(--r-lg) 0 0}
.bcol.client .bcol-h{border-top-color:#C98A00}.bcol.team .bcol-h{border-top-color:var(--info)}.bcol.done .bcol-h{border-top-color:var(--ok)}.bcol.sched .bcol-h{border-top-color:var(--line-strong)}
.bcol-t{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s2);font-size:13px;font-weight:600;line-height:18px}
.bcol-t .n{font-weight:500;color:var(--muted);font-size:12px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:0 7px}
.bcol-m{display:flex;gap:var(--s2);font-size:12px;color:var(--muted);margin-top:2px}
.bcol-m .late-n{color:var(--err);font-weight:600}
.bcol-list{overflow-y:auto;padding:0 var(--s2) var(--s2);display:flex;flex-direction:column;gap:6px;scrollbar-width:thin}
.bcol.drop{background:var(--brand-tint);border-color:var(--brand)}
.bcol.rail{flex:0 0 44px;align-items:center;padding:var(--s3) 0;gap:var(--s2);border-top:3px solid var(--line-strong);height:100%;max-height:340px;cursor:default}
.bcol.rail.client{border-top-color:#C98A00}.bcol.rail.team{border-top-color:var(--info)}.bcol.rail.done{border-top-color:var(--ok)}
.rail-t{writing-mode:vertical-rl;transform:rotate(180deg);font-size:12px;font-weight:500;color:var(--muted);white-space:nowrap}
.rail-n{font-size:12px;color:var(--faint)}
.jc{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 10px 8px 12px;display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:border-color .12s,box-shadow .12s}
.jc:hover{border-color:var(--line-strong);box-shadow:0 1px 3px rgba(40,20,28,.08)}
.jc:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
.jc.late::before{content:"";position:absolute;left:-1px;top:-1px;bottom:-1px;width:3px;background:var(--err);border-radius:var(--r) 0 0 var(--r)}
.jc.dragging{opacity:.45}
.jc-top{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s2)}
.jc .t{font-weight:600;font-size:13px;line-height:18px;color:var(--ink);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.av{flex:none;width:22px;height:22px;border-radius:50%;background:var(--brand-tint);color:var(--brand);font-size:10px;font-weight:600;display:grid;place-items:center;letter-spacing:.02em}
.av.none{background:none;border:1px dashed var(--line-strong)}
.jc-sub{display:flex;gap:6px;font-size:12px;line-height:16px;color:var(--muted);white-space:nowrap;overflow:hidden}
.jc-sub b{font-weight:500;color:var(--ink-2);flex:none}
.jc-sub span{overflow:hidden;text-overflow:ellipsis}
.jc-foot{display:flex;align-items:center;gap:6px;margin-top:2px;min-height:24px}
.jc-foot .sp{flex:1}
.due{font-size:11px;line-height:18px;font-weight:500;padding:0 7px;border-radius:999px;background:var(--surface-2);color:var(--ink-2);white-space:nowrap}
.due.late{background:var(--err-bg);color:var(--err)}.due.soon{background:var(--warn-bg);color:var(--warn)}.due.ok{background:var(--ok-bg);color:var(--ok)}
.jc-c{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--muted)}
.jc-c svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:1.8}
.jc-next{width:26px;height:24px;border-radius:var(--r-sm);border:1px solid transparent;background:none;color:var(--muted);cursor:pointer;display:grid;place-items:center;opacity:0;transition:opacity .12s}
.jc:hover .jc-next,.jc:focus-within .jc-next,.jc-next:focus-visible{opacity:1}
.jc-next:hover{background:var(--brand-tint);color:var(--brand);border-color:var(--brand-tint-2)}
.jc-next svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
@media (hover:none){.jc-next{opacity:1}}
.more{font-size:12px;color:var(--muted);padding:4px}
.more-btn{border:1px dashed var(--line-strong);background:none;border-radius:var(--r);padding:8px;font-size:12px;color:var(--ink-2);cursor:pointer}
.more-btn:hover{background:var(--surface)}
@media (max-width:760px){.board{height:calc(100vh - 230px)}.bcol{flex-basis:84vw}}
/* compliance engine screens */
.kstrip-9{grid-template-columns:repeat(auto-fit,minmax(118px,1fr))}
.kstrip-9 .kpi{padding:var(--s3) var(--s4)}
.kstrip-9 .kpi{border-bottom:1px solid var(--line-soft)}
.kstrip-9 .kpi .v{font-size:22px;line-height:28px}
.gen-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--s4)}
.gen-grid .field>span:first-child{font-weight:500}
.pv{border-top:1px solid var(--line);}
.pv-sum{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--s3);padding:var(--s4) var(--s5);background:var(--brand-tint);border-bottom:1px solid var(--brand-tint-2)}
.pv-clients{padding:var(--s3) var(--s5);display:flex;flex-direction:column;gap:var(--s2)}
.pv-c{border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.pv-c>summary,.pv-s>summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:var(--s2);padding:var(--s2) var(--s3);font-size:13px}
.pv-c>summary::-webkit-details-marker,.pv-s>summary::-webkit-details-marker{display:none}
.pv-c>summary::before,.pv-s>summary::before{content:"\25B8";color:var(--muted);margin-right:6px;transition:transform .12s}
.pv-c[open]>summary::before,.pv-s[open]>summary::before{transform:rotate(90deg)}
.pv-ct{flex:1;display:flex;align-items:center;gap:6px}.pv-ct input{accent-color:var(--brand)}
.pv-c table{border-top:1px solid var(--line-soft)}
.pv-s{border-top:1px solid var(--line-soft)}
.pv-s>summary{padding:var(--s3) var(--s5);font-weight:500}
.pv-s>summary .n{font-size:12px;color:var(--muted);font-weight:400;margin-left:6px}
.sev{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;white-space:nowrap}
.sev-b{color:var(--err)}.sev-w{color:var(--warn)}.sev-i{color:var(--info)}
.muted-row td{color:var(--muted)}.muted-row .cell-t{color:var(--muted)}
.jg{border-top:1px solid var(--line-soft)}.jg-h{display:flex;align-items:baseline;gap:var(--s3);padding:var(--s3) var(--s5) var(--s2)}
.item-form{display:flex;gap:6px;flex-wrap:wrap}.item-form .inp{flex:1 1 200px;min-height:36px}
.plain-list{margin:4px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:4px;font-size:13px}
.chk-inline{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2)}.chk-inline input{accent-color:var(--brand)}
/* calendar */
.cal-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s3);padding:var(--s4) var(--s5) var(--s2)}
.cal-bar .sp{flex:1}
.cal-nav{display:flex;align-items:center;gap:var(--s2)}.cal-nav b{min-width:150px;text-align:center;font-size:15px}
.cal-filters{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2);padding:0 var(--s5) var(--s3)}
.cal-key{display:flex;flex-wrap:wrap;gap:var(--s3);padding:0 var(--s5) var(--s3);font-size:12px}
.st{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:500;white-space:nowrap}
.st-err{color:var(--err)}.st-soon{color:var(--warn)}.st-wait{color:#8A5A00}.st-info{color:var(--info)}.st-neu{color:var(--muted)}.st-ok{color:var(--ok)}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--line)}
.cw{font-size:12px;color:var(--muted);padding:6px 8px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.cd{min-height:118px;border-right:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);padding:4px;display:flex;flex-direction:column;gap:2px;min-width:0}
.cd:nth-child(7n){border-right:none}
.cd.out{background:color-mix(in srgb,var(--surface-2) 60%,var(--surface))}.cd.out .cd-n{color:var(--faint)}
.cd.now .cd-n{background:var(--brand);color:var(--on-brand)}
.cd.sel{box-shadow:inset 0 0 0 2px var(--brand)}
.cd-n{align-self:flex-start;border:none;background:none;font-size:12px;font-weight:600;color:var(--ink-2);border-radius:999px;padding:1px 7px;cursor:pointer;display:inline-flex;gap:6px;align-items:center}
.cd-n:hover{background:var(--surface-2)}
.cd-c{font-weight:400;color:var(--muted);font-size:11px}
.ce{display:flex;align-items:center;gap:4px;width:100%;border:1px solid var(--line);background:var(--surface);border-radius:4px;padding:2px 5px;font-size:11px;line-height:15px;cursor:pointer;text-align:left;min-width:0}
.ce:hover{border-color:var(--line-strong);background:var(--surface-2)}
.ce-g{flex:none;width:12px;text-align:center;font-weight:700}
.ce-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.ce-s{flex:none;color:var(--muted);max-width:42%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ce-err{border-color:color-mix(in srgb,var(--err) 40%,var(--line));background:var(--err-bg)}.ce-err .ce-g{color:var(--err)}
.ce-soon .ce-g{color:var(--warn)}.ce-wait .ce-g{color:#8A5A00}.ce-info .ce-g{color:var(--info)}.ce-ok .ce-g{color:var(--ok)}.ce-neu .ce-g{color:var(--muted)}
.cd-more{border:none;background:none;font-size:11px;color:var(--brand);cursor:pointer;text-align:left;padding:1px 4px}
.cal-wk{border-top:1px solid var(--line)}
.heat-b{border:none;border-radius:4px;min-width:34px;padding:4px 6px;font-weight:600;cursor:pointer}
@media (max-width:760px){.cal-grid{grid-template-columns:repeat(7,minmax(44px,1fr));overflow-x:auto}.cd{min-height:70px}.ce-s{display:none}.cal-nav b{min-width:0}}
/* capacity progress rows */
.heat tr.prog-sep td{background:var(--surface-2);text-align:left!important;font-size:12px;font-weight:600;color:var(--ink-2);padding-top:10px;border-top:2px solid var(--line-strong)}
.heat tr.prog-row td{vertical-align:middle}
.heat tr.prog-row td:first-child .meta{font-weight:400}
.heat tr.prog-row.done td b{color:var(--ok)}
.heat tr.prog-row.out td b{color:var(--ink)}
.heat tr.prog-row td .meta{font-size:11px;line-height:14px}
.heat td.prog-od{background:var(--err-bg)}.heat td.prog-od b{color:var(--err)!important}
.heat td.prog-na{color:var(--faint)}
/* sortable headings */
th.sortable{padding:0!important}
th.sortable button{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:4px;width:100%;padding:var(--s2) var(--s3);cursor:pointer;font-size:12px;line-height:16px;font-weight:500;color:var(--muted);white-space:nowrap}
th.sortable:first-child button{padding-left:var(--s5)}
th.sortable.num button{justify-content:flex-end}
th.sortable button:hover{color:var(--ink);background:var(--surface-3)}
th.sortable button:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
th.sortable[aria-sort="ascending"] button,th.sortable[aria-sort="descending"] button{color:var(--brand);font-weight:600}
.sort-i{font-size:10px;opacity:.7}
td.ident a{color:var(--ink-2);text-decoration:none;border-bottom:1px dotted var(--line-strong)}
table.reg td.ident a:hover{color:var(--brand)}
/* monthly status by month */
.ms-bar{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--line-soft);min-width:140px}
.ms-bar i{display:block;height:100%}
.ms-bar .d{background:var(--ok)}.ms-bar .o{background:var(--brand)}.ms-bar .x{background:var(--err)}
/* capacity heat */
.heat td,.heat th{text-align:center;padding:8px 6px}
.heat td:first-child,.heat th:first-child{text-align:left}

/* bulk bar */
.bulk{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2) var(--s3);padding:var(--s2) var(--s5);background:var(--brand-tint);border-top:1px solid var(--brand-tint-2);border-bottom:1px solid var(--brand-tint-2)}
.bulk strong{color:var(--brand);font-weight:600;margin-right:var(--s2)}
.bulk .field{color:var(--ink-2)}

/* comments & timeline */
.feed{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.feed li{display:grid;grid-template-columns:28px minmax(0,1fr);gap:var(--s3);padding:var(--s3) 0;border-bottom:1px solid var(--line-soft)}
.feed li:last-child{border-bottom:none}
.feed .ic{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--surface-2);color:var(--muted)}
.feed .ic svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.feed .ic.brand{background:var(--brand-tint);color:var(--brand)}
.feed .hd{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s2);font-size:12px;color:var(--muted)}
.feed .hd b{color:var(--ink);font-weight:500;font-size:13px}
.feed p{white-space:pre-wrap;overflow-wrap:anywhere;margin-top:2px}

/* drawer, dialog, toast */
.overlay{position:fixed;inset:0;background:rgba(30,14,21,.38);z-index:60;display:flex;justify-content:flex-end;animation:fade .14s ease-out}
.drawer{width:min(720px,100%);height:100%;background:var(--surface);display:flex;flex-direction:column;box-shadow:var(--shadow-pop);animation:slide .18s ease-out}
.drawer-h{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s3);padding:var(--s5) var(--s6) var(--s4);border-bottom:1px solid var(--line)}
.drawer-h h2{font-size:18px;line-height:26px}
.drawer-b{flex:1;overflow:auto;padding:var(--s5) var(--s6) var(--s8);display:flex;flex-direction:column;gap:var(--s5)}
.drawer-f{display:flex;flex-wrap:wrap;gap:var(--s2);padding:var(--s3) var(--s6);border-top:1px solid var(--line);background:var(--surface)}
.drawer-f .sp{flex:1}
.x-btn{width:34px;height:34px;border-radius:var(--r);border:1px solid transparent;background:none;cursor:pointer;display:grid;place-items:center;color:var(--muted);flex:none}
.x-btn:hover{background:var(--surface-2);color:var(--ink)}
.x-btn svg{width:18px;height:18px;stroke:currentColor;stroke-width:1.8;fill:none;stroke-linecap:round}
.dlg-wrap{position:fixed;inset:0;background:rgba(30,14,21,.42);z-index:80;display:grid;place-items:center;padding:var(--s4);animation:fade .12s ease-out}
.dlg{width:min(460px,100%);background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:var(--s6);display:flex;flex-direction:column;gap:var(--s3)}
.dlg p{color:var(--ink-2)}
.dlg .btns{justify-content:flex-end;margin-top:var(--s2)}
.toasts{position:fixed;right:var(--s5);bottom:var(--s5);z-index:90;display:flex;flex-direction:column;gap:var(--s2);max-width:calc(100% - 40px)}
.toast{background:var(--ink);color:var(--bg);padding:10px 14px;border-radius:var(--r);font-size:13px;box-shadow:var(--shadow-pop);display:flex;gap:var(--s3);align-items:center;animation:rise .16s ease-out}
.toast.err{background:var(--err);color:#fff}
@keyframes fade{from{opacity:0}}
@keyframes slide{from{transform:translateX(24px);opacity:.4}}
@keyframes rise{from{transform:translateY(6px);opacity:0}}

/* notes / callouts */
.note{border-left:3px solid var(--line-strong);padding:var(--s2) var(--s3);background:var(--surface-2);border-radius:0 var(--r) var(--r) 0;font-size:13px;color:var(--ink-2)}
.note.warn{border-left-color:#C98A00;background:var(--warn-bg);color:var(--warn)}
.note.err{border-left-color:var(--err);background:var(--err-bg);color:var(--err)}
.note.info{border-left-color:var(--info);background:var(--info-bg);color:var(--info)}
.law a{font-size:12px}
.prog{height:6px;border-radius:3px;background:var(--line-soft);overflow:hidden}
.prog i{display:block;height:100%;background:var(--brand)}
.prog.late i{background:var(--err)}

/* ---------- responsive ---------- */
@media (max-width:1180px){.cols{grid-template-columns:minmax(0,1fr)}}
@media (max-width:1024px){
  .app{grid-template-columns:var(--side-w-c) minmax(0,1fr)}
  .app:not(.expanded) .brand-t,.app:not(.expanded) .navg-h,.app:not(.expanded) .nav-a .lbl,.app:not(.expanded) .nav-a .cnt,.app:not(.expanded) .collapse-btn .lbl{display:none}
  .app:not(.expanded) .nav-a,.app:not(.expanded) .collapse-btn{justify-content:center;padding:0}
  .app:not(.expanded) .nav-a .cnt.hot{display:block;position:absolute;top:4px;right:6px;width:7px;height:7px;min-width:0;border-radius:50%;background:var(--err);font-size:0}
  .app.expanded .side{position:fixed;left:0;width:var(--side-w);box-shadow:var(--shadow-pop)}
  .stepper{grid-template-columns:repeat(4,1fr)}
  .top .menu-btn{display:grid}
}
@media (max-width:760px){
  .app,.app.collapsed{grid-template-columns:minmax(0,1fr)}
  .side{position:fixed;left:0;top:0;width:min(280px,86vw);transform:translateX(-100%);transition:transform .18s ease-out;box-shadow:var(--shadow-pop)}
  .app.mobile-open .side{transform:none}
  .app .brand-t,.app .navg-h,.app .nav-a .lbl,.app .nav-a .cnt{display:revert!important}
  .app .nav-a{justify-content:flex-start!important;padding:0 var(--s3)!important}
  .app .nav-a .cnt.hot{position:static!important;width:auto!important;height:auto!important;background:none!important;font-size:12px!important}
  .collapse-btn{display:none!important}
  .top{padding:0 var(--s3);gap:var(--s2)}
  .viewas span{display:none}
  .search kbd{display:none}
  .canvas{padding:var(--s4) var(--s3) var(--s8)}
  h1,.ws-name{font-size:23px;line-height:30px}
  .card-h,.card-b,.toolbar,.ilist>li,.tabs{padding-left:var(--s4);padding-right:var(--s4)}
  th:first-child,td:first-child{padding-left:var(--s4)}
  .kv{grid-template-columns:minmax(0,1fr)}
  .kv dt{margin-top:var(--s2)}
  .drawer-h,.drawer-b,.drawer-f{padding-left:var(--s4);padding-right:var(--s4)}
  .ws-top,.tl{padding-left:var(--s4);padding-right:var(--s4)}
  .tl-months span:nth-child(even){color:transparent}
  .stepper{grid-template-columns:repeat(2,1fr)}
  /* stacked tables become cards */
  table.stackable thead{display:none}
  table.stackable,table.stackable tbody,table.stackable tr,table.stackable td{display:block;width:100%}
  table.stackable tr{border-bottom:1px solid var(--line);padding:var(--s3) var(--s4)}
  table.stackable td{border:none;padding:2px 0!important}
  table.stackable td[data-l]::before{content:attr(data-l);display:block;font-size:11px;color:var(--faint)}
  table.stackable td.selc{float:right;width:auto}
  .mob-hide{display:none!important}
}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
@media print{.side,.top,.proto,.btns,.bulk{display:none!important}.app{display:block}.card{break-inside:avoid}}

/* job status tracker */
.board.track .bcol{flex:1 1 250px;min-width:240px}
.board.track.due3 .bcol{flex:1 1 320px}
.bcol.london .bcol-h{border-top-color:var(--brand)}
.bcol.over .bcol-h{border-top-color:var(--err);background:var(--err-bg)}
.bcol.over .bcol-t{color:var(--err)}
.bcol.over{border-color:color-mix(in srgb,var(--err) 30%,var(--line-soft))}
.bcol.over-soon .bcol-h{border-top-color:#C98A00}
.bcol.soon .bcol-h{border-top-color:var(--info)}
.bcol.over .jc{background:color-mix(in srgb,var(--err-bg) 55%,var(--surface))}
.jc-ds{display:flex;flex-direction:column;gap:1px;margin-top:2px}
.jc-d{display:flex;justify-content:space-between;gap:var(--s2);font-size:12px;line-height:17px;color:var(--muted)}
.jc-d b{font-weight:500;color:var(--ink-2);text-align:right}
.jc-d.warn b{color:var(--warn)}
.jc-d.bad b,.jc-d.bad span{color:var(--err)}
.bcol-list .more{font-size:12px;color:var(--muted);padding:var(--s2) var(--s1)}

/* ===== billing ===== */
.inv-line{display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:var(--s3);padding:var(--s3);border:1px solid var(--line);border-radius:var(--r);background:var(--surface-2)}
.inv-line textarea{min-height:96px}
.inv-line-n{display:flex;flex-direction:column;gap:var(--s2)}
.inv-tot{display:flex;justify-content:flex-end;gap:var(--s5);font-size:14px;padding:var(--s3) 0;border-top:1px solid var(--line)}
.inv-tot b{font-weight:600;margin-left:4px}
@media (max-width:640px){.inv-line{grid-template-columns:1fr}}
/* print view: Cooper Young invoice, reproduced from the firm's own layout */
#printView{position:fixed;inset:0;z-index:300;background:#5d6066;overflow:auto;padding:0 0 32px}
#printView[hidden]{display:none}
.pv-bar{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:var(--s3);padding:10px 16px;background:var(--surface);border-bottom:1px solid var(--line);flex-wrap:wrap}
.pv-bar .sp{flex:1}
.cy-sheet{width:210mm;min-height:297mm;margin:20px auto;background:#fff;color:#000;box-shadow:0 4px 24px rgba(0,0,0,.35);padding:23mm 26mm 12mm 23mm;font-family:Arial,Helvetica,sans-serif;font-size:9pt;line-height:1.3;position:relative;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.cy-sheet *{box-sizing:border-box}
.cy-sheet table{border-collapse:collapse;width:auto;margin:0}
.cy-sheet th,.cy-sheet td{padding:0;border:0;background:none;font:inherit;color:inherit;text-transform:none;letter-spacing:0;height:auto;vertical-align:top;text-align:left;white-space:normal}
.cy-sheet p{margin:0}
.cy-top{display:flex;justify-content:space-between;align-items:flex-start}
.cy-left{padding-top:11mm}
.cy-kv th{font-weight:700;width:23.5mm;padding-bottom:4.3mm}
.cy-kv td{padding-bottom:4.3mm}
.cy-to{margin-top:2.6mm}
.cy-to b{font-weight:700;display:block;margin-bottom:3mm}
.cy-to-a{line-height:3.75mm}
.cy-lh{width:30mm;text-align:right;display:flex;flex-direction:column;align-items:flex-end}
.cy-lh img{width:27mm;height:auto;display:block;margin-right:0.5mm}
.cy-sub{font-family:"Times New Roman",Georgia,serif;color:#6b6b6b;font-size:8.6pt;line-height:3mm;margin-top:1.5mm;white-space:nowrap}
.cy-addr{color:#6b6b6b;font-size:6.6pt;line-height:3.65mm;margin-top:6.6mm;white-space:nowrap}
.cy-addr a{color:#1a4f9c;text-decoration:underline}
.cy-refs{display:flex;margin-top:4.2mm;margin-bottom:6.4mm}
.cy-refs span:first-child{width:107mm}
.cy-refs b{font-weight:700;display:inline-block;width:23.5mm}
.cy-refs i{font-style:normal}
.cy-vatno b{width:auto;margin-right:1mm}
.cy-tbl{width:161mm!important;border:1px solid #000!important}
.cy-tbl th{font-weight:700;border-bottom:1px solid #000;padding:0.4mm 0.6mm}
.cy-tbl th:nth-child(2),.cy-tbl th:nth-child(3){text-align:center;border-left:1px solid #000}
.cy-tbl th:nth-child(1){width:128.6mm}
.cy-tbl th:nth-child(2){width:17mm}
.cy-tbl td{padding:0 0.6mm}
.cy-tbl td:nth-child(2),.cy-tbl td:nth-child(3){border-left:1px solid #000}
.cy-li td{padding-top:4.6mm}
.cy-li td p+p{margin-top:3.6mm}
.cy-li td.cy-n{vertical-align:bottom;text-align:right}
.cy-fill td{padding-bottom:3mm}
.cy-bank{margin-top:20mm;font-size:7.4pt;line-height:3.45mm}
.cy-bank b{font-weight:700;font-size:7.6pt}
.cy-bank td:first-child{width:20mm}
.cy-bank table td{border:0!important;padding:0!important}
.cy-wc{margin:8.5mm 0 0 80mm;font-style:italic;text-decoration:underline}
.cy-foot{display:flex;width:161mm;align-items:flex-start}
.cy-terms{flex:1;font-size:5.6pt;padding-top:0.6mm}
.cy-tot th{font-weight:700;text-align:right;padding:0.4mm 2.5mm 0.4mm 0;width:20mm}
.cy-tot td{border:1px solid #000;border-top:0;width:17mm;text-align:right;padding:0.4mm 0.6mm}
.cy-tot td+td{width:15.7mm}
.cy-tot tr:first-child td{border-top:1px solid #000}
.cy-tot .cy-grand th,.cy-tot .cy-grand td{font-weight:700;padding-top:1mm;padding-bottom:1mm}
.cy-tot .cy-grand td{border-top:1px solid #000;border-bottom:1px solid #000!important}
.cy-legal{text-align:center;font-size:6.6pt;line-height:3mm;margin-top:8.5mm;width:161mm}
.cy-accred{text-align:center;width:161mm;margin-top:7mm}
.cy-accred img{max-width:112mm;max-height:12mm}
.cy-st th:nth-child(n){width:auto;text-align:right}
.cy-st th:nth-child(2){text-align:left}
.cy-st td{padding:1.2mm 0.6mm}
.cy-st td:nth-child(n+3){border-left:1px solid #000;text-align:right}
.cy-st td:nth-child(2){border-left:1px solid #000}
.cy-st th:nth-child(n+2){border-left:1px solid #000}
.cy-bank-st{margin-top:8mm}
@media print{
 @page{size:A4;margin:0}
 body.printing{background:#fff!important}
 body.printing>*:not(#printView){display:none!important}
 body.printing #printView{position:static;overflow:visible;background:#fff;padding:0}
 body.printing .pv-bar{display:none!important}
 body.printing .cy-sheet{margin:0;box-shadow:none;page-break-after:always}
}

/* QuickBooks-style money bar and reports */
.mbar{display:grid;grid-template-columns:2fr 1fr 1fr;gap:var(--s3)}
.mb-g{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;gap:6px;padding:var(--s3) var(--s4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.mb-g:hover{border-color:var(--line-strong)}
.mb-g:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.mb-h{font-size:13px;color:var(--muted)}.mb-h b{font-size:18px;color:var(--ink);font-weight:600;margin-right:4px}
.mb-bar{display:flex;height:10px;border-radius:999px;overflow:hidden;background:var(--surface-3)}
.mb-bar i{display:block;height:100%}.mb-bar i.o{background:#E07B00}.mb-bar i.n{background:#9C979E}.mb-bar i.p{background:var(--ok)}.mb-bar i.d{background:var(--line-strong)}
.mb-k{display:flex;gap:var(--s4);flex-wrap:wrap;font-size:12px;color:var(--muted)}.mb-k b{font-weight:600}
@media (max-width:900px){.mbar{grid-template-columns:1fr}}
.bulkbar{display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap;padding:var(--s2) var(--s4);background:var(--brand-tint);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
table.rp .rp-g td{background:var(--surface-2);padding-top:10px}
table.rp .rp-st td{border-top:1px solid var(--line-strong);font-weight:500}
.cy-void{position:absolute;top:120mm;left:0;right:0;text-align:center;font:700 64pt Arial,Helvetica,sans-serif;color:rgba(180,35,24,.18);transform:rotate(-24deg);pointer-events:none}
.cy-age{margin-top:6mm}.cy-age th{text-align:right!important;border-left:1px solid #000}.cy-age th:first-child{border-left:0}.cy-age td{border-left:1px solid #000;text-align:right;padding:1mm 0.6mm}.cy-age td:first-child{border-left:0}

.ilist .pr-ids{display:block!important;font-size:12px;line-height:17px;color:var(--muted)}.ilist .pr-ids .ident{display:inline!important;color:var(--ink-2)}
.pr-sort{flex-wrap:wrap;gap:var(--s2);align-items:center}.pr-sort .seg{flex-wrap:wrap}
@media (max-width:560px){.ilist li{flex-wrap:wrap}.ilist li .grow{flex:1 1 calc(100% - 30px)}.ilist li .act{flex:1 1 100%;padding-left:22px;justify-content:flex-start}}

/* =====================================================================
   TYPOGRAPHY SYSTEM
   Manrope for headings, titles and key figures; Inter for everything
   people read and operate. One scale, used everywhere through tokens.
   (The printed invoice and statement keep Arial: the firm's own layout.)
   ===================================================================== */
:root{
  --t-app:24px;--t-page:28px;--t-section:19px;--t-card:16px;--t-body:14px;--t-th:12px;--t-td:13px;--t-label:13px;--t-meta:12px;
  --lh-page:34px;--lh-section:26px;--lh-card:22px;--lh-body:20px;--lh-td:19px;--lh-meta:16px;
  --ls-head:-0.015em;--ls-page:-0.02em;
}
body{font-family:var(--f-ui);font-size:var(--t-body);line-height:var(--lh-body);font-weight:400;letter-spacing:0;font-variant-numeric:normal;text-rendering:optimizeLegibility}
/* figures line up where people compare them; elsewhere proportional, so hyphens and names keep their natural spacing */
td.num,th.num,td.nw,.ident,.kpi .v,.mb-h b,.inv-tot,.cnt,.tab .n,.bcol-t .n,.due,.cy-n{font-variant-numeric:tabular-nums}
button,input,select,textarea{font-family:var(--f-ui)}
/* headings */
h1,.ws-name{font-family:var(--f-head);font-size:var(--t-page);line-height:var(--lh-page);font-weight:700;letter-spacing:var(--ls-page)}
h2{font-family:var(--f-head);font-size:var(--t-section);line-height:var(--lh-section);font-weight:700;letter-spacing:var(--ls-head)}
.card-h h2,.card h2,section.card>h2{font-size:var(--t-card);line-height:var(--lh-card);font-weight:600;letter-spacing:-0.005em}
h3{font-family:var(--f-head);font-size:var(--t-card);line-height:var(--lh-card);font-weight:600;letter-spacing:-0.005em}
h4{font-family:var(--f-head);font-size:var(--t-body);line-height:var(--lh-body);font-weight:600}
.drawer-h h2,.dlg h2{font-family:var(--f-head);font-size:var(--t-section);line-height:var(--lh-section);font-weight:700;letter-spacing:var(--ls-head)}
.ph-t .sub,.drawer-h .meta{font-size:var(--t-body);line-height:var(--lh-body);font-weight:400}
.card-h .sub{font-size:var(--t-meta);line-height:var(--lh-meta)}
.crumb{font-size:var(--t-label);line-height:var(--lh-meta)}
/* application title in the sidebar */
.brand-t .app-title{font-family:var(--f-head);font-size:var(--t-app);line-height:28px;font-weight:700;letter-spacing:var(--ls-page);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand-t #firmName{font-family:var(--f-ui);font-size:var(--t-meta);line-height:var(--lh-meta);font-weight:500;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand{min-height:52px}.brand img{width:36px;height:36px}
/* navigation */
.navg-h{font-family:var(--f-ui);font-size:var(--t-meta);line-height:var(--lh-meta);font-weight:600;letter-spacing:.02em}
.nav-a{font-family:var(--f-ui);font-size:var(--t-body);font-weight:450}
.nav-a[aria-current="page"]{font-weight:600}
.nav-a .cnt{font-size:var(--t-meta);font-weight:500}
/* key figures */
.kpi .l{font-family:var(--f-head);font-size:var(--t-label);line-height:18px;font-weight:600;color:var(--muted);letter-spacing:0}
.kpi .v{font-family:var(--f-head);font-size:var(--t-app);line-height:32px;font-weight:700;letter-spacing:var(--ls-head)}
.kstrip-9 .kpi .v{font-size:22px;line-height:28px}
.kpi .m{font-size:var(--t-meta);line-height:var(--lh-meta);font-weight:400}
.mb-h{font-size:var(--t-label)}.mb-h b{font-family:var(--f-head);font-size:var(--t-section);font-weight:700;letter-spacing:var(--ls-head)}
/* tables: headers 12/600, data 13 */
th,th.sortable button{font-family:var(--f-ui);font-size:var(--t-th);line-height:var(--lh-meta);font-weight:600;letter-spacing:.01em}
td{font-size:var(--t-td);line-height:var(--lh-td);font-weight:400}
td .cell-t,.cell-t{font-weight:500}
td .meta,td .pill,.meta{font-size:var(--t-meta);line-height:var(--lh-meta);font-weight:400}
table.stackable td[data-l]::before{font-size:var(--t-meta);line-height:var(--lh-meta);font-weight:500}
td.num,th.num{font-variant-numeric:tabular-nums}
/* forms, filters, dropdowns */
.field{font-size:var(--t-label);line-height:var(--lh-meta);font-weight:550}
.field input,.field select,.field textarea{font-size:var(--t-body);line-height:var(--lh-body);font-weight:400}
.field .hint,.field .err-msg{font-size:var(--t-meta);line-height:var(--lh-meta);font-weight:400}
.qsel{font-size:var(--t-td);font-weight:400}.qsel.lg{font-size:var(--t-body)}
.kv dt{font-size:var(--t-label);font-weight:500}.kv dd{font-size:var(--t-body)}
.seg button{font-size:var(--t-label);font-weight:500}.seg button[aria-pressed="true"]{font-weight:600}
/* buttons, tabs, status labels */
.btn{font-family:var(--f-ui);font-size:var(--t-body);font-weight:550;letter-spacing:0}
.btn.sm{font-size:var(--t-label)}.btn.xs{font-size:var(--t-meta)}
.linkbtn{font-weight:550}
.tab{font-family:var(--f-ui);font-size:var(--t-body);font-weight:500}.tab[aria-selected="true"]{font-weight:600}
.tab .n{font-size:var(--t-meta);font-weight:500}
.pill,.due,.st{font-family:var(--f-ui);font-size:var(--t-meta);line-height:18px;font-weight:500}
.note{font-size:var(--t-label);line-height:var(--lh-body)}
.empty b{font-family:var(--f-head);font-size:var(--t-card);line-height:var(--lh-card);font-weight:600}
.empty span{font-size:var(--t-body)}
.toast{font-size:var(--t-body);font-weight:500}
/* work board, calendar, timeline: nothing operational below 12px */
.bcol-t{font-family:var(--f-head);font-size:14px;line-height:20px;font-weight:700;letter-spacing:-0.005em}
.bcol-m{font-size:var(--t-meta)}
.jc .t,.jc-top .t{font-size:var(--t-td);font-weight:600}
.jc-sub,.jc-d{font-size:var(--t-meta);line-height:var(--lh-meta)}
.jc-c,.due{font-size:var(--t-meta)}
.rail-t{font-size:var(--t-meta)}
.av{font-size:11px;font-weight:600}
.cal-nav b{font-family:var(--f-head);font-size:var(--t-card);font-weight:700}
.ce,.cd-c,.cd-more{font-size:var(--t-meta);line-height:16px}
.tl-months,.tl-today::after{font-size:var(--t-meta)}
.step{font-size:var(--t-meta)}
.heat tr.prog-row td .meta{font-size:var(--t-meta)}
.sort-i{font-size:10px}
/* search and drop-down results */
.search input{font-size:var(--t-body)}
.sres{font-size:var(--t-label)}
@media (max-width:760px){
  h1,.ws-name{font-size:24px;line-height:30px}
  h2,.drawer-h h2,.dlg h2{font-size:18px;line-height:24px}
  .kpi .v{font-size:22px;line-height:28px}
}
