:root{--paper: #efecdd;--paper-bright: #f6f0dc;--paper-deep: #e6dfce;--ink: #29277f;--ink-soft: #55559a;--ink-faint: rgba(62, 61, 113, .48);--hatch: #8788b8;--red: #c92f4f;--red-bright: #dc3d5d;--ochre: #d7a049;--mint: #77c990;--graphite: #35323f;--hand: "Chalkboard SE", "Comic Sans MS", "Bradley Hand", "Noteworthy", cursive;--line: rgba(73, 94, 157, .25);--hit-strength: 0;--scope-size: min(41vh, 46vw)}*{box-sizing:border-box}html,body{margin:0;padding:0;width:100%;height:100%;overflow:hidden;background:var(--paper);color:var(--ink);font-family:var(--hand);-webkit-font-smoothing:antialiased;user-select:none}html{cursor:default}#app{position:fixed;inset:0;overflow:hidden;background:var(--paper)}#game-root,#game-root canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}#paper-grain{position:fixed;inset:0;pointer-events:none;z-index:5;opacity:.55;mix-blend-mode:multiply;background-repeat:repeat;background-size:288px 288px}#paper-rules{position:fixed;inset:0;pointer-events:none;z-index:6;background:repeating-linear-gradient(to bottom,transparent 0,transparent 60px,rgba(57,79,144,.14) 60.2px,rgba(57,79,144,.14) 61.2px,rgba(255,255,255,.1) 61px,rgba(255,255,255,.1) 62px)}#paper-rules:before{content:"";position:absolute;top:0;bottom:0;left:7%;width:1.4px;background:#c92f4f61;box-shadow:2px 0 #c92f4f11}#paper-rules:after{content:"";position:absolute;right:2.6%;top:0;bottom:0;width:1px;background:#c92f4f13}.hidden,[hidden]{display:none!important}#reticle{position:fixed;inset:0;z-index:10;pointer-events:none}#damage-wash{position:fixed;inset:0;z-index:9;pointer-events:none;opacity:0;background:radial-gradient(circle at 50% 50%,#c92f4f00 0 150px,#c92f4f00 300px,#c92f4f0e 390px,#c92f4f38 520px,#c92f4f8f,#c92f4fd6 880px,#c92f4ff0 1120px);mix-blend-mode:multiply}#damage-wash.active{will-change:opacity}#damage-chevrons{display:none}#scope-overlay{display:none;position:fixed;inset:0;z-index:8;pointer-events:none;background:radial-gradient(circle at 50% 50%,#efecdd00 0 calc(var(--scope-size) * .485),#efecdd8f calc(var(--scope-size) * .505),#efecdda8)}#scope-overlay.active{display:block}#scope-overlay:before{content:"";position:absolute;left:50%;top:50%;width:var(--scope-size);height:var(--scope-size);transform:translate(-50%,-50%);border-radius:50%;border:3.5px solid rgba(41,39,127,.92);box-shadow:inset 0 0 0 1px #fffaea8c,0 0 0 2px #fffaea4d,0 0 25px #29277f14;background:repeating-linear-gradient(104deg,transparent 0 13px,rgba(80,89,160,.028) 13px 14px),repeating-linear-gradient(16deg,transparent 0 19px,rgba(80,89,160,.022) 19px 20px)}#scope-overlay:after{content:"";position:absolute;left:50%;top:50%;width:calc(var(--scope-size) * .94);height:2px;transform:translate(-50%,-50%);background:repeating-linear-gradient(to right,rgba(41,39,127,.88) 0 10px,transparent 10px 18px);box-shadow:0 calc(var(--scope-size) * -.33) 0 #29277f00,0 0 0 0 transparent}#scope-overlay .scope-v{position:absolute;left:50%;top:50%;height:calc(var(--scope-size) * .94);width:2px;transform:translate(-50%,-50%);background:repeating-linear-gradient(to bottom,rgba(41,39,127,.88) 0 10px,transparent 10px 18px)}#scope-overlay .scope-h{display:none}.hud{transition:opacity .18s linear;position:fixed;inset:0;z-index:20;pointer-events:none;color:var(--ink);font-family:var(--hand);font-size:clamp(12px,1.85vh,22px);line-height:1.12;letter-spacing:.012em;text-shadow:.7px .4px 0 rgba(41,39,127,.12)}.hud.hidden-hud{opacity:0}.hud-inner{position:absolute;inset:0}.hud-caps{font-size:.92em;letter-spacing:.05em}.hud-top-left{position:absolute;left:clamp(26px,8.85vw,220px);top:clamp(17px,3.15vh,40px);transform:rotate(-.5deg)}.score-line{font-size:clamp(15px,2.05vh,26px);font-weight:700;white-space:nowrap}#score-value{letter-spacing:.02em}.hud-top-right{position:absolute;right:clamp(26px,8.85vw,220px);top:clamp(16px,3.1vh,40px);text-align:right;transform:rotate(.25deg)}.wave-line{font-size:clamp(15px,2.05vh,26px);font-weight:700;letter-spacing:.055em}.enemy-line{margin-top:clamp(9px,1.7vh,20px);font-size:clamp(12px,1.72vh,22px);letter-spacing:.03em;color:var(--ink)}.hud-bottom-left{position:absolute;left:clamp(26px,8.85vw,220px);bottom:clamp(28px,4.2vh,56px);width:min(30vw,370px);transform:rotate(-.2deg)}.hp-row{display:flex;align-items:center;gap:10px;height:20px}.hp-label{font-weight:700;letter-spacing:.04em}.hp-shell{position:relative;width:clamp(150px,10.9vw,250px);height:clamp(15px,1.72vh,22px);border:2px solid var(--ink);border-radius:8px 4px 7px 5px;overflow:hidden;background:#faf6e78c;transform:skew(-1.2deg);box-shadow:1px 1px #29277f24}.hp-shell:after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(to right,transparent 0 calc(25% - 2px),rgba(41,39,127,.2) calc(25% - 2px) calc(25% - 1px));pointer-events:none}.hp-fill{height:100%;width:100%;background:repeating-linear-gradient(118deg,var(--ink) 0 3px,rgba(239,236,221,.22) 3px 6px,transparent 6px 7px);transition:width .12s linear,background .15s linear}.hp-fill.low{background:repeating-linear-gradient(118deg,var(--red) 0 3px,rgba(239,236,221,.15) 3px 6px,transparent 6px 7px)}.hp-shell.low{border-color:var(--red);animation:hp-wobble .8s steps(2,end) infinite}.hp-value{font-size:clamp(13px,1.8vh,22px);min-width:32px}.ammo-row{margin-top:clamp(8px,1.15vh,15px);margin-left:1px;display:flex;align-items:baseline;height:clamp(38px,5.7vh,70px)}.ammo-current{font-size:clamp(34px,5.45vh,68px);line-height:.92;font-weight:700;letter-spacing:-.045em;color:var(--ink);text-shadow:1.5px 1.2px 0 rgba(41,39,127,.24),-.7px .3px 0 rgba(41,39,127,.12)}.ammo-current.infinity{font-size:clamp(38px,5.6vh,72px);letter-spacing:0}.ammo-reserve{font-size:clamp(13px,1.9vh,24px);color:#29277fd4;letter-spacing:0}.tally{display:flex;align-items:flex-end;flex-wrap:wrap;gap:2.7px;max-width:min(27vw,330px);min-height:12px;margin-top:clamp(1px,.2vh,3px);margin-left:4px}.tally-mark{display:block;width:clamp(2.4px,.28vw,4px);height:clamp(8px,1.35vh,14px);background:var(--ink);border-radius:1px 2px 1px 0;transform:rotate(1deg) skew(-4deg);opacity:.88}.tally-mark.empty{opacity:.1;background:transparent;border-left:1px dashed rgba(41,39,127,.42)}.tally-gap{width:5px}.meters{display:flex;gap:11px;margin-top:13px;align-items:center}.meter{display:flex;align-items:center;gap:5px;opacity:.46;transition:opacity .15s ease}.meter.ready{opacity:.92}.meter.active{opacity:1}.meter-glyph{width:18px;height:18px;border:1.4px solid var(--ink);display:inline-flex;align-items:center;justify-content:center;font-family:var(--hand);font-size:11px;border-radius:6px 3px 7px 4px;transform:rotate(-2deg)}.meter-track{width:clamp(58px,5.5vw,120px);height:7px;border:1.3px solid rgba(41,39,127,.8);border-radius:4px 2px 3px;overflow:hidden;background:#fffae947}.meter-fill{height:100%;width:0%;background:repeating-linear-gradient(115deg,var(--ink) 0 2px,transparent 2px 4px);transition:width 70ms linear}.meter-fill.stamina{background:repeating-linear-gradient(115deg,var(--ochre) 0 2px,transparent 2px 4px)}.hud-bottom-right{position:absolute;right:clamp(26px,8.85vw,220px);bottom:clamp(58px,8.2vh,110px);width:min(24vw,320px);text-align:right;transform:rotate(.18deg)}.weapon-list{display:flex;flex-direction:column;align-items:stretch;gap:2px;margin-bottom:clamp(11px,1.6vh,20px)}.weapon-row{display:flex;align-items:center;justify-content:flex-end;gap:7px;height:clamp(18px,2.05vh,26px);font-size:clamp(12px,1.65vh,20px);color:#4b498d61;letter-spacing:.035em;transition:color 80ms linear}.weapon-row.active{color:var(--ink);border-bottom:1.5px solid rgba(41,39,127,.78)}.weapon-row.active .weapon-list-name{font-weight:700}.weapon-badge{width:clamp(15px,1.05vw,22px);height:clamp(15px,1.7vh,22px);line-height:1;display:inline-flex;align-items:center;justify-content:center;border:1.2px solid currentColor;border-radius:5px 3px 6px 4px;font-size:.73em;opacity:.7}.weapon-list-name{min-width:76px;text-align:left}.weapon-list-ammo{min-width:50px;text-align:right;font-size:.87em}.weapon-current{font-size:clamp(22px,2.95vh,38px);font-weight:700;line-height:1;letter-spacing:.035em;color:var(--ink);text-shadow:1px .7px 0 rgba(41,39,127,.2);transform:rotate(-.4deg)}.weapon-current.switch{animation:ink-arrive .22s ease-out}.weapon-hint{font-size:clamp(11px,1.55vh,18px);margin-top:5px;color:#29277fb8;letter-spacing:.005em}.context-hint{position:absolute;left:50%;bottom:clamp(78px,13.5vh,180px);transform:translate(-50%) rotate(-.2deg);font-size:clamp(11px,1.55vh,18px);color:#29277fdb;text-align:center;white-space:nowrap;opacity:.9;text-shadow:.6px .3px 0 rgba(41,39,127,.15)}.score-popups{position:absolute;right:clamp(40px,10.5vw,250px);top:34vh;display:flex;flex-direction:column;align-items:flex-end;gap:2px}.score-popup{font-size:clamp(14px,1.9vh,23px);font-weight:700;letter-spacing:.045em;color:var(--red);animation:score-float 1.12s ease-out forwards;transform-origin:right center;text-shadow:.8px .3px 0 rgba(201,47,79,.18)}.score-popup.indigo{color:var(--ink)}.lock-hint{position:absolute;left:50%;bottom:clamp(45px,8.3vh,90px);transform:translate(-50%);font-size:11px;color:#29277f6b;opacity:0;transition:opacity .2s linear;white-space:nowrap}.lock-hint.show{opacity:1}.wave-banner{position:absolute;top:17%;left:50%;transform:translate(-50%,-10px) rotate(-1.3deg);text-align:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .22s cubic-bezier(.2,.8,.25,1)}.wave-banner.show{opacity:1;transform:translate(-50%) rotate(-1.3deg)}.wave-banner-title{font-size:clamp(35px,5.3vh,74px);font-weight:700;letter-spacing:.035em;line-height:.9;color:var(--ink);text-shadow:1.4px 1.1px 0 rgba(41,39,127,.13),-1px .3px 0 rgba(41,39,127,.1),0 0 3px rgba(247,242,224,.95),0 0 8px rgba(247,242,224,.75)}.wave-banner-sub{margin-top:6px;font-size:clamp(14px,1.9vh,24px);color:#29277fcc;letter-spacing:.02em;transform:rotate(.6deg)}.wave-banner.intermission .wave-banner-title{font-size:clamp(28px,4.2vh,58px)}.boss-bar-wrap{position:absolute;top:clamp(30px,5.1vh,62px);left:50%;transform:translate(-50%) rotate(-.15deg);width:min(34vw,480px);text-align:center}.boss-name{font-size:clamp(12px,1.65vh,20px);letter-spacing:.09em;font-weight:700;margin-bottom:3px}.boss-shell{height:clamp(14px,1.65vh,20px);border:2px solid var(--ink);border-radius:9px 5px 8px 6px;background:#faf6e866;transform:skew(-.9deg);overflow:hidden}.boss-fill{height:100%;width:100%;background:repeating-linear-gradient(118deg,var(--red) 0 3px,rgba(239,236,221,.2) 3px 6px,transparent 6px 7px);transition:width .1s linear}.stage-chip{position:fixed;z-index:34;left:50%;bottom:8px;transform:translate(-50%) rotate(.2deg);font-family:var(--hand);font-size:10px;letter-spacing:.13em;color:#29277f8a;pointer-events:none;white-space:nowrap;background:#efecdd7a;padding:1px 8px 2px;border-radius:3px}.error-box{position:fixed;z-index:100;left:50%;top:14px;transform:translate(-50%);color:#fff0e9;background:#781f2ff0;border:1.5px solid #7f2032;padding:10px 16px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;max-width:85vw;border-radius:3px;box-shadow:0 2px #00000026}.debug-box{display:none;position:fixed;z-index:35;right:12px;bottom:24px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;line-height:1.4;color:#29277fbd;background:#efecdda6;padding:5px 8px;border:1px solid rgba(41,39,127,.22);pointer-events:none;white-space:pre;text-align:left}.debug-box.show{display:block}#screen-ui{position:fixed;inset:0;z-index:30;display:none;pointer-events:auto}#screen-ui.has-screen{display:block}.paper-screen{position:absolute;inset:0;background:radial-gradient(ellipse at 48% 51%,#efecdd21 0,#efecddb8 64%,#efecdde6);display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-left:clamp(40px,8.7vw,220px);padding-right:clamp(36px,8vw,180px);cursor:pointer}.start-screen:before{content:"";position:absolute;left:0;top:0;bottom:0;width:7%;background:repeating-linear-gradient(136deg,transparent 0 9px,rgba(94,96,166,.07) 9px 10px);border-right:1.2px solid rgba(201,47,79,.15)}.start-kicker{font-size:clamp(12px,1.75vh,22px);letter-spacing:.12em;color:#29277fa8;margin-bottom:clamp(11px,2.2vh,26px);transform:rotate(-.4deg)}.title{margin:0;font-family:var(--hand);font-weight:700;font-size:clamp(58px,11.15vw,214px);line-height:.74;letter-spacing:-.012em;color:var(--ink);text-shadow:2.5px 1.8px 0 rgba(41,39,127,.13),-1px .5px 0 rgba(41,39,127,.1);transform:rotate(-1.2deg)}.title span{display:inline-block;margin-left:clamp(18px,4.8vw,96px);transform:rotate(.8deg)}.title-underline{width:clamp(220px,35vw,680px);height:clamp(9px,1.15vh,16px);margin-top:clamp(12px,2.2vh,25px);margin-left:clamp(6px,1vw,20px);background:linear-gradient(to right,transparent 0,rgba(201,47,79,.75) 2%,rgba(201,47,79,.72) 89%,transparent 100%);clip-path:polygon(0 47%,8% 24%,17% 48%,32% 32%,49% 56%,67% 22%,83% 44%,94% 30%,100% 52%,94% 66%,80% 54%,62% 72%,41% 52%,25% 74%,12% 49%,0 61%);opacity:.66;transform:rotate(-.5deg)}.start-body{margin:clamp(13px,2.3vh,24px) 0 0;font-size:clamp(13px,1.8vh,22px);line-height:1.36;color:#29277fd1;max-width:62ch;transform:rotate(.15deg)}.ink-button{margin-top:clamp(20px,3.4vh,38px);border:2px solid var(--ink);background:#f6f0dc52;color:var(--ink);font-family:var(--hand);font-size:clamp(16px,2.15vh,28px);font-weight:700;letter-spacing:.08em;padding:clamp(9px,1.4vh,15px) clamp(22px,2.5vw,42px);cursor:pointer;border-radius:11px 4px 12px 5px/5px 12px 4px 11px;transform:rotate(-.5deg);box-shadow:2px 2px #29277f24,inset 0 0 0 2px #f6f0dc66;transition:background .12s linear,color .12s linear,transform .12s linear;pointer-events:auto}.ink-button:hover{background:var(--ink);color:var(--paper-bright);transform:rotate(-.5deg) translateY(-1px)}.ink-button:active{transform:rotate(-.5deg) translateY(1px)}.enter-button{display:inline-flex;align-items:center;gap:22px;background:var(--ink);color:var(--paper-bright)}.enter-button:hover{background:#3c3a95}.btn-arrow{font-size:1.2em;line-height:.7}.start-controls{position:absolute;right:clamp(26px,7.8vw,190px);bottom:clamp(55px,12vh,160px);display:grid;grid-template-columns:repeat(3,minmax(102px,1fr));column-gap:clamp(18px,2vw,38px);row-gap:clamp(8px,1.05vh,14px);font-size:clamp(11px,1.55vh,17px);color:#29277fb8;transform:rotate(.2deg);border-top:1.4px solid rgba(41,39,127,.22);padding-top:11px}.start-controls b{color:var(--ink);font-weight:700;margin-right:6px}.start-controls.small{position:static;margin-top:32px;border-top:none;padding-top:0}.start-foot{position:absolute;left:clamp(40px,8.7vw,220px);bottom:clamp(43px,4.3vh,66px);max-width:50vw;font-size:clamp(10px,1.35vh,15px);color:#29277f73}.pause-screen{align-items:center;text-align:center;padding-left:0;background:#efecddcc}.pause-title{font-size:clamp(54px,9.5vh,138px);margin:0;line-height:.8;transform:rotate(-1.2deg)}.pause-screen p{margin:18px 0 0;font-size:clamp(14px,1.8vh,21px);color:#29277fb8}.pause-screen .start-kicker{margin-bottom:18px}.end-screen{align-items:center;text-align:center;padding-left:0;background:radial-gradient(ellipse at center,#efecddc2 0,#efecddeb 62%,#efecddfa)}.end-title{margin:0;font-family:var(--hand);font-size:clamp(64px,11vh,158px);line-height:.8;transform:rotate(-1.2deg);color:var(--ink);text-shadow:2px 2px 0 rgba(41,39,127,.1)}.end-screen.victory .end-title{color:var(--ink)}.end-screen.defeat .end-title{color:var(--red)}.end-copy{max-width:58ch;font-size:clamp(13px,1.75vh,21px);line-height:1.35;color:#29277fcc;margin:17px 0 0}.end-stats{display:flex;gap:clamp(20px,4vw,70px);margin-top:clamp(24px,4vh,45px);border-top:1.4px solid rgba(41,39,127,.25);border-bottom:1.4px solid rgba(41,39,127,.2);padding:9px 5px;box-shadow:none}.end-stats div{display:flex;flex-direction:column;gap:2px}.end-stats span{font-size:10px;letter-spacing:.14em;color:#29277f80}.end-stats b{font-size:clamp(20px,2.6vh,31px);color:var(--ink)}.end-screen .ink-button{margin-top:clamp(22px,3.4vh,38px)}@keyframes score-float{0%{opacity:0;transform:translateY(8px) rotate(.8deg)}10%{opacity:1}65%{opacity:1;transform:translateY(-12px) rotate(-.4deg)}to{opacity:0;transform:translateY(-28px) rotate(-1deg)}}@keyframes ink-arrive{0%{transform:translateY(10px) rotate(-.9deg);opacity:.4}to{transform:translateY(0) rotate(-.4deg);opacity:1}}@keyframes hp-wobble{0%,to{transform:skew(-1.2deg) translate(0)}50%{transform:skew(-1.2deg) translate(1px)}}@media (max-width: 900px),(max-height: 550px){.start-controls{display:none}.title{font-size:clamp(48px,15vw,120px)}.hud-bottom-left{width:42vw}.hud-bottom-right{width:36vw}.context-hint{display:none}.hp-shell{width:22vw}.tally{max-width:34vw}.weapon-list-name{min-width:64px}}
