@import "https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Fira+Code:wght@400;500&display=swap";:root{--paper:#fffdfa;--paper-shadow:#36271114;--ink:#171412;--muted:#655d57;--quiet-ink:#8d847d;--border:#ddd5cd;--border-strong:#b9aea5;--soft:#f4efe8;--accent:#8f2218;--accent-soft:#fbf0ee;--tier-low:#4f5f1b;--tier-mid:#7a5500;--tier-high:#8a1a1a;--link:#1a5fa8;--sans:"EB Garamond", Georgia, serif;--mono:"Fira Code", Consolas, monospace;color:var(--ink);font-family:var(--sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scrollbar-gutter:stable;background:radial-gradient(circle at top,#d3b69229,#0000 30%),linear-gradient(#f7f1ea 0%,#fdfaf6 30%,#f8f4ef 100%)}*,:before,:after{box-sizing:border-box}html,body{min-height:100%;margin:0}body{min-height:100vh}button,textarea{font:inherit}a{color:var(--link)}code{font-family:var(--mono)}[hidden]{display:none!important}#app{min-height:100vh}.app-shell{min-height:100vh;position:relative}.loading-screen{z-index:10;background:linear-gradient(#fffdfae6,#f7f1eae6);place-items:center;display:grid;position:fixed;inset:0}.loading-card{border:1px solid var(--border);box-shadow:0 18px 44px var(--paper-shadow);text-align:center;background:#fffdfaf2;padding:28px 36px}.loading-title{font-size:2rem}.loading-status{color:var(--muted);margin-top:10px;font-size:.95rem}.wrap{width:min(100%,760px);margin:0 auto;padding:32px 24px 40px}.screen{border:1px solid var(--border);box-shadow:0 24px 60px var(--paper-shadow);background:#fffdfae6;position:relative}.start-screen,.end-screen{text-align:center;padding:52px 32px 36px}.game-screen{padding:28px 24px 24px}.logo{letter-spacing:-.06em;font-size:clamp(3rem,6vw,3.9rem);font-weight:400}.logo-subtle{vertical-align:-.28em;letter-spacing:-.04em;font-size:.56em}.tagline{color:var(--muted);margin:12px 0 24px;font-size:1.2rem}.desc{width:min(100%,480px);margin:0 auto 28px;font-size:1rem;line-height:1.75}.btn-row{flex-wrap:wrap;justify-content:center;gap:14px;margin-bottom:20px;display:flex}.btn{border:1.5px solid var(--ink);cursor:pointer;background:0 0;padding:10px 28px;transition:background-color .16s,color .16s,transform .16s,border-color .16s}.btn:hover,.btn:focus-visible,.btn.sel{background:var(--ink);color:#fff;transform:translateY(-1px)}.btn:focus-visible,.skip-link:focus-visible,.code-input:focus-visible,.preamble-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.btn.primary{margin-bottom:28px;padding-inline:45px;font-size:1.05rem}.hints{text-align:left;width:min(100%,480px);margin:0 auto;line-height:1.9}.hints strong{font-weight:600}.hints code{background:var(--soft);padding:1px 5px;font-size:.78rem}.hints ul{margin:6px 0 0;padding-left:20px}.game-top{justify-content:space-between;align-items:center;gap:18px;margin-bottom:22px;display:flex}.score-el{color:var(--muted);font-family:var(--sans);align-items:baseline;gap:8px;font-size:1.12rem;line-height:1.1;display:flex}.score-label{color:var(--muted)}#score-val,.timer-el,.r-pts,.ph,.err,.match-msg{font-family:var(--mono)}#score-val{font-family:inherit;font-size:inherit;color:var(--ink);font-variant-numeric:lining-nums tabular-nums}.right-top{align-items:center;gap:14px;display:flex}.points-pill{letter-spacing:.14em;text-transform:uppercase;border:1px solid;padding:2px 9px;font-size:.7rem}.points-tier-low{color:var(--tier-low)}.points-tier-mid{color:var(--tier-mid)}.points-tier-high{color:var(--tier-high)}.timer-el{text-align:right;min-width:56px;font-size:1.75rem}.timer-el.urgent{color:var(--accent)}.timer-el.timer-mode-label{min-width:0;color:var(--quiet-ink);font-family:var(--sans);letter-spacing:.14em;text-transform:uppercase;font-size:.9rem}.problem-head{margin-bottom:14px}.problem-kicker{color:var(--quiet-ink);letter-spacing:.18em;text-transform:uppercase;margin-bottom:4px;font-size:.7rem}.problem-name{font-size:1.4rem;line-height:1.15}.sec-label{color:var(--quiet-ink);letter-spacing:.18em;text-transform:uppercase;margin-bottom:8px;font-size:.7rem}.output-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.output-head .output-label{margin-bottom:0}.shadow-toggle{color:var(--quiet-ink);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:.75rem;display:inline-flex}.shadow-toggle input{accent-color:var(--accent);margin:0}.formula-box{border:1px solid var(--border);background:var(--paper);justify-content:center;align-items:center;margin-bottom:18px;padding:8px;display:flex;overflow:hidden}.formula-box svg{max-width:100%;max-height:100%}.play-formula-box{height:90px}.output-compare-box{isolation:isolate;display:block;position:relative}.formula-layer{justify-content:center;align-items:center;display:flex;position:absolute;inset:8px;overflow:hidden}.formula-shadow-layer{z-index:0;pointer-events:none}.formula-shadow-layer svg{opacity:.18;filter:grayscale()}.formula-user-layer{z-index:1}.solution-panel{margin-bottom:18px}.solution-code{field-sizing:content;resize:none;height:auto;min-height:90px;overflow-y:auto}.formula-box.match{border-color:var(--tier-low);background:#f5fbf5}.ph{color:var(--quiet-ink);font-size:.82rem}.err{color:var(--tier-high);font-size:.78rem}.code-input{border:1px solid var(--border-strong);background:var(--paper);width:100%;min-height:90px;color:var(--ink);font-family:var(--mono);resize:vertical;padding:10px 12px;font-size:.9rem;line-height:1.6;transition:border-color .2s}.code-input:focus{border-color:var(--accent)}.code-input[readonly]{background:var(--soft);color:var(--quiet-ink);cursor:default}.match-msg{color:var(--tier-low);font-size:.82rem}.match-status{min-height:1.25rem;margin-top:12px}.bottom-row{justify-content:space-between;align-items:center;gap:18px;margin-top:2px;display:flex}.skip-link{color:var(--quiet-ink);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.skip-link:hover{color:var(--ink)}.skip-link.quiet{color:#b0a8a1;font-size:.76rem}.action-link{color:var(--quiet-ink);white-space:nowrap;font-size:.82rem}.preamble-trigger{position:absolute;bottom:18px;right:22px}.preamble-dialog{border:1px solid var(--border-strong);background:var(--paper);width:min(560px,100vw - 32px);color:var(--ink);padding:0;box-shadow:0 24px 60px #36271133}.preamble-dialog::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#17141247}.preamble-form{padding:24px}.preamble-heading{margin-bottom:22px}.preamble-heading h2{margin:0 0 6px;font-size:1.5rem;font-weight:500}.preamble-heading p{color:var(--muted);margin:0;font-size:.9rem;line-height:1.45}.preamble-form>.sec-label{display:block}.preamble-input{resize:vertical;min-height:180px}.preamble-actions{justify-content:flex-end;align-items:center;gap:22px;margin-top:18px;display:flex}.preamble-save{padding:8px 24px}.debug-menu{border:1px dashed var(--border-strong);background:#fffdfab8;width:min(100%,760px);margin:18px auto 0}.debug-menu summary{cursor:pointer;letter-spacing:.1em;text-transform:uppercase;color:var(--quiet-ink);padding:10px 14px;font-size:.82rem}.debug-body{gap:10px;padding:0 14px 14px;display:grid}.debug-label{color:var(--quiet-ink);font-size:.82rem}.debug-select{border:1px solid var(--border-strong);background:var(--paper);width:100%;color:var(--ink);font-family:var(--mono);padding:10px 12px;font-size:.82rem}.debug-btn{justify-self:start;margin-bottom:0;padding:8px 18px}.debug-problem-list{border-top:1px solid #e8ddd3;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start;gap:10px;max-height:28rem;padding-top:6px;display:grid;overflow-y:auto}.debug-problem{background:#fffdfaeb;border:1px solid #eadfd5;gap:8px;padding:9px 9px 10px;display:grid}.debug-problem-head{justify-content:space-between;align-items:start;gap:10px;margin-bottom:0;display:flex}.debug-problem-name{font-size:.82rem;line-height:1.2}.debug-problem-points{color:var(--quiet-ink);font-size:.68rem}.debug-load-link{white-space:nowrap;font-size:.76rem}.debug-preview-box{min-height:52px;margin-bottom:0;padding:5px}.debug-src{color:var(--quiet-ink);word-break:break-word;font-size:.62rem;line-height:1.35;display:block}.final-num{font-size:clamp(3.4rem,8vw,4.4rem);font-family:var(--sans);font-variant-numeric:lining-nums tabular-nums;line-height:1}.end-overview{gap:16px;margin-bottom:24px;display:grid}.end-score-card{box-shadow:none;background:0 0;border:0;padding:0}.end-sub{color:var(--quiet-ink);letter-spacing:.18em;text-transform:uppercase;margin:10px 0 12px;font-size:.74rem}.end-high-score{color:var(--quiet-ink);letter-spacing:.16em;text-transform:uppercase;font-size:.68rem}.end-high-score span{color:var(--ink);font-family:var(--sans);font-variant-numeric:lining-nums tabular-nums;letter-spacing:0;font-size:.88rem}.stats-row{flex-wrap:wrap;justify-content:center;gap:28px;display:flex}.stat-box{background:0 0;border:0;min-width:88px;padding:0}.stat-number{font-size:1.75rem;font-family:var(--sans);font-variant-numeric:lining-nums tabular-nums}.stat-label{color:var(--quiet-ink);letter-spacing:.16em;text-transform:uppercase;font-size:.68rem}.review-section{text-align:left;background:0 0;border:0;margin-bottom:28px;padding:0}.review{text-align:left;width:100%;margin:0}.review-empty{color:var(--muted);text-align:center;margin:0;padding:18px 0 12px}.review-entry{background:0 0;border-top:1px solid #f0e7de}.review-entry:last-child{border-bottom:1px solid #f0e7de}.review-entry[open]{background:0 0}.review-summary{cursor:pointer;padding:9px 0;list-style:none;display:block}.review-summary::-webkit-details-marker{display:none}.review-summary-row{align-items:baseline;gap:10px;font-size:1rem;display:flex}.review-title{flex:1}.review-meta{color:var(--quiet-ink);font-family:var(--mono);font-variant-numeric:lining-nums tabular-nums;font-size:.72rem}.review-detail{gap:12px;padding:0 0 14px;display:grid}.review-block{min-width:0}.review-block-label{margin-bottom:6px}.review-preview-box{height:90px;margin-bottom:0}.review-code{border:1px solid var(--border);background:var(--paper);min-height:90px;color:var(--muted);font-family:var(--mono);white-space:pre-wrap;word-break:break-word;margin:0;padding:12px;font-size:.74rem;line-height:1.55;overflow:auto}.review-code-empty{color:#a79d95;font-style:italic}.r-ok{color:var(--tier-low)}.r-skip{color:#999}.r-end{color:var(--muted)}.r-bad{color:var(--tier-high)}.r-pts{color:#8d847d;text-align:right;min-width:36px;font-size:.74rem}@media (width<=640px){.wrap{padding-inline:16px}.start-screen,.end-screen{padding-inline:20px}.game-screen{padding-inline:16px}.game-top,.stats-row{flex-direction:column;align-items:stretch;gap:16px}.right-top{justify-content:space-between}.timer-el{text-align:left}.bottom-row{flex-direction:row}.output-head{flex-direction:column;align-items:start}.debug-btn{justify-self:stretch;width:100%}.debug-problem-list{grid-template-columns:1fr}.stats-row{gap:18px}.preamble-trigger{bottom:14px;right:18px}.preamble-form{padding:20px}}.practice-missed-shell{border:1px solid var(--border);background:#fffdfae0;width:min(100%,760px);margin:24px auto 0;box-shadow:0 16px 36px #3627110d}.practice-missed-menu summary{cursor:pointer;color:var(--quiet-ink);letter-spacing:.1em;text-transform:uppercase;padding:10px 14px;font-size:.82rem}.practice-missed-panel{text-align:left;gap:16px;padding:10px 28px 32px;display:grid}.practice-missed-panel-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.practice-missed-panel-label{color:var(--quiet-ink);letter-spacing:.16em;text-transform:uppercase;font-size:.72rem}.practice-missed-clear{color:var(--quiet-ink);cursor:pointer;text-underline-offset:2px;background:0 0;border:0;padding:0;font-size:.72rem;text-decoration:underline}.practice-missed-clear:hover{color:var(--ink)}.practice-missed-list{border-top:1px solid var(--border);max-height:18rem;margin:0;padding:0;list-style:none;overflow-y:auto}.practice-missed-list li{border-bottom:1px solid var(--border);color:var(--ink);justify-content:space-between;align-items:baseline;gap:8px;padding:8px 0;font-size:.92rem;display:flex}.practice-missed-list li .pm-count{color:var(--quiet-ink);font-family:var(--mono);flex-shrink:0;font-size:.78rem}.btn.primary.practice-start-button{white-space:nowrap;justify-self:center;width:fit-content;max-width:100%;margin:6px auto 0;padding-block:10px;padding-inline:22px;font-size:.96rem}.end-bottom-row{justify-content:flex-end;margin-top:8px;display:flex}.practice-missed-end-link{color:var(--quiet-ink);cursor:pointer;text-underline-offset:2px;white-space:nowrap;background:0 0;border:0;padding:0;font-size:.82rem;text-decoration:underline}.practice-missed-end-link:hover{color:var(--ink)}.miss-badge{color:var(--quiet-ink);border:1px solid var(--border);font-size:.66rem;font-family:var(--mono);background:0 0;flex-shrink:0;align-items:center;margin-left:4px;padding:0 4px;display:inline-flex}
