:root{--bg-deep: #020818;--bg-mid: #0a0e24;--bg-panel: rgba(6, 10, 30, .92);--bg-panel-solid: #080c22;--border-pixel: #1e2848;--border-pixel-light: #344070;--border-glow: rgba(23, 165, 200, .2);--text-primary: #d8e4f0;--text-secondary: #8ea0b8;--text-dim: #506480;--approach: #e8a317;--approach-dim: rgba(232, 163, 23, .12);--observe: #17a5c8;--observe-dim: rgba(23, 165, 200, .12);--ground: #2db87a;--ground-dim: rgba(45, 184, 122, .12);--accent-glow: rgba(23, 165, 200, .35);--accent-glow-strong: rgba(23, 165, 200, .6);--threat-low: #2db87a;--threat-mid: #e8c832;--threat-high: #d94040;--crisis: #ef6b6b;--crisis-bg: rgba(239, 107, 107, .08);--pixel-font: "Press Start 2P", monospace;--body-font: "Spectral", Georgia, serif;--transition-battle: .8s cubic-bezier(.25, .46, .45, .94)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--body-font);background:var(--bg-deep);color:var(--text-primary);min-height:100vh;overflow:hidden}#root{min-height:100vh}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}button:focus-visible{outline:2px solid var(--observe);outline-offset:2px}.app{position:relative;width:100vw;height:100vh;overflow:hidden;background:radial-gradient(ellipse at 50% 40%,#15122a 0%,var(--bg-deep) 70%)}.app--loading{display:flex;align-items:center;justify-content:center}.app-loading-text{font-family:var(--body-font);color:var(--text-secondary);font-size:1.1rem}.auth-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:2rem;position:relative;z-index:1}.auth-card{width:100%;max-width:420px;padding:28px 24px}.auth-card__title{font-size:clamp(.85rem,2.5vw,1rem);text-align:center;margin-bottom:.35rem}.auth-card__subtitle{font-family:var(--body-font);font-size:.95rem;color:var(--text-secondary);text-align:center;margin-bottom:1.25rem}.auth-card__oauth{display:flex;flex-direction:column;gap:8px}.auth-card__oauth-btn{font-family:var(--body-font);font-size:.95rem;padding:12px 16px;border:1px solid var(--border-pixel);background:#141228bf;color:var(--text-primary);transition:border-color .15s ease,background .15s ease}.auth-card__oauth-btn:hover:not(:disabled){border-color:var(--border-pixel-light);background:#2823468c}.auth-card__oauth-btn:disabled{opacity:.5;cursor:not-allowed}.auth-card__divider{display:flex;align-items:center;gap:12px;margin:1rem 0;font-family:var(--body-font);font-size:.8rem;color:var(--text-dim)}.auth-card__divider:before,.auth-card__divider:after{content:"";flex:1;height:1px;background:var(--border-pixel)}.auth-card__form{display:flex;flex-direction:column;gap:10px}.auth-card__label{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-dim);letter-spacing:1px;text-transform:uppercase}.auth-card__input{font-family:var(--body-font);font-size:1rem;padding:10px 12px;border:1px solid var(--border-pixel);background:#07060e99;color:var(--text-primary)}.auth-card__input:focus{outline:none;border-color:var(--observe)}.auth-card__submit{font-family:var(--pixel-font);font-size:.55rem;margin-top:6px;padding:12px 20px;border:2px solid var(--border-pixel-light);background:#3c326440;color:var(--text-primary);letter-spacing:1px;transition:border-color .15s ease,box-shadow .15s ease}.auth-card__submit:hover:not(:disabled){border-color:var(--observe);box-shadow:0 0 16px #17a5c81f}.auth-card__submit:disabled{opacity:.5;cursor:not-allowed}.auth-card__link{font-family:var(--body-font);font-size:.88rem;color:var(--observe);text-decoration:underline;text-underline-offset:3px;padding:4px 0;align-self:flex-start}.auth-card__link:hover{color:var(--text-primary)}.auth-card__error{font-family:var(--body-font);font-size:.88rem;color:var(--crisis);line-height:1.4}.auth-card__msg{font-family:var(--body-font);font-size:.88rem;color:var(--ground);line-height:1.4}.auth-card__warn{font-family:var(--body-font);font-size:.82rem;color:var(--threat-mid);margin-bottom:.75rem}.auth-card__hint{font-family:var(--body-font);font-size:.92rem;color:var(--text-secondary);line-height:1.5;margin-bottom:4px}.app:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.04) 2px,rgba(0,0,0,.04) 4px);pointer-events:none;z-index:100}.pixel-panel{background:var(--bg-panel);border:2px solid var(--border-pixel);box-shadow:inset 0 0 0 1px var(--border-glow),0 2px 12px #0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.screen-enter{animation:screenFadeIn .5s ease-out both}@keyframes screenFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.pixel-text{font-family:var(--pixel-font);letter-spacing:.5px}.narrative-text{font-family:var(--body-font);font-size:1.05rem;line-height:1.7;color:var(--text-primary)}.title-screen{position:relative;width:100%;height:100vh;overflow:hidden}.title-screen__session{position:absolute;top:1rem;right:1rem;z-index:3;display:flex;align-items:center;gap:12px;padding:8px 12px;max-width:min(96vw,420px)}.title-screen__session-email{font-family:var(--body-font);font-size:.82rem;color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.title-screen__sign-out{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-secondary);padding:6px 10px;border:1px solid var(--border-pixel);background:#14122880;letter-spacing:.5px;flex-shrink:0}.title-screen__sign-out:hover{border-color:var(--border-pixel-light);color:var(--text-primary)}.title-screen__bg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center 30%;-webkit-user-select:none;user-select:none;pointer-events:none;z-index:0}.title-screen__scrim{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;background:linear-gradient(to bottom,transparent 30%,rgba(2,8,24,.55) 55%,rgba(2,8,24,.88) 75%,rgba(2,8,24,.96) 100%)}.title-screen__overlay{position:absolute;bottom:0;left:0;right:0;z-index:2;display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 2rem 2.5rem;animation:screenFadeIn 1s ease-out .3s both}.title-screen__tagline{font-family:var(--body-font);font-size:.95rem;font-style:italic;color:#c8d7ebbf;margin:0 0 1rem;max-width:700px;line-height:1.4;text-shadow:0 1px 8px rgba(0,0,0,.6);white-space:nowrap}.title-screen__start{font-family:var(--pixel-font);font-size:.8rem;color:#e0ecf8;padding:16px 44px;border:2px solid rgba(23,165,200,.45);background:#0a1e3c80;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:all .25s ease;letter-spacing:2px;position:relative;overflow:hidden;box-shadow:0 0 18px #17a5c826,inset 0 0 12px #17a5c80f}.title-screen__start:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,transparent 30%,rgba(23,165,200,.15) 100%);opacity:0;transition:opacity .25s}.title-screen__start:hover{border-color:#17a5c8cc;box-shadow:0 0 32px #17a5c859,inset 0 0 16px #17a5c81a;transform:translateY(-2px);color:#fff}.title-screen__start:hover:before{opacity:1}.title-screen__start:active{transform:translateY(0)}.title-screen__session-xp{font-size:.42rem;color:var(--observe);letter-spacing:1px;flex-shrink:0}.title-screen__calendar{font-family:var(--pixel-font);font-size:.55rem;color:var(--text-secondary);margin-top:1rem;padding:10px 28px;border:1px solid rgba(124,106,247,.4);background:#1e183c59;letter-spacing:1px;transition:all .2s ease}.title-screen__calendar:hover{border-color:#7c6af7bf;color:var(--text-primary)}.title-screen__disclaimer{margin-top:1.8rem;padding:10px 20px;max-width:520px;font-size:.72rem;color:#788caab3;border-top:1px solid rgba(40,60,90,.4);line-height:1.6}.intake-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;padding:2rem}.intake-card{max-width:560px;width:100%;animation:screenFadeIn .4s ease-out both}.intake-card__step{font-family:var(--pixel-font);font-size:.55rem;color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;margin-bottom:1.5rem}.intake-card__question{font-family:var(--body-font);font-size:1.4rem;font-weight:600;color:var(--text-primary);margin-bottom:2rem;line-height:1.5}.intake-card__options{display:flex;flex-direction:column;gap:10px}.intake-option{display:block;width:100%;text-align:left;padding:14px 20px;font-family:var(--body-font);font-size:1.05rem;color:var(--text-primary);border:1px solid var(--border-pixel);background:#14122899;transition:all .15s ease}.intake-option:hover{border-color:var(--border-pixel-light);background:#28234680;transform:translate(4px)}.intake-option:active{background:#3c326466}.battle-screen{display:grid;grid-template-columns:minmax(320px,42%) 1fr;grid-template-rows:auto 1fr auto;grid-template-areas:"hud      log" "stage    stage" "note     actions";height:100vh;padding:10px;gap:8px;animation:screenFadeIn .6s ease-out both}.enemy-hud{grid-area:hud;padding:14px 16px;display:flex;flex-direction:column;gap:10px;z-index:3}.enemy-hud__header{display:flex;align-items:baseline;justify-content:space-between}.enemy-hud__name{font-family:var(--pixel-font);font-size:.65rem;color:var(--text-primary);letter-spacing:.5px}.enemy-hud__name span{color:var(--text-dim);margin-left:8px;font-size:.55rem}.enemy-hud__beat{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-dim);letter-spacing:1px}.threat-meter{width:100%;height:14px;background:#00000080;border:1px solid var(--border-pixel);position:relative;overflow:hidden}.threat-meter__fill{height:100%;transition:width var(--transition-battle),background-color var(--transition-battle);position:relative}.threat-meter__fill:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.12) 50%,transparent 100%);animation:meterShine 2s ease-in-out infinite}.threat-meter__label{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-dim);margin-top:4px;letter-spacing:1px}.battle-log{grid-area:log;padding:14px 16px;overflow-y:auto;max-height:170px;z-index:3}.battle-log__title{font-family:var(--pixel-font);font-size:.5rem;color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;margin-bottom:10px}.battle-log__entry{font-family:var(--body-font);font-size:.92rem;line-height:1.6;color:var(--text-secondary);margin-bottom:10px;padding-left:10px;border-left:2px solid var(--border-pixel)}.battle-log__entry:last-child{color:var(--text-primary);border-left-color:var(--border-pixel-light)}.battle-log::-webkit-scrollbar{width:4px}.battle-log::-webkit-scrollbar-track{background:transparent}.battle-log::-webkit-scrollbar-thumb{background:var(--border-pixel);border-radius:2px}.battle-stage{grid-area:stage;position:relative;overflow:hidden;background:linear-gradient(180deg,#09081a,#100e25,#161433);border:2px solid var(--border-pixel);z-index:2;min-height:280px}.battle-stage:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at 50% 50%,transparent 50%,rgba(7,6,14,.4) 100%);pointer-events:none;z-index:4}.battle-stage__ground{position:absolute;bottom:0;left:0;right:0;height:35%;background:linear-gradient(180deg,transparent 0%,rgba(18,16,32,.8) 40%,#0e0c1e 100%);pointer-events:none}.battle-stage__ground:before{content:"";position:absolute;top:40%;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent,rgba(74,70,114,.3),transparent)}.battle-stage__ground:after{content:"";position:absolute;bottom:15%;left:5%;right:5%;height:1px;background:linear-gradient(90deg,transparent,rgba(40,70,110,.25),transparent)}.battle-stage__fog-1,.battle-stage__fog-2,.battle-stage__fog-3{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.battle-stage__fog-1{background:radial-gradient(ellipse at 65% 55%,rgba(15,60,120,.14) 0%,transparent 55%);animation:fogDriftA 10s ease-in-out infinite}.battle-stage__fog-2{background:radial-gradient(ellipse at 35% 45%,rgba(20,80,130,.1) 0%,transparent 50%);animation:fogDriftB 14s ease-in-out infinite}.battle-stage__fog-3{background:radial-gradient(ellipse at 50% 60%,rgba(8,25,55,.18) 0%,transparent 40%);animation:fogDriftC 18s ease-in-out infinite}.battle-stage__player{position:absolute;bottom:20%;left:12%;transition:transform var(--transition-battle),left var(--transition-battle);z-index:2}.battle-stage__drake{position:absolute;bottom:15%;right:10%;transition:transform var(--transition-battle),opacity var(--transition-battle);z-index:2}.battle-stage__flash{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;opacity:0;z-index:3}.battle-stage__flash--approach{background:radial-gradient(circle at 35% 50%,rgba(232,163,23,.2) 0%,transparent 50%);animation:flashPulse .6s ease-out}.battle-stage__flash--observe{background:radial-gradient(circle at 50% 50%,rgba(23,165,200,.15) 0%,transparent 60%);animation:flashPulse .6s ease-out}.battle-stage__flash--ground{background:radial-gradient(circle at 30% 80%,rgba(45,184,122,.18) 0%,transparent 50%);animation:flashPulse .6s ease-out}.field-note{grid-area:note;padding:16px;display:flex;flex-direction:column;justify-content:center;z-index:3}.field-note__label{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;margin-bottom:8px}.field-note__text{font-family:var(--body-font);font-size:.95rem;font-style:italic;color:var(--text-secondary);line-height:1.6}.action-menu{grid-area:actions;display:flex;flex-direction:column;gap:6px;padding:12px;z-index:6}.action-menu__label{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;margin-bottom:4px}.action-card{display:flex;align-items:center;gap:14px;padding:12px 16px;border:2px solid;background:var(--bg-panel);transition:all .15s ease;position:relative;overflow:hidden;z-index:6}.action-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;transition:width .15s ease}.action-card--approach{border-color:#e8a3174d}.action-card--approach:before{background:var(--approach)}.action-card--approach:hover{border-color:var(--approach);background:var(--approach-dim);box-shadow:0 0 20px #e8a3171f}.action-card--observe{border-color:#17a5c84d}.action-card--observe:before{background:var(--observe)}.action-card--observe:hover{border-color:var(--observe);background:var(--observe-dim);box-shadow:0 0 20px #17a5c81f}.action-card--ground{border-color:#2db87a4d}.action-card--ground:before{background:var(--ground)}.action-card--ground:hover{border-color:var(--ground);background:var(--ground-dim);box-shadow:0 0 20px #2db87a1f}.action-card:hover{transform:translate(4px)}.action-card:hover:before{width:5px}.action-card:active{transform:translate(2px)}.action-card:disabled{opacity:.35;pointer-events:none;filter:grayscale(.4)}.action-card__type{font-family:var(--pixel-font);font-size:.5rem;letter-spacing:1px;flex-shrink:0;width:72px}.action-card--approach .action-card__type{color:var(--approach)}.action-card--observe .action-card__type{color:var(--observe)}.action-card--ground .action-card__type{color:var(--ground)}.action-card__info{display:flex;flex-direction:column;gap:2px;min-width:0}.action-card__name{font-family:var(--body-font);font-size:1rem;font-weight:600;color:var(--text-primary)}.action-card__desc{font-family:var(--body-font);font-size:.82rem;color:var(--text-dim)}.action-card--enter{animation:cardSlideIn .35s ease-out both}.action-card--enter:nth-child(2){animation-delay:.06s}.action-card--enter:nth-child(3){animation-delay:.12s}.action-card--enter:nth-child(4){animation-delay:.18s}.debrief-screen{display:flex;align-items:center;justify-content:center;height:100vh;padding:2rem}.debrief-card{max-width:640px;width:100%;padding:32px;animation:screenFadeIn .6s ease-out both}.debrief-card__header{font-family:var(--pixel-font);font-size:.55rem;color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;margin-bottom:1rem}.debrief-card__xp{font-family:var(--pixel-font);font-size:.55rem;color:var(--observe);margin-top:4px;letter-spacing:1px}.debrief-card__xp-sub{font-family:var(--body-font);font-size:.75rem;color:var(--text-dim);margin-top:6px}.debrief-card__technique{font-family:var(--pixel-font);font-size:.7rem;line-height:1.8;margin-bottom:1.2rem}.debrief-card__technique--approach{color:var(--approach)}.debrief-card__technique--observe{color:var(--observe)}.debrief-card__technique--ground{color:var(--ground)}.debrief-card__technique--mixed{color:var(--text-primary)}.debrief-card__explanation{font-family:var(--body-font);font-size:1.05rem;line-height:1.7;color:var(--text-primary);margin-bottom:1.5rem}.debrief-card__micro{padding:16px;background:#17a5c80f;border:1px solid rgba(23,165,200,.2);margin-bottom:1rem}.debrief-card__micro-label{font-family:var(--pixel-font);font-size:.45rem;color:var(--observe);letter-spacing:2px;text-transform:uppercase;margin-bottom:8px}.debrief-card__micro-text{font-family:var(--body-font);font-size:1rem;line-height:1.7;color:var(--text-primary)}.debrief-card__source{font-size:.8rem;color:var(--text-dim);font-style:italic;margin-bottom:1.5rem}.debrief-card__actions{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.debrief-card__restart{font-family:var(--pixel-font);font-size:.6rem;color:var(--text-primary);padding:10px 24px;border:2px solid var(--border-pixel-light);background:#3c326433;transition:all .15s ease;letter-spacing:1px}.debrief-card__restart:hover{border-color:var(--observe);box-shadow:0 0 16px #17a5c826}.debrief-card__disclaimer{font-size:.78rem;color:var(--text-dim);line-height:1.5}.crisis-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#07060ef2;display:flex;align-items:center;justify-content:center;z-index:50;animation:screenFadeIn .3s ease-out;padding:2rem}.crisis-card{max-width:540px;width:100%;padding:32px;border-color:var(--crisis);text-align:center}.crisis-card__title{font-family:var(--pixel-font);font-size:.8rem;color:var(--crisis);margin-bottom:1.2rem;letter-spacing:1px}.crisis-card__message{font-family:var(--body-font);font-size:1.1rem;color:var(--text-primary);line-height:1.7;margin-bottom:1.5rem}.crisis-card__resources{display:flex;flex-direction:column;gap:12px;margin-bottom:1.5rem}.crisis-resource{padding:14px 16px;border:1px solid rgba(239,107,107,.25);background:var(--crisis-bg);text-align:left}.crisis-resource__name{font-family:var(--pixel-font);font-size:.5rem;color:var(--crisis);letter-spacing:1px;margin-bottom:4px}.crisis-resource__action{font-family:var(--body-font);font-size:1.1rem;font-weight:700;color:var(--text-primary)}.crisis-resource__available{font-size:.82rem;color:var(--text-dim);margin-top:2px}.crisis-card__footer{font-size:.82rem;color:var(--text-dim);line-height:1.5;margin-bottom:1.2rem}.crisis-card__continue{font-family:var(--pixel-font);font-size:.55rem;color:var(--text-secondary);padding:10px 20px;border:1px solid var(--border-pixel);transition:all .15s ease;letter-spacing:1px}.crisis-card__continue:hover{border-color:var(--border-pixel-light);color:var(--text-primary)}.player-sprite{width:166px;height:166px;overflow:hidden;background-image:url(/knight-dark.png);background-repeat:no-repeat;background-size:300% 300%;background-position:0 0;image-rendering:pixelated;animation:darkKnightFrames 1.2s steps(1) infinite,idleFloat 3s ease-in-out infinite}.player-sprite--approach{animation:darkKnightFrames 1.2s steps(1) infinite,idleFloat 3s ease-in-out infinite,approachGlow .6s ease-out}.player-sprite--observe{animation:darkKnightFrames 1.2s steps(1) infinite,idleFloat 3s ease-in-out infinite,observeGlow .6s ease-out}.player-sprite--ground{animation:darkKnightFrames 1.2s steps(1) infinite,idleFloat 3s ease-in-out infinite,groundGlow .8s ease-out}@keyframes darkKnightFrames{0%{background-position:0 0}12.5%{background-position:-166px 0}25%{background-position:-332px 0}37.5%{background-position:0 -166px}50%{background-position:-166px -166px}62.5%{background-position:-332px -166px}75%{background-position:0 -332px}87.5%{background-position:-166px -332px}}.drake-sprite{width:180px;height:140px;animation:drakePulse 4s ease-in-out infinite}.drake-sprite--defeated{animation:drakeDefeat 1.2s ease-out both}.drake-sprite--fog{width:135px;height:160px;background-image:url(/drake-fog.png);background-repeat:no-repeat;background-size:300% auto;background-position:0 0;image-rendering:pixelated;position:relative;bottom:35px;animation:drakeFogFrames .65s steps(3) infinite}.drake-sprite--fog.drake-sprite--defeated{animation:drakeFogFrames .65s steps(3) infinite,drakeDefeat 1.2s ease-out both}@keyframes drakeFogFrames{to{background-position-x:-405px}}.drake-sprite--static{width:128px;height:209px;background-image:url(/monster-static.png);background-repeat:no-repeat;background-size:300% auto;background-position:0 0;image-rendering:pixelated;position:relative;bottom:10px;animation:staticMonsterFrames .6s steps(3) infinite}.drake-sprite--static.drake-sprite--defeated{animation:staticMonsterFrames .6s steps(3) infinite,drakeDefeat 1.2s ease-out both}@keyframes staticMonsterFrames{to{background-position-x:-384px}}.drake-sprite--vortex{width:128px;height:209px;background-image:url(/monster-vortex.png);background-repeat:no-repeat;background-size:300% auto;background-position:0 0;image-rendering:pixelated;position:relative;bottom:10px;animation:vortexMonsterFrames .6s steps(3) infinite}.drake-sprite--vortex.drake-sprite--defeated{animation:vortexMonsterFrames .6s steps(3) infinite,drakeDefeat 1.2s ease-out both}@keyframes vortexMonsterFrames{to{background-position-x:-384px}}.drake-sprite--mirror{width:128px;height:209px;background-image:url(/monster-mirror.png);background-repeat:no-repeat;background-size:300% auto;background-position:0 0;image-rendering:pixelated;position:relative;bottom:10px;animation:mirrorMonsterFrames .6s steps(3) infinite}.drake-sprite--mirror.drake-sprite--defeated{animation:mirrorMonsterFrames .6s steps(3) infinite,drakeDefeat 1.2s ease-out both}@keyframes mirrorMonsterFrames{to{background-position-x:-384px}}@keyframes fogDriftA{0%,to{transform:translate(-3%)}50%{transform:translate(3%,-2%)}}@keyframes fogDriftB{0%,to{transform:translate(2%,1%)}50%{transform:translate(-4%,-1%)}}@keyframes fogDriftC{0%,to{transform:translateY(2%)}50%{transform:translate(-2%,-2%)}}@keyframes idleFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes drakePulse{0%,to{transform:scale(1) translateY(0);filter:brightness(1)}50%{transform:scale(1.02) translateY(-2px);filter:brightness(1.05)}}@keyframes drakeDefeat{0%{opacity:1;transform:scale(1);filter:blur(0)}to{opacity:0;transform:scale(.7);filter:blur(8px)}}@keyframes flashPulse{0%{opacity:.8}to{opacity:0}}@keyframes cardSlideIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes meterShine{0%,to{transform:translate(-100%)}50%{transform:translate(100%)}}@keyframes approachGlow{0%{filter:brightness(1) drop-shadow(0 0 0 transparent)}30%{filter:brightness(1.4) drop-shadow(0 0 12px rgba(232,163,23,.5))}to{filter:brightness(1) drop-shadow(0 0 0 transparent)}}@keyframes observeGlow{0%{filter:brightness(1) drop-shadow(0 0 0 transparent)}30%{filter:brightness(1.3) drop-shadow(0 0 14px rgba(23,165,200,.5))}to{filter:brightness(1) drop-shadow(0 0 0 transparent)}}@keyframes groundGlow{0%{filter:brightness(1) drop-shadow(0 0 0 transparent)}40%{filter:brightness(1.2) drop-shadow(0 0 16px rgba(45,184,122,.5))}to{filter:brightness(1) drop-shadow(0 0 0 transparent)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media(max-width:960px){.app:before{content:"QuestMind Battle is designed for desktop. Please use a screen at least 960px wide.";position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:var(--bg-deep);color:var(--text-secondary);font-family:var(--body-font);font-size:1.1rem;text-align:center;padding:2rem;z-index:200;line-height:1.6}}@media(min-height:800px){.battle-stage{min-height:340px}}@media(min-height:900px){.battle-log{max-height:200px}}.quest-intro-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;padding:2rem;text-align:center}.quest-intro__domain{font-size:.45rem;color:var(--text-dim);letter-spacing:3px;text-transform:uppercase;margin-bottom:1.5rem}.quest-intro__name{font-family:var(--pixel-font);font-size:clamp(.8rem,2vw,1.2rem);color:var(--text-primary);padding:12px 28px;text-shadow:0 0 20px rgba(23,165,200,.3);margin-bottom:.5rem}.quest-intro__level{font-size:.5rem;color:var(--text-dim);letter-spacing:2px;margin-bottom:2rem}.quest-intro__lore{font-family:var(--body-font);font-size:1.1rem;line-height:1.7;color:var(--text-secondary);max-width:560px;margin-bottom:2.5rem;font-style:italic}.btn-primary{font-family:var(--pixel-font);font-size:.65rem;color:var(--text-primary);padding:12px 32px;border:2px solid var(--border-pixel-light);background:#3c326440;transition:all .2s ease;letter-spacing:1px}.btn-primary:hover{border-color:var(--observe);box-shadow:0 0 20px #17a5c833;transform:translateY(-1px)}.btn-primary:active{transform:translateY(0)}.dev-shortcuts{display:flex;align-items:center;gap:.5rem;margin-top:1.2rem;flex-wrap:wrap;justify-content:center}.dev-toggle-btn{font-family:var(--pixel-font);font-size:.4rem;background:transparent;border:1px solid rgba(255,255,255,.1);color:var(--text-dim);padding:4px 10px;cursor:pointer;opacity:.4;transition:all .15s ease}.dev-toggle-btn:hover{opacity:.7;border-color:#ffffff4d}.dev-shortcut-btn{font-family:var(--pixel-font);font-size:.45rem;background:transparent;border:1px solid rgba(255,255,255,.15);color:var(--text-dim);padding:4px 10px;cursor:pointer;letter-spacing:.05em;text-transform:uppercase;transition:all .15s ease}.dev-shortcut-btn:hover{border-color:#fff6;color:var(--text-primary)}.action-area{grid-area:actions;position:relative}.technique-toast{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);font-family:var(--body-font);font-size:.82rem;font-style:italic;color:var(--text-secondary);padding:6px 14px;white-space:nowrap;max-width:100%;text-align:center;pointer-events:none;z-index:10;animation:toastFade 1.4s ease-out both}@keyframes toastFade{0%{opacity:0;transform:translate(-50%) translateY(4px)}12%{opacity:1;transform:translate(-50%) translateY(0)}70%{opacity:1}to{opacity:0}}.moves-recap{margin-top:1.5rem;margin-bottom:1.5rem;padding:1rem}.moves-recap__title{font-family:var(--pixel-font);font-size:.5rem;letter-spacing:.15em;text-transform:uppercase;margin-bottom:.75rem;color:var(--text-dim)}.moves-recap__row{display:grid;grid-template-columns:3.5rem 1fr auto;gap:.5rem;align-items:start;padding:.5rem 0;border-top:1px solid rgba(255,255,255,.06);font-family:var(--body-font);font-size:.85rem}.moves-recap__beat{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-dim);padding-top:2px}.moves-recap__action{color:var(--text-primary)}.moves-recap__verdict{font-weight:700;font-size:1rem}.moves-recap__row--wrong .moves-recap__verdict{color:#d94040}.moves-recap__row--correct .moves-recap__verdict{color:#2db87a}.moves-recap__note{grid-column:2 / -1;font-size:.78rem;color:var(--text-dim);font-style:italic;margin-top:.15rem;line-height:1.5}.debrief-card{max-height:90vh;overflow-y:auto}.calendar-screen{min-height:100vh;padding:1.5rem 2rem 3rem;max-width:900px;margin:0 auto}.calendar-screen__header{display:grid;grid-template-columns:auto 1fr auto;gap:1rem;align-items:start;padding:1rem 1.25rem;margin-bottom:1rem}.calendar-screen__back{font-family:var(--pixel-font);font-size:.45rem;color:var(--text-secondary);padding:8px 12px;border:1px solid var(--border-pixel);background:#14122866}.calendar-screen__back:hover{border-color:var(--border-pixel-light);color:var(--text-primary)}.calendar-screen__title{font-size:.75rem;margin:0 0 .5rem}.calendar-screen__subtitle{font-family:var(--body-font);font-size:.88rem;color:var(--text-dim);line-height:1.55;margin:0}.calendar-screen__xp{font-size:.42rem;color:var(--observe);white-space:nowrap}.calendar-screen__toolbar{display:flex;flex-wrap:wrap;gap:10px;padding:12px 16px;margin-bottom:.75rem}.calendar-screen__msg,.calendar-screen__error{font-size:.88rem;margin:0 0 .75rem;color:var(--text-dim)}.calendar-screen__error{color:#d94040}.btn-secondary{font-family:var(--pixel-font);font-size:.48rem;color:var(--text-secondary);padding:8px 16px;border:1px solid var(--border-pixel);background:#14122859;letter-spacing:.5px}.btn-secondary:hover{border-color:var(--border-pixel-light);color:var(--text-primary)}.btn-secondary--danger:hover{border-color:#d9404099;color:#ff8a8a}.calendar-tabs{display:flex;gap:8px;margin-bottom:.75rem}.calendar-tabs__btn{font-family:var(--pixel-font);font-size:.45rem;padding:8px 16px;border:1px solid var(--border-pixel);background:transparent;color:var(--text-dim)}.calendar-tabs__btn.is-active{border-color:var(--observe);color:var(--observe)}.calendar-list{list-style:none;margin:0;padding:0}.calendar-list__empty{padding:1.5rem;color:var(--text-dim);font-size:.9rem}.calendar-list__item{display:flex;justify-content:space-between;gap:1rem;padding:1rem 1.25rem;border-bottom:1px solid rgba(255,255,255,.06);align-items:flex-start}.calendar-list__item:last-child{border-bottom:none}.calendar-list__title{font-family:var(--body-font);font-size:1rem;font-weight:600;color:var(--text-primary);margin-bottom:4px}.calendar-list__time{font-size:.82rem;color:var(--text-dim)}.calendar-list__state{font-size:.75rem;color:var(--text-dim);margin-top:4px;text-transform:uppercase;letter-spacing:.06em}.calendar-list__actions{display:flex;flex-direction:column;gap:6px;flex-shrink:0}.btn-small{font-family:var(--pixel-font);font-size:.4rem;padding:6px 10px;border:1px solid var(--border-pixel-light);background:#3c326433;color:var(--text-primary);white-space:nowrap}.btn-small:hover{border-color:var(--observe)}.btn-small--battle{border-color:#e8a31773}.btn-small--battle:hover{border-color:var(--approach)}.calendar-oauth{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:2rem}.calendar-oauth__card{max-width:420px;width:100%;padding:2rem;text-align:center}.calendar-oauth__title{font-size:.65rem;margin-bottom:1rem}.calendar-oauth__status,.calendar-oauth__error{font-family:var(--body-font);font-size:.95rem;margin-bottom:1rem;color:var(--text-secondary)}.calendar-oauth__error{color:#d94040}
