@font-face{font-family:"Press Start 2P";src:url(/assets/press-start-2p-latin-_wFEWmAB.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:VT323;src:url(/assets/vt323-latin-wDgJuOC9.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--bg-primary:#0d0b1f;--bg-secondary:#14132c;--bg-card:#1b1a38;--bg-raised:#2a2850;--teal:#2ce8dc;--teal-dark:#0b8f88;--purple:#c860f0;--purple-dark:#7a1f9c;--amber:#ffb62e;--amber-dark:#c46a00;--coral:#ff4d5e;--coral-dark:#c41f30;--green:#3cf04a;--green-dark:#1f9e2c;--indigo:#7d8cff;--indigo-dark:#3646b8;--red:#ff4d5e;--gold:#ffe94d;--text-primary:#f4f0e6;--text-secondary:#a0a8d0;--frame-lo:#000010;--frame-hi:#4a5588;--border:#f4f0e624;--pixel-shadow:4px 4px 0 0 var(--frame-lo);--font-pixel:"Press Start 2P", "Courier New", monospace;--font-retro:"VT323", "Courier New", monospace;--font-mono:"Cascadia Code", "Fira Code", "Consolas", monospace}*{box-sizing:border-box;border-radius:0;margin:0;padding:0}body{background-color:var(--bg-primary);color:var(--text-primary);font-family:var(--font-retro);justify-content:center;align-items:flex-start;min-height:100vh;font-size:1.05rem;display:flex}#root{width:100%;max-width:860px;padding:1.5rem 1rem}.pixel-frame,.npc-dialog,.stat,.xp-bar-container,.inventory-section,.mastery-section,.grimoire-section,.zone-card,.enemy-card,.enemy-hp-track,.concept-box,.code-block,.code-editor,.result-card,.test-cases-panel,.spell-bar,.hint-box,.feedback-box,.grimoire-item{border:2px solid var(--frame-lo);box-shadow:inset 0 0 0 2px var(--frame-hi), var(--pixel-shadow)}.screen{animation:.24s steps(4,end) both screenReveal}@keyframes screenReveal{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.screen{animation:none}}.title-screen{text-align:center;flex-direction:column;align-items:center;gap:1.5rem;padding:3rem 1rem;display:flex}.title-logo{filter:drop-shadow(0 0 14px var(--teal));font-size:4rem}.title-heading{font-family:var(--font-pixel);color:var(--teal);text-shadow:3px 3px 0 var(--purple-dark);font-size:1.8rem;line-height:1.6}.title-sub{font-family:var(--font-retro);color:var(--text-secondary);letter-spacing:.08em;font-size:1.4rem}.npc-dialog{background:var(--bg-card);text-align:left;align-items:flex-start;gap:1rem;width:100%;max-width:640px;padding:1rem 1.25rem;display:flex}.npc-avatar{background:var(--bg-raised);border:2px solid var(--frame-lo);width:3rem;height:3rem;box-shadow:inset 0 0 0 2px var(--frame-hi);flex-shrink:0;justify-content:center;align-items:center;font-size:1.8rem;display:flex}.npc-bubble strong{font-family:var(--font-pixel);color:var(--teal);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.6rem;font-size:.7rem;line-height:1.6;display:block}.npc-bubble p{font-family:var(--font-retro);color:var(--text-primary);font-size:1.2rem;line-height:1.4}.btn-primary{font-family:var(--font-pixel);background:var(--purple);color:var(--bg-primary);border:2px solid var(--frame-lo);box-shadow:inset 0 0 0 2px var(--frame-hi), var(--pixel-shadow);cursor:pointer;padding:.9rem 1.6rem;font-size:.75rem;line-height:1.6;transition:transform 50ms step-end,box-shadow 50ms step-end,background .1s steps(2,end)}.btn-primary:hover{background:var(--teal)}.btn-primary:active{box-shadow:inset 0 0 0 2px var(--frame-hi), 0 0 0 0 var(--frame-lo);transform:translate(4px,4px)}.world-screen{flex-direction:column;gap:1.5rem;display:flex}.world-title{font-family:var(--font-pixel);text-align:center;color:var(--teal);font-size:1.15rem;line-height:1.8}.settings-toggle{flex-wrap:wrap;justify-content:center;gap:.6rem;display:flex}.settings-btn{font-family:var(--font-pixel);background:var(--bg-raised);border:2px solid var(--teal-dark);box-shadow:var(--pixel-shadow);color:var(--text-primary);cursor:pointer;padding:.5rem .8rem;font-size:.65rem;line-height:1.5;transition:transform 50ms step-end,box-shadow 50ms step-end}.settings-btn:hover{transform:translate(-1px,-1px)}.settings-btn:active{box-shadow:0 0 0 0 var(--frame-lo);transform:translate(4px,4px)}.settings-btn[aria-pressed=true]{border-color:var(--teal);color:var(--teal)}.stats-bar{flex-wrap:wrap;justify-content:center;gap:1rem;display:flex}.stat{background:var(--bg-card);font-family:var(--font-pixel);align-items:center;gap:.5rem;padding:.55rem .9rem;font-size:.7rem;display:flex}.stat-icon{font-size:1.1rem}.xp-bar-container{background:var(--bg-card);align-items:center;gap:.75rem;padding:.75rem 1rem;display:flex}.xp-bar-label{font-family:var(--font-retro);color:var(--text-secondary);white-space:nowrap;font-size:1rem}.xp-bar-track{background:var(--bg-secondary);border:2px solid var(--frame-lo);flex:1;height:14px;overflow:hidden}.xp-bar-fill{background:var(--teal);height:100%}.xp-bar-pct{font-family:var(--font-pixel);color:var(--teal);text-align:right;min-width:3rem;font-size:.7rem}.inventory-section{background:var(--bg-card);padding:1rem}.inventory-title{font-family:var(--font-pixel);color:var(--amber);margin-bottom:.9rem;font-size:.75rem;line-height:1.8}.inventory-grid{flex-wrap:wrap;gap:.5rem;display:flex}.inventory-item{font-family:var(--font-retro);background:var(--bg-secondary);border:2px solid var(--amber);color:var(--amber);padding:.3rem .7rem;font-size:1rem}.mastery-section{background:var(--bg-card);padding:1rem}.mastery-grid{flex-direction:column;gap:.7rem;display:flex}.mastery-row{grid-template-columns:8rem 1fr 1.5rem;align-items:center;gap:.6rem;display:grid}.mastery-label{font-family:var(--font-retro);color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:1rem;overflow:hidden}.mastery-track{background:var(--bg-secondary);border:2px solid var(--frame-lo);height:10px;overflow:hidden}.mastery-fill{background:var(--purple);height:100%}.mastery-count{font-family:var(--font-pixel);color:var(--teal);text-align:right;font-size:.7rem}.grimoire-section{background:var(--bg-card);padding:1rem}.grimoire-list{flex-direction:column;gap:.75rem;margin-top:.5rem;list-style:none;display:flex}.grimoire-item{background:var(--bg-secondary);align-items:flex-start;gap:.75rem;padding:.6rem .75rem;display:flex}.grimoire-locked{opacity:.6}.grimoire-icon{background:var(--bg-raised);border:2px solid var(--frame-lo);flex-shrink:0;justify-content:center;align-items:center;width:2.4rem;height:2.4rem;font-size:1.2rem;display:flex}.grimoire-name{font-family:var(--font-pixel);font-size:.75rem;line-height:1.6}.grimoire-desc{font-family:var(--font-retro);color:var(--text-secondary);font-size:1rem;line-height:1.3}.grimoire-requirement{font-family:var(--font-retro);color:var(--amber);margin-top:.3rem;font-size:.95rem}.flawless-badge{font-family:var(--font-pixel);background:var(--purple);color:var(--bg-primary);border:2px solid var(--frame-lo);box-shadow:inset 0 0 0 2px var(--frame-hi), var(--pixel-shadow);padding:.8rem 1.6rem;font-size:.8rem;line-height:1.6;animation:.5s cubic-bezier(.175,.885,.32,1.275) popIn}.zones-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1rem;display:grid}.zone-card{background:var(--bg-card);cursor:pointer;text-align:center;color:var(--text-primary);flex-direction:column;gap:.5rem;padding:1.5rem 1rem;transition:transform 50ms step-end,border-color .1s steps(2,end),box-shadow 50ms step-end;display:flex}.zone-card:hover{border-color:var(--zone-color,var(--teal));transform:translate(-2px,-2px)}.zone-card:active{box-shadow:inset 0 0 0 2px var(--frame-hi), 0 0 0 0 var(--frame-lo);transform:translate(4px,4px)}.zone-icon{background:var(--bg-raised);border:2px solid var(--frame-lo);width:3.6rem;height:3.6rem;box-shadow:inset 0 0 0 2px var(--frame-hi);justify-content:center;align-items:center;margin:0 auto;font-size:2.2rem;display:flex}.zone-name{font-family:var(--font-pixel);color:var(--zone-color,var(--teal));font-size:.75rem;line-height:1.6}.zone-desc{font-family:var(--font-retro);color:var(--text-secondary);font-size:1rem;line-height:1.3}.zone-missions{font-family:var(--font-retro);color:var(--text-secondary);margin-top:auto;font-size:.95rem}.concept-box{background:var(--bg-raised);padding:1rem 1.25rem}.concept-label{font-family:var(--font-pixel);color:var(--purple);text-transform:uppercase;margin-bottom:.6rem;font-size:.7rem;line-height:1.8}.concept-box p{font-family:var(--font-retro);color:var(--text-primary);font-size:1.2rem;line-height:1.4}.code-block{background:#0d1117;overflow:hidden}.code-label{font-family:var(--font-pixel);background:color-mix(in srgb, var(--teal) 12%, transparent);color:var(--teal);text-transform:uppercase;border-bottom:2px solid var(--frame-lo);padding:.6rem 1rem;font-size:.65rem;line-height:1.8}.code-block pre{padding:1rem 1.25rem;overflow-x:auto}.code-block code{font-family:var(--font-mono);color:#c9d1d9;white-space:pre;font-size:.88rem;line-height:1.7}.feedback-box{flex-direction:column;gap:.75rem;padding:1rem 1.25rem;display:flex}.feedback-correct{background:color-mix(in srgb, var(--green) 12%, var(--bg-card));border-color:var(--green-dark);animation:.18s steps(3,end) both feedbackPop,.2s steps(2,end) feedbackFlash}@keyframes feedbackPop{0%{transform:scale(.85)}to{transform:scale(1)}}@keyframes feedbackFlash{0%,to{filter:brightness()}50%{filter:brightness(1.6)}}.feedback-wrong{background:color-mix(in srgb, var(--coral) 12%, var(--bg-card));border-color:var(--coral-dark);animation:.3s steps(5,end) feedbackShake}@keyframes feedbackShake{0%{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}to{transform:translate(0)}}@media (prefers-reduced-motion:reduce){.feedback-correct,.feedback-wrong{animation:none}}.feedback-icon{font-family:var(--font-pixel);font-size:.7rem;line-height:1.6}.feedback-correct .feedback-icon{color:var(--green)}.feedback-wrong .feedback-icon{color:var(--red)}.feedback-text{font-family:var(--font-retro);color:var(--text-primary);font-size:1.15rem;line-height:1.4}.results-screen{text-align:center;flex-direction:column;align-items:center;gap:1.5rem;padding:2rem 0;display:flex}.results-title{font-family:var(--font-pixel);color:var(--amber);font-size:1.15rem;line-height:1.8}.results-zone{font-family:var(--font-retro);color:var(--text-secondary);font-size:1.15rem}.results-grid{grid-template-columns:repeat(2,1fr);gap:1rem;width:100%;max-width:480px;display:grid}.result-card{background:var(--bg-card);padding:1.25rem}.result-value{font-family:var(--font-pixel);color:var(--teal);text-shadow:2px 2px 0 var(--purple-dark);font-size:1.3rem;line-height:1.6}.result-label{font-family:var(--font-retro);color:var(--text-secondary);margin-top:.35rem;font-size:1rem}.loot-section{width:100%;max-width:480px}.loot-title{font-family:var(--font-pixel);color:var(--amber);margin-bottom:.9rem;font-size:.75rem;line-height:1.6}.loot-grid{flex-wrap:wrap;justify-content:center;gap:.75rem;display:flex}.loot-item{font-family:var(--font-pixel);background:var(--bg-card);border:2px solid var(--amber);box-shadow:inset 0 0 0 2px var(--frame-hi), var(--pixel-shadow);color:var(--amber);padding:.7rem 1.1rem;font-size:.65rem;line-height:1.5;animation:.4s cubic-bezier(.175,.885,.32,1.275) popIn}@keyframes popIn{0%{opacity:0;transform:scale(.5)}80%{transform:scale(1.08)}to{opacity:1;transform:scale(1)}}.perfect-badge{font-family:var(--font-pixel);background:var(--amber);color:var(--bg-primary);border:2px solid var(--frame-lo);box-shadow:inset 0 0 0 2px var(--frame-hi), var(--pixel-shadow);padding:.8rem 1.8rem;font-size:.85rem;line-height:1.6;animation:.5s cubic-bezier(.175,.885,.32,1.275) popIn}.challenge-screen-loading{font-family:var(--font-retro);color:var(--text-secondary);justify-content:center;align-items:center;gap:.75rem;padding:3rem 1rem;font-size:1.2rem;display:flex}.challenge-screen{flex-direction:column;gap:1.25rem;display:flex}.enemy-header{flex-direction:column;gap:.75rem;display:flex}.enemy-header-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.zone-badge{font-family:var(--font-pixel);font-size:.7rem;line-height:1.6}.mission-progress{font-family:var(--font-retro);color:var(--text-secondary);font-size:1.05rem}.enemy-card{background:var(--bg-card);align-items:center;gap:1rem;padding:1rem 1.25rem;display:flex}.enemy-card-defeated{animation:.5s steps(2,end) 3 enemyDefeatBlink}@keyframes enemyDefeatBlink{0%,to{opacity:1}50%{opacity:.15}}@media (prefers-reduced-motion:reduce){.enemy-card-defeated{animation:none}}.enemy-icon{background:var(--bg-raised);border:2px solid var(--frame-lo);width:4rem;height:4rem;box-shadow:inset 0 0 0 2px var(--frame-hi);flex-shrink:0;justify-content:center;align-items:center;font-size:2.4rem;display:flex}.enemy-info{flex-direction:column;flex:1;gap:.4rem;display:flex}.enemy-name{font-family:var(--font-pixel);font-size:.8rem;line-height:1.6}.enemy-hp-track{gap:3px;height:16px;padding:2px;display:flex}.enemy-hp-segment{flex:1;height:100%}.enemy-hp-segment-filled{background:var(--coral)}.enemy-hp-segment-empty{background:var(--bg-secondary);animation:.16s steps(2,end) forwards hpSegmentEmpty}@keyframes hpSegmentEmpty{0%{background:var(--coral)}50%{background:var(--frame-hi)}to{background:var(--bg-secondary)}}@media (prefers-reduced-motion:reduce){.enemy-hp-segment-empty{animation:none}}.enemy-hp-label{font-family:var(--font-retro);color:var(--text-secondary);font-size:1rem}.code-editor{z-index:60;background:#0d1117;position:relative;overflow:hidden}.code-editor .cm-editor{font-size:.88rem}.code-editor .cm-editor.cm-focused{outline:none}.test-cases-panel{background:var(--bg-card);overflow:hidden}.test-cases-list{flex-direction:column;list-style:none;display:flex}.test-case-item{border-top:2px solid var(--frame-lo);font-family:var(--font-retro);color:var(--text-secondary);align-items:baseline;gap:.5rem;padding:.65rem 1.1rem;font-size:1rem;display:flex}.test-case-icon{flex-shrink:0}.test-case-hidden{opacity:.7;font-style:italic}.test-case-diff code{font-family:var(--font-mono);background:color-mix(in srgb, var(--text-primary) 8%, transparent);padding:.05rem .3rem}.test-case-pass{color:var(--green)}.test-case-fail{color:var(--coral)}.hint-box{background:color-mix(in srgb, var(--teal) 10%, var(--bg-card));border-color:var(--teal-dark);font-family:var(--font-retro);color:var(--text-primary);padding:.75rem 1rem;font-size:1.1rem;line-height:1.4}.spell-bar{background:var(--bg-card);overflow:hidden}.spell-buttons{flex-wrap:wrap;gap:.5rem;padding:.75rem 1rem;display:flex}.spell-btn{font-family:var(--font-pixel);background:var(--bg-raised);border:2px solid var(--purple);box-shadow:var(--pixel-shadow);color:var(--text-primary);cursor:pointer;padding:.5rem .8rem;font-size:.65rem;line-height:1.5;transition:transform 50ms step-end,opacity .1s steps(2,end),box-shadow 50ms step-end}.spell-btn:hover:not(:disabled){transform:translate(-1px,-1px)}.spell-btn:active:not(:disabled){box-shadow:0 0 0 0 var(--frame-lo);transform:translate(4px,4px)}.spell-btn:disabled{opacity:.45;cursor:not-allowed}.feedback-flawless{font-family:var(--font-pixel);color:var(--gold);font-size:.7rem;line-height:1.6}.action-button{width:100%}.action-button:disabled{opacity:.6;cursor:not-allowed;transform:none}.feedback-running{background:var(--bg-card);border-color:var(--teal-dark)}.feedback-running .feedback-icon{color:var(--teal);align-items:center;gap:.6rem;display:flex}.feedback-error{background:color-mix(in srgb, var(--coral) 12%, var(--bg-card));border-color:var(--coral-dark)}.feedback-error .feedback-icon{color:var(--red)}.feedback-timeout{background:color-mix(in srgb, var(--amber) 12%, var(--bg-card));border-color:var(--amber-dark)}.feedback-timeout .feedback-icon{color:var(--amber)}.spinner{border:2px solid color-mix(in srgb, var(--teal) 30%, transparent);border-top-color:var(--teal);border-radius:50%;width:14px;height:14px;animation:.7s steps(8,end) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.crt-overlay{z-index:50;pointer-events:none;background:repeating-linear-gradient(#0000000a 0 1px,#0000 1px 3px),radial-gradient(#0000 60%,#00000059 100%);position:fixed;inset:0}@media (prefers-reduced-motion:reduce){.crt-overlay{display:none}}@media (width<=500px){.zones-grid{grid-template-columns:1fr 1fr}.title-heading{font-size:1.3rem}}
