:root{--yellow:#f7cf4b;--ink:#251c13;--paper:#fff8e6;--red:#ef6b55;--blue:#69b8d8;--green:#cfe7b0;--shadow:8px 9px 0 var(--ink)}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:#2d2d2d;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}button,input{font:inherit;color:inherit}button{cursor:pointer}.app{position:relative;width:min(100%,430px);min-height:100dvh;margin:auto;overflow:hidden;background:var(--yellow);isolation:isolate}.grain{position:absolute;inset:0;z-index:-1;opacity:.1;background-image:radial-gradient(var(--ink) 1px,transparent 1px);background-size:9px 9px;pointer-events:none}.page{min-height:100dvh;padding:calc(22px + env(safe-area-inset-top)) 20px calc(28px + env(safe-area-inset-bottom));animation:pageIn .28s ease-out}.nav{display:flex;align-items:center;justify-content:center;height:44px;position:relative;font-weight:900}.back{position:absolute;left:-8px;top:0;width:44px;height:44px;border:0;background:transparent;font-size:36px;line-height:1}.nav-title{font-size:18px}.paper{border:3px solid var(--ink);border-radius:22px;background:var(--paper);box-shadow:var(--shadow)}.quick-shine{position:relative;overflow:hidden}.quick-shine:after{content:"";position:absolute;z-index:20;top:-30%;bottom:-30%;left:-50%;width:34%;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(255,255,255,.56),transparent);transform:translateX(-180%) skewX(-14deg);animation:shine .68s .12s ease-out both}.btn{width:100%;min-height:52px;border:3px solid var(--ink);border-radius:999px;background:var(--ink);color:#fff8e6;font-weight:900;box-shadow:0 7px 0 var(--red);padding:12px 20px}.btn.secondary{background:var(--paper);color:var(--ink);box-shadow:0 7px 0 var(--blue)}.btn:active{transform:translateY(4px);box-shadow:0 3px 0 var(--ink)}.sticker{object-fit:contain;filter:drop-shadow(-2px -2px 0 #fffdf4) drop-shadow(2px -2px 0 #fffdf4) drop-shadow(-2px 2px 0 #fffdf4) drop-shadow(2px 2px 0 #fffdf4) drop-shadow(5px 6px 0 rgba(37,28,19,.15))}.eyebrow{display:inline-block;border:2px solid var(--ink);border-radius:7px;background:var(--paper);box-shadow:4px 4px 0 var(--ink);padding:5px 10px;font-size:11px;font-weight:950;letter-spacing:2px;transform:rotate(-2deg)}h1,h2,p{margin:0}.login{padding-top:calc(44px + env(safe-area-inset-top))}.brand{font-size:12px;font-weight:950;letter-spacing:2px}.intro{margin-top:28px}.intro h1{font-size:38px;line-height:1.08;margin:14px 0 8px}.intro p{font-weight:700;opacity:.62}.hero{position:relative;height:250px;display:grid;place-items:center}.hero:before{content:"";position:absolute;width:220px;height:170px;border:3px solid var(--ink);border-radius:50%;background:var(--blue);box-shadow:8px 8px 0 var(--ink);transform:rotate(-5deg)}.hero img{position:relative;width:240px;height:240px}.login-card{padding:18px}.login-card label{display:block;font-weight:950;margin-bottom:10px}.password{display:flex;height:52px;border:2px solid var(--ink);border-radius:12px;background:#fff}.password input{min-width:0;flex:1;border:0;outline:0;background:transparent;padding:0 14px;font-size:16px}.password button{border:0;background:transparent;padding:0 12px;font-weight:850}.hint{display:block;margin:8px 2px 14px;font-size:12px;opacity:.55}.error{color:#a22e24;text-align:center;font-weight:800;margin-top:12px}.private{text-align:center;font-size:11px;font-weight:800;opacity:.42;margin-top:22px}.hub{height:100dvh;padding:10px 12px;overflow:hidden}.stage{position:relative;width:100%;height:100%}.entry{position:absolute;border:0;background:transparent;padding:0;display:flex;flex-direction:column;align-items:center;font-weight:950;animation:float 4s ease-in-out infinite}.entry img{width:100%;height:calc(100% - 26px)}.entry span{text-shadow:1px 1px 0 #fff7df;white-space:nowrap}.entry:nth-child(1){top:0;left:0;width:46%;height:23%;transform:rotate(-5deg)}.entry:nth-child(2){top:15%;right:0;width:44%;height:23%;transform:rotate(6deg)}.entry:nth-child(3){top:30%;left:0;width:47%;height:24%;transform:rotate(4deg)}.entry:nth-child(4){top:45%;right:0;width:47%;height:24%;transform:rotate(-5deg)}.entry:nth-child(5){top:60%;left:0;width:52%;height:24%;transform:rotate(-3deg)}.entry:nth-child(6){top:75%;right:0;width:49%;height:24%;transform:rotate(4deg)}.entry:nth-child(even){animation-delay:.5s}.heading{margin:14px 0 22px}.heading h1{font-size:30px;margin-top:12px;line-height:1.15}.mode-grid,.module-grid{display:grid;gap:18px}.mode-card,.module-card{position:relative;min-height:190px;padding:20px;border:3px solid var(--ink);border-radius:22px;background:var(--paper);box-shadow:var(--shadow);text-align:left;overflow:hidden}.mode-card h2,.module-card h2{font-size:25px}.mode-card p,.module-card p{margin-top:8px;max-width:62%;font-weight:700;opacity:.65}.mode-card img,.module-card img{position:absolute;right:8px;bottom:8px;width:145px;height:135px}.cake-stage{text-align:center;padding-top:30px}.cake-stage img{width:320px;height:320px;transition:.5s}.dark{background:#332c25;color:#fff4d2}.dark .grain{opacity:.05}.dark .cake-stage img{filter:brightness(.35) saturate(.65) drop-shadow(0 0 20px rgba(255,195,70,.2))}.cake-copy{text-align:center;margin:10px 0 24px}.choice-scene,.draw-scene,.smoke-scene{text-align:center}.scene-image{width:100%;height:330px}.speech{position:relative;margin:10px auto 24px;padding:18px;border:3px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:6px 7px 0 rgba(37,28,19,.2);font-size:18px;font-weight:950}.actions{display:grid;gap:16px}.coin{width:220px;height:220px;margin:40px auto 70px;border:0;background:transparent}.coin img{width:100%;height:100%}.coin.spin{animation:coin .45s linear infinite}.fortune-tube{width:280px;height:310px;margin:20px auto}.fortune-card{padding:26px 22px;text-align:left}.fortune-number{font-size:12px;font-weight:950;letter-spacing:2px}.fortune-card h1{font-size:32px;margin:10px 0}.fortune-verse{white-space:pre-line;font-size:18px;font-weight:850;line-height:1.8}.fortune-action{margin-top:18px;padding-top:18px;border-top:2px dashed rgba(37,28,19,.35);line-height:1.6}.transport-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.transport-card{padding:12px;border:3px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:5px 6px 0 var(--ink);font-weight:900}.transport-card img{width:100%;height:160px}.result-card{padding:20px}.result-card>img{width:100%;height:230px}.result-card h1{font-size:27px}.result-card .address{margin:8px 0;font-size:13px;opacity:.65}.mission{margin:14px 0;padding:14px;border-radius:12px;background:#ffe294;font-weight:750;line-height:1.5}.strength-head{width:min(100%,360px);margin:16px auto;text-align:left}.strength-head h1{font-size:30px}.strength-head p{margin-top:8px;font-weight:750;opacity:.65}.carousel{display:flex;gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;padding:8px calc((100% - 350px)/2) 20px;scrollbar-width:none}.carousel::-webkit-scrollbar{display:none}.strength-card{flex:0 0 350px;min-height:610px;padding:20px;scroll-snap-align:center;transform:scale(.92) translateY(12px);opacity:.56;transition:.3s}.strength-card.active{transform:scale(1);opacity:1}.strength-card img{width:100%;height:240px}.strength-card h2{font-size:27px}.meta{display:flex;gap:8px;margin:10px 0}.pill{border:2px solid var(--ink);border-radius:999px;padding:6px 10px;font-weight:850}.steps{display:grid;gap:12px;margin-top:16px}.step{display:flex;gap:12px;align-items:center;font-weight:750}.step b{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:#bde3e1}.care{display:block;margin-top:28px;padding-top:16px;border-top:2px dashed rgba(37,28,19,.35);font-weight:750;color:#76533a}.checkin{margin-top:18px;background:#f19b68}.done-btn{background:#b8d8e7;color:var(--ink);box-shadow:0 7px 0 #3f7187}.youth-card{padding:22px;min-height:620px;display:flex;flex-direction:column}.youth-number{font-weight:950}.youth-card img{width:100%;height:300px}.youth-card h1{font-size:29px}.youth-card p{margin-top:12px;line-height:1.6;font-weight:700}.youth-footer{margin-top:auto;font-size:13px;opacity:.6}.move-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:20px}.move{border:3px solid var(--ink);border-radius:16px;background:var(--paper);padding:8px;font-weight:900}.move img{width:100%;height:100px}.duel{display:grid;grid-template-columns:1fr 1fr;gap:8px}.duel img{width:100%;height:220px}.timer{font-size:44px;font-weight:950;margin:14px 0}.toast{position:fixed;z-index:99;left:50%;bottom:48px;transform:translate(-50%,20px);padding:12px 18px;border:2px solid var(--ink);border-radius:999px;background:var(--ink);color:#fff8e6;font-weight:850;opacity:0;pointer-events:none;transition:.2s;white-space:nowrap}.toast.show{opacity:1;transform:translate(-50%,0)}@keyframes shine{0%{opacity:0;transform:translateX(-180%) skewX(-14deg)}24%{opacity:.9}100%{opacity:0;transform:translateX(520%) skewX(-14deg)}}@keyframes pageIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes float{50%{margin-top:-6px}}@keyframes coin{to{transform:rotateY(360deg)}}@media(min-width:431px){.app{box-shadow:0 0 40px rgba(0,0,0,.35)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
.celebration-page{overflow:hidden}.cake-stage{padding-top:20px}.cake-visual{position:relative;width:min(92vw,460px);margin:0 auto}.cake-image{display:block;width:100%;height:auto}.flames,.cake-smoke{position:absolute;inset:0;pointer-events:none}.flames i,.cake-smoke i{position:absolute;left:var(--x);top:18.5%;transform:translate(-50%,-100%)}.flames i{width:12px;height:20px;border-radius:60% 40% 55% 45%;background:radial-gradient(circle at 50% 65%,#fff9b8 0 18%,#ffd447 22% 52%,#ff7a18 56% 82%,rgba(255,93,22,0) 86%);filter:drop-shadow(0 0 5px #ffad20) drop-shadow(0 0 12px rgba(255,111,20,.85));transform-origin:50% 100%;animation:candle-flicker .75s ease-in-out infinite alternate}.flames i:nth-child(1),.cake-smoke i:nth-child(1){--x:37.1%;animation-delay:-.1s}.flames i:nth-child(2),.cake-smoke i:nth-child(2){--x:43.5%;animation-delay:-.45s}.flames i:nth-child(3),.cake-smoke i:nth-child(3){--x:50.3%;animation-delay:-.25s}.flames i:nth-child(4),.cake-smoke i:nth-child(4){--x:56.9%;animation-delay:-.6s}.flames i:nth-child(5),.cake-smoke i:nth-child(5){--x:63.9%;animation-delay:-.35s}.cake-smoke i{width:8px;height:22px;border-radius:50%;border-left:2px solid rgba(96,91,84,.42);opacity:0}.candles-out .flames{opacity:0;transition:opacity .18s ease}.candles-out .cake-smoke i{animation:smoke-rise 1.8s ease-out forwards}.cake-copy{margin-top:-6px}.cake-copy h1{margin-bottom:8px}.cake-copy p{margin-top:0}@keyframes candle-flicker{0%{transform:translate(-50%,-100%) rotate(-4deg) scale(.92,1.06)}55%{transform:translate(-50%,-100%) rotate(3deg) scale(1.06,.96)}100%{transform:translate(-50%,-100%) rotate(-1deg) scale(.96,1.1)}}@keyframes smoke-rise{0%{opacity:0;transform:translate(-50%,-80%) scale(.7)}18%{opacity:.55}100%{opacity:0;transform:translate(calc(-50% + 10px),-210%) scale(1.2)}}@media(max-width:420px){.cake-visual{width:min(96vw,390px)}.flames i{width:10px;height:18px}.cake-stage{padding-top:12px}}
.cake-stage .cake-image{width:100%;height:auto;object-fit:contain}.flames i,.cake-smoke i{top:var(--y)}.flames i:nth-child(1),.cake-smoke i:nth-child(1){--y:22.8%}.flames i:nth-child(2),.cake-smoke i:nth-child(2){--y:23.2%}.flames i:nth-child(3),.cake-smoke i:nth-child(3){--y:20.8%}.flames i:nth-child(4),.cake-smoke i:nth-child(4){--y:23.1%}.flames i:nth-child(5),.cake-smoke i:nth-child(5){--y:23.1%}
.cake-visual{width:min(92%,460px);max-width:calc(100% - 24px)}@media(max-width:420px){.cake-visual{width:calc(100% - 24px);max-width:390px}}
.cakeBtn.listening,.btn.listening{animation:mic-listening 1.1s ease-in-out infinite}@keyframes mic-listening{0%,100%{box-shadow:0 6px 0 #f46d61,0 0 0 0 rgba(244,109,97,.35)}50%{box-shadow:0 6px 0 #f46d61,0 0 0 12px rgba(244,109,97,0)}}
.celebration-page{position:relative;isolation:isolate}.celebration-page:before{content:"";position:absolute;inset:0;background:rgba(5,8,14,.58);z-index:6;pointer-events:none;opacity:1;transition:opacity .65s ease}.celebration-page.candles-out:before{opacity:0}.celebration-page .flames{z-index:7}
.celebration-page:before{position:fixed;inset:0}

.finger-touch-scene{position:relative}.finger-touch-scene .scene-image{display:block}.finger-hotspot{position:absolute;left:44.5%;top:58%;width:64px;height:64px;padding:0;transform:translate(-50%,-50%);border:0;border-radius:50%;background:rgba(255,255,255,.16);box-shadow:0 0 0 3px rgba(255,255,255,.9),0 0 0 9px rgba(255,190,43,.45);color:transparent;cursor:pointer;animation:finger-pulse 1.6s ease-in-out infinite;-webkit-tap-highlight-color:transparent}.finger-hotspot span{position:absolute;left:50%;top:calc(100% + 13px);transform:translateX(-50%);width:max-content;padding:6px 11px;border-radius:999px;background:rgba(34,24,12,.82);color:#fff;font-size:14px;font-weight:700;line-height:1;white-space:nowrap}@keyframes finger-pulse{0%,100%{transform:translate(-50%,-50%) scale(.88);box-shadow:0 0 0 3px rgba(255,255,255,.92),0 0 0 8px rgba(255,190,43,.28)}50%{transform:translate(-50%,-50%) scale(1);box-shadow:0 0 0 3px rgba(255,255,255,1),0 0 0 15px rgba(255,190,43,0)}}
.choice-scene:has(.actions){padding-bottom:calc(172px + env(safe-area-inset-bottom))}.choice-scene .actions{position:fixed;z-index:20;left:50%;bottom:calc(22px + env(safe-area-inset-bottom));width:min(calc(100% - 40px),390px);transform:translateX(-50%);gap:16px}
.page:has(> .btn),.page:has(> .actions),.login:has(.login-card > .btn){padding-bottom:calc(96px + env(safe-area-inset-bottom))}.page:has(> .actions){padding-bottom:calc(172px + env(safe-area-inset-bottom))}.page > .btn,.login-card > .btn{position:fixed;z-index:30;left:50%;bottom:calc(22px + env(safe-area-inset-bottom));width:min(calc(100% - 40px),390px);transform:translateX(-50%)}.page > .actions{position:fixed;z-index:30;left:50%;bottom:calc(22px + env(safe-area-inset-bottom));width:min(calc(100% - 40px),390px);transform:translateX(-50%);gap:16px}.page > .actions .btn{position:static;width:100%;transform:none}
.login:has(.login-card > .btn){padding-bottom:calc(28px + env(safe-area-inset-bottom))}.login-card > .btn{position:static;width:100%;transform:none}
:root{--device-width:440px;--device-ratio:440/956}.app{width:min(100%,var(--device-width));aspect-ratio:var(--device-ratio);min-height:100dvh}
.celebration-page .cake-stage,.celebration-page .cake-copy{transform:translateY(120px)}
