  :root{
    --oak:#14100a; --oak2:#1d160d; --oak3:#271e12; --row:#221a10;
    --line:#3a2e1c; --line2:#4a3a22;
    --parch:#ece0c4; --parch2:#b8a981; --muted:#86765a;
    --gold:#e6b54a; --gold2:#f6d27a; --goldink:#3a2c0d;
    --gain:#7ec56f; --loss:#d4694b; --amber:#e0a23c;
    /* diurnal dip/peak are TIMING, not good/bad — a neutral cool(cheap-hours)/warm(pricey-hours) pair, NOT gain/loss green/red (Ben 2026-07-10) */
    --cool:#5f97b8; --warm:#cf8a4f;
    --shadow:0 1px 0 rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.35);
  }
  *{box-sizing:border-box}
  html,body{margin:0}
  body{background:radial-gradient(1200px 600px at 80% -10%, #251a0e 0%, transparent 60%), var(--oak);
    color:var(--parch); font-family:'Inter',system-ui,sans-serif; font-size:15px; line-height:1.45; -webkit-font-smoothing:antialiased; padding-bottom:48px}
  .num{font-family:'IBM Plex Mono',monospace; font-variant-numeric:tabular-nums; font-feature-settings:"tnum"}
  .gain{color:var(--gain)} .loss{color:var(--loss)} .gold{color:var(--gold)}
  .amber{color:var(--amber)}
  .mommuted{color:var(--muted)}   /* T1 Momentum column: clean/in-band '–' */
  .wrap{max-width:1220px; margin:0 auto; padding:0 18px}

  header{border-bottom:1px solid var(--line); background:linear-gradient(180deg,#1a130b,#140f08)}
  .bar{display:flex; align-items:center; gap:10px; padding:14px 0; flex-wrap:wrap}
  .brand{display:flex; flex-direction:column; line-height:1; margin-right:6px}
  .brand .mark{font-family:'Cinzel',serif; font-weight:700; letter-spacing:.14em; font-size:22px; color:var(--gold)}
  .brand .sub{font-size:11px; letter-spacing:.22em; text-transform:uppercase; color:var(--muted); margin-top:6px}
  .bar .spacer{flex:1}
  .bankfield{display:inline-flex; align-items:center; gap:9px; height:40px; padding:0 12px; background:var(--oak2); border:1px solid var(--line2); border-radius:8px}
  .bankfield>span{font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted); white-space:nowrap}
  .bankfield input{width:96px; height:38px; background:transparent; border:none; color:var(--parch); font-family:'IBM Plex Mono',monospace; font-size:14px; padding:0}
  .bankfield input:focus{outline:none}
  .bankfield:focus-within{border-color:var(--gold); box-shadow:0 0 0 2px rgba(230,181,74,.18)}
  .hbtn{height:40px; display:inline-flex; align-items:center; padding:0 15px; border-radius:8px; border:1px solid var(--line2); background:var(--oak2); color:var(--parch2); font-weight:600; font-size:13px; letter-spacing:.02em; cursor:pointer}
  .hbtn:hover{border-color:var(--gold); color:var(--parch)}
  .hbtn.primary{background:var(--gold); color:var(--goldink); border-color:var(--gold)}
  .hbtn.primary:hover{background:var(--gold2)}
  .hbtn:disabled{opacity:.5; cursor:default}
  .substamp{padding:0 0 9px; text-align:right; min-height:14px}
  .stamp{font-size:11px; color:var(--muted)} .stamp .num{color:var(--parch2)}
  .stamp a{color:var(--muted); text-decoration:underline; cursor:pointer; margin-left:8px}

  .coffer{display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:12px; overflow:hidden; margin:20px 0 8px; box-shadow:var(--shadow)}
  .coffer .cell{background:linear-gradient(180deg,var(--oak3),var(--oak2)); padding:16px 18px}
  .coffer .k{font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:var(--muted); display:flex; gap:7px; align-items:center}
  .coffer .k::before{content:""; width:7px; height:7px; border-radius:50%; background:var(--gold); opacity:.7}
  .coffer .v{font-family:'IBM Plex Mono',monospace; font-size:26px; font-weight:600; margin-top:8px; letter-spacing:-.01em}
  .coffer .meta{font-size:11px; color:var(--muted); margin-top:3px}
  .coffer .cell.lead .v{color:var(--gold)}

  .cofferbar{display:flex; align-items:center; gap:8px; background:none; border:none; color:var(--muted); font-family:'Cinzel',serif; letter-spacing:.14em; font-size:12px; text-transform:uppercase; cursor:pointer; padding:16px 2px 4px}
  .cofferbar:hover{color:var(--parch2)}
  .cbchev{display:inline-block; transition:transform .15s; color:var(--gold)}
  #cofferWrap.collapsed .cbchev{transform:rotate(-90deg)}
  #cofferWrap .coffer{margin-top:4px}
  #cofferWrap.collapsed .coffer{display:none}
  .coffercompact{display:none}
  #cofferWrap.collapsed .coffercompact{display:flex; gap:22px; flex-wrap:wrap; align-items:baseline; padding:13px 16px; border:1px solid var(--line); border-radius:10px; background:linear-gradient(180deg,var(--oak3),var(--oak2)); box-shadow:var(--shadow)}
  .coffercompact .ci{display:flex; gap:8px; align-items:baseline}
  .coffercompact .ck{font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted)}
  .coffercompact .cv{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:600}

  /* status banner + diagnostics log */
  .banner{display:none; margin:14px 0 0; border-radius:10px; border:1px solid var(--line2); padding:11px 14px; cursor:pointer; user-select:none}
  .banner.show{display:block}
  .banner.warn{background:rgba(224,162,60,.10); border-color:var(--amber)}
  .banner.error{background:rgba(212,105,75,.12); border-color:var(--loss)}
  .banner .bhead{display:flex; align-items:center; gap:9px; font-size:13px; color:var(--parch)}
  .banner .dot{width:8px; height:8px; border-radius:50%; flex:none}
  .banner.warn .dot{background:var(--amber)} .banner.error .dot{background:var(--loss)}
  .banner .btxt{flex:1} .banner .btxt b{font-weight:600; color:var(--gold)}
  .banner .bmore{font-size:11px; color:var(--muted); white-space:nowrap}
  .banner .blog{display:none; margin-top:10px; padding-top:10px; border-top:1px solid var(--line2); font-family:'IBM Plex Mono',monospace; font-size:11px; line-height:1.8; color:var(--parch2); max-height:180px; overflow:auto}
  .banner.open .blog{display:block}
  .banner .blog .le{white-space:nowrap}
  .banner .blog .lt{color:var(--muted)} .banner .blog .lw{color:var(--amber)} .banner .blog .ler{color:var(--loss)} .banner .blog .li{color:var(--parch2)}
  .banner .blog .empty2{color:var(--muted)}
  .ver{color:var(--gold); font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.08em; opacity:.85}
  .loglist{font-family:'IBM Plex Mono',monospace; font-size:12px; line-height:1.95; color:var(--parch2); max-height:62vh; overflow:auto}
  .loglist .le{white-space:nowrap}
  .loglist .lt{color:var(--muted)} .loglist .lw{color:var(--amber)} .loglist .ler{color:var(--loss)} .loglist .li{color:var(--parch2)}
  .loglist .empty2{color:var(--muted)}
  .mini .lw{color:var(--amber)} .mini .ler{color:var(--loss)} .mini .li{color:var(--parch2)}

  nav.tabs{display:flex; gap:4px; border-bottom:1px solid var(--line); margin-top:14px; flex-wrap:wrap}
  nav.tabs button{background:none; border:none; color:var(--parch2); padding:12px 15px; cursor:pointer; font-size:13px; font-weight:600; letter-spacing:.04em; border-bottom:2px solid transparent; position:relative; top:1px}
  nav.tabs button .badge{font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--muted); margin-left:6px}
  nav.tabs button.active{color:var(--gold); border-bottom-color:var(--gold)}
  nav.tabs button:hover{color:var(--parch)}

  .panel{padding:18px 0}
  .hidden{display:none !important}   /* utility: must beat later element rules like .chartgrid{display:grid} */

  .controls{display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin-bottom:14px}
  .controls input[type=text], .controls select{background:var(--oak2); border:1px solid var(--line2); color:var(--parch); border-radius:7px; padding:8px 11px; font-size:13px; font-family:inherit}
  .controls input[type=text]{min-width:170px; flex:1}
  .controls input:focus, .controls select:focus{outline:none; border-color:var(--gold)}
  .primarybtn{background:var(--gold); color:var(--goldink); border:none; border-radius:7px; padding:9px 16px; font-weight:600; font-size:13px; cursor:pointer}
  .primarybtn:hover{background:var(--gold2)}
  .ghostbtn{background:var(--oak2); color:var(--parch2); border:1px solid var(--line2); border-radius:7px; padding:8px 14px; font-size:13px; font-weight:600; cursor:pointer}
  .ghostbtn.sm{padding:7px 11px; font-size:11px}
  .ghostbtn:hover{border-color:var(--gold); color:var(--parch)}
  .slotsmini{display:flex; align-items:center; gap:6px; background:var(--oak2); border:1px solid var(--line2); border-radius:7px; padding:5px 10px; font-size:12px; color:var(--parch2)}
  .slotsmini input{width:42px; background:var(--oak); border:1px solid var(--line2); color:var(--parch); border-radius:5px; padding:5px 6px; font-family:'IBM Plex Mono',monospace; text-align:center; font-size:13px}
  .chip{display:inline-flex; align-items:center; gap:7px; background:var(--oak2); border:1px solid var(--line2); border-radius:20px; padding:7px 13px; font-size:12px; cursor:pointer; color:var(--parch2); user-select:none}
  .chip input{accent-color:var(--gold); margin:0}
  .chip.on{border-color:var(--gold); color:var(--parch)}

  /* T1.5 sticky header + first column. .tablewrap is the scroll container (both axes), bounded
     height so a long table scrolls INSIDE it while the header (and, on the flat Finder/Scan
     tables, the first column) freeze. Sticky cells need OPAQUE backgrounds — they overlap
     scrolled content — matching the row state: header = oak3, body first-col = oak, hover = row.
     The sticky HEADER is global (harmless on every table); the sticky FIRST COLUMN is scoped to
     the flat #finderTable / .scantable so the Ledger's grouped/detail rows (custom backgrounds)
     and the single-row .qtwrap quote tables are left untouched. */
  .tablewrap{overflow:auto; max-height:72vh; border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow)}
  table{width:100%; border-collapse:collapse; min-width:880px}
  thead th{position:sticky; top:0; z-index:2; background:var(--oak3); text-align:right; font-size:10px; letter-spacing:.13em; text-transform:uppercase; color:var(--muted); padding:11px 13px; font-weight:600; white-space:nowrap; cursor:pointer; border-bottom:1px solid var(--line)}
  thead th.left{text-align:left}
  thead th:not([data-k]){cursor:default}   /* TB1: only sortable headers (data-k) show the click cursor */
  thead th.sorted{color:var(--gold)}
  thead th .arrow{font-size:9px; margin-left:3px}
  tbody td{padding:10px 13px; text-align:right; border-bottom:1px solid var(--line); white-space:nowrap; font-size:13.5px}
  tbody td.left{text-align:left}
  tbody tr:hover{background:var(--row)}
  tbody tr:last-child td{border-bottom:none}
  /* sticky first column — flat opportunity tables only */
  #finderTable thead th.left, .scantable thead th.left{left:0; z-index:3}
  #finderTable tbody td.left, .scantable tbody td.left{position:sticky; left:0; z-index:1; background:var(--oak)}
  #finderTable tbody tr:hover td.left, .scantable tbody tr:hover td.left{background:var(--row)}
  /* single-row standard-quote tables (Trends plan card / Finder expander / position review): no
     bounded height needed — one data row, and the card supplies its own background. */
  .qtwrap{overflow-x:auto; max-height:none}
  .itemname{font-weight:500; color:var(--parch)}
  .linkname{font-weight:500; color:var(--parch); cursor:pointer; border-bottom:1px dotted var(--line2)}
  .linkname:hover{color:var(--gold)}
  .stale{color:var(--loss); font-size:10px; margin-left:6px; letter-spacing:.05em}
  .tbadge{display:inline-block; font-family:'IBM Plex Mono',monospace; font-weight:700; font-size:13px; margin-left:5px; cursor:help}
  .star{cursor:pointer; color:var(--muted); font-size:16px; line-height:1; background:none; border:none; padding:2px 4px}
  .star.on{color:var(--gold)}
  .ignbtn{cursor:pointer; font-size:15px; line-height:1; background:none; border:none; padding:2px 4px; opacity:.35; filter:grayscale(1)}
  .ignbtn.on{opacity:1; filter:none}
  .reasonsel{background:var(--oak2); color:var(--parch); border:1px solid var(--line2); border-radius:4px; padding:2px 6px; font-size:12px}
  .reasonsel option{background:var(--oak2); color:var(--parch)}
  .mini{font-size:11px; color:var(--muted)}
  .grade{display:inline-block; min-width:20px; text-align:center; font-weight:700; font-family:'IBM Plex Mono',monospace; border-radius:5px; padding:2px 6px; font-size:12px}
  /* S1: thin (gp-flow-only) grade flag — the big-ticket honesty marker; full text in its title tooltip */
  .thinflag{display:inline-block; margin-left:5px; font-size:10px; font-weight:600; letter-spacing:.3px; color:var(--amber); opacity:.85; cursor:help; vertical-align:middle}
  /* S3: watchlist section — always-shown items exempt from the scan floors/gates */
  .scanwatch{color:var(--gold)}
  .scanwatch .scanhint{color:var(--muted)}
  .rS{color:var(--gold); background:rgba(230,181,74,.16)}
  .rA{color:var(--gain); background:rgba(126,197,111,.12)}
  .rB{color:var(--parch); background:rgba(236,224,196,.08)}
  .rC{color:var(--amber); background:rgba(224,162,60,.12)}
  .rD{color:var(--loss); background:rgba(212,105,75,.13)}
  .scorebar{display:inline-flex; align-items:center; gap:8px; justify-content:flex-end}
  .scorebar .track{width:46px; height:5px; background:var(--oak); border-radius:3px; overflow:hidden}
  .scorebar .fillb{height:100%; background:linear-gradient(90deg,var(--gold),var(--gold2))}
  .scorebar .n{font-family:'IBM Plex Mono',monospace; font-size:12px; color:var(--parch2); width:24px; text-align:right}

  .scanintro{margin-top:20px; padding-top:14px; border-top:1px solid var(--line); line-height:1.55; color:var(--parch2); max-width:820px}
  .scanintro code{font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--parch)}
  .scananalysis{margin:0 0 16px; padding:12px 14px; border:1px solid var(--line); border-left:3px solid var(--gold);
    border-radius:8px; background:rgba(0,0,0,.14); color:var(--parch2); font-size:13px; line-height:1.55; max-width:820px}
  .scananalysis :first-child{margin-top:0}
  .scananalysis :last-child{margin-bottom:0}
  .scanhead{display:flex; align-items:center; gap:12px; margin-bottom:10px; flex-wrap:wrap}
  .scanmeta{flex:1; min-width:200px; font-size:12px; color:var(--parch2); letter-spacing:.02em}
  .scanmeta b{color:var(--gold); font-weight:700}
  .scanstale{margin-bottom:14px; border:1px solid var(--line2); border-radius:10px; padding:9px 13px; font-size:12px; color:var(--parch2)}
  .scanstale.warn{background:rgba(224,162,60,.10); border-color:var(--amber)}
  .scanstale b{color:var(--gold); font-weight:600}
  .scantier{font-family:'Cinzel',serif; color:var(--gold); font-size:13px; letter-spacing:.06em; margin:16px 0 8px}
  .scantier:first-child{margin-top:0}
  .scanhint{font-family:inherit; color:var(--muted); font-size:11px; letter-spacing:0; text-transform:none}
  /* Niches start collapsed (Ben, 2026-07-16) — <details>/<summary>, summary reuses .scantier's look
     with a cursor + open/closed marker; the table only exists in the DOM once expanded is irrelevant
     here (it's already rendered, just hidden by <details> — cheap, no re-fetch on expand). */
  details.scansection{margin:0}
  details.scansection > summary.scantier{cursor:pointer; list-style:none; user-select:none}
  details.scansection > summary.scantier::-webkit-details-marker{display:none}
  details.scansection > summary.scantier::before{content:'▸ '; display:inline-block; font-size:10px; transition:transform .12s}
  details.scansection[open] > summary.scantier::before{transform:rotate(90deg)}
  .scantable thead th{cursor:default}
  .scannone{padding:16px 14px; color:var(--muted); font-size:13px; border:1px solid var(--line); border-radius:12px}

  .empty{padding:42px 20px; text-align:center; color:var(--parch2)}
  .empty .big{font-family:'Cinzel',serif; color:var(--gold); font-size:18px; letter-spacing:.06em; margin-bottom:8px}
  .empty .sm{font-size:13px; color:var(--muted); max-width:460px; margin:0 auto}
  .empty button{margin-top:16px; background:var(--gold); color:var(--goldink); border:none; border-radius:7px; padding:9px 18px; font-weight:600; cursor:pointer}

  /* vertical stack, capped width — toggling buy/sell swaps one row without reflowing the whole form */
  .ledgerform{display:flex; flex-direction:column; gap:12px; max-width:340px; margin-bottom:18px; background:var(--oak2); border:1px solid var(--line); border-radius:12px; padding:16px}
  .ledgerform .fld{display:flex; flex-direction:column; gap:6px}
  .ledgerform label{font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted)}
  .ledgerform input{width:100%; box-sizing:border-box; background:var(--oak); border:1px solid var(--line2); color:var(--parch); border-radius:7px; padding:9px 11px; font-size:13px; font-family:'IBM Plex Mono',monospace}
  .ledgerform input:focus{outline:none; border-color:var(--gold)}
  .ledgerform .segtoggle{display:flex; width:100%}       /* full-width so both toggles match; buttons split evenly */
  .ledgerform .segtoggle button{flex:1; text-align:center; padding:7px 0}
  .ledgerform button.go{width:100%; background:var(--gold); color:var(--goldink); border:none; border-radius:7px; padding:11px 18px; font-weight:600; cursor:pointer; margin-top:2px}
  .act{background:var(--oak3); color:var(--parch2); border:1px solid var(--line2); border-radius:6px; padding:5px 10px; font-size:11px; cursor:pointer; font-weight:600}
  .act:hover{border-color:var(--gold); color:var(--parch)}
  .act.danger:hover{border-color:var(--loss); color:var(--loss)}
  .sectlabel{font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--muted); margin:22px 2px 9px}

  .chartgrid{display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-bottom:14px}
  .chartcard{background:var(--oak2); border:1px solid var(--line); border-radius:12px; padding:14px 16px}
  .ctitle{font-size:12px; font-weight:600; color:var(--parch); margin-bottom:10px; letter-spacing:.02em}
  .ctitle .csub{color:var(--muted); font-weight:400; font-size:11px; margin-left:4px}
  .ccap{font-size:11px; color:var(--muted); margin-top:8px}
  svg.chart{width:100%; height:auto; display:block}
  .axislbl{fill:var(--muted); font-size:9px; font-family:'IBM Plex Mono',monospace}
  .pline{fill:none; stroke:var(--gold); stroke-width:2}
  .parea{fill:rgba(230,181,74,.08)}
  /* TV forecast cone: a second (overlay) line + the shaded band between the two projected paths */
  .pline.overlay{stroke:var(--cool); stroke-width:1.5; opacity:.85}
  .fcone{fill:rgba(95,151,184,.14)}
  .baseln{stroke:var(--line2); stroke-width:1; stroke-dasharray:3 3}
  .dotmin{fill:var(--gain)} .dotmax{fill:var(--loss)}
  .vbar{fill:var(--line2)} .vbar.peak{fill:var(--gold)}
  /* T2 recent-movement chart: 2h band edges (muted dashed) + live buy/sell (gold), and the "now"
     vertical marker on the hourly charts. */
  .refband{stroke:var(--line2); stroke-width:1; stroke-dasharray:4 3}
  .reflive{stroke:var(--gold); stroke-width:1; stroke-dasharray:2 2; opacity:.75}
  .reflbl{fill:var(--muted); font-size:8px}
  .nowmark{stroke:var(--parch2); stroke-width:1; stroke-dasharray:2 3; opacity:.7}

  /* CL: interactive chart (js/chartlib.js) — span selector, hover tooltip, gridlines, crosshair. */
  .ichart{position:relative}
  .ichart-svg{touch-action:none; cursor:grab; user-select:none}
  .ichart-svg:active{cursor:grabbing}
  .chartspans{display:flex; gap:6px; margin-bottom:8px; flex-wrap:wrap}
  .chartspan{background:var(--oak2); color:var(--parch2); border:1px solid var(--line2); border-radius:7px; padding:3px 10px; font-size:11px; font-weight:600; letter-spacing:.02em; cursor:pointer}
  .chartspan:hover:not(:disabled){border-color:var(--gold); color:var(--parch)}
  .chartspan.on{background:var(--gold); color:var(--goldink); border-color:var(--gold)}
  .chartspan:disabled{opacity:.35; cursor:default}
  .cgrid{stroke:var(--line); stroke-width:.5; opacity:.5}
  .cband{fill:rgba(230,181,74,.07)}
  .cband.dipband{fill:rgba(95,151,184,.12)} .cband.peakband{fill:rgba(207,138,79,.12)}
  /* TV: term-structure floor/ceiling overlay (durable multi-week support band) — muted teal, distinct from the gold live line */
  .reffloor{stroke:var(--cool); stroke-width:1; stroke-dasharray:5 3; opacity:.7}
  .cband.floorband{fill:rgba(95,151,184,.08)}
  /* TV: inform-only validator note under a viz (floor/trajectory, reach, forecast caveat) */
  .vnote{margin-top:5px}
  .cxhair{stroke:var(--gold); stroke-width:.75; stroke-dasharray:2 2; opacity:.6; pointer-events:none}
  .cxdot{fill:var(--gold); pointer-events:none}
  .charttip{position:absolute; z-index:5; pointer-events:none; background:var(--oak3); border:1px solid var(--line2); border-radius:7px; padding:5px 8px; font-size:11px; font-family:'IBM Plex Mono',monospace; color:var(--parch); box-shadow:var(--shadow); max-width:150px; line-height:1.4}
  .charttip b{color:var(--gold)}
  /* diurnal bars: dip hours (green low) vs peak hours (red high) */
  .vbar.dip{fill:var(--cool)} .vbar.peak2{fill:var(--warm)}
  .dpleg{display:inline-flex; gap:12px; align-items:center; font-size:10px; color:var(--parch2); margin-left:2px}
  .dpleg i{display:inline-block; width:9px; height:9px; border-radius:2px; margin-right:4px; vertical-align:-1px}
  .dpleg .sw-dip{background:var(--cool)} .dpleg .sw-peak{background:var(--warm)}
  .dpleg .sw-buy{background:var(--gold)} .dpleg .sw-sell{background:var(--cool)}

  /* collapsible disclosures (Why this trend? · Timing & seasonality) */
  details.disc{background:var(--oak2); border:1px solid var(--line); border-radius:12px; margin-bottom:16px}
  details.disc>summary{list-style:none; cursor:pointer; padding:14px 16px; font-size:12px; font-weight:600; color:var(--parch); letter-spacing:.02em; display:flex; align-items:center; gap:8px}
  details.disc>summary::-webkit-details-marker{display:none}
  details.disc>summary::before{content:"▸"; color:var(--gold); transition:transform .15s}
  details.disc[open]>summary::before{transform:rotate(90deg)}
  details.disc>summary .discsum{color:var(--muted); font-weight:400}
  details.disc>summary:hover{color:var(--gold)}
  details.disc .discbody{padding:0 16px 16px; font-size:13.5px; line-height:1.6; color:var(--parch2)}
  details.disc .discbody b{color:var(--parch)} details.disc .discbody .hl{color:var(--gold); font-weight:600}
  details.disc .chartgrid{padding:0 16px 16px; margin-bottom:0}

  .suggest{background:linear-gradient(180deg,#2c2110,#201808); border:1px solid var(--gold); border-radius:12px; padding:16px 18px; margin-bottom:16px; box-shadow:var(--shadow)}
  .trhead{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:14px}
  .trhead-name{font-family:'Cinzel',serif; font-size:18px; color:var(--gold); letter-spacing:.04em}
  .qtag{font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--amber); border:1px solid var(--line2); border-radius:20px; padding:4px 10px}
  .srctag{font-size:9px; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); border:1px solid var(--line2); border-radius:10px; padding:1px 6px; vertical-align:middle; cursor:help}
  .trhead-acts{margin-left:auto; display:flex; gap:8px}
  .tgl{background:var(--oak2); color:var(--parch2); border:1px solid var(--line2); border-radius:7px; padding:7px 12px; font-size:12px; font-weight:600; cursor:pointer}
  .tgl:hover{border-color:var(--gold); color:var(--parch)}
  .tgl.on{background:var(--gold); color:var(--goldink); border-color:var(--gold)}
  .matchhead{font-size:13px; color:var(--parch2); margin-bottom:12px; line-height:1.5}
  .suggest .stitle{font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--gold); margin-bottom:12px}
  .sgrid{display:grid; grid-template-columns:repeat(4,1fr); gap:12px}
  .sbox{background:rgba(0,0,0,.25); border:1px solid var(--line2); border-radius:9px; padding:12px}
  .sbox .sk{font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--muted)}
  .sbox .sv{font-family:'IBM Plex Mono',monospace; font-size:16px; color:var(--parch); margin-top:6px}
  .sbox .ss{font-size:11px; color:var(--muted); margin-top:4px; line-height:1.4}
  .sreason{margin-top:14px; padding-top:13px; border-top:1px solid var(--line2); font-size:13.5px; line-height:1.7; color:var(--parch2)}
  .sreason b{color:var(--parch)} .sreason .hl{color:var(--gold); font-weight:600} .sreason i{color:var(--parch2)}
  /* T2 sectioned plan blurb — small labeled blocks at the .stitle scale; plain blocks, not collapsibles */
  .rsec{margin-top:13px}
  .rsec-h{font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--gold); margin-bottom:5px; font-weight:600}
  .rsec.warn{border-left:2px solid var(--loss); padding-left:11px}
  .rsec.warn .rsec-h{color:var(--loss)}
  .rsec-b{font-size:13.5px; line-height:1.7; color:var(--parch2)}
  .rsec-b b{color:var(--parch)}
  .rsec-i{margin-bottom:6px} .rsec-i:last-child{margin-bottom:0}
  @media(max-width:720px){ .sgrid{grid-template-columns:1fr 1fr} }
  footer{margin-top:30px; padding-top:16px; border-top:1px solid var(--line); color:var(--muted); font-size:11px; line-height:1.7}
  footer strong{color:var(--parch2)}

  @media(max-width:720px){
    .coffer{grid-template-columns:1fr}
    .coffer .v{font-size:22px}
    .chartgrid{grid-template-columns:1fr}
    .ledgerform{max-width:none}   /* full-width stack on narrow screens */
    .bankfield input{width:84px}
  }

/* Ledger: controls + per-item grouping + period P&L (0.21.0) */
.ledgerctl{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.lchk{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--parch2);cursor:pointer}
.lchk input{cursor:pointer}
.lperiod{display:inline-flex;align-items:center;gap:4px}
.lperiod .lpk{font-size:12px;color:var(--parch2);margin-right:4px}
.lperiod button{background:transparent;border:1px solid var(--line);color:var(--parch2);border-radius:8px;padding:3px 10px;font-size:12px;cursor:pointer}
.lperiod button.on{background:var(--gold);border-color:var(--gold);color:#1a1408;font-weight:700}
tr.grp.clk{cursor:pointer}
tr.grp.clk:hover{background:rgba(255,255,255,0.03)}
.caret{display:inline-block;width:14px;color:var(--parch2);font-size:11px}
/* LU1.1: expansion chevron button on multi-lot groups (replaces the old row-click-to-expand) */
.expbtn{display:inline-block;width:16px;padding:0;margin-right:2px;background:transparent;border:none;color:var(--parch2);font-size:11px;cursor:pointer;vertical-align:baseline}
.expbtn:hover{color:var(--gold)}
/* LU1.2: the P&L-by control now rides the "Closed flips" section label */
.sectlabel.closedhdr{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.sectlabel .lperiod{letter-spacing:normal;text-transform:none}
.cnt{color:var(--parch2);font-size:12px;font-weight:600}
tr.detail{background:rgba(0,0,0,0.15)}

/* standard market table (quotecore/quote.js) — Finder expander, Trends plan card, position review (0.28.0) */
.qtwrap{margin-bottom:12px}
.qtbl{min-width:560px}
.qtbl thead th{cursor:default}
tr.qrow>td{padding:12px 13px; background:rgba(0,0,0,0.18)}
tr.qrow .qtwrap{margin-bottom:0}
.qflag{font-size:10px; letter-spacing:.08em; text-transform:uppercase; margin-left:6px; cursor:help}
.suggest .qtbl thead th{background:rgba(0,0,0,.25)}
tr.detail td{color:var(--parch2);font-size:12px;border-top:none}
td.left.sub{padding-left:22px}
.periodstrip{margin:8px 0 12px}
.pstitle{font-size:12px;color:var(--parch2);margin-bottom:6px}
.pscells{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px}
.pcell{flex:0 0 auto;min-width:92px;border:1px solid var(--line);border-radius:10px;padding:7px 10px;text-align:right;cursor:pointer}
/* LU1.3: buckets are clickable filters; the active one and the "All" pill highlight in gold */
.pcell:hover{border-color:var(--parch2)}
.pcell.on{border-color:var(--gold);background:rgba(212,175,55,0.08)}
.pcell.allpill{min-width:0;display:flex;align-items:center;text-align:center;color:var(--parch2);font-size:12px;font-weight:600}
.pcell.allpill.on{color:var(--gold)}
.pcell .pclear{color:var(--gold);font-weight:700}
.pcell .pl{font-size:11px;color:var(--parch2)}
.pcell .pv{font-size:14px;font-weight:700}
.pcell .pc{font-size:10px;color:var(--parch2)}
.trhead-vol{font-size:12px;color:var(--parch2);margin-left:10px}
.segtoggle{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.segtoggle button{background:transparent;border:none;color:var(--parch2);padding:6px 14px;font-size:13px;cursor:pointer}
.segtoggle button+button{border-left:1px solid var(--line)}
.segtoggle button.on{background:var(--gold);color:#1a1408;font-weight:700}

/* fills-log link control + optimistic pending rows */
.fillslink{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.fillslink .ghostbtn.linked{border-color:var(--gold);color:var(--gold)}
.fillslink .mini{color:var(--parch2)}
.srctag.pend{color:var(--gold);border-color:var(--gold)}
tr.detail.pend td{opacity:.85}

/* M1: fills freshness banner + Refresh-positions (Ledger); Coffer staleness chip */
.fillsfresh{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  border:1px solid var(--line2);border-radius:10px;padding:9px 13px;margin-bottom:12px;color:var(--parch2)}
.fillsfresh.warn{background:rgba(224,162,60,.10);border-color:var(--amber)}
.fillsfresh b{color:var(--gold);font-weight:600}
.fillsfresh .ghostbtn{flex:0 0 auto}
.cofferstale{font-size:11px;font-weight:600;color:var(--amber);border:1px solid var(--amber);
  border-radius:999px;padding:1px 8px;margin-left:8px;vertical-align:middle}

/* M1: GitHub-sync (mobile write path) settings panel */
.ghsync{margin-bottom:14px;border:1px solid var(--line);border-radius:12px;background:var(--oak2);padding:6px 12px}
.ghsync>summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--parch2);padding:6px 0;list-style:none}
.ghsync>summary::-webkit-details-marker{display:none}
.ghsync>summary::before{content:'▸ ';color:var(--parch2)}
.ghsync[open]>summary::before{content:'▾ '}
.ghsync>summary .mini{font-weight:400;color:var(--muted)}
/* LU1.4: manual-entry form collapsed by default in a <details> */
.ledgerformd{margin-bottom:12px}
.ledgerformd>summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--parch2);padding:6px 0;list-style:none}
.ledgerformd>summary::-webkit-details-marker{display:none}
.ledgerformd>summary::before{content:'▸ ';color:var(--gold)}
.ledgerformd[open]>summary::before{content:'▾ '}
.ledgerformd>summary:hover{color:var(--gold)}
.ghsrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:8px 0}
.ghsrow input{flex:1 1 220px;min-width:0;box-sizing:border-box;background:var(--oak);border:1px solid var(--line2);
  color:var(--parch);border-radius:7px;padding:10px 11px;font-size:13px;font-family:'IBM Plex Mono',monospace}
.ghsrow input:focus{outline:none;border-color:var(--gold)}
#ghSyncStatus{color:var(--parch2);margin-bottom:8px;line-height:1.6}

/* M1: thumb-friendly quick-add on narrow screens — bigger tap targets across the ledger form */
@media(max-width:720px){
  .ledgerform{padding:14px}
  .ledgerform input{padding:13px 12px;font-size:16px}   /* 16px avoids iOS input-zoom */
  .ledgerform .segtoggle button{padding:11px 0;font-size:14px}
  .ledgerform button.go{padding:15px 18px;font-size:15px}
  .ghsrow input{padding:13px 12px;font-size:16px}
  .fillsfresh .ghostbtn{padding:10px 14px}
}
tr.detail.pend td.pend{color:var(--gold);font-style:italic}


  /* ===== WATCH tab (0.49.0) — the at-a-glance flipping desk. All classes are w-prefixed and
     scoped under #panel-watch so nothing collides with the app's existing .stale/.card/.cell/etc.
     Ported from the approved 2026-07-05 mockup onto the app's tokens (single dark theme). ===== */
  #panel-watch .watchpane{max-width:100%}
  /* freshness stamps */
  #panel-watch .wstamps{display:flex; gap:18px; flex-wrap:wrap; padding:2px 0 0; font-size:11px; color:var(--muted)}
  #panel-watch .wstamps b{color:var(--parch2); font-weight:600}
  #panel-watch .wdot{display:inline-block; width:7px; height:7px; border-radius:50%; margin-right:6px; vertical-align:1px; background:var(--muted)}
  #panel-watch .wdot.ok{background:var(--gain)} #panel-watch .wdot.warn{background:var(--amber)}
  /* summary strip */
  #panel-watch .wsummary{display:grid; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:1px; background:var(--line);
    border:1px solid var(--line); border-radius:12px; overflow:hidden; margin:14px 0 8px; box-shadow:var(--shadow)}
  #panel-watch .wcell{background:linear-gradient(180deg,var(--oak3),var(--oak2)); padding:13px 15px}
  #panel-watch .wk{font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted)}
  #panel-watch .wv{font-size:21px; font-weight:600; margin-top:6px; letter-spacing:-.01em}
  #panel-watch .wm{font-size:11px; color:var(--muted); margin-top:2px}
  @media(max-width:640px){ #panel-watch .wsummary{grid-template-columns:repeat(2,1fr)} }
  /* section heads */
  #panel-watch .wh2{font-family:'Cinzel',serif; font-size:13px; letter-spacing:.2em; text-transform:uppercase;
    color:var(--parch2); margin:24px 0 10px; display:flex; align-items:baseline; gap:10px}
  #panel-watch .wcnt{font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--muted); letter-spacing:0}
  /* verdict-first held cards — severity stripe on the left */
  #panel-watch .wcard{border:1px solid var(--line); border-left-width:4px; border-radius:10px; overflow:hidden;
    background:linear-gradient(180deg,var(--oak3),var(--oak2)); box-shadow:var(--shadow); margin-bottom:12px}
  #panel-watch .wcard.hold{border-left-color:var(--gain)}
  #panel-watch .wcard.watch{border-left-color:var(--amber)}
  #panel-watch .wcard.cut{border-left-color:var(--loss)}
  #panel-watch .whead{display:flex; align-items:center; gap:10px; padding:12px 14px 0; flex-wrap:wrap}
  #panel-watch .winame{font-weight:600; font-size:15px}
  #panel-watch .winame .linkname{font-size:15px; font-weight:600}
  #panel-watch .wqty{color:var(--muted); font-weight:400}
  #panel-watch .wpill{padding:2px 10px; border-radius:99px; font-size:11px; font-weight:700; letter-spacing:.05em;
    font-family:'IBM Plex Mono',monospace; white-space:nowrap}
  #panel-watch .wpill.hold{background:rgba(126,197,111,.14); color:var(--gain); border:1px solid rgba(126,197,111,.4)}
  #panel-watch .wpill.watch{background:rgba(224,162,60,.13); color:var(--amber); border:1px solid rgba(224,162,60,.4)}
  #panel-watch .wpill.cut{background:rgba(212,105,75,.14); color:var(--loss); border:1px solid rgba(212,105,75,.4)}
  #panel-watch .wpill.bidok{background:rgba(230,181,74,.12); color:var(--gold); border:1px solid rgba(230,181,74,.35)}
  #panel-watch .wmom{font-size:12px; color:var(--muted)}
  #panel-watch .wmommut{color:var(--muted)}
  #panel-watch .wsp{flex:1}
  #panel-watch .wpnl{font-size:13px; white-space:nowrap}
  #panel-watch .wgrid{display:grid; grid-template-columns:repeat(4,1fr); gap:0 14px; padding:10px 14px 4px}
  @media(max-width:640px){ #panel-watch .wgrid{grid-template-columns:repeat(2,1fr)} }
  #panel-watch .wcg .wk{font-size:10px; letter-spacing:.12em}
  #panel-watch .wcg .wv{font-size:14px; font-weight:400; margin:3px 0 10px}
  #panel-watch .waction{margin:0 14px 8px; padding:9px 12px; border-radius:8px; font-size:13px; line-height:1.5;
    background:rgba(230,181,74,.07); border:1px dashed var(--line2)}
  #panel-watch .waction b{color:var(--gold)}
  #panel-watch .waction.cut{background:rgba(212,105,75,.08)}
  #panel-watch .waction.cut b{color:var(--loss)}
  #panel-watch .wctx{margin:0 14px 12px; font-size:11.5px; color:var(--muted); line-height:1.55}
  #panel-watch .wctx .lbl{color:var(--parch2); font-weight:600}
  #panel-watch .wnote-edit,#panel-watch .wnote-add{background:none; border:none; color:var(--muted); cursor:pointer;
    font-size:11.5px; padding:0 2px}
  #panel-watch .wnote-edit:hover,#panel-watch .wnote-add:hover{color:var(--gold)}
  #panel-watch .wcte{display:flex; gap:6px; align-items:center; flex-wrap:wrap}
  #panel-watch .wnote-input{flex:1; min-width:180px; background:var(--oak); border:1px solid var(--line2); color:var(--parch);
    border-radius:6px; padding:6px 9px; font-size:12px; font-family:inherit}
  #panel-watch .wnote-input:focus{outline:none; border-color:var(--gold)}
  #panel-watch .wnote-save,#panel-watch .wnote-cancel{background:var(--oak2); border:1px solid var(--line2); color:var(--parch2);
    border-radius:6px; padding:5px 11px; font-size:12px; font-weight:600; cursor:pointer}
  #panel-watch .wnote-save{background:var(--gold); color:var(--goldink); border-color:var(--gold)}
  #panel-watch .wincid{color:var(--muted); font-size:11.5px; padding:4px 2px 2px; line-height:1.6}
  /* offers */
  #panel-watch .wstale{display:flex; gap:9px; align-items:flex-start; margin:0 0 10px; padding:10px 13px; border-radius:9px;
    border:1px solid var(--amber); background:rgba(224,162,60,.10); font-size:12.5px; color:var(--parch); line-height:1.5}
  #panel-watch .wstale .wdot2{width:8px; height:8px; border-radius:50%; background:var(--amber); flex:none; margin-top:5px}
  #panel-watch .wstale b{color:var(--gold)}
  #panel-watch .woffer{display:flex; align-items:center; gap:12px; padding:11px 14px; border:1px solid var(--line);
    border-radius:9px; background:var(--oak2); margin-bottom:8px; flex-wrap:wrap}
  #panel-watch .wfillbar{flex:none; width:110px; max-width:40vw; height:6px; border-radius:99px; background:var(--row); overflow:hidden}
  #panel-watch .wfillbar i{display:block; height:100%; background:var(--gold); border-radius:99px}
  #panel-watch .wfn{font-size:12px; color:var(--muted)}
  #panel-watch .wctxnote{font-size:11.5px; color:var(--muted); text-align:right}
  /* fills feed */
  #panel-watch .wfills{border:1px solid var(--line); border-radius:10px; overflow:hidden; background:var(--oak2)}
  #panel-watch .wfill{display:flex; align-items:baseline; gap:10px; padding:9px 14px; border-bottom:1px solid var(--line);
    font-size:13.5px; flex-wrap:wrap}
  #panel-watch .wfill:last-child{border-bottom:none}
  #panel-watch .wfill.wempty{color:var(--muted); font-size:12.5px; justify-content:flex-start}
  #panel-watch .wfill time{font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:var(--muted); flex:none; width:44px}
  #panel-watch .wside{font-family:'IBM Plex Mono',monospace; font-size:11px; font-weight:700; width:38px; flex:none}
  #panel-watch .wside.sell{color:var(--gain)} #panel-watch .wside.buy{color:var(--gold)}
  #panel-watch .wmuted{color:var(--muted)}
  #panel-watch .wempty2{color:var(--muted); font-size:12.5px; padding:2px 2px 10px}
  /* tab badge turns loss-red when it carries an alert count */
  nav.tabs button .badge.alertbadge{color:var(--loss); font-weight:700}
