:root{--color-bg: #1a1a2e;--color-surface: #16213e;--color-surface-hover: #1e2d50;--color-text: #e0e0e0;--color-text-muted: #8888aa;--color-primary: #7b68ee;--color-primary-hover: #9370db;--color-success: #4caf50;--color-error: #f44336;--color-warning: #ff9800;--color-medal-gold: #ffd700;--color-medal-silver: #c0c0c0;--color-medal-bronze: #cd7f32;--font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace;--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.25rem;--font-size-xl: 1.5rem;--font-size-2xl: 2rem;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 28px;--space-8: 32px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 3px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans)}body{line-height:1.6;-webkit-font-smoothing:antialiased}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}#app{display:grid;place-items:center;min-height:100vh;padding:var(--space-4)}.game-container{width:100%;max-width:800px}.btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-2) var(--space-4);border:none;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:var(--font-size-md);cursor:pointer;transition:background-color .2s ease,transform .1s ease}.btn:active{transform:scale(.97)}.btn-primary{background:var(--color-primary);color:var(--color-text)}.btn-primary:hover{background:var(--color-primary-hover)}.btn-success{background:var(--color-success);color:var(--color-text)}.btn-success:hover{filter:brightness(1.15)}.input-area{width:100%;background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-surface-hover);border-radius:var(--radius-sm);padding:var(--space-3) var(--space-4);font-family:var(--font-mono);font-size:var(--font-size-md);resize:vertical;transition:border-color .2s ease}.input-area:focus{outline:none;border-color:var(--color-primary)}.card{background:var(--color-surface);border-radius:var(--radius-md);padding:var(--space-6);box-shadow:var(--shadow-md)}.loading-overlay{position:fixed;inset:0;z-index:var(--z-loading, 9999);display:flex;align-items:center;justify-content:center;background:var(--color-bg)}.loading-content{text-align:center;max-width:400px;padding:0 var(--space-6)}.loading-content h2{color:var(--color-text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold, 600);margin-bottom:var(--space-6)}.progress-bar-container{width:100%;height:8px;background:var(--color-surface);border-radius:var(--radius-full, 9999px);overflow:hidden;margin:var(--space-4) 0}.progress-bar{height:100%;background:var(--color-primary);width:0%;border-radius:var(--radius-full, 9999px);transition:width .3s ease}.status-text{color:var(--color-text-muted);font-size:var(--font-size-sm);margin-top:var(--space-2)}.error-container{margin-top:var(--space-6)}.error-message{color:var(--color-error);font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.loading-retry{margin-top:var(--space-2)}.game-window{display:grid;grid-template-rows:auto auto 1fr auto auto;gap:var(--space-4);padding:var(--space-5) var(--space-4) var(--space-6);width:100%;max-width:860px;margin:0 auto;min-height:0}.hud{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-4);background:var(--color-surface);border-radius:var(--radius-md);font-size:var(--font-size-lg);font-family:var(--font-mono);font-variant-numeric:tabular-nums}.timer{font-weight:700;color:var(--color-primary)}.score{font-weight:600;color:var(--color-success)}.problem-counter{color:var(--color-text-muted)}.target-display{display:flex;align-items:center;justify-content:center;width:100%;min-height:176px;padding:var(--space-6);background:var(--color-surface);border-radius:var(--radius-md);border:1px solid var(--color-surface-hover);box-shadow:var(--shadow-md);overflow:hidden}.target-display svg{display:block;max-width:none;max-height:none}.output-container{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:176px;padding:var(--space-6);background:var(--color-surface);border:2px solid var(--color-surface-hover);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-md);transition:border-color .2s ease,box-shadow .2s ease}.output-preview{flex:1 1 auto;width:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.output-preview svg{display:block;max-width:none;max-height:none}.shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;pointer-events:none;display:flex;align-items:center;justify-content:center;padding:var(--space-4);transition:opacity .2s ease;overflow:hidden}.shadow-overlay svg{display:block;max-width:none;max-height:none}.output-container.correct{border-color:var(--color-success);box-shadow:var(--shadow-md),0 0 0 1px color-mix(in srgb,var(--color-success) 28%,transparent)}.game-window .input-area{width:100%;background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-surface-hover);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--font-size-md);resize:none;min-height:72px;box-shadow:var(--shadow-sm)}.game-window .input-area:focus{border-color:var(--color-primary);box-shadow:var(--shadow-sm),0 0 0 1px color-mix(in srgb,var(--color-primary) 32%,transparent)}.target-display .typst-doc,.output-preview .typst-doc,.shadow-overlay .typst-doc{display:block;width:auto;height:auto;flex:0 0 auto;color:#fff;--glyph_fill: currentColor;--glyph_stroke: transparent}.shadow-overlay .typst-doc{color:var(--color-primary-hover)}.target-display .typst-doc .typst-text,.output-preview .typst-doc .typst-text,.shadow-overlay .typst-doc .typst-text,.target-display .typst-doc [fill="#000"],.output-preview .typst-doc [fill="#000"],.shadow-overlay .typst-doc [fill="#000"]{fill:currentColor!important}.target-display .typst-doc [stroke="#000"],.output-preview .typst-doc [stroke="#000"],.shadow-overlay .typst-doc [stroke="#000"]{stroke:currentColor!important}.target-display .typst-doc .outline_glyph,.target-display .typst-doc .outline_glyph path,.output-preview .typst-doc .outline_glyph,.output-preview .typst-doc .outline_glyph path,.shadow-overlay .typst-doc .outline_glyph,.shadow-overlay .typst-doc .outline_glyph path{fill:currentColor!important;stroke:transparent!important}.controls{display:flex;flex-direction:row;gap:var(--space-3);justify-content:center;flex-wrap:wrap}.skip-button{background:var(--color-surface);color:var(--color-text-muted);border:1px solid var(--color-surface-hover)}.skip-button:hover{background:var(--color-surface-hover);color:var(--color-text)}.shadow-toggle{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-surface-hover)}.shadow-toggle:hover{background:var(--color-surface-hover)}.end-game-button{background:var(--color-error);color:var(--color-text)}.end-game-button:hover{filter:brightness(1.15)}.hint-button{background:var(--color-surface);color:var(--color-text-muted);border:1px solid var(--color-surface-hover);border-radius:50%;width:24px;height:24px;font-size:var(--font-size-sm);line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;margin-left:var(--space-2)}.hint-button:hover{background:var(--color-surface-hover);color:var(--color-text)}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal, 1000)}.modal-content{background:var(--color-surface);border-radius:var(--radius-md);padding:var(--space-6);max-width:500px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 8px 32px #0000004d}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-4)}.modal-header h3{margin:0;font-size:var(--font-size-lg);color:var(--color-text)}.modal-close{background:none;border:none;color:var(--color-text-muted);font-size:1.5rem;cursor:pointer;line-height:1;padding:0 4px}.modal-close:hover{color:var(--color-text)}.modal-body ul{list-style:none;padding:0;margin:0 0 var(--space-4) 0}.modal-body li{padding:var(--space-1) 0;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text);line-height:1.6}.modal-body a{display:inline-block;margin-top:var(--space-3);color:var(--color-primary);text-decoration:underline;font-size:var(--font-size-sm)}.end-screen{display:flex;flex-direction:column;align-items:center;gap:var(--space-5);padding:var(--space-8) var(--space-4);text-align:center}.end-heading{font-family:var(--font-mono);font-size:var(--font-size-2xl);color:var(--color-primary);font-weight:700;margin:0}.score-summary{font-family:var(--font-mono);font-size:var(--font-size-2xl);color:var(--color-success);font-weight:700;text-shadow:0 0 24px rgba(76,175,80,.35);margin:0}.problems-solved{font-family:var(--font-sans);font-size:var(--font-size-lg);color:var(--color-text);margin:0}.mode-badge{display:inline-block;padding:var(--space-1) var(--space-3);border-radius:var(--radius-lg);font-family:var(--font-sans);font-size:var(--font-size-sm);font-weight:600;background:var(--color-surface);color:var(--color-text-muted);border:1px solid var(--color-surface-hover)}.skipped-section{width:100%;max-width:500px;display:flex;flex-direction:column;align-items:stretch;gap:var(--space-2)}.skipped-toggle{width:100%;background:var(--color-surface);color:var(--color-text-muted);border:1px solid var(--color-surface-hover);font-family:var(--font-sans);font-size:var(--font-size-sm);padding:var(--space-2) var(--space-4)}.skipped-toggle:hover{background:var(--color-surface-hover);color:var(--color-text)}.skipped-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-2)}.skipped-item{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-3) var(--space-4);background:var(--color-surface);border-radius:var(--radius-sm);border:1px solid var(--color-surface-hover);text-align:left}.skipped-title{font-family:var(--font-sans);font-size:var(--font-size-sm);color:var(--color-text);font-weight:600}.skipped-snippet{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);background:var(--color-bg);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);overflow-x:auto;white-space:pre-wrap;word-break:break-word}.end-screen .buttons{display:flex;flex-direction:row;gap:var(--space-4);justify-content:center;flex-wrap:wrap;width:100%}.next-button,.end-screen .replay-button{padding:var(--space-3) var(--space-6);font-size:var(--font-size-lg)}.intro-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:100vh;padding:var(--space-8) var(--space-6);max-width:480px;margin:0 auto;gap:var(--space-6)}.intro-screen h1{font-family:var(--font-mono);font-size:var(--font-size-2xl);color:var(--color-text);letter-spacing:-.02em;margin:0}.intro-screen .subtitle{font-size:var(--font-size-lg);color:var(--color-primary);font-family:var(--font-mono);margin:0}.intro-screen .description{font-size:var(--font-size-md);color:var(--color-text-muted);max-width:360px;margin:0;line-height:1.7}.intro-screen .buttons{display:flex;flex-direction:column;gap:var(--space-3);width:100%;max-width:300px}.intro-screen .buttons .btn{width:100%;padding:var(--space-3) var(--space-4);font-size:var(--font-size-md)}.intro-screen .buttons .btn[data-mode=zen]{background:var(--color-surface);color:var(--color-text)}.intro-screen .buttons .btn[data-mode=zen]:hover{background:var(--color-surface-hover)}.intro-screen .hint-list{list-style:none;display:flex;flex-direction:column;gap:var(--space-2);width:100%;padding:0;margin:0}.intro-screen .hint-list li{background:var(--color-surface);border:1px solid var(--color-surface-hover);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-4);font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);text-align:left;transition:border-color .2s ease}.intro-screen .hint-list li:hover{border-color:var(--color-primary)}.intro-screen .docs-link{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-primary);text-decoration:none;padding:var(--space-2) var(--space-4);border:1px solid var(--color-primary);border-radius:var(--radius-sm);transition:background-color .2s ease,color .2s ease}.intro-screen .docs-link:hover{background:var(--color-primary);color:var(--color-text)}.leaderboard-screen{display:flex;flex-direction:column;align-items:center;gap:var(--space-6);padding:var(--space-8) var(--space-4);text-align:center}.leaderboard-heading{font-family:var(--font-mono);font-size:var(--font-size-2xl);color:var(--color-primary);font-weight:700;margin:0}.leaderboard-list-container{width:100%;max-width:550px}.leaderboard-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--space-1)}.leaderboard-list li{display:flex;flex-direction:row;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);background:var(--color-surface);font-family:var(--font-sans);font-size:var(--font-size-md);color:var(--color-text);transition:background-color .15s ease}.leaderboard-list li:nth-child(2n){background:var(--color-surface-hover)}.leaderboard-list li:hover{filter:brightness(1.1)}.leaderboard-list .rank{min-width:2ch;text-align:center;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);font-weight:600}.leaderboard-list .name{flex:1;text-align:left;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.leaderboard-list .score{font-family:var(--font-mono);font-weight:700;color:var(--color-success);min-width:5ch;text-align:right}.leaderboard-list .problems{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);min-width:2ch;text-align:right}.leaderboard-list .mode-badge{display:inline-block;padding:2px var(--space-2);border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:var(--font-size-xs);font-weight:600;background:var(--color-bg);color:var(--color-text-muted);min-width:4ch;text-align:center}.rank-1 .rank{color:var(--color-medal-gold);font-size:var(--font-size-md)}.rank-1 .name{color:var(--color-medal-gold)}.rank-2 .rank,.rank-2 .name{color:var(--color-medal-silver)}.rank-3 .rank,.rank-3 .name{color:var(--color-medal-bronze)}.empty-message{font-family:var(--font-sans);font-size:var(--font-size-md);color:var(--color-text-muted);text-align:center;padding:var(--space-8) var(--space-4);margin:0}.submission-form{display:flex;flex-direction:row;align-items:center;gap:var(--space-3);width:100%;max-width:400px}.name-input{flex:1;padding:var(--space-2) var(--space-4);background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-surface-hover);border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:var(--font-size-md);transition:border-color .2s ease}.name-input:focus{outline:none;border-color:var(--color-primary)}.name-input::placeholder{color:var(--color-text-muted)}.leaderboard-screen .replay-button{padding:var(--space-3) var(--space-6);font-size:var(--font-size-lg);background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-surface-hover)}.leaderboard-screen .replay-button:hover{background:var(--color-surface-hover)}
