
  :root{
    /* Light, warm-greige admin theme (Brompton DEFECTS aesthetic) */
    --bg:#f4f3ee; --bg2:#efece4; --panel:#ffffff; --panel2:#faf9f5;
    --gunmetal:#f1efe9; --border:#e8e5dc; --border2:#dedacd;
    --txt:#1b1a16; --muted:#76746a; --muted2:#777268; /* synced to theme.css 2026-08-25 — the old #a6a39a was 2.4:1 on --bg */
    --ink:#14130f;                              /* brand black / active nav */
    --amber:#3b454d; --amber2:#262e34; --amber-dim:#e8ebee; --on-accent:#f4f5f6;   /* accent: gunmetal grey (light) */
    --chase:#9e2f23; --quote:#6b6a69; --reply:#6e6d6c; /* chase = the sanctioned exception hue, synced to theme.css 2026-08-25 */
    --await:#81817f; --notissued:#8a877d; --awarded:#6b6a69; --internal:#7c7a70; --grey:#8a877d;
    --radius:14px; --radius-sm:8px; --radius-lg:20px; --r:8px;
    /* control-size scale (2026-08-16 decision): the .btn family's heights were
       cascade accidents — three competing font-sizes and one hardcoded 38px —
       so control geometry gets tokens like spacing got --sp-N. On-grid:
       36 / 28 / 24. check-control-scale.mjs bans raw-px control heights. */
    --ctl-h:36px; --ctl-h-sm:28px; --ctl-h-xs:24px; --ctl-h-lg:44px; /* lg = the touch floor */
    --mono:ui-monospace,'JetBrains Mono','SF Mono','Cascadia Code','Roboto Mono',Menlo,Consolas,monospace;
    --sp-0:2px; --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:24px; --sp-6:32px; --sp-7:40px; --sp-8:48px; --sp-9:64px;
    --shadow:0 1px 2px rgba(28,27,22,.05);
    --shadow-sm:0 1px 2px rgba(28,27,22,.06);
    --shadow-md:0 1px 2px rgba(28,27,22,.05), 0 8px 20px -14px rgba(28,27,22,.16);
    --shadow-lg:0 1px 3px rgba(28,27,22,.06), 0 14px 30px -18px rgba(28,27,22,.20);
    --shadow-xl:0 4px 14px -8px rgba(28,27,22,.12), 0 30px 60px -30px rgba(28,27,22,.26);
    --ring:0 0 0 1px color-mix(in srgb,var(--amber) 60%,transparent);
    --ring-focus:0 0 0 3px color-mix(in srgb,var(--amber) 26%,transparent), 0 0 0 1px color-mix(in srgb,var(--amber) 72%,transparent);
    --ease:cubic-bezier(.16,.84,.44,1);
    --ease-out:cubic-bezier(.22,1,.36,1);
    --sheen:none;
    --hairline:inset 0 0 0 1px rgba(28,27,22,.015);
    --panel-grad:#ffffff;
    --panel-grad-hover:#faf9f4;
    --amber-glow:none;
    --display:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
    --body:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  }
  *{box-sizing:border-box}
  html,body{margin:0;padding:0}
  body{
    background:var(--bg);
    color:var(--txt); font:400 14px/1.5 var(--body); letter-spacing:0;
    min-height:100vh; padding:0;
    -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  }
  body::after{content:none}
  /* TOOLBOX ambient layer — a near-invisible engineering vector-field behind the
     whole app. Sits above the opaque paper background (negative z-index paints
     above the parent body bg) but below all in-flow content, so it reads as faint
     texture in the gutters, never competing with data. Painted by the IIFE near
     </body>; honours prefers-reduced-motion and pauses on tab-hide. */
  #procBg{position:fixed;inset:0;width:100%;height:100%;z-index:-1;display:block;
    pointer-events:none;opacity:.5;transition:opacity .6s var(--ease,ease)}
  @media (prefers-reduced-motion: reduce){ #procBg{opacity:.34} }
  /* ── BOOT SPLASH ────────────────────────────────────────────────────────────
     The cloud boot is a chain of round-trips (config fetch -> CDN supabase-js ->
     getSession -> hydrate every island -> realBoot), and until realBoot runs the
     shell is PAINTED BUT EMPTY: sidebar and chrome drawn, every register blank,
     the header mid-layout. That half-built state was the first thing a user saw.
     This covers it with the brand until the app is genuinely ready.
     Rules that make it safe rather than another thing that can break:
       * it is markup + CSS in <head>, so it paints on the FIRST frame with no
         JS at all — a splash that needs a script to appear cannot cover a boot
         that fails before that script runs;
       * constant ink, never theme-dependent: it sits in front of the theme.
       * it is removed by splashDone() from realBoot / bootHalt / showLogin, and
         by a failsafe timeout, so no boot path can strand it (see splashDone). */
  #bootSplash{position:fixed;inset:0;z-index:9999;background:#14130f;
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-6);
    opacity:1;transition:opacity .42s var(--ease-out,ease)}
  #bootSplash[hidden]{display:none}
  #bootSplash.is-done{opacity:0;pointer-events:none}
  /* faint blueprint grid — the same drafting language as the app behind it */
  #bootSplash::before{content:"";position:absolute;inset:0;pointer-events:none;
    background-image:linear-gradient(rgba(255,255,255,.028) 1px,transparent 1px),
                     linear-gradient(90deg,rgba(255,255,255,.028) 1px,transparent 1px);
    background-size:48px 48px}
  .bs-mark{position:relative;width:min(268px,58vw);height:auto;display:block;
    opacity:0;animation:bsIn .7s var(--ease-out,ease) .06s forwards}
  .bs-track{position:relative;width:min(268px,58vw);height:2px;border-radius:2px;
    background:rgba(255,255,255,.13);overflow:hidden}
  .bs-track>i{position:absolute;inset:0;display:block;width:38%;border-radius:2px;
    background:rgba(255,255,255,.62);animation:bsSweep 1.15s var(--ease,ease) infinite}
  /* .52 white on the ink ground measures 5.65:1 — AA for 11px text with margin.
     The first draft was .42, which measures 4.10 and fails; small uppercase
     mono at low alpha reads as "subtle" and is simply hard to see. */
  .bs-note{position:relative;font:500 11px/1 var(--mono);letter-spacing:.14em;
    text-transform:uppercase;color:rgba(255,255,255,.52);opacity:0;
    animation:bsIn .7s var(--ease-out,ease) .3s forwards}
  @keyframes bsIn{to{opacity:1}}
  @keyframes bsSweep{0%{transform:translateX(-100%)}100%{transform:translateX(264%)}}
  /* Reduced motion: the splash still does its job (covering the empty shell)
     with everything at its END state — visible, not animating. */
  @media (prefers-reduced-motion:reduce){
    .bs-mark,.bs-note{animation:none;opacity:1}
    .bs-track>i{animation:none;width:100%;background:rgba(255,255,255,.3)}
    #bootSplash{transition:none}
  }
  a{color:var(--amber2);text-decoration:none} a:hover{text-decoration:underline}
  ::selection{background:color-mix(in srgb,var(--amber) 30%,transparent);color:var(--ink)}
  .wrap{max-width:1180px;margin:0 auto;padding:0 var(--sp-6)}
  ::-webkit-scrollbar{height:10px;width:10px}
  ::-webkit-scrollbar-thumb{background:#d8d4c8;border-radius:8px;border:2px solid transparent;background-clip:content-box}
  ::-webkit-scrollbar-thumb:hover{background:#c7c2b4;background-clip:content-box}

  header.top{position:relative;display:flex;align-items:center;gap:var(--sp-4);flex-wrap:wrap;padding:var(--sp-5) 0 var(--sp-5);border-bottom:1px solid var(--border)}
  header.top::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg, color-mix(in srgb,var(--amber) 58%,transparent) 0%, color-mix(in srgb,var(--amber) 16%,transparent) 22%, transparent 55%)}
  .logo{height:30px;width:auto;display:block}
  .titleblock{position:relative;display:flex;flex-direction:column;gap:var(--sp-0);padding-left:var(--sp-4)}
  .titleblock::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);height:24px;width:1px;background:var(--border2)}
  .titleblock h1{margin:0;font-family:var(--display);font-size:18px;font-weight:700;letter-spacing:4px;text-transform:uppercase;color:var(--txt);display:inline-flex;align-items:center;gap:var(--sp-2)}
  .titleblock h1::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--amber)}
  .top .spacer{flex:1 1 auto}
  .src-chip{display:inline-flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);border-radius:8px;border:1px solid var(--border2);background:var(--panel);color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}
  .src-chip .dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:0 0 auto}
  .src-chip.live{color:#dddcda;border-color:color-mix(in srgb,var(--quote) 48%,transparent);background:color-mix(in srgb,var(--quote) 12%,var(--panel))}
  .src-chip.live .dot{background:var(--quote);box-shadow:0 0 8px var(--quote)}
  .src-chip.stale{color:#d8d7d5;border-color:color-mix(in srgb,var(--amber) 48%,transparent);background:color-mix(in srgb,var(--amber) 12%,var(--panel))}
  .src-chip.stale .dot{background:var(--await);box-shadow:0 0 8px color-mix(in srgb,var(--await) 70%,transparent)}
  .src-chip.offline{color:#cbc9c7;border-color:color-mix(in srgb,var(--chase) 48%,transparent);background:color-mix(in srgb,var(--chase) 12%,var(--panel))}
  .src-chip.offline .dot{background:var(--chase);box-shadow:0 0 8px color-mix(in srgb,var(--chase) 70%,transparent)}
  .src-chip.scan{color:var(--reply);border-color:color-mix(in srgb,var(--reply) 48%,transparent)}
  .src-chip.scan .dot{background:var(--reply);animation:pulse 1s infinite}
  @keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}

  .btn{appearance:none;border:1px solid var(--border2);background:linear-gradient(180deg,#1b1d22,#15161a);color:var(--txt);padding:var(--sp-2) var(--sp-4);border-radius:8px;font:inherit;font-weight:600;font-size:12px;min-height:var(--ctl-h);cursor:pointer;white-space:nowrap;box-shadow:var(--sheen),var(--shadow-sm);transition:border-color .18s var(--ease),color .18s var(--ease),background .18s var(--ease),box-shadow .18s var(--ease),transform .12s var(--ease)}
  .btn:hover{border-color:var(--muted2);background:linear-gradient(180deg,#22252c,#1a1c20);color:#fff;box-shadow:var(--sheen),var(--shadow-md)}
  .btn:active{transform:translateY(1px);box-shadow:var(--shadow-sm)}
  .btn:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .btn.primary{background:linear-gradient(180deg,var(--amber),var(--amber2));color:var(--on-accent);border-color:transparent;font-weight:700;box-shadow:var(--amber-glow),inset 0 1px 0 rgba(255,255,255,.12)}
  .btn.primary:hover{background:linear-gradient(180deg,var(--amber),var(--amber2));border-color:transparent;color:var(--on-accent);box-shadow:inset 0 1px 0 rgba(255,255,255,.16)}
  .btn.ghost{background:transparent}
  .btn.sm{padding:var(--sp-1) var(--sp-2);font-size:11px;min-height:var(--ctl-h-sm)}
  .btn.xs{padding:var(--sp-0) var(--sp-2);font-size:11px;border-radius:6px;min-height:var(--ctl-h-xs)}
  /* 36, not 38: this is the only control size in the .btn family written as a
     raw pixel value rather than derived from the spacing tokens, and 38 was
     both off the 4px grid and 2px taller than a text .btn (which computes to 36
     from --sp-2 padding). An icon button and a text button are the same control
     at the same tier, so they get the same box. */
  .btn.icon-only{display:inline-flex;align-items:center;justify-content:center;width:var(--ctl-h);height:var(--ctl-h);padding:0;font-size:17px;line-height:1;flex:0 0 auto}
  .btn-cluster{position:relative;display:flex;gap:var(--sp-2)}
  /* icon system alignment */
  .ic{flex:0 0 auto;display:inline-block;vertical-align:-.16em}
  .btn,.let-chip,.trade-onsite,.hist-toggle,.email-link,.h-link,.h-att,.watch-tag,.note-more,.note-expand,.row-details,.exp-row{display:inline-flex;align-items:center;gap:var(--sp-1)}
  .btn.xs,.note-more,.note-expand,.h-link,.h-att{gap:var(--sp-1)}
  .row-details{justify-content:center;gap:0}
  .empty-icon{display:flex;align-items:center;justify-content:center;color:var(--muted2)}
  .exp-row{font-weight:600}
  .export-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:60;min-width:218px;padding:var(--sp-2);background:var(--panel2);border:1px solid var(--border2);border-radius:11px;box-shadow:var(--shadow-lg);display:flex;flex-direction:column;gap:var(--sp-0)}
  .export-menu[hidden]{display:none}
  .export-menu button{appearance:none;background:transparent;border:0;color:var(--txt);font:inherit;font-size:13px;font-weight:500;text-align:left;padding:var(--sp-2) var(--sp-3);border-radius:8px;cursor:pointer;display:flex;flex-direction:column;gap:var(--sp-0);line-height:1.25}
  .export-menu button:hover{background:rgba(255,255,255,.06);color:#fff}
  .export-menu .exp-hint{font-size:11px;color:var(--muted);font-weight:500}

  .controls{display:flex;gap:var(--gap-bar);flex-wrap:wrap;align-items:flex-end;padding:var(--pad-bar-y) 0;border-bottom:1px solid var(--border)}
  .field{display:flex;flex-direction:column;gap:var(--sp-1)}
  .field label{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
  .field input,.field select{background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-weight:500;font-size:13px;transition:border-color .15s,box-shadow .15s}
  .field input:focus,.field select:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .field input[type=number]{width:90px}
  .field.proj input{width:140px}
  .field.dom input{width:185px}
  .field.filter{flex:1 1 200px}
  .field.filter input{width:100%}

  .summary{display:flex;gap:var(--sp-3);flex-wrap:wrap;align-items:flex-end;padding:var(--sp-5) 0 var(--sp-2)}
  .job-details{display:flex;flex-direction:column;justify-content:flex-end;gap:var(--sp-0);flex:0 0 auto;padding-bottom:var(--sp-0)}
  .job-details .jd-proj{font-family:var(--display);font-size:20px;font-weight:700;letter-spacing:.5px;color:var(--txt);line-height:1.1}
  .job-details .jd-addr{font-size:12px;color:var(--muted);line-height:1.3}
  .sum-group{display:flex;flex-direction:column;flex:0 0 auto}
  .sum-group.packages{margin-left:auto}
  .sum-group-h{font-family:var(--body);font-size:11px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);font-weight:600;margin:0 0 var(--sp-2);padding-left:var(--sp-0)}
  .sum-group-row{display:flex;gap:var(--gap-grid);align-items:stretch;flex-wrap:nowrap}
  .budget-panel{display:flex;flex-direction:column;justify-content:center;gap:var(--sp-1);border:1px solid var(--border2);background:var(--panel-grad);border-radius:11px;padding:var(--pad-card) var(--pad-card);flex:0 0 auto;box-shadow:var(--sheen),var(--shadow-md)}
  .budget-panel .bp-label{display:flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-weight:500;white-space:nowrap}
  .budget-panel .bp-label::before{content:"";width:6px;height:6px;border-radius:2px;background:var(--amber);flex:0 0 auto}
  .budget-panel .bp-value{font-family:var(--display);font-size:19px;font-weight:700;line-height:.95;letter-spacing:.5px;color:var(--amber2);font-variant-numeric:tabular-nums;white-space:nowrap}
  .let-panel{display:flex;flex-direction:column;justify-content:center;gap:var(--sp-1);border:1px solid var(--border2);background:var(--panel-grad);border-radius:11px;padding:var(--pad-card) var(--pad-card);flex:0 0 auto;box-shadow:var(--sheen),var(--shadow-md)}
  .let-panel .bp-label{display:flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-weight:500;white-space:nowrap}
  .let-panel .bp-label::before{content:"";width:6px;height:6px;border-radius:2px;flex:0 0 auto;background:var(--muted2)}
  .let-panel .bp-value{font-family:var(--display);font-size:19px;font-weight:700;line-height:.95;letter-spacing:.5px;color:var(--txt);font-variant-numeric:tabular-nums;white-space:nowrap}
  .let-panel.pos .bp-label::before{background:var(--quote)} .let-panel.pos .bp-value{color:var(--quote)}
  .let-panel.neg .bp-label::before{background:var(--chase)} .let-panel.neg .bp-value{color:var(--chase)}
  .let-panel.pct .bp-label::before{background:var(--reply)} .let-panel.pct .bp-value{color:var(--reply)}
  .scards{display:flex;gap:var(--gap-grid);flex-wrap:nowrap;flex:0 0 auto;justify-content:flex-end}
  .scard{position:relative;flex:0 0 auto;width:80px;border:1px solid var(--border2);background:var(--panel-grad);border-radius:11px;padding:var(--pad-card) var(--pad-card);display:flex;flex-direction:column;gap:var(--sp-1);cursor:pointer;box-shadow:var(--sheen),var(--shadow-md);transition:background .2s var(--ease),border-color .2s var(--ease),box-shadow .2s var(--ease),transform .2s var(--ease)}
  .scard:hover{background:var(--panel-grad-hover);border-color:var(--muted2);transform:translateY(-2px);box-shadow:var(--sheen),var(--shadow-lg)}
  .scard:active{transform:translateY(0)}
  .scard.active{border-color:color-mix(in srgb,var(--accent,var(--amber)) 55%,var(--border2));box-shadow:var(--sheen),var(--shadow-md),inset 3px 0 0 var(--accent,var(--amber)),0 0 24px -10px var(--accent,var(--amber))}
  .scard:focus-visible{outline:none;box-shadow:var(--sheen),var(--shadow-md),var(--ring-focus)}
  .scard .l{display:flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-weight:500;white-space:nowrap}
  .scard .l::before{content:"";width:6px;height:6px;border-radius:2px;background:var(--accent,var(--muted2));flex:0 0 auto}
  .scard .n{font-family:var(--display);font-size:19px;font-weight:700;line-height:.95;letter-spacing:.5px;color:var(--txt)!important;font-variant-numeric:tabular-nums}

  /* trade cards */
  /* RFQ packages flow into 2-up (or 3-up on ultra-wide) when the work surface is wide,
     collapsing to a single column on laptops — uses the side space + cuts vertical scroll */
  #content{margin-top:var(--sp-4);display:grid;grid-template-columns:repeat(auto-fill,minmax(700px,1fr));gap:var(--sp-4);align-items:start}
  .trade-card{position:relative;border:1px solid var(--border);border-radius:14px;background:var(--panel-grad);overflow:hidden;box-shadow:var(--sheen),var(--shadow-md);transition:border-color .25s var(--ease),box-shadow .25s var(--ease),transform .25s var(--ease)}
  .trade-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--ps-color,transparent);z-index:2}
  .trade-card[data-ps="live"]{--ps-color:var(--amber)}
  .trade-card[data-ps="open"]{--ps-color:var(--grey)}
  .trade-card[data-ps="closed"]{--ps-color:var(--awarded)}
  .trade-card:hover{border-color:var(--border2);box-shadow:var(--sheen),var(--shadow-lg);transform:translateY(-1px)}
  .trade-head{display:flex;align-items:center;gap:var(--sp-4);flex-wrap:wrap;padding:var(--sp-4) var(--sp-4) var(--sp-4) var(--sp-4);background:linear-gradient(180deg, rgba(255,255,255,.022), rgba(255,255,255,0)), var(--panel2);border-bottom:1px solid var(--border)}
  .trade-title{font-family:var(--display);font-size:16px;font-weight:700;letter-spacing:1.5px;margin-right:var(--sp-0);text-transform:uppercase;color:var(--txt)}
  .trade-head .hspacer{flex:1 1 auto}
  /* collapse/expand: each package is a dropdown — header is the always-visible summary, body reveals on demand to cut scrolling */
  .trade-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;margin-left:-4px;border:1px solid var(--border2);border-radius:8px;background:var(--panel);color:var(--muted);cursor:pointer;transition:color .15s,background .15s,border-color .15s,transform .15s}
  .trade-toggle svg{transition:transform .2s var(--ease)}
  .trade-toggle:hover{color:var(--txt);border-color:var(--muted2);background:var(--panel2)}
  .trade-toggle:active{transform:scale(.94)}
  .trade-card.is-open .trade-toggle{color:var(--txt);border-color:var(--amber-dim)}
  .trade-head[data-toggle] .trade-title{cursor:pointer}
  .trade-head[data-toggle] .trade-title:hover{color:var(--amber)}
  .trade-subcount{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted);background:var(--bg2);border:1px solid var(--border);padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);white-space:nowrap;font-weight:600}
  /* de-bubble sweep: the solid ink fill dies with the capsule — escalation is
     ink text + border weight; the emit already carries the alert glyph + word */
  .trade-subcount.chase{color:var(--txt);border-color:var(--txt);font-weight:700}
  /* only the card the user just opened animates its body — not every open card on each re-render */
  .trade-body.just-open{animation:tradeBodyIn .26s var(--ease-out)}
  @keyframes tradeBodyIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:reduce){.trade-body.just-open{animation:none}.trade-toggle svg{transition:none}}
  .pin-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid var(--border2);border-radius:8px;background:var(--panel);color:var(--muted);cursor:pointer;transition:color .15s,background .15s,border-color .15s,transform .15s}
  .pin-btn svg{fill:currentColor;transition:transform .15s}
  .pin-btn:hover{color:var(--txt);border-color:var(--muted2);background:var(--panel2)}
  .pin-btn:hover svg{transform:rotate(-15deg)}
  .pin-btn.on{color:#1a1205;background:var(--amber);border-color:transparent}
  .pin-btn.on svg{transform:rotate(0)}
  .pinned-card{box-shadow:0 0 0 1px var(--amber-dim)}
  .trade-counts{display:flex;gap:var(--sp-2);flex-wrap:wrap}
  .mini{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted);background:var(--bg2);border:1px solid var(--border);padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm)}
  .mini b{color:var(--txt)}
  .head-field{display:flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted)}
  .head-field input,.head-field select{background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-1) var(--sp-2);border-radius:6px;font:inherit;font-size:12px}
  .head-field input{width:130px}
  .trade-note-row{padding:var(--sp-2) var(--sp-4) var(--sp-2) var(--sp-4);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:var(--sp-2);color:var(--muted2);font-family:var(--body);font-size:11px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}
  .trade-note-row input{flex:1;background:var(--bg2);border:1px solid var(--border);color:var(--txt);padding:var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-weight:500;font-size:12px;transition:border-color .15s,box-shadow .15s}
  .trade-note-row input:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}

  table.subs{width:100%;border-collapse:collapse;font-size:12px}
  table.subs thead th{text-align:left;padding:var(--pad-cell-y) var(--pad-cell-x);font-size:10px;letter-spacing:.7px;text-transform:uppercase;font-weight:500;color:var(--muted2);background:var(--bg2);border-bottom:1px solid var(--border)}
  table.subs tbody td{padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1px solid var(--border);vertical-align:top}
  table.subs tbody tr:last-child td{border-bottom:none}
  table.subs tbody tr{transition:background .14s}
  table.subs tbody tr:hover{background:var(--bg2)}
  .col-sub{width:14%} .col-act{width:22%} .col-note{width:43%} .col-match{width:17%} .col-x{width:4%}

  .sub-name-in{display:block;font-family:var(--body);font-weight:700;font-size:13px;line-height:1.3;background:transparent;border:1px solid transparent;color:var(--txt);padding:var(--sp-1) var(--sp-2);border-radius:8px;width:100%;resize:none;overflow:hidden;white-space:pre-wrap;word-break:break-word;transition:border-color .15s,background .15s,box-shadow .15s}
  .sub-name-in:hover{border-color:var(--border)} .sub-name-in:focus{outline:none;border-color:var(--amber);background:var(--bg2);box-shadow:var(--ring)}
  .auto-tag{font-size:10px;color:var(--amber);border:1px solid var(--amber-dim);border-radius:4px;padding:var(--sp-0) var(--sp-1);margin-left:var(--sp-1);vertical-align:middle}
  .watch-tag{display:inline-flex;align-items:center;gap:var(--sp-0);font-size:10px;font-weight:700;color:var(--reply);background:color-mix(in srgb,var(--reply) 14%,transparent);border:1px solid color-mix(in srgb,var(--reply) 38%,transparent);border-radius:4px;padding:var(--sp-0) var(--sp-1);margin-left:var(--sp-1);vertical-align:middle;white-space:nowrap;animation:watchpulse 2s ease-in-out infinite}
  @keyframes watchpulse{0%,100%{opacity:.72}50%{opacity:1}}

  .pill{display:inline-flex;align-items:center;gap:var(--sp-1);padding:var(--sp-1) var(--sp-2);border-radius:6px;font-family:var(--body);font-size:11px;font-weight:600;letter-spacing:.1px;white-space:nowrap;border:1px solid transparent}
  .pill .pdot{width:6px;height:6px;border-radius:50%}
  .pill.lg{font-size:11px;padding:var(--sp-1) var(--sp-3)}

  /* view tabs (RFQ Tracker / Shop Drawings) */
  .viewtabs{display:flex;gap:var(--sp-1);padding:var(--sp-3) 0 0;border-bottom:1px solid var(--border)}
  .viewtab{appearance:none;background:none;border:1px solid transparent;border-bottom:none;color:var(--muted);font-family:var(--body);font-weight:600;font-size:13px;letter-spacing:.3px;padding:var(--sp-2) var(--sp-4);border-radius:var(--r,4px) var(--r,4px) 0 0;cursor:pointer;transition:color .15s,background .15s}
  .viewtab:hover{color:var(--txt)}
  .viewtab.on{color:var(--amber2);background:var(--panel);border-color:var(--border2);box-shadow:inset 0 -2px 0 var(--amber)}
  .viewtab:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  /* shop drawings — trade → set → drawings hierarchy (reuses trade-card / table.subs / pill) */
  .shop-count{font-size:12px;color:var(--muted);white-space:nowrap}
  /* summary chip bar (mirrors the RFQ stat cards; clickable status filters) */
  .shop-summary{display:flex;gap:var(--gap-grid);flex-wrap:wrap;padding:var(--sp-4) 0 var(--sp-1)}
  .shop-chip{appearance:none;cursor:pointer;display:flex;flex-direction:column;gap:var(--sp-1);min-width:96px;border:1px solid var(--border2);background:var(--panel-grad,var(--panel));border-radius:var(--r,4px);padding:var(--sp-2) var(--sp-3);box-shadow:var(--sheen),var(--shadow-md);transition:border-color .15s,box-shadow .15s,transform .12s}
  .shop-chip:hover{border-color:var(--muted2);transform:translateY(-1px)}
  .shop-chip.on{border-color:color-mix(in srgb,var(--c) 60%,var(--border2));box-shadow:var(--sheen),var(--shadow-md),inset 3px 0 0 var(--c)}
  .shop-chip .n{font-family:var(--display);font-size:19px;font-weight:700;line-height:.95;color:var(--c);font-variant-numeric:tabular-nums}
  .shop-chip .l{font-family:var(--body);font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:600;white-space:nowrap}
  /* compact filter dropdown (replaces count-tile chip strips) */
  .filter-sel{display:inline-flex;align-items:center;gap:var(--sp-2)}
  .filter-sel>label{font-family:var(--body);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;color:var(--muted2);white-space:nowrap}
  .filter-sel>select{background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-6) var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-weight:600;font-size:13px;cursor:pointer;min-width:190px;transition:border-color .15s,box-shadow .15s}
  .filter-sel>select:hover{border-color:var(--muted2)}
  .filter-sel>select:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 3px color-mix(in srgb,var(--amber) 18%,transparent)}
  /* trade section */
  .shop-trade{margin-top:var(--sp-4)}
  .shop-trade-head{cursor:pointer;gap:var(--sp-2)}
  .shop-trade-toggle,.shop-set-toggle{display:inline-flex;align-items:center;justify-content:center;color:var(--muted);flex:0 0 auto}
  .shop-trade-count{font-size:11px;color:var(--muted);white-space:nowrap;font-weight:600}
  .shop-trade-body{padding:var(--sp-0) 0 var(--sp-1)}
  /* drawing set */
  .shop-set{border-top:1px solid var(--border)}
  .shop-set-head{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding:var(--pad-row-y) var(--sp-4) var(--pad-row-y) var(--sp-4);cursor:pointer;transition:background .14s}
  .shop-set-head:hover{background:var(--bg2)}
  .shop-set-title{font-family:var(--body);font-weight:700;font-size:13px;color:var(--txt)}
  .shop-set-summary{color:var(--muted);font-size:12px;flex:1 1 200px;min-width:120px}
  .shop-set-count{font-size:11px;color:var(--muted2);white-space:nowrap}
  .shop-set-ctrl{display:inline-flex;align-items:center;gap:var(--sp-1);white-space:nowrap}
  .shop-set-ctrl .mini-label{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
  .shop-set-ctrl .cell-input{width:auto;padding:var(--sp-1) var(--sp-2);font-size:11px}
  .shop-drawings{padding:0 var(--sp-4) var(--sp-3);animation:riseIn .25s var(--ease-out) backwards}
  /* per-drawing table columns */
  table.shop{margin-top:var(--sp-1)}
  table.shop .col-dno{width:11%} table.shop .col-dtitle{width:23%} table.shop .col-drev{width:5%}
  table.shop .col-dstatus{width:15%} table.shop .col-dsource{width:28%} table.shop .col-dcomment{width:18%}
  .dwg-no{font-family:var(--body);font-weight:700;font-size:13px;color:var(--txt)}
  .shop-rev{font-variant-numeric:tabular-nums;color:var(--txt);font-weight:600}
  .shop-dstatus{margin-top:var(--sp-2)}
  .shop-comment{width:100%}
  /* status provenance cell */
  .shop-source{display:flex;align-items:flex-start;gap:var(--sp-2);font-size:11px;color:var(--muted);line-height:1.4}
  .shop-source .ic{margin-top:var(--sp-0);flex:0 0 auto}
  .shop-source.via-email .ic{color:var(--amber2)}
  .shop-source.via-manual .ic{color:var(--reply)}
  .shop-source.via-none .ic{color:var(--muted2)}
  .shop-source .ss-body{min-width:0}
  .shop-source .ss-label{color:var(--txt);font-weight:500}
  .shop-source .ss-date{color:var(--muted2);font-size:10px;margin-top:var(--sp-0);font-variant-numeric:tabular-nums}
  .shop-source .h-link{margin-left:auto;flex:0 0 auto;align-self:center}
  .shop-review{margin:var(--sp-4) 0 0;border:1px solid color-mix(in srgb,var(--amber) 45%,transparent);background:color-mix(in srgb,var(--amber) 9%,transparent);border-radius:var(--r,4px);padding:var(--sp-3) var(--sp-4)}
  .shop-review-head{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;font-weight:600;color:var(--amber2)}
  .shop-review-head b{font-variant-numeric:tabular-nums}
  .shop-review-list{list-style:none;margin:var(--sp-2) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--sp-1)}
  .shop-review-list li{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;font-size:12px;color:var(--txt);padding:var(--sp-1) 0;border-top:1px solid var(--border)}
  .srv-subj{font-weight:600} .srv-from{color:var(--muted)} .srv-reason{color:var(--chase);font-size:11px;margin-left:auto}

  .activity{color:var(--txt);font-family:var(--body);font-weight:500;font-size:12px;line-height:1.5;letter-spacing:0}
  .activity .meta{color:var(--muted);font-weight:400;font-size:11px;margin-top:var(--sp-0)}
  .activity .att{color:var(--quote);font-weight:600}
  .ai-line{margin-top:var(--sp-1);font-size:11px;color:var(--amber);font-style:italic;line-height:1.35}
  .ai-btn{margin-top:var(--sp-1)}

  .cell-input{background:var(--bg2);border:1px solid var(--border);color:var(--txt);padding:var(--sp-2) var(--sp-2);border-radius:8px;font-family:var(--body);font-weight:500;font-size:12px;width:100%;transition:border-color .15s,box-shadow .15s}
  .cell-input:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}

  .note-cell{display:flex;flex-direction:column;gap:var(--sp-2)}
  /* dot-point summary preview: JS (alignNoteBoxes) sizes it to the larger of its own
     content and the History-dropdown line, so points get room and the base lines up */
  .note-view{cursor:pointer;border:1px solid var(--border);background:var(--bg2);border-radius:8px;padding:var(--sp-3) var(--sp-4);min-height:210px;overflow:hidden;transition:border-color .15s,background .15s}
  .note-view:hover{border-color:var(--muted2);background:var(--panel2)}
  .note-points{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-2)}
  .note-points li{position:relative;padding-left:var(--sp-4);font-size:12px;line-height:1.5;color:var(--txt)}
  .note-points li::before{content:"";position:absolute;left:2px;top:7px;width:5px;height:5px;border-radius:50%;background:var(--amber)}
  .note-empty{font-size:12px;color:var(--muted);font-style:italic;line-height:1.5}
  .note-more{margin-top:var(--sp-2);font-size:11px;color:var(--amber);font-weight:600}
  .note-actions{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}
  .note-expand{background:none;border:none;color:var(--amber);font-size:11px;cursor:pointer;padding:0;font-weight:600}
  .note-expand:hover{text-decoration:underline}
  /* pop-out summary overlay */
  .note-card{max-width:640px;width:100%;display:flex;flex-direction:column;gap:var(--sp-3)}
  .note-modal-h{display:flex;flex-direction:column;gap:var(--sp-0);padding-right:var(--sp-6)}
  .nm-trade{font-family:var(--body);font-size:11px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);font-weight:600}
  .nm-sub{font-family:var(--display);font-size:21px;letter-spacing:.5px;margin:0;color:var(--txt)}
  .note-points.big{gap:var(--sp-3)}
  .note-points.big li{font-size:14px;line-height:1.55;padding-left:var(--sp-4)}
  .note-points.big li::before{top:9px;width:6px;height:6px}
  .note-points[hidden]{display:none}
  .nm-label{font-family:var(--body);font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);font-weight:600;margin:var(--sp-0) 0 -4px}
  .note-area{background:var(--bg2);border:1px solid var(--border);color:var(--txt);border-radius:8px;font-family:var(--body);font-weight:400;font-size:13px;line-height:1.6;letter-spacing:0;padding:var(--sp-3) var(--sp-3);width:100%;resize:vertical;min-height:120px;transition:border-color .15s,box-shadow .15s}
  .note-area:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .note-area.pop{max-height:50vh;overflow:auto}

  .add-sub{padding:var(--sp-2) var(--sp-3)}
  .empty{padding:var(--sp-4) var(--sp-4);color:var(--muted);font-family:var(--body);font-weight:500;font-size:12px;display:flex;align-items:center;gap:var(--sp-2)}
  .empty::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--muted2);flex:0 0 auto}

  .legend{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-top:var(--sp-4)}
  .legend span{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted)}
  .legend i{width:9px;height:9px;border-radius:2px;display:inline-block}
  .row-hidden{display:none!important}

  /* empty state (filter yields nothing) */
  .empty-state{display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);text-align:center;padding:var(--sp-8) var(--sp-5);border:1px dashed var(--border2);border-radius:var(--radius);background:var(--panel);margin-top:var(--sp-1)}
  .empty-state[hidden]{display:none}
  .empty-icon{font-size:30px;color:var(--muted2);line-height:1}
  .empty-title{font-family:var(--display);font-size:18px;letter-spacing:1px;text-transform:uppercase;color:var(--txt)}
  .empty-sub{font-size:13px;color:var(--muted);max-width:360px}
  .empty-state .btn{margin-top:var(--sp-1)}

  /* toast notifications */
  .toast-host{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);display:flex;flex-direction:column;gap:var(--sp-2);z-index:9999;pointer-events:none;align-items:center}
  .toast{pointer-events:auto;min-width:240px;max-width:min(440px,92vw);display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--panel2);border:1px solid var(--border2);border-left:1px solid var(--accent,var(--amber));border-radius:11px;box-shadow:var(--shadow-lg);color:var(--txt);font-size:13px;opacity:0;transform:translateY(8px);transition:opacity .18s,transform .18s}
  .toast.show{opacity:1;transform:translateY(0)}
  .toast .t-msg{flex:1 1 auto;line-height:1.35}
  .toast .t-act{flex:0 0 auto;appearance:none;border:none;background:transparent;color:var(--amber2);font-family:var(--body);font-weight:700;font-size:12px;letter-spacing:.4px;text-transform:uppercase;cursor:pointer;padding:var(--sp-1) var(--sp-1);border-radius:6px}
  .toast .t-act:hover{background:color-mix(in srgb,var(--amber) 14%,transparent)}
  .toast[data-kind="warn"]{--accent:var(--chase)}
  .toast[data-kind="ok"]{--accent:var(--awarded)}

  /* keyboard focus visibility */
  a:focus-visible,button:focus-visible,[tabindex]:focus-visible,select:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid var(--amber);outline-offset:2px;border-radius:6px}
  .pkg button:focus-visible{outline-offset:-2px}
  .scard:focus-visible{outline:2px solid var(--amber);outline-offset:2px}

  /* destructive affordance on remove */
  .sub-del:hover{border-color:var(--chase)!important;color:#fff!important;background:color-mix(in srgb,var(--chase) 22%,var(--panel))!important}

  /* freshly-added row highlight */
  @keyframes rowFlash{0%{background:color-mix(in srgb,var(--reply) 26%,transparent)}100%{background:transparent}}
  .row-flash{animation:rowFlash 1.4s ease-out}

  /* per-subcontractor identity column: status pill under the name */
  .sub-meta{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-3);margin-top:var(--sp-3)}
  .sub-status{display:flex}

  /* secondary/specialist input with the override drop-down stacked beneath it */
  .ovr-stack{margin-top:var(--sp-3)}
  .mini-label{display:block;font-size:10px;letter-spacing:.6px;text-transform:uppercase;font-weight:500;color:var(--muted2);margin-bottom:var(--sp-1)}

  /* remove + details, stacked in the last column (details under the delete button) */
  .x-stack{display:flex;flex-direction:column;align-items:flex-end;gap:var(--sp-3)}
  .row-details{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:30px;height:28px;border:1px solid var(--border2);background:var(--panel);color:var(--muted);font-size:14px;line-height:1;border-radius:6px;cursor:pointer;transition:color .15s,border-color .15s,background .15s}
  .row-details:hover{color:var(--amber2);border-color:var(--amber-dim);background:var(--panel2)}
  .x-stack .sub-del{display:inline-flex;align-items:center;justify-content:center;width:30px;height:28px;padding:0;font-size:13px}

  /* remove (X) confirm / cancel */
  .del-wrap{display:inline-flex}
  .sub-del[hidden],.del-confirm[hidden]{display:none}
  .del-confirm{display:inline-flex;align-items:center;gap:var(--sp-1);white-space:nowrap}
  .del-confirm .del-q{font-size:10px;color:var(--muted);font-weight:600}
  .del-confirm button{appearance:none;border:1px solid var(--border2);background:var(--panel);color:var(--txt);font:inherit;font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:5px;cursor:pointer;transition:border-color .15s,color .15s,background .15s}
  .del-yes{border-color:var(--chase)!important;color:#fff!important;background:color-mix(in srgb,var(--chase) 32%,var(--panel))!important}
  .del-yes:hover{background:var(--chase)!important}
  .del-no:hover{border-color:var(--muted2);color:#fff}

  /* detail modal */
  .modal-overlay{position:fixed;inset:0;z-index:10000;display:flex;align-items:flex-start;justify-content:center;padding:var(--sp-7) var(--sp-4);background:rgba(4,4,6,.72);backdrop-filter:blur(7px) saturate(.9);-webkit-backdrop-filter:blur(7px) saturate(.9);overflow:auto;animation:overlayIn .2s var(--ease-out) both}
  @keyframes overlayIn{from{opacity:0}to{opacity:1}}
  .modal-overlay[hidden]{display:none}
  body.modal-open{overflow:hidden}
  .modal-card{position:relative;width:100%;max-width:640px;background:var(--panel-grad);border:1px solid var(--border2);border-radius:16px;box-shadow:var(--sheen),var(--shadow-xl);padding:var(--sp-5) var(--sp-6) var(--sp-6)}
  @keyframes modalIn{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
  .modal-close{position:absolute;top:14px;right:14px;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border2);border-radius:8px;background:var(--panel2);color:var(--muted);cursor:pointer;font-size:13px;line-height:1}
  /* Shared confirm (FE-07). Narrow on purpose: it asks one question and the
     answer is two buttons, so it should not present as a panel. No close X —
     Cancel is the dismissal, and a third way out only adds ambiguity to a
     destructive decision. */
  .confirm-card{max-width:440px;align-self:center}
  .cf-title{font-size:17px;line-height:1.3;margin:0 0 var(--sp-2);font-weight:650;text-wrap:balance}
  .cf-msg{margin:0 0 var(--sp-5);color:var(--muted);font-size:13.5px;line-height:1.55}
  .cf-acts{display:flex;gap:var(--sp-2);justify-content:flex-end;flex-wrap:wrap}
  @media (max-width:560px){ .cf-acts{flex-direction:column-reverse} .cf-acts .btn{width:100%} }
  .modal-close:hover{color:#fff;border-color:var(--muted2)}
  .d-eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);font-weight:600;padding-right:var(--sp-7)}
  .d-pkg{font-weight:700}
  .d-title{font-family:var(--display);font-size:24px;font-weight:700;letter-spacing:1px;text-transform:uppercase;margin:var(--sp-2) 0 var(--sp-3);color:var(--txt);line-height:1.1}
  .d-pillrow{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;margin-bottom:var(--sp-4)}
  .d-facts{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:11px;overflow:hidden;margin-bottom:var(--sp-4)}
  .d-fact{background:var(--panel2);padding:var(--sp-2) var(--sp-3)}
  .d-fact-l{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted2);margin-bottom:var(--sp-0)}
  .d-fact-v{font-size:13px;color:var(--txt);font-weight:600;word-break:break-word}
  .d-section{margin-bottom:var(--sp-4)}
  .d-section:last-child{margin-bottom:0}
  .d-h{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--amber);font-weight:700;margin-bottom:var(--sp-2)}
  .d-body,.d-note{font-size:13px;line-height:1.6;color:var(--txt);margin:0 0 var(--sp-2);white-space:pre-wrap}
  .d-empty{font-size:13px;color:var(--muted);font-style:italic;margin:0}
  .modal-card .hist{margin-top:0}
  /* modal form grid — shared vocabulary for every modal form (RFI, finance, subs, MFA, variations, handover…) */
  .sd-form{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3) var(--sp-4);margin:0 0 var(--sp-4)}
  .sd-fl{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}
  .sd-fl-wide{grid-column:1 / -1}
  .sd-fl>span{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);font-weight:600}
  .sd-fl input,.sd-fl select,.sd-fl textarea{width:100%;background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-weight:500;font-size:13px;transition:border-color .15s,box-shadow .15s}
  .sd-fl textarea{resize:vertical;min-height:var(--sp-8);line-height:1.5;font-weight:400}
  .sd-fl input:focus,.sd-fl select:focus,.sd-fl textarea:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .sd-fl input::placeholder,.sd-fl textarea::placeholder{color:var(--muted2)}
  .sd-fl input:disabled,.sd-fl select:disabled,.sd-fl textarea:disabled{opacity:.55;cursor:not-allowed}
  .sd-form-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-2)}
  @media (max-width:560px){ .d-facts{grid-template-columns:1fr} .sd-form{grid-template-columns:1fr} .modal-card{padding:var(--sp-5) var(--sp-4) var(--sp-5)} .d-title{font-size:20px} }

  /* project selector */
  .field.proj select{min-width:175px;font-weight:600}

  /* trade budget chip in header */
  .trade-budget{display:inline-flex;align-items:center;font-family:var(--body);font-size:12px;font-weight:700;color:var(--amber2);background:color-mix(in srgb,var(--amber) 12%,transparent);border:1px solid var(--amber-dim);padding:var(--sp-0) var(--sp-2);border-radius:6px;letter-spacing:.3px;white-space:nowrap}
  .trade-onsite{display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:11px;font-weight:600;color:var(--reply);background:color-mix(in srgb,var(--reply) 13%,transparent);border:1px solid color-mix(in srgb,var(--reply) 42%,transparent);padding:var(--sp-0) var(--sp-2);border-radius:6px;white-space:nowrap}
  .let-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:11px;font-weight:600;border:1px solid var(--border2);background:var(--panel2);color:var(--txt);padding:var(--sp-0) var(--sp-2);border-radius:6px;white-space:nowrap;cursor:pointer;transition:border-color .15s,background .15s}
  .scope-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:11px;font-weight:600;border:1px solid var(--border2);background:var(--panel2);color:var(--txt);padding:var(--sp-0) var(--sp-2);border-radius:6px;white-space:nowrap;cursor:pointer;transition:border-color .15s,background .15s}
  .scope-chip:hover{border-color:color-mix(in srgb,var(--awarded) 50%,transparent);background:color-mix(in srgb,var(--awarded) 9%,transparent)}
  .scope-chip:focus-visible{outline:2px solid var(--awarded);outline-offset:2px}
  .scope-chip.issued{color:var(--awarded);border-color:color-mix(in srgb,var(--awarded) 42%,transparent);background:color-mix(in srgb,var(--awarded) 12%,transparent)}
  .let-chip:hover{border-color:var(--muted2)}
  .let-chip.pos{color:var(--quote);border-color:color-mix(in srgb,var(--quote) 42%,transparent);background:color-mix(in srgb,var(--quote) 12%,transparent)}
  .let-chip.neg{color:var(--chase);border-color:color-mix(in srgb,var(--chase) 42%,transparent);background:color-mix(in srgb,var(--chase) 12%,transparent)}
  .let-chip.empty{color:var(--muted);border-style:dashed;background:transparent}
  .review-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;padding:var(--sp-0) var(--sp-2);border-radius:var(--r,6px);color:var(--amber2);border:1px solid color-mix(in srgb,var(--amber) 45%,transparent);background:color-mix(in srgb,var(--amber) 12%,transparent);transition:border-color .15s,background .15s}
  .review-chip:hover{border-color:var(--amber);background:color-mix(in srgb,var(--amber) 18%,transparent)}
  /* letting modal */
  .let-card{max-width:460px}
  .let-sub{color:var(--muted);font-size:13px;margin:var(--sp-1) 0 var(--sp-4);line-height:1.55}
  .let-sub strong{color:var(--txt);font-weight:700}
  .let-form{display:flex;flex-direction:column;gap:var(--sp-4)}
  .let-money{display:flex;align-items:center;background:var(--bg2);border:1px solid var(--border2);border-radius:8px;padding:0 var(--sp-3)}
  .let-money .cur{color:var(--muted);font-size:14px}
  .let-money input{flex:1 1 auto;min-width:0;background:transparent;border:none;color:var(--txt);padding:var(--sp-2) var(--sp-2);font-family:var(--body);font-size:15px;font-weight:600}
  .let-money input:focus{outline:none}
  .let-money:focus-within{border-color:var(--amber);box-shadow:var(--ring)}
  .let-to{background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-size:14px;font-weight:500}
  .let-to:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .let-readout{margin:var(--sp-4) 0 var(--sp-0);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);border:1px solid var(--border);border-radius:8px;padding:var(--sp-3) var(--sp-4);background:var(--panel)}
  .let-readout .lr-l{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:600}
  .let-readout .lr-v{font-family:var(--display);font-size:21px;font-weight:700;color:var(--txt);font-variant-numeric:tabular-nums}
  .let-readout .lr-v.muted{color:var(--muted2)}
  .let-readout.pos{border-color:color-mix(in srgb,var(--quote) 45%,transparent)} .let-readout.pos .lr-v{color:var(--quote)}
  .let-readout.neg{border-color:color-mix(in srgb,var(--chase) 45%,transparent)} .let-readout.neg .lr-v{color:var(--chase)}
  .let-actions{display:flex;justify-content:flex-end;gap:var(--sp-2);margin-top:var(--sp-5)}

  /* settings / control panel */
  .settings-card{max-width:700px}
  .set-section{margin-bottom:var(--sp-5)}
  .set-section:last-child{margin-bottom:0}
  .set-h{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--amber);font-weight:700;margin-bottom:var(--sp-3);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}
  .set-total{color:var(--muted);font-weight:600;text-transform:none;letter-spacing:0;font-size:12px}
  .set-projlist{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-3)}
  .set-proj{display:inline-flex;flex-direction:column;align-items:flex-start;gap:var(--sp-0);border:1px solid var(--border2);background:var(--panel2);color:var(--txt);padding:var(--sp-2) var(--sp-4);border-radius:8px;cursor:pointer;font:inherit;font-weight:600;font-size:13px;transition:border-color .15s,box-shadow .15s}
  .set-proj:hover{border-color:var(--muted2)}
  .set-proj.on{border-color:var(--amber);box-shadow:inset 0 0 0 1px var(--amber)}
  .set-proj-meta{font-size:10px;font-weight:500;color:var(--muted)}
  /* editable project selection cards */
  .set-projhint{font-size:11px;color:var(--muted);line-height:1.5;margin:-2px 0 var(--sp-3)}
  .set-projcards{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-3)}
  .set-proj-card{border:1px solid var(--border2);background:var(--panel2);border-radius:11px;overflow:hidden;transition:border-color .15s,box-shadow .15s}
  .set-proj-card.on{border-color:var(--amber);box-shadow:inset 0 0 0 1px var(--amber)}
  .set-proj-head{display:flex;align-items:center;gap:var(--sp-3);width:100%;text-align:left;border:none;background:transparent;color:var(--txt);font:inherit;cursor:pointer;padding:var(--sp-3) var(--sp-3)}
  .set-proj-head:hover{background:color-mix(in srgb,var(--amber) 7%,transparent)}
  .set-proj-tick{flex:0 0 18px;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:50%;border:1.5px solid var(--border2);color:#fff}
  .set-proj-card.on .set-proj-tick{background:var(--amber);border-color:var(--amber)}
  .set-proj-id{flex:1 1 auto;display:flex;flex-direction:column;gap:var(--sp-0);min-width:0}
  .set-proj-name{font-weight:700;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .set-proj-caret{flex:0 0 auto;color:var(--muted);transition:transform .18s ease}
  .set-proj-card.on .set-proj-caret{transform:rotate(180deg);color:var(--amber)}
  .set-proj-body{padding:var(--sp-1) var(--sp-3) var(--sp-4);border-top:1px solid var(--border2);animation:projBodyIn .2s ease-out}
  .set-proj-body .set-grid{margin-top:var(--sp-3)}
  .set-proj-actions{margin-top:var(--sp-3);display:flex;justify-content:flex-end}
  .set-proj-actions .btn.xs{display:inline-flex;align-items:center;gap:var(--sp-1)}
  @keyframes projBodyIn{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:reduce){ .set-proj-body{animation:none} .set-proj-caret{transition:none} }
  /* inline edit button beside the project dropdown */
  .proj-pick{display:flex;gap:var(--sp-2);align-items:stretch}
  .proj-pick select{flex:1 1 auto}
  .proj-edit{flex:0 0 auto;padding:0 var(--sp-2);display:inline-flex;align-items:center;justify-content:center;color:var(--muted)}
  .proj-edit:hover{color:var(--amber);border-color:var(--amber)}
  .set-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
  /* Account & security panel (cloud auth) */
  .set-authbox{display:flex;flex-direction:column;gap:var(--sp-3)}
  .set-auth-load{color:var(--muted);font-size:12.5px;padding:var(--sp-1) var(--sp-0)}
  .set-auth-err{color:var(--chase);font-size:12px;margin-top:var(--sp-2)}
  .set-id{display:flex;align-items:center;gap:var(--sp-3);border:1px solid var(--border2);background:var(--panel2);border-radius:var(--radius-sm);padding:var(--sp-3) var(--sp-3)}
  .set-id-av{width:40px;height:40px;border-radius:50%;flex:0 0 auto;object-fit:cover;background:var(--ink);color:#fff;font:700 14px var(--display);display:inline-flex;align-items:center;justify-content:center}
  .set-id-av.ph{background:var(--amber);color:var(--on-accent)}
  .set-id-meta{display:flex;flex-direction:column;gap:var(--sp-0);min-width:0;flex:1 1 auto}
  .set-id-meta b{font-size:13.5px;font-weight:650;color:var(--txt)}
  .set-id-meta>span{font-size:11.5px;color:var(--muted)}
  .set-id-tags{display:flex;gap:var(--sp-2);margin-top:var(--sp-1)}
  .set-tag{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-2)}
  .set-mfa{border:1px solid var(--border2);background:var(--panel2);border-radius:var(--radius-sm);padding:var(--sp-3)}
  .set-mfa-h{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);font-size:13px}
  .set-mfa-h b{font-weight:650;color:var(--txt)}
  .set-mfa-on{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;font-weight:700;color:var(--awarded)}
  .set-mfa-off{font-size:11px;font-weight:700;color:var(--muted2)}
  .set-mfa-sub{font-size:11.5px;color:var(--muted);margin:var(--sp-1) 0 var(--sp-3);line-height:1.5}
  .set-mfa-enroll{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-3)}
  .set-mfa-qr{width:160px;height:160px;border:1px solid var(--border2);border-radius:8px;background:#fff;padding:var(--sp-2);align-self:flex-start}
  .set-mfa-manual{font-size:11.5px;color:var(--muted);display:flex;flex-direction:column;gap:var(--sp-0)}
  .set-mfa-manual code{font-family:var(--mono);font-size:12px;color:var(--txt);background:var(--bg2);border:1px solid var(--border2);border-radius:6px;padding:var(--sp-1) var(--sp-2);word-break:break-all;user-select:all}
  /* App & display section */
  .set-app{display:flex;flex-direction:column}
  .set-approw{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) 0;border-bottom:1px solid var(--border)}
  .set-approw:last-child{border-bottom:none}
  .set-aplabel{display:flex;flex-direction:column;gap:var(--sp-0);min-width:0}
  .set-aplabel b{font-size:13.5px;font-weight:650;color:var(--txt)}
  .set-aplabel span{font-size:11.5px;color:var(--muted)}
  /* D-j (RR-1.4): read-only "System status" block — a quiet bordered group so
     deployment facts read as annotation, not as more settings rows */
  .set-sys{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg2);padding:0 var(--sp-4)}
  .set-sysrow{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) 0;border-bottom:1px solid var(--border)}
  .set-sysrow:last-child{border-bottom:none}
  /* D-j (RR-1.4): Project-tab group sub-headers — hairline-left annotation */
  .set-group-h{font-size:10px;text-transform:uppercase;letter-spacing:.7px;font-weight:700;color:var(--muted);padding-left:var(--sp-3);border-left:1px solid var(--border2);margin-bottom:var(--sp-3)}
  .set-seg{display:inline-flex;background:var(--bg2);border:1px solid var(--border2);border-radius:9px;padding:var(--sp-0);gap:var(--sp-0);flex:0 0 auto}
  .set-segb{display:inline-flex;align-items:center;gap:var(--sp-1);border:none;background:transparent;color:var(--muted);font-family:var(--body);font-size:12.5px;font-weight:600;padding:var(--sp-1) var(--sp-3);border-radius:6px;cursor:pointer;transition:background .15s,color .15s}
  .set-segb:hover{color:var(--txt)}
  .set-segb.on{background:var(--panel);color:var(--txt);box-shadow:var(--shadow-sm)}
  .set-segb svg{flex:0 0 auto}
  /* Appearance → Dashboard layout (R-4). Reordering is keyboard-first: a native
     checkbox plus two real buttons, never drag-only. */
  .dashpref-list{display:flex;flex-direction:column}
  .dashpref-row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-2) 0;border-bottom:1px solid var(--border)}
  .dashpref-row:last-child{border-bottom:none}
  .dashpref-row[data-off]{opacity:.6}
  .dashpref-tog{display:flex;align-items:center;gap:var(--sp-3);min-width:0;cursor:pointer}
  .dashpref-tog input{width:17px;height:17px;accent-color:var(--amber);cursor:pointer;flex:0 0 auto}
  .dashpref-lab{display:flex;flex-direction:column;gap:var(--sp-0);min-width:0}
  .dashpref-lab b{font-size:13px;font-weight:650;color:var(--txt)}
  .dashpref-lab>span{font-size:11.5px;color:var(--muted)}
  .dashpref-move{display:inline-flex;gap:var(--sp-1);flex:0 0 auto}
  .dashpref-msg{font-size:11.5px;color:var(--muted);line-height:1.5;margin-top:var(--sp-2)}
  .settings-btn{position:relative;color:var(--muted)}
  .settings-btn:hover{color:var(--txt)}
  /* any icon button can host an .alert-badge — anchor the badge to the BUTTON, not the
     sticky topbar (a static button let the badge escape above/right of the viewport) */
  .topbar .btn.icon-only{position:relative}
  /* author display rules (flex) beat the UA [hidden] rule — honour [hidden] explicitly
     so the demo-hidden notifications bell and its badge don't render as ghosts */
  .topbar .btn[hidden],.alert-badge[hidden]{display:none!important}
  .settings-btn.has-alerts{color:var(--amber2);border-color:color-mix(in srgb,var(--amber) 45%,var(--border2))}
  /* full-screen toggle — desktop / pointer devices only */
  .fs-btn{color:var(--muted)} .fs-btn:hover{color:var(--txt)}
  .fs-btn.on{color:var(--amber2);border-color:color-mix(in srgb,var(--amber) 45%,var(--border2))}
  @media (max-width:900px){ .fs-btn{display:none} }
  @media (pointer:coarse){ .fs-btn{display:none} }
  /* top-bar utilities: join the icon buttons into one segmented bar (Refresh stays separate) */
  .topbar-tools{display:inline-flex;align-items:stretch;background:var(--panel);border:1px solid var(--border2);border-radius:9px;box-shadow:var(--sheen),var(--shadow-sm)}
  .topbar-tools .btn.icon-only{border:0;border-radius:0!important;background:transparent;box-shadow:none}
  .topbar-tools .btn.icon-only:hover{background:color-mix(in srgb,var(--amber) 8%,transparent);transform:none}
  .topbar-tools .btn.icon-only+.btn.icon-only{border-left:1px solid var(--border2)}
  .topbar-tools .btn.icon-only:first-child{border-radius:9px 0 0 9px!important}
  .topbar-tools .btn.icon-only:last-child{border-radius:0 9px 9px 0!important}
  /* The job chip is the bar's first SEGMENT — the de-carding rule lives in
     theme.css beside the chip's own styling, at matching specificity, per that
     file's no-!important convention. Only the divider belongs here, with the
     sibling rule above it. */
  .topbar-tools .job-switcher+.btn.icon-only{border-left:1px solid var(--border2)}
  @media (max-width:560px){ .set-approw,.set-sysrow{flex-wrap:wrap;gap:var(--sp-2)} }
  .set-field{display:flex;flex-direction:column;gap:var(--sp-1)}
  .set-field label{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
  .set-field input,.set-field select{background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-size:13px;font-weight:500}
  .set-field input:focus,.set-field select:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .set-trades{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-3)}
  .set-trade{display:flex;align-items:center;gap:var(--sp-2)}
  .set-trade .set-tname{flex:1 1 auto;min-width:0;background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-3);border-radius:8px;font-family:var(--body);font-size:13px;font-weight:600}
  .set-trade .set-tname:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .set-budget{display:inline-flex;align-items:center;background:var(--bg2);border:1px solid var(--border2);border-radius:8px;padding:0 var(--sp-2)}
  .set-budget .cur{color:var(--muted);font-size:13px}
  .set-budget input{width:92px;background:transparent;border:none;color:var(--txt);padding:var(--sp-2) var(--sp-1);font-family:var(--body);font-size:13px;font-weight:600;text-align:right}
  .set-budget input:focus{outline:none}
  .set-budget:focus-within{border-color:var(--amber);box-shadow:var(--ring)}
  .set-tdate{flex:0 0 auto;width:148px;background:var(--bg2);border:1px solid var(--border2);color:var(--txt);padding:var(--sp-2) var(--sp-2);border-radius:8px;font-family:var(--body);font-size:12px;font-weight:600;color-scheme:dark}
  .set-tdate:focus{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .set-tmeta{font-size:11px;color:var(--muted2);white-space:nowrap;min-width:64px;text-align:right}
  .set-tdel{flex:0 0 auto}
  .set-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}
  .btn.danger{color:var(--chase)}
  .btn.danger:hover{border-color:var(--chase);color:#fff;background:color-mix(in srgb,var(--chase) 22%,var(--panel))}
  /* spreadsheet import */
  .set-import{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-4)}
  .dz-row{display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:center}
  .dropzone{border:1.5px dashed var(--border2);border-radius:11px;padding:var(--sp-4) var(--sp-4);text-align:center;color:var(--muted);cursor:pointer;transition:border-color .15s,background .15s,color .15s}
  .dropzone:hover{border-color:var(--muted2);color:var(--txt)}
  .dropzone:focus-visible{outline:none;border-color:var(--amber);box-shadow:var(--ring)}
  .dropzone.drag{border-color:var(--amber);background:color-mix(in srgb,var(--amber) 9%,transparent);color:var(--txt)}
  .dropzone .dz-strong{display:block;font-weight:700;color:var(--txt);font-size:13px;margin-bottom:var(--sp-0)}
  .dropzone .dz-sub{font-size:11px;line-height:1.4}
  @media (max-width:560px){ .set-grid{grid-template-columns:1fr} .set-tmeta{display:none} }

  details.adv{margin-top:var(--sp-4)}
  details.adv summary{cursor:pointer;color:var(--muted);font-size:12px}
  details.adv .advbody{display:flex;gap:var(--sp-4);flex-wrap:wrap;align-items:flex-end;padding-top:var(--sp-3)}
  details.adv .field input{width:430px;max-width:70vw}
  .foot{margin-top:var(--sp-4);color:var(--muted2);font-size:11px;display:flex;gap:var(--sp-3);flex-wrap:wrap;align-items:center}
  .muted{color:var(--muted)}
  .x-label{display:none}

  /* package status segmented control (Open / Live / Closed) */
  .pkg{display:inline-flex;border:1px solid var(--border2);border-radius:8px;overflow:hidden;background:var(--bg)}
  .pkg button{appearance:none;border:none;background:transparent;color:var(--muted);font-family:var(--body);font-weight:600;font-size:11px;letter-spacing:.5px;text-transform:uppercase;padding:var(--sp-2) var(--sp-3);cursor:pointer;border-right:1px solid var(--border);transition:background .15s,color .15s}
  .pkg button:last-child{border-right:none}
  .pkg button:hover{color:var(--txt);background:var(--panel)}
  .pkg button.on{color:#fff}
  .pkg button.on[data-p="open"]{background:color-mix(in srgb,var(--grey) 20%,var(--panel));box-shadow:inset 0 -2px 0 var(--grey)}
  .pkg button.on[data-p="live"]{background:color-mix(in srgb,var(--amber) 18%,var(--panel));box-shadow:inset 0 -2px 0 var(--amber)}
  .pkg button.on[data-p="closed"]{background:color-mix(in srgb,var(--awarded) 20%,var(--panel));box-shadow:inset 0 -2px 0 var(--awarded)}

  /* email view/download link + history dropdown */
  .email-link{display:inline-flex;align-items:center;gap:var(--sp-1);margin-top:var(--sp-1);font-size:11px;font-weight:600;color:var(--reply)}
  .email-link:hover{text-decoration:underline}
  .email-link.disabled{color:var(--muted2);cursor:default}
  .email-link.disabled:hover{text-decoration:none}
  .hist-toggle{display:inline-flex;align-items:center;gap:var(--sp-1);margin-top:var(--sp-2);background:none;border:none;color:var(--muted);font:inherit;font-size:11px;font-weight:600;cursor:pointer;padding:0}
  .hist-toggle:hover{color:var(--amber)}
  .hist{margin-top:var(--sp-2);border-left:2px solid var(--border2);padding-left:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-2)}
  .hist .h-item{font-family:var(--body);font-size:11px;line-height:1.45}
  .hist .h-top{display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:baseline}
  .hist .h-when{color:var(--muted);font-weight:700;white-space:nowrap}
  .hist .h-who{color:var(--txt);font-weight:700}
  .hist .h-who.them{color:var(--reply)} .hist .h-who.you{color:var(--amber)}
  .hist .h-subj{color:var(--muted);font-weight:400}
  .hist .h-att{color:var(--quote);font-weight:700}
  .att-chips{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-2)}
  .att-row{display:inline-flex;align-items:center;gap:var(--sp-0)}
  .att-chip{display:inline-flex;align-items:center;gap:var(--sp-1);max-width:240px;padding:var(--sp-0) var(--sp-2) var(--sp-0) var(--sp-0);border:1px solid var(--border2);border-radius:8px;background:var(--bg2);text-decoration:none;color:var(--txt);font-size:11px;font-weight:600;line-height:1.2;transition:border-color .15s,background .15s}
  a.att-chip:hover{border-color:var(--amber);background:var(--panel)}
  .att-chip .att-ext{flex:0 0 auto;font-size:9px;font-weight:800;letter-spacing:.02em;color:#fff;background:var(--muted2);border-radius:5px;padding:var(--sp-0) var(--sp-1)}
  .att-chip .att-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .att-chip.ac-pdf .att-ext{background:var(--chase)}
  .att-chip.ac-xls .att-ext{background:var(--awarded)}
  .att-chip.ac-doc .att-ext{background:var(--reply)}
  .att-chip.ac-img .att-ext{background:var(--await)}
  .att-chip.ac-dwg .att-ext{background:var(--internal)}
  .att-chip.ac-zip .att-ext{background:var(--notissued)}
  .hist .h-link{font-size:10px;color:var(--reply);font-weight:600}

  /* ======================= RESPONSIVE ======================= */
  /* Tablet / small laptop */
  @media (max-width:980px){
    .wrap{padding:0 var(--sp-4)}
    .col-match{width:auto}
    table.subs{font-size:12px}
    table.subs thead th,table.subs tbody td{padding:var(--pad-cell-y) var(--sp-2)}
    .head-field input{width:108px}
  }

  /* Narrower screens: wrap to fit on screen — never a horizontal slider */
  @media (max-width:760px){
    .summary{align-items:flex-start;gap:var(--sp-3) var(--sp-3);flex-direction:row;flex-wrap:wrap;padding-bottom:var(--sp-2)}
    .job-details,.sum-group{width:100%}
    .sum-group.packages{margin-left:0}
    .sum-group-row,.scards{flex-wrap:wrap}
    .scards{justify-content:flex-start}
    .budget-panel,.let-panel{flex:1 1 130px}
    .scard{flex:0 0 auto;width:80px}
    .controls{gap:var(--sp-3)}
    .field.proj input,.field.dom input{width:100%}
    .field.proj,.field.dom,.field.filter{flex:1 1 140px}
  }

  /* Phone: stack everything; convert sub tables into cards */
  @media (max-width:640px){
    body{padding-bottom:var(--sp-8)}
    header.top{gap:var(--sp-3);padding:var(--sp-4) 0 var(--sp-4)}
    .logo{height:24px}
    .titleblock{min-width:0;flex:1 1 auto;order:3;padding-left:0}
    .titleblock::before{display:none}
    .titleblock h1{font-size:16px;letter-spacing:3px}
    #srcChip,#refreshBtn{flex:1 1 auto;justify-content:center}
    #refreshBtn{order:2}

    .controls{flex-direction:column;align-items:stretch;gap:var(--sp-3)}
    .field,.field.proj,.field.dom,.field.filter{width:100%;flex:0 0 auto}
    .field input,.field select{width:100%!important}
    .field input[type=number]{width:100%}

    /* trade header reflows to a tidy stack */
    .trade-head{gap:var(--sp-2) var(--sp-3);padding:var(--sp-3) var(--sp-3)}
    .trade-title{font-size:15px;flex:1 1 100%}
    .trade-head .hspacer{display:none}
    .pkg{width:100%}
    .pkg button{flex:1;padding:var(--sp-2) var(--sp-1)}
    .head-field{flex:1 1 100%}
    .head-field input,.head-field select{width:100%;flex:1}
    .trade-note-row{flex-wrap:wrap;padding:var(--sp-2) var(--sp-3)}
    .trade-note-row input{width:100%}

    /* table -> stacked cards */
    table.subs,table.subs tbody,table.subs tbody tr,table.subs tbody td{display:block;width:100%}
    table.subs thead{position:absolute;left:-9999px;top:-9999px}
    table.subs tbody tr{border:1px solid var(--border);border-radius:11px;margin:var(--sp-2) var(--sp-3);padding:var(--sp-2) 0;background:var(--bg2)}
    table.subs tbody tr:hover{background:var(--bg2)}
    table.subs tbody td{border-bottom:1px solid var(--border);padding:var(--pad-cell-y) var(--pad-cell-x);display:flex;flex-direction:column;gap:var(--sp-1);vertical-align:top}
    table.subs tbody tr td:last-child{border-bottom:none}
    table.subs tbody td[data-label]:not(.col-x)::before{
      content:attr(data-label);font-size:10px;letter-spacing:.6px;text-transform:uppercase;color:var(--muted)}
    .col-sub,.col-act,.col-match,.col-note,.col-x{width:auto}
    .sub-meta{flex-direction:row;align-items:center;gap:var(--sp-3);margin-top:var(--sp-2)}
    .col-x{align-items:flex-start}
    .x-stack{flex-direction:row;align-items:center;gap:var(--sp-3)}
    .col-x .sub-del{padding:var(--sp-1) var(--sp-2);width:auto;height:auto}
    .x-label{display:inline}
    .note-view{min-height:0}

    .summary{padding-top:var(--sp-4)}
    .legend{gap:var(--sp-2)}
    .legend span{flex:1 1 44%}
    details.adv .field input{width:100%}
  }

  /* Pointer-coarse: comfortable tap targets regardless of width */
  @media (pointer:coarse){
    .btn{padding:var(--sp-2) var(--sp-4)}
    .note-expand{padding:var(--sp-1) 0}
    .scard{padding:var(--sp-3) var(--sp-4)}
  }

  /* Entrance motion — staggered rise-in for the summary + trade cards.
     Uses fill-mode:backwards so the lift/hover transforms aren't overridden after play. */
  @keyframes riseIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:no-preference){
    /* Entrance rise-in only on the FIRST paint (body.intro-anim). render() rebuilds the list on every
       dropdown toggle / status change; without this gate all cards replay the stagger and the list flickers. */
    body.intro-anim .summary>*{animation:riseIn .5s var(--ease-out) backwards}
    body.intro-anim .summary>*:nth-child(2){animation-delay:.05s}
    body.intro-anim .summary>*:nth-child(3){animation-delay:.1s}
    /* universal first-paint entrance: every view's content cascades in (not just RFQ trade cards) */
    body.intro-anim #content>*{animation:riseIn .5s var(--ease-out) backwards}
    body.intro-anim #content>*:nth-child(2){animation-delay:.05s}
    body.intro-anim #content>*:nth-child(3){animation-delay:.1s}
    body.intro-anim #content>*:nth-child(4){animation-delay:.15s}
    body.intro-anim #content>*:nth-child(5){animation-delay:.2s}
    body.intro-anim #content>*:nth-child(n+6){animation-delay:.24s}
    .modal-card,.let-card{animation:modalIn .26s var(--ease-out) both}
  }
  @media (prefers-reduced-motion:reduce){
    *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  }

  /* ── Squared-off / engineered corners — construction-tool aesthetic.
        One token (--r) controls every tile, card, control and modal.
        Genuinely circular elements (status dots) are deliberately left round. ── */
  :root{ --r:9px; --radius:14px; }
  .src-chip,.btn,.btn.xs,.btn.icon-only,.export-menu,.export-menu button,
  .field input,.field select,.budget-panel,.let-panel,.scard,.trade-card,
  .pin-btn,.mini,.head-field input,.head-field select,.trade-note-row input,
  .sub-name-in,.auto-tag,.watch-tag,.pill,.cell-input,.note-view,.note-area,
  .toast,.toast .t-act,.row-details,.del-confirm button,.modal-card,.modal-close,
  .d-facts,.trade-budget,.trade-onsite,.let-chip,.let-money,.let-to,.let-readout,
  .set-proj,.set-field input,.set-field select,.set-trade .set-tname,.set-budget,
  .set-tdate,.dropzone,.pkg,table.subs tbody tr,.empty-state,.let-card,
  ::-webkit-scrollbar-thumb{ border-radius:var(--r) !important }
  a:focus-visible,button:focus-visible,[tabindex]:focus-visible,
  select:focus-visible,input:focus-visible,summary:focus-visible{ border-radius:var(--r) }

  /* ── Lively engineering detail: corner registration ticks + live pulse ──────
        Corner brackets frame the summary tiles like marks on a technical drawing;
        they're colour-coded to each tile's data and brighten on interaction. ── */
  .budget-panel,.let-panel{position:relative}
  .budget-panel::before,.let-panel::before,.scard::before{
    content:"";position:absolute;top:5px;left:5px;width:6px;height:6px;pointer-events:none;z-index:1;
    border-top:1.5px solid var(--tick,var(--border2));border-left:1.5px solid var(--tick,var(--border2));
    transition:border-color .25s var(--ease)}
  .budget-panel::after,.let-panel::after,.scard::after{
    content:"";position:absolute;bottom:5px;right:5px;width:6px;height:6px;pointer-events:none;z-index:1;
    border-bottom:1.5px solid var(--tick,var(--border2));border-right:1.5px solid var(--tick,var(--border2));
    transition:border-color .25s var(--ease)}
  /* the Budget hero + status tiles carry their meaning into the ticks */
  .budget-panel:not(.sub)::before,.budget-panel:not(.sub)::after{--tick:color-mix(in srgb,var(--amber) 72%,transparent)}
  .let-panel.pos::before,.let-panel.pos::after{--tick:color-mix(in srgb,var(--quote) 60%,transparent)}
  .let-panel.neg::before,.let-panel.neg::after{--tick:color-mix(in srgb,var(--chase) 60%,transparent)}
  .let-panel.pct::before,.let-panel.pct::after{--tick:color-mix(in srgb,var(--reply) 60%,transparent)}
  /* interactive stat cards: ticks snap to the accent on hover / active */
  .scard:hover::before,.scard:hover::after{border-color:var(--amber)}
  .scard.active::before,.scard.active::after{border-color:var(--accent,var(--amber))}
  /* panels give a faint border lift on hover so they feel responsive too */
  .budget-panel:hover,.let-panel:hover{border-color:var(--muted2)}
  /* live packages: the amber edge bar gently breathes to signal an active RFQ */
  .trade-card[data-ps="live"]::before{animation:livePulse 2.6s ease-in-out infinite}
  @keyframes livePulse{0%,100%{box-shadow:0 0 0 0 transparent}50%{box-shadow:0 0 14px 1px color-mix(in srgb,var(--quote) 55%,transparent)}}

  /* ── "alive" micro-interactions ─────────────────────────────────────────── */
  /* light sweep across a package card on hover */
  .trade-card::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;opacity:0;
    background:linear-gradient(105deg, transparent 33%, rgba(255,255,255,.07) 50%, transparent 67%);
    transform:translateX(-26%);transition:opacity .35s var(--ease),transform .7s var(--ease)}
  .trade-card:hover::after{opacity:1;transform:translateX(26%)}
  /* press feedback (subtle scale) */
  .scard:active,.shop-chip:active,.viewtab:active{transform:scale(.975)}
  .let-chip:active,.review-chip:active,.note-expand:active,.pin-btn:active{transform:scale(.96)}
  /* meaningful loading motion — the refresh icon spins only while syncing */
  .btn.primary.spinning .ic{animation:spin 1s linear infinite}
  @keyframes spin{to{transform:rotate(360deg)}}
  /* whisper of ambient light drifting behind content (very slow; reduced-motion freezes it) */
  .wrap{position:relative;z-index:1}
  body::before{content:none}
  @keyframes auroraDrift{0%{transform:translate3d(-3%,-2%,0) scale(1)}100%{transform:translate3d(7%,4%,0) scale(1.18)}}

  /* ── command palette — rendered inside the bottom-right corner widget's Search tab
     (procure-assistant.js); the old topbar #cmdkBtn + top-center #cmdk overlay/card are
     retired, but cmdk-inputwrap/list/group/item/foot stay live — that's what gets built
     into the corner panel now. ────────────────────────────────────────────────────── */
  .cmdk-foot kbd{font-family:var(--body);font-size:10px;line-height:1;background:var(--bg2);border:1px solid var(--border2);border-radius:4px;padding:var(--sp-0) var(--sp-1);color:var(--muted)}
  .cmdk-inputwrap{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-4);border-bottom:1px solid var(--border)}
  .cmdk-inputwrap .ic{color:var(--muted);flex:0 0 auto}
  .cmdk-input{flex:1;background:transparent;border:none;outline:none;color:var(--txt);font-family:var(--body);font-size:15px;letter-spacing:.2px}
  .cmdk-input::placeholder{color:var(--muted)}
  .cmdk-list{max-height:54vh;overflow:auto;padding:var(--sp-2);scrollbar-width:thin}
  .cmdk-group{font-family:var(--body);font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted2);font-weight:600;padding:var(--sp-3) var(--sp-3) var(--sp-1)}
  .cmdk-item{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);border-radius:var(--r,4px);cursor:pointer;color:var(--txt)}
  .cmdk-item .ic{color:var(--muted);flex:0 0 auto}
  .cmdk-item.sel,.cmdk-item:hover{background:color-mix(in srgb,var(--amber) 15%,transparent)}
  .cmdk-item.sel{box-shadow:inset 2px 0 0 var(--amber)}
  .cmdk-item.sel .ic{color:var(--amber2)}
  .ci-label{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ci-sub{font-size:11px;color:var(--muted);margin-left:auto;white-space:nowrap;text-transform:uppercase;letter-spacing:.4px;flex:0 0 auto}
  .cmdk-empty{padding:var(--sp-5) var(--sp-4);text-align:center;color:var(--muted);font-size:13px}
  .cmdk-foot{display:flex;gap:var(--sp-4);padding:var(--sp-2) var(--sp-4);border-top:1px solid var(--border);font-size:11px;color:var(--muted2)}
  .cmdk-foot span{display:inline-flex;align-items:center;gap:var(--sp-1)}
  .cmdk-flash{animation:cmdkFlash 1.4s var(--ease-out)}
  @keyframes cmdkFlash{0%{box-shadow:0 0 0 0 transparent}16%{box-shadow:0 0 0 2px var(--amber),0 0 24px -2px color-mix(in srgb,var(--amber) 60%,transparent)}100%{box-shadow:0 0 0 0 transparent}}

  /* ── Alerts bell + activity slide-over ──────────────────────────────────── */
  .alert-btn{position:relative;color:var(--muted)}
  .alert-btn.has-alerts{color:var(--amber2);border-color:color-mix(in srgb,var(--amber) 45%,var(--border2))}
  .alert-badge{position:absolute;top:-4px;right:-4px;min-width:17px;height:17px;padding:0 var(--sp-1);display:inline-flex;align-items:center;justify-content:center;background:var(--chase);color:#fff;border-radius:8px;font-family:var(--body);font-size:10px;font-weight:700;line-height:1;border:2px solid var(--bg);font-variant-numeric:tabular-nums}
  .sheet-overlay{position:fixed;inset:0;z-index:11000;display:flex;background:rgba(4,4,6,.6);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);animation:overlayIn .15s var(--ease-out) both}
  .sheet-overlay[hidden]{display:none}
  .sheet{margin-left:auto;height:100%;width:100%;max-width:404px;background:var(--panel-grad);border-left:1px solid var(--border2);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;animation:sheetIn .24s var(--ease-out) both}
  @keyframes sheetIn{from{transform:translateX(34px);opacity:.5}to{transform:none;opacity:1}}
  .sheet-head{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-4) var(--sp-4);border-bottom:1px solid var(--border)}
  .sheet-head h2{margin:0;font-family:var(--display);font-size:18px;letter-spacing:.5px;color:var(--txt);text-transform:uppercase}
  .sheet-head .ic{color:var(--amber2)}
  .sheet-close{margin-left:auto;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border2);border-radius:var(--r,4px);background:var(--panel2);color:var(--muted);cursor:pointer}
  .sheet-body{overflow:auto;padding:var(--sp-2) var(--sp-3) var(--sp-4);flex:1}
  .sheet-sec{font-family:var(--body);font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted2);font-weight:600;padding:var(--sp-4) var(--sp-1) var(--sp-1)}
  .alert-item,.log-item{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--pad-row-y) var(--sp-3);border-radius:var(--r,4px);border:1px solid var(--border);background:var(--panel2);margin:var(--sp-1) 0;cursor:pointer;transition:border-color .15s,background .15s}
  .alert-item:hover,.log-item:hover{border-color:var(--muted2);background:var(--bg2)}
  .alert-dot{width:8px;height:8px;border-radius:50%;margin-top:var(--sp-1);flex:0 0 auto;background:var(--await)}
  .alert-item.sev-high .alert-dot{background:var(--chase);box-shadow:0 0 8px var(--chase)}
  .alert-item.sev-med .alert-dot{background:var(--await)}
  .alert-text{font-size:12px;color:var(--txt);line-height:1.45}
  .log-item{cursor:default}
  .log-item.has-ref{cursor:pointer}
  .log-when{font-size:10px;color:var(--muted2);white-space:nowrap;margin-left:auto;flex:0 0 auto}
  .log-kind{font-size:9px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:700}
  .sheet-empty{padding:var(--sp-4) var(--sp-2);color:var(--muted);font-size:12px;font-style:italic}
  /* D-5 notifications bell (0047_hs_completeness) — reuses .sheet/.alert-item chrome above */
  .notif-item{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3);padding:var(--pad-row-y) var(--sp-3);border-radius:var(--r,4px);border:1px solid var(--border);background:var(--panel2);margin:var(--sp-1) 0}
  .notif-item-main{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}
  .notif-item-top{display:flex;align-items:center;gap:var(--sp-2)}
  .notif-due{font-size:11px;color:var(--muted2);white-space:nowrap}
  .notif-subject{font-size:13px;font-weight:600;color:var(--txt);line-height:1.35}
  .notif-body{font-size:12px;color:var(--muted);line-height:1.45}
  .notif-resolve{flex:none}

  /* ── RFI register table ─────────────────────────────────────────────────── */
  table.rfi{margin-top:var(--sp-2)}
  table.rfi tbody tr{cursor:pointer}
  table.rfi .col-rno{width:9%} table.rfi .col-rsub{width:29%} table.rfi .col-rcat{width:11%}
  table.rfi .col-rbic{width:12%} table.rfi .col-rfrom{width:12%} table.rfi .col-rdue{width:9%}
  table.rfi .col-rimp{width:10%} table.rfi .col-rstatus{width:8%}
  .rfi-subj{font-weight:600;font-size:12px;color:var(--txt)}
  .rfi-summary{color:var(--muted);font-size:11px;margin-top:var(--sp-0);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .rfi-src{color:var(--muted2);font-size:10px;margin-top:var(--sp-1);display:inline-flex;align-items:center;gap:var(--sp-1)}
  .rfi-src .ic{flex:0 0 auto;color:var(--amber2)}
  .rfi-none{color:var(--muted2)}
  .rfi-meta{font-size:11px;color:var(--txt);font-variant-numeric:tabular-nums}
  .rfi-due{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;margin-top:var(--sp-0);white-space:nowrap}
  .rfi-due.overdue{color:var(--chase);font-weight:700}
  .rfi-prio{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:var(--sp-1);vertical-align:middle}
  .rfi-prio.high{background:var(--chase)} .rfi-prio.normal{background:var(--muted2)} .rfi-prio.low{background:var(--muted2);opacity:.5}
  .rfi-cat{font-size:11px;color:var(--muted);text-transform:capitalize}
  .rfi-bic{font-size:12px;color:var(--txt);font-weight:600}
  .rfi-refchip{display:inline-flex;align-items:center;gap:3px;font-size:10px;color:var(--muted2);margin-top:var(--sp-1)}
  .rfi-imp{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:700;padding:1px 6px;border-radius:6px;margin:0 var(--sp-0) var(--sp-0) 0;white-space:nowrap}
  .rfi-imp.cost{color:var(--chase);background:color-mix(in srgb,var(--chase) 12%,transparent)}
  .rfi-imp.sched{color:var(--await);background:color-mix(in srgb,var(--await) 14%,transparent)}
  .rfi-imp .ic{flex:0 0 auto}
  .rfi-filters{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);width:100%}
  .rfi-chips{display:inline-flex;flex-wrap:nowrap;max-width:100%;overflow-x:auto;border:1.5px solid var(--border2);border-radius:var(--r);background:var(--panel)}
  .rfi-chip{font:inherit;font-size:11px;font-weight:600;color:var(--muted);background:transparent;border:0;border-radius:0;padding:var(--sp-2) var(--sp-3);cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1);white-space:nowrap;transition:background .12s,color .12s}
  .rfi-chip+.rfi-chip{border-left:1.5px solid var(--border2)}
  .rfi-chip:hover{background:color-mix(in srgb,var(--amber) 10%,transparent);color:var(--txt)}
  .rfi-chip b{font-variant-numeric:tabular-nums;color:var(--muted2)}
  .rfi-chip.on{color:var(--txt);background:color-mix(in srgb,var(--c,var(--amber)) 14%,transparent);box-shadow:inset 0 -2px 0 var(--c,var(--amber))}
  .rfi-chip.on b{color:var(--txt)}
  .rfi-chip.is-zero{opacity:.5}
  /* detail drawer */
  .rfi-official{border:1.5px solid var(--awarded);background:color-mix(in srgb,var(--awarded) 8%,transparent);border-radius:10px;padding:var(--sp-3);margin-top:var(--sp-2)}
  .rfi-official .d-h{color:var(--awarded)}
  .rfi-thread{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-2)}
  .rfi-reply{border:1.5px solid var(--line);border-radius:10px;padding:var(--sp-3);background:var(--bg2)}
  .rfi-reply.official{border-color:var(--awarded)}
  .rfi-reply-top{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;color:var(--muted);margin-bottom:var(--sp-1);flex-wrap:wrap}
  .rfi-reply-who{font-weight:700;color:var(--txt)}
  .rfi-reply-body{font-size:13px;color:var(--txt);line-height:1.5;white-space:pre-wrap}
  .rfi-timeline{display:flex;flex-direction:column;gap:var(--sp-1);border-left:2px solid var(--line);padding-left:var(--sp-3);margin:var(--sp-2) 0 0 var(--sp-1)}
  .rfi-tl-item{font-size:11px;color:var(--muted);position:relative}
  .rfi-tl-item::before{content:"";position:absolute;left:calc(-1 * var(--sp-3) - 5px);top:5px;width:7px;height:7px;border-radius:50%;background:var(--amber)}
  .rfi-tl-when{color:var(--muted2);font-variant-numeric:tabular-nums}
  .rfi-tl-kind{font-weight:700;color:var(--txt);text-transform:capitalize}
  .rfi-actions{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-4)}
  .rfi-chiplist{display:flex;flex-wrap:wrap;gap:var(--sp-1);margin-top:var(--sp-1)}
  .rfi-party{font-size:11px;color:var(--muted);background:var(--bg2);border:1px solid var(--line);border-radius:6px;padding:2px 8px}
  .rfi-ref-item{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;padding:var(--sp-1) 0;border-bottom:1px solid var(--line)}
  .rfi-ref-kind{font-size:9px;text-transform:uppercase;letter-spacing:.5px;font-weight:700;color:var(--muted2);background:var(--bg2);border-radius:4px;padding:1px 6px;flex:0 0 auto}
  .rfi-followrow{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;padding:var(--sp-1) 0}
  .rfi-followrow.done{opacity:.6;text-decoration:line-through}
  .rfi-dupe{border:1.5px solid var(--await);background:color-mix(in srgb,var(--await) 10%,transparent);border-radius:8px;padding:var(--sp-2) var(--sp-3);font-size:12px;color:var(--txt);margin-top:var(--sp-2);line-height:1.5}

  /* ── RFI detail as a right-anchored drawer — reuses the .sheet chrome (sheetIn slide,
        full-height right panel); sticky head + foot, scrolling body. The shared
        #detailModal overlay flips to right-anchored layout only while it hosts .rfi-sheet,
        so the centred modal-card forms (log response / edit / refs) are unaffected. ── */
  .modal-overlay:has(> .rfi-sheet){align-items:stretch;justify-content:flex-end;padding:0;overflow:hidden}
  .rfi-sheet{position:relative;margin-left:auto;height:100%;width:100%;max-width:min(560px,100vw);background:var(--panel-grad);border-left:1px solid var(--border2);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;animation:sheetIn .24s var(--ease-out) both}
  .rfi-sheet-head{flex:0 0 auto;display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border)}
  .rfi-sheet-id{flex:1;min-width:0}
  .rfi-sheet-id .d-eyebrow{padding-right:0}
  .rfi-sheet-id .d-title{font-size:20px;margin:var(--sp-1) 0 var(--sp-2)}
  .rfi-sheet-id .d-pillrow{margin-bottom:0}
  .rfi-sheet-nav{flex:0 0 auto;display:flex;align-items:center;gap:var(--sp-1)}
  .rfi-sheet-nav .modal-close{position:static;top:auto;right:auto;margin-left:var(--sp-1)}
  .rfi-nav-btn{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--border2);border-radius:8px;background:var(--panel2);color:var(--muted);cursor:pointer;transition:color .15s,border-color .15s}
  .rfi-nav-btn:hover{color:var(--txt);border-color:var(--amber)}
  .rfi-nav-btn[disabled]{opacity:.35;cursor:default;pointer-events:none}
  .rfi-sheet-body{flex:1;min-height:0;overflow:auto;padding:var(--sp-4) var(--sp-5) var(--sp-5)}
  .rfi-sheet-foot{flex:0 0 auto;display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);padding:var(--sp-3) var(--sp-5);border-top:1px solid var(--border);background:var(--panel2)}
  .rfi-more-wrap{position:relative;margin-left:auto}
  .rfi-sheet-foot .export-menu{top:auto;bottom:calc(100% + var(--sp-2))}

  /* ── Register rows: keyboard access — rows carry tabindex, ring sits inset so it
        stays visible inside tables ── */
  tr[tabindex="0"]:focus-visible,.dwg-main[tabindex="0"]:focus-visible,.trade-head[tabindex="0"]:focus-visible{outline:2px solid var(--amber);outline-offset:-2px}
  /* ── Row-action collapse: per-row action clusters (Packages Open/Live/Closed segments,
        Drawings View/+Rev/Transmit/status) stay quiet until the row is hovered or holds
        focus. opacity (not display) so layout never shifts and they remain clickable;
        touch devices (hover:none) keep them always visible. ── */
  @media(hover:hover){
    .trade-head .pkg,.dwg-main .dwg-act{opacity:.15;transition:opacity .15s var(--ease)}
    .trade-head:hover .pkg,.trade-head:focus-within .pkg,
    .dwg-row:hover .dwg-act,.dwg-row:focus-within .dwg-act{opacity:1}
  }

  /* ── Scope gap / overlap matrix ─────────────────────────────────────────── */
  table.scopem{margin-top:var(--sp-2)}
  table.scopem .col-sstatus{width:104px} table.scopem .col-selem{width:22%} table.scopem .col-snote{width:24%}
  table.scopem .col-strade{text-align:center}
  table.scopem thead th.col-strade{font-size:10px;white-space:nowrap;color:var(--muted)}
  .scope-name{font-weight:600;font-size:13px;color:var(--txt)}
  .scope-group{font-size:10px;color:var(--muted2);text-transform:uppercase;letter-spacing:.4px;margin-top:var(--sp-0)}
  .scope-cell{text-align:center;cursor:pointer;transition:background .12s}
  .scope-cell:hover{background:color-mix(in srgb,var(--amber) 12%,transparent)}
  /* B4: no scope:edit -> the cell is a readout, not a control (no click handler is
     wired either; this only stops it LOOKING clickable) */
  .scope-cell.ro{cursor:default}
  .scope-cell.ro:hover{background:none}
  .scope-cell.ro.on:hover{background:color-mix(in srgb,var(--awarded) 16%,transparent)}
  .scope-cell.on{background:color-mix(in srgb,var(--awarded) 16%,transparent)}
  .scope-cell .ic{color:var(--awarded)}
  .scope-row.st-gap .col-selem{box-shadow:inset 3px 0 0 var(--chase)}
  .scope-row.st-overlap .col-selem{box-shadow:inset 3px 0 0 var(--await)}
  .scope-row.st-ok .col-selem{box-shadow:inset 3px 0 0 var(--awarded)}
  /* D-k/A6 (RR-1.5): now a rows="1" textarea so notes wrap. font:inherit
     kills the UA textarea font, then the .cell-input longhands are re-asserted
     because this rule sits later in the cascade than .cell-input and must
     still read as the same cell input (12px/500 var(--body), not the table's
     inherited 13px). Growth = field-sizing + autoGrowLine() fallback. */
  .scope-note{width:100%;display:block;resize:none;overflow:hidden;font:inherit;font-family:var(--body);font-size:12px;font-weight:500;field-sizing:content}

  /* ═══ PREMIUM TYPE & LINE-WEIGHT PASS (global) ═══════════════════════════════
     Larger text, tighter tracking on display/values, heavier headers, more header
     labels, and thicker rules — applied app-wide via one override block. */
  body{font-size:15px;letter-spacing:-.002em}
  /* icons + accent lines a touch heavier */
  .ic{stroke-width:2.2px}
  .trade-card::before{width:3px}
  .viewtab.on{box-shadow:inset 0 -3px 0 var(--amber)}
  .pkg button.on[data-p="open"]{box-shadow:inset 0 -3px 0 var(--grey)}
  .pkg button.on[data-p="live"]{box-shadow:inset 0 -3px 0 var(--amber)}
  .pkg button.on[data-p="closed"]{box-shadow:inset 0 -3px 0 var(--awarded)}
  /* HEADERS — bigger, heavier, tighter */
  .titleblock h1{font-size:22px;letter-spacing:3px}
  .viewtab{font-size:14px;font-weight:700;letter-spacing:.2px;padding:var(--sp-2) var(--sp-4)}
  .sum-group-h{font-size:12px;font-weight:700;letter-spacing:.9px;color:var(--muted)}
  .trade-title{font-size:18px;letter-spacing:1.4px}
  .shop-set-title{font-size:15px;letter-spacing:.2px}
  .shop-trade-toggle+.trade-title,.shop-trade-head .trade-title{letter-spacing:1.2px}
  .sheet-head h2{font-size:20px;letter-spacing:.6px}
  .nm-sub{font-size:22px}
  .cmdk-input{font-size:16px}
  /* section kickers above each summary bar — "more header text" */
  .shop-summary::before,#rfiSummary::before,#scopeSummary::before{flex-basis:100%;font-family:var(--body);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--muted2);padding:0 var(--sp-0) var(--sp-1)}
  #shopSummary::before{content:"Drawing register"}
  #rfiSummary::before{content:"RFI register"}
  #scopeSummary::before{content:"Scope coverage"}
  /* VALUES — bigger, tight numeric tracking */
  .budget-panel .bp-value,.let-panel .bp-value{font-size:22px;letter-spacing:-.4px}
  .scard .n{font-size:22px;letter-spacing:-.5px}
  .shop-chip .n{font-size:21px;letter-spacing:-.4px}
  .bp-label,.scard .l,.shop-chip .l{font-size:11px;letter-spacing:.6px;font-weight:600}
  .dwg-no{font-size:14px}
  /* BODY / DATA text — larger */
  table.subs{font-size:13px}
  table.subs thead th{font-size:10px;letter-spacing:.8px;font-weight:600}
  .field input,.field select{font-size:14px}
  .field label{font-size:12px;letter-spacing:.7px}
  .btn{font-size:13px} .btn.xs{font-size:12px}
  .pill{font-size:12px} .pill.lg{font-size:12px}
  .activity{font-size:13px} .note-points li{font-size:13px}
  .rfi-subj{font-size:13px} .rfi-summary{font-size:12px} .rfi-action{font-size:12px}
  .scope-name{font-size:14px}
  .cmdk-item .ci-label{font-size:14px}
  .alert-text{font-size:13px}
  /* THICKER RULES — 1.5px borders on surfaces/controls + heavier dividers */
  .trade-card,.budget-panel,.let-panel,.scard,.note-view,.modal-card,.let-card,
  .field input,.field select,.cell-input,.btn,.pill,.src-chip,.shop-chip,.let-chip,.trade-onsite,
  .review-chip,.pin-btn,.pkg,.alert-item,.log-item{border-width:1.5px !important}
  table.subs thead th,table.subs tbody td{border-bottom-width:1.5px !important}
  .controls,header.top,.viewtabs,.legend,.shop-set,.shop-set-head,.sheet-head,.cmdk-inputwrap{border-bottom-width:1.5px !important}
  header.top::after{height:2px}
  /* slightly tighter layout rhythm to balance the larger type */
  .controls{padding:var(--pad-bar-y) 0}
  .sum-group-row{gap:var(--sp-2)}

  /* ═══ PROGRAMME — Target vs Site Look-Ahead comparison ═══════════════════════ */
  .prog-stats{display:flex;flex-wrap:wrap;gap:var(--gap-grid)}
  .prog-stat{border:1.5px solid var(--border2);background:var(--panel);padding:var(--sp-2) var(--sp-4);min-width:118px;box-shadow:inset 3px 0 0 var(--c,var(--amber))}
  .prog-stat .n{font-family:var(--display);font-size:20px;letter-spacing:-.3px;color:var(--txt);display:block;line-height:1.05}
  .prog-stat .l{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin-top:var(--sp-1);display:block}
  .prog-sec-h{font-family:var(--display);text-transform:uppercase;letter-spacing:1.3px;font-size:13px;color:var(--txt);margin:var(--sp-5) 0 var(--sp-3);display:flex;align-items:center;gap:var(--sp-3)}
  .prog-sec-h::after{content:"";flex:1;height:1.5px;background:var(--border)}
  .prog-hint{font-size:11px;color:var(--muted);line-height:1.55;margin:var(--sp-2) var(--sp-0) 0;max-width:1040px}

  .prog-modes{display:inline-flex;border:1.5px solid var(--border2);overflow:hidden;border-radius:var(--r)}
  .prog-mode{background:transparent;border:0;color:var(--muted);padding:var(--sp-2) var(--sp-3);font:600 12px var(--body);cursor:pointer;transition:background .18s var(--ease),color .18s var(--ease)}
  .prog-mode+.prog-mode{border-left:1.5px solid var(--border2)}
  .prog-mode.on{background:var(--amber);color:#1a1206}
  .prog-opacity-field input[type=range]{width:148px;accent-color:var(--amber);vertical-align:middle}

  .prog-stage{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:var(--sp-3)}
  .prog-doc[hidden]{display:none}
  .prog-doc-toggles{display:inline-flex;flex-wrap:nowrap;max-width:100%;overflow-x:auto;margin:-2px 0 var(--sp-3);border:1.5px solid var(--border2);border-radius:var(--r);background:var(--panel)}
  .prog-doc-tg{font:600 12px var(--body);color:var(--muted);background:transparent;border:0;border-radius:0;padding:var(--sp-2) var(--sp-3);cursor:pointer;white-space:nowrap;transition:background .18s var(--ease),color .18s var(--ease)}
  .prog-doc-tg+.prog-doc-tg{border-left:1.5px solid var(--border2)}
  .prog-doc-tg:hover{color:var(--txt);background:color-mix(in srgb,var(--amber) 7%,transparent)}
  .prog-doc-tg.on{background:color-mix(in srgb,var(--amber) 13%,transparent);color:var(--txt)}
  .prog-float{font-size:10px;font-weight:700;letter-spacing:.2px;padding:var(--sp-0) var(--sp-1);border-radius:3px;margin-left:var(--sp-1);vertical-align:middle}
  .prog-float.pos{color:#cdccca;background:rgba(177,176,175,.13)}
  .prog-float.neg{color:#adacaa;background:rgba(147,147,145,.13)}
  .prog-float.zero{color:var(--muted2);background:var(--panel2)}
  td.pcon{color:var(--muted2)}
  .prog-stage.mode-overlay{display:block;position:relative;height:662px}
  .prog-doc{display:flex;flex-direction:column;border:1.5px solid var(--border2);background:var(--panel);min-width:0}
  .prog-stage.mode-overlay .prog-doc{position:absolute;inset:0}
  .prog-stage.mode-overlay .prog-doc.look{pointer-events:none}
  .prog-doc-h{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1.5px solid var(--border);background:var(--panel2)}
  .prog-doc-h .t{font-family:var(--display);text-transform:uppercase;letter-spacing:.9px;font-size:12px;color:var(--txt)}
  .prog-doc-h .tag{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
  .prog-doc-open{margin-left:auto;font-size:11px;color:var(--amber2);text-decoration:none;border:1.5px solid var(--border2);padding:var(--sp-0) var(--sp-2);border-radius:var(--r);white-space:nowrap}
  .prog-doc-open:hover{border-color:var(--amber)}
  .prog-doc .frame{width:100%;height:600px;border:0;background:#fff;display:block}

  .prog-table-wrap{overflow-x:auto;border:1.5px solid var(--border2)}
  table.progm{width:100%;border-collapse:collapse}
  table.progm thead th{text-align:left;padding:var(--pad-cell-y) var(--pad-cell-x);font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);background:var(--panel2);border-bottom:1.5px solid var(--border2);white-space:nowrap}
  table.progm thead th.th-act{font-size:13px;font-weight:700;letter-spacing:.2px;text-transform:none;color:var(--txt)}
  table.progm tbody td{padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1.5px solid var(--border);vertical-align:middle;font-size:13px}
  table.progm td.pa{color:var(--txt);font-weight:500}
  table.progm td.pd{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
  table.progm td.pd .ar{color:var(--muted2)}
  table.progm td.pdv{white-space:nowrap}
  table.progm tbody tr.crit-row td{background:rgba(155,155,153,.055)}
  .prog-zone-row td{background:var(--panel2)!important;font-family:var(--display);text-transform:uppercase;letter-spacing:.9px;font-size:12px;color:var(--txt);border-bottom:1.5px solid var(--border2)!important}
  .prog-zone-row.crit td{box-shadow:inset 3px 0 0 #9b9b99}
  .prog-zone-row .zst{float:right;font-family:var(--body);font-weight:400}
  .prog-st{font-size:10px;font-weight:700;letter-spacing:.4px;padding:var(--sp-0) var(--sp-2);border-radius:var(--r);text-transform:uppercase}
  .prog-st.ok{color:#cdccca;background:rgba(177,176,175,.13)}
  .prog-st.behind{color:#adacaa;background:rgba(147,147,145,.13)}
  .prog-st.ahead{color:#b4b3b1;background:rgba(152,152,150,.13)}
  .prog-dv{font-weight:700;font-variant-numeric:tabular-nums}
  .prog-dv.pos{color:#adacaa}.prog-dv.zero{color:var(--muted2)}.prog-dv.neg{color:#b4b3b1}
  .prog-st.at{color:#cdccca;background:rgba(184,183,181,.16)}
  .prog-st.none{color:var(--muted2);background:var(--panel2)}
  .pd.pproj{font-weight:600;color:var(--txt)}
  .pd .pd-none{color:var(--muted2)}
  table.progm tbody tr.over-con td:first-child{box-shadow:inset 3px 0 0 #727270}
  table.progm tbody tr.prog-zone-row.zone-over td{box-shadow:inset 3px 0 0 #727270}

  .prog-imp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap-grid)}
  .prog-imp-card{border:1.5px solid var(--border2);background:var(--panel);display:flex;flex-direction:column}
  .prog-imp-card .hd{padding:var(--sp-3) var(--sp-4);border-bottom:1.5px solid var(--border);display:flex;align-items:center;gap:var(--sp-2);font-family:var(--display);text-transform:uppercase;letter-spacing:1px;font-size:13px}
  .imp-immediate .hd{color:#adacaa;box-shadow:inset 3px 0 0 #9b9b99}
  .imp-medium .hd{color:var(--amber2);box-shadow:inset 3px 0 0 var(--amber)}
  .imp-long .hd{color:#b4b3b1;box-shadow:inset 3px 0 0 #a6a5a4}
  .imp-horizon{margin-left:auto;font-size:10px;color:var(--muted);letter-spacing:.4px;text-transform:none;font-family:var(--body);font-weight:500}
  .prog-imp-card ul{list-style:none;margin:0;padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3)}
  .imp-item .t{font-size:13px;color:var(--txt);font-weight:600;margin-bottom:var(--sp-1);line-height:1.4}
  .imp-item .d{font-size:12px;color:var(--muted);line-height:1.55}
  .imp-trades{display:flex;flex-wrap:wrap;gap:var(--sp-1);margin-top:var(--sp-2)}
  .imp-action{margin-top:var(--sp-2);font-size:11px;color:var(--amber2);line-height:1.45}
  .trade-chip{font-size:10px;letter-spacing:.3px;color:var(--txt);background:var(--panel2);border:1.5px solid var(--border2);padding:var(--sp-0) var(--sp-2);border-radius:var(--r);white-space:nowrap}

  .prog-chain{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);padding:var(--sp-4);border:1.5px solid var(--border2);background:var(--panel)}
  .chain-node{font-size:11px;color:var(--txt);background:var(--panel2);border:1.5px solid var(--border2);padding:var(--sp-1) var(--sp-2);border-radius:var(--r);white-space:nowrap}
  .chain-node.hot{border-color:#9b9b99;color:#c7c6c4;background:rgba(155,155,153,.08)}
  .chain-arrow{color:var(--muted2);font-size:13px}
  @media(max-width:900px){ .prog-stage{grid-template-columns:1fr} .prog-imp-grid{grid-template-columns:1fr} }

  /* ═══ CLICK-TO-PICK STATUS — coloured badge is a button; a popover replaces the dropdown ═══ */
  .status-pick{display:inline-flex;align-items:center;gap:var(--sp-1);background:transparent;border:0;padding:0;margin:0;cursor:pointer;font:inherit;vertical-align:middle}
  .status-pick .pill{cursor:pointer}
  .sp-caret{font-size:9px;line-height:1;color:var(--muted2);transition:color .18s var(--ease)}
  .status-pick:hover .sp-caret{color:var(--txt)}
  .status-pick:hover .pill{filter:brightness(1.12)}
  .status-pick:focus-visible{outline:2px solid var(--amber);outline-offset:2px;border-radius:3px}
  .status-pop{position:fixed;z-index:1200;background:var(--panel2);border:1.5px solid var(--border2);border-radius:var(--r);box-shadow:var(--shadow-lg);padding:var(--sp-1);min-width:168px;display:flex;flex-direction:column;gap:var(--sp-0)}
  .status-pop-opt{display:flex;align-items:center;gap:var(--sp-2);background:transparent;border:0;color:var(--txt);font:500 13px var(--body);text-align:left;padding:var(--sp-2) var(--sp-2);border-radius:var(--r);cursor:pointer;white-space:nowrap;transition:background .18s var(--ease)}
  .status-pop-opt:hover{background:var(--panel)}
  .status-pop-opt.on{background:color-mix(in srgb,var(--amber) 14%,transparent)}
  .status-pop-opt.on .spo-label{font-weight:700}
  .status-pop-opt .spo-dot{width:11px;height:11px;border-radius:2px;flex:none;box-shadow:0 0 0 1.5px rgba(255,255,255,.08)}

  /* ═══ MEETING MINUTES ═════════════════════════════════════════════════════════════════════ */
  .mins-meta{display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-4);align-items:center;margin:var(--sp-0) 0 var(--sp-2);color:var(--muted);font-size:12px}
  .mins-meta b{color:var(--txt);font-weight:600}
  .mins-group{margin:var(--gap-stack) 0 0}
  .mins-group-h{display:flex;align-items:center;gap:var(--sp-2);font-family:var(--display);text-transform:uppercase;letter-spacing:1.1px;font-size:13px;color:var(--txt);margin:0 0 var(--sp-2)}
  .mins-group-h .mgh-type{font-family:var(--body);font-size:10px;letter-spacing:.6px;font-weight:700;text-transform:uppercase;padding:var(--sp-0) var(--sp-2);border-radius:var(--r);background:var(--panel2);border:1.5px solid var(--border2);color:var(--muted)}
  .mins-group-h .mgh-n{margin-left:auto;font-family:var(--body);font-weight:600;color:var(--muted);font-size:11px}
  .mins-group-h.t-trade{box-shadow:none}
  .mgh-type.t-trade{color:#cdccca;border-color:rgba(177,176,175,.4)}
  .mgh-type.t-authority{color:#adacaa;border-color:rgba(147,147,145,.4)}
  .mgh-type.t-consultant{color:#b4b3b1;border-color:rgba(152,152,150,.4)}
  .mgh-type.t-commercial{color:var(--amber2);border-color:color-mix(in srgb,var(--amber) 45%,transparent)}
  .mgh-type.t-site{color:var(--muted);border-color:var(--border2)}

  /* action items flow into columns on a wide work surface — fills the side space, less scroll */
  .mins-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(430px,1fr));gap:var(--gap-grid);align-items:start}
  .mins-item{display:flex;gap:var(--sp-3);align-items:flex-start;padding:var(--pad-row-y) var(--sp-4);border:1.5px solid var(--border2);background:var(--panel);border-radius:var(--r);box-shadow:inset 3px 0 0 var(--mi-accent,var(--border2))}
  .mins-item.done{opacity:.55}
  .mins-item.done .mi-title{text-decoration:line-through}
  .mi-body{flex:1;min-width:0}
  .mi-title{font-size:13px;font-weight:600;color:var(--txt);line-height:1.4}
  .mi-detail{font-size:12px;color:var(--muted);line-height:1.5;margin-top:var(--sp-1);white-space:pre-line}
  .mi-tags{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-2);align-items:center}
  .mi-who{font-size:11px;letter-spacing:.2px;color:#1a1206;background:var(--amber);border-radius:var(--r);padding:var(--sp-0) var(--sp-2);font-weight:700;white-space:nowrap}
  .mi-who.unassigned{background:var(--panel2);color:var(--muted);border:1.5px solid var(--border2);font-weight:600}
  .mi-src{font-size:10px;letter-spacing:.3px;text-transform:uppercase;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--r);white-space:nowrap}
  .mi-src.design{color:#b4b3b1;background:rgba(152,152,150,.12)}
  .mi-src.internal{color:#cdccca;background:rgba(177,176,175,.12)}
  .mi-src.both{color:var(--amber2);background:color-mix(in srgb,var(--amber) 14%,transparent)}
  .mi-src.subbie{color:#b7b6b5;background:rgba(154,153,151,.15)}

  /* ═══ PROJECT SEARCH (RAG chat) ═══════════════════════════════════════════════════════════ */
  .ask-wrap{display:flex;flex-direction:column;height:calc(100vh - 220px);min-height:460px;width:100%;max-width:900px;margin:0 auto}
  .ask-thread{flex:1;overflow-y:auto;padding:var(--sp-2) var(--sp-0) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3)}
  .ask-welcome{margin:auto;max-width:620px;text-align:center;padding:var(--sp-6) var(--sp-4)}
  .ask-welcome .ask-logo{width:58px;height:58px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;margin:0 auto var(--sp-4);background:var(--panel2);border:1.5px solid var(--border2);color:var(--amber)}
  .ask-welcome h2{font-family:var(--display);text-transform:uppercase;letter-spacing:2px;font-size:22px;color:var(--txt);margin:0 0 var(--sp-2)}
  .ask-welcome p{font-size:13px;color:var(--muted);line-height:1.6;margin:0 auto var(--sp-4);max-width:520px}
  .ask-examples{display:flex;flex-wrap:wrap;gap:var(--sp-2);justify-content:center}
  .ask-ex{font:500 12px var(--body);color:var(--txt);background:var(--panel);border:1.5px solid var(--border2);border-radius:var(--r);padding:var(--sp-2) var(--sp-3);cursor:pointer;text-align:left;transition:all .18s var(--ease)}
  .ask-ex:hover{border-color:var(--amber);color:var(--amber2)}
  .ask-offline{margin-top:var(--sp-4);font-size:11px;color:var(--muted2);line-height:1.5}
  .ask-prefs{max-width:900px;margin:0 auto var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--panel);border:1.5px solid var(--border2);border-radius:var(--r);display:flex;flex-direction:column;gap:var(--sp-2)}
  .ask-prefs[hidden]{display:none}
  .ask-prefs-label{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);display:flex;flex-direction:column;gap:var(--sp-1)}
  .ask-prefs-hint{font-size:11px;text-transform:none;letter-spacing:0;color:var(--muted2);font-weight:400}
  .ask-prefs-input{width:100%;resize:vertical;min-height:64px;background:var(--panel2);border:1.5px solid var(--border2);border-radius:var(--r);color:var(--txt);font:400 13px var(--body);padding:var(--sp-2) var(--sp-3);line-height:1.5;box-sizing:border-box}
  .ask-prefs-input:focus{outline:none;border-color:var(--amber)}
  .ask-prefs-actions{display:flex;align-items:center;gap:var(--sp-2)}
  .ask-prefs-count{font-size:11px;color:var(--muted2)}
  .ask-proposed{margin-top:var(--sp-3);padding-top:var(--sp-2);border-top:1.5px solid var(--border);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
  .ask-proposed-label{font-size:12px;color:var(--amber2);font-weight:600}
  .ask-msg{display:flex}
  .ask-msg.user{justify-content:flex-end}
  .ask-msg.bot{justify-content:flex-start}
  .ask-bubble{max-width:80%;padding:var(--sp-3) var(--sp-4);border-radius:11px;font-size:13px;line-height:1.6}
  .ask-msg.user .ask-bubble{background:var(--amber);color:#1a1206;font-weight:500;border-radius:11px 10px 2px 10px}
  .ask-msg.bot .ask-bubble{background:var(--panel);border:1.5px solid var(--border2);color:var(--txt);border-radius:11px 10px 10px 2px;box-shadow:inset 3px 0 0 var(--amber)}
  .ask-bubble strong{color:var(--txt);font-weight:700}
  .ask-cite{font-size:11px;font-weight:700;color:var(--amber2);background:color-mix(in srgb,var(--amber) 14%,transparent);border-radius:3px;padding:0 var(--sp-1)}
  .ask-typing{display:inline-flex;gap:var(--sp-0);vertical-align:middle;margin-right:var(--sp-2)}
  .ask-typing i{width:6px;height:6px;border-radius:50%;background:var(--muted);animation:askblink 1.2s infinite both}
  .ask-typing i:nth-child(2){animation-delay:.2s} .ask-typing i:nth-child(3){animation-delay:.4s}
  @keyframes askblink{0%,80%,100%{opacity:.25}40%{opacity:1}}
  .ask-sources{margin-top:var(--sp-3);padding-top:var(--sp-2);border-top:1.5px solid var(--border)}
  .ask-src-h{font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted2);font-weight:700;margin-bottom:var(--sp-2)}
  .ask-src{display:flex;align-items:center;gap:var(--sp-2);width:100%;text-align:left;background:var(--panel2);border:1.5px solid var(--border2);border-radius:var(--r);padding:var(--sp-1) var(--sp-2);margin-bottom:var(--sp-1);color:var(--txt);font:500 12px var(--body);cursor:pointer;text-decoration:none;transition:border-color .18s var(--ease)}
  .ask-src:hover{border-color:var(--amber)}
  .ask-src span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ask-src em{font-style:normal;font-size:10px;color:var(--muted2);white-space:nowrap}
  .ask-composer{display:flex;gap:var(--sp-2);align-items:flex-end;padding:var(--sp-3) 0 var(--sp-1);border-top:1.5px solid var(--border)}
  .ask-composer textarea{flex:1;resize:none;background:var(--panel);border:1.5px solid var(--border2);border-radius:var(--r);color:var(--txt);font:400 14px var(--body);padding:var(--sp-3) var(--sp-3);line-height:1.5;max-height:160px}
  .ask-composer textarea:focus{outline:none;border-color:var(--amber)}
  .ask-composer .btn.primary{height:var(--ctl-h-lg);padding:0 var(--sp-5)}
  .ask-foot{font-size:11px;color:var(--muted2);margin-top:var(--sp-2);line-height:1.5}
  .mi-ref{font-size:11px;color:var(--muted2);white-space:nowrap}
  .mi-due{font-size:11px;color:var(--muted);white-space:nowrap}
  .mi-due.urgent{color:#adacaa;font-weight:700}
  .mi-actions{display:flex;flex-direction:column;gap:var(--sp-2);flex:none}
  .mi-btn{display:inline-flex;align-items:center;gap:var(--sp-1);font:600 11px var(--body);border:1.5px solid var(--border2);background:var(--panel2);color:var(--muted);padding:var(--sp-1) var(--sp-2);border-radius:var(--r);cursor:pointer;white-space:nowrap;transition:all .18s var(--ease)}
  .mi-btn:hover{color:var(--txt);border-color:var(--border2)}
  .mi-btn.close:hover{color:#cdccca;border-color:#b1b0af}
  .mi-btn.reopen:hover{color:var(--amber2);border-color:var(--amber)}
  .mi-btn.remove:hover{color:#9b9b99;border-color:#9b9b99}

  /* ════════════════════════════════════════════════════════════════════════════════════════
     LIGHT ADMIN SHELL — sidebar + topbar + light-theme overrides (Brompton DEFECTS aesthetic).
     Appended last so it wins over the earlier dark-tuned rules. */
  .app-shell{display:flex;min-height:100vh;align-items:stretch}
  .sidebar{width:250px;flex:none;background:var(--panel);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:50}
  .brand{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-5) var(--sp-4) var(--sp-4)}
  .brand .logo{width:32px;height:32px;border-radius:8px;background:var(--ink);object-fit:contain;display:block;padding:0}
  .brand-txt{display:flex;flex-direction:column;line-height:1.05}
  .brand-txt b{font:700 16px var(--display);letter-spacing:.2px;color:var(--txt)}
  .brand-txt span{font-size:10px;letter-spacing:1.4px;text-transform:uppercase;color:var(--muted2);margin-top:var(--sp-0)}
  .sidebar .brand,.sidebar .side-foot{flex:none}
  .sidebar .viewtabs{display:flex;flex-flow:row wrap;align-content:flex-start;gap:var(--sp-0) 0;padding:var(--sp-2) var(--sp-3);border:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;background:none;box-shadow:none}
  .sidebar .viewtab{display:flex;align-items:center;gap:var(--sp-3);width:100%;text-align:left;background:transparent;border:0;border-radius:11px;padding:var(--sp-2) var(--sp-3);font:500 13px var(--body);letter-spacing:0;color:var(--muted);cursor:pointer;text-transform:none;box-shadow:none;transition:background .18s var(--ease),color .18s var(--ease)}
  .sidebar .viewtab .vt-ic{width:18px;height:18px;flex:none;opacity:.8}
  .sidebar .viewtab:hover{background:var(--bg2);color:var(--txt)}
  .sidebar .viewtab.on{background:var(--ink);color:#fff;font-weight:600;box-shadow:none}
  .sidebar .viewtab.on .vt-ic{opacity:1}
  .subtab-bar,.fin-seg,.scoping-seg{display:none!important}
  .field:has(>.scoping-seg),.field:has(>.fin-seg),.field:has(>.subtab-bar){display:none!important}
  .sidebar .viewtab{position:relative}
  /* RR-2 A5 landed-review fix: the chevron is a SIBLING <button> immediately after its
     host tab (button-in-button is non-conforming, and role=tab flattens an inner button
     for screen readers). Layout mechanism: the nav is a wrap-row flex container whose
     row items are all 100% wide; a chevron's negative margin-left gives it a negative
     outer size, so it stays on the SAME flex line as its host and overlays the host's
     right padding. Vertical centring + density tracking come free from the flex line —
     no absolute positioning, no measured offsets, no wrapper elements. */
  .vt-chev{display:inline-flex;align-items:center;justify-content:center;opacity:.5;transition:transform .2s var(--ease),opacity .15s}
  .sidebar .viewtabs>.vt-chev{flex:0 0 auto;width:22px;height:22px;align-self:center;margin-left:calc(-22px - var(--sp-2));border-radius:6px}
  .sidebar .viewtab:hover+.vt-chev{opacity:.9}
  .sidebar .vt-chev:hover,.sidebar button.vt-chev:focus-visible{opacity:.9}
  .sidebar .viewtab:has(+.vt-chev:hover){background:var(--bg2);color:var(--txt)}
  .sidebar .vt-sub:has(+.vt-chev:hover){background:var(--bg2);color:var(--txt)}
  .vt-chev.open{transform:rotate(180deg)}
  .sidebar .vt-subs{display:none;flex-flow:row wrap;gap:var(--sp-0) 0;flex:0 0 100%;margin:var(--sp-0) 0 var(--sp-1)}
  .sidebar .vt-subs.open{display:flex}
  .sidebar .vt-sub{position:relative;appearance:none;border:0;background:none;text-align:left;cursor:pointer;color:var(--muted);font:500 12.5px var(--body);width:100%;padding:var(--sp-2) var(--sp-3) var(--sp-2) var(--sp-7);border-radius:9px;white-space:nowrap;transition:background .18s var(--ease),color .18s var(--ease)}
  .sidebar .vt-sub:hover{background:var(--bg2);color:var(--txt)}
  .sidebar .vt-sub.on{color:var(--txt);font-weight:600;background:var(--bg2)}
  .sidebar .vt-sub.on::before{content:"";position:absolute;left:25px;top:50%;transform:translateY(-50%);width:5px;height:5px;border-radius:50%;background:#FFFFFF}
  .sidebar .viewtab.on.has-active-sub{background:var(--bg2);color:var(--txt)}
  .sidebar .viewtab.on.has-active-sub .vt-ic{opacity:1}
  .sidebar .vt-sub{display:flex;align-items:center;gap:var(--sp-1)}
  .sidebar .vt-sub .vt-sublabel{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}
  .sidebar .vt-subs>.vt-chev{flex:0 0 auto;width:14px;height:14px;align-self:center;margin-left:calc(-14px - var(--sp-3));opacity:.4}
  .sidebar .vt-sub:hover+.vt-chev{opacity:.85}
  .sidebar .vt-subs3{display:none;flex-direction:column;gap:var(--sp-0);margin:var(--sp-0) 0 var(--sp-0)}
  .sidebar .vt-subs3.open{display:flex}
  .sidebar .vt-sub3{padding-left:var(--sp-8);font-size:12px}
  .sidebar .vt-sub3.on::before{left:39px;width:4px;height:4px}
  /* RR-2 A5: the chevron is a real <button> now (keyboard accordion) — strip the
     UA button chrome so the .vt-chev overlay rules above keep holding */
  button.vt-chev{background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer;line-height:0}
  button.vt-chev:focus-visible{outline:2px solid var(--amber2,var(--txt));outline-offset:1px;border-radius:4px}

  /* ── RR-2 module landings (#view-modhome) — ledger/annotation grammar ── */
  .mh-head{margin:var(--sp-1) 0 var(--sp-5)}
  .mh-purpose{color:var(--muted);font-size:13.5px;line-height:1.5;max-width:640px}
  .mh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--gap-grid,var(--sp-4))}
  .mh-tile{display:flex;align-items:flex-start;gap:var(--sp-3);text-align:left;width:100%;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm,9px);padding:var(--pad-card,var(--sp-4));cursor:pointer;font:inherit;color:var(--txt);transition:border-color .15s,background .15s}
  .mh-tile:hover{background:var(--panel2);border-color:var(--muted2)}
  .mh-tile:focus-visible{outline:2px solid var(--amber2,var(--txt));outline-offset:2px}
  .mh-t{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:var(--sp-0)}
  .mh-name{font-weight:600;font-size:13.5px}
  .mh-sub{color:var(--muted2);font-size:11.5px;line-height:1.4}
  .mh-n{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:var(--sp-0)}
  .mh-count{font:600 18px var(--display,inherit);line-height:1.1;font-variant-numeric:tabular-nums}
  .mh-unit{color:var(--muted2);font-size:10.5px;letter-spacing:.4px;text-transform:uppercase}
  .mh-warn{color:var(--txt);font-size:11px;white-space:nowrap}
  .mh-open{flex:0 0 auto;color:var(--muted2);font-size:11.5px;align-self:center}
  .mh-widget{margin-top:var(--sp-5)}
  .side-foot{margin-top:auto;padding:var(--sp-3) var(--sp-3) var(--sp-4);border-top:1px solid var(--border)}
  .side-link{display:flex;align-items:center;gap:var(--sp-3);width:100%;text-align:left;background:transparent;border:0;border-radius:11px;padding:var(--sp-2) var(--sp-3);font:500 13px var(--body);color:var(--muted);cursor:pointer}
  .side-link:hover{background:var(--bg2);color:var(--txt)}
  .side-user{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-3) var(--sp-0);margin-top:var(--sp-1)}
  .side-av{width:32px;height:32px;border-radius:50%;flex:none;background:var(--ink);color:#fff;font:700 12px var(--display);display:flex;align-items:center;justify-content:center}
  .side-user-m{display:flex;flex-direction:column;line-height:1.25;min-width:0}
  .side-user-m b{font-size:12px;color:var(--txt);font-weight:600}
  .side-user-m span{font-size:10px;color:var(--muted2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  .app-main{flex:1;min-width:0;display:flex;flex-direction:column}
  .topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-7);background:rgba(244,243,238,.82);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--border)}
  .topbar-head{display:flex;flex-direction:column;line-height:1.12;min-width:0}
  .topbar-head .eyebrow{font-size:10px;letter-spacing:1.3px;text-transform:uppercase;color:var(--amber2);font-weight:700}
  .topbar-head h1{margin:var(--sp-0) 0 0;font:700 22px var(--display);letter-spacing:-.4px;color:var(--txt);text-transform:none}
  .topbar .spacer{flex:1}
  .app-main .wrap{width:100%;max-width:var(--wrap-w,1640px);padding:var(--sp-5) var(--sp-7) var(--sp-9)}

  /* ── light component overrides ── */
  .btn{background:var(--panel);border:1px solid var(--border);color:var(--txt);box-shadow:var(--shadow-sm);border-radius:11px}
  .btn:hover{background:var(--panel2);border-color:var(--border2);color:var(--txt)}
  .btn.primary{background:var(--amber);border-color:var(--amber);color:var(--on-accent)}
  .btn.primary:hover{background:var(--amber2);border-color:var(--amber2);color:var(--on-accent)}
  .btn.icon-only{color:var(--muted)} .btn.icon-only:hover{color:var(--txt)}
  .src-chip{background:var(--panel);border:1px solid var(--border);color:var(--muted);box-shadow:var(--shadow-sm);border-radius:var(--radius-sm)}
  .alert-badge{box-shadow:0 0 0 2px var(--panel)}
  .field input,.field select,.cell-input,textarea,.ask-composer textarea,.cmdk-input{background:var(--panel);border-color:var(--border2);color:var(--txt)}
  .field input::placeholder,textarea::placeholder{color:var(--muted2)}
  .field label,.mini-label{color:var(--muted)}
  .legend{color:var(--muted)}
  .foot{color:var(--muted2)}
  table.subs tbody tr:hover>td{background:var(--panel2)}
  .modal-overlay,.sheet-overlay{background:rgba(28,27,22,.42)}
  .empty-state{color:var(--muted)}
  /* status / accent text colours retuned for light surfaces (were tuned for dark) */
  .prog-st.ok,.prog-float.pos,.prog-dv.ok{color:#706f6e;background:rgba(112,111,110,.10)}
  .prog-st.behind,.prog-dv.pos,.prog-float.neg{color:#5e5d5c}
  .prog-st.behind{background:rgba(94,93,92,.10)}
  .prog-st.ahead,.prog-dv.neg{color:#5c5c5b} .prog-st.ahead{background:rgba(92,92,91,.10)}
  .prog-st.at{color:#71706f;background:rgba(184,183,181,.14)}
  .mi-due.urgent,.mi-btn.remove:hover{color:#5e5d5c}
  .mi-btn.close:hover{color:#706f6e;border-color:#706f6e}
  .mi-src.design{color:#5c5c5b;background:rgba(92,92,91,.10)}
  .mi-src.internal{color:#706f6e;background:rgba(112,111,110,.10)}
  .mi-src.both{color:var(--amber2);background:color-mix(in srgb,var(--amber) 14%,transparent)}
  .mi-src.subbie{color:#676665;background:rgba(103,102,101,.10)}
  .mgh-type.t-trade{color:#706f6e;border-color:rgba(112,111,110,.35)}
  .mgh-type.t-authority{color:#5e5d5c;border-color:rgba(94,93,92,.35)}
  .mgh-type.t-consultant{color:#5c5c5b;border-color:rgba(92,92,91,.35)}
  .mgh-type.t-commercial{color:var(--amber2);border-color:color-mix(in srgb,var(--amber) 45%,transparent)}
  .imp-immediate .hd{color:#5e5d5c;box-shadow:inset 3px 0 0 #8a8988}
  .imp-medium .hd{color:var(--amber2);box-shadow:inset 3px 0 0 var(--amber)}
  .imp-long .hd{color:#5c5c5b;box-shadow:inset 3px 0 0 #6e6d6c}
  .ask-msg.bot .ask-bubble{box-shadow:inset 3px 0 0 var(--amber)}
  .ask-cite{color:var(--amber2)}
  .status-pop{background:var(--panel);box-shadow:var(--shadow-xl)}
  .prog-doc .frame{background:#fff}
  /* sentence-case the prominent headings (minimal, less formal) — small labels stay uppercase */
  .trade-title,.shop-set-title,.prog-sec-h,.mins-group-h,.sheet-head h2,.prog-imp-card .hd,.scope-name,.cmdk-input{text-transform:none;letter-spacing:-.2px}
  .trade-title{font-size:16px;font-weight:700}
  .prog-sec-h,.mins-group-h{font-size:14px;font-weight:700}
  /* ===== Mobile: off-canvas navigation drawer ===== */
  .btn.nav-toggle{display:none}
  .nav-scrim{position:fixed;inset:0;background:rgba(0,0,0,.46);z-index:999;opacity:0;visibility:hidden;transition:opacity .25s var(--ease)}
  body.nav-open .nav-scrim{opacity:1;visibility:visible}
  @media(min-width:901px){ .nav-scrim{display:none} }
  @media(max-width:900px){
    .btn.nav-toggle{display:inline-flex}
    .sidebar{position:fixed;top:0;left:0;height:100dvh;width:266px;transform:translateX(-100%);transition:transform .28s var(--ease-out);z-index:1000;overflow-y:auto}
    body.nav-open .sidebar{transform:none;box-shadow:var(--shadow-xl)}
    .topbar,.app-main .wrap{padding-left:var(--sp-4);padding-right:var(--sp-4)}
    .app-main .wrap{padding-top:var(--sp-4)}
  }
  @media(prefers-reduced-motion:reduce){ .sidebar{transition:none} .nav-scrim{transition:none} }
  @media(max-width:600px){ #topEyebrow{display:none} .topbar{gap:var(--sp-2)} .topbar-head h1{font-size:17px} }

  /* ════════════════════════════════════════════════════════════════════════════════════════
     PREMIUM CONSTRUCTION POLISH — Brompton logo, architectural surface, refined depth & motion.
     A considered, restrained pass: subtle effects only, engineered precision. */
  :root{ --grid-line:rgba(28,27,22,.026); }
  /* Brompton white wordmark SVG on the constant-ink rail — no tint filters */
  .brand{padding:var(--sp-5) var(--sp-5) var(--sp-4);border-bottom:1px solid var(--border);overflow:hidden;min-height:62px;display:flex;align-items:center}
  .brand .logo{height:20px;width:auto;background:none;border-radius:0;padding:0;display:block}
  /* faint engineering-grid on the work surface — whisper level, never competes with content */
  .app-main{
    background:
      linear-gradient(var(--grid-line) 1px, transparent 1px) 0 -1px / 100% 32px,
      linear-gradient(90deg, var(--grid-line) 1px, transparent 1px) -1px 0 / 32px 100%,
      var(--bg);
  }
  /* sidebar depth + a crisp structural amber edge on the active item */
  .sidebar{box-shadow:1px 0 0 var(--border), 10px 0 30px -26px rgba(28,27,22,.45)}
  .sidebar .viewtab{position:relative}
  .sidebar .viewtab.on{box-shadow:0 2px 8px -3px rgba(20,19,15,.35);padding-left:var(--sp-4)}
  .sidebar .viewtab.on::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--amber)}
  /* topbar elevation (sits above the gridded surface) */
  .topbar{box-shadow:0 1px 0 var(--border), 0 12px 28px -24px rgba(28,27,22,.5)}
  /* refined, consistent elevation + tactile hover lift on cards & stats */
  .trade-card,.scard,.budget-panel,.let-panel,.mins-item,.prog-stat,.prog-imp-card,.ask-ex,.note-view{transition:transform .18s var(--ease-out),box-shadow .18s var(--ease-out),border-color .18s var(--ease-out)}
  .scard,.prog-stat{box-shadow:var(--shadow-sm)}
  .scard:hover,.prog-stat:hover,.ask-ex:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--border2)}
  .mins-item:hover{box-shadow:var(--shadow-md);border-color:var(--border2)}
  .trade-card:hover,.shop-trade:hover{box-shadow:var(--shadow-lg)}
  /* buttons: subtle press + an amber sheen on the primary */
  .btn{transition:background .18s var(--ease),border-color .18s var(--ease),box-shadow .18s var(--ease),transform .1s var(--ease-out)}
  .btn:active{transform:translateY(1px)}
  .btn.primary{box-shadow:var(--shadow-sm),inset 0 1px 0 rgba(255,255,255,.10)}
  .btn.primary:hover{box-shadow:var(--shadow-md),inset 0 1px 0 rgba(255,255,255,.14)}
  /* crisp, consistent focus rings for keyboard users */
  .viewtab:focus-visible,.btn:focus-visible,.side-link:focus-visible,.status-pick:focus-visible,.mi-btn:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  /* tighten the data-table feel: zebra-free, hairline rows, hover highlight */
  table.subs tbody td{border-bottom-color:var(--border)}
  table.subs thead th{color:var(--muted2);font-weight:600}
  /* numerals align in data columns */
  .pd,.pdv,.prog-float,.bp-value,.scard .n,.shop-chip .n,.prog-stat .n,.mi-due{font-variant-numeric:tabular-nums}
  @media(prefers-reduced-motion:reduce){
    .scard:hover,.prog-stat:hover,.ask-ex:hover,.btn:active{transform:none}
  }

  /* ═══ PROGRAMME — Lookahead readiness / hold points + risk register ═══ */
  .holdm tbody td{vertical-align:top}
  .holdm .hg-name{font-weight:600;color:var(--txt)}
  .holdm .hg-why{font-size:11px;color:var(--muted);line-height:1.45;margin-top:var(--sp-0);max-width:540px}
  .holdm .ha,.holdm .hb{font-size:12px;color:var(--muted)} .holdm .hb{max-width:250px}
  .holdm .hs{font-size:11px;color:var(--muted2);white-space:nowrap}
  /* squared ledger grammar: state = glyph + word (the label is the word),
     severity = ink weight + border, never a tinted capsule */
  .hold-st{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);white-space:nowrap}
  .hold-st::before{font-weight:700;margin-right:var(--sp-1)}
  .hold-blocked{color:var(--txt);border-color:var(--txt);font-weight:800} .hold-blocked::before{content:"\25B2"}
  .hold-atrisk{color:var(--txt);border-color:var(--muted2)} .hold-atrisk::before{content:"\25B3"}
  .hold-ready{color:var(--muted-strong,var(--muted))} .hold-ready::before{content:"\2713"}
  .hold-ongoing{color:var(--muted)}
  .holdm tbody tr.hr-blocked td:first-child{box-shadow:inset 3px 0 0 #727270}
  .holdm tbody tr.hr-atrisk td:first-child{box-shadow:inset 3px 0 0 var(--amber)}

  .risk-list{display:flex;flex-direction:column;gap:var(--gap-grid)}
  .risk-card{border:1.5px solid var(--border2);background:var(--panel);border-radius:var(--r);padding:var(--pad-card) var(--pad-card);box-shadow:var(--shadow-sm)}
  .risk-card.s-critical{box-shadow:inset 4px 0 0 #727270, var(--shadow-sm)}
  .risk-card.s-high{box-shadow:inset 4px 0 0 #888886, var(--shadow-sm)}
  .risk-card.s-medium{box-shadow:inset 4px 0 0 var(--amber), var(--shadow-sm)}
  .risk-card.s-low{box-shadow:inset 4px 0 0 var(--muted2), var(--shadow-sm)}
  .risk-hd{display:flex;align-items:center;gap:var(--sp-2)}
  .risk-title{font-weight:700;font-size:14px;color:var(--txt);flex:1;line-height:1.3}
  .risk-sev{font-size:10px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;padding:var(--sp-0) var(--sp-2);border-radius:6px;white-space:nowrap;color:#fff;flex:none}
  .sev-critical{background:#727270} .sev-high{background:#888886} .sev-medium{background:var(--amber);color:var(--ink)} .sev-low{background:var(--muted2)}
  .risk-conf{font-size:10px;color:var(--muted2);white-space:nowrap;text-transform:capitalize;flex:none}
  .risk-sub{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);margin:var(--sp-2) 0 var(--sp-3)}
  .risk-act{font-size:12px;color:var(--muted);flex:1;min-width:200px}
  .risk-src{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;padding:var(--sp-0) var(--sp-2);border-radius:5px;white-space:nowrap}
  .src-contract{color:#5c5c5b;background:rgba(92,92,91,.10)}
  .src-target{color:#706f6e;background:rgba(112,111,110,.10)}
  .src-look{color:var(--amber2);background:color-mix(in srgb,var(--amber) 15%,transparent)}
  .src-site{color:#676665;background:rgba(103,102,101,.10)}
  .risk-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-2) var(--sp-5)}
  .rf{font-size:12px;line-height:1.5}
  .rf .rfl{display:block;font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--muted2);margin-bottom:var(--sp-0)}
  .rf .rfv{color:var(--txt)}
  .rf-mit{grid-column:1 / -1;background:rgba(184,183,181,.06);border:1px solid rgba(184,183,181,.28);border-radius:8px;padding:var(--sp-2) var(--sp-3);margin-top:var(--sp-0)}
  .rf-mit .rfl{color:var(--amber2)}
  @media(max-width:820px){ .risk-grid{grid-template-columns:1fr} }

  /* ════════════════════════════════════════════════════════════════════════════════════════
     DARK THEME — token overrides (flip ~90% of the UI, which is token-driven) plus spot-fixes
     for the handful of values the light-conversion pass hard-coded. Activated by data-theme="dark"
     on <html>; the inline head script sets it from saved choice or the OS preference before paint. */
  :root[data-theme="dark"]{
    --bg:#141310; --bg2:#1b1a14; --panel:#201e17; --panel2:#28261d;
    --gunmetal:#1b1a14; --border:#322f26; --border2:#423e32;
    --txt:#f3f1ea; --muted:#b1ae9f; --muted2:#98948b; /* synced to theme.css 2026-08-25 */
    --ink:#423e32;                              /* elevated surface for active nav / avatar (keeps white text readable) */
    --amber:#9ba8b2; --amber2:#c4ced5; --amber-dim:#272f35; --on-accent:#13181c;   /* accent: gunmetal grey (dark) */
    --chase:#e36b60; --quote:#b8b7b5; --reply:#a09f9e; /* chase = the sanctioned exception hue, synced to theme.css 2026-08-25 */
    --await:#b1b0ae; --notissued:#928f82; --awarded:#b8b7b5; --internal:#9b9889; --grey:#928f82;
    --shadow:0 1px 2px rgba(0,0,0,.4);
    --shadow-sm:0 1px 2px rgba(0,0,0,.45);
    --shadow-md:0 1px 2px rgba(0,0,0,.4), 0 8px 20px -14px rgba(0,0,0,.7);
    --shadow-lg:0 1px 3px rgba(0,0,0,.5), 0 14px 30px -18px rgba(0,0,0,.78);
    --shadow-xl:0 4px 14px -8px rgba(0,0,0,.6), 0 30px 60px -30px rgba(0,0,0,.85);
    --ring:0 0 0 1px color-mix(in srgb,var(--amber) 66%,transparent);
    --ring-focus:0 0 0 3px color-mix(in srgb,var(--amber) 32%,transparent), 0 0 0 1px color-mix(in srgb,var(--amber) 82%,transparent);
    --hairline:inset 0 0 0 1px rgba(255,255,255,.02);
    --panel-grad:#201e17; --panel-grad-hover:#28261d;
    --grid-line:rgba(255,255,255,.028);
  }
  /* logo is the white wordmark on the constant-ink rail — no theme filter needed */
  [data-theme="dark"] ::-webkit-scrollbar-thumb{background:#3a3729}
  [data-theme="dark"] ::-webkit-scrollbar-thumb:hover{background:#4a473a}
  /* keep dark ink text on the bright-amber primary button hover */
  [data-theme="dark"] .btn.primary:hover{color:#201B10}
  /* solid-fill count / alert badges: dark glyph on the bright accent beats white for contrast
     (.trade-subcount.chase left this list in the de-bubble sweep — it is ink text on --bg2 now) */
  [data-theme="dark"] .alert-badge{color:#201B10}
  /* accent text/background colours: revert the light-pass hard-codes to dark-surface-tuned values */
  [data-theme="dark"] .prog-st.ok,[data-theme="dark"] .prog-float.pos,[data-theme="dark"] .prog-dv.ok{color:#cdccca;background:rgba(184,183,181,.14)}
  [data-theme="dark"] .prog-st.behind,[data-theme="dark"] .prog-dv.pos,[data-theme="dark"] .prog-float.neg{color:#b7b6b4}
  [data-theme="dark"] .prog-st.behind{background:rgba(162,161,160,.14)}
  [data-theme="dark"] .prog-st.ahead,[data-theme="dark"] .prog-dv.neg{color:#b7b6b4}
  [data-theme="dark"] .prog-st.at{color:#cdccca;background:rgba(184,183,181,.16)}
  [data-theme="dark"] .prog-st.ahead{background:rgba(160,159,158,.14)}
  [data-theme="dark"] .mi-due.urgent,[data-theme="dark"] .mi-btn.remove:hover{color:#b7b6b4}
  [data-theme="dark"] .mi-btn.close:hover{color:#cdccca;border-color:#b1b0af}
  [data-theme="dark"] .mi-src.design{color:#b7b6b4;background:rgba(160,159,158,.13)}
  [data-theme="dark"] .mi-src.internal{color:#cdccca;background:rgba(184,183,181,.13)}
  [data-theme="dark"] .mi-src.subbie{color:#b7b6b5;background:rgba(154,153,151,.15)}
  [data-theme="dark"] .mgh-type.t-trade{color:#cdccca;border-color:rgba(184,183,181,.4)}
  [data-theme="dark"] .mgh-type.t-authority{color:#b7b6b4;border-color:rgba(162,161,160,.4)}
  [data-theme="dark"] .mgh-type.t-consultant{color:#b7b6b4;border-color:rgba(160,159,158,.4)}
  [data-theme="dark"] .imp-immediate .hd{color:#b7b6b4;box-shadow:inset 3px 0 0 #9b9b99}
  [data-theme="dark"] .imp-long .hd{color:#b7b6b4;box-shadow:inset 3px 0 0 #a6a5a4}
  [data-theme="dark"] .src-contract{color:#b7b6b4;background:rgba(160,159,158,.13)}
  [data-theme="dark"] .src-target{color:#cdccca;background:rgba(184,183,181,.13)}
  [data-theme="dark"] .src-site{color:#b7b6b5;background:rgba(154,153,151,.13)}
  /* sticky topbar bg is a hard-coded light translucency in the light pass — match the dark surface so the title stays legible */
  [data-theme="dark"] .topbar{background:rgba(20,19,16,.82)}
  /* deeper modal scrim isolates foreground content on the dark surface */
  [data-theme="dark"] .modal-overlay,[data-theme="dark"] .sheet-overlay{background:rgba(0,0,0,.6)}
  /* smooth the theme swap on the big surfaces (respecting reduced-motion below) */
  body,.sidebar,.topbar,.app-main,.trade-card,.btn,.src-chip,.field input,.field select,textarea{transition:background-color .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease)}
  @media (prefers-reduced-motion:reduce){ body,.sidebar,.topbar,.app-main,.trade-card,.btn,.src-chip,.field input,.field select,textarea{transition:none} }
  .theme-btn svg{transition:transform .3s var(--ease)}
  .theme-btn:hover svg{transform:rotate(18deg)}

  /* ── Page key / "how to read this page" drawer — right-edge, collapsible, non-modal ── */
  .key-drawer{position:fixed;top:50%;right:0;z-index:9000;transform:translateY(-50%) translateX(100%);transition:transform .32s var(--ease)}
  .key-drawer.open{transform:translateY(-50%) translateX(0)}
  /* Edge tabs ("Key"/"Calc") ride the right rail on wide screens; ≤900px they would
     overlay register content, so there the masthead icon buttons are the only openers. */
  @media (max-width:900px){ .key-drawer .key-tab,.calc-drawer .calc-tab{display:none} }
  header.topbar .btn.icon-only.on{background:var(--amber);color:var(--on-accent,#f4f5f6);border-color:var(--amber)}
  .key-tab{position:absolute;left:0;top:50%;transform:translate(-100%,-50%);display:inline-flex;align-items:center;gap:var(--sp-2);writing-mode:vertical-rl;padding:var(--sp-4) var(--sp-2);border:1px solid var(--border2);border-right:0;border-radius:11px 0 0 11px;background:var(--panel);color:var(--txt);font-family:var(--display);font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;cursor:pointer;box-shadow:var(--shadow-md);transition:background .16s,color .16s,box-shadow .16s}
  .key-tab:hover{background:var(--amber);color:#1a1206;box-shadow:var(--shadow-lg)}
  .key-tab svg{transform:rotate(90deg)}
  .key-tab:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .key-drawer.open .key-tab{border-radius:11px 0 0 11px}
  .key-panel{width:344px;max-width:90vw;max-height:86vh;display:flex;flex-direction:column;background:var(--panel-grad);border:1px solid var(--border2);border-right:0;border-radius:14px 0 0 14px;box-shadow:var(--shadow-xl)}
  .key-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);background:var(--panel2);border-radius:14px 0 0 0}
  .key-title{font-family:var(--display);font-size:13px;font-weight:700;letter-spacing:.3px;color:var(--txt)}
  .key-close{flex:0 0 auto;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border2);border-radius:8px;background:var(--panel);color:var(--muted);font-size:18px;line-height:1;cursor:pointer;transition:color .15s,border-color .15s,background .15s}
  .key-close:hover{color:var(--txt);border-color:var(--muted2);background:var(--panel2)}
  .key-close:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .key-body{flex:1 1 auto;overflow-y:auto;padding:var(--sp-1) var(--sp-4) var(--sp-4)}
  .key-eyebrow{font-size:10px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--amber2);margin:var(--sp-4) 0 var(--sp-2);padding-bottom:var(--sp-1);border-bottom:1px solid var(--border)}
  .key-eyebrow:first-child{margin-top:var(--sp-2)}
  .key-row{display:flex;gap:var(--sp-2);align-items:baseline;font-size:12px;line-height:1.45;padding:var(--sp-0) 0;color:var(--muted)}
  .key-row .key-term{color:var(--txt);font-weight:600;flex:0 0 auto}
  .key-row .key-def{flex:1 1 auto}
  .key-row .key-sw{flex:0 0 auto;width:20px;height:13px;border-radius:4px;border:1px solid var(--border2);align-self:center}
  .key-row>.prog-st,.key-row>.prog-float,.key-row>.prog-dv,.key-row>.hold-st,.key-row>.risk-sev,.key-row>.mi-src,.key-row>.trade-subcount{flex:0 0 auto;align-self:center}
  /* live control glyphs shown in the key instead of the control's name */
  .key-row .key-glyph,.key-row>.trade-toggle,.key-row>.pin-btn,.key-row>.let-chip,.key-row>.mi-btn,.key-row>.cell-input{flex:0 0 auto;align-self:center;margin:0;pointer-events:none}
  .key-row>.cell-input{padding:var(--sp-1) var(--sp-2)}
  .key-stripe{flex:0 0 auto;align-self:center;display:inline-block;width:22px;height:15px;border-radius:3px;background:var(--panel2);border:1px solid var(--border2);box-shadow:inset 3px 0 0 #727270}
  .key-abbr{font-size:11px;line-height:1.7;color:var(--muted);margin-top:var(--sp-0)}
  .key-abbr b{color:var(--txt);font-weight:700}
  @media (prefers-reduced-motion:reduce){ .key-drawer{transition:none} }
  @media (max-width:720px){ .key-panel{width:290px} }

  /* ── Calculator drawer — a trade-aware scratchpad; mirrors the Key drawer,
     with its tab stacked just below the Key tab on the same right-edge rail.
     Mutually exclusive with the Key (opening one closes the other). ── */
  .calc-drawer{position:fixed;top:50%;right:0;z-index:9000;transform:translateY(-50%) translateX(100%);transition:transform .32s var(--ease)}
  .calc-drawer.open{transform:translateY(-50%) translateX(0)}
  .calc-tab{position:absolute;left:0;top:calc(50% + 110px);transform:translate(-100%,-50%);display:inline-flex;align-items:center;gap:var(--sp-2);writing-mode:vertical-rl;padding:var(--sp-4) var(--sp-2);border:1px solid var(--border2);border-right:0;border-radius:11px 0 0 11px;background:var(--panel);color:var(--txt);font-family:var(--display);font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;cursor:pointer;box-shadow:var(--shadow-md);transition:background .16s,color .16s,box-shadow .16s}
  .calc-tab:hover{background:var(--amber);color:#1a1206;box-shadow:var(--shadow-lg)}
  .calc-tab:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .calc-panel{width:296px;max-width:92vw;max-height:88vh;display:flex;flex-direction:column;background:var(--panel-grad);border:1px solid var(--border2);border-right:0;border-radius:14px 0 0 14px;box-shadow:var(--shadow-xl);overflow:hidden}
  .calc-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);background:var(--panel2);border-radius:14px 0 0 0}
  .calc-title{font-family:var(--display);font-size:13px;font-weight:700;letter-spacing:.3px;color:var(--txt)}
  .calc-close{flex:0 0 auto;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border2);border-radius:8px;background:var(--panel);color:var(--muted);font-size:18px;line-height:1;cursor:pointer;transition:color .15s,border-color .15s,background .15s}
  .calc-close:hover{color:var(--txt);border-color:var(--muted2);background:var(--panel2)}
  .calc-close:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .calc-disp{flex:0 0 auto;padding:var(--sp-4) var(--sp-4) var(--sp-3);text-align:right;border-bottom:1px solid var(--border);background:var(--panel2)}
  .calc-sub{min-height:14px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .calc-main{font-family:var(--display);font-size:30px;font-weight:700;letter-spacing:-.5px;color:var(--txt);font-variant-numeric:tabular-nums;line-height:1.12;margin-top:var(--sp-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .calc-fn{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2);padding:var(--sp-3) var(--sp-4) var(--sp-1)}
  .calc-pad{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2);padding:var(--sp-1) var(--sp-4) var(--sp-3)}
  .calc-k{appearance:none;border:1px solid var(--border2);background:var(--panel);color:var(--txt);font:600 15px var(--body);font-variant-numeric:tabular-nums;height:44px;border-radius:10px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-shadow:var(--shadow-sm);transition:background .14s var(--ease),border-color .14s var(--ease),color .14s var(--ease),transform .08s var(--ease-out),box-shadow .14s var(--ease)}
  .calc-k:hover{background:var(--panel2);border-color:var(--muted2)}
  .calc-k:active{transform:translateY(1px);box-shadow:none}
  .calc-k:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .calc-k.op{color:var(--amber2);font-weight:700}
  .calc-k.util{font-size:13px;color:var(--muted)}
  .calc-k.fn{font-size:12px;font-weight:700;letter-spacing:.2px;color:var(--amber2);background:color-mix(in srgb,var(--amber) 7%,var(--panel))}
  .calc-k.fn:hover{background:color-mix(in srgb,var(--amber) 15%,var(--panel))}
  .calc-k.op.on,.calc-k.fn.on{background:var(--amber);border-color:var(--amber);color:var(--on-accent)}
  .calc-k.eq{background:linear-gradient(180deg,var(--amber),var(--amber2));border-color:transparent;color:var(--on-accent);font-weight:700;box-shadow:var(--shadow-sm),inset 0 1px 0 rgba(255,255,255,.12)}
  .calc-k.eq:hover{filter:brightness(1.05)}
  .calc-foot{flex:0 0 auto;padding:0 var(--sp-4) var(--sp-4)}
  .calc-send{width:100%;height:34px;border:1px solid var(--border2);background:var(--panel);border-radius:9px;color:var(--muted);font:600 12px var(--body);cursor:pointer;transition:color .15s,border-color .15s,background .15s}
  .calc-send:hover{color:var(--txt);border-color:var(--muted2);background:var(--panel2)}
  .calc-send.done{color:var(--quote);border-color:color-mix(in srgb,var(--quote) 45%,transparent)}
  @media (prefers-reduced-motion:reduce){ .calc-drawer{transition:none} .calc-k:active{transform:none} }
  @media (max-width:720px){ .calc-panel{width:286px} }

  /* ── Dashboard (home) ── */
  .dash-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap;margin:var(--sp-1) 0 var(--sp-4)}
  .dash-greet{font-family:var(--display);font-size:26px;font-weight:700;letter-spacing:-.5px;color:var(--txt);margin:0}
  .dash-sub{font-size:13px;color:var(--muted);margin-top:var(--sp-2)}
  .dash-sub b{color:var(--txt);font-weight:600}
  .dash-acct{display:inline-flex;align-items:center;gap:var(--sp-2);vertical-align:middle}
  .dash-acct .av{width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;font:700 11px var(--display);display:inline-flex;align-items:center;justify-content:center;flex:none}
  .dash-hero-actions{display:flex;gap:var(--sp-2);align-items:center}
  .dash-sec-h{font-family:var(--display);text-transform:uppercase;letter-spacing:1.2px;font-size:12px;color:var(--muted);margin:var(--gap-stack) 0 var(--sp-3);display:flex;align-items:center;gap:var(--sp-3)}
  .dash-sec-h::after{content:"";flex:1;height:1px;background:var(--border)}
  .dash-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:var(--gap-grid)}
  .dash-card{position:relative;display:block;width:100%;text-align:left;border:1px solid var(--border);border-radius:14px;background:var(--panel-grad);padding:var(--pad-card) var(--pad-card) var(--pad-card);box-shadow:var(--shadow-sm);cursor:pointer;overflow:hidden;font:inherit;transition:transform .18s var(--ease-out),box-shadow .18s var(--ease-out),border-color .18s var(--ease-out)}
  .dash-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--c,var(--amber))}
  .dash-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--border2)}
  .dash-card:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .dash-card-h{display:flex;align-items:center;gap:var(--sp-2);color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase}
  .dash-card-h>svg{width:16px;height:16px;color:var(--c,var(--amber));flex:none}
  .dash-card-h .go{margin-left:auto;color:var(--muted2);font-size:15px;transition:transform .18s,color .18s}
  .dash-card:hover .go{transform:translateX(3px);color:var(--txt)}
  .dash-big{font-family:var(--display);font-size:22px;font-weight:700;letter-spacing:-.3px;color:var(--txt);margin:var(--sp-2) 0 var(--sp-0);line-height:1.05;font-variant-numeric:tabular-nums}
  /* KPI tile polish: uniform minimum height for an even grid */
  .dash-card{min-height:118px}
  /* Budget-watch 3-figure readout */
  .bw-figs{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2);margin:var(--sp-0) 0 var(--sp-3)}
  .bw-fig{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}
  .bw-l{font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--muted)}
  .bw-v{font-family:var(--display);font-size:22px;font-weight:800;letter-spacing:-.4px;font-variant-numeric:tabular-nums;line-height:1}
  @media (max-width:520px){ .bw-v{font-size:19px} }
  .dash-line{font-size:12px;color:var(--muted);line-height:1.5}
  .dash-line b{color:var(--txt);font-weight:600}
  .dash-when{font-family:var(--mono);font-size:11px;color:var(--txt);opacity:.8;white-space:nowrap}
  /* ===== Dashboard cockpit ===== */
  /* rhythm lives on the container: every cockpit row — statusbar, rails, rows,
     bare blocks — is spaced by this one gap, not by per-widget bottom margins */
  .dash-cockpit{display:flex;flex-direction:column;row-gap:var(--gap-stack)}
  .dash-statusbar{display:flex;align-items:center;gap:var(--sp-4);flex-wrap:wrap;padding:var(--sp-2) var(--sp-0) var(--gap-stack);border-bottom:1px solid var(--border)}
  .dsb-id{display:flex;align-items:center;gap:var(--sp-3)}
  .dsb-name{font-family:var(--display);font-weight:800;font-size:18px;letter-spacing:-.01em;color:var(--txt)}
  /* Not a badge. A title-block annotation hung off the project name on a
     hairline rule — the capsule-plus-coloured-dot chip is the generic SaaS
     status vocabulary, and the dot also carried the state by colour alone,
     which DESIGN.md's monochrome data layer forbids: status is glyph + word. */
  .dsb-health{display:inline-flex;align-items:center;gap:var(--sp-2);font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding-left:var(--sp-3);border-left:1px solid var(--border2)}
  .dsb-figs{display:flex;align-items:center;gap:var(--sp-5);margin-left:var(--sp-1)}
  .dsb-fig{display:flex;flex-direction:column;gap:var(--sp-0)}
  .dsb-k{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
  .dsb-v{font-size:15px;font-weight:700;color:var(--txt);font-variant-numeric:tabular-nums}
  .dsb-flag{font-size:10px;font-weight:700;color:#727270} .dsb-flag.ok{color:var(--quote)}
  .dsb-actions{display:flex;align-items:center;gap:var(--sp-2);margin-left:auto}
  .dsb-actions .btn{height:var(--ctl-h)}
  .kpi-rail{display:grid;grid-template-columns:repeat(auto-fit,minmax(178px,1fr));gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:var(--gap-stack)}
  /* cockpit-level rail ONLY: the scorecard widget nests its own .kpi-rail inside
     a half-width panel and keeps auto-fit + its margin. Explicit counts kill the
     4+2 orphan wrap; rhythm comes from the cockpit's row-gap, not a margin. */
  .dash-cockpit>.kpi-rail{grid-template-columns:repeat(6,minmax(0,1fr));margin-bottom:0}
  @media (max-width:1024px){ .dash-cockpit>.kpi-rail{grid-template-columns:repeat(3,minmax(0,1fr))} }
  @media (max-width:640px){ .dash-cockpit>.kpi-rail{grid-template-columns:repeat(2,minmax(0,1fr))} }
  .kpi{background:var(--panel);padding:var(--pad-card);display:flex;flex-direction:column;gap:var(--sp-2)}
  .kpi.is-link{cursor:pointer;transition:background .15s var(--ease)}
  .kpi.is-link:hover{background:var(--bg2)}
  .kpi.is-link:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--amber)}
  .kpi-top{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2)}
  .kpi-l{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--muted)}
  .kpi-v{font-size:19px;font-weight:800;color:var(--txt);font-variant-numeric:tabular-nums}
  .bullet{width:100%;height:14px;display:block}
  .bl-track{fill:color-mix(in srgb, var(--bl-c) 12%, var(--panel))}
  .bl-fill{fill:var(--bl-c)}
  .bl-tgt{stroke:var(--txt);stroke-width:1.5;opacity:.6}
  .kpi-sub{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
  .kpi-note{margin-left:auto;font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);background:var(--bg2);color:var(--muted);white-space:nowrap}
  .kpi-note.ok{color:var(--quote)} .kpi-note.warn{color:var(--chase)}
  .dash-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap-grid);align-items:stretch}
  /* .feeds keeps its identity class for the packer/renderer but shares the even
     two-column split — no column override since the 1.62fr/1fr golden pair died */
  /* a row holding ONE panel. The packer now writes lone panels BARE (full width
     from the cockpit's flex column), so .solo survives only for stored nested
     layouts and for renderDash's runtime collapse — a pair that loses one side
     to the perm filter must not render at half width beside a void. */
  .dash-cols.solo{grid-template-columns:minmax(0,1fr)}
  .dash-block{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:var(--pad-card)}
  .dash-block .dash-sec-h{margin:0 0 var(--sp-3)}
  /* count annotation hung off the section title on a hairline — the white-on-
     colour bubble died with the capsule sweep; the count is ink text now */
  .sec-badge{display:inline-flex;align-items:center;padding-left:var(--sp-2);border-left:1px solid var(--border2);font-size:11px;font-weight:700;color:var(--txt);font-variant-numeric:tabular-nums;vertical-align:middle}
  .sec-badge.warn{font-weight:800}
  .sec-sub{font-size:11px;font-weight:600;color:var(--muted);margin-left:var(--sp-1)}
  .attn-list{display:flex;flex-direction:column}
  .attn-row{display:flex;align-items:center;gap:var(--sp-3);width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--border);padding:var(--pad-row-y) var(--sp-1);cursor:pointer;font:inherit;color:var(--txt);transition:background .14s var(--ease)}
  .attn-row:first-child{border-top:0}
  .attn-row:hover{background:var(--bg2)}
  .attn-row:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--amber)}
  /* the coloured bullet is retired CSS-only — every emitter (index + the
     widget packs) still writes the span, and pack files are frozen, so the
     span stays in the markup and the adjacent .attn-ic glyph is the row's
     mark. Severity keeps a non-hue channel: exceptions read heavier. */
  .attn-dot{display:none}
  .attn-row.sev-0 .attn-t{font-weight:700}
  .attn-ic{display:inline-flex;color:var(--muted);flex:none}
  .attn-main{display:flex;flex-direction:column;gap:var(--sp-0);min-width:0;flex:1}
  .attn-t{font-size:13px;font-weight:600;color:var(--txt)}
  .attn-s{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .attn-go{color:var(--muted);font-weight:700;flex:none}
  .attn-clear{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-2);color:var(--quote)}
  .attn-clear>div{display:flex;flex-direction:column}
  .attn-clear b{color:var(--txt);font-size:14px}
  .attn-clear span{color:var(--muted);font-size:12px}
  .wf{width:100%;height:auto;display:block;margin:var(--sp-0) 0 var(--sp-2)}
  .wf-total{fill:var(--txt)} .wf-up{fill:#727270} .wf-down{fill:var(--quote)}
  .wf-conn{stroke:var(--muted2);stroke-width:1;opacity:.6}
  .bb-figs{display:flex;gap:var(--sp-4);flex-wrap:wrap;padding:var(--sp-2) 0 var(--sp-1);border-top:1px solid var(--border)}
  .bb-fig{display:flex;flex-direction:column;gap:var(--sp-0)}
  .bb-k{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
  .bb-v{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}
  .bb-foot{font-size:11px;color:var(--muted);margin-top:var(--sp-2)} .bb-foot b{color:var(--txt)}
  @media(max-width:860px){ .dash-cols{grid-template-columns:1fr} .dsb-actions{margin-left:0} .dsb-figs{gap:var(--sp-4)} }
  /* cockpit polish: accent line, section eyebrow, first-paint cascade, density, bullet overflow */
  /* z-index, not just position: .dash-cockpit.intro>* animates transform/opacity
     with fill-mode both, which makes every cockpit row its own stacking context.
     Without a raised index here the View menu (z-index:60, but trapped inside
     the status bar's context) painted UNDER the rows that follow it. */
  .dash-statusbar{position:relative;z-index:5}
  .dash-statusbar::after{content:"";position:absolute;left:0;bottom:-1px;width:44px;height:2px;background:var(--amber)}
  /* the eyebrow and its rail are TWO cockpit children (the kpi widget emits
     both), so the container's row-gap lands between them; the negative margin
     pulls the rail back up to the sp-2 the eyebrow always had */
  .dash-eyebrow{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1.2px;color:var(--muted);margin:0 0 calc(var(--sp-2) - var(--gap-stack)) var(--sp-0)}
  .bl-over{fill:#727270}
  @keyframes dashRise{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
  .dash-cockpit.intro>*{animation:dashRise .5s var(--ease-out) both}
  .dash-cockpit.intro>*:nth-child(1){animation-delay:0ms}
  .dash-cockpit.intro>*:nth-child(2){animation-delay:55ms}
  .dash-cockpit.intro>*:nth-child(3){animation-delay:110ms}
  .dash-cockpit.intro>*:nth-child(4){animation-delay:165ms}
  .dash-cockpit.intro>*:nth-child(5){animation-delay:220ms}
  .dash-cockpit.intro>*:nth-child(6){animation-delay:275ms}
  .dash-cockpit.intro>*:nth-child(7){animation-delay:330ms}
  /* R-4 makes the cockpit configuration, so the child count is no longer fixed
     at seven — the panel's own reorder arrows can pack eight or nine rows. This
     catch-all holds every row past the seventh at the cascade's last step rather
     than letting it rise in step with the first. The seven rules above are
     untouched, so the default cockpit's timing is unchanged. */
  .dash-cockpit.intro>*:nth-child(n+8){animation-delay:385ms}
  @media (prefers-reduced-motion:reduce){ .dash-cockpit.intro>*{animation:none} }
  /* ── Discovery layer: the View switcher, its menu, and the first-run strip ──
     The cockpit has 29 cards and the default layout shows 9. Everything below
     exists so the other 20 are FINDABLE from the dashboard itself instead of
     three levels down in Settings. No new colour: the menu is the existing
     .export-menu shell, the strip is a .dash-block-weight surface. */
  .dash-view{position:relative;display:inline-flex}
  .dvw-btn{max-width:250px}
  .dvw-btn .dvw-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dvw-caret{font-size:10px;color:var(--muted);flex:none}
  /* .export-menu anchors right:0; the View button is the LEFTMOST item of a
     right-aligned action cluster, so that dropped the menu off the left edge.
     Anchor left instead — it opens under Report/Account/Sync, always in view. */
  .dvw-menu{min-width:300px;max-width:min(340px,calc(100vw - var(--sp-6)));left:0;right:auto;max-height:min(70vh,520px);overflow:auto}
  .dvw-menu button{flex-direction:row;align-items:flex-start;gap:var(--sp-2)}
  .dvw-tick{flex:none;width:13px;font-size:12px;font-weight:700;line-height:1.3;color:var(--txt);text-align:center}
  .dvw-lab{display:flex;flex-direction:column;gap:var(--sp-0);min-width:0}
  .dvw-lab>b{font-weight:600}
  .dvw-sep{height:1px;background:var(--border);margin:var(--sp-1) var(--sp-2)}
  .dvw-note{font-size:11px;line-height:1.45;color:var(--muted);padding:var(--sp-2) var(--sp-3) var(--sp-1);border-top:1px solid var(--border);margin-top:var(--sp-1)}
  .dash-disco{display:flex;align-items:flex-start;gap:var(--sp-3);flex-wrap:wrap;padding:var(--pad-card);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius)}
  .dash-disco .dd-ic{flex:none;color:var(--muted);margin-top:var(--sp-0)}
  .dash-disco .dd-main{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0;flex:1 1 340px}
  .dash-disco .dd-t{font-size:13px;font-weight:650;color:var(--txt)}
  .dash-disco .dd-s{font-size:11.5px;line-height:1.55;color:var(--muted)}
  .dash-disco .dd-acts{display:inline-flex;align-items:center;gap:var(--sp-2);flex:none;margin-left:auto}
  @media (max-width:860px){ .dash-disco .dd-acts{margin-left:0} }
  /* the widget picker, shared by Settings → App & display and the dashboard's
     own Customise modal — one builder, two mount points */
  .dashpref-h{display:flex;align-items:baseline;gap:var(--sp-2);font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1.1px;color:var(--muted);padding:var(--sp-4) 0 var(--sp-1);border-bottom:1px solid var(--border)}
  .dashpref-h:first-child{padding-top:0}
  .dashpref-h .dph-n{margin-left:auto;font-family:var(--body);font-size:11px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted);font-variant-numeric:tabular-nums}
  .dashpref-h.sub{letter-spacing:.6px;opacity:.85;border-bottom-style:dashed}
  .dashpref-none{font-size:11.5px;color:var(--muted);line-height:1.5;padding:var(--sp-3) 0}
  .dashpref-hint{font-size:11.5px;color:var(--muted);line-height:1.55;margin-bottom:var(--sp-2)}
  .dashcust-card{max-width:600px}
  .dashcust-b{max-height:52vh;overflow:auto;padding-right:var(--sp-1)}
  /* RR-3 builder v2: on-zone mini-grid (mirrors dashLayoutPack), drag
     indicator, preview strip, and the lightened scrim that lets the live
     preview read behind the Customise modal */
  .dashpref-grid{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-1);padding:var(--sp-2) 0}
  @media (max-width:480px){ .dashpref-grid{grid-template-columns:1fr} }
  .dashpref-cell{display:flex;align-items:center;gap:var(--sp-1);min-width:0;padding:var(--sp-1) var(--sp-2);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm)}
  .dashpref-cell.span2{grid-column:1/-1}
  .dashpref-cell[data-lift]{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber)}
  .dashpref-cell.dragsrc{opacity:.45}
  .dashpref-grid.dragging,.dashpref-grid.dragging .dashpref-cell{cursor:grabbing}
  .dashpref-ct{flex:1 1 auto;min-width:0;font-size:12px;font-weight:600;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dashpref-cbtns{display:inline-flex;align-items:center;gap:var(--sp-0);flex:0 0 auto}
  .dashpref-handle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:14px;color:var(--muted2,var(--muted));font-size:10px;letter-spacing:1px;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
  .dashpref-handle:active{cursor:grabbing}
  .dashpref-ind{position:absolute;top:0;left:0;width:3px;border-radius:2px;background:var(--amber);pointer-events:none;z-index:2}
  .dashpref-cbtns .dpw[aria-pressed="true"]{color:var(--amber);border-color:var(--amber)}
  .dashcust-prev{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;font-weight:600;color:var(--muted);padding:var(--sp-1) var(--sp-2);border:1px dashed var(--border);border-radius:var(--radius-sm);margin-bottom:var(--sp-2)}
  .dashcust-prev .dcp-dot{width:7px;height:7px;border-radius:50%;background:var(--amber);flex:0 0 auto}
  /* A2: THIS modal only — the preview must be visible through the scrim */
  .modal-overlay.dashcust-ov,[data-theme="dark"] .modal-overlay.dashcust-ov{background:rgba(4,4,6,.30);backdrop-filter:none;-webkit-backdrop-filter:none}
  [data-density="compact"] .kpi-v{font-size:17px}
  .dash-pills{display:flex;flex-wrap:wrap;gap:var(--sp-1);margin-top:var(--sp-2)}
  .dash-pill{font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);white-space:nowrap;background:var(--bg2);color:var(--muted);border:1px solid var(--border)}
  /* the pill's own text names the state ("2 overdue") — the glyph pairs with
     it and severity rides ink weight + border, per the ledger tone vocabulary */
  .dash-pill.warn{color:var(--txt);border-color:var(--muted2)}
  .dash-pill.warn::before{content:"\25B3";margin-right:var(--sp-1);font-weight:700}
  .dash-pill.ok{color:var(--muted-strong,var(--muted))}
  .dash-pill.ok::before{content:"\2713";margin-right:var(--sp-1);font-weight:700}
  .dash-grid2{display:grid;grid-template-columns:1.05fr .95fr;gap:var(--sp-4);align-items:start}
  @media (max-width:1024px){ .dash-grid2{grid-template-columns:1fr} }
  .dash-panel{border:1px solid var(--border);border-radius:14px;background:var(--panel-grad);box-shadow:var(--shadow-sm);overflow:hidden}
  .dash-panel-h{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);background:var(--panel2)}
  .dash-panel-h>svg{width:17px;height:17px;color:var(--amber2);flex:none}
  .dash-panel-h .t{font-family:var(--display);font-size:14px;font-weight:700;color:var(--txt)}
  .dash-panel-h .meta{margin-left:auto;font-size:11px;color:var(--muted2);font-weight:600}
  /* D-e one header grammar: inside a cockpit card the panel header is a
     full-bleed title band — negative margins against .dash-block's --pad-card
     (the padding itself stays: univ.js keeps drill footers outside
     .dash-panel-b and inside that padding), top corners matched to the card's
     radius minus its 1px border since .dash-block does not clip overflow, and
     type aligned to .dash-sec-h so a banded card and a sec-h card pair as one
     system. */
  .dash-block>.dash-panel-h{margin:calc(-1*var(--pad-card)) calc(-1*var(--pad-card)) var(--sp-3);padding:var(--pad-card) var(--pad-card) var(--sp-3);border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0}
  .dash-block>.dash-panel-h .t{font-size:12px;font-weight:400;letter-spacing:1.2px;text-transform:uppercase;color:var(--muted)}
  .dash-panel-b{padding:var(--sp-1) var(--sp-1)}
  .dash-li{display:flex;gap:var(--sp-3);align-items:flex-start;padding:var(--sp-2) var(--sp-3)}
  .dash-li+.dash-li{border-top:1px solid var(--border)}
  /* direct child only: this is the row's 29px avatar chip. Inline icons inside
     .mt (the paperclip on an email with attachments) carry .ic too, and a
     descendant selector blew them up to 29px inside a 12px subject line. */
  .dash-li>.ic{flex:none;width:29px;height:29px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:var(--bg2);color:var(--muted);font-size:11px;font-weight:700}
  .dash-li>.ic svg{width:14px;height:14px}
  .dash-li .mn{flex:1;min-width:0}
  .dash-li .mt{font-size:12px;font-weight:600;color:var(--txt);line-height:1.35}
  .dash-li .mt svg{vertical-align:-1px;color:var(--muted2)}
  .dash-li .md{font-size:11px;color:var(--muted);line-height:1.4;margin-top:var(--sp-0);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .dash-li .md .who{font-weight:600;color:var(--txt)}
  .dash-li .mtime{flex:none;font-size:10px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums;padding-top:1px}
  .dash-empty{padding:var(--sp-4) var(--sp-4);text-align:center}
  .dash-empty .ee{font-size:13px;font-weight:600;color:var(--txt);margin-bottom:var(--sp-1)}
  .dash-empty .es{font-size:12px;color:var(--muted);line-height:1.55}
  .dash-sample-tag{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--muted-strong,var(--muted));background:var(--bg2);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:var(--sp-0) var(--sp-1)}
  .dash-cal-day{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);padding:var(--sp-2) var(--sp-3) var(--sp-0)}
  .dash-skel{height:50px;border-radius:8px;margin:var(--sp-2) var(--sp-2);background:linear-gradient(90deg,var(--bg2) 25%,var(--panel2) 50%,var(--bg2) 75%);background-size:200% 100%;animation:dashShimmer 1.3s linear infinite}
  @keyframes dashShimmer{to{background-position:-200% 0}}
  @media (prefers-reduced-motion:reduce){ .dash-skel{animation:none} .dash-card:hover{transform:none} }
  /* _mdToSafeHtml emits the print doc's .doc-* classes, which only exist inside
     DOC_CSS — in-app its headings would render as unstyled body text */
  .dash-ai .doc-h2{font-family:var(--display);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:var(--sp-3) 0 var(--sp-1)}
  .dash-ai .doc-h2:first-child{margin-top:0}
  .dash-ai .doc-p{font-size:12px;line-height:1.55;color:var(--txt);margin:0 0 var(--sp-2)}
  .dash-ai .doc-ul{margin:0 0 var(--sp-2) var(--sp-4);padding:0}
  .dash-ai .doc-ul li{font-size:12px;line-height:1.5;color:var(--txt);margin:var(--sp-0) 0}

  /* installable-app (PWA) chrome */
  .install-btn{display:inline-flex;align-items:center;gap:var(--sp-2);font-weight:600;
    color:var(--amber2);border-color:color-mix(in srgb,var(--amber) 50%,transparent);
    background:color-mix(in srgb,var(--amber) 12%,var(--panel))}
  .install-btn:hover{background:color-mix(in srgb,var(--amber) 20%,var(--panel));border-color:var(--amber)}
  .install-btn .ic{flex:0 0 auto}
  .install-btn span{white-space:nowrap}
  @media (max-width:720px){ .install-btn span{display:none} .install-btn{padding-left:var(--sp-3);padding-right:var(--sp-3)} }
  .ios-install-ov{position:fixed;inset:0;z-index:4000;display:flex;align-items:center;justify-content:center;
    padding:var(--sp-5);background:color-mix(in srgb,#000 52%,transparent);backdrop-filter:blur(3px);animation:iosOvIn .18s ease-out}
  .ios-install-card{position:relative;width:min(420px,100%);background:var(--panel);border:1px solid var(--line,rgba(0,0,0,.1));
    border-radius:16px;padding:var(--sp-5) var(--sp-5) var(--sp-5);box-shadow:var(--shadow-xl);animation:iosCardIn .22s cubic-bezier(.2,.8,.25,1)}
  .ios-install-x{position:absolute;top:12px;right:12px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;
    border:none;background:transparent;color:var(--muted);border-radius:8px;cursor:pointer}
  .ios-install-x:hover{background:var(--bg2);color:var(--txt)}
  .ios-install-h{font-size:18px;font-weight:700;color:var(--txt);margin:var(--sp-1) 0 var(--sp-4)}
  .ios-install-steps{margin:0;padding-left:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3)}
  .ios-install-steps li{font-size:13px;line-height:1.5;color:var(--txt)}
  .ios-install-steps b{font-weight:700}
  .ios-install-note{margin-top:var(--sp-4);font-size:11px;color:var(--muted);line-height:1.55;
    border-top:1px solid var(--bg2);padding-top:var(--sp-3)}
  @keyframes iosOvIn{from{opacity:0}to{opacity:1}}
  @keyframes iosCardIn{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion:reduce){ .ios-install-ov,.ios-install-card{animation:none} }

  /* ===== Client tab ===== */
  .client-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--gap-grid);margin-bottom:var(--gap-stack)}
  .client-kpi{background:var(--panel);border:1px solid var(--border2);border-radius:11px;padding:var(--pad-card) var(--pad-card)}
  .client-kpi.accent{border-color:var(--amber);box-shadow:inset 0 0 0 1px var(--amber)}
  .client-kpi .ck-l{font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--muted);margin-bottom:var(--sp-1)}
  .client-kpi .ck-v{font-size:21px;font-weight:800;color:var(--txt);font-variant-numeric:tabular-nums;letter-spacing:-.3px}
  .client-kpi .ck-s{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
  .client-cols{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-grid);margin-bottom:var(--gap-stack)}
  .client-card{background:var(--panel);border:1px solid var(--border2);border-radius:11px;padding:var(--pad-card) var(--pad-card)}
  .client-card .cc-h{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;font-weight:700;letter-spacing:.3px;text-transform:uppercase;color:var(--amber);margin-bottom:var(--sp-3)}
  .client-card .cc-h .ic{color:var(--amber)}
  .cl-dl{display:flex;flex-direction:column;gap:var(--sp-2)}
  .cl-row{display:grid;grid-template-columns:150px 1fr;gap:var(--sp-3);align-items:baseline;font-size:13px;line-height:1.45}
  .cl-k{color:var(--muted);font-weight:600}
  .cl-v{color:var(--txt);font-weight:600;min-width:0;word-wrap:break-word}
  .cl-sub{display:block;font-size:11px;font-weight:500;color:var(--muted);margin-top:var(--sp-0)}
  .client-sec-h{font-size:13px;font-weight:800;color:var(--txt);margin:var(--sp-1) 0 var(--sp-2);display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}
  .cl-count{font-size:11px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
  .cv-tablewrap{border:1px solid var(--border2);border-radius:11px;overflow-x:auto;margin-bottom:var(--gap-stack);background:var(--panel)}
  .cv-table{width:100%;border-collapse:collapse;min-width:760px}
  .cv-table th{font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);font-weight:700;text-align:left;padding:var(--pad-cell-y) var(--pad-cell-x);background:var(--panel2);border-bottom:1px solid var(--border2);white-space:nowrap}
  .cv-table td{padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1px solid var(--border2);font-size:13px;vertical-align:middle}
  .cv-table tbody tr:last-child td{border-bottom:none}
  .cv-table tbody tr:hover{background:color-mix(in srgb,var(--amber) 5%,transparent)}
  .cv-no{font-weight:700;color:var(--txt);white-space:nowrap;font-variant-numeric:tabular-nums}
  .cv-val{white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:700}
  .cv-cur{color:var(--muted);font-weight:600;margin-right:var(--sp-0)}
  .cv-num{width:82px;text-align:right}
  .cv-val.neg .cv-num{color:var(--chase)}
  .cv-omit{font-size:9px;font-weight:800;color:var(--chase);margin-left:var(--sp-1);text-transform:uppercase;vertical-align:1px}
  .cv-date{white-space:nowrap;color:var(--muted);font-variant-numeric:tabular-nums}
  .cv-f{background:transparent;border:1px solid transparent;border-radius:6px;padding:var(--sp-1) var(--sp-2);font:inherit;font-size:13px;color:var(--txt);width:100%}
  .cv-desc .cv-f{min-width:170px}
  .cv-f:hover{border-color:var(--border2)}
  .cv-f:focus{border-color:var(--amber);background:var(--panel);outline:none}
  /* cycle button: the label IS the state word — squared ledger grammar, glyph
     pairs with the word, severity = ink weight + border, no solid fills (the
     white-on-colour text died with the capsules) */
  .cv-st{display:inline-block;font-size:11px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);cursor:pointer;color:var(--txt);white-space:nowrap;-webkit-user-select:none;user-select:none;transition:background .12s,border-color .12s,box-shadow .12s}
  .cv-st::before{font-weight:700;margin-right:var(--sp-1)}
  .cv-st.draft{color:var(--muted)}
  .cv-st.submitted{color:var(--muted-strong,var(--muted))}
  .cv-st.approved{color:var(--muted-strong,var(--muted))} .cv-st.approved::before{content:"\2713"}
  .cv-st.disputed{color:var(--txt);border-color:var(--muted2)} .cv-st.disputed::before{content:"\25B3"}
  .cv-st.rejected{color:var(--txt);border-color:var(--txt);font-weight:800} .cv-st.rejected::before{content:"\25B2"}
  .cv-st:hover{background:var(--border)}
  .cv-st:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
  .cv-x{color:var(--muted)}
  .cv-x:hover{color:var(--chase)}
  .cv-empty{text-align:center;color:var(--muted);padding:var(--sp-4) var(--sp-3)!important}
  .cl-list{display:flex;flex-direction:column;gap:0}
  .cl-li{display:flex;gap:var(--sp-3);align-items:flex-start;padding:var(--pad-row-y) var(--sp-0);border-bottom:1px solid var(--border2)}
  .cl-li:last-child{border-bottom:none}
  .cl-li-tag{flex:0 0 auto;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;padding:var(--sp-0) var(--sp-2);border-radius:6px;background:var(--bg2);color:var(--muted);border:1px solid var(--border2);white-space:nowrap}
  .cl-li-tag.ok{background:color-mix(in srgb,var(--awarded) 16%,transparent);color:var(--awarded);border-color:color-mix(in srgb,var(--awarded) 38%,transparent)}
  .cl-li-tag.warn{background:color-mix(in srgb,var(--await) 18%,transparent);color:var(--await);border-color:color-mix(in srgb,var(--await) 40%,transparent)}
  .cl-sev{flex:0 0 auto;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;padding:var(--sp-0) var(--sp-2);border-radius:6px;color:#fff;margin-top:var(--sp-0)}
  .cl-sev.sev-high{background:var(--chase)}
  .cl-sev.sev-medium{background:var(--await)}
  .cl-sev.sev-low{background:var(--muted2)}
  .cl-li-b{flex:1 1 auto;min-width:0}
  .cl-li-t{font-size:12px;font-weight:600;color:var(--txt);line-height:1.4}
  .cl-li-m{font-size:11px;color:var(--muted);margin-top:var(--sp-0);font-variant-numeric:tabular-nums}
  /* editable client/contract fields */
  .cc-edit{margin-left:auto;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-1)}
  /* click-to-edit toggle button (replaces the static EDITABLE tag) */
  .cc-edit-btn{margin-left:auto;display:inline-flex;align-items:center;gap:var(--sp-1);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:6px;padding:var(--sp-0) var(--sp-2);cursor:pointer;transition:color .15s var(--ease),border-color .15s var(--ease),background .15s var(--ease)}
  .cc-edit-btn:hover{color:var(--txt);border-color:var(--muted2)}
  .cc-edit-btn:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .cc-edit-btn.on{color:var(--on-accent);background:linear-gradient(180deg,var(--amber),var(--amber2));border-color:transparent}
  .cc-edit-btn svg{flex:0 0 auto}
  /* locked card: fields read as plain text until Edit is clicked */
  .client-card.locked .cl-infield{background:transparent;border-color:transparent}
  .client-card.locked .cl-infield:focus-within{box-shadow:none;border-color:transparent}
  .client-card.locked .cl-in{cursor:default}
  .client-card.locked .cl-pre{color:var(--muted2)}
  .cl-edit{display:flex;flex-direction:column;gap:var(--sp-2)}
  .cl-erow{display:grid;grid-template-columns:122px minmax(0,1fr);gap:var(--sp-2);align-items:center}
  .cl-erow .cl-k{color:var(--muted);font-weight:600;font-size:12px}
  .cl-infield{display:flex;align-items:center;background:var(--panel2);border:1px solid var(--border2);border-radius:8px;overflow:hidden;min-width:0}
  .cl-infield:focus-within{border-color:var(--amber);box-shadow:0 0 0 2px color-mix(in srgb,var(--amber) 22%,transparent)}
  .cl-pre{padding:0 var(--sp-0) 0 var(--sp-2);color:var(--muted);font-size:12px;font-weight:600}
  .cl-in{flex:1 1 auto;width:100%;min-width:0;border:none;background:transparent;font:inherit;font-size:12px;color:var(--txt);padding:var(--sp-1) var(--sp-2)}
  .cl-infield.money .cl-in{padding-left:var(--sp-0)}
  .cl-in:focus{outline:none}
  /* EOT register */
  .eot-d,.eot-d-h{text-align:center}
  .eot-num{width:62px;text-align:center}
  .cv-st.eot-claimed{color:var(--muted-strong,var(--muted))}
  .cv-st.eot-granted{color:var(--muted-strong,var(--muted))} .cv-st.eot-granted::before{content:"\2713"}
  .cv-st.eot-part{color:var(--txt);border-color:var(--muted2)} .cv-st.eot-part::before{content:"\25B3"}
  .cv-st.eot-rejected{color:var(--txt);border-color:var(--txt);font-weight:800} .cv-st.eot-rejected::before{content:"\25B2"}
  /* adjusted completion + retention */
  .client-cols.cols-32{grid-template-columns:1fr 1.4fr}
  .ret-big{font-size:26px;font-weight:800;color:var(--txt);font-variant-numeric:tabular-nums;letter-spacing:-.5px;margin:var(--sp-0) 0 var(--sp-1)}
  .ret-sub{font-size:11px;color:var(--muted);line-height:1.5} .ret-sub b{color:var(--txt)}
  .ret-bar{margin-top:var(--sp-3);height:7px;border-radius:4px;background:var(--blueprint-dim);overflow:hidden}
  .ret-bar>span{display:block;height:100%;background:var(--blueprint);border-radius:4px;transition:width .3s ease}
  @media (max-width:1080px){ .client-cols{grid-template-columns:1fr} .client-cols.cols-32{grid-template-columns:1fr} }
  @media (max-width:680px){ .cl-row{grid-template-columns:1fr;gap:var(--sp-0)} .cl-erow{grid-template-columns:1fr;gap:var(--sp-0)} }

  /* ===== Meeting minutes — personal worklist layout ===== */
  .mins-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:var(--sp-4);align-items:start;margin-top:var(--sp-1)}
  .mins-mine{position:sticky;top:8px;background:var(--panel);border:1px solid var(--border2);border-radius:11px;padding:var(--pad-card);display:flex;flex-direction:column;gap:var(--sp-3)}
  .mine-h{display:flex;align-items:center;gap:var(--sp-2)}
  .mine-av{width:32px;height:32px;border-radius:50%;background:var(--amber);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;flex:0 0 auto}
  .mine-h-t{font-size:13px;font-weight:800;color:var(--txt);line-height:1.15}
  .mine-h-s{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
  .mine-inits{font-weight:700;color:var(--amber)}
  .mine-sec{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-top:var(--sp-0)}
  .mine-list{display:flex;flex-direction:column;gap:var(--sp-2)}
  .mine-item{display:block;width:100%;text-align:left;background:color-mix(in srgb,var(--mi-accent,var(--amber)) 7%,var(--panel2));border:1px solid var(--border2);border-radius:8px;padding:var(--sp-2) var(--sp-2);cursor:pointer;font:inherit;transition:border-color .15s,background .15s}
  .mine-item:hover{border-color:var(--amber);background:var(--bg2)}
  .mine-t{font-size:12px;font-weight:600;color:var(--txt);line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .mine-m{display:flex;align-items:center;gap:var(--sp-1);margin-top:var(--sp-1);flex-wrap:wrap}
  .mine-trade{font-size:10px;font-weight:700;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-1);max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mine-due{font-size:10px;font-weight:700;color:var(--muted)}
  .mine-due.urgent{color:#fff;background:var(--chase);border-radius:5px;padding:var(--sp-0) var(--sp-1)}
  .mine-empty{font-size:12px;color:var(--muted);line-height:1.55}
  .mine-empty b{color:var(--txt)} .mine-empty .btn{margin-top:var(--sp-2)}
  .mins-list{min-width:0}
  .mins-nores{padding:var(--sp-5) var(--sp-2);text-align:center;color:var(--muted);font-size:13px}
  .mins-item .mi-right{display:flex;flex-direction:column;align-items:flex-end;gap:var(--sp-2);flex:0 0 auto}
  .mi-trade{font-size:10px;font-weight:700;letter-spacing:.2px;color:var(--txt);background:color-mix(in srgb,var(--mi-accent) 14%,transparent);border:1px solid color-mix(in srgb,var(--mi-accent) 42%,transparent);border-radius:6px;padding:var(--sp-0) var(--sp-2);max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}
  .mi-you{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:#fff;background:var(--amber);border-radius:5px;padding:var(--sp-0) var(--sp-2);white-space:nowrap}
  .mins-item.mine{box-shadow:inset 3px 0 0 var(--mi-accent,var(--border2)),inset 0 0 0 1px color-mix(in srgb,var(--amber) 38%,transparent)}
  .mins-item.flash{animation:miFlash 1.3s ease-out}
  @keyframes miFlash{0%{background:color-mix(in srgb,var(--amber) 20%,var(--panel))}100%{background:var(--panel)}}
  /* responsible-person chip — legible on the gunmetal accent in both themes */
  .mi-who{color:var(--amber);background:color-mix(in srgb,var(--amber) 15%,transparent);border:1px solid color-mix(in srgb,var(--amber) 34%,transparent);font-weight:700}
  .mi-who.unassigned{background:var(--panel2);color:var(--muted);border:1.5px solid var(--border2);font-weight:600}
  [data-theme="dark"] .mine-av{color:#14130f}
  [data-theme="dark"] .mi-you{color:#14130f}
  @media (max-width:920px){ .mins-layout{grid-template-columns:1fr} .mins-mine{position:static} }
  @media (prefers-reduced-motion:reduce){ .mins-item.flash{animation:none} .mine-item{transition:none} }

  /* ===== Cross-tab links ===== */
  .link-row{display:inline-flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
  .link-chips{display:inline-flex;align-items:center;gap:var(--sp-1);flex-wrap:wrap}
  .link-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:10px;font-weight:700;color:var(--txt);background:var(--panel2);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:var(--sp-0) var(--sp-1) var(--sp-0) var(--sp-2);cursor:pointer;max-width:190px}
  .link-chip:hover{border-color:var(--amber)}
  .link-chip .ic{color:var(--muted)}
  .link-chip.type-rfi .ic{color:#adacaa} .link-chip.type-mins .ic{color:#b4b3b1} .link-chip.type-prog .ic{color:var(--reply)} .link-chip.type-cv .ic{color:var(--awarded)} .link-chip.type-eot .ic{color:var(--await)}
  .lc-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:140px}
  .lc-x{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;color:var(--muted);font-size:13px;line-height:1;cursor:pointer}
  .lc-x:hover{background:var(--chase);color:#fff}
  .lc-x:focus-visible{outline:none;box-shadow:var(--ring-focus)}
  .link-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-1);min-width:24px;height:24px;padding:0 var(--sp-2);border:1px dashed var(--border2);background:transparent;color:var(--muted);border-radius:8px;cursor:pointer;font:inherit}
  .link-btn:hover{border-color:var(--amber);border-style:solid;color:var(--amber)}
  .cv-rowacts{display:inline-flex;align-items:center;gap:var(--sp-1);justify-content:flex-end}
  .rfi-links{margin-top:var(--sp-2)}
  .pa-act{font-weight:500;color:var(--txt)}
  td.pa .link-row{margin-top:var(--sp-1)}
  /* flash highlight on a jumped-to record */
  .link-flash{animation:linkFlash 1.5s ease-out}
  tr.link-flash>td{animation:linkFlash 1.5s ease-out}
  @keyframes linkFlash{0%{background:color-mix(in srgb,var(--amber) 28%,transparent)}100%{background:transparent}}
  /* link picker modal */
  .link-modal-ov{position:fixed;inset:0;z-index:4200;display:flex;align-items:center;justify-content:center;padding:var(--sp-5);background:color-mix(in srgb,#000 52%,transparent);backdrop-filter:blur(3px);animation:iosOvIn .16s ease-out}
  .link-modal{position:relative;width:min(520px,100%);max-height:82vh;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--border2);border-radius:16px;padding:var(--sp-5) var(--sp-5) var(--sp-4);box-shadow:var(--shadow-xl);animation:iosCardIn .2s cubic-bezier(.2,.8,.25,1)}
  .lm-title{font-size:17px;font-weight:700;color:var(--txt);margin:var(--sp-0) var(--sp-7) var(--sp-3) 0}
  .lm-title b{font-weight:800}
  .lm-search{width:100%;border:1px solid var(--border2);background:var(--panel2);border-radius:8px;padding:var(--sp-2) var(--sp-3);font:inherit;font-size:13px;color:var(--txt);margin-bottom:var(--sp-2)}
  .lm-search:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 2px color-mix(in srgb,var(--amber) 22%,transparent)}
  .lm-body{overflow:auto;min-height:80px}
  .lm-sec{display:flex;align-items:center;gap:var(--sp-2);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:var(--sp-3) var(--sp-0) var(--sp-1)}
  .lm-sec .ic{color:var(--amber)}
  .lm-opt{display:flex;align-items:center;gap:var(--sp-2);width:100%;text-align:left;background:transparent;border:1px solid transparent;border-radius:8px;padding:var(--sp-2) var(--sp-2);cursor:pointer;font:inherit}
  .lm-opt:hover{background:var(--bg2)}
  .lm-opt.on{background:color-mix(in srgb,var(--amber) 10%,transparent);border-color:color-mix(in srgb,var(--amber) 34%,transparent)}
  .lm-check{flex:0 0 18px;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--border2);border-radius:5px;color:#fff}
  .lm-opt.on .lm-check{background:var(--amber);border-color:var(--amber)}
  .lm-opt-b{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:var(--sp-0)}
  .lm-opt-t{font-size:13px;font-weight:600;color:var(--txt)}
  .lm-opt-meta{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.3px;margin-left:var(--sp-1)}
  .lm-opt-s{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .lm-empty{padding:var(--sp-5) var(--sp-2);text-align:center;color:var(--muted);font-size:13px}
  [data-theme="dark"] .lm-opt.on .lm-check{color:#14130f}
  @media (prefers-reduced-motion:reduce){ .link-flash,tr.link-flash>td,.link-modal-ov,.link-modal{animation:none} }

  /* ===== Timeline ===== */
  .tl-meta{font-size:12px;color:var(--muted);line-height:1.5;margin:var(--sp-0) 0 var(--sp-4)}
  .tl-meta b{color:var(--txt);font-weight:600}
  .tl-sec{margin-bottom:var(--sp-4)}
  .tl-day{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;font-weight:800;color:var(--txt);text-transform:uppercase;letter-spacing:.4px;padding:0 var(--sp-0) var(--sp-2);border-bottom:1px solid var(--border2);margin-bottom:var(--sp-2)}
  .tl-day .ic{color:var(--amber)}
  .tl-day.is-today{color:var(--amber)}
  .tl-rel{margin-left:auto;font-size:10px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--muted)}
  .tl-day.overdue-day{color:#727270} .tl-day.overdue-day .ic{color:#727270}
  .tl-item{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--pad-row-y) var(--sp-3);background:color-mix(in srgb,var(--tc,var(--border2)) 6%,var(--panel));border:1px solid var(--border2);border-radius:8px;margin-bottom:var(--sp-2)}
  .tl-item.overdue{background:color-mix(in srgb,#727270 6%,var(--panel))}
  .tl-item.crit .tl-t::after{content:" ▲ critical";color:#727270;font-size:10px;font-weight:700}
  .tl-type{flex:0 0 auto;display:inline-flex;align-items:center;gap:var(--sp-1);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.3px;color:var(--tc,var(--muted));background:color-mix(in srgb,var(--tc) 15%,transparent);border:1px solid color-mix(in srgb,var(--tc) 38%,transparent);border-radius:6px;padding:var(--sp-0) var(--sp-2);white-space:nowrap;margin-top:var(--sp-0)}
  .tl-type .ic{color:var(--tc)}
  .tl-b{flex:1 1 auto;min-width:0}
  .tl-t{font-size:13px;font-weight:600;color:var(--txt);line-height:1.4}
  .tl-s{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
  .tl-links{margin-top:var(--sp-2)}
  .tl-go{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid var(--border2);background:var(--panel2);color:var(--muted);border-radius:8px;cursor:pointer}
  .tl-go:hover{border-color:var(--amber);color:var(--amber)}
  .tl-empty{text-align:center;padding:var(--sp-8) var(--sp-4);color:var(--muted)}
  .tl-empty-i{color:var(--awarded);margin-bottom:var(--sp-2)}
  .tl-empty-t{font-size:15px;font-weight:700;color:var(--txt)}
  .tl-empty-s{font-size:12px;margin-top:var(--sp-1)}
  /* joined segmented bars (match .prog-modes): one outline + internal dividers, no detached pills */
  .tl-winsel,.tl-filters{display:inline-flex;align-items:stretch;border:1.5px solid var(--border2);border-radius:var(--r);overflow:hidden;background:var(--panel);max-width:100%}
  .tl-filters{overflow-x:auto}
  .tl-win,.tl-fbtn{display:inline-flex;align-items:center;gap:var(--sp-1);font:600 12px var(--body);padding:var(--sp-2) var(--sp-3);border:0;background:transparent;color:var(--muted);cursor:pointer;white-space:nowrap;transition:background .16s var(--ease),color .16s var(--ease)}
  .tl-win+.tl-win,.tl-fbtn+.tl-fbtn{border-left:1.5px solid var(--border2)}
  .tl-win:hover,.tl-fbtn:hover{color:var(--txt);background:color-mix(in srgb,var(--amber) 7%,transparent)}
  .tl-win .ic,.tl-fbtn .ic{opacity:.55;transition:opacity .16s var(--ease),color .16s var(--ease)}
  /* window = single-select → solid accent segment */
  .tl-win.on{background:var(--amber);color:var(--on-accent)}
  .tl-win.on .ic{opacity:1}
  /* source filters = multi-select (default all-on) → soft tint so a full bar isn't a solid block */
  .tl-fbtn.on{background:color-mix(in srgb,var(--amber) 13%,transparent);color:var(--txt)}
  .tl-fbtn.on .ic{opacity:1;color:var(--amber)}
  .tl-fbtn:not(.on){color:var(--muted2)}
  .tl-fbtn:not(.on) .ic{opacity:.4}
  @media(max-width:640px){ .tl-fbtn .tl-lbl{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap} .tl-fbtn{padding:var(--sp-2)} }

  /* ===== Quote leveling ===== */
  .lv-meta{font-size:12px;color:var(--muted);line-height:1.5;margin:var(--sp-0) 0 var(--sp-4)}
  .lv-meta b{color:var(--txt);font-weight:600}
  .lv-card{background:var(--panel);border:1px solid var(--border2);border-radius:11px;margin-bottom:var(--sp-4);overflow:hidden}
  .lv-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap;padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border2);background:var(--panel2)}
  .lv-h-l{display:flex;align-items:center;gap:var(--sp-2)}
  .lv-pkg{font-size:14px;font-weight:800;color:var(--txt)}
  .lv-pkgst{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:#fff;background:var(--c,var(--muted));border-radius:5px;padding:var(--sp-0) var(--sp-2)}
  .lv-h-r{display:flex;align-items:center;gap:var(--sp-4);flex-wrap:wrap}
  .lv-kpi{display:flex;flex-direction:column;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;color:var(--muted)}
  .lv-kpi b{font-size:15px;font-weight:800;color:var(--txt);text-transform:none;letter-spacing:-.2px;font-variant-numeric:tabular-nums}
  .lv-kpi.good b{color:#706f6e} .lv-kpi.bad b{color:#727270}
  .lv-tablewrap{overflow-x:auto}
  .lv-table{width:100%;border-collapse:collapse;min-width:640px}
  .lv-table th{font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);font-weight:700;text-align:left;padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1px solid var(--border2);white-space:nowrap}
  .lv-table td{padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1px solid var(--border);vertical-align:middle;font-size:13px}
  .lv-table tbody tr:last-child td{border-bottom:none}
  .lv-row.low td{background:color-mix(in srgb,var(--awarded) 6%,transparent)}
  .lv-row.rec td{box-shadow:inset 3px 0 0 var(--amber)}
  .lv-sname{font-weight:700;color:var(--txt);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
  .lv-spec{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
  .lv-tag{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.3px;padding:var(--sp-0) var(--sp-1);border-radius:5px}
  .lv-tag.low{color:#706f6e;background:color-mix(in srgb,var(--awarded) 16%,transparent);border:1px solid color-mix(in srgb,var(--awarded) 38%,transparent)}
  .lv-tag.rec{color:var(--amber);background:color-mix(in srgb,var(--amber) 15%,transparent);border:1px solid color-mix(in srgb,var(--amber) 38%,transparent)}
  .lv-badge{font-size:10px;font-weight:700;color:#fff;background:var(--c,var(--muted));border-radius:5px;padding:var(--sp-0) var(--sp-2);white-space:nowrap}
  .lv-q{white-space:nowrap}
  .lv-cur{color:var(--muted);font-weight:600;margin-right:var(--sp-0)}
  .lv-qin{width:96px;text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
  .lv-vb{white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:600}
  .lv-vb.over{color:#727270} .lv-vb.under{color:#706f6e}
  .lv-pct{font-size:10px;color:var(--muted);font-weight:600}
  .lv-vl{white-space:nowrap;color:var(--muted);font-variant-numeric:tabular-nums}
  .lv-low0{color:#706f6e;font-weight:700}
  .lv-pick,.lv-pick-h{text-align:center;width:62px}
  .lv-rec{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border2);background:var(--panel2);color:var(--muted);border-radius:8px;cursor:pointer}
  .lv-rec:hover{border-color:var(--amber);color:var(--amber)}
  .lv-rec.on{background:var(--amber);border-color:var(--amber);color:#fff}
  [data-theme="dark"] .lv-rec.on,[data-theme="dark"] .lv-pkgst,[data-theme="dark"] .lv-badge{color:#14130f}
  /* scope-compliance vetting (scope lines a quote covers) */
  .lv-scope-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;font-weight:600;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--panel2);color:var(--muted);cursor:pointer;white-space:nowrap;transition:border-color .15s,background .15s}
  /* coverage severity = glyph + the chip's own "n/m · k excl" wording */
  .lv-scope-chip::before{font-weight:700}
  .lv-scope-chip.ok{color:var(--muted-strong,var(--muted))} .lv-scope-chip.ok::before{content:"\2713"}
  .lv-scope-chip.warn{color:var(--txt);border-color:var(--muted2)} .lv-scope-chip.warn::before{content:"\25B3"}
  .lv-scope-chip.bad{color:var(--txt);border-color:var(--txt);font-weight:700} .lv-scope-chip.bad::before{content:"\25B2"}
  .lv-scope-chip.open{outline:2px solid color-mix(in srgb,var(--amber) 40%,transparent);outline-offset:1px}
  .lv-scope-na{color:var(--muted2);font-size:11px}
  .lv-kpi.warnflag b{color:var(--chase)}
  .lv-resp-row>td{background:var(--bg2);padding:0}
  .lv-resp-wrap{padding:var(--sp-3) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2)}
  .lv-resp-h{font-size:12px;font-weight:700;color:var(--txt);margin-bottom:var(--sp-0)}
  .lv-respline{display:flex;align-items:flex-start;gap:var(--sp-2)}
  .lv-respseg{display:inline-flex;flex:0 0 auto;border:1px solid var(--border2);border-radius:8px;overflow:hidden}
  .lv-ie{font-size:10px;font-weight:600;padding:var(--sp-1) var(--sp-2);border:0;background:var(--panel);color:var(--muted);cursor:pointer;border-right:1px solid var(--border2)}
  .lv-ie:last-child{border-right:0}
  .lv-ie.on.ie-covered{background:var(--awarded);color:#fff}
  .lv-ie.on.ie-clarify{background:var(--await);color:#fff}
  .lv-ie.on.ie-excluded{background:var(--chase);color:#fff}
  [data-theme="dark"] .lv-ie.on.ie-covered,[data-theme="dark"] .lv-ie.on.ie-clarify,[data-theme="dark"] .lv-ie.on.ie-excluded{color:#14130f}
  .lv-resptext{font-size:11px;color:var(--txt);line-height:1.45}
  .lv-respsec{display:inline-block;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted2);background:var(--panel2);border:1px solid var(--border2);border-radius:4px;padding:var(--sp-0) var(--sp-1);margin-right:var(--sp-2);vertical-align:middle}
  .lv-resp-note{width:100%;margin-top:var(--sp-0);min-height:46px;resize:vertical;font-family:var(--body);font-size:11px;padding:var(--sp-2) var(--sp-2);border:1px solid var(--border2);border-radius:8px;background:var(--panel);color:var(--txt)}

  /* ===== Document generation ===== */
  .cl-docbar{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-4);background:var(--panel2);border:1px solid var(--border2);border-radius:11px}
  .cl-docbar>.ic{color:var(--amber);flex:0 0 auto}
  .cl-docbar-l{font-size:12px;font-weight:700;color:var(--txt)}
  .cl-docbar-h{font-size:11px;color:var(--muted);margin-left:auto}
  .cv-doc{color:var(--muted)} .cv-doc:hover{color:var(--amber)}
  .doc-ov{position:fixed;inset:0;z-index:4300;display:flex;flex-direction:column;background:color-mix(in srgb,#000 60%,transparent)}
  .doc-ov-bar{display:flex;gap:var(--sp-2);justify-content:center;padding:var(--sp-2);background:#1f2933}
  .doc-ov-frame{flex:1 1 auto;border:none;width:100%;background:#fff}
  @media (max-width:680px){ .cl-docbar-h{display:none} }

  /* ===== Consultants ===== */
  .cons-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(345px,1fr));gap:var(--gap-grid);align-items:start}
  .cons-card .cc-h{flex-wrap:wrap}
  .cons-disc{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-2)}
  .cons-x{margin-left:auto;color:var(--muted)} .cons-x:hover{color:var(--chase)}
  .cons-sec{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:var(--sp-4) 0 var(--sp-2);display:flex;align-items:center;gap:var(--sp-2);border-top:1px solid var(--border2);padding-top:var(--sp-3)}
  .cons-n{font-weight:700;color:var(--txt);background:var(--bg2);border-radius:20px;padding:var(--sp-0) var(--sp-2);font-size:10px}
  .cons-items{display:flex;flex-direction:column;gap:var(--sp-1)}
  .cons-item{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-0)}
  .cons-it-t{flex:1 1 auto;min-width:0;font-size:12px;font-weight:600;color:var(--txt);line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cons-it-d{flex:0 0 auto;font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
  .cons-item .tl-go{width:24px;height:24px}
  .cons-none{font-size:12px;color:var(--muted);line-height:1.5;padding:var(--sp-0)}
  @media (max-width:680px){ .cons-grid{grid-template-columns:1fr} }

  /* ===== QoL: sticky table headers (scroll-region) ===== */
  .cv-tablewrap,.lv-tablewrap,.prog-table-wrap{max-height:72vh;overflow:auto}
  .cv-table thead th,.lv-table thead th,table.progm thead th{position:sticky;top:0;z-index:2;box-shadow:inset 0 -1px 0 var(--border2)}
  /* ===== QoL: sortable column headers ===== */
  .cv-sort{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}
  .cv-sort:hover{color:var(--txt)}
  .cv-sort.on{color:var(--amber)}
  .cv-sort .sort-ind{font-size:10px;opacity:.9}
  .cv-sort:focus-visible{outline:2px solid var(--amber);outline-offset:-2px}
  /* ===== QoL: "Saved" autosave confirmation ===== */
  .saved-pill{position:fixed;bottom:16px;right:16px;z-index:1200;display:inline-flex;align-items:center;gap:var(--sp-1);font-size:12px;font-weight:600;color:#fff;background:var(--awarded);border-radius:20px;padding:var(--sp-1) var(--sp-3) var(--sp-1) var(--sp-2);box-shadow:var(--shadow-lg);opacity:0;transform:translateY(8px);pointer-events:none;transition:opacity .2s ease,transform .2s ease}
  .saved-pill.show{opacity:1;transform:none}
  .saved-pill .ic{color:inherit}
  [data-theme="dark"] .saved-pill{color:#0d2417}
  .saved-pill.warn{background:var(--panel2);color:var(--txt);border:1px solid var(--chase)}
  .saved-pill.warn .ic{color:var(--chase)}
  [data-theme="dark"] .saved-pill.warn{color:var(--txt)}
  @media (prefers-reduced-motion:reduce){ .saved-pill{transition:none} }

  /* ===== Site diary ===== */
  .site-list{display:flex;flex-direction:column;gap:var(--sp-4)}
  .site-card{padding:0;overflow:hidden}
  .site-card.has-delay{box-shadow:inset 4px 0 0 #727270}
  .site-head{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding:var(--sp-3) var(--sp-4);background:var(--panel2);border-bottom:1px solid var(--border2)}
  .site-wx{display:inline-flex;align-items:center;gap:var(--sp-1);font:inherit;font-size:12px;font-weight:700;color:var(--c,var(--muted));background:color-mix(in srgb,var(--c) 14%,transparent);border:1px solid color-mix(in srgb,var(--c) 38%,transparent);border-radius:8px;padding:var(--sp-1) var(--sp-2);cursor:pointer;white-space:nowrap}
  .site-wx .ic{color:var(--c)}
  .site-date-b{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
  .site-date{border:1px solid var(--border2);background:var(--panel);border-radius:8px;padding:var(--sp-1) var(--sp-2);font:inherit;font-size:12px;color:var(--txt);font-weight:600}
  .site-dl{font-size:14px;font-weight:800;color:var(--txt)}
  .site-mini{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted);font-weight:600;white-space:nowrap}
  .site-num{width:52px;text-align:right;border:1px solid var(--border2);background:var(--panel);border-radius:6px;padding:var(--sp-1) var(--sp-1);font:inherit;font-size:12px;color:var(--txt);font-variant-numeric:tabular-nums}
  .site-x{margin-left:auto;color:var(--muted)} .site-x:hover{color:var(--chase)}
  .site-body{padding:var(--pad-card) var(--pad-card);display:flex;flex-direction:column;gap:var(--sp-3)}
  .site-fld{display:flex;flex-direction:column;gap:var(--sp-1)}
  .site-fld .cl-k{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.3px}
  .site-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
  .site-fld input.site-f,.site-fld textarea.site-f{border:1px solid var(--border2);background:var(--panel2);border-radius:8px;padding:var(--sp-2) var(--sp-3);font:inherit;font-size:13px;color:var(--txt);width:100%;resize:vertical}
  .site-fld textarea.site-f{line-height:1.5;min-height:42px}
  .site-fld input.site-f:focus,.site-fld textarea.site-f:focus,.site-num:focus,.site-date:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 2px color-mix(in srgb,var(--amber) 22%,transparent)}
  @media (max-width:680px){ .site-grid{grid-template-columns:1fr} }
  /* site photos + map + report */
  .cl-maprow{margin-top:var(--sp-3)}
  .cl-map{display:inline-flex;align-items:center;gap:var(--sp-1)}
  .site-ph-label{margin-top:var(--sp-0);text-transform:uppercase;letter-spacing:.3px;font-size:11px}
  .site-thumbs{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-2)}
  .site-thumb{position:relative;width:84px;height:84px;border-radius:8px;overflow:hidden;border:1px solid var(--border2)}
  .site-thumb img{width:100%;height:100%;object-fit:cover;cursor:zoom-in;display:block}
  .site-thumb-x{position:absolute;top:3px;right:3px;width:18px;height:18px;border:none;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:13px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .site-thumb-x:hover{background:var(--chase)}
  .site-addphoto{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-1);width:84px;height:84px;border:1px dashed var(--border2);background:transparent;color:var(--muted);border-radius:8px;cursor:pointer;font:inherit;font-size:10px;font-weight:600;text-align:center}
  .site-addphoto:hover{border-color:var(--amber);color:var(--amber)}
  .site-foot{display:flex;justify-content:flex-end;margin-top:var(--sp-2)}
  .site-pdf{display:inline-flex;align-items:center;gap:var(--sp-1)}
  .site-lb{position:fixed;inset:0;z-index:5000;display:flex;align-items:center;justify-content:center;padding:var(--sp-6);background:color-mix(in srgb,#000 80%,transparent);cursor:zoom-out}
  .site-lb img{max-width:96%;max-height:92%;border-radius:8px;box-shadow:var(--shadow-xl)}
  .site-lb-x{position:fixed;top:16px;right:18px;width:38px;height:38px;border:none;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .site-lb-x:hover{background:rgba(255,255,255,.25)}
  /* ===== CardSwipe — swipeable stacked briefing cards ===== */
  .dash-brief{display:flex;gap:var(--sp-6);align-items:center;flex-wrap:wrap;margin:var(--sp-0) 0 var(--gap-stack)}
  .dash-brief-hint{color:var(--muted);font-size:13px;line-height:1.55;max-width:240px;margin:0}
  .dash-brief-hint b{color:var(--txt)}
  .cardswipe{--cs-accent:var(--reply);position:relative;width:330px;max-width:100%;user-select:none;touch-action:pan-y;font-family:var(--body)}
  .cardswipe-stack{position:relative;height:248px}
  .cardswipe-card{position:absolute;inset:0;box-sizing:border-box;display:flex;flex-direction:column;gap:var(--sp-4);padding:var(--sp-5) var(--sp-5) var(--sp-5);border-radius:var(--radius);background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow-lg);color:var(--txt);will-change:transform;transition:transform .45s var(--ease-out),opacity .35s ease;cursor:grab}
  .cardswipe-card.dragging{transition:none;cursor:grabbing}
  .cardswipe-card:focus-visible{outline:none;box-shadow:var(--shadow-lg),var(--ring-focus)}
  .cardswipe-ic{width:54px;height:54px;border-radius:14px;display:grid;place-items:center;color:var(--cs-accent);background:color-mix(in srgb,var(--cs-accent) 14%,transparent)}
  .cardswipe-ic svg{width:26px;height:26px}
  .cardswipe-body{margin-top:auto}
  .cardswipe-title{font-family:var(--display);font-weight:800;font-size:19px;letter-spacing:-.01em;margin:0 0 var(--sp-2)}
  .cardswipe-desc{margin:0;color:var(--muted);font-size:13px;line-height:1.5}
  .cardswipe-dots{display:flex;gap:var(--sp-2);justify-content:center;margin-top:var(--sp-4)}
  .cardswipe-dot{width:7px;height:7px;border-radius:99px;background:var(--muted2);opacity:.4;transition:width .3s var(--ease),opacity .3s var(--ease),background .3s var(--ease)}
  .cardswipe-dot.on{width:22px;opacity:1;background:var(--cs-accent)}
  .cardswipe-ctrls{display:flex;gap:var(--sp-2);justify-content:center;margin-top:var(--sp-4)}
  .cardswipe-btn{font:inherit;font-size:12px;font-weight:700;padding:var(--sp-2) var(--sp-4);border-radius:99px;border:1px solid var(--border2);background:transparent;color:var(--txt);cursor:pointer;transition:transform .14s var(--ease),background .14s var(--ease)}
  .cardswipe-btn:hover{background:var(--bg2)}
  .cardswipe-btn:active{transform:scale(.95)}
  .cardswipe-btn.primary{background:var(--cs-accent);border-color:var(--cs-accent);color:#fff}
  .cardswipe-btn.primary:hover{filter:brightness(1.05)}
  /* ===== AdaptiveSlider — pill range whose colour adapts to the value ===== */
  .aslider{--as-text:var(--quote);width:100%;max-width:380px;user-select:none;font-family:var(--body)}
  .aslider-label{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:0 0 var(--sp-2)}
  .aslider-readout{display:flex;align-items:baseline;gap:var(--sp-2);margin-bottom:var(--sp-4)}
  .aslider-val{font-family:var(--display);font-size:36px;font-weight:800;line-height:1;letter-spacing:-.02em;color:var(--as-text);font-variant-numeric:tabular-nums;transition:color .3s var(--ease)}
  .aslider-unit{font-family:var(--display);font-size:24px;font-weight:800;color:var(--txt)}
  .aslider-track{position:relative;display:flex;align-items:center;height:48px;width:100%;border-radius:999px;overflow:hidden;background:var(--amber-dim)}
  .aslider-dots{position:absolute;inset:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--sp-4);pointer-events:none;z-index:3}
  .aslider-dot{width:5px;height:5px;border-radius:50%;background:var(--muted2);opacity:.5}
  .aslider-fill{position:absolute;left:0;top:0;height:100%;border-radius:999px;background:var(--as-fill,var(--quote));transition:width .35s var(--ease-out),background .35s var(--ease-out);pointer-events:none;z-index:1}
  .aslider-range{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;z-index:5}
  .aslider-range:focus-visible+.aslider-thumb i{box-shadow:0 1px 3px rgba(0,0,0,.2),var(--ring-focus)}
  .aslider-thumb{position:absolute;top:0;height:48px;width:48px;display:grid;place-items:center;border-radius:50%;pointer-events:none;z-index:4;transition:left .35s var(--ease-out)}
  .aslider-thumb i{display:block;width:36px;height:36px;border-radius:50%;background:var(--panel);box-shadow:0 1px 3px rgba(0,0,0,.18),inset 0 2px 4px rgba(0,0,0,.07)}
  .aslider-cap{margin-top:var(--sp-3);font-size:13px;color:var(--muted);line-height:1.5}
  .aslider-cap b{color:var(--txt)}
  .dash-budget{display:inline-block;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:var(--sp-5) var(--sp-5) var(--sp-5);max-width:440px;width:100%;margin-bottom:var(--gap-stack)}

  /* ===== charts ===== */
  .dash-charts{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-grid);margin-bottom:var(--sp-4)}
  .dash-chart{background:var(--panel);border:1px solid var(--border2);border-radius:11px;padding:var(--pad-card) var(--pad-card)}
  .dash-chart.site-chart{margin-bottom:var(--sp-4)}
  .dc-h{font-size:12px;font-weight:700;color:var(--txt);margin-bottom:var(--sp-3);display:flex;align-items:baseline;gap:var(--sp-2)}
  .dc-sub{font-size:10px;font-weight:500;color:var(--muted)}
  .chart{width:100%;height:auto;display:block;overflow:visible}
  .chart .ch-val{fill:var(--txt);font-size:9px;font-weight:700}
  .chart .ch-lbl{fill:var(--muted);font-size:9px}
  .chart-stack{width:100%;height:16px;display:block;border-radius:6px;overflow:hidden;border:1px solid var(--border2)}
  .ch-legend{display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-3);margin-top:var(--sp-2)}
  .ch-leg{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted)}
  .ch-leg i{width:10px;height:10px;border-radius:3px;display:inline-block;flex:0 0 auto}
  .ch-leg b{color:var(--txt);font-variant-numeric:tabular-nums}
  .dc-foot{font-size:11px;color:var(--muted);margin-top:var(--sp-2);line-height:1.5}
  .dc-foot b{color:var(--txt);font-variant-numeric:tabular-nums}
  .dc-pos{color:#706f6e;font-weight:700} .dc-neg{color:#727270;font-weight:700}
  @media (max-width:820px){ .dash-charts{grid-template-columns:1fr} }

/* ---- Scope Builder ---- */
.sow-wrap{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--sp-4);align-items:start}
@media(max-width:980px){.sow-wrap{grid-template-columns:1fr}}
.sow-doc-head{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--sp-4);margin-bottom:var(--sp-4);padding-bottom:var(--sp-3);border-bottom:1px solid var(--border)}
.sow-doc-trade{font-size:19px;font-weight:700;letter-spacing:-.01em;color:var(--txt)}
.sow-doc-meta{font-size:12px;color:var(--muted);margin-top:var(--sp-0);font-variant-numeric:tabular-nums}
.sow-doc-actions{display:flex;gap:var(--sp-2);flex:0 0 auto}
.sow-sec{margin-bottom:var(--sp-4);border:1px solid var(--border);border-radius:11px;background:var(--panel);overflow:hidden}
.sow-sec-h{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--bg2);border-bottom:1px solid var(--border)}
.sow-sec-h b{font-size:13px;color:var(--txt)}
.sow-sec-sub{font-size:11px;color:var(--muted);margin-left:var(--sp-2)}
.sow-empty-row{padding:var(--sp-3);font-size:12px;color:var(--muted);font-style:italic}
.sow-row{display:grid;grid-template-columns:34px minmax(0,1fr) 56px 30px;gap:var(--sp-2);align-items:start;padding:var(--pad-row-y) var(--sp-3);border-bottom:1px solid var(--border)}
.sow-row:last-child{border-bottom:none}
.sow-row.excl{opacity:.62}
.sow-no{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;padding-top:var(--sp-2);text-align:center}
/* D-k (RR-1.5): field-sizing owns growth on Chromium 123+ — it re-measures on
   wrap-width change and sizes border-box, so no JS height writes and no 2px
   border clip. autoGrowLine() is the fallback for engines without it. */
.sow-text{width:100%;resize:none;border:1px solid transparent;background:transparent;color:var(--txt);font:inherit;font-size:12px;line-height:1.5;padding:var(--sp-1) var(--sp-2);border-radius:8px;overflow:hidden;field-sizing:content}
.sow-text:hover{border-color:var(--border)}
.sow-text:focus{outline:none;border-color:var(--amber);background:var(--bg)}
.sow-incl{display:flex;justify-content:center;padding-top:var(--sp-0)}
.sow-ie{font-size:10px;font-weight:700;letter-spacing:.03em;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);color:var(--muted);cursor:pointer;min-width:46px}
.sow-ie.on{background:color-mix(in srgb,var(--quote) 16%,transparent);border-color:color-mix(in srgb,var(--quote) 45%,transparent);color:var(--quote)}
.sow-del{border:none;background:transparent;color:var(--muted2);cursor:pointer;padding:var(--sp-1);border-radius:8px;line-height:0}
.sow-del:hover{color:var(--chase);background:color-mix(in srgb,var(--chase) 12%,transparent)}
.sow-rate{display:grid;grid-template-columns:minmax(0,1fr) 16px 110px 60px;gap:var(--sp-2);align-items:center;padding:var(--pad-row-y) var(--sp-3);border-bottom:1px solid var(--border)}
.sow-rate:last-child{border-bottom:none}
.sow-rate-role{font-size:12px;color:var(--txt)}
.sow-rate-cur{color:var(--muted);text-align:right;font-size:13px}
.sow-rate-in{border:1px solid var(--border2);background:var(--bg);color:var(--txt);font:inherit;font-size:13px;padding:var(--sp-2) var(--sp-2);border-radius:8px;font-variant-numeric:tabular-nums}
.sow-rate-in:focus{outline:none;border-color:var(--amber)}
.sow-rate-unit{font-size:11px;color:var(--muted)}
.sow-side{position:sticky;top:14px;border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-card)}
.sow-side-h{display:flex;align-items:center;gap:var(--sp-2);font-size:13px;color:var(--txt)}
.sow-side-h b{font-weight:700}
.sow-side-sub{font-size:11px;color:var(--muted);line-height:1.5;margin:var(--sp-1) 0 var(--sp-2)}
.btn.block{width:100%;justify-content:center;margin-bottom:var(--sp-3)}
.btn.loading{opacity:.6;pointer-events:none}
.sow-sugg-list{display:flex;flex-direction:column;gap:var(--sp-2);max-height:62vh;overflow:auto}
.sow-sugg{border:1px solid var(--border);border-radius:11px;padding:var(--sp-2) var(--sp-2);background:var(--bg2)}
.sow-sugg.ai{border-color:color-mix(in srgb,var(--amber) 40%,transparent);background:color-mix(in srgb,var(--amber) 7%,transparent)}
.sow-sugg-line{font-size:12px;line-height:1.45;color:var(--txt)}
.sow-sugg-why{display:flex;align-items:center;gap:var(--sp-1);font-size:10px;color:var(--muted);margin-top:var(--sp-1);line-height:1.4}
.sow-sugg-why svg{flex:0 0 auto}
.sow-sugg-act{display:flex;gap:var(--sp-2);margin-top:var(--sp-2)}


/* ---- Drawings register ---- */
.dwg-actionbar{display:flex;gap:var(--sp-2);align-items:center;margin-bottom:var(--sp-3)}
.dwg-actionbar .dwg-supchk{margin-left:auto;display:flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted);cursor:pointer}
.dwg-cat-h{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:var(--sp-4) 0 var(--sp-2);padding-bottom:var(--sp-1);border-bottom:1px solid var(--border)}
.dwg-cat-h:first-child{margin-top:0}
.dwg-row{border:1px solid var(--border);border-radius:11px;background:var(--panel);margin-bottom:var(--sp-2);overflow:hidden}
.dwg-main{display:grid;grid-template-columns:96px minmax(0,1fr) 130px 132px 190px;gap:var(--sp-2);align-items:center;padding:var(--pad-row-y) var(--sp-3)}
@media(max-width:860px){.dwg-main{grid-template-columns:1fr;gap:var(--sp-1)}}
.dwg-no{font-weight:700;font-size:13px;color:var(--txt);font-variant-numeric:tabular-nums}
.dwg-t{font-size:12px;color:var(--txt);line-height:1.35}
.dwg-sub{font-size:11px;color:var(--muted);margin-top:var(--sp-0);line-height:1.4}
.dwg-rev{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.dwg-revpill{font-size:11px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:6px;background:var(--bg2);border:1px solid var(--border2);color:var(--txt);font-variant-numeric:tabular-nums}
.dwg-hist-btn{font-size:10px;color:var(--muted);background:none;border:none;cursor:pointer;text-decoration:underline;padding:0}
.dwg-hist-btn:hover{color:var(--amber)}
.dwg-act{display:flex;gap:var(--sp-1);justify-content:flex-end;flex-wrap:wrap}
.dwg-hist{border-top:1px solid var(--border);background:var(--bg2);padding:var(--sp-1) var(--sp-3)}
.dwg-hrow{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;color:var(--muted);padding:var(--sp-0) 0}
.dwg-hrev{font-weight:600;color:var(--txt);min-width:54px}
.dwg-hsup{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted2);border:1px solid var(--border2);border-radius:4px;padding:var(--sp-0) var(--sp-1)}
.dwg-hcm{flex:1;min-width:0}
.dwg-hdt{font-variant-numeric:tabular-nums}
.dwg-txwrap{margin-top:var(--gap-stack);border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-card)}
.dwg-txhead{display:flex;align-items:center;gap:var(--sp-2);font-size:13px;color:var(--txt);margin-bottom:var(--sp-2)}
.dwg-txlist{display:flex;flex-direction:column;gap:var(--sp-2)}
.dwg-tx{border:1px solid var(--border);border-radius:11px;padding:var(--sp-2) var(--sp-3);background:var(--bg2)}
.dwg-tx-h{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--txt)}
.dwg-tx-dt{margin-left:auto;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.dwg-tx-sub{font-size:11px;color:var(--muted);margin:var(--sp-1) 0 var(--sp-2)}
.dwg-tx-act{display:flex;gap:var(--sp-2)}
/* transmittal modal */
.dwg-modal{position:fixed;inset:0;z-index:9100;background:rgba(0,0,0,.5);display:flex;align-items:flex-start;justify-content:center;padding:5vh var(--sp-4);overflow:auto}
.dwg-modal-card{width:min(620px,100%);background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);overflow:hidden}
.dwg-modal-h{display:flex;align-items:center;justify-content:space-between;padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);font-size:14px}
.dwg-modal-x{background:none;border:none;color:var(--muted);cursor:pointer;line-height:0}
.dwg-modal-body{padding:var(--sp-4) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3);max-height:62vh;overflow:auto}
.dwg-fld{display:flex;flex-direction:column;gap:var(--sp-1)}
.dwg-fld>span{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.dwg-fld select,.dwg-fld textarea,.dwg-rec-email{border:1px solid var(--border2);background:var(--bg);color:var(--txt);font:inherit;font-size:13px;padding:var(--sp-2) var(--sp-2);border-radius:8px}
.dwg-fld select:focus,.dwg-fld textarea:focus,.dwg-rec-email:focus{outline:none;border-color:var(--amber)}
.dwg-rec{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-1)}
.dwg-rec-firm{font-size:12px;color:var(--txt);min-width:120px}
.dwg-rec-email{flex:1}
.dwg-pick{border:1px solid var(--border);border-radius:8px;max-height:160px;overflow:auto;padding:var(--sp-1)}
.dwg-pickrow{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--txt);padding:var(--sp-1) var(--sp-2);border-radius:6px;cursor:pointer}
.dwg-pickrow:hover{background:var(--bg2)}
.dwg-pickrow b{font-variant-numeric:tabular-nums}
.dwg-modal-foot{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border)}
.dwg-modal-note{font-size:11px;color:var(--muted);flex:1;line-height:1.4}
/* ---- drawing set upload + AI review ---- */
.dwg-modal-card.wide{width:min(1080px,100%)}
.dwg-modal-body.tall{max-height:74vh}
.dwg-fld input[type=text],.dwg-fld input[type=date]{border:1px solid var(--border2);background:var(--bg);color:var(--txt);font:inherit;font-size:13px;padding:var(--sp-2) var(--sp-2);border-radius:8px}
.dwg-fld input[type=text]:focus,.dwg-fld input[type=date]:focus{outline:none;border-color:var(--amber)}
.dwg-up-drop{border:2px dashed var(--border2);border-radius:12px;background:var(--bg2);padding:var(--sp-6) var(--sp-4);text-align:center;cursor:pointer;transition:border-color .15s,background .15s}
.dwg-up-drop:hover,.dwg-up-drop.over{border-color:var(--amber);background:var(--amber-dim)}
.dwg-up-drop .t{font-size:14px;font-weight:600;color:var(--txt);margin-bottom:var(--sp-1)}
.dwg-up-drop .s{font-size:11.5px;color:var(--muted);line-height:1.5}
.dwg-up-prog{height:6px;border-radius:4px;background:var(--bg2);border:1px solid var(--border);overflow:hidden}
.dwg-up-prog>i{display:block;height:100%;background:var(--amber);transform-origin:left;transform:scaleX(0);transition:transform .2s}
.dwg-rvw-note{font-size:11.5px;color:var(--muted);line-height:1.5;background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:var(--sp-2) var(--sp-2)}
.dwg-rvw-row{display:grid;grid-template-columns:132px minmax(0,1fr);gap:var(--sp-3);border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--sp-2);margin-bottom:var(--sp-2)}
.dwg-rvw-row.err{border-color:var(--chase)}
.dwg-rvw-thumb{width:132px;height:96px;border:1px solid var(--border2);border-radius:8px;background:var(--bg2) center/contain no-repeat;cursor:zoom-in;display:flex;align-items:center;justify-content:center;color:var(--muted2);font-size:10px;overflow:hidden}
.dwg-rvw-thumb img{max-width:100%;max-height:100%;display:block}
/* RR-4.6: version marker — a rev that has been re-issued at the same code */
.dwg-ver{font-size:10px;font-weight:600;color:var(--muted);letter-spacing:.02em}
/* RR-4.5: sheet thumb + magnified title-block crop, stacked */
.dwg-rvw-thumbs{display:flex;flex-direction:column;gap:var(--sp-1);width:132px}
.dwg-rvw-thumbs .dwg-rvw-thumb.tb{height:72px}
.dwg-rvw-thumbs .dwg-rvw-thumb.tb img{width:100%;height:100%;max-width:none;max-height:none;object-fit:cover}
.dwg-rvw-fields{display:grid;grid-template-columns:130px minmax(0,1fr) 76px 140px 128px;gap:var(--sp-2);align-items:start}
@media(max-width:900px){.dwg-rvw-fields{grid-template-columns:1fr 1fr}}
.dwg-rvw-fields label{display:flex;flex-direction:column;gap:var(--sp-0);font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.dwg-rvw-fields input,.dwg-rvw-fields select{border:1px solid var(--border2);background:var(--bg);color:var(--txt);font:inherit;font-size:12.5px;padding:var(--sp-1) var(--sp-2);border-radius:7px;min-width:0}
.dwg-rvw-fields input:focus,.dwg-rvw-fields select:focus{outline:none;border-color:var(--amber)}
.dwg-rvw-fields input.lowconf{border-color:var(--await);background:color-mix(in srgb,var(--await) 8%,var(--bg))}
.dwg-rvw-fields input.harderr{border-color:var(--chase);background:color-mix(in srgb,var(--chase) 8%,var(--bg))}
.dwg-rvw-meta{grid-column:1/-1;display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;font-size:11px;line-height:1.4}
.dwg-rvw-sup{color:var(--muted)}
.dwg-rvw-sup b{color:var(--txt)}
.dwg-rvw-sup.warn{color:var(--await);font-weight:600}
.dwg-rvw-sup.new{color:var(--awarded)}
.dwg-rvw-errmsg{color:var(--chase);font-weight:600}
.dwg-rvw-ai{font-size:10px;color:var(--muted2);border:1px solid var(--border2);border-radius:4px;padding:var(--sp-0) var(--sp-1);text-transform:uppercase;letter-spacing:.05em}
.dwg-rvw-confirm{display:inline-flex;align-items:center;gap:var(--sp-1);color:var(--await);font-weight:600;cursor:pointer}
/* ---- sheet viewer ---- */
.dwg-viewer{position:fixed;inset:0;z-index:9200;background:rgba(12,10,6,.78);display:flex;flex-direction:column}
.dwg-viewer-h{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-4);background:var(--rail);color:#EDE9DC;border-bottom:1px solid var(--rail-line);flex-wrap:wrap}
.dwg-viewer-h .vt{font-size:13px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.dwg-viewer-h select{background:var(--rail2);color:#EDE9DC;border:1px solid var(--rail-line);border-radius:7px;font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2)}
.dwg-viewer-h .btn{border-color:var(--rail-line);color:#EDE9DC;background:transparent}
.dwg-viewer-body{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center;padding:var(--sp-4);position:relative}
.dwg-viewer-stage{position:relative;box-shadow:var(--shadow-xl);line-height:0;background:#fff}
.dwg-viewer-stage canvas{display:block;max-width:none}
.dwg-viewer-msg{color:#EDE9DC;font-size:13px;padding:var(--sp-7);text-align:center;line-height:1.6}
.dwg-supbanner{position:sticky;top:0;z-index:3;background:var(--chase);color:#fff;font-size:12px;font-weight:700;letter-spacing:.05em;text-align:center;padding:var(--sp-2) var(--sp-3);text-transform:uppercase}
.dwg-wm{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;overflow:hidden}
/* C5 pins — layer is inert unless arming (so it never eats sheet scroll/drag);
   markers themselves are always clickable. Monochrome ink marker, tail at the
   exact anchor point via translate(-50%,-100%). */
.dwg-pinlayer{position:absolute;inset:0;pointer-events:none}
.dwg-pinlayer.arming{pointer-events:auto;cursor:crosshair}
.dwg-pin{position:absolute;transform:translate(-50%,-100%);pointer-events:auto;cursor:pointer;font-size:10px;font-weight:700;line-height:1;background:#141716;color:#fff;border:1px solid #fff;border-radius:999px 999px 999px 2px;padding:var(--sp-1) var(--sp-2);box-shadow:0 2px 8px rgba(0,0,0,.45);white-space:nowrap}
.dwg-pin:hover{background:#3a3d3c}
#dwgVwPin.on{background:var(--amber);color:var(--on-accent)}
.dwg-wm span{transform:rotate(-28deg);font-size:64px;font-weight:800;letter-spacing:.12em;color:rgba(106,105,104,.28);border:6px solid rgba(106,105,104,.28);border-radius:14px;padding:var(--sp-2) var(--sp-6);text-transform:uppercase;white-space:nowrap}
/* ---- drawing detail drawer ---- */
.dwg-detail-sec{border:1px solid var(--border);border-radius:10px;padding:var(--sp-2) var(--sp-3)}
.dwg-detail-sec>b{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:var(--sp-2)}
.dwg-vrow{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) 0;border-top:1px solid var(--border);font-size:12px;flex-wrap:wrap}
.dwg-vrow:first-of-type{border-top:none}
.dwg-vrow .vr{font-weight:700;min-width:52px;font-variant-numeric:tabular-nums}
.dwg-vrow .vd{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}
.dwg-vrow .vc{flex:1;min-width:120px;color:var(--muted)}
.dwg-filechip{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;border:1px solid var(--border2);border-radius:6px;padding:var(--sp-0) var(--sp-2);background:var(--bg2);color:var(--txt);cursor:pointer}
.dwg-filechip:hover{border-color:var(--amber);color:var(--amber)}
.dwg-evrow{display:flex;gap:var(--sp-2);padding:var(--sp-1) 0;font-size:11px;color:var(--muted);border-top:1px solid var(--border)}
.dwg-evrow:first-of-type{border-top:none}
.dwg-evrow .ek{font-weight:700;color:var(--txt);min-width:66px;text-transform:capitalize}
.dwg-evrow .ed{font-variant-numeric:tabular-nums;margin-left:auto;white-space:nowrap}


/* ---- NOD / EOT claim generator ---- */
.claim-card{grid-column:1/-1}
.claim-newbtns{margin-left:auto;display:flex;gap:var(--sp-2)}
.claim-list{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-1)}
.claim-row{display:flex;align-items:center;gap:var(--sp-2);border:1px solid var(--border);border-radius:8px;background:var(--bg2);padding:var(--pad-row-y) var(--sp-3)}
.claim-tag{font-size:10px;font-weight:800;letter-spacing:.04em;padding:var(--sp-0) var(--sp-2);border-radius:6px;flex:0 0 auto}
.claim-tag.nod{background:color-mix(in srgb,var(--await) 18%,transparent);color:var(--await);border:1px solid color-mix(in srgb,var(--await) 45%,transparent)}
.claim-tag.eot{background:color-mix(in srgb,var(--reply) 18%,transparent);color:var(--reply);border:1px solid color-mix(in srgb,var(--reply) 45%,transparent)}
.claim-rb{flex:1;min-width:0}
.claim-rt{font-size:12px;color:var(--txt);line-height:1.35}
.claim-rm{font-size:11px;color:var(--muted);margin-top:var(--sp-0);font-variant-numeric:tabular-nums}
.claim-ra{display:flex;gap:var(--sp-1);flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end}
/* form */
.claim-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-2)}
.claim-grid4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:var(--sp-2)}
@media(max-width:560px){.claim-grid,.claim-grid4{grid-template-columns:1fr}}
.claim-radio{display:flex;flex-direction:column;gap:var(--sp-1)}
.claim-radio label{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--txt);cursor:pointer}
.claim-check{flex-direction:row !important;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--txt)}
.claim-check input{flex:0 0 auto}
.claim-costrow{display:grid;grid-template-columns:1fr 70px 110px 30px;gap:var(--sp-2);margin-bottom:var(--sp-2)}
.claim-costrow input{border:1px solid var(--border2);background:var(--bg);color:var(--txt);font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2);border-radius:8px}
.claim-costrow input:focus{outline:none;border-color:var(--amber)}
.claim-costx{border:none;background:transparent;color:var(--muted2);cursor:pointer;line-height:0;border-radius:6px}
.claim-costx:hover{color:var(--chase);background:color-mix(in srgb,var(--chase) 12%,transparent)}


/* ---- Site Diary calendar ---- */
.sitecal{margin-top:var(--sp-1)}
.sitecal-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-3)}
.sitecal-nav{display:flex;align-items:center;gap:var(--sp-2)}
.sitecal-title{font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--txt);min-width:150px;text-align:center}
.sitecal-legend{display:flex;align-items:center;gap:var(--sp-3);font-size:11px;color:var(--muted)}
.sitecal-legend span{display:flex;align-items:center;gap:var(--sp-1)}
.sitecal-legend i{width:9px;height:9px;border-radius:3px;display:inline-block}
.sitecal-legend i.lg-has{background:color-mix(in srgb,var(--amber) 40%,transparent);border:1px solid var(--amber)}
.sitecal-legend i.lg-delay{background:#727270}
.sitecal-hint{margin-left:var(--sp-1);font-style:italic;opacity:.8}
.sitecal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sp-2)}
.sitecal-wds{margin-bottom:var(--sp-2)}
.sitecal-wd{text-align:center;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding:var(--sp-0) 0}
.sitecal-day{position:relative;min-height:84px;border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--sp-2) var(--sp-2);text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:var(--sp-0);font:inherit;transition:border-color .12s,box-shadow .12s,transform .08s}
.sitecal-day:hover:not(.empty){border-color:var(--amber);box-shadow:var(--shadow-sm)}
.sitecal-day:active:not(.empty){transform:translateY(1px)}
.sitecal-day.empty{background:transparent;border:none;cursor:default}
.scd-top{display:flex;align-items:center;justify-content:space-between}
.scd-n{font-size:12px;font-weight:600;color:var(--txt);font-variant-numeric:tabular-nums}
.scd-wx{flex:0 0 auto;line-height:0}
.sitecal-day.has{background:color-mix(in srgb,var(--amber) 8%,var(--panel));border-color:color-mix(in srgb,var(--amber) 32%,var(--border))}
.sitecal-day.has.delay{background:color-mix(in srgb,#727270 8%,var(--panel));border-color:color-mix(in srgb,#727270 38%,var(--border))}
.sitecal-day.today{outline:2px solid var(--amber);outline-offset:1px}
.sitecal-day.today .scd-n{color:var(--amber)}
.sitecal-day.dim{opacity:.4}
.sitecal-day.match{box-shadow:0 0 0 2px color-mix(in srgb,var(--reply) 55%,transparent)}
.scd-meta{display:flex;align-items:center;gap:var(--sp-1);flex-wrap:wrap}
.scd-lab{font-size:10px;font-weight:700;color:var(--txt);background:var(--bg2);border-radius:5px;padding:var(--sp-0) var(--sp-1);font-variant-numeric:tabular-nums}
.scd-ph{display:inline-flex;align-items:center;gap:var(--sp-0);font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
.scd-delay{width:8px;height:8px;border-radius:50%;background:#727270;display:inline-block}
.scd-work{font-size:10px;line-height:1.35;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.scd-add{position:absolute;bottom:6px;right:7px;color:var(--muted2);opacity:0;line-height:0;transition:opacity .12s}
.sitecal-day:hover .scd-add{opacity:.7}
@media(max-width:680px){.sitecal-day{min-height:62px}.scd-work{display:none}}
/* day overlay extras */
.site-day-card{width:min(620px,100%)}
.site-day-meta{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3);flex-wrap:wrap}
.site-day-meta .site-mini{font-size:12px;color:var(--muted)}
.site-day-meta .site-num{width:58px}
/* ---- A-7' mobile field pass: larger tap targets, single column at narrow
   widths. Markup/handlers are untouched — this only re-lays-out the same
   .site-day-card/.site-grid/.site-thumb elements siteOpenDay() already
   renders (see siteOpenDay/siteDayWire above). ---- */
@media (pointer:coarse){
  .site-day-card .site-wx{padding:var(--sp-2) var(--sp-3)}
  .site-day-card .site-num{padding:var(--sp-2)}
  .site-thumb,.site-addphoto{width:96px;height:96px}
  .site-thumb-x{width:26px;height:26px;font-size:16px}
}
@media (max-width:680px){
  .site-day-meta{flex-direction:column;align-items:stretch;gap:var(--sp-2)}
  .site-day-meta .site-wx{justify-content:center}
  .site-day-meta .site-mini{display:flex;justify-content:space-between}
  .site-day-meta .site-num{width:auto;flex:0 0 72px}
  .site-day-card .dwg-modal-foot{flex-wrap:wrap;row-gap:var(--sp-2)}
  .site-day-card .dwg-modal-foot .btn{flex:1 1 auto;justify-content:center}
}


/* ---- Contacts directory ---- */
.ct-actionbar{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}
.ct-hint{font-size:11px;color:var(--muted);font-style:italic}
.ct-grouph{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:var(--sp-4) 0 var(--sp-2);padding-bottom:var(--sp-1);border-bottom:1px solid var(--border)}
.ct-grouph:first-child{margin-top:0}
.ct-row{display:grid;grid-template-columns:38px minmax(160px,1.1fr) minmax(0,1.4fr) auto;gap:var(--sp-3);align-items:center;border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3);margin-bottom:var(--sp-2)}
@media(max-width:760px){.ct-row{grid-template-columns:38px 1fr;row-gap:var(--sp-2)}.ct-reach,.ct-act{grid-column:2/-1}}
.ct-av{width:38px;height:38px;border-radius:50%;background:color-mix(in srgb,var(--amber) 18%,var(--panel));color:var(--amber);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;text-transform:uppercase}
.ct-org{font-size:13px;font-weight:600;color:var(--txt)}
.ct-abbr{font-size:10px;font-weight:700;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-1);margin-left:var(--sp-1)}
.ct-sub{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
.ct-reach{display:flex;flex-direction:column;gap:var(--sp-0);min-width:0}
.ct-link{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--reply);text-decoration:none;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ct-link:hover{text-decoration:underline}
.ct-missing{font-size:11px;color:var(--muted2);font-style:italic}
.ct-act{display:flex;gap:var(--sp-1);justify-content:flex-end}
/* Directory unified search (one box across people, firms & subcontractors) */
.dir-search{flex:1 1 240px;min-width:200px;max-width:420px;margin-left:auto;display:flex;align-items:flex-end}
.dir-search input{width:100%;font:inherit;font-size:12px;padding:var(--sp-2) var(--sp-3);border:1px solid var(--border2);border-radius:9px;background:var(--panel);color:var(--txt)}
.dir-search input::placeholder{color:var(--muted2)}
.dir-search input:focus{outline:none;border-color:var(--amber);box-shadow:0 0 0 2px color-mix(in srgb,var(--amber) 22%,transparent)}
.dir-reshead{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--muted);margin:var(--sp-0) 0 var(--sp-3)}
.dir-grp{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:var(--sp-4) 0 var(--sp-2)}
.dir-grp:first-of-type{margin-top:var(--sp-1)}
.dir-grp b{font-weight:700;color:var(--amber);background:color-mix(in srgb,var(--amber) 15%,transparent);border-radius:20px;padding:var(--sp-0) var(--sp-2);font-size:10px}
.dir-tag{font-size:10px;font-weight:600;letter-spacing:.01em;text-transform:none;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-1);margin-left:var(--sp-2);vertical-align:middle}
.ct-av.sd{border-radius:9px;background:color-mix(in srgb,var(--reply) 16%,var(--panel));color:var(--reply)}
@media(max-width:760px){.dir-search{flex-basis:100%;max-width:none;margin-left:0;margin-top:var(--sp-2)}}
/* Subcontractor compliance documents (SWMS / Insurances / SDS) */
.sd-docs-wrap{margin-top:var(--sp-2);border-top:1px solid var(--border);padding-top:var(--sp-4)}
.sd-docs-h{display:flex;align-items:center;gap:var(--sp-2);font-size:12px;font-weight:700;color:var(--txt);margin-bottom:var(--sp-2)}
.sd-docs-h svg{color:var(--amber)}
.sd-doccat{border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2)}
.sd-doccat-h{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-bottom:var(--sp-2)}
.sd-doccat-h b{font-size:12px;color:var(--txt)}
.sd-doccat-hint{font-size:10px;color:var(--muted);margin-left:var(--sp-2)}
.sd-docempty{font-size:11px;color:var(--muted2);font-style:italic;padding:var(--sp-0) 0}
.sd-docrow{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;padding:var(--pad-row-y) 0;border-top:1px dashed var(--border)}
.sd-docrow:first-of-type{border-top:0}
.sd-docname{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:12px;color:var(--txt);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 150px}
.sd-docname svg{color:var(--muted);flex:0 0 auto}
.sd-docexp{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:10px;color:var(--muted)}
.sd-docexp input{font:inherit;font-size:11px;padding:var(--sp-0) var(--sp-1);border:1px solid var(--border2);border-radius:7px;background:var(--bg2);color:var(--txt)}
.sd-docsize{font-size:10px;color:var(--muted2);font-variant-numeric:tabular-nums}
.sd-docbadge{font-size:10px;font-weight:700;letter-spacing:.02em;border-radius:20px;padding:var(--sp-0) var(--sp-2);white-space:nowrap;border:1px solid transparent}
.sd-docbadge.ok{color:var(--muted);background:var(--bg2);border-color:var(--border2)}
.sd-docbadge.soon{color:#747372;background:color-mix(in srgb,#adacab 16%,var(--panel));border-color:color-mix(in srgb,#adacab 40%,transparent)}
.sd-docbadge.expired{color:#fff;background:var(--chase);border-color:transparent}
.sd-docbadge.none{color:var(--muted2);background:transparent;border:1px dashed var(--border2)}
[data-theme="dark"] .sd-docbadge.soon{color:#d8d7d5}
/* compliance chip on the subcontractor card + blended search */
.sd-comp{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-2);font-size:11px;color:var(--muted)}
.sd-comp-pill{font-size:10px;font-weight:700;border-radius:20px;padding:var(--sp-0) var(--sp-2);border:1px solid transparent}
.sd-comp-pill.ok{color:var(--muted);background:var(--bg2);border-color:var(--border2)}
.sd-comp-pill.soon{color:#747372;background:color-mix(in srgb,#adacab 16%,var(--panel));border-color:color-mix(in srgb,#adacab 40%,transparent)}
.sd-comp-pill.expired{color:#fff;background:var(--chase)}
.sd-comp-pill.empty{color:var(--muted2);background:transparent;border:1px dashed var(--border2)}
[data-theme="dark"] .sd-comp-pill.soon{color:#d8d7d5}
/* Site sign-in & inductions */
.ob-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--gap-grid);margin-bottom:var(--gap-stack)}
@media(max-width:680px){.ob-stats{grid-template-columns:1fr}}
.ob-stat{display:flex;align-items:center;gap:var(--sp-3);border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:var(--pad-card) var(--pad-card)}
.ob-stat-ic{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--amber) 14%,var(--panel));color:var(--amber);flex:0 0 auto}
.ob-stat-n{font-size:20px;font-weight:700;color:var(--txt);line-height:1;font-variant-numeric:tabular-nums}
.ob-stat-l{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
.ob-daybar{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-3)}
.ob-dl{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:11px;color:var(--muted)}
.ob-dl input{font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2);border:1px solid var(--border2);border-radius:8px;background:var(--panel);color:var(--txt)}
.ob-dnote{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted)}
.ob-allout{margin-left:auto}
.ob-board{display:flex;flex-direction:column;gap:var(--sp-2)}
.ob-row{display:grid;grid-template-columns:38px minmax(140px,1fr) auto auto;gap:var(--sp-3);align-items:center;border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3)}
@media(max-width:680px){.ob-row{grid-template-columns:38px 1fr;row-gap:var(--sp-2)}.ob-row .ob-st,.ob-row .ob-act{grid-column:2/-1;justify-self:start}.ob-row .ob-act{justify-content:flex-start}}
.ob-av{width:38px;height:38px;border-radius:50%;background:color-mix(in srgb,var(--amber) 16%,var(--panel));color:var(--amber);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px}
.ob-name{font-size:13px;font-weight:600;color:var(--txt)}
.ob-sub{font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
.ob-st{font-size:10px;font-weight:700;border-radius:20px;padding:var(--sp-0) var(--sp-2);white-space:nowrap;display:inline-flex;align-items:center;gap:var(--sp-1)}
.ob-st.on{color:var(--reply);background:color-mix(in srgb,var(--reply) 14%,var(--panel));border:1px solid color-mix(in srgb,var(--reply) 38%,transparent)}
.ob-st.done{color:var(--muted);background:var(--bg2);border:1px solid var(--border2);font-variant-numeric:tabular-nums}
.ob-st.off{color:var(--muted2);background:transparent;border:1px dashed var(--border2)}
.ob-act{display:flex;gap:var(--sp-2);align-items:center;justify-content:flex-end}
.ob-arch{margin-top:var(--sp-4);font-size:12px}
.ob-arch>summary{cursor:pointer;color:var(--muted);font-weight:600;padding:var(--sp-1) 0}
.ob-row.arch{opacity:.72;margin-top:var(--sp-2)}
.ob-activel{display:flex!important;flex-direction:row!important;align-items:center;gap:var(--sp-2)}
.ob-activel input{width:auto;margin:0}
.ob-dactions{margin-left:auto;display:flex;gap:var(--sp-2);flex-wrap:wrap}
.ob-stwrap{display:inline-flex;gap:var(--sp-2);align-items:center;justify-content:flex-end;flex-wrap:wrap}
.ob-swms{font-size:10px;font-weight:700;color:var(--reply);background:color-mix(in srgb,var(--reply) 13%,var(--panel));border:1px solid color-mix(in srgb,var(--reply) 34%,transparent);border-radius:20px;padding:var(--sp-0) var(--sp-2);display:inline-flex;align-items:center;gap:var(--sp-0);white-space:nowrap}
.ob-sech{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:var(--sp-4) 0 var(--sp-2)}
.ob-cnt{font-size:10px;font-weight:700;color:var(--amber);background:color-mix(in srgb,var(--amber) 14%,transparent);border-radius:20px;padding:var(--sp-0) var(--sp-2)}
/* Geolocated sign-on (A-4') — inside/outside-fence chip on an on-site row */
.ob-fence{font-size:10px;font-weight:700;border-radius:20px;padding:var(--sp-0) var(--sp-2);display:inline-flex;align-items:center;gap:var(--sp-0);white-space:nowrap}
.ob-fence.in{color:var(--reply);background:color-mix(in srgb,var(--reply) 13%,var(--panel));border:1px solid color-mix(in srgb,var(--reply) 34%,transparent)}
.ob-fence.out{color:var(--chase);background:color-mix(in srgb,var(--chase) 13%,var(--panel));border:1px solid color-mix(in srgb,var(--chase) 34%,transparent)}
.ob-fence.off,.ob-fence.pending{color:var(--muted2);background:transparent;border:1px dashed var(--border2)}
/* SWMS sign-on modal */
.swa-intro{font-size:12px;color:var(--muted);margin:var(--sp-0) 0 var(--sp-3);line-height:1.5}
.swa-docs{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-4)}
.swa-doc{display:flex;align-items:center;gap:var(--sp-2);border:1px solid var(--border);border-radius:10px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3)}
.swa-dn{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:12px;color:var(--txt);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.swa-dn svg{color:var(--muted);flex:0 0 auto}
.swa-ack{display:flex;align-items:flex-start;gap:var(--sp-2);font-size:12.5px;color:var(--txt);background:var(--bg2);border:1px solid var(--border2);border-radius:10px;padding:var(--sp-3) var(--sp-3);margin-bottom:var(--sp-4);cursor:pointer;line-height:1.45}
.swa-ack input{margin-top:var(--sp-0);flex:0 0 auto}
/* Induction gate (A-5') — first-sign-on acknowledgement content block */
.ind-content{font-size:12.5px;color:var(--txt);line-height:1.6;white-space:pre-wrap;background:var(--bg2);border:1px solid var(--border2);border-radius:10px;padding:var(--sp-3) var(--sp-3);margin:0 0 var(--sp-4)}
/* Kiosk mode — full-screen shared-tablet sign-in */
body.kiosk-on{overflow:hidden}
#kioskLayer{position:fixed;inset:0;z-index:11000;background:var(--bg);display:flex;flex-direction:column;padding:var(--sp-5) clamp(16px,4vw,48px);overflow:auto}
.kio-head{display:flex;align-items:center;gap:var(--sp-4);margin-bottom:var(--sp-5)}
.kio-h-t{font-size:22px;font-weight:800;letter-spacing:-.02em;color:var(--txt)}
.kio-h-s{font-size:13px;color:var(--muted);margin-top:var(--sp-0)}
.kio-count{margin-left:auto;text-align:right}
.kio-count-n{font-size:40px;font-weight:800;line-height:1;color:var(--reply);font-variant-numeric:tabular-nums}
.kio-count-l{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-top:var(--sp-0)}
.kio-exit{flex:0 0 auto}
.kio-actions{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-4)}
.kio-big{display:inline-flex;align-items:center;gap:var(--sp-2);font:inherit;font-size:16px;font-weight:700;padding:var(--sp-4) var(--sp-5);border-radius:14px;border:1px solid var(--border2);background:var(--panel);color:var(--txt);cursor:pointer;box-shadow:var(--shadow-md)}
.kio-big.visitor{background:linear-gradient(180deg,var(--amber),var(--amber2));color:var(--on-accent);border-color:transparent}
.kio-big.muster{border-color:color-mix(in srgb,var(--chase) 45%,transparent);color:var(--chase)}
.kio-big:active{transform:scale(.98)}
.kio-vis{font-size:12px;color:var(--muted);margin-bottom:var(--sp-4);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.kio-vischip{font:inherit;font-size:12px;border:1px solid var(--border2);background:var(--panel);color:var(--txt);border-radius:20px;padding:var(--sp-1) var(--sp-3);cursor:pointer;display:inline-flex;align-items:center;gap:var(--sp-1)}
.kio-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:var(--sp-3)}
.kio-tile{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-1);text-align:left;font:inherit;border:1.5px solid var(--border2);background:var(--panel);border-radius:18px;padding:var(--sp-4);cursor:pointer;transition:transform .12s,border-color .15s,box-shadow .15s;min-height:128px;position:relative;box-shadow:var(--shadow-sm)}
.kio-tile:active{transform:scale(.97)}
.kio-tile.on{border-color:color-mix(in srgb,var(--reply) 60%,transparent);background:color-mix(in srgb,var(--reply) 8%,var(--panel));box-shadow:0 0 0 2px color-mix(in srgb,var(--reply) 22%,transparent)}
.kio-av{width:44px;height:44px;border-radius:12px;background:color-mix(in srgb,var(--amber) 16%,var(--panel));color:var(--amber);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:16px;margin-bottom:var(--sp-2)}
.kio-tile.on .kio-av{background:color-mix(in srgb,var(--reply) 20%,var(--panel));color:var(--reply)}
.kio-nm{font-size:16px;font-weight:700;color:var(--txt);line-height:1.2}
.kio-co{font-size:12px;color:var(--muted)}
.kio-state{margin-top:auto;font-size:11px;font-weight:700;color:var(--muted2)}
.kio-tile.on .kio-state{color:var(--reply)}
@media(max-width:560px){.kio-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.kio-count-n{font-size:30px}.kio-h-t{font-size:18px}}
/* read-only contact block reused in Client + Consultants */
.contact-ro{border:1px solid var(--border);border-radius:8px;background:var(--bg2);margin-top:var(--sp-2)}
.contact-ro>summary{cursor:pointer;list-style:none;padding:var(--sp-2) var(--sp-3);display:flex;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--txt)}
.contact-ro>summary::-webkit-details-marker{display:none}
.contact-ro>summary::after{content:"";margin-left:auto;width:7px;height:7px;border-right:2px solid var(--muted2);border-bottom:2px solid var(--muted2);transform:rotate(45deg);transition:transform .15s}
.contact-ro[open]>summary::after{transform:rotate(-135deg)}
.contact-ro-b{padding:var(--sp-0) var(--sp-3) var(--sp-3)}
.cro-row{display:flex;gap:var(--sp-2);font-size:12px;padding:var(--sp-0) 0;border-top:1px solid var(--border)}
.cro-row:first-child{border-top:none}
.cro-k{color:var(--muted);min-width:74px;flex:0 0 auto}
.cro-v{color:var(--txt);word-break:break-word}
.cro-v a{color:var(--reply);text-decoration:none}.cro-v a:hover{text-decoration:underline}
.cro-edit{margin:var(--sp-2) var(--sp-3) 0;display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--reply);background:none;border:none;cursor:pointer;padding:0 0 var(--sp-2)}
.cro-edit:hover{text-decoration:underline}
.cro-srcnote{font-size:10px;color:var(--muted2);font-style:italic;margin:0 var(--sp-3) var(--sp-2)}


/* ---- collapsible meeting-minute items ---- */
.mi-title.mi-toggle{cursor:pointer;display:flex;align-items:flex-start;gap:var(--sp-2);user-select:none}
.mi-title.mi-toggle .mi-caret{flex:0 0 auto;line-height:0;color:var(--muted2);margin-top:var(--sp-0);transition:transform .15s}
.mins-item:not(.mi-collapsed) .mi-title.mi-toggle .mi-caret{transform:rotate(90deg)}
.mins-item.mi-collapsed .mi-detail{display:none}
.mi-title.mi-toggle:hover{color:var(--amber)}

/* ---- card-split accordion (watermelon-ui port) ---- */
.dash-guide{max-width:580px}
.csa{--csa-r:14px}
.csa-list{list-style:none;margin:0;padding:0;width:100%}
.csa-card{position:relative;overflow:hidden;background:var(--bg2);border:1px solid var(--border);border-top-width:0;border-bottom-width:0;border-radius:0;
  transition:border-radius .3s var(--ease-out,cubic-bezier(.16,1,.3,1)),background .2s}
.csa-item.first .csa-card,.csa-item.after .csa-card,.csa-item.open .csa-card{border-top-width:1px}
.csa-item.last .csa-card,.csa-item.before .csa-card,.csa-item.open .csa-card{border-bottom-width:1px}
.csa-item.first .csa-card{border-top-left-radius:var(--csa-r);border-top-right-radius:var(--csa-r)}
.csa-item.last .csa-card{border-bottom-left-radius:var(--csa-r);border-bottom-right-radius:var(--csa-r)}
.csa-item.before .csa-card{border-bottom-left-radius:var(--csa-r);border-bottom-right-radius:var(--csa-r)}
.csa-item.after .csa-card{border-top-left-radius:var(--csa-r);border-top-right-radius:var(--csa-r)}
.csa-item.open .csa-card{border-radius:var(--csa-r);margin-block:var(--sp-2);box-shadow:var(--shadow-sm)}
.csa-head{display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;background:none;border:none;font:inherit;padding:var(--sp-3) var(--sp-4);color:var(--txt);text-align:left}
.csa-head:hover{background:color-mix(in srgb,var(--amber) 6%,transparent)}
.csa-head-l{display:flex;align-items:center;gap:var(--sp-3);min-width:0}
.csa-ic{display:inline-flex;line-height:0;color:var(--amber);flex:0 0 auto}
.csa-title{font-size:13px;font-weight:600;letter-spacing:-.01em}
.csa-chev{display:inline-flex;line-height:0;color:var(--muted2);flex:0 0 auto;transition:transform .3s var(--ease-out,cubic-bezier(.16,1,.3,1))}
.csa-item.open .csa-chev{transform:rotate(180deg)}
.csa-collapse{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .3s var(--ease-out,cubic-bezier(.16,1,.3,1)),opacity .25s ease}
.csa-item.open .csa-collapse{grid-template-rows:1fr;opacity:1}
.csa-collapse-inner{overflow:hidden;min-height:0}
.csa-content{padding:0 var(--sp-4) var(--sp-4);font-size:12px;line-height:1.55;color:var(--muted)}
.csa-content p{margin:0 0 var(--sp-2)}
.csa-go{margin-top:var(--sp-0)}


/* ---- switch-mode (theme toggle) ---- */
.theme-switch-host{display:inline-flex;align-items:center}
.swm-btn{position:relative;width:48px;height:26px;border-radius:999px;border:1px solid var(--border2);background:var(--bg2);cursor:pointer;padding:0;transition:background .3s var(--ease-out,cubic-bezier(.16,1,.3,1)),border-color .3s}
.swm.dark .swm-btn{background:#26262b;border-color:#4c4c50}
.swm-btn:focus-visible{outline:none;box-shadow:var(--ring-focus)}
.swm-knob{position:absolute;top:1px;left:2px;width:22px;height:22px;border-radius:50%;background:var(--panel);border:1px solid var(--border2);box-shadow:var(--shadow-sm);display:flex;align-items:center;justify-content:center;color:#878685;transform:translateX(0);transition:transform .32s var(--ease-out,cubic-bezier(.16,1,.3,1)),background .3s,color .3s,border-color .3s}
.swm.dark .swm-knob{transform:translateX(22px);background:#2a2a2e;border-color:#4c4c50;color:#d6d5d3}
.swm-ic{display:inline-flex;line-height:0}

/* ---- tags (project characteristics) ---- */
.sow-tags-host{margin-bottom:var(--sp-3)}
.tags-sel{display:flex;flex-wrap:wrap;gap:var(--sp-2);min-height:20px;margin-bottom:var(--sp-2)}
.tags-empty{font-size:11px;color:var(--muted2);font-style:italic}
.tags-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;font-weight:500;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);color:var(--txt);cursor:pointer;transition:border-color .15s,color .15s,background .15s;font-family:inherit}
.tags-chip:hover{border-color:var(--amber);color:var(--amber)}
.tags-chip.sel{background:color-mix(in srgb,var(--amber) 16%,transparent);border-color:color-mix(in srgb,var(--amber) 45%,transparent);color:var(--amber);cursor:default}
.tags-pool{display:flex;flex-wrap:wrap;gap:var(--sp-2);padding-top:var(--sp-2);border-top:1px dashed var(--border)}
.tags-x{background:none;border:none;cursor:pointer;color:inherit;line-height:1;padding:0 0 0 var(--sp-0);font-size:15px;opacity:.7}
.tags-x:hover{opacity:1}


/* ---- run-action-button (dashboard Sync) ---- */
.dash-run{display:inline-flex}
.rab-btn{display:inline-flex;align-items:center;gap:var(--sp-2);height:36px;border:1px solid transparent;border-radius:var(--radius-sm);font:inherit;font-weight:600;font-size:13px;cursor:pointer;padding:0 var(--sp-4);white-space:nowrap;transition:background .3s var(--ease-out,cubic-bezier(.16,1,.3,1)),border-color .3s,color .2s}
.rab-btn.idle{background:linear-gradient(180deg,var(--amber),var(--amber2));color:var(--on-accent);box-shadow:var(--shadow-sm)}
.rab-btn.idle:hover{filter:brightness(1.05)}
.rab-btn.running{background:var(--bg2);border:1.5px dashed var(--border2);color:var(--txt);justify-content:space-between;gap:var(--sp-4);min-width:236px;cursor:default}
.rab-step{display:inline-flex;align-items:center;gap:var(--sp-2)}
.rab-ic{display:inline-flex;line-height:0;color:var(--amber)}
.rab-lbl{font-weight:700}
.rab-x{flex:0 0 auto;background:var(--border2);border:none;border-radius:50%;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--panel);line-height:0}
.rab-x:hover{background:var(--muted2)}
.rab-btn.done{background:color-mix(in srgb,var(--quote) 16%,transparent);border-color:color-mix(in srgb,var(--quote) 45%,transparent);color:var(--quote)}

/* ---- command-search (dashboard quick-jump) ---- */
.dash-cmds-wrap{margin:0 0 var(--gap-stack)}
.cmds{position:relative;display:block;max-width:430px}
.cmds-trigger{display:flex;align-items:center;gap:var(--sp-2);width:100%;height:40px;padding:0 var(--sp-4);border:1px solid var(--border);border-radius:11px;background:var(--panel);color:var(--muted);font:inherit;font-size:13px;cursor:pointer;box-shadow:var(--shadow-sm);text-align:left}
.cmds-trigger:hover{border-color:var(--amber);color:var(--txt)}
.cmds-trigger svg{color:var(--muted2)}
.cmds-backdrop{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.28)}
.cmds-pop{position:absolute;top:-4px;left:0;z-index:61;width:min(440px,92vw);background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);overflow:hidden}
.cmds-head{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);color:var(--muted)}
.cmds-input{flex:1;background:none;border:none;outline:none;font:inherit;font-size:14px;color:var(--txt)}
.cmds-esc{font-size:10px;border:1px solid var(--border2);border-radius:4px;padding:var(--sp-0) var(--sp-1);color:var(--muted2)}
.cmds-body{max-height:330px;overflow:auto;padding:var(--sp-2)}
.cmds-sec{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted2);padding:var(--sp-2) var(--sp-2) var(--sp-1)}
.cmds-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--sp-2) var(--sp-2);border:none;background:none;border-radius:8px;font:inherit;font-size:13px;color:var(--txt);cursor:pointer;text-align:left}
.cmds-item.active{background:var(--bg2)}
.cmds-il{display:flex;align-items:center;gap:var(--sp-2);color:var(--muted)}
.cmds-il>svg{color:var(--amber);flex:0 0 auto}
.cmds-item kbd{font-size:10px;border:1px solid var(--border2);border-radius:4px;padding:var(--sp-0) var(--sp-1);color:var(--muted2)}
.cmds-none{padding:var(--sp-5);text-align:center;color:var(--muted);font-size:13px}


/* ---- Scoping segmented toggle ---- */
.scoping-seg{display:inline-flex;background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:var(--sp-0);gap:var(--sp-0)}
.scoping-tab{font:inherit;font-size:12px;font-weight:600;padding:var(--sp-1) var(--sp-3);border:none;background:none;border-radius:8px;color:var(--muted);cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}
.scoping-tab:hover{color:var(--txt)}
.scoping-tab.on{background:var(--panel);color:var(--txt);box-shadow:var(--shadow-sm)}


/* ---- Financials ---- */
.fin-seg{display:inline-flex;background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:var(--sp-0);gap:var(--sp-0);margin-bottom:var(--sp-4)}
.fin-tab{font:inherit;font-size:12px;font-weight:600;padding:var(--sp-2) var(--sp-3);border:none;background:none;border-radius:8px;color:var(--muted);cursor:pointer;transition:background .15s,color .15s}
.fin-tab:hover{color:var(--txt)}
.fin-tab.on{background:var(--panel);color:var(--txt);box-shadow:var(--shadow-sm)}
.fin-actionbar{margin-bottom:var(--sp-3)}
.fin-tablewrap{border:1px solid var(--border);border-radius:11px;overflow:auto;background:var(--panel)}
.fin-table{width:100%;border-collapse:collapse;font-size:12px}
.fin-table th{position:sticky;top:0;background:var(--bg2);color:var(--muted);text-align:left;padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1px solid var(--border);font-size:10px;text-transform:uppercase;letter-spacing:.04em;font-weight:700;white-space:nowrap}
.fin-table th.num,.fin-table td.num{text-align:right;font-variant-numeric:tabular-nums}
.fin-table td{padding:var(--pad-cell-y) var(--pad-cell-x);border-bottom:1px solid var(--border);color:var(--txt);vertical-align:middle}
.fin-table tr:last-child td{border-bottom:none}
.fin-tr b{font-weight:600}
.fin-sub{display:block;font-size:11px;color:var(--muted);margin-top:var(--sp-0)}
.fin-total{font-weight:700}
.fin-rem{font-weight:700;color:var(--await)}
.fin-in,.fin-cin{width:96px;text-align:right;border:1px solid var(--border2);background:var(--bg);color:var(--txt);font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2);border-radius:6px;font-variant-numeric:tabular-nums}
.fin-in:focus,.fin-cin:focus{outline:none;border-color:var(--amber)}
/* certified/paid claims are immutable — the amount reads as a static cell, not a field */
.fin-lockcell{display:inline-flex;align-items:center;gap:var(--sp-1);justify-content:flex-end}
.fin-lockcell .ic{color:var(--muted2);flex:0 0 auto}
.fin-cin.locked{border-color:transparent;background:transparent;color:var(--txt);pointer-events:none}
.fin-in.fin-ret{width:42px}
.fin-pct{display:block;font-size:10px;color:var(--muted);margin-top:var(--sp-0)}
.fin-retv{font-size:10px;color:var(--muted);margin-top:var(--sp-0)}
.fin-empty{padding:var(--sp-4);text-align:center;color:var(--muted);font-style:italic}
.fin-note{font-size:11px;color:var(--muted);margin-top:var(--sp-2);line-height:1.5}
.fin-st{font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2)}
.fin-st.lodged{color:var(--reply);background:color-mix(in srgb,var(--reply) 14%,transparent);border-color:color-mix(in srgb,var(--reply) 40%,transparent)}
.fin-st.certified{color:var(--awarded);background:color-mix(in srgb,var(--awarded) 14%,transparent);border-color:color-mix(in srgb,var(--awarded) 40%,transparent)}
.fin-st.paid{color:var(--quote);background:color-mix(in srgb,var(--quote) 16%,transparent);border-color:color-mix(in srgb,var(--quote) 45%,transparent)}
.fin-act{white-space:nowrap;text-align:right}
/* ---- Phase-1 finance: cost control / commitments / change orders ---- */
.fin-actionbar{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-3)}
/* RR-4 add-document form — replaces a five-prompt() chain. All spacing on the
   8pt scale via --sp-*; no raw px. */
.docs-form{border:1px solid var(--border);border-radius:var(--radius-sm,9px);background:var(--panel2);padding:var(--sp-4);margin-bottom:var(--sp-4)}
.docs-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--sp-3)}
.docs-f{display:flex;flex-direction:column;gap:var(--sp-1)}
.docs-f>span{font-size:12px;color:var(--muted);font-weight:600}
.docs-f input,.docs-f select{width:100%}
.docs-f-wide{grid-column:1/-1}
.docs-form-act{display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-4);flex-wrap:wrap}
.fin-actbtn{display:inline-flex}
.fin-hint{font-size:11px;color:var(--muted)}
.fin-code{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.03em;color:var(--amber);background:color-mix(in srgb,var(--amber) 12%,transparent);border:1px solid color-mix(in srgb,var(--amber) 34%,transparent);padding:var(--sp-0) var(--sp-1);border-radius:5px;margin-left:var(--sp-2);vertical-align:middle}
.fin-pos{color:var(--quote)}
.fin-neg{color:#727270}
.fin-bar{height:4px;border-radius:3px;background:color-mix(in srgb, var(--viz-1) 12%, var(--panel));margin-top:var(--sp-1);overflow:hidden}
.fin-barfill{display:block;height:100%;border-radius:3px;background:var(--viz-1);transition:width .35s var(--ease-out,ease)}
.fin-barfill.over{background:#727270}
.fin-empty-block{border:1px dashed var(--border2);border-radius:11px;background:var(--panel)}
/* status filter chips */
.fin-filter{display:inline-flex;flex-wrap:nowrap;max-width:100%;overflow-x:auto;margin-left:auto;border:1px solid var(--border2);border-radius:var(--r);background:var(--panel)}
.fin-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font:inherit;font-size:11px;font-weight:600;text-transform:capitalize;color:var(--muted);background:transparent;border:0;border-radius:0;padding:var(--sp-2) var(--sp-3);cursor:pointer;white-space:nowrap;transition:color .15s,background .15s}
.fin-chip+.fin-chip{border-left:1px solid var(--border2)}
.fin-chip:hover{color:var(--txt);background:color-mix(in srgb,var(--amber) 8%,transparent)}
.fin-chip.on{color:var(--txt);background:color-mix(in srgb,var(--amber) 14%,transparent)}
.fin-chip .n{font-variant-numeric:tabular-nums;font-weight:800;color:var(--txt)}
.fin-chip.on .n{color:var(--amber)}
/* commitment status dropdown */
.fin-pill{font:inherit;font-size:10px;font-weight:700;text-transform:capitalize;padding:var(--sp-0) var(--sp-5) var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg) right 6px center/12px no-repeat;color:var(--txt);cursor:pointer;-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='3'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E")}
.fin-pill:focus{outline:none;border-color:var(--amber)}
.fin-pill.st-draft{color:var(--muted)}
.fin-pill.st-issued{color:var(--reply);border-color:color-mix(in srgb,var(--reply) 40%,transparent)}
.fin-pill.st-executed{color:var(--awarded);border-color:color-mix(in srgb,var(--awarded) 45%,transparent)}
.fin-pill.st-complete{color:var(--quote);border-color:color-mix(in srgb,var(--quote) 45%,transparent)}
.fin-pill.st-cancelled{color:#727270;border-color:color-mix(in srgb,#727270 40%,transparent);text-decoration:line-through}
/* change-order link in the variations cell */
.fin-colink{font:inherit;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--txt);background:none;border:none;cursor:pointer;padding:var(--sp-0) var(--sp-1);border-radius:6px;transition:background .15s}
.fin-colink:hover{background:var(--bg2)}
.fin-colink.on{background:color-mix(in srgb,var(--amber) 14%,transparent)}
.fin-addco{display:inline-flex;align-items:center;gap:var(--sp-0);color:var(--muted);font-weight:600}
.fin-colink:hover .fin-addco{color:var(--amber)}
  .fin-kindseg{display:inline-flex;gap:var(--sp-1);background:var(--bg2);border:1px solid var(--border2);border-radius:9px;padding:var(--sp-0);margin:var(--sp-0) 0 var(--sp-4)}
  .fin-kind{appearance:none;border:0;background:none;color:var(--muted);font:inherit;font-weight:600;font-size:12px;padding:var(--sp-2) var(--sp-3);border-radius:7px;cursor:pointer;transition:background .15s,color .15s}
  .fin-kind.on{background:var(--panel);color:var(--txt);box-shadow:var(--shadow-sm)}
  .fin-hclink{margin-left:auto;display:inline-flex;align-items:center;gap:var(--sp-1);background:none;border:0;color:var(--muted);font:inherit;font-weight:600;font-size:12px;cursor:pointer;white-space:nowrap}
  .fin-hclink:hover{color:var(--amber)}
.fin-crow.open>td{border-bottom:none}
/* change-order editor sub-row */
.fin-co-row>td{background:var(--bg2);padding:0 var(--pad-cell-x) var(--sp-3)!important}
.fin-co{border:1px solid var(--border);border-top:none;border-radius:0 0 10px 10px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3)}
.fin-co-h{display:flex;align-items:center;gap:var(--sp-2);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:var(--sp-2)}
.fin-co-h svg{color:var(--amber)}
.fin-co-sub{text-transform:none;letter-spacing:0;font-weight:500;color:var(--muted2,var(--muted));font-size:10px}
.fin-co-item{display:grid;grid-template-columns:72px 1fr auto auto auto;align-items:center;gap:var(--sp-2);padding:var(--sp-2) 0;border-top:1px solid var(--border)}
.fin-co-no{font-size:11px;font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums}
.fin-co-ti{font-size:12px;color:var(--txt)}
.fin-co-amt{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.fin-co-app{font:inherit;font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);cursor:pointer;border:1px solid var(--border2);background:var(--bg);color:var(--muted);transition:all .15s}
.fin-co-app:hover{color:var(--txt);border-color:var(--awarded)}
.fin-co-app.on{color:var(--awarded);background:color-mix(in srgb,var(--awarded) 14%,transparent);border-color:color-mix(in srgb,var(--awarded) 45%,transparent)}
.fin-co-x{background:none;border:none;color:var(--muted);cursor:pointer;padding:var(--sp-0);border-radius:6px;display:inline-flex;transition:color .15s,background .15s}
.fin-co-x:hover{color:#727270;background:color-mix(in srgb,#727270 12%,transparent)}
.fin-co-empty{font-size:12px;color:var(--muted);font-style:italic;padding:var(--sp-1) 0}
.fin-co-add{display:flex;gap:var(--sp-2);align-items:center;margin-top:var(--sp-2);padding-top:var(--sp-2);border-top:1px solid var(--border)}
.fin-co-t{flex:1;min-width:0;font:inherit;font-size:12px;padding:var(--sp-2) var(--sp-2);border:1px solid var(--border2);border-radius:8px;background:var(--bg);color:var(--txt)}
.fin-co-a{width:130px;font:inherit;font-size:12px;text-align:right;font-variant-numeric:tabular-nums;padding:var(--sp-2) var(--sp-2);border:1px solid var(--border2);border-radius:8px;background:var(--bg);color:var(--txt)}
.fin-co-t:focus,.fin-co-a:focus{outline:none;border-color:var(--amber)}
.fin-chip:focus-visible,.fin-colink:focus-visible,.fin-co-app:focus-visible,.fin-co-x:focus-visible,.fin-pill:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
/* deep-link chip (Procurement -> commitment) + arrival highlight */
.fin-jump{display:inline-flex;align-items:center;gap:var(--sp-1);font-family:var(--body);font-size:11px;font-weight:600;border:1px solid var(--border2);background:var(--panel2);color:var(--muted);padding:var(--sp-0) var(--sp-2);border-radius:6px;white-space:nowrap;cursor:pointer;transition:color .15s,border-color .15s,background .15s}
.fin-jump:hover{color:var(--amber);border-color:color-mix(in srgb,var(--amber) 45%,transparent);background:color-mix(in srgb,var(--amber) 10%,transparent)}
.fin-jump:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
@keyframes finFlash{0%{background:color-mix(in srgb,var(--amber) 30%,transparent)}100%{background:transparent}}
.fin-crow.fin-flash>td{animation:finFlash 1.6s var(--ease-out,ease)}
@media (prefers-reduced-motion:reduce){.fin-crow.fin-flash>td{animation:none;background:color-mix(in srgb,var(--amber) 18%,transparent)}}
.fin-invsel{font:inherit;font-size:12px;padding:var(--sp-2) var(--sp-2);border:1px solid var(--border2);border-radius:8px;background:var(--bg);color:var(--txt);max-width:240px}
.fin-rdue{font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2);border:1px solid var(--border2);border-radius:6px;background:var(--bg);color:var(--txt)}
.fin-rdue:focus,.fin-invsel:focus{outline:none;border-color:var(--amber)}
/* B7 claim clock — monochrome warn vocabulary (grey steps + weight + glyph, no new hues) */
.fin-cdue{font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2);border:1px solid var(--border2);border-radius:6px;background:var(--bg);color:var(--txt);max-width:130px}
.fin-cdue:focus{outline:none;border-color:var(--amber)}
.fin-due-chip{display:inline-block;font-size:10px;color:#727270;margin-left:var(--sp-1);white-space:nowrap}
.fin-due-chip.soon{color:var(--await);font-weight:700}
.fin-due-chip.over{color:var(--chase);font-weight:700}
.fin-due-chip.over::after{content:" ⚠"}
/* B6 portfolio rollup chips (jobs cards) — non-interactive spans inside the card button */


/* ---- Quality (Inspections/ITP + Defects) ---- */
.qa-xref{font-size:11px;color:var(--muted);font-style:italic;margin-left:var(--sp-2)}
.qa-mic.recording{color:#727270;border-color:#727270}
.site-scan-row{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-1)}
.qa-list{display:flex;flex-direction:column;gap:var(--sp-2)}
.qa-card{border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3)}
.qa-head{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.qa-ref{font-size:11px;font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums}
.qa-ttl{font-size:13px;font-weight:600;color:var(--txt);flex:1;min-width:120px}
.qa-typ{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-1)}
/* cycle button: the label IS the state word — monochrome (the emit no longer
   plumbs an inline --c hue), squared ledger grammar */
.qa-status{font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);color:var(--muted-strong,var(--muted));background:var(--bg2);cursor:pointer;font-family:inherit;flex:0 0 auto}
.qa-meta{font-size:11px;color:var(--muted);margin:var(--sp-2) 0}
.qa-checks{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center;margin-top:var(--sp-1)}
.qa-chk{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:12px;color:var(--txt);cursor:pointer}
.qa-chkcount{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;margin-left:auto}
.qa-notes{font-size:11px;color:var(--muted);margin-top:var(--sp-2);padding-top:var(--sp-2);border-top:1px solid var(--border);line-height:1.5}
.qa-defrow{display:flex;align-items:flex-start;gap:var(--sp-3);border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3)}
.qa-defrow.done{opacity:.62}
.qa-defb{flex:1;min-width:0}
.qa-deft{font-size:13px;color:var(--txt)}
.qa-thumbs{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-2)}
.qa-th{width:52px;height:52px;object-fit:cover;border-radius:8px;border:1px solid var(--border2);cursor:pointer}
.photo-broken{background:var(--border2);opacity:.5}
.qa-defact{display:flex;gap:var(--sp-1);flex:0 0 auto}

/* ---- A-6' camera-first "Log defect" + offline outbox ---- */
.qa-field-photo{margin-bottom:var(--sp-3)}
.qa-field-camera{display:flex;align-items:center;gap:var(--sp-3);width:100%;border:1.5px dashed var(--border2);border-radius:12px;background:var(--bg2);padding:var(--sp-4);cursor:pointer;font:inherit;color:var(--txt);text-align:left;transition:border-color .15s,background .15s}
.qa-field-camera:hover{border-color:var(--amber);background:var(--amber-dim)}
.qa-field-camera .qfc-prev{flex:0 0 auto;width:52px;height:52px;border-radius:10px;background:var(--panel);display:flex;align-items:center;justify-content:center;color:var(--muted);overflow:hidden}
.qa-field-camera .qfc-prev img{width:100%;height:100%;object-fit:cover;display:block}
.qa-field-camera .qfc-prev .ic{color:inherit}
.qa-field-camera .qfc-label{font-size:13px;font-weight:700}
.qa-field-offline-note{display:flex;align-items:center;gap:var(--sp-2);font-size:11.5px;color:var(--await);background:color-mix(in srgb,var(--await) 12%,transparent);border:1px solid color-mix(in srgb,var(--await) 38%,transparent);border-radius:8px;padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);line-height:1.4}
.qa-field-offline-note .ic{flex:0 0 auto;color:var(--await)}
.field-outbox-chip{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;font-weight:700;color:var(--muted-strong,var(--muted));background:var(--bg2);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:var(--sp-1) var(--sp-2)}
.field-outbox-pill{position:fixed;bottom:16px;left:16px;z-index:1200;display:inline-flex;align-items:center;gap:var(--sp-2);font:inherit;font-size:12px;font-weight:700;color:var(--txt);background:var(--panel);border:1px solid var(--await);border-radius:20px;padding:var(--sp-2) var(--sp-3);box-shadow:var(--shadow-lg);cursor:pointer}
.field-outbox-pill[hidden]{display:none}
/* squared ink-block count — --txt/--bg flip per theme, so the numeral never
   lands dark-on-dark the way the old #1a1206-on-await tint could */
.field-outbox-pill .fop-n{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--txt);color:var(--bg);font-size:10px;font-weight:800;font-variant-numeric:tabular-nums}
@media (pointer:coarse){
  .qa-field-camera{padding:var(--sp-5) var(--sp-4)}
}


/* ---- Safety / HSE ---- */
.saf-st{font:inherit;font-size:11px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);color:var(--muted);cursor:pointer;text-transform:capitalize}
.saf-st:hover{border-color:var(--amber);color:var(--txt)}
/* incident TYPE is a category, not a severity — one neutral tone, the word
   alone carries it: no per-type tint and no ▲/△/✓ glyphs here */
.saf-typ{font-size:10px;font-weight:700;text-transform:capitalize;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);color:var(--muted)}
.fin-table td.saf-ok{color:var(--txt)}
.fin-table td.saf-soon{color:var(--await);font-weight:700}
.fin-table td.saf-exp{color:#727270;font-weight:700}
.fin-table td.saf-soon::after{content:" ⚠";font-size:10px}
.fin-table td.saf-exp::after{content:" expired";font-size:10px;font-weight:600}
.saf-hr{color:#727270;font-weight:700;margin-right:4px}
.saf-cyc{border:none;background:none;padding:0;cursor:pointer;font:inherit}
.saf-cyc[disabled]{cursor:not-allowed;opacity:.6}


/* ---- Correspondence ---- */
.corr-dir{font-size:10px;font-weight:800;letter-spacing:.05em;padding:var(--sp-0) var(--sp-1);border-radius:5px;border:1px solid var(--border2)}
.corr-dir.in{color:var(--reply);background:color-mix(in srgb,var(--reply) 12%,transparent);border-color:color-mix(in srgb,var(--reply) 40%,transparent)}
.corr-dir.out{color:var(--awarded);background:color-mix(in srgb,var(--awarded) 12%,transparent);border-color:color-mix(in srgb,var(--awarded) 40%,transparent)}
.corr-ref{font-variant-numeric:tabular-nums;font-weight:600;color:var(--muted);white-space:nowrap}
.corr-st{font-size:10px;font-weight:700;text-transform:capitalize;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);color:var(--muted)}
.corr-st.open{color:var(--await);background:color-mix(in srgb,var(--await) 14%,transparent);border-color:color-mix(in srgb,var(--await) 40%,transparent)}
.corr-st.actioned,.corr-st.closed,.corr-st.issued,.corr-st.sent{color:var(--awarded);background:color-mix(in srgb,var(--awarded) 14%,transparent);border-color:color-mix(in srgb,var(--awarded) 40%,transparent)}
/* C2: confirm-before-send modal for real outbound email */
.mail-modal{max-width:600px}
.mail-recips{display:grid;gap:var(--sp-1);margin:var(--sp-3) 0;font-size:12px}
.mail-r{display:flex;gap:var(--sp-2);align-items:baseline}
.mail-r b{flex:0 0 44px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.mail-r span{min-width:0;overflow-wrap:anywhere}
.mail-body{white-space:pre-wrap;overflow-wrap:anywhere;max-height:38vh;overflow:auto;font-size:12px;line-height:1.6;border:1px solid var(--border2);border-radius:8px;padding:var(--sp-3);margin:0}
.mail-actions{display:flex;gap:var(--sp-2);margin-top:var(--sp-4)}
.mail-note{margin-top:var(--sp-2);font-size:11px;line-height:1.5;color:var(--muted)}
.corr-mirror{background:color-mix(in srgb,var(--amber) 4%,transparent)}
/* RR-10.2: superseded / withdrawn letters stay on the register, visibly dead */
.corr-dead td{opacity:.55}
.corr-dead td b{text-decoration:line-through;text-decoration-thickness:1px}


/* ---- Tasks hub ---- */
.tk-list{display:flex;flex-direction:column;gap:var(--sp-2)}
.tk-row{display:flex;align-items:flex-start;gap:var(--sp-3);border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-row-y) var(--sp-3)}
.tk-row.done{opacity:.55}
.tk-row.done .tk-t{text-decoration:line-through}
.tk-check{flex:0 0 auto;width:20px;height:20px;border-radius:6px;border:1.5px solid var(--border2);background:var(--bg);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--awarded);margin-top:var(--sp-0)}
.tk-check.on{background:color-mix(in srgb,var(--awarded) 16%,transparent);border-color:var(--awarded)}
.tk-srcdot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;margin-top:var(--sp-1)}
.tk-main{flex:1;min-width:0}
.tk-t{font-size:13px;color:var(--txt);line-height:1.4}
.tk-meta{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center;margin-top:var(--sp-1)}
.tk-src{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--c);background:color-mix(in srgb,var(--c) 13%,transparent);border:1px solid color-mix(in srgb,var(--c) 38%,transparent);border-radius:5px;padding:var(--sp-0) var(--sp-1)}
.tk-court{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted)}
.tk-due{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.tk-due.over{color:#727270;font-weight:700}
.tk-act{display:flex;gap:var(--sp-1);flex:0 0 auto;align-items:center}


/* ---- Documents register ---- */
.fin-table td.docs-ic{width:34px;text-align:center;color:var(--amber)}


/* ---- Reports hub ---- */
.rep-sec-h{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin:var(--sp-1) 0 var(--sp-2)}
.rep-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--gap-grid);margin-bottom:var(--gap-stack)}
.rep-card{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-1);text-align:left;border:1px solid var(--border);border-radius:11px;background:var(--panel);padding:var(--pad-card);cursor:pointer;font:inherit;transition:border-color .15s,box-shadow .15s}
.rep-card:hover{border-color:var(--amber);box-shadow:var(--shadow-sm)}
.rep-ic{color:var(--amber);line-height:0;margin-bottom:var(--sp-1)}
.rep-t{font-size:14px;font-weight:700;color:var(--txt)}
.rep-d{font-size:11px;color:var(--muted);line-height:1.45}
.rep-go{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;font-weight:600;color:var(--reply);margin-top:var(--sp-2)}
.rep-list{display:flex;flex-direction:column;gap:var(--sp-2);max-width:560px}
.rep-li{display:flex;justify-content:space-between;gap:var(--sp-3);border:1px solid var(--border);border-radius:8px;background:var(--bg2);padding:var(--pad-row-y) var(--sp-3)}
.rep-li-t{font-size:12px;color:var(--txt);font-weight:600}
.rep-li-w{font-size:11px;color:var(--muted)}


/* ===== §9 front-end upgrade: data monospace + focus / motion polish ===== */
.prog-stat .n,.bp-value,.scard .n,
.fin-table td.num,.fin-in,.fin-cin,
.corr-ref,.dwg-no,.qa-ref,.cv-no,.ct-abbr,
.cmds-item kbd,.cmds-esc,.scd-lab{font-family:var(--mono);font-feature-settings:"tnum" 1}
.prog-stat .n,.bp-value,.scard .n{letter-spacing:.2px}
.fin-table td.num,.fin-in,.fin-cin{letter-spacing:-.2px}
/* focus-visible ring for the newer custom controls */
.fin-tab:focus-visible,.scoping-tab:focus-visible,.qa-status:focus-visible,.saf-st:focus-visible,
.tk-check:focus-visible,.cmds-trigger:focus-visible,.csa-head:focus-visible,.swm-btn:focus-visible,
.tags-chip:focus-visible,.rab-btn:focus-visible,.rep-card:focus-visible,.ct-link:focus-visible,
.sitecal-day:focus-visible,.mi-toggle:focus-visible{outline:none;box-shadow:var(--ring-focus)}
@media (prefers-reduced-motion: reduce){
  .csa-card,.csa-collapse,.csa-chev,.rab-btn,.swm-knob,.fin-tab,.scoping-tab,.sitecal-day,.contact-ro>summary::after{transition:none!important}
}

/* ===== §5 dashboard masthead band + shared register frame ===== */
.dash-masthead{padding-bottom:var(--sp-1);margin-bottom:var(--gap-stack);border-bottom:1px solid var(--border)}
.dash-masthead .dash-cmds-wrap{margin:var(--sp-4) 0 var(--sp-5)}
.dash-masthead .dash-sec-h:first-of-type{margin-top:var(--sp-1)}
/* shared register frame alias — register tables read identically everywhere */
.reg-wrap{border:1px solid var(--border);border-radius:var(--radius);overflow:auto;background:var(--panel)}
.reg-table{width:100%;border-collapse:collapse;font-size:12px}

/* ===== harmonise older registers (RFI/Shop, Client variations, Quote Leveling) with the shared register frame ===== */
table.subs thead th{position:sticky;top:0;z-index:2;background:var(--bg2);color:var(--muted);font-weight:700;box-shadow:inset 0 -1px 0 var(--border)}
.cv-table th,.lv-table th{background:var(--bg2);color:var(--muted);font-weight:700}
.lv-tablewrap{border:1px solid var(--border);border-radius:var(--radius);overflow:auto;background:var(--panel);max-height:72vh}
.cv-val .cell-input,.cv-num,.cv-date,.lv-table td.num,.cv-no{font-family:var(--mono);font-feature-settings:"tnum" 1}

/* ---- Financials deepening: cost code + charts ---- */
.fin-code{font-family:var(--mono);font-size:10px;font-weight:600;color:var(--muted);background:var(--bg2);border:1px solid var(--border2);border-radius:5px;padding:var(--sp-0) var(--sp-1);margin-left:var(--sp-0);vertical-align:middle}
.fin-chart{margin-top:var(--sp-4);max-width:560px}
.fin-rollup{margin-top:var(--sp-4);max-width:560px;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:var(--sp-3) var(--sp-4)}
.fin-rollup-h{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:var(--sp-2)}
.fin-rollrow{display:grid;grid-template-columns:120px 1fr 150px;gap:var(--sp-2);align-items:center;padding:var(--sp-1) 0}
.fin-rollcode{font-family:var(--mono);font-size:11px;color:var(--txt)}
.fin-rollbar{height:7px;border-radius:4px;background:var(--bg2);overflow:hidden}
.fin-rollfill{display:block;height:100%;background:var(--reply);border-radius:4px}
.fin-rollval{text-align:right;font-family:var(--mono);font-size:11px;color:var(--muted)}

/* ---- Specifications (Documents tab mode) ---- */
.spec-list{display:flex;flex-direction:column;gap:var(--sp-2)}
.spec-sec{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);overflow:hidden}
.spec-sec>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--bg2)}
.spec-sec>summary::-webkit-details-marker{display:none}
.spec-sec>summary::before{content:"";width:7px;height:7px;border-right:2px solid var(--muted2);border-bottom:2px solid var(--muted2);transform:rotate(-45deg);transition:transform .15s;flex:0 0 auto;margin-left:var(--sp-0)}
.spec-sec[open]>summary::before{transform:rotate(45deg)}
.spec-code{font-family:var(--mono);font-size:12px;font-weight:700;color:var(--txt);white-space:nowrap}
.spec-title{font-size:13px;font-weight:600;color:var(--txt);flex:1;min-width:0}
.spec-prog{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.spec-prog.full{color:var(--awarded);font-weight:600}
.spec-secdel{margin-left:var(--sp-1)}
.spec-arts{padding:var(--sp-2) var(--sp-4) var(--sp-4)}
.spec-art{border-top:1px solid var(--border);padding:var(--pad-row-y) 0}
.spec-art:first-child{border-top:none}
.spec-art-h{display:flex;align-items:center;gap:var(--sp-2)}
.spec-art-no{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--muted);min-width:30px}
.spec-art-t{font-size:12px;font-weight:600;color:var(--txt);flex:1;min-width:0}
/* cycle button: the label IS the state word — monochrome (the emit no longer
   plumbs an inline --c hue), squared ledger grammar */
.spec-status{font:inherit;font-size:10px;font-weight:700;padding:var(--sp-0) var(--sp-2);border-radius:var(--radius-sm);border:1px solid var(--border2);background:var(--bg2);color:var(--muted-strong,var(--muted));cursor:pointer;white-space:nowrap}
.spec-del{flex:0 0 auto;background:none;border:none;color:var(--muted2);cursor:pointer;line-height:0;padding:var(--sp-0);border-radius:6px}
.spec-del:hover{color:var(--chase);background:color-mix(in srgb,var(--chase) 12%,transparent)}
.spec-art-text{font-size:12px;color:var(--muted);line-height:1.5;margin:var(--sp-1) 0 var(--sp-2);padding-left:var(--sp-7)}
.spec-signoff{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;margin-left:var(--sp-7);padding:var(--sp-2) var(--sp-2);background:var(--bg2);border:1px solid var(--border);border-radius:8px}
.spec-so-meta{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:11px;color:var(--muted);white-space:nowrap}
.spec-so-meta b{color:var(--txt);font-weight:600}
.spec-so-meta svg{color:var(--awarded)}
.spec-so-cmt{flex:1;min-width:120px;background:var(--panel);border:1px solid var(--border2);color:var(--txt);font:inherit;font-size:12px;padding:var(--sp-1) var(--sp-2);border-radius:8px}
.spec-so-cmt:focus{outline:none;border-color:var(--amber)}
.spec-addart{margin-top:var(--sp-2)}
@media(max-width:680px){.spec-art-text,.spec-signoff{margin-left:0}}


/* ---- sub-tab group bar ---- */
.subtab-bar{display:inline-flex;background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:var(--sp-0);gap:var(--sp-0);margin-bottom:var(--sp-4)}
.subtab{font:inherit;font-size:12px;font-weight:600;padding:var(--sp-2) var(--sp-4);border:none;background:none;border-radius:8px;color:var(--muted);cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}
.subtab:hover{color:var(--txt)}
.subtab.on{background:var(--panel);color:var(--txt);box-shadow:var(--shadow-sm)}
.subtab:focus-visible{outline:none;box-shadow:var(--ring-focus)}

/* ===== declutter: exceptions-first dashboard + sub-tab-in-controls ===== */
.dash-cards.exceptions-only .dash-card.is-ok{display:none}
.dash-showall{margin-left:var(--sp-2);font:inherit;font-size:11px;font-weight:600;color:var(--reply);background:none;border:none;cursor:pointer;text-transform:none;letter-spacing:0}
.dash-showall:hover{text-decoration:underline}
.dash-showall.calm{color:var(--muted);cursor:default;text-decoration:none}
.controls .subtab-bar{margin-bottom:0;align-self:flex-end}

/* ===== compact density mode ===== */
[data-density="compact"] #densityBtn.on{color:var(--amber)}

/* ===== perf: skip offscreen rendering on long lists (content-visibility) ===== */
.mins-item,.tk-row,.dwg-row,.ct-row,.spec-sec,.qa-card,.qa-defrow{content-visibility:auto}
.mins-item{contain-intrinsic-size:auto 60px}
.tk-row{contain-intrinsic-size:auto 64px}
.dwg-row{contain-intrinsic-size:auto 58px}
.ct-row{contain-intrinsic-size:auto 64px}
.spec-sec{contain-intrinsic-size:auto 120px}
.qa-card,.qa-defrow{contain-intrinsic-size:auto 90px}
.trade-card{content-visibility:auto;contain-intrinsic-size:auto 128px}

/* ═══════════════════════════════════════════════════════════════════════════
   GALVANISED EDITION — premium polish layer (appended last so it wins on cascade)
   1) Stamp data in mono  2) Masthead as one machined unit  3) Lock the scales
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 1. STAMP: reference codes, money, timestamps & KPI values in --mono ───── */
.budget-panel .bp-value, .let-panel .bp-value, .let-readout .lr-v,
.scard .n, .shop-chip .n, .prog-stat .n,
.dash-big, .bw-v, .dsb-v, .kpi-v, .bb-v, .client-kpi .ck-v, .ret-big,
.cl-count, .cv-no, .cv-val, .cv-date, .cl-li-m,
.lv-kpi b, .lv-qin, .lv-vb, .lv-vl, .cons-it-d,
.site-num, .sow-doc-meta, .sow-no, .sow-rate-in,
.rfi-meta, .rfi-due, .shop-rev, .shop-source .ss-date,
.dash-li .mtime, table.progm td.pd, table.progm td.pdv, .prog-dv, .mi-due,
.dwg-no, .dwg-revpill, .dwg-tx-dt, .log-when,
.fin-table td.num, .fin-table th.num, .fin-in, .fin-cin, .fin-co-a,
.corr-ref, .fin-tr b, .fin-co-no, .fin-co-amt, .qa-ref, .qa-deft b{
  font-family:var(--mono); font-variant-numeric:tabular-nums; font-feature-settings:"tnum" 1, "ss01" 1;
}
/* tighten heavy display KPIs once they're mono (mono runs wide at 800) */
.dash-big, .bw-v, .ret-big, .client-kpi .ck-v, .kpi-v{ letter-spacing:-.02em; }
/* reference codes read as machined part numbers: a hair more tracking, full weight */
.cv-no, .dwg-no, .sow-no, .dwg-revpill{ letter-spacing:.01em; }

/* ── 2. LOCK THE SCALES: normalise prominent ad-hoc radii to the token scale ── */
.budget-panel, .let-panel, .scard, .fin-tablewrap{ border-radius:var(--radius-sm); }
.trade-card{ border-radius:var(--radius); }

/* ── 3. MASTHEAD: one machined steel unit + the gunmetal accent-line ───────── */
/* keep the base rule's position:sticky — a `relative` here was killing masthead
   persistence; sticky also anchors the ::after accent line just as well. */
.topbar{ padding-top:var(--sp-4); padding-bottom:var(--sp-4); }
/* brushed-steel hairline + gunmetal accent gradient seated on the masthead edge */
.topbar::after{
  content:""; position:absolute; left:0; right:0; bottom:-1px; height:1px; pointer-events:none;
  background:linear-gradient(90deg,
    color-mix(in srgb,var(--amber) 60%,transparent) 0%,
    color-mix(in srgb,var(--amber) 18%,transparent) 26%,
    transparent 60%);
}
.topbar-head .eyebrow{ display:inline-flex; align-items:center; gap:var(--sp-2); }
/* stamped gunmetal index dot before the eyebrow — the one piece of steel on every screen */
.topbar-head .eyebrow::before{
  content:""; width:5px; height:5px; border-radius:1px; background:var(--amber); flex:0 0 auto;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--amber) 12%,transparent);
}
.topbar-head h1{ letter-spacing:-.5px; }
[data-theme="dark"] .topbar::after{
  background:linear-gradient(90deg,
    color-mix(in srgb,var(--amber) 70%,transparent) 0%,
    color-mix(in srgb,var(--amber) 22%,transparent) 26%,
    transparent 60%);
}

/* ═══════════════════════════════════════════════════════════════════════════
   ALIVE LAYER — subtle, restrained motion that makes the control room breathe.
   Transform/opacity only · reduced-motion guarded · no perpetual loops on data.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Register rows respond to the cursor (the biggest "alive" win) ─────────── */
.fin-table tbody tr,.cv-row,.tk-row,.dwg-row,.ct-row,.qa-defrow,.mins-item,.subdir-card,.lv-row{
  transition:background .14s var(--ease), box-shadow .14s var(--ease);
}
.fin-table tbody tr:hover,.cv-row:hover,.tk-row:hover,.dwg-row:hover,.ct-row:hover,.qa-defrow:hover,.lv-row:hover{
  background:color-mix(in srgb,var(--amber) 5%,transparent);
}
.fin-table tbody tr:hover td:first-child{ box-shadow:inset 2px 0 0 color-mix(in srgb,var(--amber) 55%,transparent); }

/* ── KPI / stat tiles lift gently on hover ─────────────────────────────────── */
/* NOTE 2026-07-20: .kpi.is-link deliberately excluded — it's the dashboard's
   own headline KPI rail (Tier 2), which sits in a seamless 1px-gap grid with
   its own quiet background-tint hover (see .kpi.is-link:hover above); lifting
   an individual tile here would detach it from the grid's hairline dividers
   and defeat the "one connected rail" look. .client-kpi/.budget-panel/
   .let-panel are retired (superseded by .ledger-item) — rules kept, dead. */
.client-kpi,.budget-panel,.let-panel{
  transition:transform .2s var(--ease-out), box-shadow .2s var(--ease-out), border-color .2s var(--ease-out);
}
.client-kpi:hover,.budget-panel:hover,.let-panel:hover{ transform:translateY(-2px); box-shadow:var(--sheen),var(--shadow-lg); }

/* ── Icon buttons + clickable status pills give tactile micro-feedback ─────── */
.btn.icon-only svg{ transition:transform .15s var(--ease-out); }
.btn.icon-only:hover svg{ transform:scale(1.09); }
.cv-st,.shop-chip,.pill[role="button"]{ transition:transform .12s var(--ease-out), box-shadow .15s var(--ease); }
.cv-st:hover,.pill[role="button"]:hover{ transform:translateY(-1px); }
.att-chip{ transition:border-color .15s var(--ease), transform .12s var(--ease-out); }
.att-chip:hover{ transform:translateY(-1px); border-color:var(--muted2); }

/* ── A light glint sweeps across primary buttons on hover (premium, quiet) ── */
.btn.primary{ position:relative; overflow:hidden; }
.btn.primary::after{
  content:""; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(105deg,transparent 32%,rgba(255,255,255,.16) 50%,transparent 68%);
  transform:translateX(-130%); transition:transform .6s var(--ease-out);
}
.btn.primary:hover::after{ transform:translateX(130%); }

@media (prefers-reduced-motion: no-preference){
  /* KPI bullet bars grow in from the left, once, on first paint */
  body.intro-anim .bl-fill{ transform-box:fill-box; transform-origin:left center; animation:blGrow .7s var(--ease-out) both; }
  @keyframes blGrow{ from{ transform:scaleX(.001); } to{ transform:scaleX(1); } }

  /* the one justified perpetual loop: a soft liveness ring on the sync dot */
  .src-chip.live .dot,.src-chip.scan .dot{ animation:liveDot 2.6s var(--ease) infinite; }
  @keyframes liveDot{
    0%,100%{ box-shadow:0 0 0 0 color-mix(in srgb,var(--amber) 40%,transparent); }
    55%{ box-shadow:0 0 0 5px color-mix(in srgb,var(--amber) 0%,transparent); }
  }
  /* the alert badge breathes gently so it's noticed without nagging */
  .settings-btn.has-alerts .alert-badge{ animation:badgePulse 3s var(--ease) infinite; }
  @keyframes badgePulse{ 0%,100%{ transform:scale(1); } 50%{ transform:scale(1.13); } }
}

/* ===========================================================================
   Brompton sign-in gate — pure-ink, glass + flowing paths.
   Ported from the brompton-defects React AuthComponent. Theme is FIXED ink/white
   (independent of the app's light/dark toggle): --lg-bg / --lg-fg are rgb triplets,
   used as rgba(var(--lg-*), a). The brompton original derives the same material
   from oklch(from --background/--foreground); concrete rgba here = identical look,
   no oklch-relative-colour dependency.
   =========================================================================== */
body.preauth{ overflow:hidden; }
.login-gate{ --lg-bg:11,15,14; --lg-fg:255,255,255; --lg-anim:400ms; --lg-ease:cubic-bezier(.25,1,.5,1);
  position:fixed; inset:0; z-index:12000; display:flex; flex-direction:column; align-items:center; justify-content:center;
  background:#0B0F0E; color:rgba(var(--lg-fg),1); overflow:auto;
  /* the brand lockup is absolutely positioned at the top; without a matching
     top padding the vertically-centred form slid straight under it on a short
     viewport (measured: 26px of "Brompton" over "Welcome back" at 307px tall).
     Padding reserves the lockup's band, and overflow:auto scrolls instead of
     clipping the title off the top when the viewport is shorter still. */
  padding:var(--sp-8) var(--sp-4) var(--sp-5);
  /* progressive: centred normally, but never centred INTO the unreachable
     overflow when the form is taller than the box (older engines ignore it) */
  justify-content:safe center;
  font-family:var(--body,"Hanken Grotesk",system-ui,-apple-system,sans-serif);
  opacity:1; transition:opacity .42s var(--lg-ease); }
.login-gate[hidden]{ display:none; }
.login-gate.out{ opacity:0; pointer-events:none; }

/* pinned to the VIEWPORT, not to the (now scrollable) gate box, so the flowing
   backdrop stays put when a short viewport scrolls the form */
.login-gate .lg-bg{ position:fixed; inset:0; z-index:0; pointer-events:none; }
.login-gate .lg-svg{ position:absolute; inset:0; width:100%; height:100%; color:rgba(var(--lg-fg),.55); }
.login-gate .lg-svg path{ fill:none; stroke:currentColor; }
@media (prefers-reduced-motion: no-preference){
  .login-gate .lg-svg path{ stroke-dasharray:.35 .65; animation:lgFlow var(--d,24s) linear infinite; }
  @keyframes lgFlow{ 0%{ stroke-dashoffset:1; opacity:.26 } 50%{ opacity:.55 } 100%{ stroke-dashoffset:0; opacity:.26 } }
}
@media (prefers-reduced-motion: reduce){ .login-gate .lg-svg path{ opacity:.5 } }
.login-gate::after{ content:""; position:fixed; inset:0; z-index:1; pointer-events:none;
  background:radial-gradient(125% 85% at 50% 50%, transparent 38%, rgba(0,0,0,.5) 100%); }

.login-gate .lg-brand{ position:absolute; top:18px; left:50%; transform:translateX(-50%); z-index:5; display:flex; align-items:center; gap:var(--sp-2); }
.login-gate .lg-emblem{ height:26px; width:26px; object-fit:contain; }
.login-gate .lg-brand span{ font-size:15px; font-weight:700; letter-spacing:.01em; color:rgba(var(--lg-fg),.95); }

.login-gate .lg-form{ position:relative; z-index:3; border:0; margin:0; padding:0; min-inline-size:auto;
  width:300px; max-width:calc(100vw - 32px); display:flex; flex-direction:column; align-items:center; gap:var(--sp-5); }
.login-gate .lg-form:disabled{ opacity:.55; }
.login-gate .lg-step{ width:100%; display:flex; flex-direction:column; align-items:center; gap:var(--sp-4); }
.login-gate .lg-step[hidden]{ display:none; }
@media (prefers-reduced-motion: no-preference){
  .login-gate .lg-step:not([hidden]){ animation:lgRise .45s var(--lg-ease) both; }
  @keyframes lgRise{ from{ opacity:0; transform:translateY(8px); filter:blur(4px) } to{ opacity:1; transform:none; filter:none } }
}
.login-gate .lg-title{ margin:0; font-weight:300; font-size:clamp(33px,7vw,52px); line-height:1.04; letter-spacing:-.02em; text-align:center; color:rgba(var(--lg-fg),1); }
.login-gate .lg-sub{ margin:0; font-size:13px; font-weight:500; color:rgba(var(--lg-fg),.62); }
.login-gate .lg-sub b{ color:rgba(var(--lg-fg),.92); font-weight:700; }
.login-gate .lg-note{ margin:var(--sp-1) 0 0; font-size:11.5px; line-height:1.5; text-align:center; color:rgba(var(--lg-fg),.5); }
.login-gate .lg-or{ display:flex; align-items:center; gap:var(--sp-2); width:100%; padding:var(--sp-0) 0; }
.login-gate .lg-or hr{ flex:1; border:0; border-top:1px solid rgba(var(--lg-fg),.17); margin:0; }
.login-gate .lg-or span{ font-size:11px; font-weight:700; letter-spacing:.09em; color:rgba(var(--lg-fg),.5); }
.login-gate .lg-oauth{ display:flex; gap:var(--sp-3); }
.login-gate .lg-row{ display:flex; align-items:center; justify-content:space-between; width:100%; margin-top:var(--sp-2); }
.login-gate .lg-link{ all:unset; cursor:pointer; display:inline-flex; align-items:center; gap:var(--sp-2); font-size:13px; color:rgba(var(--lg-fg),.7); transition:color .15s; }
.login-gate .lg-link:hover{ color:rgba(var(--lg-fg),1); }
.login-gate .lg-link:focus-visible{ outline:2px solid rgba(var(--lg-fg),.6); outline-offset:3px; border-radius:5px; }

/* glass field pill (leading icon · input · trailing reveal button) */
.login-gate .lg-field{ position:relative; display:flex; align-items:center; width:100%; gap:var(--sp-1); padding:var(--sp-1); border-radius:999px;
  background:linear-gradient(-75deg, rgba(var(--lg-bg),.05), rgba(var(--lg-bg),.22), rgba(var(--lg-bg),.05));
  backdrop-filter:blur(3px); -webkit-backdrop-filter:blur(3px);
  box-shadow: inset 0 2px 2px rgba(var(--lg-fg),.05), inset 0 -2px 2px rgba(var(--lg-bg),.5), 0 4px 2px -2px rgba(var(--lg-fg),.18);
  transition:box-shadow var(--lg-anim) var(--lg-ease); }
.login-gate .lg-field::after{ content:""; position:absolute; inset:0; border-radius:999px; padding:1.5px; pointer-events:none;
  background:conic-gradient(from -75deg at 50% 50%, rgba(var(--lg-fg),.5) 0%, transparent 5% 40%, rgba(var(--lg-fg),.5) 50%, transparent 60% 95%, rgba(var(--lg-fg),.5) 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); mask-composite:exclude; }
.login-gate .lg-field:focus-within{ box-shadow: inset 0 2px 2px rgba(var(--lg-fg),.05), inset 0 -2px 2px rgba(var(--lg-bg),.5), 0 0 0 1px rgba(var(--lg-fg),.28), 0 8px 22px -10px rgba(0,0,0,.7); }
.login-gate .lg-field input{ flex:1 1 auto; min-width:0; background:transparent; border:0; outline:none; color:rgba(var(--lg-fg),1); font:inherit; font-size:15px; padding:var(--sp-2) var(--sp-0); }
.login-gate .lg-field input::placeholder{ color:rgba(var(--lg-fg),.5); }
.login-gate .lg-fic{ display:flex; align-items:center; justify-content:center; width:32px; flex:0 0 auto; color:rgba(var(--lg-fg),.8); }
.login-gate .lg-fic svg{ width:19px; height:19px; }
.login-gate .lg-eye{ all:unset; cursor:pointer; display:flex; align-items:center; justify-content:center; width:32px; flex:0 0 auto; color:rgba(var(--lg-fg),.8); }
.login-gate .lg-eye[hidden]{ display:none; }
.login-gate .lg-eye:hover{ color:rgba(var(--lg-fg),1); }
.login-gate .lg-eye svg{ width:19px; height:19px; }

/* glass buttons (oauth + arrow) */
.login-gate .glass-icon, .login-gate .glass-btn{ all:unset; cursor:pointer; position:relative; display:inline-flex; align-items:center; justify-content:center;
  border-radius:999px; color:rgba(var(--lg-fg),.9); -webkit-tap-highlight-color:transparent;
  background:linear-gradient(-75deg, rgba(var(--lg-bg),.05), rgba(var(--lg-bg),.22), rgba(var(--lg-bg),.05));
  backdrop-filter:blur(3px); -webkit-backdrop-filter:blur(3px);
  box-shadow: inset 0 2px 2px rgba(var(--lg-fg),.05), inset 0 -2px 2px rgba(var(--lg-bg),.5), 0 4px 2px -2px rgba(var(--lg-fg),.18);
  transition:transform var(--lg-anim) var(--lg-ease), box-shadow var(--lg-anim) var(--lg-ease), opacity .3s var(--lg-ease); }
.login-gate .glass-icon::after, .login-gate .glass-btn::after{ content:""; position:absolute; inset:0; border-radius:999px; padding:1.5px; pointer-events:none;
  background:conic-gradient(from -75deg at 50% 50%, rgba(var(--lg-fg),.5) 0%, transparent 5% 40%, rgba(var(--lg-fg),.5) 50%, transparent 60% 95%, rgba(var(--lg-fg),.5) 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); mask-composite:exclude; }
.login-gate .glass-icon{ width:38px; height:38px; flex:0 0 auto; }
.login-gate .glass-icon svg{ width:19px; height:19px; }
.login-gate .glass-btn{ gap:var(--sp-2); padding:var(--sp-2) var(--sp-4); font-size:13px; font-weight:600; color:rgba(var(--lg-fg),.95); }
.login-gate .glass-btn svg{ width:18px; height:18px; }
.login-gate .glass-icon:hover, .login-gate .glass-btn:hover{ transform:scale(.97); color:rgba(var(--lg-fg),1); }
.login-gate .glass-icon:active, .login-gate .glass-btn:active{ transform:scale(.94); }
.login-gate .glass-icon:focus-visible, .login-gate .glass-btn:focus-visible{ outline:2px solid rgba(var(--lg-fg),.6); outline-offset:3px; }
.login-gate .glass-icon[disabled]{ width:0; opacity:0; pointer-events:none; box-shadow:none; }
.login-gate .glass-icon[disabled]::after{ display:none; }

/* sign-in status modal */
.login-gate .lg-modal{ position:absolute; inset:0; z-index:20; display:flex; align-items:center; justify-content:center;
  background:rgba(0,0,0,.55); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); }
.login-gate .lg-modal[hidden]{ display:none; }
.login-gate .lg-modal-card{ position:relative; width:min(360px,calc(100vw - 32px)); padding:var(--sp-6) var(--sp-5); border-radius:18px; text-align:center;
  background:rgba(20,24,23,.94); border:1px solid rgba(var(--lg-fg),.14); box-shadow:0 30px 80px -22px rgba(0,0,0,.85);
  display:flex; flex-direction:column; align-items:center; gap:var(--sp-4); }
.login-gate .lg-modal-x{ all:unset; cursor:pointer; position:absolute; top:10px; right:12px; color:rgba(var(--lg-fg),.6); }
.login-gate .lg-modal-x[hidden]{ display:none; }
.login-gate .lg-modal-x:hover{ color:rgba(var(--lg-fg),1); }
.login-gate .lg-modal-body{ display:flex; flex-direction:column; align-items:center; gap:var(--sp-4); font-size:15px; line-height:1.5; color:rgba(var(--lg-fg),.92); }
.login-gate .lg-modal-body p{ margin:0; }
.login-gate .lg-spin{ width:42px; height:42px; border-radius:50%; border:3px solid rgba(var(--lg-fg),.18); border-top-color:rgba(var(--lg-fg),.85); animation:lgSpin 1s linear infinite; }
@keyframes lgSpin{ to{ transform:rotate(360deg) } }
@media (prefers-reduced-motion: reduce){ .login-gate .lg-spin{ animation:none } }
.login-gate .lg-ok{ color:#a3a2a0; }
.login-gate .lg-info-ic{ color:rgba(var(--lg-fg),.75); }
.login-gate .lg-err-ic{ color:#8e8d8b; }
.login-gate .lg-modal .glass-btn{ margin-top:var(--sp-1); padding:var(--sp-2) var(--sp-5); }

  /* ===== 8pt grid — semantic density tokens (explicit comfortable/compact; data surfaces only,
     controls keep constant hit targets). Switched by applyDensity() via [data-density]. ===== */
  :root{
    --pad-cell-y:var(--sp-2); --pad-cell-x:var(--sp-3);
    --pad-row-y:var(--sp-3);
    --pad-card:var(--sp-4);
    --pad-bar-y:var(--sp-4); --gap-bar:var(--sp-4);
    --gap-grid:var(--sp-3);
    --gap-stack:var(--sp-5);
  }
  :root[data-density="compact"]{
    --pad-cell-y:var(--sp-1); --pad-cell-x:var(--sp-2);
    --pad-row-y:var(--sp-2);
    --pad-card:var(--sp-3);
    --pad-bar-y:var(--sp-3); --gap-bar:var(--sp-3);
    --gap-grid:var(--sp-2);
    --gap-stack:var(--sp-4);
  }

  /* ===== spacing utilities — 8pt grid, N mirrors --sp-N (0=0, 1=4px … 6=32px).
     For markup/templates in place of inline styles; !important so they beat component rules. ===== */
  .m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}
  .p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}
  .gap-0{gap:0 !important}
  .m-1{margin:var(--sp-1) !important}.mt-1{margin-top:var(--sp-1) !important}.mr-1{margin-right:var(--sp-1) !important}.mb-1{margin-bottom:var(--sp-1) !important}.ml-1{margin-left:var(--sp-1) !important}.mx-1{margin-left:var(--sp-1) !important;margin-right:var(--sp-1) !important}.my-1{margin-top:var(--sp-1) !important;margin-bottom:var(--sp-1) !important}
  .p-1{padding:var(--sp-1) !important}.pt-1{padding-top:var(--sp-1) !important}.pr-1{padding-right:var(--sp-1) !important}.pb-1{padding-bottom:var(--sp-1) !important}.pl-1{padding-left:var(--sp-1) !important}.px-1{padding-left:var(--sp-1) !important;padding-right:var(--sp-1) !important}.py-1{padding-top:var(--sp-1) !important;padding-bottom:var(--sp-1) !important}
  .gap-1{gap:var(--sp-1) !important}
  .m-2{margin:var(--sp-2) !important}.mt-2{margin-top:var(--sp-2) !important}.mr-2{margin-right:var(--sp-2) !important}.mb-2{margin-bottom:var(--sp-2) !important}.ml-2{margin-left:var(--sp-2) !important}.mx-2{margin-left:var(--sp-2) !important;margin-right:var(--sp-2) !important}.my-2{margin-top:var(--sp-2) !important;margin-bottom:var(--sp-2) !important}
  .p-2{padding:var(--sp-2) !important}.pt-2{padding-top:var(--sp-2) !important}.pr-2{padding-right:var(--sp-2) !important}.pb-2{padding-bottom:var(--sp-2) !important}.pl-2{padding-left:var(--sp-2) !important}.px-2{padding-left:var(--sp-2) !important;padding-right:var(--sp-2) !important}.py-2{padding-top:var(--sp-2) !important;padding-bottom:var(--sp-2) !important}
  .gap-2{gap:var(--sp-2) !important}
  .m-3{margin:var(--sp-3) !important}.mt-3{margin-top:var(--sp-3) !important}.mr-3{margin-right:var(--sp-3) !important}.mb-3{margin-bottom:var(--sp-3) !important}.ml-3{margin-left:var(--sp-3) !important}.mx-3{margin-left:var(--sp-3) !important;margin-right:var(--sp-3) !important}.my-3{margin-top:var(--sp-3) !important;margin-bottom:var(--sp-3) !important}
  .p-3{padding:var(--sp-3) !important}.pt-3{padding-top:var(--sp-3) !important}.pr-3{padding-right:var(--sp-3) !important}.pb-3{padding-bottom:var(--sp-3) !important}.pl-3{padding-left:var(--sp-3) !important}.px-3{padding-left:var(--sp-3) !important;padding-right:var(--sp-3) !important}.py-3{padding-top:var(--sp-3) !important;padding-bottom:var(--sp-3) !important}
  .gap-3{gap:var(--sp-3) !important}
  .m-4{margin:var(--sp-4) !important}.mt-4{margin-top:var(--sp-4) !important}.mr-4{margin-right:var(--sp-4) !important}.mb-4{margin-bottom:var(--sp-4) !important}.ml-4{margin-left:var(--sp-4) !important}.mx-4{margin-left:var(--sp-4) !important;margin-right:var(--sp-4) !important}.my-4{margin-top:var(--sp-4) !important;margin-bottom:var(--sp-4) !important}
  .p-4{padding:var(--sp-4) !important}.pt-4{padding-top:var(--sp-4) !important}.pr-4{padding-right:var(--sp-4) !important}.pb-4{padding-bottom:var(--sp-4) !important}.pl-4{padding-left:var(--sp-4) !important}.px-4{padding-left:var(--sp-4) !important;padding-right:var(--sp-4) !important}.py-4{padding-top:var(--sp-4) !important;padding-bottom:var(--sp-4) !important}
  .gap-4{gap:var(--sp-4) !important}
  .m-5{margin:var(--sp-5) !important}.mt-5{margin-top:var(--sp-5) !important}.mr-5{margin-right:var(--sp-5) !important}.mb-5{margin-bottom:var(--sp-5) !important}.ml-5{margin-left:var(--sp-5) !important}.mx-5{margin-left:var(--sp-5) !important;margin-right:var(--sp-5) !important}.my-5{margin-top:var(--sp-5) !important;margin-bottom:var(--sp-5) !important}
  .p-5{padding:var(--sp-5) !important}.pt-5{padding-top:var(--sp-5) !important}.pr-5{padding-right:var(--sp-5) !important}.pb-5{padding-bottom:var(--sp-5) !important}.pl-5{padding-left:var(--sp-5) !important}.px-5{padding-left:var(--sp-5) !important;padding-right:var(--sp-5) !important}.py-5{padding-top:var(--sp-5) !important;padding-bottom:var(--sp-5) !important}
  .gap-5{gap:var(--sp-5) !important}
  .m-6{margin:var(--sp-6) !important}.mt-6{margin-top:var(--sp-6) !important}.mr-6{margin-right:var(--sp-6) !important}.mb-6{margin-bottom:var(--sp-6) !important}.ml-6{margin-left:var(--sp-6) !important}.mx-6{margin-left:var(--sp-6) !important;margin-right:var(--sp-6) !important}.my-6{margin-top:var(--sp-6) !important;margin-bottom:var(--sp-6) !important}
  .p-6{padding:var(--sp-6) !important}.pt-6{padding-top:var(--sp-6) !important}.pr-6{padding-right:var(--sp-6) !important}.pb-6{padding-bottom:var(--sp-6) !important}.pl-6{padding-left:var(--sp-6) !important}.px-6{padding-left:var(--sp-6) !important;padding-right:var(--sp-6) !important}.py-6{padding-top:var(--sp-6) !important;padding-bottom:var(--sp-6) !important}
  .gap-6{gap:var(--sp-6) !important}

  /* ── data-tip tooltip layer (RR-2 D-d) — one fixed element the delegated
     boot-block layer positions; replaces native title= tooltips ─────────── */
  #tipLayer{
    position:fixed; z-index:12500; max-width:280px;
    background:var(--panel); color:var(--txt);
    border:1px solid var(--border); border-radius:var(--radius-sm);
    padding:var(--sp-1) var(--sp-2);
    font-size:11.5px; line-height:1.45;
    box-shadow:0 4px 14px rgba(0,0,0,.14);
    pointer-events:none; overflow-wrap:break-word;
  }
  #tipLayer[hidden]{display:none}

