.typing-page .t-wrap { max-width: 900px; }
.typing-top { display:flex; justify-content:space-between; gap:12px; padding:20px 0 12px; font-size:12px; color:var(--ink-2); }
.typing-top a,.typing-heading a,.typing-footer a { text-underline-offset:4px; }
.typing-heading { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:22px; }
.typing-heading h1 { font-size:clamp(25px,4vw,34px); letter-spacing:-.04em; }
.typing-heading p { margin-top:4px; font-size:14px; color:var(--ink-2); }
.typing-heading>a { flex:none; font-size:13px; color:var(--ink-2); }
.typing-courses { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-bottom:16px; }
.typing-courses button { min-width:0; display:flex; align-items:center; justify-content:center; gap:9px; min-height:48px; padding:8px; border:1px solid var(--line-strong); border-radius:4px; background:transparent; color:var(--ink-2); font:inherit; font-size:14px; cursor:pointer; }
.typing-courses button[aria-pressed="true"] { background:var(--surface); color:var(--ink); border-color:var(--ink); font-weight:600; }
.typing-courses button:disabled { cursor:default; opacity:.55; }
.typing-courses i { display:grid; place-items:center; width:24px; height:24px; border-radius:50%; color:white; background:var(--route-color); font:600 12px var(--font-mono); }
.typing-game { --route-color:#00a84d; background:var(--surface); border:1px solid var(--line-strong); border-radius:8px; overflow:hidden; }
.typing-hud { display:flex; align-items:center; gap:16px; padding:16px 24px; border-bottom:1px solid var(--line); font-size:13px; font-variant-numeric:tabular-nums; }
.typing-hud>span:first-child { margin-right:auto; font-weight:600; }
#clock { font:500 17px var(--font-mono); min-width:86px; text-align:right; }
.typing-route { padding:0 20px; }
.typing-route svg { display:block; width:100%; max-height:170px; }
.route-track,.route-progress { fill:none; stroke-width:6; stroke-linecap:round; }
.route-track { stroke:var(--line); }
.route-progress { stroke:var(--route-color); }
.route-stop { fill:var(--surface); stroke:var(--line-strong); stroke-width:3; }
.route-stop.is-done { fill:var(--route-color); stroke:var(--route-color); }
.route-number { fill:var(--ink-2); font:13px var(--font-mono); text-anchor:middle; }
.route-caption { fill:var(--ink-2); font:14px var(--font-sans); }
.route-train rect { fill:var(--surface); stroke:var(--route-color); stroke-width:3; }
.route-train path { stroke:var(--route-color); stroke-width:3; }
.route-train circle { fill:var(--route-color); }
.typing-prompt { text-align:center; padding:2px 24px 14px; }
.typing-step { font-size:12px; color:var(--ink-2); }
#target { font-size:clamp(26px,5vw,44px); font-weight:700; line-height:1.5; letter-spacing:-.04em; margin:6px 0; overflow-wrap:anywhere; }
#target span.is-typed { color:var(--ok); }
.typing-next { font-size:13px; color:var(--ink-2); margin-bottom:20px; }
.typing-entry { display:flex; gap:8px; max-width:580px; margin:0 auto; }
.typing-entry input { min-width:0; flex:1; width:100%; border:1.5px solid var(--ink); border-radius:4px; background:var(--surface); color:var(--ink); font:500 20px var(--font-sans); padding:12px 16px; }
.typing-entry input[aria-invalid="true"] { border-color:var(--miss); }
.typing-entry input:focus-visible { outline:3px solid var(--accent-soft); outline-offset:2px; }
.typing-entry button { flex:none; min-height:52px; }
.typing-feedback { min-height:23px; margin-top:10px; font-size:12px; color:var(--ink-2); }
.typing-feedback.is-wrong { color:var(--miss); }
.typing-bottom { display:flex; flex-wrap:wrap; gap:8px; align-items:center; justify-content:space-between; padding:10px 24px; border-top:1px solid var(--line); font-size:12px; color:var(--ink-2); }
.typing-bottom b { margin-left:7px; font-family:var(--font-mono); color:var(--ink); }
.typing-text-button { min-height:44px; border:0; background:transparent; color:var(--ink-2); font:inherit; cursor:pointer; padding:8px 0 8px 12px; }
.typing-result { padding:12px 24px 30px; text-align:center; }
.typing-result>p { font-size:14px; color:var(--ink-2); }
.typing-result h2 { margin:4px 0; font:600 clamp(32px,7vw,52px) var(--font-mono); }
.typing-result button { margin-top:20px; min-width:190px; min-height:48px; }
.typing-records { margin-top:20px; border-block:1px solid var(--line); }
.typing-records summary { cursor:pointer; min-height:48px; padding:12px 0; font-size:14px; }
.typing-records summary span { float:right; color:var(--ink-2); font:12px var(--font-mono); padding-top:4px; }
.typing-records ol { list-style:none; }
.typing-records li { display:flex; justify-content:space-between; gap:12px; padding:10px 0; border-top:1px solid var(--line); font-size:13px; }
.typing-records li small { color:var(--ink-2); margin-left:10px; }
.typing-records li b { font-family:var(--font-mono); white-space:nowrap; }
#storage-note { padding:8px 0 16px; color:var(--ink-2); font-size:12px; }
.typing-footer { display:flex; justify-content:space-between; gap:14px; color:var(--ink-2); font-size:12px; padding:20px 0 max(24px,env(safe-area-inset-bottom)); }
.sr-only { position:absolute; width:1px; height:1px; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
@media(max-width:560px) {
  .typing-top { padding-top:12px; }
  .typing-heading { margin-bottom:16px; flex-wrap:wrap; gap:8px; }
  .typing-heading>a { font-size:12px; }
  .typing-courses { gap:6px; }
  .typing-courses button { gap:5px; font-size:12px; }
  .typing-courses i { width:21px; height:21px; }
  .typing-hud { padding:12px 16px; gap:12px; }
  .typing-route { padding:0 6px; }
  .route-number { font-size:23px; }
  .route-caption { display:none; }
  .typing-prompt { padding:8px 16px 10px; }
  .typing-entry input { padding:10px 12px; font-size:18px; }
  .typing-entry button { padding:10px 13px; }
  .typing-next { margin-bottom:16px; }
  .typing-bottom { padding:6px 16px; }
}
@media(max-height:700px) {
  .typing-heading { margin-bottom:12px; }
  .typing-top { padding-block:8px; }
  .typing-route svg { max-height:110px; }
  .typing-next { margin-bottom:12px; }
  #target { font-size:28px; margin:3px 0; }
}
@media(max-height:600px) {
  .typing-page .t-head { display:none; }
  .typing-page.is-playing .t-head,.typing-page.is-playing .typing-top,.typing-page.is-playing .typing-heading,.typing-page.is-playing .typing-courses { display:none; }
  .typing-page.is-playing main { padding-top:8px; }
  .typing-page.is-playing .typing-route svg { max-height:70px; }
  .typing-page.is-playing .typing-next { margin-bottom:8px; }
  .typing-page.is-playing #target { margin:0; font-size:28px; }
  .typing-page.is-playing .typing-hud { padding-block:8px; }
}

/* The controls stay small; the current station and entry remain the main focus. */
.typing-modes { display:flex; gap:4px; padding-bottom:14px; }
.typing-modes button { min-height:44px; padding:8px 16px; border:0; border-bottom:2px solid transparent; background:transparent; color:var(--ink-2); font:inherit; font-size:14px; cursor:pointer; }
.typing-modes button[aria-pressed="true"] { border-color:var(--accent); color:var(--ink); font-weight:600; }
.typing-modes button:disabled { cursor:default; }
.typing-stats { display:flex; align-items:center; justify-content:space-between; gap:12px; max-width:580px; min-height:44px; margin:0 auto 10px; font:12px var(--font-mono); color:var(--ink-2); }
.typing-pace { display:flex; align-items:baseline; gap:6px; }
.typing-pace-label { margin-right:4px; font-family:var(--font-sans); }
#pace { min-width:2ch; color:var(--ink); font:600 24px var(--font-mono); font-variant-numeric:tabular-nums; text-align:right; }
#combo { color:var(--ok); }
.typing-accuracy { white-space:nowrap; }
#accuracy { color:var(--ink); font-variant-numeric:tabular-nums; }
#clock.is-urgent { color:var(--miss); }
.typing-result-actions { display:flex; flex-wrap:wrap; justify-content:center; gap:8px; }
.typing-result-actions button { min-width:130px; }
#result-stats { margin-top:8px; font-size:12px; }
#share-feedback { min-height:23px; margin-top:8px; font-size:12px; }
.typing-page.is-compact .t-head,.typing-page.is-compact .typing-top,.typing-page.is-compact .typing-heading,.typing-page.is-compact .typing-courses,.typing-page.is-compact .typing-modes { display:none; }
.typing-page.is-compact main { padding-top:8px; }
.typing-page.is-compact .typing-route svg { max-height:70px; }
.typing-page.is-compact .typing-next { margin-bottom:8px; }
.typing-page.is-compact #target { margin:0; font-size:28px; }
.typing-page.is-compact .typing-hud { padding-block:8px; }
.typing-page.is-compact .typing-stats { margin-bottom:4px; }
@media(max-width:380px) {
  .typing-courses { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .typing-result-actions button { min-width:100px; }
  .typing-records li { flex-wrap:wrap; }
}
@media(max-height:700px) { .typing-route svg { max-height:110px; } }
@media(prefers-reduced-motion:reduce) { .typing-page * { scroll-behavior:auto; } }

.typing-beta { display:inline-block; vertical-align:middle; border:1px solid var(--line-strong); border-radius:2px; padding:3px 6px; margin-left:4px; color:var(--ink-2); font:500 10px var(--font-mono); letter-spacing:.04em; }
.typing-options { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px 16px; margin-bottom:16px; color:var(--ink-2); font-size:12px; }
.typing-options label { display:flex; align-items:center; gap:8px; min-width:0; }
.typing-options select { min-width:0; max-width:100%; min-height:44px; padding:8px 28px 8px 10px; border:1px solid var(--line-strong); border-radius:4px; background:var(--surface); color:var(--ink); font:inherit; font-size:14px; }
.typing-direction { min-height:44px; }
.typing-direction input { width:18px; height:18px; accent-color:var(--accent); }
.typing-bottom-actions { display:flex; gap:8px; margin-left:auto; }
.typing-pause-note { margin-bottom:8px; color:var(--accent); font-size:12px; }
.typing-modes button:disabled { opacity:.55; }
.typing-page.is-compact .typing-options { display:none; }
@media(max-width:560px) {
  .typing-modes { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:4px 8px; }
  .typing-modes button { padding:8px; font-size:13px; }
  .typing-options label:first-child { flex:1; }
  .typing-options select { flex:1; width:100%; }
}

.typing-records li>span { min-width:0; }
.typing-records li small { display:block; margin:3px 0 0; font:12px var(--font-sans); }
.typing-records li b { text-align:right; }
.typing-leaderboard { margin-top:24px; }
.typing-board-heading { display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:8px; }
.typing-board-heading h2 { font-size:18px; }
.typing-board-heading a { font-size:12px; color:var(--ink-2); text-underline-offset:4px; }
.typing-board-caption { margin-top:4px; font-size:12px; color:var(--ink-2); }
.typing-leaderboard .lb-score { text-align:right; }
.typing-leaderboard .lb-score b { font-size:13px; }
.typing-leaderboard .lb-score small { display:block; margin-top:2px; font-size:11px; font-weight:400; color:var(--ink-2); }
.typing-board-save { margin-top:8px; display:flex; flex-wrap:wrap; align-items:center; gap:8px; font-size:12px; color:var(--ink-2); }
.typing-speed-help { margin-top:12px; color:var(--ink-2); font-size:12px; }
.typing-speed-help summary { cursor:pointer; min-height:44px; display:list-item; padding-block:12px; }
.typing-speed-help p { max-width:65ch; line-height:1.7; padding-bottom:8px; }
@media(max-width:420px) {
  .typing-pace-label { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
  .typing-stats { gap:8px; }
  #pace { font-size:22px; }
  .typing-leaderboard .lb { padding-inline:10px; }
  .typing-leaderboard .lb-row { gap:6px; font-size:13px; }
  .typing-leaderboard .lb-rank { flex:0 0 18px; }
  .typing-leaderboard .lb-when { flex:0 0 34px; font-size:10px; }
  .typing-leaderboard .lb-row.is-me { margin-inline:-10px; padding-inline:12px; }
}
