/* RC Greenlight — the console chrome. Tokens + shell for the dashboard consoles.
 *
 * WHY THIS FILE EXISTS (2026-08-26, step 1 of the dashboard split). site/dashboard.html is ONE
 * document serving TWO consoles — setRole() toggles the player view and the owner view. Splitting it
 * into two pages without pulling this block out first would copy 420 lines of tokens and shell CSS
 * into both, and a duplicated token block is precisely the divergence rev 77 spent 420 replacements
 * ending. So the chrome comes out FIRST, and both pages link it.
 *
 * MOVED VERBATIM. Not one declaration was retyped, reordered or tidied on the way out: the extraction
 * was mechanical, so the cascade is byte-identical and the two standing regressions can tell a MOVE
 * from a CHANGE. It is linked at the position the <style> block occupied — after mobile-nav.css — so
 * order and specificity are unchanged.
 *
 * ONE STANDING CHECK HAD TO LEARN A NEW TRICK, AND THAT IS WORTH READING BEFORE MOVING ANY MORE CSS.
 * tools/Token Drift.html's site audit read each page as a SINGLE FILE and asserted ZERO UNRESOLVED:
 * every var() had to be defined in the same text. The moment this :root block left dashboard.html all
 * 26 of its tokens would have reported unresolved — a red audit caused entirely by the audit's own
 * blind spot, and the exact regression the deploy note warned this split would trip. The audit now
 * follows <link rel="stylesheet"> and resolves a page against its own linked CSS, which is what a
 * browser does and what research/contrast-harness-dashboard.html (an iframe plus getComputedStyle)
 * was already doing correctly.
 *
 * THE VIEW-SPECIFIC RULES HAVE NOT BEEN SEPARATED YET, deliberately. Both views live in one document
 * today, so every rule here is shared by construction; sorting chrome from view is a judgement call
 * that belongs WITH the split, where a rule can be seen to be used by one view only. Extracting it
 * now would be guessing.
 */
  :root{
    --pine-950:#0E2018; --pine-900:#143726; --forest-800:#1B5238; --fairway-700:#1E7048;
    --turf-600:#2A9460; --signal-500:#34B873; --bright-400:#5BD891; --mint-300:#97E9BB;
    --wash-200:#C5F2D7; --lime-500:#B4EA32; --lime-400:#CDF36A;
    --paper-50:#FBF9F3; --paper-100:#F4F0E6; --paper-200:#E9E2D1;
    --ink-900:#101914; --ink-700:#33433B; --ink-500:#5F6E64; --ink-400:#67766C; /* was #859188 = 3.28:1 on white and used as 10-11px label ink at 22 sites,
       none of them on a dark surface (checked). Darkened to 4.84:1 rather than editing ten class
       rules: the token WAS the defect. --ink-500 #5F6E64 stays the next step down, so the ramp
       still has two steps. */ --ink-300:#B2BAB4;
    --amber:#E0A23C; --red:#D8503E; --border:rgba(16,25,20,.13);
    --disp:'Archivo Expanded',sans-serif; --head:'Archivo',sans-serif; --sans:'Hanken Grotesk',sans-serif; --mono:'JetBrains Mono',monospace;
    /* ACCESSIBLE INKS (added 2026-08-26). --amber #E0A23C is 2.2:1 and --red #D8503E is 4.3:1
       on paper — both are FILLS, neither passes as small text. These are the inks to use when
       amber or red carries a WORD on a light surface. The five report templates got the same
       pair in rev 78; the console had been left out. */
    --amber-ink:#8A5A12; --red-ink:#A3352C;
    /* --clay-600 was referenced at 7 call sites as var(--clay-600) and defined nowhere,
       so the fallback was silently the real value. Defined here at that value: the sign-in error
       ink. Token Drift reported it as "1 on a fallback", which is the class of finding that
       distinguishes a renamed token from a broken one. */
    --clay-600:#b4493a;
  }
  *{box-sizing:border-box;margin:0;padding:0;}
  body{font-family:var(--sans);color:var(--ink-900);background:var(--paper-100);-webkit-font-smoothing:antialiased;line-height:1.5;}
  a{color:inherit;text-decoration:none;}
  ::selection{background:var(--lime-500);color:var(--pine-950);}

  .bar{background:var(--pine-950);color:#fff;}
  .bar-in{max-width:1180px;margin:0 auto;padding:0 28px;height:64px;display:flex;align-items:center;justify-content:space-between;gap:16px;}
  .brand{display:flex;align-items:center;gap:11px;color:#fff;}
  .brand svg{color:var(--mint-300);}
  .brand .wm{font-family:var(--head);font-weight:800;font-size:18px;letter-spacing:-.02em;}
  .brand .wm .lt{color:var(--bright-400);}
  .roleswitch{display:flex;gap:4px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:999px;padding:4px;}
  .roleswitch button{font-family:var(--mono);font-size:12px;font-weight:600;border:none;cursor:pointer;border-radius:999px;padding:7px 16px;background:transparent;color:var(--mint-300);}
  .roleswitch button.active{background:var(--lime-500);color:var(--pine-950);}
  .bar .back{font-family:var(--mono);font-size:12px;color:var(--mint-300);}
  .bar .back:hover{color:#fff;}

  .wrap{max-width:1180px;margin:0 auto;padding:30px 28px 70px;}
  .demo-note{display:flex;align-items:center;gap:11px;background:#fff;border:1px solid var(--border);border-left:3px solid var(--amber);border-radius:11px;padding:12px 18px;font-size:13px;color:var(--ink-700);margin-bottom:24px;}
  .demo-note .mono{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--amber-ink);font-weight:600;}

  .head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:22px;flex-wrap:wrap;}
  .head h1{font-family:var(--head);font-weight:800;font-size:30px;letter-spacing:-.02em;}
  .head .sub{font-size:14px;color:var(--ink-500);margin-top:4px;}
  .head .tools{display:flex;gap:10px;}
  .btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;font-weight:600;border-radius:999px;padding:10px 16px;cursor:pointer;border:1px solid var(--border);background:#fff;color:var(--ink-700);}
  .btn:hover{background:var(--paper-50);}
  .btn-dark{background:var(--pine-950);color:#fff;border-color:var(--pine-950);}

  .tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:26px;}
  @media(max-width:900px){.tiles{grid-template-columns:repeat(2,1fr);}}
  .tile{background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 20px;}
  .tile.dark{background:var(--pine-950);color:#fff;border-color:var(--pine-900);}
  .tile .tl{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-400);}
  .tile.dark .tl{color:var(--mint-300);}
  .tile .tv{font-family:var(--disp);font-weight:800;font-size:34px;line-height:1.05;margin-top:7px;letter-spacing:-.01em;}
  .tile.dark .tv{color:var(--lime-400);}

  .panel{background:#fff;border:1px solid var(--border);border-radius:16px;overflow:hidden;margin-bottom:22px;}
  .panel-h{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--border);}
  .panel-h h2{font-family:var(--head);font-weight:700;font-size:18px;}
  .panel-h .cnt{font-family:var(--mono);font-size:11px;color:var(--ink-400);}
  .panel-h-r{display:flex;align-items:center;gap:14px;}
  .q-input{font-family:var(--sans);font-size:13px;color:var(--ink-900);background:var(--paper-50);border:1px solid var(--border);border-radius:9px;padding:7px 12px;width:190px;outline:none;transition:border-color .15s,background .15s,width .15s;}
  .q-input::placeholder{color:var(--ink-300);}
  .q-input:focus{border-color:var(--turf-600);background:#fff;width:230px;}
  tr.no-match{display:none;}
  .del-note{padding:12px 22px;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--ink-400);border-top:1px solid var(--border);background:var(--paper-50);}
  table{width:100%;border-collapse:collapse;}
  /* Portrait phones: every dashboard data table (owner queue + delivered + members, coach, billing)
     collapses from columns into stacked cards so the whole view fits the screen with no sideways
     cut-off or column-crushing wraps (matches the player-portal card style). */
  @media(max-width:640px){
    html,body{overflow-x:hidden;}
    .view table,.view thead,.view tbody,.view tr,.view td{display:block;width:auto;}
    .view thead{display:none;}
    .view tr.no-match{display:none;}
    .view tbody tr{border:1px solid var(--border);border-radius:14px;background:#fff;margin-bottom:12px;padding:6px 2px;}
    .view td{border:none !important;padding:7px 18px !important;text-align:left !important;white-space:normal !important;}
    .view td:first-child{padding-top:14px !important;}
    .view td:last-child{padding-bottom:14px !important;}
    .view td .btn{margin:4px 8px 0 0 !important;}
    /* labelled cells: print the column name above the value so a stacked card stays readable */
    .view td[data-label]::before{content:attr(data-label);display:block;font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-400);margin-bottom:3px;}
    /* action cells: wrap the buttons in a row instead of one nowrap line running off-screen */
    .view td .deliverbtn,.view td .qdelbtn,.view td .cbuildbtn,.view td .crelbtn,.view td .rmbtn,.view td .opn{display:inline-block;margin:8px 8px 0 0 !important;}
  }
  th{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-400);text-align:left;padding:12px 22px;background:var(--paper-50);font-weight:600;}
  td{padding:14px 22px;border-top:1px solid var(--border);font-size:13.5px;vertical-align:middle;}
  td .nm{font-weight:600;color:var(--ink-900);}
  td .sm{font-family:var(--mono);font-size:11px;color:var(--ink-400);margin-top:2px;}
  .tag{display:inline-block;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.04em;border-radius:999px;padding:3px 9px;}
  .tag.player{background:color-mix(in oklch,var(--turf-600) 14%,#fff);color:var(--fairway-700);}
  /* AMBER AS TEXT IS --amber-ink, NEVER THE FILL COLOUR (2026-08-27). These three carried #9a6a14 on an amber
     tint and measured 4.16–4.26:1 at 9–10px — under the 4.5 bar for small text. Found only once the contrast
     harness was made to render the tables in demo mode; before that these cells did not exist to be measured.
     --amber-ink #8A5A12 is the token that exists for exactly this. */
  .tag.coach{background:color-mix(in oklch,var(--amber) 18%,#fff);color:var(--amber-ink);}
  .tag.founding{background:color-mix(in oklch,var(--lime-500) 22%,#fff);color:var(--forest-800);}
  /* per-member usage meter */
  .umeter{min-width:148px;}
  .umeter .ubar{height:6px;border-radius:999px;background:var(--paper-200);overflow:hidden;display:flex;}
  .umeter .ubar span{height:100%;border-radius:999px;background:var(--turf-600);transition:width .3s ease;}
  .umeter.at .ubar span{background:var(--amber);}
  .umeter.over .ubar span{background:#d8654f;}
  .umeter .ulab{font-family:var(--mono);font-size:11px;color:var(--ink-700);margin-top:6px;}
  .umeter .ulab b{color:var(--ink-900);}
  .umeter .usub{font-family:var(--mono);font-size:9.5px;color:var(--ink-400);letter-spacing:.02em;margin-top:1px;}
  .uflag{display:inline-block;font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;border-radius:999px;padding:2px 7px;margin-top:5px;}
  .uflag.over{background:color-mix(in oklch,#d8654f 18%,#fff);color:#b23c28;}
  .uflag.at{background:color-mix(in oklch,var(--amber) 20%,#fff);color:var(--amber-ink);}
  .uflag.unused{background:color-mix(in oklch,var(--amber) 14%,#fff);color:var(--amber-ink);}
  /* --ink-500 on --paper-200 is 4.17:1 — fine as a border or a fill, under the bar as 9px text. --ink-700. */
  .uflag.single{background:var(--paper-200);color:var(--ink-700);}
  select.status{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid var(--border);border-radius:8px;padding:6px 9px;background:#fff;color:var(--ink-700);cursor:pointer;}
  .earn{font-family:var(--disp);font-weight:800;color:var(--fairway-700);}
  .rate-cell{display:inline-flex;align-items:center;gap:3px;font-family:var(--mono);font-size:12px;color:var(--ink-500);}
  .rate-in{width:52px;font-family:var(--mono);font-size:12px;font-weight:600;color:var(--ink-900);border:1px solid var(--border);border-radius:7px;padding:5px 6px;text-align:right;background:#fff;}
  .rate-in:focus{outline:none;border-color:var(--turf-600);box-shadow:0 0 0 3px color-mix(in oklch,var(--turf-600) 14%,transparent);}
  .pref-chk{width:17px;height:17px;accent-color:var(--turf-600);cursor:pointer;vertical-align:middle;}
  .empty{padding:40px;text-align:center;color:var(--ink-400);font-size:14px;}
  .codepill{display:inline-flex;align-items:center;gap:10px;background:var(--paper-50);border:1px solid var(--border);border-radius:10px;padding:9px 13px;font-family:var(--mono);}
  .codepill .c{font-weight:600;color:var(--ink-900);letter-spacing:.04em;}
  .codepill button{border:none;background:var(--pine-950);color:#fff;border-radius:6px;padding:6px 11px;font-family:var(--mono);font-size:11px;cursor:pointer;}

  /* coach header top-right cluster: projected income + referral code */
  .coach-actions{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap;}
  .coach-top{display:flex;gap:14px;flex-wrap:wrap;align-items:stretch;}
  .mini{background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px 18px;min-width:186px;display:flex;flex-direction:column;justify-content:center;}
  .mini .ml{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-400);}
  .mini.income{background:var(--pine-950);border-color:var(--pine-900);position:relative;overflow:hidden;}
  .mini.income .ml{color:var(--mint-300);}
  .mini.income .mv{font-family:var(--disp);font-weight:800;font-size:30px;line-height:1.02;margin-top:6px;color:var(--lime-400);letter-spacing:-.01em;}
  .mini.income .mv small{font-family:var(--mono);font-size:13px;font-weight:600;color:var(--mint-300);letter-spacing:0;margin-left:2px;}
  .mini.income .msub{font-family:var(--mono);font-size:10.5px;color:var(--mint-300);margin-top:7px;line-height:1.4;}
  .mini.refcode .mv.code{font-family:var(--mono);font-weight:700;font-size:20px;color:var(--ink-900);letter-spacing:.04em;margin-top:6px;}
  .mini.refcode .racts{display:flex;gap:7px;margin-top:11px;}
  .mini.refcode .racts button{border:1px solid var(--border);background:#fff;color:var(--ink-700);border-radius:8px;padding:7px 11px;font-family:var(--mono);font-size:11px;font-weight:600;cursor:pointer;transition:background .12s,border-color .12s;}
  .mini.refcode .racts button:hover{background:var(--paper-50);border-color:var(--turf-600);}
  .mini.refcode .racts button.ok{background:color-mix(in oklch,var(--turf-600) 12%,#fff);border-color:var(--turf-600);color:var(--fairway-700);}

  /* academy profile + logo card */
  .profilecard{background:#fff;border:1px solid var(--border);border-radius:16px;padding:20px 22px;margin-bottom:22px;}
  .pc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
  .pc-title{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--fairway-700);}
  .pc-body{display:flex;gap:26px;align-items:flex-start;flex-wrap:wrap;}
  .pc-logo{display:flex;flex-direction:column;align-items:center;gap:9px;flex:0 0 auto;}
  .logo-slot{width:112px;height:112px;border-radius:14px;border:1.5px dashed var(--ink-300);background:var(--paper-50);display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer;transition:border-color .15s,background .15s;}
  .logo-slot:hover{border-color:var(--turf-600);background:color-mix(in oklch,var(--turf-600) 5%,#fff);}
  .logo-slot img{width:100%;height:100%;object-fit:cover;}
  .logo-empty{font-family:var(--mono);font-size:10px;line-height:1.5;color:var(--ink-400);text-align:center;letter-spacing:.04em;}
  .pc-logo-note{font-family:var(--mono);font-size:9.5px;color:var(--ink-400);text-align:center;max-width:130px;line-height:1.5;}
  .pc-fields{flex:1;min-width:240px;display:grid;grid-template-columns:1fr 1fr;gap:14px 24px;align-content:start;}
  .pc-philos{border-top:1px solid var(--border);margin-top:20px;padding-top:18px;}
  .pc-philos .pc-title span{font-size:10px;}
  @media(max-width:620px){.pc-fields{grid-template-columns:1fr;}}
  .pc-field{display:flex;flex-direction:column;gap:3px;}
  .pc-field .fl{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-500);}
  .pc-field .fv{font-family:var(--sans);font-size:15px;color:var(--ink-900);font-weight:500;}
  .pc-field .fv.mono{font-family:var(--mono);letter-spacing:.04em;font-size:14px;}
  .pc-form{margin-top:18px;padding-top:18px;border-top:1px solid var(--border);display:none;flex-direction:column;gap:6px;max-width:440px;}
  .pc-form label{font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-500);margin-top:8px;}
  .pc-form input{font-family:var(--sans);font-size:14.5px;border:1px solid var(--border);border-radius:10px;padding:10px 13px;outline:none;}
  .pc-form input:focus{border-color:var(--turf-600);box-shadow:0 0 0 3px rgba(42,148,96,.14);}
  .pc-formacts{display:flex;gap:9px;margin-top:14px;}
  .pc-msg{font-family:var(--mono);font-size:11px;color:var(--fairway-700);min-height:14px;margin-top:8px;}
  /* snapshot + sections */
  .sectlabel{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-700);margin:8px 0 12px;}
  .tile .tt{font-family:var(--mono);font-size:11px;margin-top:9px;color:var(--ink-500);}
  .tile.dark .tt{color:var(--mint-300);}
  .tt .up{color:var(--fairway-700);font-weight:700;} .tile.dark .tt .up{color:var(--lime-400);}
  .tt .dn{color:var(--red-ink);font-weight:700;}
  .tile .tsub{font-family:var(--mono);font-size:11px;color:var(--ink-400);margin-top:9px;}
  .tile.dark .tsub{color:var(--mint-300);}

  .snap2{display:grid;grid-template-columns:1.25fr 1fr 1.35fr;gap:14px;margin-bottom:24px;}
  @media(max-width:900px){.snap2{grid-template-columns:1fr;}}
  .mini{background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 20px;}
  .mini h3{font-family:var(--head);font-weight:700;font-size:15px;margin-bottom:15px;display:flex;align-items:center;justify-content:space-between;}
  .mini h3 .sm{font-family:var(--mono);font-size:10px;color:var(--ink-400);font-weight:400;letter-spacing:.06em;text-transform:uppercase;}
  .splitbar{height:12px;border-radius:999px;overflow:hidden;display:flex;background:var(--paper-200);margin-bottom:14px;}
  .splitbar .seg{height:100%;transition:width .3s ease;}
  .seg.mem{background:var(--turf-600);} .seg.single{background:var(--lime-500);}
  .legend{display:flex;flex-direction:column;gap:10px;}
  .legrow{display:flex;align-items:center;justify-content:space-between;font-size:13px;}
  .legrow .l{display:flex;align-items:center;gap:8px;color:var(--ink-700);}
  .legrow .l .dot{width:9px;height:9px;border-radius:2px;}
  .legrow .v{font-family:var(--disp);font-weight:800;font-size:15px;color:var(--ink-900);}
  .convrow{display:flex;align-items:center;justify-content:space-between;padding:8px 0;}
  .convrow + .convrow{border-top:1px solid var(--border);}
  .convrow .cl{font-size:13px;color:var(--ink-700);}
  .convrow .cv{font-family:var(--disp);font-weight:800;font-size:18px;color:var(--ink-900);}
  .convrow .cv.big{color:var(--fairway-700);}
  .pnl .pr{display:flex;align-items:center;justify-content:space-between;padding:8px 0;font-size:13.5px;}
  .pnl .pr + .pr{border-top:1px solid var(--border);}
  .pnl .pr .pl{color:var(--ink-700);}
  .pnl .pr .pv{font-family:var(--disp);font-weight:800;font-size:16px;color:var(--ink-900);}
  .pnl .pr .pv.neg{color:var(--red-ink);}
  .pnl .pr.net{border-top:2px solid var(--pine-950);margin-top:4px;padding-top:12px;}
  .pnl .pr.net .pl{font-weight:700;color:var(--ink-900);}
  .pnl .pr.net .pv{font-size:22px;color:var(--fairway-700);}
  .pnl input.cost{width:96px;text-align:right;font-family:var(--mono);font-size:13px;border:1px solid var(--border);border-radius:8px;padding:5px 8px;color:var(--ink-700);outline:none;}
  .pnl input.cost:focus{border-color:var(--turf-600);box-shadow:0 0 0 3px rgba(42,148,96,.14);}

  /* needs-attention alerts */
  .alerts{display:flex;flex-direction:column;gap:9px;margin-bottom:24px;}
  .alert{display:flex;align-items:center;gap:13px;background:#fff;border:1px solid var(--border);border-left:3px solid var(--ink-400);border-radius:11px;padding:12px 18px;}
  .alert .ai{width:8px;height:8px;border-radius:50%;background:var(--ink-400);flex:none;}
  .alert .atx{font-size:13.5px;color:var(--ink-700);flex:1;}
  .alert .atx b{color:var(--ink-900);}
  .alert .abtn{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid var(--border);background:var(--paper-50);border-radius:999px;padding:7px 13px;cursor:pointer;color:var(--ink-700);}
  .alert .abtn:hover{background:var(--paper-100);}
  .alert.amber{border-left-color:var(--amber);} .alert.amber .ai{background:var(--amber);}
  .alert.red{border-left-color:var(--red);} .alert.red .ai{background:var(--red);}
  .alert.good{border-left-color:var(--signal-500);} .alert.good .ai{background:var(--signal-500);}

  /* build queue */
  .age{display:inline-block;font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.04em;border-radius:999px;padding:3px 9px;background:var(--paper-200);color:var(--ink-500);}
  /* auto-build controls */
  .ab-row{display:flex;align-items:flex-end;gap:22px;flex-wrap:wrap;}
  .ab-toggle{display:flex;align-items:center;gap:11px;cursor:pointer;user-select:none;}
  .ab-toggle input{position:absolute;opacity:0;width:0;height:0;}
  .ab-track{width:48px;height:27px;border-radius:999px;background:var(--paper-200);border:1px solid var(--border);position:relative;transition:background .18s;flex:none;}
  .ab-knob{position:absolute;top:2px;left:2px;width:21px;height:21px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .18s;}
  .ab-toggle input:checked + .ab-track{background:var(--turf-600);border-color:var(--turf-600);}
  .ab-toggle input:checked + .ab-track .ab-knob{transform:translateX(21px);}
  .ab-lab{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--ink-700);letter-spacing:.02em;}
  .ab-num{display:flex;flex-direction:column;gap:5px;}
  .ab-num label{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-500);}
  .ab-num input{width:88px;font-family:var(--mono);font-size:14px;padding:8px 10px;border:1px solid var(--border);border-radius:9px;background:#fff;color:var(--ink-900);}
  .ab-num input:focus{outline:none;border-color:var(--turf-600);box-shadow:0 0 0 3px rgba(42,148,96,.14);}
  #ab-save{padding:10px 18px;}
  .ab-msg{font-family:var(--mono);font-size:11.5px;color:var(--fairway-700);align-self:center;}
  .ab-note{font-size:12.5px;line-height:1.5;color:var(--ink-500);margin-top:12px;max-width:720px;}
  .age.warn{background:color-mix(in oklch,var(--amber) 20%,#fff);color:#9a6a14;}
  .age.hot{background:color-mix(in oklch,var(--red) 16%,#fff);color:#a13422;}
  td .deliverbtn{font-family:var(--mono);font-size:11px;font-weight:600;border:none;background:var(--pine-950);color:#fff;border-radius:8px;padding:7px 12px;cursor:pointer;}
  /* WS6 touch log. The autopsy's most likely cause of death is the owner becoming the render farm,
     and it kills quietly because nobody measures it. This button is the whole instrument: one
     click per delivered report to say whether it needed a human. Styled as a QUIET state, not a
     warning — a touch is the most valuable signal the pipeline produces, not a confession. */
  td .touchbtn{font-family:var(--mono);font-size:10.5px;font-weight:600;border:1px solid var(--border);background:var(--paper-50);color:var(--ink-400);border-radius:8px;padding:6px 9px;cursor:pointer;}
  td .touchbtn:hover{border-color:var(--fairway-700);color:var(--fairway-700);}
  td .touchbtn.on{background:color-mix(in oklch,var(--amber) 18%,#fff);border-color:color-mix(in oklch,var(--amber) 45%,#fff);color:#8a5d10;}
  .tch-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px;}
  .tch-opt{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid var(--border);background:var(--paper-50);color:var(--ink-500);border-radius:999px;padding:7px 13px;cursor:pointer;}
  .tch-opt.sel{background:var(--pine-950);border-color:var(--pine-950);color:#fff;}
  td .deliverbtn:hover{background:var(--fairway-700);}
  td .qdelbtn{font-family:var(--mono);font-size:12px;font-weight:600;border:1px solid var(--border);background:var(--paper-50);color:var(--ink-500);border-radius:8px;padding:6px 9px;cursor:pointer;margin-left:7px;line-height:1;}
  td .qdelbtn:hover{background:color-mix(in oklch,var(--red) 14%,#fff);color:#a13422;border-color:color-mix(in oklch,var(--red) 40%,#fff);}
  td .cbuildbtn{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid var(--border);background:var(--paper-50);color:var(--ink-700);border-radius:8px;padding:7px 12px;cursor:pointer;}
  td .cbuildbtn:hover{background:var(--pine-950);color:#fff;border-color:var(--pine-950);}
  td .crelbtn{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid var(--border);background:#fff;color:var(--ink-400);border-radius:8px;padding:7px 12px;cursor:pointer;margin-left:6px;}
  td .crelbtn:hover{background:color-mix(in oklch,var(--red) 12%,#fff);color:#a13422;border-color:color-mix(in oklch,var(--red) 40%,#fff);}
  td .rmbtn{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid color-mix(in oklch,var(--red) 50%,var(--border));background:#fff;color:var(--clay-600);border-radius:8px;padding:7px 12px;cursor:pointer;white-space:nowrap;}
  td .rmbtn:hover{background:var(--red);color:#fff;border-color:var(--red);}
  td .crptbtn{font-family:var(--mono);font-size:11.5px;font-weight:600;background:none;border:none;padding:0;color:var(--ink-900);cursor:pointer;text-decoration:underline;text-underline-offset:2px;white-space:nowrap;}
  td .crptbtn:hover{color:var(--fairway-700);}
  .crf-l{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-500);margin-bottom:6px;}
  .crf-row{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;}
  .crf-more{font-family:var(--mono);font-size:11px;line-height:1.5;color:var(--ink-400);margin-top:12px;}
  .crf-more b{color:var(--ink-700);}
  .crf-sum{font-family:var(--mono);font-size:11px;line-height:1.5;color:var(--ink-500);margin-top:12px;}
  .crf-sum b{color:var(--ink-900);}
  .crf-showall{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--ink-700);background:none;border:none;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:2px;}
  .crf-showall:hover{color:var(--fairway-700);}

  /* player view (coach) — expands under the roster row: the player's own profile, or the coach's read of it */
  td .pvname{font-family:var(--sans);font-size:13.5px;font-weight:600;color:var(--ink-900);background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;gap:6px;}
  td .pvname:hover,td .pvname.on{color:var(--fairway-700);}
  td .pvname .pvcar{font-size:9px;color:var(--ink-400);}
  td .pvname.on .pvcar{color:var(--fairway-700);}
  tr.pvrow td{padding:0 22px 18px;border-top:0;}
  .pv-wrap{border:1px solid var(--border);border-radius:14px;overflow:hidden;background:#fff;}
  .pv-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 14px;background:var(--paper-50);border-bottom:1px solid var(--border);}
  .pv-who{display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--ink-900);}
  .pv-who span{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-400);}
  .pv-seg{display:flex;gap:2px;background:#fff;border:1px solid var(--border);border-radius:999px;padding:2px;margin-left:auto;}
  .pv-seg button{font-family:var(--mono);font-size:11px;font-weight:600;border:none;background:none;color:var(--ink-500);border-radius:999px;padding:6px 12px;cursor:pointer;}
  .pv-seg button.on{background:var(--pine-950);color:#fff;}
  .pv-ro{flex:0 0 100%;font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-400);}
  .pv-mirror{background:var(--pine-950);padding:18px 20px;}
  .pv-kick{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--bright-400);}
  .pv-mirror h4{font-family:var(--disp);font-weight:800;font-size:19px;margin:7px 0 3px;color:#fff;}
  .pv-mirror .pv-sub{font-size:12.5px;color:rgba(255,255,255,.62);margin-bottom:15px;}
  .pv-from{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:rgba(255,255,255,.5);}
  .pv-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(122px,1fr));gap:8px;}
  .pv-tile{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.11);border-radius:10px;padding:9px 11px;}
  .pv-tl{font-family:var(--mono);font-size:8.5px;letter-spacing:.07em;text-transform:uppercase;color:rgba(255,255,255,.6);line-height:1.35;}
  .pv-tv{font-family:var(--disp);font-weight:800;font-size:19px;color:#fff;margin-top:4px;line-height:1;}
  .pv-tv span{font-family:var(--mono);font-size:10px;font-weight:600;color:var(--bright-400);margin-left:2px;}
  .pv-ts{font-family:var(--mono);font-size:9px;color:rgba(255,255,255,.52);margin-top:3px;}
  .pv-seclab{font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-500);margin-bottom:10px;}
  .pv-mirror .pv-seclab{color:var(--bright-400);margin-top:17px;}
  .pv-chart{display:flex;align-items:flex-end;gap:6px;}
  .pv-bw{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;}
  .pv-bv{font-family:var(--disp);font-weight:800;font-size:12px;color:var(--ink-900);}
  .pv-chart.dk .pv-bv{color:#fff;}
  .pv-bi{width:100%;border-radius:4px 4px 0 0;}
  .pv-bx{font-family:var(--mono);font-size:8.5px;color:var(--ink-400);white-space:nowrap;}
  .pv-chart.dk .pv-bx{color:rgba(255,255,255,.55);}
  .pv-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:11px;}
  .pv-chip{border:1px solid var(--border);border-radius:9px;padding:6px 10px;font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-500);}
  .pv-chip b{display:block;font-family:var(--disp);font-size:13px;letter-spacing:0;text-transform:none;color:var(--ink-900);margin-top:3px;}
  .pv-mirror .pv-chip{border-color:rgba(255,255,255,.16);color:rgba(255,255,255,.58);}
  .pv-mirror .pv-chip b{color:#fff;}
  .pv-tiles.lt .pv-tile{background:var(--paper-50);border-color:var(--border);}
  .pv-tiles.lt .pv-tl{color:var(--ink-500);}
  .pv-tiles.lt .pv-tv{color:var(--ink-900);}
  .pv-tiles.lt .pv-tv span{color:var(--fairway-700);}
  .pv-tiles.lt .pv-ts{color:var(--ink-400);}
  .pv-stale{font-family:var(--mono);font-size:10px;line-height:1.55;color:#8A5A12;background:color-mix(in oklch,var(--amber) 12%,#fff);border:1px solid color-mix(in oklch,var(--amber) 34%,#fff);border-radius:9px;padding:9px 11px;margin-top:11px;}
  .pv-stale b{color:var(--ink-900);}
  .pv-team{margin-top:12px;border-top:1px solid var(--paper-200);padding-top:11px;display:grid;gap:6px;}
  .pv-trow{font-size:12.5px;line-height:1.5;color:var(--ink-700);}
  .pv-trow b{color:var(--ink-900);}
  .pv-trow i{font-style:normal;color:var(--ink-500);}
  .pv-disagree{font-family:var(--mono);font-size:10px;line-height:1.55;color:#8A5A12;background:color-mix(in oklch,var(--amber) 12%,#fff);border:1px solid color-mix(in oklch,var(--amber) 34%,#fff);border-radius:9px;padding:9px 11px;margin-top:3px;}
  .pv-savewarn{font-family:var(--mono);font-size:10px;line-height:1.55;color:#8A5A12;margin-top:9px;}
  .pv-read{padding:18px 20px;display:grid;gap:20px;color:var(--ink-700);}
  .pv-q{font-size:13.5px;line-height:1.55;color:var(--ink-700);max-width:84ch;}
  .pv-q b{color:var(--ink-900);}
  .pv-axes{display:flex;gap:18px;flex-wrap:wrap;margin:13px 0;}
  .pv-ax{display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
  .pv-axl{font-family:var(--mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-500);}
  .pv-dg{font-family:var(--mono);font-size:11px;font-weight:600;border:1px solid var(--border);background:#fff;color:var(--ink-700);border-radius:999px;padding:6px 12px;cursor:pointer;}
  .pv-dg:hover{border-color:var(--turf-600);}
  .pv-dg.on{background:var(--pine-950);border-color:var(--pine-950);color:#fff;}
  .pv-2x2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
  .pv-box{border:1px solid var(--border);border-radius:11px;padding:12px 13px;background:var(--paper-50);opacity:.55;}
  .pv-box.on{opacity:1;background:#fff;border-color:var(--turf-600);box-shadow:0 0 0 3px rgba(42,148,96,.12);}
  .pv-bt{font-family:var(--mono);font-size:9px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-400);}
  .pv-bn{font-family:var(--disp);font-weight:800;font-size:14px;color:var(--ink-900);margin:5px 0;}
  .pv-bd{font-size:12.5px;line-height:1.5;color:var(--ink-700);}
  .pv-pair{display:grid;grid-template-columns:repeat(auto-fit,minmax(256px,1fr));gap:14px;}
  .pv-card{border:1px solid var(--border);border-radius:12px;padding:13px 14px;}
  .pv-cl{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-500);}
  .pv-cd{font-family:var(--mono);font-size:9.5px;color:var(--ink-400);margin:3px 0 12px;line-height:1.45;}
  .pv-nn{display:grid;grid-template-columns:20px 1fr auto;gap:11px;align-items:start;padding:10px 0;border-top:1px solid var(--paper-200);font-size:12.5px;line-height:1.5;}
  /* --ink-300 is a BORDER/PLACEHOLDER tint at 1.99:1 on white; as a rule number it is text. --ink-400 (4.84:1). */
  .pv-nnn{font-family:var(--disp);font-weight:800;font-size:13px;color:var(--ink-400);}
  .pv-nnh{font-weight:600;color:var(--ink-900);}
  .pv-nnd{color:var(--ink-700);margin-top:2px;}
  .pv-st{font-family:var(--mono);font-size:8.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;border-radius:999px;padding:4px 8px;white-space:nowrap;}
  .pv-st.kept{background:color-mix(in oklch,var(--turf-600) 14%,#fff);color:var(--fairway-700);}
  .pv-st.att{background:color-mix(in oklch,var(--amber) 20%,#fff);color:#8A5A12;}
  .pv-st.na{background:var(--paper-200);color:var(--ink-500);}
  .pv-gl{display:inline-block;margin-top:5px;font-family:var(--mono);font-size:10.5px;font-weight:600;color:var(--fairway-700);text-decoration:none;border-bottom:1px solid color-mix(in oklch,var(--turf-600) 40%,#fff);}
  .pv-gl:hover{border-bottom-color:var(--turf-600);}
  .pv-none{font-size:12.5px;line-height:1.55;color:var(--ink-500);background:var(--paper-50);border:1px solid var(--border);border-radius:11px;padding:12px 14px;}
  .pv-none b{color:var(--ink-900);}
  .dm-manual-toggle{display:block;margin-top:6px;background:none;border:none;padding:6px 0;font-family:var(--mono);font-size:12px;color:var(--ink-500);cursor:pointer;text-align:left;}
  .dm-manual-toggle:hover{color:var(--ink-900);}
  .modal-b textarea.fld{min-height:96px;resize:vertical;line-height:1.45;}
  td .opn{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--fairway-700);}
  td .opn:hover{text-decoration:underline;}

  /* The queue table is over-columned for a narrow window. It used to sit in an overflow-x:hidden
     panel, which CLIPPED rather than scrolled — on a blocked row the ✕ was cut off the end and
     became unclickable. Scrolling is recoverable; clipping is not. At the owner's real width this
     never engages. Do NOT put overflow-wrap:anywhere on the course cell: it drops that column's
     min-content to one character and the event name ladders down a word per line. */
  #queue-table{overflow-x:auto;}
  /* The blocking detail is a note ABOUT the row, not a value in the Course column — full width,
     joined to the row above, and out of the column-width computation entirely. Long check ids like
     claim.number.clutchFactorPutting break here and only here. */
  #queue-table tr.qdetail td{padding-top:0;border-top:0;overflow-wrap:anywhere;}

  /* GATE REPLAY panel. Dense on purpose — it is a reading surface, not a dashboard widget: the
     exposure rows are the point and they need to be scannable in bulk. */
  .gr-tot{display:flex;flex-wrap:wrap;gap:16px;padding:9px 0 11px;font-family:var(--mono);font-size:11px;color:var(--ink-500);border-bottom:1px solid var(--border);margin-bottom:10px;}
  .gr-tot b{font-family:var(--head);font-size:15px;color:var(--ink-900);}
  .gr-rep{border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:8px;}
  .gr-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;margin-bottom:2px;}
  .gr-v,.gr-x{display:grid;grid-template-columns:190px 1fr auto;gap:10px;align-items:start;padding:6px 0;border-top:1px solid var(--paper-200);font-size:11.5px;line-height:1.45;}
  .gr-v span:nth-child(2),.gr-x span:nth-child(2){overflow-wrap:anywhere;color:var(--ink-700);}
  .gr-id{font-family:var(--mono);font-size:9.5px;color:#a13422;overflow-wrap:anywhere;}
  .gr-mark{font-family:var(--head);font-weight:700;font-size:9px;letter-spacing:.06em;text-transform:uppercase;background:transparent;border:1px solid var(--border);color:var(--ink-400);border-radius:7px;padding:4px 8px;cursor:pointer;white-space:nowrap;}
  .gr-mark:hover{color:var(--ink-900);border-color:#a13422;}
  .gr-mark.on{background:color-mix(in oklch,#a13422 12%,#fff);border-color:#a13422;color:#a13422;}

  /* The override box. Amber, never red — an unverified report is a decision the owner is about to
     make, not an error they made. The failing checks are listed BEFORE the text field so the reason
     is written with them in view rather than from memory. */
  .ovr{border:1px solid color-mix(in oklch,var(--amber) 45%,var(--border));border-radius:12px;background:color-mix(in oklch,var(--amber) 7%,#fff);padding:14px 15px;margin-top:14px;}
  .ovr-h{font-family:var(--head);font-weight:800;font-size:14px;color:#8a5a09;line-height:1.3;}
  .ovr-l{font-family:var(--mono);font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:#a8791f;margin-top:11px;}
  .ovr-list{list-style:none;margin:7px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;max-height:150px;overflow:auto;}
  .ovr-list li{font-size:12.5px;line-height:1.45;color:var(--ink-700);background:#fff;border-radius:7px;padding:8px 10px;}
  .ovr-id{font-family:var(--mono);font-size:10px;color:var(--fairway-700);display:block;margin-bottom:2px;}
  .ovr textarea.fld{margin-top:7px;resize:vertical;}
  .ovr-hint{font-family:var(--mono);font-size:10.5px;color:var(--ink-500);margin-top:8px;display:flex;flex-wrap:wrap;gap:5px;align-items:center;line-height:1.6;}
  .ovr-term{font-family:var(--mono);font-size:10.5px;font-weight:600;border:1px solid color-mix(in oklch,var(--amber) 40%,var(--border));background:#fff;color:#8a5a09;border-radius:999px;padding:3px 9px;cursor:pointer;}
  .ovr-term:hover{background:color-mix(in oklch,var(--amber) 14%,#fff);}
  .ovr-note{font-family:var(--mono);font-size:10px;line-height:1.55;color:var(--ink-400);margin-top:9px;}
  .ovr-acts{display:flex;gap:8px;margin-top:11px;justify-content:flex-end;}
  /* deliver modal */
  .modal-bg{position:fixed;inset:0;background:rgba(14,32,24,.5);display:none;align-items:center;justify-content:center;z-index:60;padding:24px;}
  .modal-bg.open{display:flex;}
  .modal{background:#fff;border-radius:18px;width:100%;max-width:520px;box-shadow:0 30px 80px rgba(14,32,24,.32);overflow:hidden;display:flex;flex-direction:column;max-height:calc(100dvh - 48px);}
  .modal-h{display:flex;align-items:flex-start;justify-content:space-between;padding:22px 24px 16px;border-bottom:1px solid var(--border);flex-shrink:0;}
  .modal-h .mk{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--fairway-700);margin-bottom:7px;}
  .modal-h h3{font-family:var(--head);font-weight:800;font-size:22px;letter-spacing:-.01em;}
  .modal-x{border:none;background:none;font-size:24px;line-height:1;color:var(--ink-400);cursor:pointer;padding:0 4px;}
  .modal-x:hover{color:var(--ink-900);}
  .modal-b{padding:18px 24px 8px;overflow-y:auto;flex:1 1 auto;min-height:0;-webkit-overflow-scrolling:touch;}
  .modal-b label{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-500);margin:15px 0 7px;}
  .modal-b label.first{margin-top:0;}
  .modal-b .opt{color:var(--ink-500);text-transform:none;letter-spacing:0;}
  .fld{width:100%;font-family:var(--sans);font-size:14.5px;border:1px solid var(--border);border-radius:10px;padding:11px 13px;outline:none;background:#fff;color:var(--ink-900);}
  .fld:focus{border-color:var(--turf-600);box-shadow:0 0 0 3px rgba(42,148,96,.14);}
  select.fld{cursor:pointer;}
  .dm-note{font-size:12.5px;color:var(--ink-500);margin-top:16px;line-height:1.5;}
  .dm-drop-row{display:flex;align-items:center;gap:10px;background:var(--paper-50);border:1px solid var(--border);border-radius:9px;padding:9px 12px;margin-top:7px;font-size:13px;}
  .dm-drop-row .dn{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-700);}
  .dm-drop-row a{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--fairway-700);}
  .dm-drop-row a:hover{text-decoration:underline;}
  .dm-drop-empty{font-family:var(--mono);font-size:11px;color:var(--ink-400);margin-top:7px;}
  .dm-fut{font-family:var(--mono);font-size:11px;color:var(--ink-400);background:var(--paper-50);border:1px dashed var(--border);border-radius:9px;padding:9px 12px;margin-top:12px;}
  .modal-f{display:flex;justify-content:flex-end;gap:10px;padding:16px 24px 22px;flex-shrink:0;}

  .view{display:none;}
  .view.active{display:block;}
