/* =====================================================================
   KAIROS — all styles. Core terminal, then Zero/Aether cards, then Nexus.
   ===================================================================== */

:root{--bg:#07080d;--panel:#0d1017;--panel2:#12151e;--border:#1d2330;--text:#e9edf5;--muted:#6d7688;--cyan:#22d3ee;--pika:#f2c14e;--gold:#f2c14e;--barney:#a855f7;--green:#34d399;--red:#f87171;--teal:#2dd4bf}
*{box-sizing:border-box;margin:0;padding:0}body{font-family:Inter,system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh}
.mono{font-family:'JetBrains Mono',monospace}
/* user-select:none kills the text caret that appeared when clicking the empty
   space past the last nav button. Chrome will place a caret in any selectable
   text container it considers clickable; the header is chrome, not content. */
header{-webkit-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between;padding:9px 16px;background:linear-gradient(180deg,#0b0d14,#090b10);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50}
.logo{font-weight:700;font-size:1.02rem;letter-spacing:.34em;display:flex;align-items:center;gap:10px;text-transform:uppercase}
.logo span{color:var(--gold);text-shadow:0 0 16px #f2c14e55;font-size:.85rem}
header{gap:10px}
.hdr-nav,.hdr-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.hdr-nav{flex:1 1 auto}
.hdr-tools{flex:0 0 auto;justify-content:flex-end}
.btn{background:transparent;border:1px solid transparent;color:var(--muted);padding:5px 11px;border-radius:7px;font-size:.74rem;cursor:pointer;font-family:inherit;transition:color .15s,border-color .15s}
.btn:hover{color:var(--text)}
.btn.primary{background:var(--gold);color:#0a0a08;border:none;font-weight:700}
.btn.primary:hover{color:#000;filter:brightness(1.06)}
#btnSettings,#btnHelp{border-color:var(--border);color:var(--muted)}
#btnSettings:hover,#btnHelp:hover{color:var(--text);border-color:#2a3140}
@media(prefers-reduced-motion:no-preference){
  .king-pill{animation:kglow 2.6s ease-in-out infinite}
  @keyframes kglow{0%,100%{box-shadow:0 0 0 0 #f2c14e00}50%{box-shadow:0 0 14px 0 #f2c14e33}}
}
.btn.active{border-color:var(--cyan);background:#00e5ff18;color:var(--cyan)}
select,input{background:var(--panel2);border:1px solid var(--border);color:var(--text);padding:5px 8px;border-radius:5px;font-size:.76rem;font-family:inherit}
/* metric toggle — GEX / VEX */
.mtoggle{display:inline-flex;border:1px solid var(--border);border-radius:7px;overflow:hidden}
.mtoggle button{background:transparent;border:none;color:var(--muted);padding:5px 9px;font-size:.72rem;font-weight:700;cursor:pointer;font-family:inherit;letter-spacing:.03em;transition:background .15s,color .15s}
.mtoggle button:hover{color:var(--text)}
.mtoggle button[data-m="gex"].on{background:var(--gold);color:#0a0a08}
.mtoggle button[data-m="vex"].on{background:var(--cyan);color:#04121a}
.mtoggle.dim{opacity:.35;pointer-events:none}
#centertoggle button[data-c="spot"].on{background:var(--cyan);color:#04121a}
#centertoggle button[data-c="king"].on{background:var(--gold);color:#0a0a08}
#presetBar{display:flex;gap:5px;flex-wrap:wrap;align-items:center;padding:2px 2px 0}
.pchip{background:var(--panel2);border:1px solid var(--border);color:var(--muted);padding:4px 11px;border-radius:7px;font-size:.74rem;font-weight:700;font-family:'JetBrains Mono';cursor:pointer;letter-spacing:.02em;transition:color .12s,border-color .12s,background .12s;flex:0 0 auto}
.pchip:hover{color:var(--text);border-color:#2a3140}
.pchip.on{background:#00e5ff18;border-color:var(--cyan);color:var(--cyan)}
@media(max-width:760px){
  #presetBar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:3px}
  #presetBar::-webkit-scrollbar{display:none}
  .pchip{padding:4px 9px;font-size:.68rem}
}
.banner{background:#0a1218;border-bottom:1px solid #152028;padding:5px 14px;font-size:.7rem;color:var(--muted);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.banner .live{color:var(--green);font-weight:600}
#sessInfo{color:var(--muted)}
main{padding:10px;display:flex;flex-direction:column;gap:10px}
/* ═══ PANTHEON ═══ pillars side by side, never stacked. Count arrives as
   --panth-cols from renderTrinity so 3, 4 and 5 share one declaration. */
/* ---- COSMOS grid --------------------------------------------------------
   Five pillars maximum. Desktop lays them out evenly; phones show four across
   and scroll sideways for the fifth, because a ladder narrower than a quarter
   of a phone screen is unreadable. */
.trinity{display:grid;gap:3px;grid-template-columns:repeat(var(--panth-cols,3),minmax(0,1fr))}
.trinity[data-cols="5"]{gap:2px}
/* Narrow pillars need a narrower head or the ticker select shoves out the price. */
.trinity[data-cols="4"] .ticker-sel,.trinity[data-cols="5"] .ticker-sel{max-width:70px;font-size:.86rem}
.trinity[data-cols="5"] .p-head{padding:7px}
.trinity[data-cols="5"] .price{font-size:.8rem}
.trinity[data-cols="5"] .king-pill{font-size:.6rem;padding:2px 6px}
@media(max-width:1400px){.trinity[data-cols="5"] .badge-src{display:none}}
@media(max-width:720px){
  .trinity{display:flex;overflow-x:auto;scroll-snap-type:x proximity;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;gap:2px;padding-bottom:2px}
  .trinity::-webkit-scrollbar{display:none}
  .trinity>*{flex:0 0 calc(25% - 2px);scroll-snap-align:start;min-width:0}
  .trinity[data-cols="3"]>*{flex:0 0 calc(33.33% - 2px)}
  .trinity .ticker-sel{max-width:58px;font-size:.74rem}
  .trinity .price{font-size:.7rem}
  .trinity .badge-src{display:none}
}
.panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column;height:calc(100vh - 172px);min-height:540px;overflow:hidden}
.panel.single-mode{max-height:none;min-height:580px}
.p-head{padding:8px 10px;background:var(--panel2);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:6px;flex-shrink:0}
.p-left{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ticker-sel{font-weight:700;font-size:.95rem;max-width:88px}
.price{font-family:'JetBrains Mono';font-size:.9rem}
.badge-src{font-size:.6rem;padding:1px 5px;border-radius:3px;font-weight:600}
.badge-src.live{background:#22c55e22;color:var(--green)}.badge-src.sandbox{background:#f59e0b22;color:#f59e0b}
.badge-src.cboe{background:#38bdf822;color:#38bdf8}.badge-src.demo{background:#f2c14e22;color:var(--pika)}
.badge-src.stale{background:#f8717122;color:#f87171}
.king-pill{background:linear-gradient(135deg,#f2c14e30,#f2c14e12);border:1px solid #f2c14e77;color:var(--pika);font-size:.66rem;padding:2px 8px;border-radius:12px;font-weight:700;white-space:nowrap}
.king-pill.vex{background:linear-gradient(135deg,#22d3ee30,#22d3ee12);border-color:#22d3ee77;color:var(--cyan)}
.strikes{overflow-y:auto;flex:1;scrollbar-width:thin;scrollbar-color:#2a3140 transparent}
.srow{display:grid;grid-template-columns:56px 1fr 76px;align-items:center;padding:3px 8px;font-size:.74rem;border-bottom:1px solid #0c0f16;cursor:pointer}
.srow:hover{filter:brightness(1.18)}
/* spot row — deliberately loud: cyan glow frame + cyan strike + live price pill */
.srow.spot{border-left:3px solid var(--cyan);outline:2px solid #22d3eeb3;outline-offset:-2px;position:relative;z-index:1;box-shadow:inset 0 0 12px #22d3ee22}
.srow.spot .strike{color:var(--cyan);text-shadow:0 0 8px #22d3ee88}
.srow.king{background:#f2c14e!important}
.srow.king.vexk{background:var(--cyan)!important}
.srow.king .strike,.srow.king .gex{color:#000!important;font-weight:700!important;text-shadow:none}
.srow.king .star{color:#000}
.srow.wall .gex{font-weight:700}
.srow .strike{font-family:'JetBrains Mono';font-weight:600}
.srow .gex{font-family:'JetBrains Mono';text-align:right;font-weight:600;font-size:.72rem}
.srow .mid{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.star{color:var(--pika);font-size:.72rem;font-weight:700}
.wtag{font-size:.54rem;padding:0 4px;border-radius:3px;font-weight:700;letter-spacing:.03em}
.wtag.cw{background:#2dd4bf26;color:var(--teal)}
.wtag.pw{background:#a855f733;color:#c99bff}
.dchip{font-size:.58rem;font-family:'JetBrains Mono';margin-left:2px}
.drv{font-size:.62rem;padding:1px 7px;border-radius:9px;border:1px solid #2a3140;color:var(--teal);background:#2dd4bf10}
.drv.warn{color:#fca5a5;border-color:#7f1d1d;background:#f871710d}
.combo-pop{position:fixed;z-index:120;background:var(--panel);border:1px solid #2a3140;border-radius:8px;max-height:250px;overflow-y:auto;box-shadow:0 12px 34px #000d;padding:4px;scrollbar-width:thin;scrollbar-color:#2a3140 transparent}
.combo-item{padding:6px 12px;font-size:.78rem;font-family:'JetBrains Mono';font-weight:600;cursor:pointer;border-radius:5px;white-space:nowrap}
.combo-item:hover,.combo-item.on{background:#00e5ff18;color:var(--cyan)}
.combo-hint{padding:5px 12px;font-size:.62rem;color:var(--muted);border-top:1px solid #1a1f2b;margin-top:3px}
.sgrid-wrap{overflow:auto;flex:1;scrollbar-width:thin;scrollbar-color:#2a3140 transparent}
table.sgrid{border-collapse:collapse;width:auto;margin:0 auto}
.sgrid th{position:sticky;top:0;z-index:5;background:#0e1119;color:var(--cyan);font-size:.68rem;font-weight:600;padding:6px 8px;text-align:right;border-bottom:1px solid var(--border);white-space:nowrap}
.sgrid th.sk,.sgrid td.sk{position:sticky;left:0;z-index:4;background:var(--panel);text-align:left;font-family:'JetBrains Mono';font-weight:700;font-size:.7rem;padding:2px 8px;border-right:1px solid var(--border);white-space:nowrap}
.sgrid th.sk{z-index:6}
.sgrid td{font-family:'JetBrains Mono';font-size:.68rem;font-weight:600;text-align:right;padding:2px 9px;border-bottom:1px solid #0c0f16;white-space:nowrap;min-width:92px;max-width:118px}
.sgrid tr.spotrow td.sk{color:var(--cyan);text-shadow:0 0 8px #22d3ee88;background:#0c1e27}
.sgrid tr.spotrow{outline:2px solid #22d3eeb3;outline-offset:-2px}
.sgrid td.kcell{background:#f2c14e!important;color:#000!important;font-weight:700!important}
.sgrid td.kcell.vexk{background:var(--cyan)!important}
.sgrid td.zero{color:#3a4254}
@media(max-width:760px){.sgrid td,.sgrid th{padding:2px 6px;font-size:.6rem}.sgrid td{min-width:70px}}
.imb,.tape{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px}
.imb-top{display:flex;gap:10px;align-items:center;margin-bottom:10px}
.imb-stats{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
#tapeStats{grid-template-columns:repeat(4,1fr)}
@media(max-width:900px){.imb-stats,#tapeStats{grid-template-columns:repeat(2,1fr)}}
.stat{background:var(--panel2);border:1px solid var(--border);border-radius:9px;padding:8px 10px}
.sl{font-size:.58rem;color:var(--muted);letter-spacing:.07em;margin-bottom:3px}
.sv{font-size:1.02rem;font-weight:700;font-family:'JetBrains Mono'}
.imb-row{display:grid;grid-template-columns:1fr 158px 1fr;align-items:center;gap:6px;padding:2px 0}
.imb-row .side{position:relative;height:13px;background:#10141d;border-radius:3px;overflow:hidden}
.imb-row .side i,.imb-row .side b{position:absolute;top:0;height:100%;display:block}
.side.l i,.side.l b{right:0}.side.r i,.side.r b{left:0}
.side.l i{background:#34d3991c}.side.l b{background:#34d399c9}
.side.r i{background:#f871711c}.side.r b{background:#f87171c9}
.klabel{text-align:center;font-size:.72rem;font-weight:700;display:flex;align-items:center;justify-content:center;gap:5px;flex-wrap:wrap;font-family:'JetBrains Mono';white-space:nowrap}
.imb-row.spotrow2{outline:2px solid #22d3eeb3;outline-offset:-2px;border-radius:4px}
.spotpx{font-size:.62rem;font-family:'JetBrains Mono';font-weight:800;color:#04121a;background:var(--cyan);border:1px solid #a5f3fc;border-radius:4px;padding:0 6px;letter-spacing:.02em;box-shadow:0 0 12px #22d3eecc,0 0 4px #67e8f9;text-shadow:none}
.lvl.spotlvl{background:#0c1e27;border-radius:6px;padding:6px 6px;margin:2px 0;border-bottom:none;box-shadow:inset 0 0 0 1px #22d3ee66}
.lvl.spotlvl .lvl-v{color:var(--cyan);text-shadow:0 0 8px #22d3ee88;font-size:.86rem}
.lvl.spotlvl .dot.spot{width:10px;height:10px;box-shadow:0 0 10px #22d3ee,0 0 4px #22d3ee}
.dpill{font-size:.56rem;font-family:'JetBrains Mono';font-weight:700;padding:0 5px;border-radius:4px}
.dpill.up{background:#34d39922;color:#34d399}.dpill.dn{background:#f8717126;color:#f87171}
/* flow tape */
.tape-wrap{max-height:54vh;overflow:auto;scrollbar-width:thin;scrollbar-color:#2a3140 transparent;margin-top:10px}
.tape table{border-collapse:collapse;width:100%}
.tape th{position:sticky;top:0;background:#0e1119;color:var(--muted);font-size:.62rem;letter-spacing:.05em;text-align:right;padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap}
.tape th:first-child,.tape td:first-child{text-align:left}
.tape td{font-family:'JetBrains Mono';font-size:.7rem;padding:4px 8px;border-bottom:1px solid #0c0f16;text-align:right;white-space:nowrap}
.tape tr:hover td{background:#12151e}
.cbadge{font-size:.56rem;font-weight:700;padding:0 5px;border-radius:3px}
.cbadge.c{background:#34d39922;color:var(--green)}
.cbadge.p{background:#f8717122;color:var(--red)}
.chart-area{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:10px;display:grid;grid-template-columns:1fr 252px;gap:10px;height:calc(100vh - 128px);min-height:520px}
.chart-col{display:flex;flex-direction:column;min-width:0}
.chart-top{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
#chartFocus{font-size:.68rem;color:#f59e0b}
#tvChart{flex:1;min-height:0;border-radius:8px;overflow:hidden}
.rail-h{font-size:.64rem;color:var(--muted);letter-spacing:.09em;margin-bottom:6px}
.levels{background:var(--panel2);border-radius:8px;padding:10px;overflow-y:auto}
@media(max-width:900px){.chart-area{grid-template-columns:1fr;height:auto}#tvChart{height:62vh}.levels{max-height:300px}}
.lvl{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1a1f2b;font-size:.76rem}
.lvl-l{display:flex;align-items:center;gap:6px}
.dot{width:8px;height:8px;border-radius:50%}
.dot.king{background:var(--pika);box-shadow:0 0 6px var(--pika)}.dot.call{background:var(--teal)}.dot.put{background:var(--barney)}.dot.flip{background:var(--cyan)}.dot.gate{background:#f59e0b}
.dot.spot{background:#e9edf5;box-shadow:0 0 6px #e9edf5}
.lvl-v{font-family:'JetBrains Mono';font-weight:600}
.surfaced{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px}
.surfaced h3{font-size:.72rem;color:var(--muted);letter-spacing:.05em;margin-bottom:8px;text-transform:uppercase}
.card{background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:10px;cursor:pointer}.card:hover{border-color:var(--cyan)}
.card-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.card-sym{font-weight:700}
.tag{font-size:.6rem;padding:1px 5px;border-radius:3px;font-weight:600;margin-left:3px}
.tag.long{background:#22c55e22;color:var(--green)}.tag.short{background:#ef444422;color:var(--red)}.tag.king{background:#f2c14e22;color:var(--pika)}
.score{width:32px;height:32px;border-radius:50%;border:2px solid var(--cyan);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.76rem;color:var(--cyan)}
.card-line{font-family:'JetBrains Mono';font-size:.78rem}.card-meta{font-size:.68rem;color:var(--muted);margin-top:2px}
.modal-bg{position:fixed;inset:0;background:#000000cc;display:none;align-items:center;justify-content:center;z-index:100;padding:16px}
.modal-bg.open{display:flex}
.modal{background:var(--panel);border:1px solid var(--border);border-radius:12px;width:100%;max-width:900px;max-height:88vh;overflow-y:auto;padding:18px;position:relative}
.modal h2{font-size:1.15rem;margin-bottom:10px}
.close{position:absolute;top:10px;right:14px;background:none;border:none;color:var(--muted);font-size:1.4rem;cursor:pointer}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px}@media(max-width:680px){.g2{grid-template-columns:1fr}}
.st{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:10px 0 6px}
.rec{background:var(--panel2);border-radius:7px;padding:10px;border-left:3px solid var(--cyan);margin-bottom:6px}
.conf-box{background:#0a0c12;border:1px solid var(--border);border-radius:7px;padding:8px 10px;font-size:.74rem;font-family:'JetBrains Mono';line-height:1.7;margin-bottom:6px}
.prof{height:140px;background:#0a0c12;border-radius:6px}
.settings{position:fixed;top:0;right:-360px;width:340px;height:100%;background:var(--panel);border-left:1px solid var(--border);z-index:80;transition:right .22s;padding:16px;overflow-y:auto}
.settings.open{right:0}
.fg{margin-bottom:12px}.fg label{display:block;font-size:.72rem;color:var(--muted);margin-bottom:3px}
.fg .hint{font-size:.62rem;color:var(--muted);margin-top:3px;line-height:1.45}
.method{font-size:.72rem;color:var(--muted);line-height:1.5;background:#0a0c12;padding:10px;border-radius:7px;margin-top:10px}
footer{text-align:center;padding:12px;font-size:.65rem;color:#3f4656;border-top:1px solid var(--border)}
/* sign-aware King: gold is earned by POSITIVE nodes only; a negative King is
   the most vibrant of its own colour (Heatseeker convention) */
.srow.king.kneg{background:#c026ff!important}
.srow.king.kneg .strike,.srow.king.kneg .gex{color:#fff!important}
.srow.king.kneg .star{color:#fff}
.sgrid td.kcell.kneg{background:#c026ff!important;color:#fff!important}
.king-pill.kneg{background:linear-gradient(135deg,#c026ff30,#c026ff12);border-color:#c026ff88;color:#e879f9}
[data-tip]{position:relative}
[data-tip]:hover::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 7px);left:50%;transform:translateX(-50%);background:#161a24;border:1px solid #2a3140;color:var(--text);padding:7px 10px;border-radius:7px;font-size:.68rem;font-weight:400;line-height:1.45;white-space:normal;width:max-content;max-width:260px;z-index:200;pointer-events:none;text-align:left;box-shadow:0 6px 20px #000c}
[data-tip]:hover::before{content:'';position:absolute;bottom:calc(100% + 2px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:#2a3140;z-index:200}
.skelrow{height:19px;margin:3px 8px;border-radius:4px;background:linear-gradient(90deg,#10141d 25%,#181e2b 50%,#10141d 75%);background-size:200% 100%;animation:shimmer 1.3s infinite}
@keyframes shimmer{to{background-position:-200% 0}}
.err-chip{margin:14px;padding:10px;border:1px solid #ef444455;border-radius:8px;color:#fca5a5;font-size:.74rem;line-height:1.5}
.pstats{display:flex;gap:10px;flex-wrap:wrap;padding:5px 10px;border-bottom:1px solid var(--border);background:#0d1018;font-size:.66rem;color:var(--muted)}
.pstats b{color:var(--text);font-family:'JetBrains Mono';font-weight:600}
.regime{padding:1px 6px;border-radius:3px;font-weight:700;font-size:.62rem}
.regime.pos{background:#2dd4bf22;color:var(--teal)}.regime.neg{background:#c026ff22;color:#e879f9}
.help h3{font-size:.86rem;margin:14px 0 5px;color:var(--cyan)}
.help p,.help li{font-size:.78rem;line-height:1.65;color:#c6cddb}
.help ul{padding-left:18px;margin:4px 0}
.help .kbd{background:#161a24;border:1px solid #2a3140;border-radius:4px;padding:0 5px;font-family:'JetBrains Mono';font-size:.72rem}
@media(max-width:760px){
  header{flex-wrap:wrap;row-gap:6px;padding:8px 10px}
  /* two tidy rows: view tabs, then controls — both wrap and center, no scroll */
  header{flex-direction:column;align-items:stretch;gap:7px}
  .logo{align-self:center;font-size:.9rem}
  .hdr-nav,.hdr-tools{width:100%;justify-content:center;gap:5px;row-gap:5px}
  .hdr-nav{order:1;border-bottom:1px solid var(--border);padding-bottom:7px}
  .hdr-tools{order:2}
  .hdr-nav .btn{flex:0 0 auto;white-space:nowrap;padding:6px 11px;font-size:.74rem}
  #expiryFilter{flex:0 0 auto}
  #lastUp{display:none}
  .banner{font-size:.6rem;gap:8px;padding:4px 10px}
  main{padding:5px}
  /* Up to 3 pillars still fit side by side on a phone (~120px each — skinny is
     intentional and the ladder stays legible). At 4 and 5 they would fall to
     90px and 72px, which cannot hold strike + value + bar, so the grid becomes
     a horizontal snap rail: two pillars visible, swipe for the rest. Nothing
     stacks vertically, which was the actual constraint. */
  .trinity{grid-template-columns:repeat(var(--panth-cols,3),1fr);gap:2px}
  .trinity[data-cols="4"],.trinity[data-cols="5"]{
    display:flex;gap:6px;overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;padding:0 2px 6px;
    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 8px,#000 calc(100% - 8px),transparent 100%);
            mask-image:linear-gradient(to right,transparent 0,#000 8px,#000 calc(100% - 8px),transparent 100%);
  }
  .trinity[data-cols="4"]::-webkit-scrollbar,.trinity[data-cols="5"]::-webkit-scrollbar{display:none}
  /* 32vw puts THREE pillars on screen at once with a sliver of the fourth
     showing, which is the affordance that tells you to swipe. Each column only
     carries a strike and a value, so 32vw (~125px on a 390px phone) is enough.
     snap-align:start rather than centre - centre fights a 3-up layout by always
     pulling a column into the middle. */
  .trinity[data-cols="4"]>.panel,.trinity[data-cols="5"]>.panel{
    flex:0 0 32vw;min-width:104px;max-width:none;scroll-snap-align:start;
  }
  .trinity[data-cols="4"] .ticker-sel,.trinity[data-cols="5"] .ticker-sel{max-width:100%;font-size:.78rem;padding:1px 2px}
  /* trim the internals so three narrow pillars stay legible rather than clipped */
  .trinity[data-cols="4"] .p-head,.trinity[data-cols="5"] .p-head{padding:5px 4px;gap:2px}
  .trinity[data-cols="4"] .p-left,.trinity[data-cols="5"] .p-left{flex-wrap:wrap;gap:2px}
  .trinity[data-cols="4"] .price,.trinity[data-cols="5"] .price{font-size:.72rem}
  .trinity[data-cols="4"] .badge-src,.trinity[data-cols="5"] .badge-src{display:none}
  .trinity[data-cols="4"] .king-pill,.trinity[data-cols="5"] .king-pill{font-size:.55rem;padding:1px 3px}
  .trinity[data-cols="4"] .sk,.trinity[data-cols="5"] .sk{font-size:.62rem}
  .trinity[data-cols="4"] .srow,.trinity[data-cols="5"] .srow{padding:1px 3px}

  /* ---- Junction on a phone ----
     The panel was height:auto, so .strikes was never its own scroll container -
     the PAGE scrolled instead. centerIn() bails when scrollHeight <= clientHeight,
     so the centre-on-spot logic silently did nothing on mobile and you had to
     hunt for spot by hand. Giving the ladder a real height restores it. */
  .panel.single-mode{height:calc(100vh - 148px);max-height:none;min-height:380px}
  .panel.single-mode .strikes{flex:1 1 auto;min-height:0;overflow-y:auto}
  /* the grid was leaving dead space under it - let it take the room it has */
  .panel.single-mode .sgrid-wrap{max-height:none;flex:1 1 auto;min-height:0;overflow:auto}
  /* squeeze the strike column so more expiry columns fit */
  .sgrid th.sk,.sgrid td.sk{width:40px;min-width:40px;max-width:40px;font-size:.6rem;padding:2px 3px}
  .sgrid th,.sgrid td{padding:2px 3px;font-size:.58rem;letter-spacing:-.02em}
  .sgrid th{white-space:nowrap}
  .panel{height:auto;min-height:0;max-height:70vh}
  /* A flex child defaults to min-height:auto, so .strikes grew to full content
     height instead of scrolling — the panel just clipped it. With min-height:0
     the child can shrink and its own overflow-y takes over, which is what makes
     programmatic centring possible on mobile at all. */
  .panel .strikes,.panel .sgrid-wrap{min-height:0}
  .chart-area{grid-template-columns:1fr}
  .levels{max-height:180px}
  .settings{width:100%;right:-100%}
  .cards{grid-template-columns:1fr 1fr}
  .modal{padding:14px}
  .srow{grid-template-columns:34px 1fr 50px;padding:2px;font-size:.6rem}
  .srow .strike{font-size:.6rem}
  .srow .gex{font-size:.6rem}
  .p-head{padding:4px 3px;gap:2px;flex-wrap:wrap}
  .ticker-sel{max-width:52px;font-size:.72rem;padding:2px}
  .price{font-size:.68rem}
  .king-pill{font-size:.52rem;padding:1px 4px}
  .badge-src{font-size:.5rem}
  .pstats{padding:3px;gap:4px;font-size:.55rem}
  .imb-row{grid-template-columns:1fr 120px 1fr}
  .spotpx{font-size:.52rem;padding:0 4px}
}
.hidden{display:none!important}
.loader{display:inline-block;width:10px;height:10px;border:2px solid var(--cyan);border-top-color:transparent;border-radius:50%;animation:spin .65s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}


/* ================= AETHER: Zero + Swing cards ================= */

/* ===== KAIROS ZERO (0DTE) ===== */
#aetherTabs button.on{background:var(--gold);color:#0a0a08}
#aetherTabs button[data-a="zero"].on{background:var(--cyan);color:#04121a}
.zstrip{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.zchip{font-size:.64rem;font-family:'JetBrains Mono';color:var(--muted);border:1px solid var(--border);border-radius:12px;padding:3px 10px}
.zchip.go{color:var(--teal);border-color:#2dd4bf55}
.zchip.blk{color:#f59e0b;border-color:#f59e0b55}
.zchip.warn{color:#fca5a5;border-color:#7f1d1d}
.zbtn{margin-left:auto;background:transparent;border:1px solid var(--border);color:var(--muted);padding:4px 11px;border-radius:7px;font-size:.68rem;cursor:pointer;font-family:'JetBrains Mono'}
.zbtn:hover{color:var(--cyan);border-color:var(--cyan)}
.zgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px;align-items:start}
.zcard{background:var(--panel2);border:1px solid var(--border);border-radius:9px;padding:10px;position:relative;overflow:hidden}
.zcard .zhead{display:flex;justify-content:space-between;align-items:center;margin:2px 0 6px}
.zsetup{font-size:.6rem;font-family:'JetBrains Mono';font-weight:700;letter-spacing:.05em;color:var(--cyan);border:1px solid #22d3ee44;border-radius:4px;padding:1px 6px;margin-left:6px}
.zstandby{opacity:.62}
.zstandby .zsetup{color:var(--muted);border-color:var(--border)}
.zcon{font-size:.8rem;font-weight:600;margin-bottom:7px}
.zrow{font-size:.66rem;font-family:'JetBrains Mono';margin:5px 0}
.zest{display:flex;gap:10px;flex-wrap:wrap;background:#0a0c12;border:1px solid var(--border);border-radius:6px;padding:6px 8px}
.zest b{font-weight:700}
.zribbon{font-size:.58rem;font-family:'JetBrains Mono';font-weight:700;letter-spacing:.08em;padding:2px 8px;border-radius:4px;display:inline-block;margin-bottom:4px}
.zribbon.live{background:#22c55e22;color:var(--green)}
.zribbon.stop{background:#ef444426;color:var(--red)}
.zribbon.tgt{background:#f2c14e26;color:var(--pika)}
.zribbon.exp{background:#6d768822;color:var(--muted)}
.zmap{position:relative;height:14px;margin:8px 2px 2px}
.zbar{position:absolute;left:0;right:0;top:6px;height:2px;background:linear-gradient(90deg,#f87171aa,#2a3140 30%,#2a3140 70%,#34d399aa);border-radius:2px}
.zmk{position:absolute;top:2px;width:10px;height:10px;border-radius:50%;transform:translateX(-50%);border:2px solid var(--panel2)}
.zmk.mstop{background:var(--red)}
.zmk.ment{background:#e9edf5}
.zmk.mt1{background:var(--cyan)}
.zmk.mt2{background:var(--pika)}
.zlabels{display:flex;justify-content:space-between;font-size:.56rem;font-family:'JetBrains Mono';color:var(--muted);margin-top:2px;flex-wrap:wrap;gap:4px}
.zgates{margin:7px 0 2px;border-top:1px solid #1a1f2b;padding-top:6px}
.zg{display:flex;gap:7px;align-items:baseline;font-size:.62rem;padding:1.5px 0}
.zg span{width:11px;flex:0 0 auto;font-weight:700}
.zg.ok span{color:var(--teal)}
.zg.no span{color:var(--red)}
.zg b{color:var(--text);font-weight:600;flex:0 0 auto}
.zg i{color:var(--muted);font-style:normal;font-family:'JetBrains Mono';font-size:.58rem}
.zwhy{font-size:.7rem;color:#c6cddb;line-height:1.5;margin-top:6px}
.zfoot{font-size:.58rem;font-family:'JetBrains Mono';color:#f59e0b;margin-top:7px;border-top:1px solid #1a1f2b;padding-top:6px;line-height:1.5}
.zhon{margin-top:12px;background:#0a0c12;border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:.64rem;color:var(--muted);line-height:1.7}
.zhon b{color:#f59e0b}
.zspec{display:flex;flex-direction:column;gap:2.5px;margin:2px 0 6px}
.zspec>div{display:flex;gap:8px;align-items:baseline}
.zspec span{font-family:'JetBrains Mono';font-size:.55rem;letter-spacing:.09em;color:var(--muted);width:66px;flex:0 0 auto;padding-top:1px}
.zspec b{font-weight:600;font-family:'JetBrains Mono';font-size:.71rem;color:var(--text)}
.zspec em{font-style:normal;font-weight:700}
.zspec i,.zlvls i{font-style:normal;color:var(--muted);font-weight:400;font-size:.6rem}
.zlvls{width:100%;border-collapse:collapse;margin:7px 0 3px;font-family:'JetBrains Mono'}
.zlvls th{font-size:.53rem;letter-spacing:.09em;color:var(--muted);text-align:right;font-weight:600;padding:2px 6px;border-bottom:1px solid #1a1f2b}
.zlvls th:first-child{text-align:left}
.zlvls td{font-size:.69rem;font-weight:600;text-align:right;padding:3px 6px;border-bottom:1px solid #12161f;white-space:nowrap}
.zlvls td:first-child{text-align:left;font-size:.55rem;letter-spacing:.07em;color:var(--muted)}
.zlvls tr.ls td:nth-child(2){color:var(--red)}
.zlvls tr.l1 td:nth-child(2){color:var(--cyan)}
.zlvls tr.l2 td:nth-child(2){color:var(--pika)}
.zlvls tr.lr td{border-bottom:none;color:var(--text)}
.zlvls .up{color:var(--green)}
.zlvls .dn{color:var(--red)}
@media(max-width:760px){.zgrid{grid-template-columns:1fr}.zbtn{margin-left:0}}
/* Swing deck reads GOLD, Zero stays CYAN — two engines, two looks */
.scard{border-color:#f2c14e2e;background:linear-gradient(180deg,#131118,#0d1017)}
.scard .zsetup{color:var(--gold);border-color:#f2c14e44}
.scard .score{border-color:var(--gold);color:var(--gold)}
.scard.zstandby .zsetup{color:var(--muted);border-color:var(--border)}
.sspread{font-family:'JetBrains Mono';font-size:.62rem;color:var(--gold);background:#f2c14e0d;border:1px solid #f2c14e2e;border-radius:6px;padding:5px 8px;margin:6px 0 3px;line-height:1.55}
.sspread i{font-style:normal;color:var(--muted)}


/* ================= NEXUS (the field) ================= */

/* ===== KAIROS ARENA v3 — THE FIELD ===== */
.arena{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px}
.a-top{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.a-legend{display:flex;gap:11px;flex-wrap:wrap;margin-left:auto}
.a-lg{display:flex;align-items:center;gap:6px;font-size:.62rem;font-family:'JetBrains Mono';color:var(--muted);letter-spacing:.05em;white-space:nowrap}
.a-lg s{width:14px;height:8px;display:block;text-decoration:none;border-radius:2px}
.a-lg s.aeg{background:linear-gradient(90deg,rgba(45,212,191,0),rgba(45,212,191,.9))}
.a-lg s.mae{background:linear-gradient(90deg,rgba(192,84,247,0),rgba(192,84,247,.9))}
.a-lg s.scorch{background:rgba(200,140,70,.85)}
.a-lg s.reach{background:rgba(34,211,238,.3);border:1px solid rgba(34,211,238,.5)}
.a-lg i{width:9px;height:9px;border-radius:50%;display:block;font-style:normal}
.a-lg i.std{background:#fff;box-shadow:0 0 9px var(--cyan)}
.a-stage{position:relative;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:#05070c}
#arenaCanvas{display:block;width:100%;height:clamp(500px,calc(100vh - 330px),1100px);min-height:440px}
.a-wait{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;font-family:'JetBrains Mono';font-size:.72rem;color:var(--muted);background:#05070c;text-align:center;padding:16px;line-height:1.6}
.a-hud{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin-top:10px}
.a-hud .sv{font-size:.78rem}
.a-hud .stat{padding:7px 9px}
@media(max-width:1100px){.a-hud{grid-template-columns:repeat(4,1fr)}}
@media(max-width:600px){.a-hud{grid-template-columns:repeat(2,1fr)}.a-legend{margin-left:0}#arenaCanvas{height:60vh;min-height:380px}}
.a-note{font-size:.62rem;color:var(--muted);margin-top:9px;line-height:1.6}
.a-note b{color:var(--teal)}
.a-note em{font-style:normal;color:#e879f9}
.a-note u{text-decoration:none;color:rgba(200,140,70,1)}
.a-note q{quotes:none;color:var(--cyan)}
/* editable preset chips */
.pchip{position:relative}
.pchip .px{display:none;margin-left:6px;font-size:.72rem;line-height:1;color:var(--muted);opacity:.75;padding:0 1px;border-radius:3px}
.pchip:hover .px{display:inline}
.pchip .px:hover{color:var(--red);opacity:1;background:#ef444422}
.pchip.padd{color:var(--teal);border-color:#2dd4bf55;font-weight:700;padding:4px 10px}
.pchip.padd:hover{background:#2dd4bf18;border-color:var(--teal);color:var(--teal)}

/* ---- Nexus v4: window chips + live snap-back ---- */
.nx-wins{flex-wrap:wrap}
.nx-wins button.on{background:var(--cyan);color:#04121a}
.nx-wins button[data-w="candle"].on{background:var(--teal,#2dd4bf);color:#04121a}
.nx-wins .livebtn{color:var(--cyan);border-left:1px solid var(--border)}
.nx-wins .livebtn:hover{background:rgba(34,211,238,.12);color:var(--cyan)}
@media(max-width:600px){.nx-wins{order:3;width:100%}}

/* ---- Nexus candle-interval chips ---- */
.nx-wins button.ciBtn{padding:4px 6px;font-size:.64rem;opacity:.82}
.nx-wins button.ciBtn.on{background:var(--teal,#2dd4bf);color:#04121a;opacity:1}
.nx-wins button[data-w="candle"].on{background:var(--teal,#2dd4bf);color:#04121a}

/* ---- Regime: intraday chart legend + sortable table ---- */
.reg-lg{display:inline-flex;align-items:center;gap:5px;font-size:.6rem;color:var(--muted);letter-spacing:.05em}
.reg-lg s{width:14px;height:3px;border-radius:2px;display:inline-block;text-decoration:none}

/* ---- Surfaced Ideas: compact expandable thumbnails ---- */
.idea-thumb{transition:border-color .15s}
.idea-thumb.open{border-color:var(--cyan)}
.thumb-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.thumb-sym{font-weight:700;font-size:.9rem}
.thumb-contract{font-family:'JetBrains Mono';font-size:.8rem;color:var(--gold);letter-spacing:.02em;margin-bottom:8px}
.thumb-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.thumb-grid>div{display:flex;flex-direction:column;gap:1px;min-width:0}
.thumb-grid .tl{font-size:.55rem;color:var(--muted);letter-spacing:.06em;text-transform:uppercase}
.thumb-grid .tv{font-family:'JetBrains Mono';font-size:.78rem;font-weight:600}
.thumb-detail{margin-top:10px;padding-top:9px;border-top:1px solid var(--border)}
.thumb-deep{width:100%;color:var(--cyan)}
.thumb-deep:hover{background:rgba(34,211,238,.1)}
.thumb-standby{font-family:'JetBrains Mono';font-size:.7rem;color:var(--muted)}
/* the 0DTE thumbnails grid: cap width so they read as cards, not banners; fit height */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px;align-items:start}
@media(max-width:640px){.cards{grid-template-columns:1fr 1fr}.zgrid{grid-template-columns:1fr}}
@media(max-width:400px){.cards{grid-template-columns:1fr}}

/* ---- Tape: sortable headers ---- */
.tape th.tsort{cursor:pointer;user-select:none;transition:color .12s}
.tape th.tsort:hover{color:var(--text)}
.tape th.tsort.on{color:var(--cyan)}

/* ============ ORRERY — market rotation view ============ */
.orrery{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px}
.orr-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.orr-title{font-weight:700;font-size:.95rem;letter-spacing:.08em;color:var(--green);display:flex;align-items:baseline;gap:10px}
.orr-sub{font-size:.62rem;color:var(--muted);letter-spacing:.06em;font-weight:500}
.orr-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.orr-tf button[data-tf].on,#orrTf button.on{background:var(--green);color:#04120a}
.orr-meta{font-size:.64rem;color:var(--muted);font-family:'JetBrains Mono'}
.orr-grid{display:grid;grid-template-columns:1fr 320px;gap:12px;align-items:stretch}
.orr-stage{position:relative;min-height:0}
#orrCanvas{display:block;width:100%;height:clamp(420px,calc(100vh - 340px),820px);border-radius:8px;background:radial-gradient(120% 120% at 50% 40%,#0a0e16,#06080d)}
.orr-wait{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--muted);font-size:.8rem;line-height:1.7;pointer-events:none}
.orr-rail{background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:8px;overflow:auto;max-height:clamp(420px,calc(100vh - 340px),820px)}
.orr-rail-h{font-size:.6rem;letter-spacing:.1em;color:var(--muted);padding:4px 6px 8px;font-weight:700}
.orr-callout{background:#0a0e16;border:1px solid var(--border);border-radius:6px;padding:8px 9px;margin-bottom:8px;font-size:.66rem;font-family:'JetBrains Mono';line-height:1.9}
.oc-l{font-weight:700;letter-spacing:.05em;margin-right:5px}
.orr-row{display:grid;grid-template-columns:14px 46px 1fr auto auto;align-items:center;gap:7px;padding:6px 6px;border-radius:5px;cursor:pointer;font-size:.7rem;transition:background .1s}
.orr-row:hover{background:rgba(52,211,153,.08)}
.orr-row.sel{background:rgba(52,211,153,.14);outline:1px solid rgba(52,211,153,.35)}
.orr-dot{width:9px;height:9px;border-radius:50%}
.orr-rsym{font-weight:700;font-family:'JetBrains Mono'}
.orr-rname{color:var(--muted);font-size:.64rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.orr-rphase{font-size:.58rem;font-weight:600;letter-spacing:.03em}
.orr-rret{font-family:'JetBrains Mono';font-size:.66rem;text-align:right}
.orr-note{font-size:.62rem;color:var(--muted);line-height:1.6;border-top:1px solid var(--border);padding-top:9px}
/* drill panel */
.orr-drill{border-top:1px solid var(--border);padding-top:10px}
.orr-drill:empty{display:none}
.orr-drill-load,.od-noflow{color:var(--muted);font-size:.72rem;padding:10px}
.od-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.od-sym{font-weight:700;font-size:1.05rem;font-family:'JetBrains Mono'}
.od-px{color:var(--cyan);font-size:.82rem}
.od-regime{font-size:.72rem;font-family:'JetBrains Mono';color:var(--muted)}
.od-open{margin-left:auto;font-size:.68rem;color:var(--cyan)}
.od-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.od-statrow{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px}
.od-stat{background:var(--panel2);border:1px solid var(--border);border-radius:6px;padding:6px 8px}
.od-l{font-size:.54rem;color:var(--muted);letter-spacing:.06em}
.od-v{font-family:'JetBrains Mono';font-weight:700;font-size:.82rem;margin-top:2px}
.od-lh{font-size:.58rem;letter-spacing:.08em;color:var(--muted);font-weight:700;margin:4px 0 6px}
.od-lrow{display:grid;grid-template-columns:64px 1fr 60px;align-items:center;gap:8px;font-family:'JetBrains Mono';font-size:.66rem;padding:2px 0}
.od-lrow.spot{background:rgba(34,211,238,.08);border-radius:3px}
.od-lk{font-weight:600}
.od-lbar{height:8px;background:#0a0e16;border-radius:3px;overflow:hidden}
.od-lbar i{display:block;height:100%;border-radius:3px;opacity:.7}
.od-lv{text-align:right}
.od-prints{width:100%;border-collapse:collapse;font-size:.64rem;font-family:'JetBrains Mono'}
.od-prints th{text-align:left;color:var(--muted);font-weight:600;padding:4px 6px;border-bottom:1px solid var(--border);font-size:.56rem;letter-spacing:.04em}
.od-prints td{padding:4px 6px;border-bottom:1px solid rgba(29,35,48,.5)}
.od-tag{padding:1px 6px;border-radius:9px;font-size:.56rem;font-weight:600}
.od-tag.hedge{background:rgba(126,166,214,.14);color:#9db4d6}
.od-tag.spread{background:rgba(242,193,78,.14);color:var(--gold)}
.od-tag.bet{background:rgba(52,211,153,.16);color:var(--green)}
.od-tag.flow{background:rgba(34,211,238,.12);color:var(--cyan)}
@media(max-width:820px){.orr-grid{grid-template-columns:1fr}.orr-rail{max-height:260px}.od-grid{grid-template-columns:1fr}.od-statrow{grid-template-columns:1fr 1fr}}
/* ── Mythos on a phone ──
   The section used to run ~1100px tall (a 420px canvas floor plus a 260px rail
   plus the note) and the header controls wrapped into four ragged rows. Now: a
   shorter stage, a single scrollable control strip, and a rail that reads as a
   list instead of a second full screen. */
@media(max-width:600px){
  .orrery{overflow-x:hidden}
  .orr-top{flex-direction:column;align-items:stretch;gap:7px}
  .orr-title{font-size:.82rem}
  .orr-controls{display:flex;align-items:center;gap:7px;flex-wrap:nowrap;
    overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
  .orr-controls::-webkit-scrollbar{display:none}
  .orr-controls>*{flex:0 0 auto}
  .orr-meta{white-space:nowrap}
  #orrCanvas{height:clamp(300px,52vh,430px)}
  .orr-grid{gap:8px}
  .orr-rail{max-height:210px;padding:6px}
  .orr-row{grid-template-columns:12px 42px 1fr auto;gap:6px;font-size:.66rem;padding:5px 4px}
  .orr-row .orr-rphase{display:none}      /* colour already encodes the phase */
  .orr-callout{font-size:.62rem;line-height:1.75;padding:7px}
  .orr-note{font-size:.58rem;line-height:1.55}
  .od-statrow{grid-template-columns:1fr 1fr;gap:6px}
  .od-head{gap:8px}
  .od-sym{font-size:.92rem}
  .od-prints{font-size:.58rem}
  .od-prints th,.od-prints td{padding:3px 4px}
  .od-lrow{grid-template-columns:52px 1fr 52px;font-size:.62rem}
}
/* the pinned (tapped) body reads the same as a hovered one in the rail */
.orr-row.sel{background:rgba(52,211,153,.09);border-color:rgba(52,211,153,.35)}

/* ---- Mythos: basket badge + category toggle ---- */
.orr-basket{color:var(--cyan);font-size:.7rem;opacity:.8}
#orrCatSel button.on{background:var(--green);color:#04120a}
#orrCatSel button{font-size:.6rem;letter-spacing:.04em}

/* ---- Junction header strip: weekly walls + biggest nodes ---- */
.p-mid{display:flex;align-items:center;gap:18px;flex:1;justify-content:center;flex-wrap:wrap}
.hm-block{display:flex;flex-direction:column;gap:3px;align-items:center}
.hm-lab{font-size:.52rem;letter-spacing:.1em;color:var(--muted);font-weight:700}
.hm-walls{display:flex;gap:8px;font-family:'JetBrains Mono';font-size:.72rem;font-weight:700}
.hw-c{color:var(--teal)}
.hw-p{color:#c99bff}
.hm-nodes{display:flex;gap:6px}
.hn-node{font-family:'JetBrains Mono';font-size:.66rem;font-weight:600;padding:1px 7px;border-radius:10px;white-space:nowrap}
.hn-node i{font-style:normal;opacity:.62;font-weight:500;margin-left:3px}
.hn-node.pos{background:rgba(45,212,191,.12);color:var(--teal)}
.hn-node.neg{background:rgba(147,51,234,.14);color:#c99bff}
/* only the wide single/Junction panel shows it; Triad's 3-up panels stay clean */
.panel:not(.single-mode) .p-mid{display:none}
@media(max-width:900px){.p-mid{display:none}}

/* ---- Aether v2: factor chips + desk note ---- */
.desk-note{font-size:.74rem;line-height:1.55;color:var(--text);background:rgba(34,211,238,.06);border-left:2px solid var(--cyan);padding:7px 10px;border-radius:0 6px 6px 0;margin-bottom:8px}
.factor-row{display:flex;gap:5px;flex-wrap:wrap;margin:6px 0 4px}
.drv.fpos{background:rgba(52,211,153,.14);color:var(--green);border:1px solid rgba(52,211,153,.25)}
.drv.fneg{background:rgba(248,113,113,.12);color:var(--red);border:1px solid rgba(248,113,113,.22)}
.drv.fpos,.drv.fneg{cursor:help}

/* ---- Aether v2: vol-regime + journal pulse bar ---- */
.aether-pulse{display:flex;gap:20px;flex-wrap:wrap;padding:8px 12px;margin-bottom:10px;background:var(--panel2);border:1px solid var(--border);border-radius:8px;font-family:'JetBrains Mono'}
.ap-block{display:flex;align-items:center;gap:7px;font-size:.72rem}
.ap-l{font-size:.56rem;letter-spacing:.08em;color:var(--muted);font-weight:700}
.ap-block i{font-style:normal;color:var(--muted);font-size:.66rem}
.ap-block b{font-weight:700}

/* ---- extended-hours price block in the Junction header ---- */
.hm-xh{display:flex;align-items:baseline;gap:7px;font-family:'JetBrains Mono';font-size:.78rem;font-weight:700}
.hm-xh i{font-style:normal;font-size:.66rem;font-weight:600}
.hm-xh s{font-size:.6rem;font-weight:500}

/* ---- NFA — deliberately subtle ---- */
.nfa-sub{font-size:.56rem;color:var(--muted);opacity:.65;text-align:center;padding:8px 4px 2px;letter-spacing:.03em}
.nfa-min{display:inline-block;font-size:.52rem;letter-spacing:.08em;font-weight:800;color:#b98b4a;border:1px solid rgba(242,193,78,.3);border-radius:8px;padding:0 5px;vertical-align:1px;margin-right:2px}

/* ---- "took it" checkbox on cards ---- */
.lg-take{display:inline-flex;align-items:center;gap:5px;font-size:.58rem;letter-spacing:.06em;font-weight:700;color:var(--muted);cursor:pointer;user-select:none;padding:2px 6px;border:1px solid var(--border);border-radius:11px;white-space:nowrap}
.lg-take:hover{border-color:var(--teal);color:var(--teal)}
.lg-take.on{border-color:var(--green);color:var(--green);background:rgba(52,211,153,.1)}
.lg-cb{display:inline-flex;align-items:center;justify-content:center;width:12px;height:12px;border:1px solid currentColor;border-radius:3px;font-size:.6rem;line-height:1}

/* ---- trade ledger ---- */
.ledger{margin-top:14px;border:1px solid var(--border);border-radius:9px;background:var(--panel2);overflow:hidden}
.lg-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 11px;border-bottom:1px solid var(--border)}
.lg-title{font-size:.6rem;letter-spacing:.12em;font-weight:800;color:var(--text)}
.lg-tab{background:transparent;border:1px solid var(--border);color:var(--muted);font-size:.58rem;letter-spacing:.07em;font-weight:700;padding:3px 9px;border-radius:11px;cursor:pointer;font-family:inherit}
.lg-tab i{font-style:normal;opacity:.7}
.lg-tab.on{border-color:var(--teal);color:var(--teal);background:rgba(45,212,191,.1)}
.lg-rate{font-size:.64rem;color:var(--muted);font-family:'JetBrains Mono'}
.lg-rate i{font-style:normal;opacity:.7}
.lg-note{margin-left:auto;font-size:.56rem;color:var(--muted);letter-spacing:.04em}
.lg-row{display:flex;align-items:center;gap:9px;padding:6px 11px;border-bottom:1px solid #141922;font-size:.68rem}
.lg-row:last-child{border-bottom:none}
.lg-row.lg-win{background:rgba(52,211,153,.05)}
.lg-row.lg-loss{background:rgba(248,113,113,.05)}
.lg-sym{font-weight:800;width:58px;flex-shrink:0}
.lg-con{color:var(--cyan);width:150px;flex-shrink:0;font-size:.66rem}
.lg-dir{font-size:.55rem;letter-spacing:.06em;font-weight:800;padding:1px 5px;border-radius:8px}
.lg-dir.up{color:var(--green);background:rgba(52,211,153,.13)}
.lg-dir.dn{color:var(--red);background:rgba(248,113,113,.13)}
.lg-meta{color:var(--muted);font-size:.62rem;flex:1;font-family:'JetBrains Mono'}
.lg-date{color:var(--muted);font-size:.58rem;font-family:'JetBrains Mono'}
.lg-acts{display:flex;gap:4px;flex-shrink:0}
.lg-b{background:transparent;border:1px solid var(--border);color:var(--muted);font-size:.55rem;letter-spacing:.05em;font-weight:700;padding:2px 7px;border-radius:9px;cursor:pointer;font-family:inherit}
.lg-b.win:hover{border-color:var(--green);color:var(--green)}
.lg-b.loss:hover{border-color:var(--red);color:var(--red)}
.lg-b.del:hover{border-color:var(--red);color:var(--red)}
.lg-empty{padding:14px 11px;color:var(--muted);font-size:.66rem}
@media(max-width:760px){.lg-con{width:auto}.lg-meta,.lg-date{display:none}}


/* ---- regime crosshair readout ---- */
.reg-tip{position:absolute;z-index:5;pointer-events:none;background:rgba(8,13,20,.94);border:1px solid rgba(124,196,236,.35);border-radius:7px;padding:6px 9px;font-family:'JetBrains Mono';font-size:.64rem;color:var(--text);display:flex;flex-direction:column;gap:2px;box-shadow:0 4px 18px rgba(0,0,0,.5)}
.reg-tip b{color:#eafcff}
.reg-tip .rt-row{display:flex;gap:6px;align-items:baseline}
.reg-tip .rt-row i{font-style:normal;font-size:.54rem;letter-spacing:.06em;width:38px}
.reg-tip .rt-row em{font-style:normal;font-size:.56rem;color:var(--muted)}

/* ---- aether engine status ---- */
.eng-status{font-size:.62rem;letter-spacing:.05em;color:var(--muted);font-family:'JetBrains Mono';padding:5px 9px;border:1px solid var(--border);border-radius:7px;background:var(--panel2)}
.eng-status b{font-weight:800}

/* ---- mobile: keep the doctrine + disclosures compact ---- */
@media(max-width:760px){
  .zhon{font-size:.55rem;line-height:1.45;color:var(--muted)}
  .nfa-sub{font-size:.52rem}
  .eng-status{font-size:.56rem}
}


/* ---- VIX desk (Junction) ---- */
.vixdesk{margin-top:12px;border:1px solid var(--border);border-radius:10px;background:var(--panel2);padding:10px 12px}
.vd-head{display:flex;align-items:baseline;gap:10px;margin-bottom:8px}
.vd-head b{font-size:.72rem;letter-spacing:.14em}
.vd-head span{font-size:.56rem;color:var(--muted);letter-spacing:.05em}
.vd-row{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin:7px 0}
.vd-chip{display:inline-flex;flex-direction:column;gap:1px;border:1px solid var(--border);border-radius:7px;padding:4px 9px;background:var(--panel)}
.vd-chip i{font-style:normal;font-size:.5rem;letter-spacing:.1em;color:var(--muted)}
.vd-chip b{font-family:'JetBrains Mono';font-size:.76rem}
.vd-note{font-size:.6rem;color:var(--muted);line-height:1.5;padding:2px 0}
.vd-lad{margin-top:4px;display:flex;flex-direction:column;gap:2.5px}
.vd-lr{display:flex;align-items:center;gap:8px;font-family:'JetBrains Mono';font-size:.66rem}
.vd-lr>span{width:56px;flex-shrink:0}
.vd-tr{flex:1;height:6px;border-radius:3px;overflow:hidden;background:rgba(126,166,214,.06)}
.vd-tr>div{height:100%;border-radius:3px;opacity:.85}

/* ---- collapsible doctrine ---- */
.zhon-d summary{cursor:pointer;font-size:.62rem;color:var(--muted);letter-spacing:.04em;padding:4px 2px;list-style:none}
.zhon-d summary::-webkit-details-marker{display:none}
.zhon-d summary::after{content:' \25be';opacity:.6}
.zhon-d[open] summary::after{content:' \25b4'}
.zhon-d .zhon{margin-top:4px}


/* ---- v12.1: desktop cards wide enough that score badges never clip ---- */
@media(min-width:761px){.zgrid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}}
.zhead{gap:6px}
.zhead .score,.zhead .lg-take{flex-shrink:0}
#vixSec{margin-top:8px}


/* ---- Oracle (AI) ---- */
.oracle{margin:8px 0 10px;border:1px solid rgba(45,212,191,.22);border-radius:9px;background:linear-gradient(180deg,rgba(45,212,191,.05),rgba(45,212,191,.01));padding:9px 12px}
.or-block{margin-bottom:7px}
.or-block:last-of-type{margin-bottom:0}
.or-head{display:flex;align-items:baseline;gap:8px;margin-bottom:3px}
.or-head b,.or-block summary b{font-size:.6rem;letter-spacing:.13em;color:var(--teal)}
.or-head i,.or-block summary i{font-style:normal;font-size:.55rem;color:var(--muted)}
.or-block summary{cursor:pointer;list-style:none;padding:2px 0}
.or-block summary::-webkit-details-marker{display:none}
.or-block summary::after{content:' \25be';opacity:.5;color:var(--muted)}
.or-block[open] summary::after{content:' \25b4'}
.or-body{font-size:.72rem;line-height:1.65;color:var(--text)}
.or-body b{color:var(--gold)}
.or-body ul{margin:4px 0 4px 15px;padding:0}
.or-body li{margin:2px 0}
.or-foot{margin-top:7px;padding-top:6px;border-top:1px solid rgba(126,166,214,.1);font-size:.55rem;color:var(--muted);opacity:.75}
@media(max-width:760px){.or-body{font-size:.68rem}}

.prov{font-family:'JetBrains Mono';font-size:.55rem;color:var(--muted);opacity:.7;border:1px solid var(--border);border-radius:8px;padding:1px 5px;margin-left:6px;white-space:nowrap}


/* ---- Nova ---- */
.nova{margin:10px 0;border:1px solid rgba(45,212,191,.2);border-radius:9px;background:linear-gradient(180deg,rgba(45,212,191,.045),rgba(45,212,191,.01));padding:9px 12px}
.nova-hd{display:flex;align-items:center;gap:7px;margin-bottom:6px}
.nova-hd b{font-size:.62rem;letter-spacing:.18em;color:var(--teal)}
.nova-hd i{font-style:normal;font-size:.54rem;color:var(--muted);opacity:.8}
.nova-dot{width:6px;height:6px;border-radius:50%;background:var(--teal);box-shadow:0 0 7px var(--teal);animation:novaPulse 2.6s ease-in-out infinite}
@keyframes novaPulse{0%,100%{opacity:.45}50%{opacity:1}}
@media(max-width:760px){
  .nova{padding:8px 10px;margin:8px 0}
  .nova-hd i{display:none}
  .or-body{font-size:.68rem;line-height:1.6}
  .or-block summary{font-size:.58rem}
}

#novaJunction,#novaVix{margin-top:0}
#novaJunction .or-body,#novaVix .or-body{max-height:190px;overflow:auto}


/* ---- guide ---- */
.guide-lede{font-size:.74rem;line-height:1.7;color:var(--muted);margin:6px 0 14px}
.guide-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:9px;margin-bottom:18px}
.guide-item{border:1px solid var(--border);border-radius:8px;padding:9px 11px;background:var(--panel2)}
.guide-item b{display:block;font-size:.66rem;letter-spacing:.13em;color:var(--teal);margin-bottom:4px}
.guide-item span{display:block;font-size:.71rem;line-height:1.62;color:var(--text)}
.guide-item i{color:var(--gold);font-style:normal}
@media(max-width:760px){.guide-grid{grid-template-columns:1fr}.guide-item span{font-size:.68rem}}


/* ---- modal close button: keep it inside the viewport on phones ---- */
.modal-bg .modal,.modal-bg .modal.help{position:relative}
.close{z-index:5}
@media(max-width:760px){
  .modal-bg{padding:10px}
  .modal-bg .modal,.modal-bg .modal.help{max-height:88vh;overflow:auto;padding-top:44px;-webkit-overflow-scrolling:touch}
  .close{position:fixed;top:14px;right:18px;font-size:1.7rem;line-height:1;background:rgba(10,14,20,.92);border:1px solid var(--border);border-radius:50%;width:38px;height:38px;display:flex;align-items:center;justify-content:center;color:var(--text)}
  .settings{max-height:88vh;overflow:auto}
}


/* ---- Nova v2: instrument readout ---- */
.nova{position:relative;overflow:hidden}
.nova::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:linear-gradient(180deg,var(--teal),rgba(45,212,191,.05));opacity:.8}
.or-block{border-top:1px solid rgba(126,166,214,.07)}
.or-block:first-of-type{border-top:none}
.or-block summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;padding:5px 0}
.or-block summary::-webkit-details-marker{display:none}
.nv-tag{font-size:.55rem;letter-spacing:.16em;font-weight:800;color:var(--teal);border:1px solid rgba(45,212,191,.3);border-radius:3px;padding:2px 6px;background:rgba(45,212,191,.07);white-space:nowrap}
.or-block summary i{font-style:normal;font-size:.52rem;color:var(--muted);opacity:.75;font-family:'JetBrains Mono'}
.or-block summary::after{content:'\25be';margin-left:auto;opacity:.4;font-size:.6rem}
.or-block[open] summary::after{content:'\25b4'}
.nv-zero .nv-tag{color:#f2c14e;border-color:rgba(242,193,78,.32);background:rgba(242,193,78,.07)}
.nv-regime .nv-tag,.nv-tape .nv-tag{color:#c084fc;border-color:rgba(192,132,252,.32);background:rgba(192,132,252,.07)}
.nv-brief .nv-tag,.nv-mythos .nv-tag{color:#7cc4ec;border-color:rgba(124,196,236,.32);background:rgba(124,196,236,.07)}
.or-body{font-size:.73rem;line-height:1.75;color:var(--text);padding:2px 0 6px}
/* inline data chips — the analysis reads like the terminal around it */
.nv-lvl{font-family:'JetBrains Mono';font-size:.7rem;color:#eafcff;background:rgba(124,196,236,.1);border-bottom:1px solid rgba(124,196,236,.35);padding:0 3px;border-radius:2px}
.nv-usd{font-family:'JetBrains Mono';font-size:.7rem;color:#34d399;background:rgba(52,211,153,.09);padding:0 3px;border-radius:2px}
.nv-pct{font-family:'JetBrains Mono';font-size:.7rem;color:#f2c14e;padding:0 2px}
.nv-tick{font-family:'JetBrains Mono';font-size:.69rem;font-weight:700;color:var(--text);background:rgba(126,166,214,.13);border:1px solid rgba(126,166,214,.22);padding:0 4px;border-radius:3px;letter-spacing:.04em}
.nv-term{color:#c084fc;font-weight:600}
@media(max-width:760px){.or-body{font-size:.69rem;line-height:1.7}.nv-tag{font-size:.5rem}}


/* ═══ Nova v3 — one strip, one tap, tabbed detail ═══ */
.nova{padding:0;margin:8px 0;border:1px solid rgba(45,212,191,.18);border-radius:9px;
  background:linear-gradient(180deg,rgba(45,212,191,.05),rgba(45,212,191,.012));overflow:hidden}
.nova::before{display:none}
.nv-strip{display:flex;align-items:center;gap:9px;width:100%;padding:8px 12px;background:none;
  border:0;cursor:pointer;text-align:left;font-family:inherit;color:var(--text)}
.nv-strip:hover{background:rgba(45,212,191,.045)}
.nv-strip>b{font-size:.58rem;letter-spacing:.2em;color:var(--teal);flex-shrink:0}
.nv-wait{cursor:default}
.nv-peek{flex:1;min-width:0;font-size:.68rem;line-height:1.4;color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nv-chev{flex-shrink:0;color:var(--muted);font-size:.7rem;opacity:.7}
.nv-body{border-top:1px solid rgba(45,212,191,.14);display:grid;grid-template-columns:1fr}
.nv-tabs{display:flex;gap:5px;padding:8px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;
  border-bottom:1px solid rgba(126,166,214,.08)}
.nv-tab{flex-shrink:0;display:flex;flex-direction:column;gap:1px;background:none;cursor:pointer;
  border:1px solid var(--border);border-radius:5px;padding:4px 9px;font-family:inherit;
  font-size:.53rem;letter-spacing:.12em;font-weight:800;color:var(--muted);white-space:nowrap}
.nv-tab i{font-style:normal;font-size:.48rem;letter-spacing:.04em;font-weight:500;opacity:.7}
.nv-tab:hover{color:var(--text);border-color:rgba(126,166,214,.4)}
.nv-tab.on{color:var(--teal);border-color:rgba(45,212,191,.45);background:rgba(45,212,191,.09)}
.nv-content{padding:10px 14px 12px}
.nv-content .or-body{padding:0;max-width:88ch}
.nv-content .or-foot{margin-top:9px;padding-top:7px;border-top:1px solid rgba(126,166,214,.08);
  font-size:.52rem;color:var(--muted);opacity:.7;font-family:'JetBrains Mono'}
/* per-pass accent */
.nv-t-zero{color:#f2c14e!important;border-color:rgba(242,193,78,.35)!important}
.nv-t-zero.on{background:rgba(242,193,78,.09)!important}
.nv-t-regime,.nv-t-tape{color:#c084fc!important;border-color:rgba(192,132,252,.35)!important}
.nv-t-regime.on,.nv-t-tape.on{background:rgba(192,132,252,.09)!important}
.nv-t-brief,.nv-t-mythos{color:#7cc4ec!important;border-color:rgba(124,196,236,.35)!important}
.nv-t-brief.on,.nv-t-mythos.on{background:rgba(124,196,236,.09)!important}
span.nv-tag{flex-shrink:0}

/* DESKTOP: tabs become a vertical rail beside the text */
@media(min-width:900px){
  .nv-body{grid-template-columns:158px 1fr}
  .nv-tabs{flex-direction:column;overflow-x:visible;border-bottom:0;
    border-right:1px solid rgba(126,166,214,.08);padding:10px}
  .nv-tab{width:100%;text-align:left}
  .nv-content{padding:12px 16px 14px}
}
/* MOBILE: tighter strip, no wasted room */
@media(max-width:760px){
  .nova{margin:6px 0}
  .nv-strip{padding:7px 10px;gap:7px}
  .nv-strip>b{font-size:.52rem;letter-spacing:.14em}
  .nv-peek{font-size:.63rem}
  .nv-strip .nv-tag{display:none}
  .nv-content{padding:9px 11px 11px}
  .nv-content .or-body{font-size:.69rem;line-height:1.68}
}

/* ═══════════ FLOW CONSOLE (Junction · Regime) ═══════════ */
.flowcon{border:1px solid var(--border);border-radius:10px;background:var(--panel2);padding:12px 16px 14px;margin-bottom:10px}
.fc-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.fc-head b{font-size:.62rem;letter-spacing:.18em;color:var(--text)}
.fc-head span{font-size:.56rem;color:var(--muted);font-family:'JetBrains Mono'}
.fc-ends{display:flex;justify-content:space-between;font-family:'JetBrains Mono';font-size:.58rem;
  letter-spacing:.1em;margin-bottom:5px}
.fc-put-l{color:rgba(248,113,113,.75)} .fc-call-l{color:rgba(52,211,153,.75)}
.fc-ends b{font-size:.68rem;font-weight:700}
.fc-put-l b{color:#f87171} .fc-call-l b{color:#34d399}
.fc-track{position:relative;display:flex;height:20px;border-radius:4px;overflow:hidden;background:rgba(126,166,214,.05)}
.fc-fill{height:100%}
.fc-fill.fc-put{background:linear-gradient(90deg,rgba(248,113,113,.85),rgba(248,113,113,.2))}
.fc-fill.fc-call{background:linear-gradient(90deg,rgba(52,211,153,.2),rgba(52,211,153,.85))}
.fc-mid{position:absolute;left:50%;top:0;bottom:0;width:1px;background:rgba(126,166,214,.3)}
.fc-fulcrum{position:absolute;top:-4px;bottom:-4px;width:2px;background:#eafcff;
  box-shadow:0 0 8px rgba(234,252,255,.6);transform:translateX(-1px)}
.fc-balance{text-align:center;font-family:'JetBrains Mono';font-size:.56rem;letter-spacing:.12em;
  color:var(--muted);margin-top:7px}
.fc-balance b{color:#eafcff;font-weight:700}
.fc-dials{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:13px}
.fc-dial{border:1px solid var(--border);border-radius:8px;background:var(--panel);padding:8px 11px;
  display:flex;flex-direction:column;gap:3px;min-width:0}
.fc-dial i{font-style:normal;font-size:.5rem;letter-spacing:.12em;color:var(--muted);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.fc-dial b{font-family:'JetBrains Mono';font-size:.86rem;font-weight:700;letter-spacing:-.01em}

/* Regime split — the tape needs more room than the bars */
.reg-split{display:grid;grid-template-columns:0.95fr 1.25fr;gap:10px;align-items:stretch}
.reg-col{border:1px solid var(--border);border-radius:10px;background:var(--panel2);padding:11px 12px;min-width:0;overflow:hidden;display:flex;flex-direction:column;max-height:760px}
.reg-hd{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:9px;
  padding-bottom:8px;border-bottom:1px solid rgba(126,166,214,.09)}
.reg-hd b{font-size:.58rem;letter-spacing:.16em;color:var(--teal)}
.reg-hd span{font-size:.52rem;color:var(--muted)}
.reg-note{font-size:.6rem;color:var(--muted);margin-top:9px;line-height:1.55}
/* tape table, compacted for a column instead of a full page */
.reg-col table{width:100%;font-size:.63rem}
.reg-col th{font-size:.52rem!important;letter-spacing:.06em;padding:4px 3px!important;white-space:nowrap}
.reg-col td{padding:3px 3px!important;white-space:nowrap}
/* Height is capped on the COLUMN, not the scroll child — capping the child
   left the shorter column (imbalance, which has no stat boxes above it) with
   dead space under the bars while the grid stretched the row to the tape. */
.reg-col #tapeBody,.reg-col #imbBars{flex:1 1 auto;min-height:0;overflow:auto}
.reg-col #tapeStats{flex:0 0 auto}
/* ═══════════ NOVA HUB ═══════════ */
.novasec{padding:0}
.nv-hub{display:flex;flex-direction:column;gap:12px}
.nv-hero{display:flex;align-items:center;gap:20px;border:1px solid rgba(45,212,191,.2);border-radius:12px;
  background:radial-gradient(120% 140% at 10% 50%,rgba(45,212,191,.08),rgba(45,212,191,.01) 60%);padding:16px 20px}
.nv-core{width:132px;height:132px;flex-shrink:0}
.nc-r1{animation:ncSpin 34s linear infinite;transform-origin:100px 100px}
.nc-r2{animation:ncSpin 19s linear infinite reverse;transform-origin:100px 100px}
.nc-r3{animation:ncSpin 11s linear infinite;transform-origin:100px 100px}
@keyframes ncSpin{to{transform:rotate(360deg)}}
.nc-pulse{animation:ncP 2.8s ease-in-out infinite}
@keyframes ncP{0%,100%{opacity:.5;r:8}50%{opacity:1;r:11}}
.nv-core.live .nc-pulse{filter:drop-shadow(0 0 9px #2dd4bf)}
.nv-hero-txt{min-width:0}
.nv-hero-txt h2{font-size:1.5rem;letter-spacing:.42em;margin:0 0 5px;color:var(--teal);font-weight:800}
.nv-hero-txt p{font-size:.72rem;line-height:1.65;color:var(--muted);margin:0 0 9px;max-width:62ch}
.nv-status{display:flex;flex-wrap:wrap;gap:6px}
.nv-st{font-family:'JetBrains Mono';font-size:.53rem;letter-spacing:.1em;color:var(--muted);
  border:1px solid var(--border);border-radius:20px;padding:3px 10px}
.nv-st.on{color:var(--teal);border-color:rgba(45,212,191,.4);background:rgba(45,212,191,.08)}
.nv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px}
.nv-card{border:1px solid var(--border);border-radius:10px;background:var(--panel2);padding:11px 13px}
.nv-card-hd{font-size:.56rem;letter-spacing:.18em;font-weight:800;color:var(--teal);margin-bottom:7px;
  padding-bottom:6px;border-bottom:1px solid rgba(126,166,214,.09)}
.nv-c-so{border-color:rgba(242,193,78,.24)} .nv-c-so .nv-card-hd{color:#f2c14e;border-color:rgba(242,193,78,.16)}
.nv-c-me{border-color:rgba(192,132,252,.24)} .nv-c-me .nv-card-hd{color:#c084fc;border-color:rgba(192,132,252,.16)}
.nv-c-wa{border-color:rgba(124,196,236,.24)} .nv-c-wa .nv-card-hd{color:#7cc4ec;border-color:rgba(124,196,236,.16)}
.nv-feed-hd{font-size:.55rem;letter-spacing:.22em;color:var(--muted);margin-top:4px}
.nv-feed{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:8px}
.nv-tx{border:1px solid var(--border);border-radius:9px;background:var(--panel2);padding:8px 11px}
.nv-tx summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none}
.nv-tx summary::-webkit-details-marker{display:none}
.nv-tx summary::after{content:'\25be';margin-left:auto;opacity:.4;font-size:.6rem}
.nv-tx[open] summary::after{content:'\25b4'}
.nv-tx summary i{font-style:normal;font-size:.5rem;color:var(--muted);font-family:'JetBrains Mono'}
.nv-tx .or-body{margin-top:8px;padding-top:8px;border-top:1px solid rgba(126,166,214,.08)}

/* ═══════════ MOBILE ═══════════ */
@media(max-width:860px){
  .reg-split{grid-template-columns:1fr}
  .fc-dials{grid-template-columns:repeat(2,1fr)}
  .nv-hero{flex-direction:column;text-align:center;gap:12px;padding:14px}
  .nv-core{width:104px;height:104px}
  .nv-hero-txt h2{font-size:1.2rem;letter-spacing:.32em}
  .nv-status{justify-content:center}
  .nv-grid,.nv-feed{grid-template-columns:1fr}
  .flowcon{padding:9px 10px 11px}
  .reg-col{padding:9px 10px}
}
@media(prefers-reduced-motion:reduce){
  .nc-r1,.nc-r2,.nc-r3,.nc-pulse{animation:none}
}

/* hub source line */
.nv-src{font-family:'JetBrains Mono';font-size:.52rem;color:var(--muted);opacity:.7;letter-spacing:.05em}
@media(max-width:860px){
  .fc-ends{font-size:.52rem}
  .fc-ends b{font-size:.62rem}
  .fc-dials{grid-template-columns:repeat(2,1fr)}
  .flowcon{padding:10px 12px 12px}
  .reg-col table{font-size:.6rem}
  .reg-col{max-height:560px}
}

/* ═══════════════ NOVA COMMAND DECK ═══════════════ */
.nv-deck{display:flex;flex-direction:column;gap:14px}

/* hero */
.nv-hero{position:relative;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:22px;
  border:1px solid rgba(45,212,191,.22);border-radius:14px;padding:18px 22px;overflow:hidden;
  background:
    radial-gradient(90% 160% at 12% 50%,rgba(45,212,191,.11),transparent 62%),
    linear-gradient(180deg,rgba(10,16,22,.9),rgba(8,12,18,.6))}
.nv-hero::after{content:'';position:absolute;inset:0;pointer-events:none;opacity:.35;
  background:repeating-linear-gradient(0deg,rgba(45,212,191,.05) 0 1px,transparent 1px 3px)}
.nv-hero-core{position:relative;z-index:1}
.nv-core{width:150px;height:150px;display:block}
.nc-r1{animation:ncSpin 40s linear infinite;transform-origin:110px 110px}
.nc-r2{animation:ncSpin 22s linear infinite reverse;transform-origin:110px 110px}
.nc-r3{animation:ncSpin 13s linear infinite;transform-origin:110px 110px}
.nc-sweep{animation:ncSpin 6s linear infinite;transform-origin:110px 110px;opacity:.85}
@keyframes ncSpin{to{transform:rotate(360deg)}}
.nc-pulse{animation:ncP 3s ease-in-out infinite}
@keyframes ncP{0%,100%{opacity:.55;r:9}50%{opacity:1;r:12}}
.nv-core.live .nc-pulse{filter:drop-shadow(0 0 12px #2dd4bf)}
.nv-hero-txt{position:relative;z-index:1;min-width:0}
.nv-wordmark{font-size:2.3rem;letter-spacing:.5em;font-weight:800;color:var(--teal);line-height:1;
  text-shadow:0 0 26px rgba(45,212,191,.45)}
.nv-sub{font-family:'JetBrains Mono';font-size:.6rem;letter-spacing:.16em;color:var(--muted);margin:9px 0 12px}
.nv-status{display:flex;flex-wrap:wrap;gap:6px}
.nv-st{display:inline-flex;align-items:center;gap:6px;font-family:'JetBrains Mono';font-size:.53rem;
  letter-spacing:.1em;color:var(--muted);border:1px solid var(--border);border-radius:20px;padding:3px 11px}
.nv-st i{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.45}
.nv-st.on{color:var(--teal);border-color:rgba(45,212,191,.4);background:rgba(45,212,191,.08)}
.nv-st.on i{opacity:1;box-shadow:0 0 7px currentColor;animation:ncP 2.4s ease-in-out infinite}
.nv-gauges{position:relative;z-index:1;display:flex;gap:12px}
.nv-g{border:1px solid var(--border);border-radius:9px;background:rgba(8,12,18,.55);padding:9px 13px;min-width:132px}
.nv-g-lab{font-size:.48rem;letter-spacing:.14em;color:var(--muted);margin-bottom:5px}
.nv-g-bar{height:5px;border-radius:3px;background:rgba(248,113,113,.28);overflow:hidden;margin-bottom:5px}
.nv-g-bar>div{height:100%;background:linear-gradient(90deg,rgba(52,211,153,.6),#34d399)}
.nv-g-val{font-family:'JetBrains Mono';font-size:.56rem;color:var(--muted)}
.nv-g-val.big{font-size:1.25rem;font-weight:700;line-height:1.15;margin-bottom:2px}

/* the board */
.nv-const{border:1px solid var(--border);border-radius:12px;background:var(--panel2);padding:12px 14px}
.nv-const-hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.nv-const-hd b{font-size:.6rem;letter-spacing:.18em;color:var(--teal)}
.nv-const-hd span{font-size:.52rem;color:var(--muted)}
.nv-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(124px,1fr));gap:7px}
.nv-tile{display:flex;flex-direction:column;gap:2px;text-align:left;cursor:pointer;font-family:inherit;
  border:1px solid var(--border);border-radius:8px;padding:8px 10px;position:relative;overflow:hidden;
  background:var(--panel);transition:transform .12s ease,border-color .12s ease}
.nv-tile::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;opacity:calc(.35 + var(--mag) * .65)}
.nv-tile.pos::before{background:#34d399} .nv-tile.neg::before{background:#c084fc}
.nv-tile:hover{transform:translateY(-2px);border-color:rgba(45,212,191,.45)}
.nv-tile-s{font-size:.7rem;font-weight:800;letter-spacing:.05em;color:var(--text)}
.nv-tile-p{font-family:'JetBrains Mono';font-size:.66rem;color:#7cc4ec}
.nv-tile-k{font-family:'JetBrains Mono';font-size:.54rem;color:var(--muted)}
.nv-tile-k i{font-style:normal;opacity:.75}

/* briefing */
.nv-brief-hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:2px}
.nv-brief-hd b{font-size:.6rem;letter-spacing:.18em;color:var(--teal)}
.nv-brief-hd span{font-size:.52rem;color:var(--muted)}
.nv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:10px}
.nv-card{border:1px solid var(--border);border-radius:11px;background:var(--panel2);padding:12px 14px;position:relative;overflow:hidden}
.nv-card-hd{display:flex;align-items:center;gap:8px;font-size:.55rem;letter-spacing:.18em;font-weight:800;
  color:var(--teal);margin-bottom:9px;padding-bottom:7px;border-bottom:1px solid rgba(126,166,214,.09)}
.nv-ic{font-size:.8rem;opacity:.85;line-height:1}
.nv-c-pu{border-color:rgba(45,212,191,.26)}
.nv-c-ca{border-color:rgba(242,193,78,.26)} .nv-c-ca .nv-card-hd{color:#f2c14e;border-color:rgba(242,193,78,.16)}
.nv-c-ro{border-color:rgba(124,196,236,.26)} .nv-c-ro .nv-card-hd{color:#7cc4ec;border-color:rgba(124,196,236,.16)}
.nv-c-so{border-color:rgba(192,132,252,.26)} .nv-c-so .nv-card-hd{color:#c084fc;border-color:rgba(192,132,252,.16)}
.nv-c-me{border-color:rgba(126,166,214,.26)} .nv-c-me .nv-card-hd{color:#9fb4cc;border-color:rgba(126,166,214,.16)}
.nv-c-wa{border-color:rgba(248,113,113,.26)} .nv-c-wa .nv-card-hd{color:#f87171;border-color:rgba(248,113,113,.16)}
.nv-src{font-family:'JetBrains Mono';font-size:.52rem;color:var(--muted);opacity:.7;letter-spacing:.05em}
/* awaiting state gets a scanning bar so the page never looks dead */
.nv-await{position:relative}
.nv-scan{position:absolute;left:0;right:0;top:0;height:2px;overflow:hidden}
.nv-scan::after{content:'';position:absolute;top:0;left:-45%;width:45%;height:2px;
  background:linear-gradient(90deg,transparent,#2dd4bf,transparent);animation:nvScan 2.6s linear infinite}
@keyframes nvScan{to{left:115%}}

@media(max-width:900px){
  .nv-hero{grid-template-columns:1fr;text-align:center;gap:12px;padding:16px 14px}
  .nv-hero-core{margin:0 auto}
  .nv-core{width:112px;height:112px}
  .nv-wordmark{font-size:1.5rem;letter-spacing:.34em}
  .nv-status,.nv-gauges{justify-content:center}
  .nv-gauges{flex-wrap:wrap}
  .nv-g{flex:1;min-width:0}
  .nv-grid{grid-template-columns:1fr}
  .nv-tiles{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:6px}
  .nv-tile{padding:7px 8px}
}
@media(prefers-reduced-motion:reduce){
  .nc-r1,.nc-r2,.nc-r3,.nc-sweep,.nc-pulse,.nv-scan::after,.nv-st.on i{animation:none}
}

/* ============================================================================
   NEXUS v10 - THE LADDER
   Instrument chrome, not dashboard chrome: hairline rules, monospace numerics,
   and a stage that takes the height it deserves. The chart IS the page here, so
   everything else is compressed to give it room.
   ============================================================================ */
.nexus{display:flex;flex-direction:column;gap:7px}
.nx-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.nx-btn{font-size:.64rem;padding:4px 9px;border-color:var(--border)}
.nx-legend{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-left:auto;
  font-size:.6rem;letter-spacing:.06em;color:var(--muted)}
.nx-lg{display:inline-flex;align-items:center;gap:5px;cursor:help}
.nx-lg s{width:18px;height:5px;display:inline-block;text-decoration:none;border-radius:3px}
.nx-lg s.aeg{background:rgba(45,212,191,.85)}
.nx-lg s.mae{background:rgba(244,114,62,.85)}
.nx-lg s.kng{background:rgba(242,193,78,.95);height:8px}

/* HUD: a strip of readings, not a row of cards. */
.nx-hud{display:flex;flex-wrap:wrap;border:1px solid var(--border);border-radius:6px;
  background:var(--panel2);overflow:hidden}
.nx-cell{flex:1 1 118px;min-width:100px;padding:5px 10px;
  border-right:1px solid var(--border);display:flex;flex-direction:column;gap:1px;cursor:help}
.nx-cell:last-child{border-right:0}
.nx-cell b{font-size:.54rem;font-weight:600;letter-spacing:.1em;color:var(--faint)}
.nx-cell span{font-family:'JetBrains Mono';font-size:.88rem;font-weight:700;color:var(--text)}

/* The stage takes everything left in the viewport. dvh rather than vh so the
   iOS URL bar collapsing does not clip the bottom of the chart. */
.nx-stage{position:relative;height:calc(100dvh - 236px);min-height:340px;
  border:1px solid var(--border);border-radius:6px;background:#05070c;overflow:hidden}
.nx-wait{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;text-align:center;font-size:.74rem;color:var(--muted);
  line-height:1.7;pointer-events:none;padding:16px}

/* The explainer is long and useful but it should not push the chart around, so
   it is collapsed by default and toggled from the top bar. */
.nx-note{display:none;font-size:.66rem;line-height:1.75;color:var(--muted);
  border-top:1px solid var(--border);padding-top:8px}
.nx-note.open{display:block}
.nx-note b{color:var(--text)}
.nx-note em{color:var(--gold);font-style:normal}

/* True fullscreen, plus a fixed-position fallback for iOS Safari, which has no
   element fullscreen API. */
#nexusSec:fullscreen{background:var(--bg);padding:10px}
#nexusSec:fullscreen .nx-stage{height:calc(100dvh - 120px)}
#nexusSec.nx-faux{position:fixed;inset:0;z-index:9999;background:var(--bg);
  padding:10px;overflow:auto;margin:0}
#nexusSec.nx-faux .nx-stage{height:calc(100dvh - 120px)}

@media (max-width:860px){
  .nx-legend{margin-left:0;width:100%;font-size:.56rem;gap:10px;order:9}
}
@media (max-width:720px){
  /* Phone: the chart is the whole point, so the ticker and the two toggles get
     one row and everything else stands down. */
  .nx-stage{height:calc(100dvh - 224px);min-height:280px}
  .nx-legend{display:none}
  .nx-howto{display:none}
  .nx-top{gap:6px}
  .nx-btn{padding:4px 7px;font-size:.6rem}
  .nx-cell{flex:1 1 33%;min-width:0;padding:4px 7px}
  .nx-cell span{font-size:.74rem}
  .nx-cell b{font-size:.5rem}
  .nx-cell:nth-child(4),.nx-cell:nth-child(5){border-top:1px solid var(--border)}
}

/* ---- Mythos replay ---- */
.orr-replay{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:7px 10px;margin:0 0 8px;background:var(--panel2);
  border:1px solid var(--border);border-radius:8px}
.orr-play{width:30px;height:26px;flex:0 0 auto;background:transparent;
  border:1px solid var(--border);border-radius:6px;color:var(--teal);
  font-size:.7rem;cursor:pointer;transition:border-color .15s,color .15s}
.orr-play:hover{border-color:var(--teal);color:var(--text)}
#orrScrub{flex:1 1 180px;min-width:110px;height:3px;appearance:none;-webkit-appearance:none;
  background:linear-gradient(90deg,var(--border),var(--teal));border-radius:2px;
  outline:none;cursor:pointer;padding:0}
#orrScrub::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:12px;height:12px;
  border-radius:50%;background:var(--teal);border:2px solid var(--panel2);cursor:grab}
#orrScrub::-moz-range-thumb{width:12px;height:12px;border-radius:50%;
  background:var(--teal);border:2px solid var(--panel2);cursor:grab}
.orr-when{font-family:'JetBrains Mono';font-size:.68rem;font-weight:700;
  letter-spacing:.04em;color:var(--gold);min-width:84px;text-align:center}
.orr-when.live{color:var(--teal)}
.orr-spd button{padding:4px 7px;font-size:.66rem}
.orr-livebtn{font-size:.66rem;padding:4px 9px;border-color:var(--border)}
.orr-crossings{flex:1 1 100%;display:flex;gap:12px;flex-wrap:wrap;
  font-size:.66rem;color:var(--muted);border-top:1px solid var(--border);
  padding-top:6px;margin-top:2px}
.orr-cx b{font-family:'JetBrains Mono';color:var(--text);font-weight:700}
.orr-cx i{font-style:normal;font-weight:600}
.orr-cx.dim{color:var(--faint)}
.orr-rrot{font-family:'JetBrains Mono';font-size:.62rem;color:var(--muted);
  margin-left:5px;letter-spacing:-.02em}
.orr-rrot i{font-style:normal;margin-left:1px}
.orr-stale{font-family:'JetBrains Mono';font-size:.6rem;color:var(--gold);
  opacity:.7;margin-left:4px}
@media (max-width:720px){
  .orr-when{min-width:72px;font-size:.62rem}
  .orr-livebtn{display:none}
  .orr-crossings{font-size:.61rem;gap:8px}
}

/* ---- THE FORGE ----------------------------------------------------------
   One card per symbol, in the language of the shared board because that is the
   layout that already reads well. Four rows of numbers you act on, everything
   else folded away. The complaint was that there was too much on screen, so the
   alternates and Nova's write-up are both behind a toggle by default.
   ------------------------------------------------------------------------- */
.fg-wrap{border:1px solid var(--border);border-radius:8px;background:var(--panel2);
  padding:11px 12px;margin-bottom:10px}
.fg-title{font-size:.6rem;font-weight:700;letter-spacing:.14em;color:var(--gold);
  margin-bottom:10px;display:flex;align-items:center;gap:9px}
.fg-title i{font-style:normal;font-weight:400;letter-spacing:.04em;color:var(--faint);font-size:.58rem}
.fg-casebtn{margin-left:auto;background:transparent;border:1px solid var(--border);
  border-radius:5px;color:var(--muted);font-size:.55rem;letter-spacing:.1em;
  padding:3px 8px;cursor:pointer;font-family:inherit}
.fg-casebtn:hover,.fg-casebtn.on{border-color:var(--teal);color:var(--teal)}
.fg-empty{font-size:.72rem;color:var(--muted);line-height:1.75;padding:4px 0}
.fg-empty span{color:var(--faint);font-size:.66rem}
.fg-stood{font-size:.66rem;color:var(--faint);line-height:1.7;
  border-top:1px solid var(--border);margin-top:9px;padding-top:8px}
.fg-stood b{color:var(--gold);font-family:'JetBrains Mono'}

.fg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:9px}
.fg-card{border:1px solid var(--border);border-radius:6px;background:rgba(0,0,0,.24);
  padding:9px 10px}
.fg-h{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:6px}
.fg-h b{font-family:'JetBrains Mono';font-size:.94rem;color:var(--text)}
.fg-bias{font-size:.54rem;font-weight:700;letter-spacing:.1em;padding:2px 6px;border-radius:3px}
.fg-bias.l{background:rgba(45,212,191,.14);color:var(--teal)}
.fg-bias.s{background:rgba(244,114,62,.14);color:#f4723e}
.fg-thesis{font-size:.54rem;letter-spacing:.1em;color:var(--muted)}
.fg-ivr{font-family:'JetBrains Mono';font-size:.56rem;color:var(--cyan);cursor:help}
.fg-ivr.dim{color:var(--faint)}
.fg-score{margin-left:auto;font-family:'JetBrains Mono';font-size:.82rem;font-weight:700;
  color:var(--gold);cursor:help}

.fg-c{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;
  font-family:'JetBrains Mono';font-size:.6rem;color:var(--faint);
  border-bottom:1px solid var(--border);padding-bottom:7px;margin-bottom:7px}
.fg-c b{font-size:.78rem;color:var(--text)}
.fg-c span{color:var(--muted);margin-right:3px}
.fg-c i{font-style:normal}
.fg-c i.fg-theta{cursor:help}

/* The four numbers. Underlying and contract side by side, because a level you
   cannot price in contract terms is only half a plan. */
.fg-t{width:100%;border-collapse:collapse;font-family:'JetBrains Mono';font-size:.66rem}
.fg-t th{font-size:.5rem;font-weight:600;letter-spacing:.1em;color:var(--faint);
  text-align:right;padding-bottom:3px;font-family:inherit}
.fg-t th:first-child{text-align:left}
.fg-t td{padding:2px 0;text-align:right}
.fg-t td.fg-l{text-align:left;font-size:.54rem;letter-spacing:.1em;color:var(--faint)}
.fg-t td.fg-u{color:var(--text);font-weight:600}
.fg-t td.fg-p{color:var(--muted)}
.fg-t td.fg-x{width:56px;font-weight:600}
.fg-t tr.en td.fg-u,.fg-t tr.en td.fg-p{color:var(--text)}
.fg-t tr.st td.fg-u,.fg-t tr.st td.fg-x{color:var(--red,#f87171)}
.fg-t tr.t1 td.fg-u,.fg-t tr.t1 td.fg-x{color:var(--teal)}
.fg-t tr.t2 td.fg-u,.fg-t tr.t2 td.fg-x{color:var(--cyan)}

.fg-rr{display:flex;gap:12px;flex-wrap:wrap;margin-top:7px;padding-top:6px;
  border-top:1px solid var(--border);font-size:.58rem;color:var(--faint)}
.fg-rr span{cursor:help;letter-spacing:.06em}
.fg-rr b{font-family:'JetBrains Mono';font-size:.7rem;color:var(--text);font-weight:700}
.fg-rr i{font-style:normal;font-family:'JetBrains Mono'}
.fg-why{font-size:.65rem;line-height:1.65;color:var(--muted);margin-top:7px}

.fg-more{margin-top:7px;background:transparent;border:0;border-top:1px solid var(--border);
  width:100%;text-align:left;padding:6px 0 0;color:var(--faint);font-size:.56rem;
  letter-spacing:.08em;cursor:pointer;font-family:inherit}
.fg-more:hover,.fg-more.on{color:var(--teal)}
.fg-alts{display:none;margin-top:5px}
.fg-alts.open{display:block}
.fg-alt{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;
  font-family:'JetBrains Mono';font-size:.58rem;color:var(--faint);padding:3px 0;
  border-top:1px solid rgba(148,163,184,.08)}
.fg-alt b{color:var(--text);font-size:.66rem}
.fg-alt i{font-style:normal}
.fg-alt span{color:var(--teal)}
.fg-alt em{margin-left:auto;font-style:normal;color:var(--gold);font-weight:700}

.fg-case{display:none;border-top:1px solid var(--border);margin-top:10px;padding-top:9px;
  font-size:.71rem;line-height:1.75;color:var(--muted)}
.fg-case.open{display:block}
.fg-case b,.fg-case strong{color:var(--text)}
.fg-case h2{font-size:.58rem;letter-spacing:.12em;color:var(--teal);margin:9px 0 4px}
.fg-caseh{font-size:.54rem;letter-spacing:.13em;color:var(--faint);margin-bottom:6px}
.fg-caseh i{font-style:normal;margin-left:6px}
.fg-foot{border-top:1px solid var(--border);margin-top:10px;padding-top:8px;
  font-size:.59rem;line-height:1.7;color:var(--faint)}
.fg-foot b{color:var(--muted)}
@media (max-width:720px){
  .fg-grid{grid-template-columns:1fr}
  .fg-wrap{padding:9px 10px}
  .fg-c{font-size:.56rem}
}

/* ---- CHRONOS controls (timeframe + studies) ---- */
.nx-tf button,.nx-tools button{padding:4px 7px;font-size:.62rem}
.nx-tools button{letter-spacing:.04em}

/* ---- AETHER: one answer, one readiness layer ----------------------------
   Two lists of contracts on one screen was the single most confusing thing in
   the app. The Forge is the answer; everything below is the working, and the
   working is closed until you ask for it. */
.ae-detailbtn{width:100%;background:transparent;border:1px dashed var(--border);
  border-radius:7px;color:var(--faint);font-size:.6rem;letter-spacing:.12em;
  padding:9px;margin:4px 0 10px;cursor:pointer;font-family:inherit;
  transition:border-color .15s,color .15s}
.ae-detailbtn:hover,.ae-detailbtn.on{border-color:var(--teal);color:var(--teal)}
.ae-detail{display:none}
.ae-detail.open{display:block}
.ae-detail-note{font-size:.68rem;line-height:1.7;color:var(--muted);
  border-left:2px solid var(--border);padding:2px 0 2px 10px;margin-bottom:10px}
.ae-detail-note b{color:var(--text)}

/* ---- NOVA: THE RANGE ----------------------------------------------------
   A ridgeline needs height and it needs black. The gradient floor gives the
   terrain something to sit on without drawing a horizon line that would compete
   with the ridges themselves. No scanline overlay this time: the sweep is drawn
   in canvas against the actual crests, which is the difference between an
   effect that means something and chrome laid on top.
   ------------------------------------------------------------------------ */
.nv-range{position:relative;border:1px solid var(--border);border-radius:12px;
  background:linear-gradient(180deg,#050a10 0%,#04070c 62%,#020407 100%);
  height:clamp(360px,62vh,640px);margin-bottom:10px;overflow:hidden}
.nv-range canvas{width:100%;height:100%;display:block;cursor:crosshair}
.nv-range-cap{position:absolute;left:14px;top:9px;font-size:.55rem;font-weight:700;
  letter-spacing:.18em;color:var(--teal);opacity:.8;pointer-events:none}
.nv-range-cap i{font-style:normal;font-weight:400;letter-spacing:.05em;
  color:var(--faint);margin-left:10px}
.nv-range-key{position:absolute;right:14px;top:8px;display:flex;gap:12px;
  font-size:.54rem;letter-spacing:.1em;color:var(--faint);pointer-events:none}
.nv-range-key span{display:inline-flex;align-items:center;gap:5px}
.nv-range-key s{width:14px;height:3px;display:inline-block;text-decoration:none;border-radius:2px}
.nv-range-key s.up{background:rgba(45,212,191,.9)}
.nv-range-key s.dn{background:rgba(244,114,62,.9)}
.nv-range-key s.kg{background:rgba(242,193,78,.95);width:6px;height:6px;border-radius:50%}
.nv-range-key s.fl{background:rgba(148,163,184,.8);width:2px;height:10px}
@media (max-width:720px){
  .nv-range{height:clamp(300px,52vh,420px)}
  .nv-range-cap i{display:none}
  .nv-range-key{display:none}
}
