:root{--paper:#f8f3e9;--ink:#514237;--muted:#9d8d7c;--pink:#c97877;--line:#e6dccd}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Microsoft YaHei",sans-serif;font-size:14px}.ambient{position:fixed;inset:0;pointer-events:none;opacity:.35;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.12' filter='url(%23n)'/%3E%3C/svg%3E")}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:disabled{cursor:default}button:focus-visible,a:focus-visible{outline:2px solid var(--pink);outline-offset:5px}header{max-width:510px;margin:auto;padding:25px 25px 15px;display:flex;justify-content:space-between;align-items:center}.brand{color:var(--ink);font-family:Georgia,serif;font-size:18px;font-style:italic;text-decoration:none}.brand span{display:block;font-family:Arial,sans-serif;font-style:normal;letter-spacing:2.6px;font-size:8px;margin-top:7px;color:var(--muted)}.sound{width:37px;height:37px;border:1px solid var(--line);border-radius:50%;background:transparent;font-size:20px;color:var(--ink)}.sound.playing{background:#eedbd3;animation:pulse 2s infinite}main{max-width:460px;margin:auto;padding:20px 26px 15px;min-height:calc(100svh - 155px)}.page{display:none;animation:enter .7s ease}.page.active{display:block}.eyebrow{font:9px Arial,sans-serif;letter-spacing:2px;color:var(--muted);margin:14px 0 23px}.hero-title,h1,h2{font-family:"Noto Serif SC","SimSun",serif;font-weight:500}.hero-title{font-size:43px;line-height:1.42;letter-spacing:3px}.hero-title>span{display:block;color:var(--pink)}.hero-title i{font-style:normal;font-size:27px;vertical-align:top;margin-left:13px;color:#bb9a62}h1{font-size:32px;line-height:1.55;letter-spacing:1px;margin:0 0 14px}.subtitle{font-size:12px;color:var(--muted);line-height:1.9;margin:0 0 28px}.portrait-scene{height:248px;position:relative;display:flex;align-items:center;justify-content:center;margin-top:14px}.portrait{width:164px;height:184px;border-radius:100px 100px 15px 15px;background:#e7d8c7;border:7px solid #fffcf5;box-shadow:0 6px 25px #6d473011;position:relative;transform:rotate(-5deg);display:flex;flex-direction:column;align-items:center;justify-content:center}.avatar{font-family:serif;font-size:68px;color:#967963;background:#f3e7d8;width:115px;height:115px;border-radius:50%;display:grid;place-items:center}.avatar-caption{font:italic 15px Georgia;color:#a58071;margin-top:8px}.hat{position:absolute;top:-39px;left:59px;width:63px;height:74px;background:repeating-linear-gradient(65deg,#c67c78 0 12px,#efd0a5 12px 24px);clip-path:polygon(50% 0,100% 100%,0 100%);transform:rotate(13deg)}.orbit{position:absolute;width:270px;height:202px;border:1px solid #dfd1bc;border-radius:50%;transform:rotate(-18deg)}.float{position:absolute}.star{left:24px;top:60px;font-size:44px;color:#b59663}.flower{right:32px;top:24px;font-size:44px;color:#c78780;animation:float 4s infinite}.sparkle{left:58px;bottom:26px;color:#c78780;font-size:22px}.birthday-stamp{position:absolute;right:0;bottom:20px;border:1px solid #c4a77e;border-radius:50%;width:87px;height:87px;display:flex;align-items:center;justify-content:center;flex-direction:column;transform:rotate(13deg);font:9px/1.7 Georgia;color:#ad8a5d}.birthday-stamp b{font-size:12px}.wishes{height:83px;position:relative;overflow:hidden;margin:5px -26px 15px;mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}.wishes span{position:absolute;white-space:nowrap;background:#efe6d9;padding:8px 13px;border-radius:20px;font-size:10px;color:#9a8171;left:0;animation:marquee 19s linear infinite}.wishes span:nth-child(2){left:190px;animation-delay:-2s}.wishes span:nth-child(3){left:370px;animation-delay:-4s}.wishes span:nth-child(4){top:40px;left:50px;animation-direction:reverse;animation-delay:-2s}.wishes span:nth-child(5){top:40px;left:285px;animation-direction:reverse;animation-delay:-5s}.wishes span:nth-child(6){left:560px}.intro{font-family:"Noto Serif SC",serif;font-size:18px;line-height:1.9;text-align:center;margin:0 0 23px}.intro span{font:11px "Microsoft YaHei",sans-serif;color:var(--muted)}.primary{width:100%;border:0;background:var(--pink);color:#fff9f1;border-radius:5px;padding:17px 21px;text-align:left;letter-spacing:1px;box-shadow:0 6px 16px #bd7e7215}.primary span{float:right}.primary:active{transform:scale(.98)}.footnote{text-align:center;font-size:9px;letter-spacing:2px;color:#b4a596;margin:15px 0}footer{max-width:460px;margin:0 auto;padding:22px 26px 25px;display:flex;align-items:center;justify-content:space-between;min-height:67px}footer>span{font-size:8px;letter-spacing:1.2px;color:#b1a28f}#back{border:0;background:none;color:var(--muted);font-size:11px;padding:0}.steps{display:flex;gap:7px}.steps i{width:5px;height:5px;background:#ded2c2;border-radius:50%}.steps .on{background:var(--pink);width:18px;border-radius:5px}.record-wrap{position:relative;margin:38px auto 25px;width:254px;height:254px}.record{width:100%;height:100%;border-radius:50%;background:repeating-radial-gradient(circle,#34312e 0 2px,#292724 3px 4px);box-shadow:8px 12px 25px #42372a24;display:grid;place-items:center;animation:spin 14s linear infinite;animation-play-state:paused}.record.playing{animation-play-state:running}.record-label{width:99px;height:99px;border-radius:50%;background:#c9827a;border:6px solid #d69b8b;text-align:center;color:#f9eddc;font:9px/1.8 Georgia;padding:10px 0}.record-label span{display:block;font-size:26px;line-height:1.2}.record-label small{font-size:6px;letter-spacing:1px}.tonearm{position:absolute;right:-3px;top:0;width:15px;height:143px;background:#bdad91;border-radius:10px;transform:rotate(-20deg);transform-origin:top;box-shadow:3px 3px 0 #715c4430}.song-title{text-align:center;font:19px Georgia,serif}.song-artist,.music-status{text-align:center;font-size:10px;color:var(--muted)}.play{display:block;margin:24px auto 12px;background:var(--pink);color:white;width:49px;height:49px;border:0;border-radius:50%;font-size:16px}.wish-note{text-align:center;font:17px/2 "Noto Serif SC",serif;margin:30px 0;color:#a28775}.envelope{width:100%;height:230px;margin:38px 0;background:linear-gradient(150deg,transparent 49.5%,#dbc6ab 50%,transparent 50.5%),linear-gradient(210deg,transparent 49.5%,#dbc6ab 50%,transparent 50.5%),#ebddc8;border:1px solid #ddcbb1;box-shadow:0 15px 30px #6f513016;position:relative;color:var(--ink);transform:rotate(-3deg)}.envelope-to{position:absolute;left:24px;top:25px;font-family:serif;font-size:20px}.seal{display:grid;place-items:center;background:#ba7770;color:#f9e1c9;font-size:30px;width:53px;height:53px;border-radius:50%;margin:auto;box-shadow:0 0 0 4px #ba777055}.envelope-hint{position:absolute;bottom:20px;left:0;right:0;font-size:10px;letter-spacing:2px;color:#a08a70}.letter{background:#fffaf0;padding:30px 25px;border:1px solid var(--line);box-shadow:0 8px 25px #5c433009;margin:25px 0}.letter>small{font:8px Georgia;letter-spacing:2px;color:var(--muted)}.letter h2{font-size:20px;margin:27px 0}.letter p{font-family:"Noto Serif SC",serif;font-size:14px;line-height:2.3}.signature{text-align:right;font:16px/2.3 "Noto Serif SC",serif;margin-top:25px}.signature small{display:block;font:10px sans-serif;color:var(--muted)}.sample-note{font-size:9px;color:#b0a18c;border-top:1px dashed var(--line);padding-top:18px;margin-top:25px;line-height:1.8}.progress-line{display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}.progress-track{height:3px;background:#e9dfd1;margin:12px 0 25px}.progress-track i{display:block;width:0;background:var(--pink);height:100%;transition:width .4s}.gift-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.gift-box{aspect-ratio:.87;background:#eee0cf;border:1px solid #e6d4be;border-radius:7px;position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;overflow:hidden;color:#ac9179}.gift-box:nth-child(3n+2){background:#e9d5cc;border-color:#dec6bc}.gift-box:nth-child(3n){background:#e2e1d0;border-color:#d3d3bf}.box-art{width:53px;height:46px;background:#d6b28b;border-radius:3px;position:relative;margin-top:8px;box-shadow:0 5px 10px #7d583817}.box-art:before{content:'';position:absolute;left:-4px;right:-4px;height:12px;top:-5px;background:#e0be99;border-radius:3px;box-shadow:0 2px 2px #83644515}.box-art:after{content:'୨୧';position:absolute;left:17px;top:-28px;font-size:30px;color:#faf2e2;line-height:1;border-bottom:48px solid #f8ecd7;width:12px;text-indent:-15px}.box-number{font:8px Georgia;letter-spacing:2px;margin-top:20px}.gift-box.opened{background:#fffbf3;border-color:#e5daca}.gift-box img{width:80%;height:72px;object-fit:contain;mix-blend-mode:multiply}.gift-box .opened-name{font-size:8px;line-height:1.5;padding:4px 5px 0;color:#9c8773}.secret-note{text-align:center;color:#aa9277;font-size:10px;margin:24px 0 28px}.grand-lock{display:flex;align-items:center;gap:14px;width:100%;padding:19px 14px;border:1px solid #dfd2bf;border-radius:5px;background:#efe7da;color:#ac9a82;text-align:left}.grand-lock b{display:block;font-family:serif;font-weight:400;font-size:15px}.grand-lock small{display:block;font-size:9px;margin-top:6px}.grand-lock>span:last-child{margin-left:auto}.lock-icon{font-size:29px}.grand-lock.unlocked{background:var(--ink);color:#fff2dc;border-color:var(--ink);animation:pulse 2s infinite}.clue-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.clue-card{aspect-ratio:.8;background:#e8e9df;border:1px solid #d8dacc;border-radius:5px;padding:10px 5px;color:#a5aa96;display:flex;flex-direction:column;align-items:center;justify-content:center}.clue-card .question{font:32px Georgia;color:#b6bca7}.clue-card small{font:8px Georgia;letter-spacing:1px;margin-top:15px}.clue-card.available{border-color:#a2ac8b;background:#f0f0e4;box-shadow:0 0 0 3px #b8bea020;animation:pulse 2s infinite}.clue-card.revealed{background:#fffdf5}.clue-card img{width:100%;height:75px;object-fit:contain;mix-blend-mode:multiply}.clue-card .clue-name{font-size:9px;line-height:1.5;margin-top:8px;color:#78836d}.clue-caption{text-align:center;font-family:serif;font-size:14px;line-height:1.8;min-height:35px;margin:25px 0;color:#7b846d}.ticket-placeholder{border:1px dashed #c8ccbb;border-radius:7px;padding:22px 20px;text-align:center;color:#9ba38e;font-size:25px}.ticket-placeholder span{display:block;font-size:10px;line-height:1.9;margin-top:10px}.ticket-area{text-align:center;margin-top:36px}.ticket-topline{font:7px Arial;letter-spacing:1.5px;color:#8d9c8e}.ticket-area h2{font-size:23px;margin-bottom:10px}.ticket-area>p{font-size:10px;color:#8a988b;margin-bottom:23px}.ticket{position:relative;background:#fffdf4;border-radius:10px;overflow:hidden;box-shadow:0 10px 35px #4c6c6420;text-align:left}.ticket-content{padding:20px 18px 0}.ticket-heading{font:8px Arial;letter-spacing:1px;color:#75948e;display:flex;justify-content:space-between}.ticket-heading>span{font-size:18px}.route{display:flex;align-items:center;justify-content:space-between;margin:23px 0}.route small{display:block;font:8px Arial;letter-spacing:1px;color:#8b9b94}.route strong{display:block;font:30px/1.8 "Noto Serif SC",serif}.route>span{font-size:25px;color:#92aaa0;text-align:center}.route i{display:block;font-size:12px}.flight-details{display:flex;justify-content:space-between;padding-bottom:22px}.flight-details>span{font:7px Arial;color:#93a297;letter-spacing:1px}.flight-details b{display:block;font:11px Arial;margin-top:8px;color:#536e64;letter-spacing:0}.ticket-bottom{border-top:1px dashed #cad5c8;padding:18px 0;display:flex;justify-content:space-between;font-size:10px;color:#728677}.ticket canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none}.reveal-link{border:0;background:none;color:#8b9e90;font-size:10px;padding:18px}.final-message{margin:20px 0;animation:enter 1s}.final-message>span{font-size:35px;color:#b7a06c}.final-message p{font:12px/2.2 "Noto Serif SC",serif;color:#7b8a7e}.handwriting{font:20px/2.5 "Noto Serif SC",serif;margin-top:18px;color:#758f80}body.seaside{background:#edf2eb;transition:background 1.5s}dialog{border:1px solid #e8ddce;border-radius:10px;width:calc(100% - 44px);max-width:365px;padding:30px 26px;color:var(--ink);background:#fbf6ec;text-align:center;box-shadow:0 25px 90px #35281830}dialog::backdrop{background:#43382d60;backdrop-filter:blur(6px)}.modal-close{position:absolute;right:13px;top:10px;background:none;border:0;font-size:25px;color:#ae9982}dialog .eyebrow{font-size:7px;margin:10px 0 15px}.modal-spark{font-size:30px;color:#b89560}dialog img{width:100%;height:195px;object-fit:contain;mix-blend-mode:multiply;margin:10px 0}dialog h2{font-size:22px;line-height:1.6}dialog p{font-size:12px;line-height:1.9;color:#a08b78;margin-bottom:25px}#mystery-label{font-size:10px;color:var(--pink);letter-spacing:3px}#confetti{position:fixed;inset:0;pointer-events:none;z-index:100;overflow:hidden}.confetti-piece{position:absolute;top:-30px;width:7px;height:12px;animation:fall 2.6s ease-in forwards}[hidden]{display:none!important}@keyframes enter{from{opacity:0;transform:translateY(17px)}to{opacity:1;transform:translateY(0)}}@keyframes float{50%{transform:translateY(-10px) rotate(12deg)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.75}}@keyframes marquee{from{transform:translateX(320px)}to{transform:translateX(-650px)}}@keyframes fall{to{transform:translateY(110vh) rotate(600deg)}}@media(min-width:700px){body{padding-top:20px}header{padding-top:28px}main{padding-top:27px}.page{min-height:650px}body:before{content:'A LITTLE CELEBRATION';position:fixed;left:5%;top:50%;writing-mode:vertical-rl;letter-spacing:6px;font:10px Georgia;color:#b5a68f}body:after{content:'HAPPY BIRTHDAY, XU';position:fixed;right:5%;top:45%;writing-mode:vertical-rl;letter-spacing:6px;font:10px Georgia;color:#b5a68f}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;scroll-behavior:auto!important}}

/* A viewport-sized stage keeps every chapter within the phone screen. */
html{height:100%;height:100dvh}body{height:100%;padding:0;display:flex;flex-direction:column;overflow:hidden}body:before,body:after{display:none}header{width:100%;max-width:460px;flex:none;padding:14px 22px 9px}.brand{font-family:serif;font-size:16px;font-style:normal}.brand span{font-size:9px;letter-spacing:2px;margin-top:5px}.sound{width:32px;height:32px}main{width:100%;min-height:0;flex:1;overflow:hidden;padding:8px 24px 0}.page{height:100%;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:0 1px 6px}.page.active{display:flex;flex-direction:column}.eyebrow{font-size:10px;letter-spacing:2px;margin:7px 0 12px;flex:none}h1{font-size:27px;line-height:1.4;margin-bottom:9px;flex:none}.subtitle{font-size:11px;margin-bottom:16px;flex:none}.hero-title{font-size:34px;line-height:1.3;letter-spacing:2px;flex:none}.hero-title br{display:none}.hero-title>span{display:inline}.hero-title i{font-size:20px;margin-left:5px}.portrait-scene{height:clamp(150px,26dvh,235px);min-height:140px;flex:1;margin-top:17px}.portrait{width:135px;height:154px}.avatar{width:95px;height:95px;font-size:55px}.avatar-caption{font-size:12px}.hat{left:45px;top:-32px;width:52px;height:63px}.orbit{width:230px;height:155px}.birthday-stamp{width:74px;height:74px;font-size:8px;bottom:8px}.birthday-stamp b{font-size:11px}.flower{right:20px}.wishes{height:70px;min-height:70px;flex:none;margin:4px -24px 9px}.wishes span{padding:6px 11px}.wishes span:nth-child(4),.wishes span:nth-child(5){top:33px}.intro{font-size:16px;line-height:1.7;margin:0 0 14px;flex:none}.intro span{font-size:10px}.primary{padding:14px 17px;flex:none}.footnote{margin:10px 0 2px;font-size:9px;letter-spacing:1px;flex:none}footer{width:100%;flex:none;min-height:40px;padding:12px 24px max(12px,env(safe-area-inset-bottom));font-size:9px}footer>span{font-size:8px;letter-spacing:0}.record-wrap{width:clamp(150px,27dvh,235px);height:clamp(150px,27dvh,235px);flex:none;margin:13px auto 18px}.tonearm{height:115px}.song-title{font-family:serif;font-size:18px}.song-artist{margin:8px 0}.play{margin:12px auto 5px;width:42px;height:42px}.music-status{margin:6px 0}.wish-note{font-size:15px;line-height:1.8;margin:16px 0}.page[data-page="1"]>.primary{margin-top:auto}.envelope{height:210px;min-height:160px;flex:1;max-height:280px;margin:25px 0 35px}.letter{min-height:0;overflow-y:auto;flex:1;padding:20px;margin:8px 0 14px}.letter h2{margin:16px 0}.letter p{font-size:13px;line-height:2}.letter-next{margin-top:auto}.progress-track{margin:9px 0 15px;flex:none}.gift-grid{min-height:0;flex:1;gap:10px;grid-template-rows:repeat(3,minmax(85px,1fr));max-height:390px}.gift-box{aspect-ratio:auto;min-height:0}.box-art{transform:scale(.83);margin-top:6px}.box-number{font-size:8px;letter-spacing:1px;margin-top:12px}.gift-box img{height:60%;max-height:80px}.secret-note{font-size:9px;margin:13px 0;flex:none}.grand-lock{padding:13px 12px;flex:none}.grand-lock b{font-size:14px}.grand-lock small{font-size:9px}.clue-grid{gap:9px;flex:none}.clue-card{aspect-ratio:1.05;padding:7px 4px}.clue-card img{height:50px}.clue-card .clue-name{font-size:8px;margin-top:4px}.clue-card small{font-size:8px;letter-spacing:1px;margin-top:9px}.clue-caption{font-size:12px;min-height:20px;margin:13px 0}.ticket-placeholder{padding:14px}.ticket-area{margin-top:8px;flex:none}.ticket-topline{display:none}.ticket-area h2{font-size:19px;margin:8px 0}.ticket-area>p{font-size:10px;margin:8px 0 12px}.ticket-content{padding:14px 15px 0}.ticket-heading{font:9px sans-serif;letter-spacing:1px}.route{margin:12px 0}.route strong{font-size:27px;line-height:1.5}.route small{font-size:8px}.flight-details{padding-bottom:14px}.ticket-bottom{padding:13px 0}.reveal-link{padding:10px}.final-message{margin:5px 0 10px}.final-message>span{display:none}.final-message h2{font-size:20px}.final-message p{font-size:11px;line-height:1.8}.handwriting{font-size:17px;line-height:1.7;margin-top:9px}dialog{max-height:calc(100dvh - 35px);overflow:auto;padding:22px}dialog img{height:min(185px,28dvh)}
@media(max-height:700px){header{padding-top:10px}.eyebrow{margin:4px 0 8px}h1{font-size:24px}.subtitle{margin-bottom:10px}.hero-title{font-size:29px}.portrait-scene{min-height:130px}.portrait{transform:rotate(-5deg) scale(.87)}.wishes{height:60px;min-height:60px}.intro{margin-bottom:10px}.footnote{margin-top:7px}.wish-note{margin:10px 0;font-size:14px}.record-wrap{width:160px;height:160px;margin:8px auto 13px}.gift-grid{grid-template-rows:repeat(3,minmax(70px,1fr));gap:8px}.box-art{transform:scale(.7);margin-top:0}.box-number{margin-top:4px}.secret-note{margin:9px 0}.grand-lock{padding:10px}.clue-card img{height:40px}.clue-card{aspect-ratio:1.22}.clue-caption{margin:9px 0}.finale h1 br{display:none}.finale h1{font-size:23px}.finale .subtitle{font-size:10px}.route{margin:8px 0}.ticket-bottom{padding:10px 0}}

/* Birthday cake ritual */
body{transition:background 1s,color 1s}.cake-stage{position:relative;min-height:185px;flex:1;display:grid;place-items:center;isolation:isolate}.cake-art{position:relative;width:245px;height:200px;z-index:2;margin-top:28px}.cake-body{position:absolute;left:17px;top:92px;width:211px;height:92px;background:linear-gradient(90deg,#d89c90,#f0c6af 45%,#d79b89);border-radius:0 0 100px 100px/0 0 25px 25px;box-shadow:inset 0 -13px 0 #b87f7020,0 15px 20px #7b423415}.cake-body>span{position:absolute;top:37px;left:0;right:0;text-align:center;font-family:serif;color:#945d56;font-size:17px}.cake-top{position:absolute;left:17px;top:66px;width:211px;height:55px;border-radius:50%;background:#fff0dc;border:5px solid #f9e1cb;z-index:4;display:grid;place-items:center}.cake-top span{color:#ca877d;font:25px serif;transform:scaleY(.65)}.icing{position:absolute;top:0;left:0;right:0;height:27px;background:#fff0dc;border-radius:0 0 30% 30%}.icing:after{content:'';position:absolute;left:18px;top:10px;width:16px;height:30px;background:#fff0dc;border-radius:10px;box-shadow:42px 5px #fff0dc,94px -2px #fff0dc,149px 2px #fff0dc}.cake-berries{position:absolute;bottom:9px;left:0;right:0;text-align:center;color:#bc776d;font-size:12px}.cake-plate{position:absolute;top:164px;left:0;width:245px;height:38px;background:#ddd6bf;border:5px solid #eee7d5;border-radius:50%;z-index:-1;box-shadow:0 9px 13px #64503813}.candles{position:absolute;top:29px;left:60px;width:125px;display:flex;justify-content:space-between;z-index:5}.candle{position:relative;width:11px;height:56px;background:repeating-linear-gradient(35deg,#c88780 0 7px,#f7ddbd 7px 13px);border-radius:3px}.candle:nth-child(2){transform:translateY(-10px)}.candle:before{content:'';position:absolute;top:-6px;left:5px;height:7px;width:2px;background:#66523b}.flame{position:absolute;top:-30px;left:-3px;width:17px;height:26px;border-radius:50% 50% 40% 40%;background:radial-gradient(ellipse at 50% 80%,#fffbd2 15%,#ffd769 45%,#e99c47 70%);box-shadow:0 0 20px #ffbe5d,0 0 45px #ffd06b80;opacity:0;transform-origin:bottom;transition:opacity .4s}.lit .flame{opacity:1;animation:candle-flicker 1.6s ease-in-out infinite alternate}.candle:nth-child(2) .flame{animation-delay:-.7s}.candle:nth-child(3) .flame{animation-delay:-1.2s}.candle-glow{position:absolute;width:300px;height:300px;background:radial-gradient(ellipse,#f8be6340,transparent 67%);opacity:0;transition:opacity 1s;z-index:0}.lit .candle-glow{opacity:1}.cake-stars{position:absolute;top:8%;left:10%;right:10%;display:flex;justify-content:space-between;color:#bb9c6e;font-size:25px}.cake-stars span{margin-top:20px;font-size:14px}.cake-message{text-align:center;font:13px/1.9 serif;min-height:49px;margin:10px 0 14px;flex:none}.cake-controls{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;flex:none}.ritual-button{grid-column:span 2;border:1px solid #d8b7a3;border-radius:5px;background:#f1e3d4;color:#805e50;font-size:12px;padding:13px 3px}.ritual-button:nth-last-child(-n+2){grid-column:span 3}.ritual-button:disabled{opacity:.4}.ritual-button:not(:disabled):active{transform:scale(.97)}.cake-next{margin-top:12px}.cake-tip{font-size:9px;text-align:center;color:var(--muted);margin:13px 0 2px}.lights-out{background:#282b35;color:#f3e5d0}.lights-out .brand,.lights-out .sound{color:#eedcc5}.lights-out .brand span,.lights-out .eyebrow,.lights-out .subtitle,.lights-out .cake-tip,.lights-out footer>span,.lights-out #back{color:#bcb1a6}.lights-out .sound{border-color:#655e58}.lights-out .ritual-button{background:#3d3940;color:#f1dcc1;border-color:#766559}.lights-out .ambient{opacity:.14}.lights-out .cake-stage{filter:drop-shadow(0 0 15px #e1a85b12)}.smoke{position:absolute;top:-24px;left:1px;width:9px;height:22px;border-left:2px solid #c8c0ae;border-radius:50%;opacity:0}.blown .smoke{animation:candle-smoke 2.5s ease-out forwards}@keyframes candle-flicker{0%{transform:rotate(-5deg) scale(.95)}50%{transform:rotate(4deg) scale(1.04)}100%{transform:rotate(-2deg) scale(.98)}}@keyframes candle-smoke{10%{opacity:.8}100%{opacity:0;transform:translate(10px,-45px) scale(1.8)}}@media(max-height:700px){.cake-art{transform:scale(.82);margin-top:10px}.cake-stage{min-height:140px}.cake-message{margin:4px 0 8px;min-height:40px;font-size:12px}.ritual-button{padding:10px 3px}.cake-controls{gap:7px}.cake-next{padding:12px;margin-top:9px}.cake-tip{margin-top:9px}.cake-stars{top:0}}

/* Opening: a quiet, personal birthday invitation. */
.birthday-cover{position:relative;overflow:hidden!important;padding:0 5px 4px}.cover-top{display:flex;justify-content:space-between;align-items:center;border-top:1px solid #cbbba43d;padding-top:15px;color:#a08a74;font-size:10px;letter-spacing:2px;flex:none}.cover-top i{font-style:normal;font-size:17px;line-height:1}.cover-center{position:relative;flex:1;min-height:280px;display:flex;flex-direction:column;justify-content:center;align-items:center;isolation:isolate;padding-top:8px}.cover-halo{position:absolute;width:330px;height:330px;border-radius:50%;background:radial-gradient(ellipse,#eacbc575 0,#edd9cb40 42%,transparent 70%);z-index:-1;top:50%;left:50%;transform:translate(-50%,-55%)}.cover-prelude{font-family:serif;font-size:14px;letter-spacing:6px;margin:0 0 22px;color:#977b68;text-indent:6px}.cover-title{position:relative;flex:none;font-family:"Noto Serif SC","Songti SC","SimSun",serif;font-size:clamp(58px,10dvh,82px);font-weight:400;line-height:1.15;letter-spacing:10px;text-indent:10px;color:#614e40;margin:0}.cover-title span{display:block;color:#b47c72;margin-top:9px}.cover-title>i{position:absolute;right:-17px;bottom:5px;font-style:normal;font-size:38px;letter-spacing:0;color:#b47c72}.cover-divider{display:flex;gap:13px;align-items:center;color:#b48f7f;font:13px serif;margin:23px 0 15px}.cover-divider span{width:28px;height:1px;background:#ccb5a0}.cover-description{font-family:serif;text-align:center;font-size:13px;line-height:2;letter-spacing:3px;color:#9b8673;margin:0}.cover-spark{position:absolute;color:#b79a72}.spark-one{left:15px;top:28%;font-size:31px;transform:rotate(-12deg)}.spark-two{right:18px;top:52%;font-size:17px}.cover-ribbon{width:220px;height:65px;margin-top:12px;color:#b9897b;opacity:.65}.cover-ribbon svg{width:100%;height:100%}.cover-bottom{flex:none;padding-bottom:4px}.cover-wish-window{height:22px;overflow:hidden;text-align:center;margin:0 0 19px;mask-image:linear-gradient(transparent,#000 15%,#000 85%,transparent)}.cover-wish-track{animation:cover-wishes 15s ease-in-out infinite}.cover-wish-track span{display:block;height:22px;line-height:22px;font-family:serif;letter-spacing:2px;font-size:11px;color:#a28c78}.cover-open{display:flex;justify-content:space-between;align-items:center;background:#796453;color:#fff7eb;border-radius:2px;padding:17px 19px;box-shadow:none}.cover-open .cover-button-label{float:none;font-size:12px;letter-spacing:2px}.cover-open .cover-arrow{float:none;display:grid;place-items:center;width:26px;height:26px;border:1px solid #ffffff40;border-radius:50%;font-size:17px;line-height:1}.cover-note{text-align:center;font-size:9px;letter-spacing:1px;color:#b09c87;margin:13px 0 0}@keyframes cover-wishes{0%,25%{transform:translateY(0)}33%,58%{transform:translateY(-22px)}66%,91%{transform:translateY(-44px)}100%{transform:translateY(-66px)}}@media(max-height:700px){.cover-top{padding-top:9px;font-size:9px}.cover-center{min-height:235px}.cover-prelude{margin-bottom:15px;font-size:12px}.cover-title{font-size:57px;line-height:1.08}.cover-title span{margin-top:6px}.cover-divider{margin:15px 0 10px}.cover-description{font-size:12px;line-height:1.9}.cover-ribbon{height:40px;margin-top:5px}.cover-wish-window{margin-bottom:12px}.cover-open{padding:12px 17px}.cover-note{margin-top:10px}}

/* Twenty-five: portrait and a small birthday hat. */
.on-cover header{padding-top:21px;padding-bottom:12px}.on-cover header .sound{visibility:hidden}.on-cover .brand{font-size:17px;letter-spacing:1px}.on-cover footer .steps,.on-cover footer>span{visibility:hidden}.cover-top{border-top:0;padding-top:2px;font-size:10px}.cover-center{padding-top:20px;min-height:310px}.cover-avatar-wrap{position:relative;width:156px;height:156px;flex:none;margin:3px 0 24px}.cover-avatar{width:156px;height:156px;border-radius:50%;padding:7px;background:#fffaf2;box-shadow:0 12px 40px #9b706617,0 0 0 1px #d7c4ae70;overflow:hidden}.cover-avatar>span{display:grid;place-items:center;width:100%;height:100%;border-radius:50%;background:linear-gradient(145deg,#e8d7c9,#d9c0b4);font:52px serif;color:#a28071}.cover-avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover}.cover-birthday-hat{position:absolute;top:-30px;right:9px;width:55px;height:69px;transform:rotate(22deg);filter:drop-shadow(0 3px 2px #98665c20)}.cover-birthday-hat:before{content:'';position:absolute;inset:0;background:repeating-linear-gradient(25deg,#b97d74 0 11px,#edd6b4 11px 17px);clip-path:polygon(50% 0,100% 94%,0 94%)}.cover-birthday-hat:after{content:'';position:absolute;width:15px;height:15px;background:#e4c89b;border-radius:50%;top:-6px;left:20px;box-shadow:0 0 0 3px #f7edde}.cover-birthday-hat i{position:absolute;bottom:0;left:-3px;width:61px;height:9px;background:#e9d8be;border-radius:5px}.cover-age{position:absolute;right:-19px;bottom:3px;width:62px;height:62px;border-radius:50%;border:1px solid #c9b293;background:#f8f3e9;display:flex;align-items:center;justify-content:center;font:30px Georgia;color:#a4835e;transform:rotate(9deg)}.cover-age small{font:9px serif;margin:10px 0 0 3px}.cover-prelude{font-size:12px;letter-spacing:4px;margin:0 0 13px}.cover-title{font-size:42px;line-height:1.3;letter-spacing:5px;text-indent:5px;white-space:nowrap}.cover-title>i{font-size:19px;right:-20px;bottom:8px}.cover-divider{margin:17px 0 12px}.cover-ribbon{height:40px;margin-top:8px}.spark-one{left:10px;top:24%;font-size:28px}.spark-two{right:8px;top:43%}.cover-halo{width:350px;height:410px;transform:translate(-50%,-55%)}@media(max-height:700px){.on-cover header{padding-top:13px}.cover-center{min-height:275px;padding-top:17px}.cover-avatar-wrap{width:126px;height:126px;margin-bottom:18px}.cover-avatar{width:126px;height:126px;padding:6px}.cover-avatar>span{font-size:44px}.cover-birthday-hat{transform:rotate(22deg) scale(.85);transform-origin:bottom;top:-36px;right:4px}.cover-age{width:51px;height:51px;font-size:25px;right:-16px}.cover-prelude{margin-bottom:9px;font-size:11px}.cover-title{font-size:35px}.cover-divider{margin:12px 0 8px}.cover-ribbon{height:26px;margin-top:3px}.cover-description{font-size:11px}}

.cake-top span{font-family:Georgia,serif;font-size:36px;font-weight:bold;color:#bb7e70;transform:scaleY(.7);letter-spacing:2px}.cake-page>h1,.page[data-page="2"]>h1,.page[data-page="3"]>h1,.page[data-page="4"]>h1{margin-top:10px}

/* Flip cards and a keepsake boarding pass. */
.mystery-symbol{font:100px/1.3 Georgia,serif;color:#b89560;margin:20px 0}.clue-card{perspective:800px;overflow:visible;border:0!important;background:transparent!important;box-shadow:none!important;padding:0;animation:none!important;position:relative}.clue-inner{position:relative;display:block;width:100%;height:100%;transform-style:preserve-3d;transition:transform .7s cubic-bezier(.2,.65,.2,1)}.clue-card.revealed .clue-inner{transform:rotateY(180deg)}.clue-front,.clue-back{position:absolute;inset:0;border-radius:7px;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid #cbd0bf}.clue-front{background:repeating-linear-gradient(45deg,#e7e9dc 0 7px,#e3e6d8 7px 8px);box-shadow:inset 0 0 0 5px #edf0e5,inset 0 0 0 6px #c8cdb8;color:#8b977c}.clue-card.available .clue-front{border-color:#9cae85;background:#e6ebd9;box-shadow:inset 0 0 0 5px #f0f3e7,inset 0 0 0 6px #b2bf9d,0 3px 12px #63754d14}.clue-card:not(.available):not(.revealed) .clue-front{opacity:.6}.clue-front .question{font:31px Georgia;color:#99a585}.clue-front small{font-size:8px;letter-spacing:1px;margin-top:7px}.card-corner{position:absolute;top:9px;left:10px;font:9px Georgia}.card-ornament{position:absolute;bottom:7px;right:9px;font-size:12px}.clue-back{transform:rotateY(180deg);background:#fffdf5;border-color:#d6ddcb;overflow:hidden;padding:7px}.clue-back img{height:57%;width:95%;object-fit:contain}.clue-back .clue-name{font-size:8px;margin-top:6px;line-height:1.4;color:#758466}.ticket{border-radius:12px;background:#fffdf4;border:1px solid #d6dfcf;box-shadow:0 9px 28px #5d796b16}.ticket-content{padding:0}.ticket-heading{padding:13px 15px;display:flex;align-items:center;gap:9px;background:#e3ebdd;color:#526b58;font:11px serif;letter-spacing:1px}.ticket-heading .ticket-emblem{width:29px;height:29px;border:1px solid #a8b69d;border-radius:50%;display:grid;place-items:center;font-size:17px}.ticket-heading small{display:block;font:8px sans-serif;letter-spacing:1px;margin-top:4px;color:#8a9c80}.ticket-heading .ticket-badge{font:8px sans-serif;margin-left:auto;padding:5px 6px;border:1px solid #b7c2a7;border-radius:3px;white-space:nowrap}.route{margin:0;padding:15px 19px 13px;gap:12px}.route>div:last-child{text-align:right}.route strong{font:31px/1.45 serif;color:#405d4c;letter-spacing:4px}.route small{font:8px sans-serif;color:#96a08e;letter-spacing:1px}.route em{font:9px sans-serif;color:#899b80;display:block;margin-top:2px}.route .flight-path{display:flex;flex:1;align-items:center;justify-content:center;gap:5px;color:#a0b092;font-size:22px}.flight-path i{width:25%;height:1px;background:repeating-linear-gradient(90deg,#b9c5aa 0 3px,transparent 3px 6px)}.flight-details{padding:0 19px 14px}.flight-details>span{font:8px sans-serif;color:#9ba590;letter-spacing:1px}.flight-details b{font:11px sans-serif;color:#58704f;margin-top:6px}.ticket-tear{display:flex;align-items:center;justify-content:space-between;position:relative;border-top:1px dashed #bcc8af;height:15px;margin:0 0 1px}.ticket-tear>span{position:absolute;left:50%;top:-6px;transform:translateX(-50%);padding:0 8px;white-space:nowrap;background:#fffdf4;color:#9ca98f;font-size:8px}.ticket-tear>i{width:15px;height:15px;border:1px solid #d6dfcf;background:#edf2eb;border-radius:50%;position:relative;top:-7px}.ticket-tear>i:first-child{left:-8px}.ticket-tear>i:last-child{right:-8px}.ticket-bottom{border:0;padding:1px 19px 14px;align-items:center;gap:14px}.ticket-bottom small{display:block;font-size:8px;color:#9da88f;margin-bottom:5px}.ticket-bottom strong{display:block;font:15px serif;color:#697c59;letter-spacing:1px}.ticket-bottom div>span{display:block;font-size:8px;color:#a0a88e;margin-top:5px}.ticket-barcode{height:35px;width:54px;flex:none;opacity:.5;background:repeating-linear-gradient(90deg,#627854 0 1px,transparent 1px 3px,#627854 3px 5px,transparent 5px 6px,#627854 6px 7px,transparent 7px 10px)}@media(max-height:700px){.ticket-heading{padding:9px 13px}.route{padding:9px 15px}.route strong{font-size:27px}.flight-details{padding:0 15px 12px}.ticket-bottom{padding:0 15px 11px}.ticket-bottom strong{font-size:13px}.ticket-heading small{font-size:7px}.ticket-heading .ticket-badge{font-size:7px}}

/* Compact clues leave room for the honeymoon ticket. */
.clue-grid{width:100%;max-width:290px;align-self:center;gap:7px;margin:0 auto 13px}.clue-card{aspect-ratio:1.35}.clue-front .question{font-size:24px}.clue-front small{font-size:7px;margin-top:3px}.card-corner{font-size:8px;top:7px;left:8px}.card-ornament{font-size:10px;right:7px;bottom:5px}.clue-back{padding:5px}.clue-back img{height:54%;max-height:40px}.clue-back .clue-name{font-size:7px;margin-top:3px}.ticket-area{margin-top:3px}.ticket-area>h2{font-size:21px;line-height:1.6;margin:7px 0 9px}.finale>.subtitle{margin-bottom:13px}@media(max-height:700px){.clue-grid{max-width:265px;gap:6px;margin-bottom:9px}.clue-card{aspect-ratio:1.4}.clue-back img{max-height:32px}.ticket-area>h2{font-size:19px}}

/* Content starts directly, without a global header. */
main{padding-top:max(20px,env(safe-area-inset-top))}.birthday-cover .cover-top{padding-top:4px}

/* Ribbon-wrapped keepsakes, with a lighter presentation. */
.gift-grid{gap:12px}.gift-box{--wrap:#eadcd0;--lid:#f2e8df;--ribbon:#bd8d80;border:1px solid #e5dace;background:linear-gradient(145deg,#fffdf6,#f4eee4);border-radius:10px;overflow:visible;box-shadow:0 3px 12px #80624705;transition:transform .25s,box-shadow .25s}.gift-box:nth-child(3n+2){--wrap:#e7d4ce;--lid:#f0e0d9;--ribbon:#a87a76;background:linear-gradient(145deg,#fffaf5,#f3e9e3);border-color:#e6d9d0}.gift-box:nth-child(3n){--wrap:#d9ddcc;--lid:#e9ecde;--ribbon:#919c7f;background:linear-gradient(145deg,#fffdf5,#eef0e5);border-color:#dfe2d3}.gift-box:not(.opened):hover{transform:translateY(-3px);box-shadow:0 9px 20px #8062470d}.gift-wrap{position:relative;width:59px;height:48px;border-radius:2px 2px 4px 4px;background:linear-gradient(100deg,#ffffff25,transparent 50%,#00000008),var(--wrap);box-shadow:3px 6px 8px #71503b12,inset -3px 0 0 #00000004;margin-top:15px}.gift-lid{position:absolute;z-index:2;top:-5px;left:-4px;right:-4px;height:12px;background:var(--lid);border-radius:3px;box-shadow:0 2px 2px #68503d0e}.gift-ribbon{position:absolute;z-index:3;top:-5px;bottom:0;left:25px;width:9px;background:linear-gradient(90deg,#ffffff25,transparent 40%,#0000000a),var(--ribbon)}.gift-bow{position:absolute;z-index:4;left:25px;top:-13px;width:9px;height:9px;border-radius:50%;background:var(--ribbon)}.gift-bow i{position:absolute;bottom:3px;width:23px;height:14px;border:4px solid var(--ribbon);background:transparent}.gift-bow i:first-child{right:4px;border-radius:70% 70% 10% 65%;transform:rotate(24deg)}.gift-bow i:last-child{left:4px;border-radius:70% 70% 65% 10%;transform:rotate(-24deg)}.gift-tag{position:absolute;right:-8px;top:15px;width:22px;height:28px;border:1px solid #d7c7b4;border-radius:2px;background:#fffbef;transform:rotate(-13deg);display:grid;place-items:center;font:9px Georgia;color:#a28b72;z-index:5;box-shadow:0 2px 3px #71503b09}.gift-tag:before{content:'';position:absolute;top:-10px;left:8px;width:1px;height:12px;background:#bdac94;transform:rotate(-22deg)}.box-number{margin-top:16px;font:8px sans-serif;color:#ac9782;letter-spacing:1px}.gift-box.opened{background:#fffcf5;border:1px solid #e5dace;box-shadow:inset 0 0 0 4px #f7f1e7}.gift-box.opened img{border-radius:5px}.gift-box .opened-name{font-size:8px;color:#94816e;padding:5px 7px 0}@media(max-height:700px){.gift-grid{gap:9px}.gift-wrap{transform:scale(.8);margin-top:7px}.box-number{margin-top:8px;font-size:7px}.gift-box .opened-name{font-size:7px}}

.clue-preview{position:fixed;inset:0;z-index:90;background:#34403288;backdrop-filter:blur(7px);display:flex;align-items:center;justify-content:center;padding:24px;animation:enter .3s ease}.clue-preview-panel{width:100%;max-width:410px;text-align:center}.clue-preview-title{color:#f5f0df;font:14px/1.8 serif;letter-spacing:2px;margin:0 0 22px}.clue-preview-row{display:flex;gap:12px;justify-content:center;align-items:stretch}.clue-preview-card{background:#fffdf4;border:1px solid #d8dfca;border-radius:12px;flex:1;min-width:0;max-width:300px;padding:20px 14px;transform-origin:top left;box-shadow:0 15px 45px #15200f20}.clue-preview-card img{display:block;width:100%;height:clamp(150px,32dvh,270px);object-fit:contain;mix-blend-mode:multiply}.clue-preview-card span{display:block;font:14px/1.7 serif;color:#657650;margin-top:16px}.clue-preview-row:has(.clue-preview-card:nth-child(2)) .clue-preview-card{padding:16px 10px}.clue-preview-row:has(.clue-preview-card:nth-child(2)) img{height:clamp(125px,26dvh,220px)}.clue-preview-row:has(.clue-preview-card:nth-child(2)) span{font-size:12px}.clue-preview-done{margin-top:24px;background:#e5e9d8;color:#596a4b;text-align:center;box-shadow:none}

.unbox-scene{height:260px;display:grid;place-items:center;overflow:hidden}.unbox-present{position:relative;width:135px;height:120px;animation:unbox-wiggle 1.2s ease-in-out infinite}.unbox-body{position:absolute;left:7px;right:7px;bottom:0;height:88px;background:linear-gradient(110deg,#ecd7c1,#d5b79e);border-radius:3px 3px 7px 7px;box-shadow:0 12px 25px #866a4520}.unbox-body i{position:absolute;top:0;bottom:0;width:19px;background:#b68178;left:51px}.unbox-lid{position:absolute;top:24px;left:0;width:135px;height:23px;background:#eedfcd;border-radius:4px;z-index:3;box-shadow:0 4px 5px #7c54351a}.unbox-lid>i{position:absolute;inset:0 auto 0 58px;width:19px;background:#b68178}.unbox-lid:before,.unbox-lid:after{content:'';position:absolute;bottom:20px;width:42px;height:23px;border:7px solid #b68178;border-radius:70% 70% 15% 65%}.unbox-lid:before{right:66px;transform:rotate(22deg)}.unbox-lid:after{left:66px;transform:rotate(-22deg) scaleX(-1)}.unbox-light{position:absolute;left:48px;top:40px;font-size:43px;color:#c4a269;opacity:0;z-index:2}.opening .unbox-present{animation:none}.opening .unbox-lid{animation:unbox-lift .85s ease forwards}.opening .unbox-light{animation:unbox-shine .85s ease forwards}.gift-image-enter{animation:gift-picture .45s ease both}.gift-revealed #gift-name,.gift-revealed #gift-note,.gift-revealed #mystery-label,.gift-revealed .modal-done{animation:enter .4s ease both}@keyframes unbox-wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-3deg)}40%{transform:rotate(3deg)}60%{transform:rotate(-2deg)}}@keyframes unbox-lift{40%{transform:translateY(-25px) rotate(-6deg)}100%{transform:translate(15px,-105px) rotate(13deg);opacity:0}}@keyframes unbox-shine{0%{opacity:0;transform:scale(.3)}70%{opacity:1;transform:translateY(-35px) scale(1.4)}100%{opacity:0;transform:translateY(-65px) scale(2)}}@keyframes gift-picture{from{opacity:0;transform:translateY(16px) scale(.85)}to{opacity:1;transform:translateY(0) scale(1)}}

/* A quiet pet entrance, with no celebration cues. */
.pet-locked{background:#e9eee5}.pet-locked main,.pet-locked footer,.pet-locked>.ambient{display:none!important}.pet-entry{height:100dvh;width:100%;max-width:480px;margin:auto;display:flex;flex-direction:column;padding:30px 28px max(36px,env(safe-area-inset-bottom));color:#62715d;background:radial-gradient(ellipse at 50% 44%,#fafbf3,transparent 65%)}.pet-caption{font-size:12px;letter-spacing:3px;display:flex;align-items:center;gap:8px}.pet-dot{width:6px;height:6px;border-radius:50%;background:#9aaa88}.pet-space{position:relative;flex:1;min-height:300px;display:grid;place-items:center}.milk-frog{position:relative;display:block;width:290px;height:280px;border:0;background:none;padding:0;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.frog-character{position:absolute;inset:0;transform-origin:50% 78%;animation:frog-breathe 3s ease-in-out infinite}.frog-body{position:absolute;left:65px;top:118px;width:160px;height:137px;border-radius:48% 48% 44% 44%;background:#f5f3df;box-shadow:inset -9px -8px 0 #dddcc440,0 0 0 2px #cdd1b780}.frog-belly{position:absolute;left:30px;top:34px;width:100px;height:92px;border-radius:50%;background:#fffcf0}.frog-head{position:absolute;top:55px;left:45px;width:200px;height:123px;background:#f7f5e3;border-radius:48% 48% 45% 45%;box-shadow:inset -5px -7px 0 #e6e4cc66,0 0 0 2px #cdd1b780}.frog-eye{position:absolute;top:-22px;width:59px;height:65px;background:#f7f5e3;border-radius:50%;border-top:2px solid #cdd1b780}.eye-left{left:14px}.eye-right{right:14px}.frog-eye i{position:absolute;width:10px;height:16px;border-radius:50%;background:#596452;left:25px;top:28px}.frog-cheek{position:absolute;top:60px;width:25px;height:12px;border-radius:50%;background:#e6b5a780}.cheek-left{left:20px}.cheek-right{right:20px}.frog-mouth{position:absolute;left:82px;top:63px;width:37px;height:20px;border-bottom:3px solid #788369;border-radius:0 0 50% 50%;transition:all .15s}.frog-arm{position:absolute;top:165px;width:70px;height:29px;border-radius:50%;background:#efeed8;box-shadow:0 2px 0 #cdd1b780;z-index:3}.arm-left{left:49px;transform:rotate(35deg)}.arm-right{right:49px;transform:rotate(-35deg)}.frog-leg{position:absolute;top:230px;width:72px;height:29px;border-radius:50%;background:#ebe9d2;box-shadow:0 2px 0 #cdd1b780}.leg-left{left:38px;transform:rotate(-13deg)}.leg-right{right:38px;transform:rotate(13deg)}.frog-shadow{position:absolute;left:45px;bottom:5px;width:200px;height:22px;border-radius:50%;background:#8c9e7525;filter:blur(7px)}.pet-ground{position:absolute;bottom:15%;width:220px;height:1px;background:linear-gradient(90deg,transparent,#b0b9a1,transparent);pointer-events:none}.pet-ha{position:absolute;z-index:2;font:20px serif;letter-spacing:2px;color:#859473;opacity:0;pointer-events:none}.ha-one{left:10px;top:30%;transform:rotate(-17deg)}.ha-two{right:0;top:24%;transform:rotate(13deg)}.laughing .frog-character{animation:frog-laugh .24s ease-in-out infinite}.laughing .frog-mouth{left:77px;top:61px;width:47px;height:36px;border:0;background:radial-gradient(ellipse at 50% 110%,#d6978c 0 38%,#6f735b 40%);border-radius:7px 7px 50% 50%}.laughing .frog-eye i{width:20px;height:11px;left:19px;top:31px;border-top:3px solid #596452;background:transparent;border-radius:50%}.laughing .arm-left{transform:translate(26px,10px) rotate(-24deg)}.laughing .arm-right{transform:translate(-26px,10px) rotate(24deg)}.laughing .pet-ha{animation:pet-ha .65s ease-in-out infinite alternate}.laughing .ha-two{animation-delay:.2s}.pet-bottom{text-align:center;padding:15px 0}.pet-bottom h1{font:23px serif;letter-spacing:3px;margin:0 0 13px}.pet-bottom p{font-size:11px;letter-spacing:1px;color:#9aa68f;margin:0}.pet-unlock-icon{font-size:40px;color:#a6ad8b}#pet-unlock h2{font-size:20px;margin:20px 0 30px}#pet-unlock .primary{background:#899879;text-align:center}@keyframes frog-breathe{50%{transform:translateY(-4px) scaleY(1.015)}}@keyframes frog-laugh{0%,100%{transform:rotate(-6deg) translateY(0)}50%{transform:rotate(-1deg) translateY(-7px) scaleY(.97)}}@keyframes pet-ha{from{opacity:.45;translate:0 0}to{opacity:1;translate:0 -10px}}@media(max-height:650px){.pet-entry{padding-top:22px;padding-bottom:24px}.milk-frog{transform:scale(.85)}.pet-space{min-height:240px}}

#frog-animation{width:100%;height:100%;object-fit:contain;user-select:none;pointer-events:none}.milk-frog{width:min(345px,85vw);height:310px}.pet-ha,.pet-ground{display:none!important}.pet-space{background:radial-gradient(ellipse at 50% 75%,#a1aa8b18,transparent 45%)}

.pet-actions{display:flex;gap:10px;justify-content:center;flex:none;padding:16px 0}.pet-actions button{border:1px solid #cbd3bf;background:#f7f8ef;color:#758368;font-size:12px;letter-spacing:1px;border-radius:8px;padding:13px 16px;min-width:70px;box-shadow:0 2px 5px #75836808}.pet-actions button:active{transform:scale(.96);background:#e0e7d5}.pet-actions #pet-start{background:#899b78;color:#fffdf2;border-color:#899b78}

.pet-space{overflow:hidden;touch-action:none}.pet-space .milk-frog{position:absolute;width:min(280px,72vw);height:255px;transform:none!important;touch-action:none;cursor:grab}.pet-space .milk-frog:active{cursor:grabbing}.pet-actions{position:relative;z-index:1000}

/* Make the full rectangular pet area, including transparent edges, draggable. */
.pet-space .milk-frog{display:block;pointer-events:auto;isolation:isolate;overflow:visible;z-index:1}.pet-space .milk-frog:before{content:'';position:absolute;inset:0;z-index:2;background:transparent;pointer-events:auto}.pet-space .milk-frog img{pointer-events:none!important;display:block;width:100%;height:100%;-webkit-user-drag:none}.pet-space{padding:0}.pet-space .milk-frog:focus{outline-offset:0}

.pet-entry{position:relative}.pet-entry .pet-space{position:absolute;inset:0 0 100px;min-height:0}.pet-entry .pet-actions{margin-top:auto}

/* Pets roam across the whole viewport, not a centered phone-width column. */
.pet-entry{width:100%;max-width:none;margin:0}.pet-entry .pet-space{left:0;right:0;width:100%;overflow:hidden}.pet-entry .pet-actions{width:100%;max-width:460px;align-self:center}

.pet-entry .pet-space{max-width:none!important;position:fixed!important;inset:0 0 100px!important;width:100vw!important;height:calc(100dvh - 100px)!important}.pet-actions button:disabled{opacity:.5;cursor:default}.birthday-cover{isolation:isolate}.cover-wish-window{display:none}.birthday-barrage{position:absolute;inset:0 -30px;pointer-events:none;z-index:-1;overflow:hidden;mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}.barrage-lane{position:absolute;display:flex;width:max-content;gap:0;animation:barrage-flow var(--barrage-time) linear infinite;animation-delay:var(--barrage-delay)}.barrage-lane:nth-child(1){top:10%}.barrage-lane:nth-child(2){top:31%}.barrage-lane:nth-child(3){top:59%}.barrage-lane:nth-child(4){top:78%}.barrage-group{display:flex;align-items:center;gap:42px;padding-right:42px;flex-shrink:0}.barrage-group span{display:block;white-space:nowrap;font-size:10px;letter-spacing:1px;padding:8px 12px;border-radius:30px;color:#b19686;background:#f0e3d855;border:1px solid #dbcabb35}.cover-avatar-wrap{animation:cover-arrive 1s ease both}.cover-birthday-hat{animation:hat-welcome 1.3s ease both}.cover-title{animation:cover-arrive 1.2s .15s both}.cover-description{animation:cover-arrive 1.2s .3s both}.cover-center{background:radial-gradient(ellipse,#f8f3e9e8 0%,#f8f3e9bb 45%,transparent 75%)}.cover-bottom{padding-top:16px}@keyframes barrage-flow{to{transform:translateX(-50%)}}@keyframes cover-arrive{from{opacity:0;translate:0 18px}to{opacity:1;translate:0 0}}@keyframes hat-welcome{0%{opacity:0;translate:0 -18px;rotate:-15deg}70%{rotate:5deg}100%{opacity:1;translate:0 0;rotate:0deg}}

.birthday-barrage{z-index:5!important;pointer-events:none}.barrage-group span{background:#fff9f0c9;color:#b28e7a;border-color:#e2cfc080;box-shadow:0 2px 7px #a17d5c08}.pet-actions{gap:8px;flex-wrap:wrap}.pet-actions button{padding:12px 13px;min-width:58px}.pet-entry .pet-space{bottom:110px!important;height:calc(100dvh - 110px)!important}

.birthday-barrage{z-index:-1!important}.barrage-group span{background:#f0e3d855;color:#b19686;border-color:#dbcabb35;box-shadow:none}
