/* 600×960 stays fixed; core copy is >=24 design pixels (12.8px at 320px). */
.controller-stage { --type-kicker:24px; --type-caption:24px; --type-body:24px; --type-section:26px; }
.controller-stage .mobile-header { height:105px; padding:12px 26px; gap:16px; }
.controller-stage .mobile-header span { font-size:18px; letter-spacing:0; }
.controller-stage .mobile-header h1 { font-size:30px; letter-spacing:0; }
.controller-stage .mobile-header b { max-width:270px; font-size:24px; padding:14px 18px; }
.controller-stage .mobile-view { height:754px; padding:14px 28px; }
.controller-stage button { font-size:26px; line-height:1.3; cursor:pointer; }
.controller-stage button:disabled { cursor:not-allowed; }
.controller-stage :is(p,small) { font-size:24px; line-height:1.4; }
.controller-stage footer { height:96px; padding:6px 26px; gap:12px; font-size:24px; }
.controller-stage #mobileConnection { flex:1; text-align:center; line-height:1.35; }
.controller-stage footer button { min-width:84px; padding:12px; background:transparent; color:var(--charcoal-ink); }
.controller-stage #releaseButton { min-width:150px; max-width:180px; font-size:24px; }
.controller-stage .host-intro { padding:16px 20px; transform:none; }
.controller-stage .host-intro > span { display:none; }
.controller-stage .host-intro h2 { font-size:30px; margin:0 0 10px; }
.controller-stage .host-intro p { font-size:24px; line-height:1.4; }
.controller-stage .count-picker { margin:12px auto; height:84px; }
.controller-stage .team-name-inputs { gap:12px; margin:0; }
.controller-stage .team-name-inputs label { min-height:54px; padding:10px 24px; }
.controller-stage .team-name-inputs i { display:none; }
.controller-stage .team-name-inputs input { font-size:24px; }
.controller-stage .team-name-inputs label:last-child:nth-child(odd) { grid-column:1/-1; }
.controller-stage .host-readiness { min-height:74px; margin:12px 0; font-size:24px; text-align:center; }
.controller-stage :is(.primary-button,.secondary-button) { min-height:84px; padding:16px 22px; font-size:26px; height:auto; }
.controller-stage .host-lobby-view .primary-button { font-size:26px; }
.controller-stage button.secondary-button { font-size:26px; }
.controller-stage .team-status { min-height:82px; padding:10px 14px; }
.controller-stage .team-status strong { font-size:26px; }
.controller-stage .team-status span { font-size:24px; }
.controller-stage .wine-counts b { display:flex; flex-wrap:nowrap; justify-content:center; align-items:center; gap:4px; padding:10px 6px; min-height:54px; }
.controller-stage .wine-counts b span { white-space:nowrap; }
.controller-stage .wine-counts i { font-size:26px; }
.controller-stage .hand-heading { min-height:46px; margin:8px 0 0; padding:0 4px; }
.controller-stage .hand-heading span { font-size:24px; }
.controller-stage #cardHelpButton { min-height:46px; padding:8px 16px; font-size:24px; border-image:none; background:transparent; text-decoration:underline; }
.controller-stage .hand-grid { height:216px; padding:8px 5px 10px; gap:12px; align-items:start; }
.controller-stage .hand-card { aspect-ratio:auto; height:196px; padding:3px 3px 32px; transform:none; }
.controller-stage .hand-card img { position:absolute; top:3px; left:3px; width:calc(100% - 6px); height:calc(100% - 39px); min-height:0; object-fit:contain; }
.controller-stage .hand-name { position:absolute; bottom:0; left:-3px; right:-3px; height:32px; display:grid; place-items:center; font-size:24px; font-weight:800; white-space:nowrap; background:var(--charcoal-paper); }
.controller-stage .hand-card.selected { transform:translateY(-3px); }
.controller-stage .action-grid { margin-top:10px; gap:12px; }
.controller-stage .action-grid button { min-height:108px; padding:16px 18px; row-gap:4px; }
.controller-stage .action-grid button b { font-size:26px; }
.controller-stage .action-grid button span { font-size:24px; line-height:1.3; }
.controller-stage .action-hint { min-height:60px; padding:10px 12px; margin:10px 0 0; font-size:24px; line-height:1.35; }
.controller-stage .own-result { margin:6px 0 0; min-height:62px; font-size:24px; line-height:1.3; text-align:center; }
.controller-stage .team-game-view { display:grid; grid-template-rows:112px 188px 252px 66px 92px; gap:4px; padding:12px 28px; }
.controller-stage .team-game-view > * { min-height:0; margin:0; }
.controller-stage .team-game-view .hand-grid { height:188px; padding:6px 5px; }
.controller-stage[data-visual-style] .team-game-view .hand-card { height:176px; padding:8px; background:transparent; border:0; box-shadow:none; }
.controller-stage .hand-art { position:absolute; top:8px; left:50%; transform:translateX(-50%); width:78px; height:116px; padding:3px; border:1px solid #fff9ec; background:var(--charcoal-sheet); box-shadow:1px 1px 0 #e5d9c3,2px 2px 0 #c9b995,3px 3px 0 #eee1c8,4px 4px 0 #b7a789,5px 5px 0 #e5d9c3,6px 6px 0 #a9987b,8px 10px 7px #00000042; }
.controller-stage .hand-art img { position:static; display:block; width:100%; height:100%; object-fit:contain; }
.controller-stage .hand-name { bottom:8px; left:8px; right:8px; height:34px; line-height:1.4; background:transparent; }
.controller-stage .team-game-view .team-status { padding:18px; }
.controller-stage .team-status :is(strong,span) { line-height:1.2; }
.controller-stage .team-status strong { line-height:1.4; }
.controller-stage[data-visual-style] .wine-counts b { display:flex; flex-direction:column; justify-content:center; align-items:center; gap:2px; padding:0; min-height:62px; border:0; border-image:none; background:transparent; box-shadow:none; }
.controller-stage .wine-counts .wine-value { display:flex; justify-content:center; align-items:center; gap:4px; }
.controller-stage .wine-counts i { line-height:1.2; }
.controller-stage .wine-counts b > span:first-child { grid-column:1/-1; }
.controller-stage .wine-counts b:first-child > i { grid-column:1/-1; }
.controller-stage .team-game-view .action-grid { grid-template-rows:repeat(2,minmax(0,1fr)); }
.controller-stage .team-game-view .action-grid button { min-height:0; padding:12px 18px; }
.controller-stage .team-game-view .action-grid button span { line-height:1.2; }
.controller-stage .team-game-view .action-hint { padding:8px 12px; }
.controller-stage .team-game-view .own-result { min-height:0; padding:16px 22px; background:var(--charcoal-sheet); font-size:24px; }
.controller-stage .target-view { inset:0; align-items:center; padding:24px; }
.controller-stage .target-sheet { width:100%; min-height:0; max-height:900px; padding:24px; border-width:3px; overflow-y:auto; overscroll-behavior:contain; }
.controller-stage .target-sheet h2 { font-size:30px; line-height:1.4; margin:0 0 16px; }
.controller-stage .target-sheet > span { font-size:24px; letter-spacing:0; }
.controller-stage .target-sheet > button { min-height:84px; padding:16px 20px; font-size:26px; }
.controller-stage .target-option { grid-template-columns:24px 1fr 88px; min-height:88px; padding:18px; gap:12px; }
.controller-stage .target-option b,.controller-stage .target-option span { font-size:24px; }
.controller-stage .target-option i { height:24px; }
.controller-stage .rules-copy { text-align:left; }
.controller-stage .rules-copy p { margin:12px 0; font-size:24px; line-height:1.4; }
.controller-stage #cardDetail { font-weight:800; text-align:left; }
.controller-stage #recoveryStatus { margin:0 0 14px; font-size:24px; }
.controller-stage #recoveryList { display:grid; gap:10px; }
.controller-stage .recovery-team { display:grid; grid-template-columns:104px 1fr 120px; gap:12px; align-items:center; padding:4px; border-bottom:1px solid var(--charcoal-muted); }
.controller-stage .recovery-team img { width:104px; height:104px; object-fit:contain; background:#fff; }
.controller-stage .recovery-team div { display:grid; gap:6px; text-align:center; }
.controller-stage .recovery-team :is(b,span,button) { font-size:24px; }
.controller-stage .recovery-team button { min-height:84px; padding:14px; background:var(--charcoal-sheet); }
.controller-stage .recovery-sheet > button { display:inline-grid; width:calc(50% - 8px); margin:16px 2px 0; }
.controller-stage .confirm-room { display:grid; gap:14px; font-size:24px; text-align:center; }
.controller-stage .confirm-room input { width:100%; min-height:84px; font-size:26px; padding:18px; border:2px solid transparent; border-image:url('/assets/optimized/charcoal-frame-v1-1254.webp') 160 / 24px / 10px stretch; text-align:center; background:var(--charcoal-sheet); }
.controller-stage .host-wait { padding:26px; }
.controller-stage .host-wait p { width:100%; font-size:24px; margin-bottom:24px; }
.controller-stage .host-wait button { width:100%; }
.controller-stage .waiting-crest { padding:24px; }
.controller-stage .waiting-crest p { width:100%; font-size:24px; }
.controller-stage .waiting-crest b { padding:18px 24px; font-size:26px; }
.controller-stage .waiting-crest span,.controller-stage .finish-view > span { font-size:24px; }
.controller-stage .catch-view { gap:10px; }
.controller-stage .catch-thief { width:110px; height:165px; }
.controller-stage .catch-view > span { font-size:26px; letter-spacing:0; margin-top:0; }
.controller-stage .catch-view h2 { font-size:32px; margin:0; }
.controller-stage .catch-view p { min-height:0; width:100%; padding:18px; font-size:24px; }
.controller-stage .catch-view > small { font-size:24px; margin:0; line-height:1.4; }
.controller-stage .catch-buttons { width:100%; gap:16px; }
.controller-stage .catch-buttons button { min-height:84px; padding:16px; font-size:26px; }
.controller-stage .mobile-catch-timer { width:100%; height:64px; margin:8px 0; }
.controller-stage .mobile-catch-timer strong { font-size:34px; height:50px; width:62px; margin:5px auto; }
.controller-stage .catch-view.urgent .mobile-catch-timer { outline:5px solid var(--charcoal-ink); outline-offset:3px; }
.controller-stage .catch-view.urgent > span { text-decoration:underline; text-underline-offset:6px; }
.controller-stage .join-card { padding:30px 24px; }
.controller-stage .join-card p,.controller-stage .join-card > small { font-size:24px; }
.controller-stage .access-error-view > div { width:100%; padding:30px 24px; }
.controller-stage .access-error-view p { width:100%; font-size:24px; }
.controller-stage .finish-view p { font-size:26px; }
.controller-stage .toast { font-size:24px; line-height:1.4; bottom:110px; padding:20px; }
.asset-status { position:absolute; z-index:19; top:112px; left:28px; right:28px; min-height:50px!important; padding:10px 18px; background:var(--charcoal-sheet); color:var(--charcoal-ink); font-size:24px; }
img[data-asset-state="loading"] { opacity:.35; }
img[data-asset-state="failed"] { opacity:.3; }
.display-stage .asset-status { top:36px; left:1000px; right:1000px; font-size:34px; }
.display-stage .rejoin-toggle { position:absolute; z-index:6; top:50px; right:76px; min-height:90px; padding:16px 30px; font-size:36px; background:var(--charcoal-sheet); border:3px solid var(--charcoal-ink); }
.display-stage .empty-discard { width:240px; height:360px; display:grid; place-items:center; font-size:38px; background:#fbf4e6b0; border:3px dashed var(--charcoal-muted); }
.display-stage .tabletop.is-lobby :is(.table-action-cards,.table-empty) { visibility:hidden; }
.display-stage .action-separator { min-height:112px; height:112px; padding:18px 24px; line-height:1.2; }
.display-stage :is(.rejoin-toggle,.empty-discard) { border-style:solid; border-color:transparent; border-image:url('/assets/optimized/charcoal-frame-v1-1254.webp') 160 / 24px / 10px stretch; }
