.practice-board{border-top:1px solid var(--board-line,#d4d5cb);padding-top:16px;margin-top:18px;text-align:left;color:inherit}.practice-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:10px}.practice-heading h3{font-family:inherit;font-weight:700;font-size:16px;line-height:1.2;margin:0;letter-spacing:0}.practice-heading span{font-size:10px;line-height:1.5;text-align:right;opacity:.7}.practice-board p{font-size:12px;line-height:1.5;margin:8px 0}.practice-status:empty,.practice-saved:empty{display:none}.practice-ranking{list-style:none;padding:0;margin:0;max-height:220px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.practice-ranking:empty{display:none}.practice-ranking li{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:44px;padding:10px 8px;border-radius:0;border-bottom:1px solid var(--board-line,#d4d5cb);font-size:13px;line-height:1.4}.practice-ranking .is-current{background:var(--board-highlight,#e4e6da);box-shadow:none;border-left:0;border-right:0}.practice-ranking .rank-name{min-width:0;overflow-wrap:anywhere}.practice-ranking .rank-score{white-space:nowrap;font-variant-numeric:tabular-nums}.practice-ranking .rank-number{opacity:.7;font-size:11px}.practice-form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px;margin-top:14px}.practice-form label{display:grid;gap:6px;font-size:12px;font-weight:600;margin:0;min-width:0}.practice-form label span{display:none}.practice-form input{display:block;width:100%;min-width:0;min-height:44px;border:1px solid var(--board-line,#c6c9bd);border-radius:6px;padding:10px 12px;background:#fff;color:inherit;font-family:inherit;font-weight:400;font-size:16px;line-height:1.2}.practice-form button{min-height:44px;padding:10px 14px;border:1px solid currentColor;border-radius:6px;background:transparent;color:inherit;font-family:inherit;font-weight:600;font-size:13px;line-height:1.2;white-space:nowrap}.practice-board [hidden]{display:none!important}.practice-board :focus-visible{outline:2px solid currentColor;outline-offset:3px}@media(max-height:700px){.practice-ranking{max-height:132px}}@font-face{font-family:Barlow;src:url(./fonts/barlow-condensed-800.woff2);font-weight:800;font-display:swap}@font-face{font-family:Manrope;src:url(./fonts/manrope-variable.woff);font-weight:200 800;font-display:swap}:root{--paper:#f4f1e8;--ink:#202323;--gold:#f2dab0;--muted:#63696d}*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#272b2e;color:var(--paper);font-family:Manrope,sans-serif;overscroll-behavior:none}::selection{background:var(--gold);color:var(--ink)}#app{position:relative;height:100svh;max-width:1500px;margin:auto;overflow:hidden;user-select:none;-webkit-user-select:none}canvas{display:block;width:100%;height:100%;touch-action:none;cursor:grab}canvas:active{cursor:grabbing}#app:before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(#0002,transparent 18%,transparent 82%,#0003)}.game-header{position:absolute;z-index:4;top:max(24px,env(safe-area-inset-top));left:28px;right:28px;display:flex;align-items:center;justify-content:space-between;pointer-events:none}.wordmark{font:800 40px/.8 Barlow,sans-serif;letter-spacing:-.03em}.wordmark span{display:block;font:700 11px Manrope,sans-serif;letter-spacing:0;margin-top:9px}nav{display:flex;gap:6px;margin-left:auto}button{font:700 12px Manrope,sans-serif;color:var(--paper);border:0;background:#20262df5;border-radius:3px;padding:12px 16px;min-height:44px;cursor:pointer;pointer-events:auto;-webkit-tap-highlight-color:transparent}button:hover{background:#3e4852}button:disabled{cursor:wait;opacity:.6}:is(button,a,input):focus-visible{outline:3px solid var(--gold);outline-offset:4px}.tally{position:absolute;top:104px;left:28px;display:flex;flex-direction:column;gap:6px;pointer-events:none;text-shadow:0 2px 5px #000c}.tally div{display:flex;align-items:baseline;gap:6px}.tally strong{font:800 40px/1 Barlow,sans-serif;font-variant-numeric:tabular-nums}.tally span{font-size:12px;font-weight:700}#help-copy{display:none;position:absolute;z-index:5;top:82px;right:22px;max-width:min(290px,calc(100% - 36px));padding:16px;background:var(--ink);border-radius:4px;font-size:13px;line-height:1.6;pointer-events:none}#help-copy span{display:block;margin-top:10px;font-size:12px}#app[data-help=true][data-screen=play] #help-copy{display:block}.play-controls{position:absolute;bottom:max(22px,env(safe-area-inset-bottom));left:18px;right:18px;text-align:center;pointer-events:none;text-shadow:0 1px 5px #000a}#instruction{font:700 14px/1.5 Manrope,sans-serif;margin:0 0 12px}#control{display:block;margin:0 auto;min-width:220px;min-height:52px;touch-action:none;transition:background .1s;color:var(--paper);background:#20262deb;border:1px solid #f4f1e84d;opacity:.85}#app[data-queued=true] #control{background:var(--paper);color:var(--ink);border-color:transparent}#app:not([data-phase=ready]):not([data-paused=true]) #instruction,#app[data-taught=true]:not([data-paused=true]) #instruction{display:none}#app[data-taught=true] #control:not(:focus-visible){opacity:0}#feedback{position:absolute;top:54%;left:10%;right:10%;text-align:center;font:800 25px Barlow,sans-serif;color:#fff4d7;opacity:0;transform:translateY(5px);transition:opacity .12s,transform .12s;pointer-events:none;text-shadow:0 2px 7px #000a}#feedback.show{opacity:1;transform:translateY(0)}#app:not([data-screen=play]) :is(.wordmark,.tally,.play-controls,#pause,#help,#feedback){display:none}.screen{position:absolute;inset:0;z-index:2}.start-screen{display:flex;flex-direction:column;justify-content:space-between;padding:max(40px,env(safe-area-inset-top)) 40px max(28px,env(safe-area-inset-bottom));background:linear-gradient(transparent 60%,#14191e80)}.start-heading{display:flex;flex-direction:column;gap:24px;align-items:flex-start;pointer-events:none;text-shadow:0 3px 8px #0005}.brand-mark{display:block;width:100%;height:auto}.start-mark{display:block;width:82px}.wordmark{width:64px}.result-mark{display:block;width:72px;flex:none}.start-heading h1{font:800 clamp(72px,10vw,116px)/.87 Barlow,sans-serif;text-transform:uppercase;letter-spacing:-.025em;margin:0}.start-actions{width:min(100%,320px)}.start-instruction{font-size:17px;font-weight:600;line-height:1.5;margin:0 0 20px}.primary{width:100%;min-height:54px;border-radius:3px;background:var(--paper);color:var(--ink);font:800 14px/1 Manrope,sans-serif;display:flex;align-items:center;justify-content:center;gap:16px}.primary:hover{background:#fffaf0}#campaign-start{justify-content:space-between;padding:16px 20px}#campaign-start:after{content:"";width:9px;height:9px;border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg);margin-right:3px}.status{font-size:12px;line-height:1.5;margin:10px 0 0}.status:empty{display:none}.board-link{display:inline-flex;align-items:center;min-height:44px;color:inherit;font-size:12px;font-weight:700;text-underline-offset:4px}.result-screen{display:flex;align-items:safe center;justify-content:center;overflow-y:auto;padding:24px 20px max(24px,env(safe-area-inset-bottom));background:#14191e70}.result-card{width:100%;max-width:420px;padding:26px;background:var(--paper);color:var(--ink);border-radius:4px;box-shadow:0 16px 60px #0003}.result-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-bottom:20px;border-bottom:1px solid #20232329}.result-heading h2{font:800 14px/1.2 Manrope,sans-serif;text-transform:uppercase;margin:0}.result-heading h2:focus{outline:none}.score-label{font:700 10px/1.4 Manrope,sans-serif;text-transform:uppercase;letter-spacing:.1em;margin:24px 0 6px}.result-score{display:flex;align-items:baseline;gap:10px;margin-top:0}.result-score strong{font:800 clamp(64px,14vw,88px)/1 Barlow,sans-serif;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.result-score span{font-size:13px;font-weight:700}.result-stats{font-size:13px;font-weight:700;margin:6px 0}.result-reason{font-size:12px;color:var(--muted);margin:8px 0 20px}.board-heading{display:flex;align-items:baseline;justify-content:space-between;border-top:1px solid #20262d26;padding-top:16px}.board-heading h3{font-size:14px;margin:0}.board-heading span{font-size:11px;color:var(--muted)}#ranking{list-style:none;padding:0;margin:10px 0;max-height:180px;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable;scrollbar-color:#999a90 transparent;scrollbar-width:thin;touch-action:pan-y}#ranking:empty{display:none}#ranking:focus-visible{outline:2px solid #786b52;outline-offset:2px}#ranking::-webkit-scrollbar{width:6px}#ranking::-webkit-scrollbar-thumb{background:#999a90}#board-scroll-hint{font-size:11px;line-height:1.5;color:var(--muted);margin:4px 0 0}.rank-row{display:grid;grid-template-columns:20px minmax(0,1fr) auto;gap:8px;align-items:center;min-height:36px;padding:7px 8px;font-size:12px;border-radius:4px}.rank-row .rank-number{color:var(--muted);font-variant-numeric:tabular-nums}.rank-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rank-row strong{font-variant-numeric:tabular-nums}.rank-row.is-current{background:#e5ddce}.rank-row.is-current .rank-name{font-weight:800}#own-rank{font-size:12px;font-weight:700;margin:10px 0}#score-form{margin-top:14px}#score-form label{display:block;font-size:12px;font-weight:800;margin-bottom:6px}.score-fields{display:flex;gap:8px}#player-name{min-width:0;flex:1;background:#fffcf5;color:var(--ink);border:1px solid #aeb0aa;border-radius:3px;padding:10px;font:16px Manrope,sans-serif;user-select:text;-webkit-user-select:text}#score-form small{display:block;font-size:10px;line-height:1.5;margin-top:6px;color:var(--muted)}#save-score{border-radius:3px;padding:10px;white-space:nowrap}#retry{background:var(--ink);color:var(--paper);margin-top:18px}#retry:hover{background:#3e4852}.result-card :is(button,a,input):focus-visible{outline-color:#786b52}#campaign-board{display:flex;justify-content:center;margin-top:4px}.text-button{background:none;color:var(--ink);padding:8px 0;text-decoration:underline}.text-button:hover{background:none}.result-card .status{color:var(--muted)}@media(max-width:600px){.game-header{left:18px;right:18px;top:max(18px,env(safe-area-inset-top))}.tally{left:18px;top:96px}.wordmark{font-size:36px}button{padding:10px 13px}.start-screen{padding:32px 24px max(20px,env(safe-area-inset-bottom))}.start-heading{gap:20px}.start-mark{width:72px}.start-heading h1{font-size:82px}.start-actions{width:100%;max-width:360px}.result-card{padding:22px}.result-screen{padding-left:16px;padding-right:16px}.result-score strong{font-size:64px}}@media(max-height:650px){.game-header{top:12px}.tally{top:86px}.tally strong{font-size:32px}.play-controls{bottom:12px}.start-screen{padding-top:24px;padding-bottom:12px}.start-heading h1{font-size:68px}.start-instruction{font-size:14px;margin-bottom:12px}.result-screen{padding-top:12px;padding-bottom:12px}.result-card{padding:16px 18px}.result-heading h2{font-size:12px}.result-mark{width:61px}.score-label{margin-top:16px}.result-heading{padding-bottom:14px}.result-score{margin-top:0}.result-score strong{font-size:52px}.result-reason{margin-bottom:12px}.board-heading{padding-top:12px}#ranking{max-height:108px;margin:6px 0}#score-form{margin-top:10px}#retry{margin-top:12px}}@media(max-width:360px){.game-header{left:12px;right:12px}nav{gap:3px}nav button{padding:9px;min-width:44px}.wordmark{font-size:30px}.start-screen{padding-left:20px;padding-right:20px}.start-heading{gap:18px}.start-heading h1{font-size:72px}.result-screen{padding-left:12px;padding-right:12px}.result-card{padding-left:16px;padding-right:16px}}@media(prefers-reduced-motion:reduce){#feedback,#control{transition:none}}@media(max-height:650px){.tally{top:78px;left:18px;right:18px;display:grid;grid-template-columns:auto auto;justify-content:space-between;align-items:center;gap:10px}.tally strong{font-size:28px}.tally span{font-size:11px}}@media(max-height:450px){.tally{top:auto;bottom:78px}}#app[data-loading] #court,#app[data-loading] #sound{visibility:hidden}#loading-status{font-size:13px;line-height:1.5;margin:14px 0 0;color:var(--gold)}#loading-retry{font-size:12px;line-height:1.5;color:var(--paper);min-height:44px;align-items:center;text-underline-offset:4px}#app[data-loading] #campaign-status{display:none}#app:not([data-loading]) :is(#loading-status,#loading-retry){display:none}#loading-status:before{content:"";display:inline-block;width:8px;height:8px;margin-right:9px;border-radius:50%;background:currentColor;animation:load-pulse 1.2s ease-in-out infinite alternate}#app[data-loading=error] #loading-status:before{animation:none}@keyframes load-pulse{to{opacity:.3}}@media(prefers-reduced-motion:reduce){#loading-status:before{animation:none}}nav{gap:0;border:1px solid #f4f1e82b;border-radius:3px;overflow:hidden;background:#202323eb}nav button{background:none;border-radius:0}nav button+button{border-left:1px solid #f4f1e81c}nav button:hover{background:#f4f1e818}.wordmark span{font-size:10px;margin-top:7px}.tally strong{font-size:46px}.result-card{border-top:4px solid var(--ink)}.primary:active{filter:brightness(.92)}@media(max-width:600px){.wordmark{width:58px}.start-screen{padding-top:28px}.start-heading h1{font-size:80px}.result-score strong{font-size:76px}}@media(max-height:650px){.start-heading{gap:16px}.start-mark{width:66px}.start-heading h1{font-size:64px}.tally strong{font-size:28px}.result-score strong{font-size:56px}.score-label{margin-top:14px}}@media(max-height:450px){.start-heading{flex-direction:row;gap:24px}.start-heading h1{font-size:60px}.start-screen{padding-top:20px}.start-instruction{font-size:13px;margin-bottom:10px}}@media(max-width:360px)and (max-height:650px){.start-heading h1{font-size:48px}}.start-rule{font-size:12px;line-height:1.5;margin:0 0 16px;color:var(--paper)}.start-instruction{margin-bottom:12px}#feedback-title{display:block;font:inherit}#feedback-detail{display:block;font:700 12px/1.5 Manrope,sans-serif;max-width:250px;margin:6px auto 0}#feedback[data-kind=no-rep],#app[data-no-rep=used] #no-rep-state{color:#ffd4bd}#own-rank{padding:10px 0;line-height:1.5;border-top:1px solid #20232329}@media(max-height:650px){.start-rule{font-size:11px;margin-bottom:12px}.start-instruction{font-size:14px;margin-bottom:8px}}#help-copy{max-height:calc(100svh - 110px);overflow-y:auto;pointer-events:auto}@media(min-width:361px)and (max-width:600px)and (max-height:750px){.start-heading h1{font-size:64px}}.start-heading,.wordmark,.tally{color:var(--ink);text-shadow:none}#feedback{color:var(--ink);text-shadow:0 1px 3px #f4f1e880}#feedback[data-kind=no-rep],#app[data-no-rep=used] #no-rep-state{color:#743017}@media(max-height:450px){.tally{color:var(--paper);text-shadow:0 2px 5px #000c}#app[data-no-rep=used] #no-rep-state{color:#ffd4bd}}#app[data-loading] .start-heading{color:var(--paper)}@media(min-height:651px)and (max-height:750px){.result-screen{padding-top:12px;padding-bottom:12px}.result-card{padding:16px 18px}.result-heading{padding-bottom:14px}.result-mark{width:61px}.score-label{margin-top:14px}.result-score strong{font-size:56px}.result-reason{margin-bottom:12px}.board-heading{padding-top:12px}#score-form{margin-top:10px}#retry{margin-top:12px}}@media(max-height:600px){#ranking{max-height:72px}#own-rank{padding:6px 0;margin:6px 0}}
