/* Chart controls share its footprint; dock buttons reveal the existing tools. */
#chart-wrap{display:flex;flex-direction:column;overflow:visible}
#chart-wrap #chart{flex:1;min-height:0;height:0}
#chart-wrap #interval-widget{position:sticky;top:0;z-index:2;flex:none;display:flex;align-items:center;justify-content:space-between;gap:4px;min-height:36px;padding:2px 6px;border:0;background:var(--surface);font:var(--chart-control-text)}
#chart-wrap #interval-widget label{display:flex;align-items:center;gap:4px}
#chart-wrap #timeframe{min-height:32px;max-width:84px;font:var(--chart-control-text)}
#chart-wrap #chart-expand{flex:none;margin:0;min-height:32px;padding:3px 6px;font:var(--chart-control-text)}
#chart-wrap #market-time{font:var(--chart-hint-text);color:var(--dim)}
.waiting-count{font:var(--form-control-text)}
#waiting{bottom:env(safe-area-inset-bottom)}
#waiting.on~.game-nav{display:none}
#waiting.on~.nav-scroll-button{display:none}
/* Tools and game views share one horizontally scrollable row. */
:root{--nav-icon-text:600 20px/1.15 var(--sans);--nav-scroll-size:44px}
.game-nav{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;scroll-snap-type:x proximity;overscroll-behavior-x:contain;touch-action:pan-x}
.game-nav::-webkit-scrollbar{display:none}
.phone.in-round .game-nav button{flex:0 0 62px;min-width:44px;scroll-snap-align:start}
.phone:not(.in-round) .game-tool{display:none}
.game-nav{background:var(--chrome);border-color:var(--chrome-lift)}
.game-nav button{flex:1 0 62px;min-width:44px;color:var(--chrome-muted);border-radius:10px}
.game-nav button[aria-pressed=true],.game-nav button[aria-current]{color:var(--button-ink);background:var(--brand)}
.game-nav button:focus-visible{outline-color:var(--button-ink);outline-offset:-4px}
.game-nav.nav-has-previous{left:var(--nav-scroll-size)}
.game-nav.nav-has-next{right:var(--nav-scroll-size)}
.nav-scroll-button{position:absolute;bottom:0;z-index:40;display:grid;place-items:center;width:var(--nav-scroll-size);height:var(--dock-height);padding-bottom:env(safe-area-inset-bottom);border-top:1px solid var(--chrome-lift);background:var(--chrome-lift);color:var(--button-ink);font:var(--nav-icon-text);touch-action:manipulation}
.nav-scroll-previous{left:0}
.nav-scroll-next{right:0}
.nav-scroll-button:focus-visible{outline-color:var(--button-ink);outline-offset:-4px}
.app-header .header-profile,.app-header .exit-link{color:var(--button-ink)}
.app-header button:focus-visible{outline-color:var(--button-ink)}
.game-nav button .nav-icon{font:var(--nav-icon-text)}
.game-nav button>span:last-child{font:var(--chart-control-text)}
.phone.in-round #game.chart-expanded{bottom:var(--dock-height);z-index:30}
.competition-strip{display:grid;grid-template-columns:minmax(0,1fr) 114px minmax(0,1fr);grid-template-rows:52px 1fr;align-items:center;gap:0 6px;padding:0 8px;box-sizing:border-box}
.competition-strip[hidden]{display:none}
.competition-strip #competition-open{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;min-width:0;padding:3px 0}
.competition-strip #competition-rank{white-space:nowrap}
.competition-strip #competition-gap{width:100%;max-width:none;text-align:left;font:var(--chart-hint-text);white-space:normal;overflow-wrap:anywhere}
.power-slot{min-width:0}
.competition-strip #powers-open{display:block;width:100%;min-height:44px;max-height:52px;padding:5px 4px;border-radius:var(--r-sm);background:var(--brand);color:var(--surface);font:var(--control-emphasis);text-align:center}
.competition-strip #powers-open[hidden]{display:none}
.competition-strip #powers-open:disabled{background:var(--surface-2);color:var(--dim);cursor:not-allowed;opacity:1}
.phone.in-round:has(#watch-live-open:not([hidden])){--competition-height:132px}
.competition-strip:has(#watch-live-open:not([hidden])){grid-template-rows:52px 28px 48px}
#watch-live-open{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:8px;border-radius:var(--r-sm);background:var(--action-blue);color:var(--button-ink);font:var(--control-emphasis)}
#watch-live-open[hidden]{display:none}
#watch-live-open:focus-visible{outline-color:var(--action-blue);outline-offset:2px}

/* Keep time gestures with the candles, above any expanded tools. */
#chart-wrap .chart-axis-strip{position:sticky;bottom:0;z-index:2;display:flex;align-items:stretch;width:100%;height:44px}
#chart-axis{flex:1;min-width:0;width:0;height:100%}
.chart-axis-buttons{display:flex;flex:none;background:var(--surface)}
.chart-axis-buttons button{width:44px;min-height:44px;border-left:1px solid var(--line);color:var(--brand);font:var(--form-control-text);touch-action:manipulation}
.chart-axis-buttons button:focus-visible{outline:2px solid var(--brand);outline-offset:-3px}

/* Focusable phone inputs need readable text without browser focus magnification. */
:root{--trade-input-text:400 16px/1.4 var(--sans)}
.stepper input.q,#order-presets{font:var(--trade-input-text)}
/* The dock owns trade disclosure; execution stays directly below the chart axis. */
#trade-controls>.buys{margin-bottom:4px}
#order-note:empty,#posline:empty,#data-status:empty{display:none}
#trade-controls>.buys .btn{height:44px;min-height:44px;padding-block:8px}
#trade-controls .order-size-mode button{min-height:44px}
#trade-controls .stepper,#trade-controls #order-presets{height:46px}
#trade-controls .stepper button{width:44px;height:44px}
#trade-controls .stepper input.q{height:44px}
#trade-controls .order-brackets summary{min-height:44px;padding-block:13px}
.order-context{display:grid;gap:2px;flex:1;min-width:0;text-align:right}
.order-context #order-estimate{min-width:0;margin:0;text-align:right;overflow-wrap:anywhere}
.order-capacity{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:0 4px;color:var(--dim);font:var(--chart-control-text)}
.order-capacity #cost{color:var(--ink);font:var(--chart-control-text)}
.game-market [data-widget="chart-wrap"]{position:sticky;top:0;z-index:3}

/* Whole-game context stays separate from the countdown to the next cut. */
#game-progress{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:8px;align-self:stretch;border-top:1px solid var(--line);color:var(--ink);font:var(--chart-control-text);white-space:nowrap}
#game-time{font-variant-numeric:tabular-nums}

/* Saturated room cards share white text and a distinct scenario accent. */
:root{
  --room-momentum:var(--chrome-lift);--room-momentum-deep:var(--chrome);
  --room-lunch:var(--action-teal);--room-lunch-deep:#115e59;
  --room-closing:var(--action-blue);--room-closing-deep:#1e3a8a;
  --room-glass:#ffffff18;--room-glass-line:#ffffff35;
  --room-title-text:750 19px/1.2 var(--sans);
  --room-kicker-text:700 10px/1.3 var(--sans);
  --room-pitch-text:500 14px/1.45 var(--sans);
  --room-window-text:700 12px/1.4 var(--sans);
  --room-shadow:0 8px 22px #14234220;
}
.room-momentum{--room-accent:var(--room-momentum);--room-deep:var(--room-momentum-deep)}
.room-lunch{--room-accent:var(--room-lunch);--room-deep:var(--room-lunch-deep)}
.room-closing{--room-accent:var(--room-closing);--room-deep:var(--room-closing-deep)}
.room{position:relative;padding:16px;gap:12px;border:1px solid var(--room-accent);border-radius:16px;background:linear-gradient(125deg,var(--room-accent),var(--room-deep));color:var(--button-ink);box-shadow:var(--room-shadow);margin-bottom:18px}
.room-identity{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.room-identity>div{min-width:0}
.room-icon{display:grid;place-items:center;flex:none;width:48px;height:48px;border-radius:14px;border:1px solid var(--room-glass-line);background:var(--room-glass);color:var(--button-ink)}
.room-icon svg{width:28px;height:28px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.room-copy .room-kicker{margin:0 0 4px;color:var(--button-ink);font:var(--room-kicker-text);letter-spacing:1px;text-transform:uppercase}
.room-copy h2{margin:0;color:var(--button-ink);font:var(--room-title-text);letter-spacing:-.3px}
.room-copy .room-window{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:3px 8px;margin:0 0 12px;padding:8px 10px;border-radius:8px;border:1px solid var(--room-glass-line);background:var(--room-glass);color:var(--button-ink);font:var(--room-window-text)}
.room-window span{color:var(--button-ink);font:var(--chart-hint-text)}
.room-copy .room-pitch{margin:0;color:var(--button-ink);font:var(--room-pitch-text)}
.room-filters{margin-top:2px}
.room-filters summary{min-height:36px;padding:9px 0 5px;color:var(--button-ink);font:var(--chart-control-text)}
.room-filters p{padding:8px 0;color:var(--button-ink);font:var(--form-help-text)}
.room-format{display:flex;flex-direction:column;gap:2px;color:var(--button-ink);font:var(--chart-control-text)}
.room-format b{color:var(--button-ink);font:var(--control-emphasis)}
.room .room-start{min-width:112px;min-height:46px;padding:12px 16px;border:1px solid var(--button-ink);border-radius:10px;background:var(--surface);color:var(--room-accent);font:var(--control-emphasis)}
.room .room-start:enabled:hover{filter:brightness(1.08)}
.room :focus-visible{outline:3px solid var(--button-ink);outline-offset:3px}
@media(max-width:350px){.room{padding:13px}.room-identity{gap:10px}.room-icon{width:42px;height:42px}.room-copy h2{font-size:18px}}

/* Position links use the chart action palette. */
.position-card .position-top{align-items:center}
.position-symbol{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:8px 12px;border-radius:var(--r-sm);background:var(--brand-soft);color:var(--brand);font:var(--control-emphasis)}
.position-symbol:hover{text-decoration:underline;text-underline-offset:3px}

/* A short, decorative celebration only for the confirmed first-place result. */
:root{
  --winner-gold:#ffda79;--winner-glow:#ffda7940;--winner-cyan:#79e0ef;--podium-bronze:#e7b18a;
  --bronze-trophy-filter:grayscale(1) sepia(1) saturate(2) hue-rotate(-20deg) brightness(.8);
  --winner-title:800 34px/1.1 var(--sans);--winner-rank:850 64px/1 var(--sans);
  --winner-medal:400 76px/1.2 var(--sans);
}
.lb-row:disabled{cursor:default}
.lb-row:disabled .trader-fills{color:var(--dim)}
#winner-burst{display:none}
#results.podium .result-hero{position:relative;isolation:isolate;overflow:hidden;margin:14px 14px 20px;padding:26px 16px;border:1px solid var(--award-color,var(--winner-gold));border-radius:20px;background:radial-gradient(ellipse at 50% 15%,var(--chrome-lift),var(--chrome) 75%);box-shadow:var(--shadow)}
.podium .result-hero>.medal{font:var(--winner-medal);margin:0 0 8px;filter:drop-shadow(0 0 20px var(--winner-glow));animation:trophy-arrive 850ms cubic-bezier(.2,.8,.2,1.2) both}
.podium .result-hero>.lab{color:var(--button-ink);font:var(--winner-title);margin-bottom:12px}
.podium .result-hero>.big{color:var(--award-color,var(--winner-gold));font:var(--winner-rank)}
.podium .result-hero>.sub{color:var(--chrome-muted);font:var(--form-help-text);margin-top:12px}
#results.silver{--award-color:var(--chrome-muted)}
#results.bronze{--award-color:var(--podium-bronze)}
.silver .result-hero>.medal{filter:grayscale(1)}
.bronze .result-hero>.medal{filter:var(--bronze-trophy-filter)}
#feedback-dialog,#guest-access-dialog{width:min(94vw,440px);max-height:90dvh;overflow:auto;padding:0;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ink)}
.feedback-body{padding:0 16px 16px}
.feedback-body p,.feedback-body small{font:var(--form-help-text);color:var(--dim)}
#feedback-form{display:grid;gap:10px}
#feedback-form[hidden]{display:none}
#feedback-form label{font:var(--control-emphasis);color:var(--ink)}
#feedback-form select,#feedback-form textarea{width:100%;min-height:44px;padding:10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font:var(--trade-input-text)}
#feedback-form textarea{resize:vertical}
#feedback-form select:focus-visible,#feedback-form textarea:focus-visible{outline:2px solid var(--action-blue);outline-offset:2px}
#feedback-status{overflow-wrap:anywhere}
.feedback-entry{min-height:44px;margin-top:10px}
/* Feedback uses the warm accent within existing chrome, keeping the chart clear. */
:root{--feedback-accent:var(--winner-gold);--feedback-ink:var(--chrome)}
.game-nav #feedback-nav{background:var(--feedback-accent);color:var(--feedback-ink)}
.game-nav #feedback-nav:hover{background:var(--surface)}
.app-header .header-try{display:flex;align-items:center;justify-content:center;flex:0 0 92px;min-width:0;min-height:44px;padding:4px 6px;border:1px solid var(--brand);border-radius:var(--r-sm);background:var(--brand);color:var(--button-ink);font:var(--control-emphasis);text-align:center;text-decoration:none;touch-action:manipulation}
.app-header .header-try:hover{background:var(--brand-lift);border-color:var(--brand-lift)}
.app-header .header-try:focus-visible{outline-color:var(--button-ink);outline-offset:3px}
.app-header{gap:4px;padding-inline:8px}
.app-header .header-home{flex:1 1 170px;min-width:60px;max-width:170px}
.app-header .header-stats{min-width:44px;padding-inline:4px;font:var(--control-emphasis)}
.app-header .exit-link{margin-left:0}
.podium .result-secondary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:12px}
.podium .result-secondary .btn{min-height:50px;padding:10px;gap:4px;font:var(--control-emphasis)}
.result-primary{padding-top:0;padding-bottom:12px}
.result-details-link{display:flex;align-items:center;justify-content:space-between;min-height:44px;padding:8px 4px;color:var(--action-blue);font:var(--control-emphasis);text-decoration:none}
.result-review{border-top:1px solid var(--line);background:var(--surface);scroll-margin-top:12px}
.result-review h2{margin:0;font:var(--room-title-text)}
.trade-account-summary{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:start;gap:12px;padding:8px 0;border-top:1px solid var(--line);margin-bottom:4px}
.trade-account-summary .order-context{align-content:start;gap:4px}
.trade-pnl-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-width:0}
.trade-pnl-summary>div{display:flex;flex-direction:column;gap:3px;min-width:0}
.trade-pnl-summary span{font:var(--chart-control-text);color:var(--dim)}
.trade-pnl-summary b{font:var(--control-emphasis);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
/* Keep close beside presets without adding a trading row. */
#trade-controls>.qtyrow{grid-template-columns:minmax(116px,1fr) 76px 88px;gap:6px}
#trade-close-position{min-height:46px;height:46px;padding:4px 6px;background:var(--action-blue);color:var(--button-ink);font:var(--control-emphasis)}
#trade-close-position:focus-visible{outline-color:var(--action-blue);outline-offset:2px}
@media(max-height:740px){
 #trade-controls{display:grid;grid-template-columns:52px minmax(116px,1fr) 76px 88px;gap:6px}
 #trade-controls>.buys{grid-column:1/-1;margin:0}
 #trade-controls>.order-size-mode{grid-column:1;grid-row:2;flex-direction:column;gap:0;margin:0;align-self:center}
 #trade-controls>.order-size-mode button{width:100%;min-height:24px;padding:2px 4px}
 #trade-controls>.qtyrow{display:contents}
 #trade-controls .qtyrow>.stepper{grid-column:2;grid-row:2;width:100%;min-width:0;align-self:center}
 #trade-controls #order-presets{grid-column:3;grid-row:2;width:100%;min-width:0;align-self:center;padding-inline:5px;font:var(--control-emphasis)}
 #trade-close-position{grid-column:4;grid-row:2}
 #trade-controls>:is(.trade-account-summary,.posline,.order-brackets,#order-note){grid-column:1/-1}
 .trade-account-summary{gap:8px;padding-block:4px;margin:0}
}
@media(max-height:740px) and (max-width:374px){
 #trade-controls{grid-template-columns:minmax(116px,1fr) 76px 88px}
 #trade-controls>.order-size-mode{grid-column:1/-1;flex-direction:row;gap:4px}
 #trade-controls>.order-size-mode button{width:auto;min-height:32px;padding-inline:8px}
 #trade-controls .qtyrow>.stepper{grid-column:1;grid-row:3}
 #trade-controls #order-presets{grid-column:2;grid-row:3}
 #trade-close-position{grid-column:3;grid-row:3}
}
.winner .result-hero>div:not(#winner-burst){position:relative;z-index:1}
.winner #winner-burst{display:block;position:absolute;inset:0;pointer-events:none;overflow:hidden}
#winner-burst i{position:absolute;top:-16px;left:calc(var(--piece)*5.55%);width:7px;height:13px;border-radius:2px;background:var(--winner-gold);opacity:0;animation:winner-confetti 3.2s ease-in calc(var(--piece)*.04s) both}
#winner-burst i:nth-child(3n){background:var(--winner-cyan)}
#winner-burst i:nth-child(3n+1){background:var(--button-ink);width:5px;height:9px}
@keyframes trophy-arrive{from{opacity:0;transform:translateY(24px) scale(.5) rotate(-12deg)}to{opacity:1;transform:translateY(0) scale(1) rotate(0)}}
@keyframes winner-confetti{0%{opacity:0;transform:translateY(0) rotate(0)}8%{opacity:1}85%{opacity:1}100%{opacity:0;transform:translate(var(--drift),360px) rotate(420deg)}}
@media(prefers-reduced-motion:reduce){.winner #winner-burst{display:none}}
@media(max-height:620px){#results.podium{--winner-title:800 24px/1.1 var(--sans);--winner-rank:850 44px/1 var(--sans);--winner-medal:400 40px/1.2 var(--sans)}#results.podium .result-hero{padding:14px;margin-bottom:14px}.podium .result-hero>.medal{margin-bottom:4px}.podium .result-hero>.lab{margin-bottom:8px}.podium .result-hero>.sub{margin-top:8px}}

/* Swipeable game surfaces should pan without invoking iOS text selection or Copy. */
.phone :is(.game-nav,.tabs,.indicator-bar,.rankings-ticker,#chart-wrap,.stock-card,.watch-tile-row,.watch-study-options,.watch-candles){-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}

@media(max-height:620px){
 .trade-account-summary{padding-block:2px}
 .trade-account-summary .order-context{gap:0}
}
