@font-face{font-family:Pixel;src:url('fonts/press-start-2p.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}
:root{--ink:#4a3157;--muted:#8a738e;--pink:#f477a0;--light:#fff9ed;--lavender:#e9d9fa;--teal:#8ce0cf;--yellow:#ffdf74;--line:3px;--pixel:Pixel,'Courier New',monospace}
*{box-sizing:border-box}html{min-height:100%;background:#f8eee6}body{margin:0;color:var(--ink);font-family:var(--pixel);font-size:11px;line-height:1.8;min-height:100svh;padding:max(16px,env(safe-area-inset-top)) max(20px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(20px,env(safe-area-inset-left));overscroll-behavior:none;-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;border-radius:0;touch-action:manipulation}button:focus-visible{outline:3px solid #376d80;outline-offset:6px}button:disabled{cursor:default}button[hidden],[hidden]{display:none!important}button svg{fill:currentColor}p,h1,h2,h3{margin:0}button,canvas,.dpad{-webkit-user-select:none;user-select:none}svg,canvas{image-rendering:pixelated;image-rendering:crisp-edges}svg{shape-rendering:crispEdges}
.backdrop{position:fixed;inset:0;z-index:-1;background-image:linear-gradient(#d6b9cd19 1px,transparent 1px),linear-gradient(90deg,#d6b9cd19 1px,transparent 1px);background-size:24px 24px;pointer-events:none}.backdrop:before,.backdrop:after{content:'';position:absolute;width:170px;height:170px;border:24px solid #ead9f0;opacity:.45;transform:rotate(12deg);left:-105px;top:32%}.backdrop:after{left:auto;right:-100px;top:64%;border-color:#d9eadb;transform:rotate(-15deg)}.spark{position:absolute;width:8px;height:26px;background:#dfbee6;box-shadow:0 0 0 0 #dfbee6}.spark:after{content:'';position:absolute;left:-9px;top:9px;width:26px;height:8px;background:inherit}.s1{left:7%;top:21%}.s2{right:7%;top:38%;background:#edb0bb;transform:scale(.6)}.s3{left:10%;bottom:18%;background:#b4d4ce;transform:scale(.6)}.s4{right:12%;bottom:13%;background:#ecd18a}
.site-header{max-width:1120px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;min-height:38px;gap:16px}.brand{display:flex;align-items:center;gap:14px;font-size:10px;text-transform:uppercase;letter-spacing:1px}.pixel-heart{width:20px;height:16px;display:block;background:var(--pink);clip-path:polygon(0 0,40% 0,40% 20%,60% 20%,60% 0,100% 0,100% 60%,80% 60%,80% 80%,60% 80%,60% 100%,40% 100%,40% 80%,20% 80%,20% 60%,0 60%)}.sound-button{display:flex;align-items:center;gap:9px;background:#fff9f0;border:2px solid #d5bfcf;padding:8px 10px;font-size:8px;box-shadow:2px 2px #d5bfcf;min-height:36px}.sound-button svg{width:17px;height:17px}.sound-button[aria-pressed=false] svg{opacity:.45}.sound-button:hover{background:#f3e2fa}
main{max-width:1060px;margin:0 auto}.intro{text-align:center;margin:26px auto 25px}.eyebrow{font-size:8px;color:#a56b85;letter-spacing:.3px}.eyebrow span{color:#ca8fb7;margin:0 8px}h1{font-size:clamp(20px,2.5vw,32px);line-height:1.65;margin:14px 0 11px;letter-spacing:-1px;text-shadow:3px 3px #e2cbd8}h1 span{color:#dc6189;text-shadow:3px 3px #f5c5cc}.intro-sub{font-size:9px;color:var(--muted)}
.arcade{width:min(900px,100%);min-width:min(620px,100%);margin:0 auto;border:4px solid var(--ink);background:var(--ink);box-shadow:6px 6px 0 #c9b0ce,9px 9px 0 var(--ink);position:relative}.game-topbar{display:flex;justify-content:space-between;align-items:center;padding:9px 14px;color:#fff1d9;background:var(--ink);font-size:8px;gap:10px;min-height:33px}.game-topbar>span:first-child{display:flex;align-items:center;gap:9px}.status-light{display:inline-block;background:#8ce0cf;width:7px;height:7px}.lives{display:flex;gap:7px}.lives i{width:12px;height:10px;background:#ffb3bd;clip-path:polygon(0 0,40% 0,40% 20%,60% 20%,60% 0,100% 0,100% 60%,80% 60%,80% 80%,60% 80%,60% 100%,40% 100%,40% 80%,20% 80%,20% 60%,0 60%)}.game-viewport{position:relative;width:100%;aspect-ratio:8/5;overflow:hidden;background:#c5c0e5}#world{display:block;width:100%;height:100%;touch-action:none}.scene-badge{position:absolute;left:16px;top:14px;background:#fff6dfed;border:2px solid var(--ink);box-shadow:2px 2px #4a31574d;padding:6px 8px;font-size:7px;color:var(--ink);pointer-events:none}.scene-badge span{color:#dd6792}.chest-hint{position:absolute;left:70.4%;top:24%;transform:translate(-50%,-100%);background:#fff5c7;border:2px solid var(--ink);padding:8px;white-space:nowrap;font-size:8px;box-shadow:3px 3px #4a31574d;pointer-events:none}.chest-hint span{display:block;text-align:center;margin-bottom:-20px;font-size:15px;color:#fff5c7;text-shadow:2px 0 var(--ink),-2px 0 var(--ink),0 2px var(--ink)}.game-status{display:flex;align-items:center;justify-content:center;gap:12px;background:#ece0f3;border-top:3px solid var(--ink);border-bottom:3px solid var(--ink);padding:13px 16px;min-height:46px;font-size:9px}.game-status p{flex:1;text-align:center}.status-star{color:#b373a3;font-size:16px;line-height:1}.status-count{font-size:7px;white-space:nowrap;color:#93758f}.control-deck{background:#fff8ec;padding:20px;min-height:105px}.welcome-controls{display:flex;flex-direction:column;align-items:center;gap:12px}.welcome-controls p{font-size:8px;color:var(--muted)}.pixel-button{display:inline-flex;align-items:center;justify-content:center;gap:14px;padding:16px 24px;border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font-size:12px;line-height:1.6;transition:background .15s,transform .1s,box-shadow .1s;min-height:52px}.pixel-button:hover{transform:translate(-1px,-1px);box-shadow:5px 5px 0 var(--ink)}.pixel-button:active{transform:translate(3px,3px);box-shadow:1px 1px 0 var(--ink)}.primary{background:var(--pink);color:#3e2848}.primary:hover{background:#ff9cba}.play-triangle{background:currentColor;width:12px;height:16px;clip-path:polygon(0 0,33% 0,33% 20%,66% 20%,66% 40%,100% 40%,100% 60%,66% 60%,66% 80%,33% 80%,33% 100%,0 100%)}.play-controls{display:flex;align-items:center;justify-content:center;gap:35px}.movement{display:flex;align-items:center;gap:17px}.dpad{display:grid;grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px);gap:5px;touch-action:none}.dir{border:2px solid var(--ink);box-shadow:2px 2px #bca6c1;background:#efe4f6;font-family:var(--pixel);font-size:21px;font-weight:bold;line-height:1;padding:0;touch-action:none}.dir.active,.dir:active{background:#9de4d2;transform:translate(2px,2px);box-shadow:none}.dir.up{grid-column:2;grid-row:1}.dir.left{grid-column:1;grid-row:2}.dir.right{grid-column:3;grid-row:2}.dir.down{grid-column:2;grid-row:2}.dpad-center{display:none}.movement-label{font-size:8px;color:#8c7491;max-width:100px}.action-wrap{text-align:center}.action{background:var(--yellow);font-size:10px;min-width:240px;padding:14px 16px}.action:disabled{background:#eee5dd;color:#ad9ba8;border-color:#b6a4b5;box-shadow:3px 3px #b6a4b5}.action:disabled:hover{transform:none}.action-wrap p{font-size:7px;margin-top:10px;color:var(--muted)}.action:not(:disabled){animation:ready 1.6s steps(2,end) infinite}.party-controls{display:flex;justify-content:center;align-items:center;min-height:65px;gap:20px;font-size:9px;color:#ad608b}.page-footer{display:flex;align-items:center;justify-content:center;gap:15px;padding:23px 0 5px;color:#a48a9d;font-size:7px}.tiny-heart{color:#d18ba6;font-size:11px}.anticipation{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);padding:10px 12px;border:2px solid var(--ink);background:#ffedb1;font-size:9px;white-space:nowrap;box-shadow:3px 3px var(--ink)}
.celebration{position:fixed;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;background:#322343b8;padding:max(35px,env(safe-area-inset-top)) 20px max(30px,env(safe-area-inset-bottom));overflow-y:auto;overscroll-behavior:contain;isolation:isolate}.celebration:before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at center,#d094be1a 0%,#2f204b1a 65%);z-index:-1}#effects{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}.birthday-title{position:relative;z-index:1;text-align:center;font-size:clamp(16px,2.6vw,32px);line-height:1.7;max-width:900px;filter:drop-shadow(4px 4px #392445)}.birthday-word{display:inline-block;white-space:nowrap;margin:0 .35em}.birthday-letter{display:inline-block;animation:letter-in .7s steps(6,end) both;animation-delay:calc(var(--i)*.035s);color:var(--color);text-shadow:0 3px #553456}.gift{position:relative;z-index:1;display:flex;align-items:center;flex-direction:column;max-width:100%;animation:ticket-in 1s cubic-bezier(.17,.8,.2,1) both;transform-origin:65% 70%}.ticket-stack{position:relative;width:min(620px,calc(100vw - 54px));margin:10px 4px 0}.ticket-back{position:absolute;inset:0;background:#f586a6;border:4px solid #34263f;transform:rotate(-4deg) translate(-7px,6px);box-shadow:4px 4px #251d3c}.ticket{position:relative;background:#fff4d4;border:4px solid #34263f;box-shadow:6px 6px #251d3c;outline:none;clip-path:polygon(0 0,100% 0,100% 69%,98% 69%,98% 73%,100% 73%,100% 100%,0 100%,0 73%,2% 73%,2% 69%,0 69%)}.ticket-topline{display:flex;align-items:center;justify-content:space-between;background:#d9cbf2;border-bottom:3px solid #4a3157;padding:17px 23px;font-size:11px;color:#624873}.ticket-topline>span:last-child{color:#8561a2;font-size:14px}.ticket-main{padding:28px 25px 30px;text-align:center;position:relative;overflow:hidden}.ticket-sticker{position:absolute;right:18px;top:14px;color:#d6739b;font-size:24px;transform:rotate(12deg)}.ticket-quantity{display:flex;flex-direction:column;gap:10px;position:relative;z-index:1}.ticket-quantity strong{font-size:clamp(20px,3.6vw,34px);color:#bb4779;font-weight:400;text-shadow:2px 2px #f6c8cf}.ticket-quantity>span{font-size:10px;color:#846476}.ticket h3{font-size:clamp(18px,3vw,30px);font-weight:400;line-height:1.5;margin:27px 0 24px;letter-spacing:-1.3px;color:#413052}.ticket-details{display:flex;align-items:center;justify-content:center;gap:30px;font-size:12px}.ticket-details p{display:flex;align-items:center;gap:12px}.pixel-calendar{width:16px;height:15px;display:inline-block;border:2px solid #8d708f;box-shadow:inset 0 3px #8d708f;position:relative}.pixel-calendar:before{content:'';position:absolute;width:2px;height:4px;background:#8d708f;top:-5px;left:2px;box-shadow:6px 0 #8d708f}.pixel-pin{width:12px;height:17px;background:#9b708f;display:inline-block;clip-path:polygon(20% 0,80% 0,80% 15%,100% 15%,100% 65%,80% 65%,80% 80%,60% 80%,60% 100%,40% 100%,40% 80%,20% 80%,20% 65%,0 65%,0 15%,20% 15%)}.ticket-recipient{padding:22px 14px;display:flex;justify-content:center;align-items:center;gap:14px;border-top:3px dashed #bc9cb1;background:#ffe9b5;font-size:11px;text-align:center;line-height:2}.ticket-recipient>span{color:#b3868a;font-size:17px}.gift-caption{font-size:11px;text-align:center;margin:28px 0 22px;color:#fff2d9;line-height:2}.replay{background:#a4e6d0;color:#354650;min-width:180px;font-size:11px}.replay:hover{background:#bff7e3}.replay span{font-family:var(--pixel);font-size:23px}.celebration .birthday-title{transition:margin .4s}.site-header{position:relative;z-index:25}body[data-phase=party] .sound-button,body[data-phase=reveal] .sound-button{background:#fff6df}body[data-phase=party] .brand,body[data-phase=reveal] .brand{visibility:hidden}body[data-phase=party],body[data-phase=reveal]{overflow:hidden}body[data-phase=party] .birthday-title{font-size:clamp(22px,4vw,45px)}
body[data-phase=party] .celebration{background:transparent;justify-content:flex-start;padding-top:23svh;pointer-events:none}body[data-phase=party] .celebration:before{display:none}
@keyframes ready{50%{background:#ffedac}}@keyframes letter-in{0%{opacity:0;transform:translateY(45px) rotate(-10deg) scale(.5)}60%{opacity:1;transform:translateY(-10px) rotate(3deg) scale(1.12)}100%{opacity:1;transform:none}}@keyframes ticket-in{0%{opacity:0;transform:translate(10vw,20vh) scale(.1) rotate(10deg)}65%{opacity:1;transform:translate(0,-8px) scale(1.025) rotate(-1deg)}100%{opacity:1;transform:none}}
@media(min-width:760px) and (max-height:880px){.intro{margin:13px auto 17px}.intro-sub{display:none}.arcade{width:min(860px,calc((100svh - 290px)*1.6))}h1{margin:9px 0;font-size:26px}.control-deck{padding:15px;min-height:90px}.page-footer{padding-top:20px}.ticket-main{padding:20px}.ticket h3{margin:20px 0}.ticket-recipient{padding:17px}.celebration{gap:16px}.gift-caption{margin:20px 0 16px}}
@media(max-width:600px){body{padding-left:max(14px,env(safe-area-inset-left));padding-right:max(14px,env(safe-area-inset-right));font-size:9px}.site-header{gap:8px;min-height:34px}.brand{font-size:8px;gap:9px;letter-spacing:0}.pixel-heart{width:16px;height:13px}.sound-button{font-size:6px;padding:7px;gap:5px}.sound-button svg{width:14px;height:14px}.intro{margin:27px auto 23px}.eyebrow{font-size:6px;line-height:1.8}.eyebrow span{margin:0 3px}h1{font-size:21px;line-height:1.7;max-width:350px;margin:13px auto 12px}h1 span{display:block}.intro-sub{font-size:7px;line-height:1.9;max-width:300px;margin:auto}.arcade{border-width:3px;box-shadow:4px 4px #c9b0ce,6px 6px var(--ink)}.game-topbar{padding:9px;font-size:6px;min-height:29px}.game-topbar>span:first-child{gap:6px}.status-light{width:5px;height:5px}.lives{gap:4px}.lives i{width:10px;height:8px}.scene-badge{left:8px;top:8px;padding:4px 5px;font-size:5px;border-width:1px}.chest-hint{font-size:6px;padding:5px;top:25%}.game-status{font-size:7px;padding:11px 9px;gap:7px;min-height:48px;line-height:1.9}.status-star{font-size:12px}.status-count{font-size:5px}.control-deck{padding:17px 10px}.pixel-button{font-size:10px;padding:14px 19px;min-height:50px}.welcome-controls{gap:13px}.welcome-controls p{font-size:6px}.play-controls{gap:19px;justify-content:space-around}.movement{display:block}.dpad{grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px);gap:4px}.dir{font-size:24px}.movement-label{max-width:none;font-size:6px;text-align:center;margin-top:9px}.action-wrap{flex:1;max-width:190px}.action{min-width:0;width:100%;font-size:8px;line-height:2.1;padding:10px 7px;gap:7px}.action>span{display:none}.action-wrap p{font-size:6px;line-height:1.9}.party-controls{font-size:7px;text-align:center;line-height:2;gap:6px;min-height:78px}.page-footer{font-size:6px;gap:9px;padding-top:23px}.anticipation{font-size:6px;padding:9px;bottom:10px}.celebration{gap:21px;padding:65px 14px 24px}.birthday-title{font-size:18px;max-width:360px;line-height:1.9}.ticket-stack{width:calc(100vw - 48px);max-width:450px;margin-top:5px}.ticket-back{border-width:3px;transform:rotate(-4deg) translate(-2px,5px)}.ticket{border-width:3px}.ticket-topline{font-size:8px;padding:13px 12px;border-bottom-width:2px}.ticket-topline>span:last-child{font-size:10px}.ticket-main{padding:24px 9px}.ticket-quantity{gap:10px}.ticket-quantity strong{font-size:25px}.ticket-quantity>span{font-size:8px}.ticket-sticker{right:10px;top:10px;font-size:17px}.ticket h3{font-size:clamp(16px,5.15vw,22px);letter-spacing:-1.1px;margin:25px 0 21px}.ticket-details{font-size:9px;gap:21px}.ticket-details p{gap:8px}.pixel-calendar{width:14px;height:13px}.pixel-pin{width:10px;height:14px}.ticket-recipient{font-size:9px;padding:19px 14px;gap:8px;line-height:2.15}.ticket-recipient p{max-width:240px}.ticket-recipient>span{font-size:12px}.gift-caption{font-size:8px;line-height:2;margin:25px 0 20px}.replay{min-width:160px}.sound-button{min-height:36px}body[data-phase=party] .birthday-title{font-size:25px}body[data-phase=play] .intro{margin:18px auto}.birthday-word{margin:0 .25em}}
@media(max-width:360px){h1{font-size:19px}.brand{font-size:7px}.play-controls{gap:12px}.dpad{grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px)}.ticket-quantity strong{font-size:23px}.ticket-recipient{font-size:8px}.ticket-details{gap:16px}.ticket-sticker{font-size:14px}}
@media(max-height:700px) and (max-width:600px){.intro{margin:16px auto}.intro-sub{display:none}h1{margin:10px auto}.celebration{padding-top:56px;gap:10px}.birthday-title{font-size:15px;line-height:1.7}.ticket-main{padding:16px 9px}.ticket h3{margin:17px 0}.ticket-recipient{padding:12px}.ticket-topline{padding:10px 12px}.gift-caption{margin:18px 0 14px}.ticket-quantity strong{font-size:22px}.gift .pixel-button{padding:10px 18px;min-height:44px}.page-footer{padding-top:18px}}
@media(max-height:500px) and (min-width:600px){.celebration{padding:50px 15px 15px;justify-content:flex-start;gap:12px}.ticket-stack{width:480px}.ticket-main{padding:12px 20px}.ticket-quantity{display:block}.ticket-quantity strong{font-size:22px}.ticket-quantity>span{font-size:10px}.ticket h3{margin:10px 0;font-size:24px}.ticket-topline{padding:9px 20px}.ticket-recipient{padding:10px;font-size:9px}.gift-caption{margin:15px 0 12px}.birthday-title{font-size:18px}.ticket-details{font-size:10px}.replay{min-height:40px;padding:8px 20px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.gift{transform:none}.birthday-letter{opacity:1}}
