/* R5 planning card on the public, unverified R4 simulator only. */
.r5-planning{display:grid;grid-template-columns:minmax(280px,.92fr) minmax(360px,1.08fr);gap:13px;margin:12px 0 14px;color:#f2f7ef}
.r5-planning .r5-steps,.r5-planning .r5-map{min-width:0;background:#1d4340;border:1px solid #56877c;border-radius:10px;padding:12px}
.r5-planning h3{margin:0 0 8px;font-size:16px;color:#fff}
.r5-planning p{font-size:12px;line-height:1.55;margin:0 0 9px;color:#e4eae3}
.r5-planning small{display:block;color:#d1e7dd;line-height:1.55;font-size:11px;margin-top:8px}
.r5-planning .r5-actions{display:flex;flex-wrap:wrap;gap:6px}
.r5-planning button{font:inherit;font-size:12px;min-height:43px;border:1px solid #ef9d3d;border-radius:8px;padding:8px 11px;font-weight:700;color:#fff;background:#28534d}
.r5-planning button:hover:not(:disabled){background:#31685c}
.r5-planning button:disabled{opacity:.38;cursor:not-allowed}
.r5-planning #r5Confirm{background:#df7e1c;border-color:#f7b15c}
.r5-planning #r5Restore{background:#38836d;border-color:#66c6a2}
.r5-planning #r5Status{margin:10px 0 0;font-weight:700;color:#b7efd3;min-height:35px}
.r5-planning #r5Status.warning{color:#ffd0b6}
.r5-planning .r5-map>strong{display:block;font-size:13px;margin-bottom:8px}
.r5-planning #r5RouteFigure{background:#153b3c;border:1px solid #43766e;border-radius:8px;min-height:130px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#d9e4de;overflow:hidden}
.r5-planning #r5RouteFigure svg{display:block;width:100%;height:175px;max-width:100%;object-fit:contain}
.r5-planning .r5-round-list{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px;max-height:100px;overflow:auto}
.r5-planning .r5-round-list span{display:inline-block;border-radius:6px;background:#35675b;border:1px solid #528d7c;padding:5px 7px;font-size:11px;font-weight:700}
@media(max-width:1100px){.r5-planning{grid-template-columns:1fr}.r5-planning #r5RouteFigure svg{height:165px}}
@media(max-width:500px){.r5-planning .r5-steps,.r5-planning .r5-map{padding:10px}.r5-planning .r5-actions button{flex:1 1 auto}.r5-planning #r5RouteFigure svg{height:120px}}

.r5-planning .r5-start-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:11px;padding-top:11px;border-top:1px solid #4c7b70}
.r5-planning #r5Start{background:#ee9538;color:#17302a;border-color:#ffbc6c;font-size:14px;font-weight:800;min-height:48px;flex:1 1 215px}
.r5-planning #r5Start:hover:not(:disabled){background:#ffb05c}
.r5-planning .r5-start-actions span{flex:1 1 170px;font-size:11px;color:#d5e8dc;line-height:1.65}
@media(max-width:500px){.r5-planning #r5Start{min-height:48px;width:100%}}


/* R6 compact live stage — the 36 x 9 field is the primary screen. */
body.race-layout-compact .race-stage-dock{display:grid;grid-template-columns:minmax(0,1fr) minmax(245px,26%);gap:12px;align-items:stretch;padding:9px 12px;margin:0 0 8px;border:1px solid #d18c38;background:#113832;border-radius:10px;color:#f4f8ef}
body.race-layout-compact .race-dock-info,body.race-layout-compact .race-dock-route{min-width:0;display:flex;flex-direction:column;gap:5px}
body.race-layout-compact .race-dock-head .r4-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:26px}
body.race-layout-compact .race-dock-head .r4-head small,body.race-layout-compact .race-dock-head .r4-head p{display:none}
body.race-layout-compact .race-dock-head h2{margin:0;color:#f8f9ef;font-size:16px;line-height:1.4}
body.race-layout-compact .race-dock-head .r4-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
body.race-layout-compact .race-dock-head .r4-actions a{font-size:11px;color:#f6f2e4;text-decoration:none;border:1px solid #568b7a;border-radius:6px;padding:4px 7px;white-space:nowrap}
body.race-layout-compact .race-dock-topic .r4-topic{display:flex;gap:5px;flex-wrap:wrap;margin:0}
body.race-layout-compact .race-dock-topic .r4-topic span{border-radius:5px;border:1px solid #426d60;background:#204940;padding:3px 6px;color:#eaf4e9;font-size:11px;line-height:1.5}
body.race-layout-compact .race-dock-metrics .r4-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
body.race-layout-compact .race-dock-metrics .r4-metrics>div{min-width:0;border:1px solid #4f7c6e;border-radius:7px;padding:5px 8px;background:#214b41;display:flex;flex-direction:column;gap:2px}
body.race-layout-compact .race-dock-metrics .r4-metrics small{font-size:10px;color:#cfe6dc;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body.race-layout-compact .race-dock-metrics .r4-metrics strong{font-size:18px;line-height:1.2;font-variant-numeric:tabular-nums;white-space:nowrap;color:#fff}
body.race-layout-compact .race-dock-status #r5Status{font-size:11px;color:#c8efd3;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin:0;line-height:1.6;min-height:18px}
body.race-layout-compact .race-dock-status #r5Status.warning{color:#ffd5b8}
body.race-layout-compact .race-dock-route-title{font-size:11px;font-weight:700;color:#daeee4;line-height:1.4}
body.race-layout-compact .race-dock-figure #r5RouteFigure{background:#163e3c;border:1px solid #436d65;border-radius:6px;display:flex;align-items:center;justify-content:center;min-height:62px;height:74px;overflow:hidden;font-size:10px;color:#d6e6de}
body.race-layout-compact .race-dock-figure #r5RouteFigure svg{display:block;height:70px;width:100%;object-fit:contain}
body.race-layout-compact .race-dock-start{display:flex;align-items:center;gap:6px;min-width:0}
body.race-layout-compact .race-dock-start #r5Start{background:#ef9b41;color:#1d312b;border:1px solid #ffbb72;border-radius:7px;padding:5px 8px;font-weight:800;font-size:12px;min-height:34px;flex:1 1 auto}
body.race-layout-compact .race-dock-start #r5Start:disabled{opacity:.45;cursor:not-allowed}
body.race-layout-compact .race-dock-start #r4Abandon{background:#254d45;color:#fff;border:1px solid #bb8b4c;border-radius:7px;padding:5px 8px;min-height:34px;font-size:11px;white-space:nowrap}
body.race-layout-compact .race-dock-start #r4Abandon[hidden]{display:none}
body.race-layout-compact .game-stage{margin-top:0}
body.race-layout-compact .race-advanced{margin:9px 0 16px;border:1px solid #3c6e62;background:#123a35;border-radius:9px;color:#e8f6ee;overflow:hidden}
body.race-layout-compact .race-advanced>summary{cursor:pointer;font-size:12px;font-weight:700;padding:8px 12px;background:#1b4a41}
body.race-layout-compact .race-advanced>.race-live-review{border:0!important;border-radius:0;margin:0;background:#102f2d!important}
body.race-layout-compact .race-advanced .r5-planning{grid-template-columns:1fr}
body.race-layout-compact .race-advanced .r5-map{display:block}
body.race-layout-compact .race-advanced .r5-start-actions{display:none}
body.race-layout-compact .race-advanced .r5-map>strong{font-size:12px}
@media(max-width:880px){body.race-layout-compact .race-stage-dock{grid-template-columns:minmax(0,1fr) minmax(195px,30%);gap:8px;padding:8px}body.race-layout-compact .race-dock-head .r4-actions a{font-size:10px}body.race-layout-compact .race-dock-metrics .r4-metrics strong{font-size:15px}}
@media(max-width:650px){body.race-layout-compact .race-stage-dock{grid-template-columns:1fr;gap:6px}body.race-layout-compact .race-dock-metrics .r4-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}body.race-layout-compact .race-dock-route{display:grid;grid-template-columns:minmax(0,1fr) minmax(145px,1fr);gap:4px 8px;align-items:center}body.race-layout-compact .race-dock-route-title{grid-column:1/-1}body.race-layout-compact .race-dock-figure #r5RouteFigure{height:68px;min-height:60px}body.race-layout-compact .race-dock-figure #r5RouteFigure svg{height:62px}body.race-layout-compact .race-dock-start{flex-direction:column;align-items:stretch}body.race-layout-compact .race-dock-start #r5Start,body.race-layout-compact .race-dock-start #r4Abandon{min-height:33px}body.race-layout-compact .race-dock-head h2{font-size:14px}}

/* Small-screen scoreboard: four metrics remain on one narrow strip. */
@media(max-width:650px){
 body.race-layout-compact .race-stage-dock{gap:4px;padding:6px 7px}
 body.race-layout-compact .race-dock-info{gap:3px}
 body.race-layout-compact .race-dock-head .r4-head{min-height:24px;gap:5px}
 body.race-layout-compact .race-dock-head h2{font-size:13px}
 body.race-layout-compact .race-dock-head .r4-actions{gap:4px}
 body.race-layout-compact .race-dock-head .r4-actions a{padding:3px 5px;font-size:10px}
 body.race-layout-compact .race-dock-topic .r4-topic{flex-wrap:nowrap;overflow-x:auto;min-height:24px;gap:3px}
 body.race-layout-compact .race-dock-topic .r4-topic span{flex:0 0 auto;padding:2px 5px;font-size:10px;white-space:nowrap}
 body.race-layout-compact .race-dock-metrics .r4-metrics{grid-template-columns:repeat(4,minmax(0,1fr));gap:3px}
 body.race-layout-compact .race-dock-metrics .r4-metrics>div{padding:4px 3px;gap:0}
 body.race-layout-compact .race-dock-metrics .r4-metrics small{font-size:9px}
 body.race-layout-compact .race-dock-metrics .r4-metrics strong{font-size:13px;line-height:1.4}
 body.race-layout-compact .race-dock-route{grid-template-columns:minmax(0,1fr) minmax(145px,1fr);grid-template-rows:64px;gap:6px}
 body.race-layout-compact .race-dock-route-title{display:none}
 body.race-layout-compact .race-dock-figure #r5RouteFigure{height:64px;min-height:64px}
 body.race-layout-compact .race-dock-figure #r5RouteFigure svg{height:60px}
 body.race-layout-compact .race-dock-start #r5Start{min-height:33px}
}


/* R6 competition-specific preview: WIDTH +73% (26% → 45%), HEIGHT +76% (74 → 130px).
   The main 36×9 game stage is deliberately left unchanged. */
@media(min-width:1001px){
 body.race-layout-compact .race-stage-dock{grid-template-columns:minmax(0,1fr) minmax(450px,45%)}
}
body.race-layout-compact .race-dock-route{min-width:0}
body.race-layout-compact .race-dock-figure #r5RouteFigure{height:130px;min-height:130px;width:100%;padding:2px}
body.race-layout-compact .race-dock-figure #r5RouteFigure svg{height:124px;width:100%;max-width:100%;display:block}
body.race-layout-compact #gameControls #r5Start{display:inline-flex;align-items:center;justify-content:center;min-height:40px;border:1px solid #ffbd6e;background:#ed8f34;color:#1e2c26;border-radius:8px;padding:7px 13px;font-size:13px;font-weight:800;white-space:nowrap}
body.race-layout-compact #gameControls #r5Start:disabled{opacity:.48;cursor:not-allowed}
body.race-layout-compact #gameControls #robotStart{display:none!important}
body.race-layout-compact #gameControls #returnSetupTop:not([hidden]){display:inline-flex!important;flex:0 0 auto;white-space:nowrap;min-width:112px;align-items:center;justify-content:center;min-height:38px;border:1px solid #76a899;border-radius:8px;background:#224f47;color:#f5f8ed;font-size:12px;font-weight:750;padding:7px 10px}
body.race-layout-compact #returnDialog button[onclick="finishReturn(true)"]{display:none!important}
body.race-layout-compact #gameControls #r4Abandon{min-height:38px;border:1px solid #b88d54;background:#254e44;border-radius:8px;color:#f4f8ed;padding:7px 10px;font-size:12px}
body.race-layout-compact #gameControls #r6RetryFailed:not([hidden]){display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;min-height:38px;padding:7px 12px;border:1px solid #ffc078;border-radius:8px;background:#dc8d39;color:#1d322b;font-size:12px;font-weight:800;white-space:nowrap;cursor:pointer}
body.race-layout-compact #gameControls #r6RetryFailed[hidden]{display:none!important}
body.race-layout-compact #gameControls [hidden]{display:none!important}
/* No free lottery, file import/export, dynamic trial or trial replay during a competition. */
body.race-layout-compact #gameControls .file-tools,
body.race-layout-compact #gameControls .setup-drawbar,
body.race-layout-compact #gameControls .trial-mode,
body.race-layout-compact #gameControls #routeTrialStart,
body.race-layout-compact #gameControls #routeTrialBack,
body.race-layout-compact #gameControls #toggleAdvanced,
body.race-layout-compact #gameControls .route-trial-controls .bar>strong,
body.race-layout-compact #gameControls .route-trial-controls>small{display:none!important}
body.race-layout-compact.r6-room-challenge #r4Result a[href*="race-entry-review"]{display:none!important}
@media(min-width:651px) and (max-width:1000px){body.race-layout-compact .race-stage-dock{grid-template-columns:minmax(0,1fr) minmax(340px,44%)} }
@media(max-width:650px){
 body.race-layout-compact .race-dock-route{display:block}
 body.race-layout-compact .race-dock-route-title{display:block;margin-bottom:5px}
 body.race-layout-compact .race-dock-figure #r5RouteFigure{height:120px;min-height:120px}
 body.race-layout-compact .race-dock-figure #r5RouteFigure svg{height:114px}
 body.race-layout-compact #gameControls #r5Start{font-size:12px;white-space:normal;flex:1 1 170px;min-width:155px}
 body.race-layout-compact #gameControls #raceQuickbar .live-controls{width:100%;min-width:0;flex:1 1 100%;margin:0}
 body.race-layout-compact #gameControls #raceQuickbar .live-group{width:100%;min-width:0;display:flex;flex-wrap:wrap;white-space:normal;gap:6px}
 body.race-layout-compact #gameControls #returnSetupTop:not([hidden]){min-width:112px}
}

/* Additional challenge-only fairness controls: never show practice shortcuts. */
body.race-layout-compact #r4Sample,
body.race-layout-compact #raceStats,
body.race-layout-compact #gameControls #mqttOpen,
body.race-layout-compact #gameControls button[onclick="clearGhosts()"],
body.race-layout-compact .race-dock-head a[href*="race-ui-review"]{display:none!important}

/* Contest results: room owners supply the topic; contestants can repeat but not choose. */
body.race-layout-compact .r6-result-action{margin:6px 6px 3px 0;padding:8px 13px;border-radius:7px;border:1px solid #ffb768;background:#ea9137;color:#17312a;font:inherit;font-weight:800;cursor:pointer}
body.race-layout-compact .r6-result-action[hidden],#robotResult .r6-result-action[hidden]{display:none!important}
#robotResult .r6-result-action{margin:5px;padding:9px 15px;border-radius:7px;background:#e88e31;color:#17312a;border:1px solid #f8b461;font-weight:750}
body.race-layout-compact.r6-room-challenge .race-dock-head a[href*="race-entry-review"],body.race-layout-compact.r6-room-challenge #r4Result a[href*="race-entry-review"]{display:none!important}


/* R6 settlement: result remains accessible after the original finish dialog closes.
   This uses the SAME R4 result content and per-run score; no manual score edits. */
body.race-layout-compact .race-stage-dock .r6-finish-bar{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:7px 10px;border:1px solid #e5a04c;border-radius:8px;background:#28513f;color:#fff8e9;font-size:12px}
body.race-layout-compact .race-stage-dock .r6-finish-bar[hidden]{display:none!important}
body.race-layout-compact .r6-finish-bar strong{font-weight:800;line-height:1.5}
body.race-layout-compact .r6-finish-bar button{border:1px solid #ffbd72;border-radius:8px;background:#ee963a;color:#203027;padding:8px 14px;font:inherit;font-weight:850;min-height:38px;cursor:pointer}
body.race-layout-compact .r6-settlement-dialog{position:fixed;max-width:min(760px,94vw);width:680px;max-height:min(85vh,800px);overflow-y:auto;margin:auto;padding:20px;border:2px solid #e9a24a;border-radius:13px;color:#f5f9ef;background:#102f2d;box-shadow:0 20px 70px #000a}
body.race-layout-compact .r6-settlement-dialog::backdrop{background:#041513bf}
body.race-layout-compact .r6-settlement-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
body.race-layout-compact .r6-settlement-head h2{font-size:19px;margin:0;color:#fff}
body.race-layout-compact .r6-settlement-head button{padding:8px 12px;border:1px solid #77a89c;border-radius:8px;color:#fff;background:#2a5a50;font:inherit;font-size:12px;min-height:36px;cursor:pointer}
body.race-layout-compact .r6-settlement-dialog .r4-result{margin:12px 0 0;padding:12px;border:1px solid #e2a44f;border-radius:9px;background:#214b42;color:#f9f9ef}
body.race-layout-compact .r6-settlement-dialog .r4-result[hidden]{display:none!important}
body.race-layout-compact .r6-settlement-dialog .r4-result p{color:#e6f2e9;font-size:13px}
body.race-layout-compact .r6-settlement-dialog .r4-result a{color:#ffd18a}
body.race-layout-compact .r6-settlement-dialog .r4-run-breakdown{display:grid;gap:6px;margin:10px 0 13px}
body.race-layout-compact .r6-settlement-dialog .r4-run-header{color:#d4e5db;font-size:11px;font-weight:800}
body.race-layout-compact .r6-settlement-dialog .r4-run-row{padding:8px 10px;border:1px solid #517c71;border-radius:8px;font-size:12px;line-height:1.55;background:#163e37;overflow-wrap:anywhere}
body.race-layout-compact .r6-settlement-dialog .r4-run-row.best{border-color:#e6a04c;background:#315340}
@media(max-width:650px){body.race-layout-compact .race-stage-dock .r6-finish-bar{gap:6px;padding:7px}body.race-layout-compact .r6-finish-bar button{width:100%}body.race-layout-compact .r6-settlement-dialog{padding:12px}body.race-layout-compact .r6-settlement-head h2{font-size:16px}}

/* R6 board operation: cards, split, Lock, Translate. Undo moves after 操作手冊. */
body.race-layout-compact #gameControls .management-bar #undoTop{flex:0 0 auto;white-space:nowrap;min-height:34px;font-size:12px}
body.race-layout-compact.r6-undo-locked #gameControls #undoTop{visibility:hidden!important;pointer-events:none!important}
body.race-layout-compact #gameControls #r6SetupActions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;min-width:0}
body.race-layout-compact #gameControls #r6SetupActions>button{min-height:38px;padding:6px 11px;border-radius:8px;white-space:nowrap;font-size:13px;font-weight:650}
body.race-layout-compact #gameControls #r6SetupActions #lockSetupTop{background:#eb933b;color:#1c3028;border:1px solid #ffc073;font-weight:800}
body.race-layout-compact[data-mode="race"] #gameControls #r6SetupActions #clearSetupOrder{display:none!important}
body.race-layout-compact[data-mode="setup"] #gameControls #r6SetupActions #clearSetupOrder{display:inline-flex!important;align-items:center;justify-content:center;background:#315b53;border:1px solid #7da99a;color:#fff5e6;font-weight:800}
body.race-layout-compact #gameControls #r6SetupActions .shift-toggle{display:inline-flex!important;align-items:center;gap:5px;min-height:38px;padding:5px 9px;font-size:13px;border:1px solid #668d7e;border-radius:8px;white-space:nowrap}
body.race-layout-compact #gameControls #r6SetupActions .shift-toggle input{width:17px;height:17px;accent-color:#f1a34e}
body.race-layout-compact #gameControls #setupPreviewBar:not([hidden]){display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:5px 0;padding:5px 8px}
body.race-layout-compact #gameControls #setupPreviewBar .setup-preview-actions{display:flex;flex-wrap:wrap;gap:6px}
body.race-layout-compact #gameControls #setupPreviewBar .setup-preview-actions button{font-size:12px;min-height:34px;padding:5px 9px}
body.race-layout-compact #gameControls #setupPreviewBar .setup-preview-actions button.primary{background:#e9973c;color:#1d312a;font-weight:750}
/* R6 translation is an initial-layout tool ONLY. Once Lock changes
   data-mode to race, remove it entirely; the simulator never re-enables it
   during board pickup, route planning, or robot runtime. */
body.race-layout-compact[data-mode="race"] #gameControls #r6SetupActions .shift-toggle{display:none!important}
body.race-layout-compact #gameControls #r6SetupActions .shift-toggle:has(input:checked){background:#78481c;color:#fff6e7;border-color:#f5ad55;font-weight:750}
@media(max-width:650px){body.race-layout-compact #gameControls #r6SetupActions{gap:5px}body.race-layout-compact #gameControls #r6SetupActions>button{font-size:12px;padding:6px 8px}body.race-layout-compact #gameControls #r6SetupActions .shift-toggle{font-size:12px}}

@media(max-width:360px){
 body.race-layout-compact #gameControls #r6SetupActions{flex:1 1 100%;width:100%;max-width:100%;justify-content:flex-start}
 body.race-layout-compact #gameControls #r6SetupActions .shift-toggle{flex:0 0 auto}
}

/* Mouse + keyboard use: modest single-line hint beside the existing slider. */
body.race-layout-compact .robot-speed-key-hint{font-size:11px;color:#c9e6d8;white-space:nowrap;align-self:center}
@media(max-width:650px){body.race-layout-compact .robot-speed-key-hint{font-size:10px;white-space:normal}}
