/* Shared shell and controls for all three screens. */
body .app-header{height:62px;padding:0 20px;gap:12px;max-width:850px;margin:auto;border-bottom:1px solid var(--line)}
body .app-header .brand{font:800 17px/1.2 Manrope,Arial,sans-serif;letter-spacing:0;white-space:nowrap}
body .app-header .brand span{margin:0;color:var(--lime)}body .app-header .badge{font-size:10px;padding:6px 9px;letter-spacing:0;border:0}
body main,body main.metro-main{max-width:850px;padding:0 16px 24px;margin:auto}
body .mode-nav{display:flex;gap:6px;margin:16px 0}
body .mode-nav a{padding:12px 4px;font:600 14px/1.25 Manrope,Arial,sans-serif;color:var(--muted);border:1px solid var(--line);border-radius:7px}
body .mode-nav a.selected{background:var(--lime);color:#172009;border-color:var(--lime)}
body .panel,body .console{padding:18px;border-radius:10px;background:var(--panel);margin-bottom:14px}
body .intro,body .edition,body .progress-link{display:none}
body .topline{font-size:10px;letter-spacing:.08em;align-items:center}
body label{font-size:13px;margin-bottom:12px}body select{font-size:16px;padding:10px;border-radius:6px;margin-top:6px}
body .primary{min-height:52px;font-size:16px;border-radius:7px;padding:14px}
body .tempo{display:grid;grid-template-columns:48px minmax(0,1fr) 48px;align-items:center;gap:8px;margin:12px 0}
body .tempo>div{min-width:0}body .tempo button{width:48px;height:48px;display:grid;place-items:center;padding:0;font-size:30px;line-height:1}
body .tempo input#metroBpm,body .tempo input#bpm,body .console.training .tempo input#bpm{font:700 clamp(64px,17vw,100px)/1.1 Manrope,Arial,sans-serif;letter-spacing:-.04em;color:var(--ink);display:block;width:100%;max-width:none;margin:0;padding:0;background:transparent;border:0;box-shadow:none;text-align:center;height:115px;appearance:textfield}
body .tempo span{font-size:11px;letter-spacing:.12em}body input[type=range]{height:22px;margin:5px 0}
body .metro-top-sound{margin-top:14px}body .metro-top-sound label{margin:0}body .metro-top-sound select{margin-top:4px}
body .metro-quick{grid-template-columns:1fr 2fr 1fr;gap:8px;margin:10px 0 6px}body .metro-quick button{min-height:44px;padding:8px;font-size:14px}
body .tap-hint{min-height:0;font-size:12px;line-height:1.4;margin:8px 0;color:var(--muted)}
body .metro-beats{gap:7px;margin:18px 0 8px}body .metro-beats button{height:76px;font:700 32px/1 Manrope,Arial,sans-serif}
body .beat-tip{font-size:11px;color:var(--muted);text-align:center;margin:8px 0}body .metro-parts{min-height:12px;margin:10px 0 16px;gap:8px}body .metro-parts i{width:9px;height:9px}
body #metroStart{min-height:54px;font-size:18px}body .compact-status:empty{display:none}body .compact-status{font-size:12px;color:var(--muted)}
body .metro-panel>.row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}body .metro-panel>.row label{margin:0}
body .metro-options{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;font-size:13px}body .metro-options summary{font-size:13px}body .metro-foot{font-size:11px;line-height:1.5}
body .calibration-panel h2{font:700 20px/1.3 Manrope,Arial,sans-serif;margin:12px 0 8px}body .calibration-panel>p{font-size:13px;line-height:1.45;margin:8px 0 12px}body .calibration-panel .transport{margin:0}
body #trainingGate{font-size:12px;color:var(--muted);margin:10px 0}body #beginTraining:disabled{opacity:.5}body .training-pickers{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}body .training-pickers select{font-size:13px}body .inline-help{font-size:11px;margin-top:-5px}body .inline-help .help{margin:8px 0;color:var(--muted)}
body .beats{gap:7px;margin:16px 0}body .beats i{flex:1;max-width:none;height:65px;padding:17px 0;font:600 24px/1 Manrope,Arial,sans-serif;border-radius:7px}
body .console .coach{min-height:0}body .console .coach>span{font-size:20px}body .console .coach p{font-size:13px}body .hit-legend{font-size:11px}
body .progress-dashboard{margin-top:0}body .progress-dashboard h2{font-size:26px;line-height:1.25;margin:16px 0 8px}body .progress-dashboard p{font-size:13px;line-height:1.5}body .progress-dashboard .row{grid-template-columns:1fr}body .practice-totals{margin:18px 0}
@media(min-width:600px){body .metro-beats button{height:100px;font-size:40px}body .panel,body .console{padding:24px}body .mode-nav a{font-size:16px}}
/* Direct rhythm choices; no native popup menus on the main metronome. */
body .rhythm-controls{display:grid;gap:10px;margin:16px 0;padding-bottom:16px;border-bottom:1px solid var(--line)}body .rhythm-row>span{display:block;color:var(--muted);font-size:11px;margin-bottom:6px}.choice-strip{display:flex;gap:5px}.choice-strip button{flex:1;min-width:0;min-height:43px;padding:8px 4px;border-radius:7px;background:#272c24;border:1px solid transparent;color:#bcc4b3}.choice-strip button strong{display:block;font-size:15px;font-weight:700}.choice-strip button small{display:block;font-size:9px;font-weight:500;margin-top:3px}.choice-strip button[aria-pressed=true]{background:#d6fd651a;color:var(--lime);border-color:#d6fd65}.meter-choices{display:grid;grid-template-columns:repeat(4,1fr)}.meter-choices button{min-height:36px}.rhythm-controls + .tempo{margin-top:0}body .metro-panel>.row:has(>select[hidden]){display:none}
body .practice-totals{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.practice-totals>div{padding:12px 4px;text-align:center;background:#252b21;border-radius:8px}body .practice-totals strong{display:block;font-size:24px;line-height:1.2;padding:0;border:0;background:none;color:var(--lime)}.practice-totals span{display:block;font-size:9px;color:var(--muted);margin-top:6px}.progress-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin:18px 0}.progress-metrics>div{padding:14px 5px;text-align:center;border:1px solid var(--line);border-radius:8px}.progress-metrics strong{display:block;font-size:20px;color:var(--lime)}.progress-metrics span{display:block;font-size:10px;color:var(--muted);margin-top:5px}body .progress-dashboard h3{font-size:14px;margin:22px 0 12px}.stats-explanation{font-size:12px;margin:14px 0}.tempo-bar-row{display:grid;grid-template-columns:68px 1fr 40px;align-items:center;gap:10px;margin:13px 0;font-size:12px}.tempo-bar-row b{text-align:right;color:var(--lime)}.tempo-bar-track{height:13px;background:#343c2e;border-radius:8px;overflow:hidden}.tempo-bar-track i{display:block;height:100%;background:var(--lime);border-radius:8px}.activity-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.activity-day{padding:10px 0;text-align:center;font:11px Manrope,Arial,sans-serif;border-radius:5px}.activity-legend{display:flex;align-items:center;justify-content:flex-end;gap:5px;margin:10px 0 24px;color:var(--muted);font-size:10px}.activity-legend i{width:12px;height:12px;background:#d6fd65;border-radius:2px}.activity-legend i:nth-of-type(1){opacity:.2}.activity-legend i:nth-of-type(2){opacity:.4}.activity-legend i:nth-of-type(3){opacity:.7}body .progress-chart{margin:8px 0}body #progressChange{font-size:12px}

/* Training choices and quiet technical drawer */
.rare-options{display:grid;grid-template-columns:1fr 2fr;gap:12px;align-items:center;margin:16px 0}.rare-options label{margin:0}.rare-options small{grid-column:1/-1;color:var(--muted,#969b90);font-size:12px}.rare-options select{min-height:44px}.technical-tools{margin:24px 0;color:#969b90}.technical-tools>summary{padding:16px 0}.technical-tools[open]{border-top:1px solid #343a31}footer details>summary{cursor:pointer}.rare-options .check{font-size:14px}

.anchor-beats{display:flex;gap:6px;margin-top:8px}.anchor-beats button{min-width:40px;min-height:44px;padding:8px;border:1px solid #4b543c;background:#242820;border-radius:8px;color:#d4d8cc}.anchor-beats button[aria-pressed="true"]{background:#d6ff62;color:#161a13}.rare-options{grid-template-columns:1fr}.rare-options small{margin-top:-6px}

.lesson-picker{margin:16px 0 24px}.lesson-choices{display:flex;gap:6px}.lesson-choices button{flex:1;padding:12px 5px;font-size:13px;border:1px solid #465039;border-radius:9px;background:#242820;color:#d4d8cc}.lesson-choices button[aria-pressed="true"]{background:#d6ff62;color:#161a13}.lesson-picker p{font-size:13px;color:#9fa596;line-height:1.5}

#trainingPickers[hidden],#rareOptions[hidden]{display:none}#skillProgress{border-left:3px solid #d6ff62;padding-left:12px;color:#d6ff62;font-size:12px}

.switch-editor{padding:16px;border:1px solid #424b36;border-radius:12px;margin-bottom:24px}.switch-editor[hidden]{display:none}.switch-sequence{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 14px}.switch-sequence button{font-size:13px;padding:10px;background:#29311f;border:1px solid #5a693d;color:#d6ff62;border-radius:8px}.switch-palette{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin:12px 0}.switch-palette button{padding:12px;font-size:14px;background:#252a21;color:#e3e8db;border:1px solid #49533b;border-radius:8px}.switch-palette small{display:block;font-size:11px;opacity:.65;margin-top:4px}.switch-editor>label{display:block;margin:12px 0 8px}.switch-editor .help{font-size:12px;line-height:1.5}

/* Mobile rotary tempo control: only the ring captures gestures. */
.tempo-wheel{position:relative;width:min(100%,310px);aspect-ratio:1;margin:22px auto 0}.tempo-dial{position:absolute;inset:0;border-radius:50%;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;cursor:grab;background:radial-gradient(circle,#23291f 0 56%,#1a1e18 57% 66%,transparent 67%);box-shadow:inset 0 0 28px #0003}.tempo-dial.dragging{cursor:grabbing}.tempo-dial svg{width:100%;height:100%;pointer-events:none}.tempo-dial circle{fill:none;stroke-width:9;stroke-linecap:round;transform:rotate(120deg);transform-origin:130px 130px}.dial-track{stroke:#414937;stroke-dasharray:575.96 691.15}.dial-arc{stroke:#d6fd65}.dial-arm{position:absolute;inset:7.7%;pointer-events:none}.dial-arm i{display:block;position:absolute;left:50%;top:0;width:24px;height:24px;border:4px solid #edfbc8;border-radius:50%;background:#d6fd65;transform:translate(-50%,-50%);box-shadow:0 0 18px #d6fd6566}.dial-center{position:absolute;inset:27% 20%;display:flex;flex-direction:column;justify-content:center;align-items:center;pointer-events:none}.dial-center input{pointer-events:auto;touch-action:manipulation}.dial-center span{font:12px Manrope,Arial,sans-serif;letter-spacing:3px;color:#d6fd65;margin-top:4px}body .metro-panel input#metroBpm{font:700 clamp(54px,16vw,80px)/1.15 Manrope,Arial,sans-serif;width:100%;min-width:0;height:96px;padding:0;margin:0;text-align:center;letter-spacing:-.04em;background:transparent;color:#eef0e6;border:0;box-shadow:none;appearance:textfield}#metroBpm::-webkit-inner-spin-button,#metroBpm::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.dial-help{text-align:center;font-size:12px;color:#969d91;margin:4px 0 15px}.metro-quick{display:flex;justify-content:center;margin:10px 0}.metro-quick #metroTap{width:100%;max-width:310px;min-height:50px;font-size:14px}.tempo-dial:focus-visible{outline:2px solid #d6fd65;outline-offset:4px}

.sound-modes{grid-template-columns:repeat(3,minmax(0,1fr))}.sound-modes button{min-width:0}.sound-modes button strong{font-size:clamp(24px,6vw,38px)}.sound-modes button span{font-size:11px}

/* Compact regular metronome; training layout is unchanged. */
body.compact-metro .app-header{height:38px;padding:0 12px}body.compact-metro .app-header .brand{font-size:14px}body.compact-metro main.metro-main{padding:0 10px 12px}body.compact-metro .mode-nav{margin:7px 0;gap:5px}body.compact-metro .mode-nav a{padding:9px 3px;font-size:13px}body.compact-metro .metro-panel{padding:12px;margin-bottom:0}body.compact-metro .rhythm-controls{margin:8px 0;gap:6px}body.compact-metro .rhythm-row{display:grid;grid-template-columns:48px minmax(0,1fr);gap:6px;margin:0}body.compact-metro .rhythm-row>span{font-size:10px}body.compact-metro .choice-strip{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:4px;scrollbar-width:none}body.compact-metro .choice-strip button{min-height:36px;min-width:42px;padding:6px 8px;flex:1}body.compact-metro .choice-strip strong{font-size:13px}body.compact-metro .choice-strip small{display:none}body.compact-metro .meter-choices button{flex:0 0 42px}body.compact-metro .dial-row{display:flex;align-items:center;justify-content:center;gap:10px}body.compact-metro .tempo-wheel{width:clamp(145px,26svh,220px);flex-shrink:0;margin:4px 0}body.compact-metro .tempo-nudge{width:44px;height:48px;flex-shrink:0;border:1px solid #4c583a;border-radius:12px;background:#252c20;color:#d6fd65;padding:0;font-size:28px;touch-action:manipulation}body.compact-metro input#metroBpm{font-size:clamp(44px,8svh,62px);height:70px}body.compact-metro .dial-center span{font-size:10px}body.compact-metro .dial-help{display:none}body.compact-metro .metro-quick{margin:3px 0}body.compact-metro #metroTap{min-height:36px;max-width:none;padding:6px;font-size:12px}body.compact-metro .tap-hint{font-size:10px;margin:3px 0}body.compact-metro .tap-hint:empty{display:none}body.compact-metro .metro-beats{margin:9px 0 4px;gap:5px}body.compact-metro .metro-beats button,body.compact-metro .metro-beats.many button{height:48px;font-size:26px}body.compact-metro .metro-beats.many{grid-template-columns:repeat(var(--beats),minmax(0,1fr))}body.compact-metro .metro-beats button.accent:after{font-size:6px;bottom:4px}body.compact-metro .beat-tip{font-size:10px;margin:4px 0}body.compact-metro .metro-parts{margin:5px 0 8px;min-height:8px}body.compact-metro #metroStart{min-height:46px;font-size:16px;padding:10px}body.compact-metro .metro-options{margin-top:8px;padding-top:7px}body.compact-metro .metro-options>summary{font-size:12px}body.compact-metro .compact-status:empty{display:none}@media(max-height:620px){body.compact-metro .tempo-wheel{width:145px}body.compact-metro .beat-tip{display:none}body.compact-metro .app-header{height:30px}}
@media(max-height:740px){body.compact-metro .metro-panel{padding:8px 10px}body.compact-metro .rhythm-controls{padding-bottom:4px;margin:4px 0;gap:4px}body.compact-metro .choice-strip button{min-height:32px;padding:4px 7px}body.compact-metro .tempo-wheel{width:140px;margin:0}body.compact-metro .rhythm-row>span{margin:0;align-self:center}body.compact-metro .topline{margin-bottom:4px}body.compact-metro .beat-tip{display:none}body.compact-metro .metro-beats{margin-top:6px}body.compact-metro .metro-options{margin-top:5px;padding-top:5px}body.compact-metro .dial-center span{margin:0}body.compact-metro input#metroBpm{font-size:44px;height:56px}}

body.compact-metro .tempo-nudge{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}body.compact-metro .tempo-nudge.held{background:#d6fd65;color:#172009;box-shadow:0 0 15px #d6fd6533}

.listen-picker{margin:14px 0}.listen-picker .help{font-size:12px;line-height:1.5;margin:9px 0}.listen-picker details{font-size:12px;color:#a7af9c}.listen-picker details p{font-size:12px;line-height:1.5}.listen-picker button{min-height:44px}

/* v44: a clear setup → calibration → play flow. */
body .workspace{display:flex;flex-direction:column;gap:16px}
body .session-setup .topline{margin-bottom:14px}
body .setup-tempo{display:flex;align-items:center;gap:12px;margin-top:16px}
body .setup-tempo input{width:100px;font-size:26px;text-align:center}
body .calibration-panel .transport{display:flex;flex-direction:column;align-items:stretch}
body .calibration-panel #trainingGate{margin:0;text-align:center}
body .console:not(.playing){display:none}
body .console.playing .coach{display:none}
body .console.playing .tempo-plan,body .console.playing #stageRoad,body .console.playing #lessonRule{display:none}
body .console.playing .hit-legend{font-size:11px;line-height:1.5}
body .console.playing .tempo{margin:4px 0}
body .console.playing .transport{position:sticky;bottom:8px;z-index:3;background:var(--bg,#151716);padding:8px 0}
body .next-cue{font-size:13px;color:var(--accent,#d6fd65);margin:10px 0;line-height:1.5}
body .session-summary{margin-bottom:16px;border-color:#d6fd65}
body .session-summary .progress-metrics strong{font-family:inherit;font-size:clamp(18px,4vw,28px)}
body .session-summary .lesson-choices a{display:flex;align-items:center;justify-content:center;text-decoration:none;color:var(--accent,#d6fd65);padding:12px}
body .presets{margin:10px 0}
body .presets button{min-height:44px;font-size:13px}
body .comparison-caption{font-size:13px;color:var(--muted);margin:16px 0}
body .practice-totals{grid-template-columns:repeat(3,minmax(0,1fr))}

body .console.playing.paused .coach{display:block}
body .console.review{display:block}
body .console.review>.tempo,body .console.review>#tempoRange,body .console.review>#beats,body .console.review>#nextCue,body .console.review>#tempoPlan,body .console.review>#lessonProgress,body .console.review>.coach{display:none}
body .console.silent #nextCue{visibility:hidden}
body [hidden]{display:none!important}

.session-comparisons h3{font-size:14px;margin:20px 0 10px}.session-comparisons p{font-size:12px;color:var(--muted);line-height:1.6}.session-comparisons .tempo-bar-row{grid-template-columns:90px 1fr 42px}#sessionHistory details{padding:10px 0;border-bottom:1px solid var(--line)}

body .tempo-dial{cursor:ns-resize;touch-action:none}body .tempo-dial.dragging{filter:brightness(1.12)}body .dial-center input{touch-action:none}

/* Switch training: one prominent, musical-time cue above the hit grid. */
.switch-board{position:sticky;top:8px;z-index:5;background:#20271b;border:2px solid #72834e;border-radius:14px;padding:14px 16px;margin:12px 0;color:#edf1e7;box-shadow:0 6px 24px #0005;text-align:left}
.switch-board[hidden]{display:none}.switch-board-label{font-size:11px;letter-spacing:1.4px;font-weight:700}.switch-board>strong{display:block;font-family:system-ui,sans-serif;font-size:clamp(24px,7vw,40px);line-height:1.15;letter-spacing:0;margin:5px 0;overflow-wrap:anywhere}.switch-board-pattern{font-size:12px;letter-spacing:2px;opacity:.75}.switch-board-bottom{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:40px;margin-top:8px;border-top:1px solid #ffffff25;padding-top:6px}.switch-board-bottom span{font-size:14px;font-weight:650}.switch-board-bottom b{font:800 34px/1 system-ui;min-width:34px;text-align:center}.switch-board.prepare{border-color:#d6fd65}.switch-board.change{background:#d6fd65;color:#151716;border-color:#d6fd65;box-shadow:0 0 25px #d6fd6533}

.switch-round-result{font-size:12px;line-height:1.3;margin-top:7px;opacity:.8}

/* The live switch console fits the actual visible viewport, including browser chrome. */
body .console.playing.switch-focus{position:fixed;left:0;right:0;top:0;z-index:1000;width:100%;max-width:760px;margin:0 auto;height:100dvh;box-sizing:border-box;border:0;border-radius:0;background:#151716;padding:8px max(10px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left));display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:44px auto 40px 30px 18px minmax(0,1fr);gap:6px;overflow:hidden;overscroll-behavior:contain}
body .console.switch-focus>*{display:none!important}
body .console.switch-focus>.tempo{display:flex!important;grid-area:1/1;margin:0;gap:4px;justify-content:flex-start;align-items:center;min-height:0}
body .console.switch-focus .tempo button{display:none}body .console.switch-focus .tempo>div{display:flex;align-items:center;gap:5px}
body .console.switch-focus .tempo input#bpm{font:700 28px/1 Manrope,Arial,sans-serif;height:38px;width:70px;padding:0;pointer-events:none}body .console.switch-focus .tempo span{font-size:10px}
body .console.switch-focus>.transport{display:flex!important;grid-area:1/2;position:static;margin:0;padding:0;gap:5px;align-items:stretch;background:none}
body .console.switch-focus>.transport button{min-height:44px;padding:4px 7px;font-size:11px;flex:1;min-width:0;margin:0}
body .console.switch-focus>#switchBoard{display:block!important;grid-area:2/1/3/3;position:static;margin:0;padding:9px 12px;min-width:0;border-radius:10px;box-shadow:none}
body .console.switch-focus .switch-board-label{font-size:10px}body .console.switch-focus .switch-board>strong{font-size:clamp(22px,6vw,32px);margin:3px 0;line-height:1.1}body .console.switch-focus .switch-board-pattern{display:none}body .console.switch-focus .switch-round-result{font-size:11px;margin-top:3px}body .console.switch-focus .switch-board-bottom{margin-top:4px;padding-top:4px;min-height:28px}body .console.switch-focus .switch-board-bottom span{font-size:12px}body .console.switch-focus .switch-board-bottom b{font-size:28px}
body .console.switch-focus>#beats{display:flex!important;grid-area:3/1/4/3;margin:0;gap:6px;min-height:0}body .console.switch-focus>#beats i{height:40px;min-height:0;max-width:none;flex:1;padding:0;display:grid;place-items:center;font-size:23px;box-sizing:border-box}
body .console.switch-focus>#playHint{display:block!important;grid-area:4/1/5/3;margin:0;font-size:12px;line-height:15px;min-height:0;overflow:hidden}
body .console.switch-focus>#blockStatus{display:block!important;grid-area:5/1/6/3;margin:0;font-size:10px;line-height:18px;white-space:nowrap;overflow:hidden}
body .console.switch-focus>#hitStrip{display:grid!important;grid-area:6/1/7/3;margin:0;min-height:0;min-width:0;gap:3px;align-items:stretch}
body .console.switch-focus>#hitStrip>span{min-height:0;min-width:0;padding:1px;border-radius:4px;font-size:clamp(8px,2.6vw,12px);line-height:1.05;overflow:hidden;overflow-wrap:anywhere;box-sizing:border-box}
@media(max-height:440px){body .console.playing.switch-focus{grid-template-rows:44px auto 30px 20px 14px minmax(0,1fr);gap:3px;padding-top:3px}body .console.switch-focus>#switchBoard{padding:4px 10px}body .console.switch-focus .switch-board-label,body .console.switch-focus .switch-round-result{display:none}body .console.switch-focus .switch-board>strong{font-size:22px}body .console.switch-focus .switch-board-bottom{margin:0;min-height:22px;padding:0}body .console.switch-focus .switch-board-bottom b{font-size:22px}body .console.switch-focus>#beats i{height:30px;font-size:20px}body .console.switch-focus>#blockStatus{font-size:9px;line-height:14px}}
