@font-face{font-family:QingKe;src:url('assets/zcool-kuaile-subset.woff2') format('woff2');font-display:swap}
:root{--pink:#f9dce8;--pink2:#ffeaf1;--cream:#fffaf7;--rose:#e579a5;--deep:#a64f75;--ink:#57364c;--muted:#9b7288;--line:#efbdd1;--shadow:0 24px 58px rgba(159,78,115,.14)}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;color:var(--ink);background:var(--pink);font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;overflow-x:hidden}
button{font:inherit;cursor:pointer}
button:focus-visible{outline:3px solid #b64676;outline-offset:4px}
img{display:block;max-width:100%}
.hidden{display:none!important}
.site-header{position:fixed;z-index:80;left:0;right:0;top:0;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:20px clamp(19px,4vw,54px);pointer-events:none}
.site-logo{pointer-events:auto;box-shadow:0 8px 24px rgba(131,72,104,.08);background:rgba(255,255,255,.82);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid rgba(255,255,255,.85);border-radius:99px}
.site-logo{display:flex;align-items:center;gap:10px;padding:8px 15px 8px 8px;font-size:13px;font-weight:750;white-space:nowrap}
.logo-mark{display:grid;place-items:center;width:29px;height:29px;border-radius:50%;background:#ef9fbe;color:white;font-size:20px;line-height:1}
.scene{display:none;position:relative;min-height:100vh;min-height:100svh;padding:92px clamp(20px,4vw,50px) 35px;overflow:hidden;isolation:isolate;align-items:safe center}
.scene.active{display:flex;animation:sceneIn .5s both}
.scene-inner{position:relative;width:min(1100px,100%);margin:auto}
.eyebrow,.letter-kicker,.ending-kicker{display:inline-flex;align-items:center;gap:8px;color:var(--deep);font-size:11px;font-weight:800;letter-spacing:.17em;line-height:1.5}
.mini-flower{font-size:18px;line-height:0}
h1,h2,p{margin-top:0}
h1,h2{font-family:QingKe,"PingFang SC",sans-serif;font-weight:400;letter-spacing:-.02em}
em{font-style:normal;color:var(--deep)}
.pill-button{border:0;min-height:54px;padding:14px 26px;border-radius:999px;font-weight:800;font-size:14px;letter-spacing:.015em;display:inline-flex;align-items:center;justify-content:center;gap:16px;transition:transform .25s,box-shadow .25s,background .25s;white-space:nowrap;touch-action:manipulation}
.pill-button:hover{transform:translateY(-3px)}
.pill-button:active{transform:translateY(1px)}
.pill-button span{font-size:17px;font-weight:400;line-height:1}
.pill-button.rose{color:white;background:linear-gradient(125deg,#d96b97,#e993b3 68%,#ebacc5);box-shadow:0 13px 25px rgba(204,86,133,.26),inset 0 1px 0 rgba(255,255,255,.32)}
.pill-button.rose:hover{box-shadow:0 18px 28px rgba(204,86,133,.3),inset 0 1px 0 rgba(255,255,255,.32)}
.pill-button.outline{color:var(--deep);background:rgba(255,255,255,.66);border:1px solid #e6b6c9;box-shadow:0 8px 22px rgba(168,89,124,.07)}
.button-row{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-top:31px}
.kitty-sticker{pointer-events:none;filter:drop-shadow(0 15px 10px rgba(93,41,65,.12));object-fit:contain}

/* Opening: a soft celebratory meter, never a diagnostic screen. */
.scene-luck{background:radial-gradient(ellipse at 83% 20%,#fff7fa 0,transparent 41%),radial-gradient(ellipse at 7% 88%,#ffeff4 0,transparent 40%),#f8dce8}
.scene-luck:before,.scene-cake:before,.scene-note:before,.scene-ask:before,.scene-count:before,.scene-deny:before,.scene-video:before,.scene-ending:before{content:"";position:absolute;inset:0;z-index:-1;background-image:radial-gradient(#d78faa 1px,transparent 1px);background-size:25px 25px;opacity:.13}
.intro-layout{display:grid;grid-template-columns:1.02fr .98fr;align-items:center;gap:clamp(10px,3vw,40px);min-height:540px}
.intro-copy{z-index:4;padding:20px 0 28px}
.intro-title{font-size:clamp(44px,5.4vw,78px);line-height:1.22;margin:22px 0 22px;white-space:nowrap}
.intro-desc{color:var(--muted);font-size:16px;letter-spacing:.03em;min-height:28px;margin-bottom:21px}
.luck-lines{min-height:108px;display:grid;align-content:start;gap:5px}
.luck-line{font-family:QingKe,"PingFang SC",sans-serif;font-size:clamp(25px,3vw,39px);line-height:1.35;color:#c46089;opacity:0;transform:translateY(16px) scale(.98);transition:opacity .65s,transform .65s}
.luck-line.visible{opacity:1;transform:none}
.luck-line.special{color:#9d3f68}
.cake-spark{font-family:system-ui;margin-left:9px;color:#ee9eaf;font-size:24px}
.reveal-button{opacity:0;pointer-events:none;transform:translateY(14px);transition:opacity .6s,transform .6s,box-shadow .25s}
.reveal-button.visible{opacity:1;pointer-events:auto;transform:none}
.intro-art{position:relative;height:550px;display:grid;place-items:center}
.soft-orbit{position:absolute;width:84%;aspect-ratio:1;border:1px dashed rgba(185,94,131,.24);border-radius:50%;transform:rotate(-10deg)}
.soft-orbit.two{width:98%;border-style:solid;border-color:rgba(255,255,255,.52);transform:rotate(18deg)}
.luck-orb{position:relative;width:clamp(285px,34vw,390px);aspect-ratio:1;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(circle at 28% 20%,rgba(255,255,255,.96) 0,rgba(255,255,255,.52) 15%,transparent 38%),radial-gradient(circle at 72% 72%,#f7a4c4 0,#ef85b0 33%,#f8c6d9 68%,#ffeef3 98%);border:3px solid rgba(255,255,255,.82);box-shadow:inset 0 0 32px rgba(255,255,255,.9),inset -20px -20px 36px rgba(208,93,140,.18),0 25px 60px rgba(183,75,118,.24),0 4px 0 rgba(255,255,255,.7);animation:orbFloat 4s ease-in-out infinite}
.luck-orb:before{content:"";position:absolute;inset:20px;border-radius:50%;border:1px solid rgba(255,255,255,.42)}
.luck-orb.over{animation:orbBurst .78s ease-out both,orbFloat 4s 1s ease-in-out infinite}
.orb-number{font-family:QingKe,sans-serif;color:white;text-shadow:0 5px 0 rgba(193,78,120,.22);font-size:clamp(85px,10vw,137px);line-height:1;letter-spacing:-.065em;z-index:1}
.orb-number span{font-size:.4em;letter-spacing:0;margin-left:3px}
.orb-small{z-index:1;color:white;font-weight:750;font-size:13px;letter-spacing:.22em;margin-top:7px}
.orb-asterisk{position:absolute;right:35px;top:30px;font-size:40px;color:white;opacity:.85;animation:spin 14s linear infinite}
.orb-gloss{position:absolute;top:25px;left:45px;width:87px;height:30px;background:rgba(255,255,255,.62);filter:blur(13px);transform:rotate(-29deg);border-radius:50%}
.orb-caption{position:absolute;font-size:11px;font-weight:800;letter-spacing:.22em;color:#a95276;z-index:2}
.orb-caption.top{top:50px;right:4%;transform:rotate(11deg)}
.orb-caption.top span{font-size:23px}
.orb-caption.bottom{bottom:44px;left:9%;transform:rotate(-8deg)}
.intro-kitty{position:absolute;width:clamp(94px,11vw,140px);right:0;bottom:22px;z-index:3;transform:rotate(10deg)}
.sticker-heart{position:absolute;font-size:55px;color:#e990b2;text-shadow:0 7px 0 rgba(255,255,255,.78);left:1%;top:80px;transform:rotate(-19deg)}
.ambient-word{position:absolute;bottom:-23px;left:2%;font:100px QingKe;color:rgba(255,255,255,.42);white-space:nowrap;pointer-events:none}

/* Cake */
.scene-cake{background:radial-gradient(circle at 67% 40%,#fffafc 0,transparent 49%),#fce5ee}
.cake-layout{display:grid;grid-template-columns:.8fr 1.2fr;grid-template-rows:auto auto;grid-template-areas:"copy visual" "action visual";column-gap:25px;align-items:center;min-height:540px}
.cake-copy{position:relative;z-index:3;grid-area:copy;align-self:end}
.cake-copy h2{font-size:clamp(49px,5.2vw,74px);line-height:1.24;margin:23px 0 17px}
.cake-copy p{color:var(--muted);font-size:17px;line-height:1.9}
.wish-action{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin-top:28px;grid-area:action;align-self:start}
.hold-button,.hold-button *{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.hold-button{position:relative;overflow:hidden;touch-action:none;min-width:270px}
.hold-button:before{content:"";position:absolute;inset:0;right:auto;width:var(--hold,0%);background:rgba(255,255,255,.28);transition:width .08s linear}
.hold-button>*{position:relative}
.hold-button i{font-size:19px;font-style:normal}
.wish-fallback{border:0;background:none;color:#a76585;text-decoration:underline;text-underline-offset:4px;font-size:12px;padding:7px 12px;cursor:pointer;touch-action:manipulation}
.wish-tip{min-height:22px;color:var(--muted);font-size:12px;letter-spacing:.08em;padding-left:10px}
.cake-visual{height:535px;position:relative;display:grid;place-items:center;isolation:isolate;grid-area:visual}
.cake-halo{position:absolute;width:480px;height:480px;border-radius:50%;background:radial-gradient(circle,#fff9fb 0,#fff4f8 53%,rgba(255,255,255,.05) 67%);box-shadow:0 0 0 1px rgba(255,255,255,.55),0 0 0 25px rgba(255,255,255,.16)}
.cake-body{position:absolute;width:355px;height:166px;top:270px;left:50%;transform:translateX(-50%);border-radius:0 0 47px 47px;background:linear-gradient(120deg,#da7197 0,#efa3bc 36%,#df7a9c 70%,#cb6088 100%);box-shadow:inset 0 -19px 0 rgba(188,68,113,.18),inset 10px 0 28px rgba(255,255,255,.19),0 22px 22px rgba(164,69,100,.15);z-index:3}
.cake-top{position:absolute;top:240px;left:50%;transform:translateX(-50%);width:355px;height:67px;z-index:5;border-radius:50%;background:radial-gradient(ellipse at 42% 37%,#fffefd 0,#fff6f9 46%,#f7d6e3 100%);border:4px solid #fff;box-shadow:0 8px 9px rgba(175,92,123,.12)}
.cream{position:absolute;top:50%;width:32px;background:#fff7fa;border-radius:0 0 20px 20px;box-shadow:2px 5px 8px rgba(218,131,163,.09)}
.cream.c1{height:43px;left:30px}.cream.c2{height:27px;left:100px}.cream.c3{height:47px;left:175px}.cream.c4{height:34px;left:260px}.cream.c5{height:30px;left:315px}
.drip{position:absolute;top:0;width:20px;height:38px;background:#fff6f9;border-radius:0 0 14px 14px}.drip.d1{left:52px}.drip.d2{left:190px;height:32px}.drip.d3{right:48px;height:43px}
.cake-heart,.cake-star{position:absolute;color:#f9c9d9;text-shadow:0 2px 3px rgba(141,56,91,.14)}.cake-heart{font-size:35px;left:105px;top:72px}.cake-star{font-size:30px;right:82px;top:83px}
.cake-plate{position:absolute;top:431px;width:420px;height:53px;border-radius:50%;background:linear-gradient(#fff,#fce3eb);box-shadow:0 17px 22px rgba(142,63,95,.15);z-index:2}
.candle{position:absolute;top:108px;left:50%;transform:translateX(-50%);width:25px;height:180px;z-index:6}
.candle-stick{position:absolute;top:60px;width:25px;height:122px;border-radius:8px 8px 3px 3px;background:repeating-linear-gradient(-35deg,#f4a6bc 0 10px,#fff2f5 10px 17px,#f4a6bc 17px 27px);border:2px solid #dc8da9;box-shadow:6px 5px 12px rgba(112,53,84,.17)}
.wick{position:absolute;top:51px;left:11px;width:3px;height:16px;background:#6e5260;z-index:3;border-radius:2px}
.flame{position:absolute;top:0;left:-7px;width:40px;height:57px;z-index:4;filter:drop-shadow(0 0 15px #ffbd73);animation:flameDance .78s ease-in-out infinite alternate;transform-origin:bottom center}
.flame:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 49% 68%,#fff9bd 0 14%,#ffe58a 25%,#ffac6f 59%,#f7836f 82%);border-radius:50% 50% 48% 48%/78% 78% 32% 32%;transform:rotate(45deg) scale(.85)}
.flame span{position:absolute;inset:15px 13px 5px;border-radius:50%;background:rgba(255,252,212,.95);filter:blur(3px)}
.cake-visual.extinguished .flame{animation:flameOut .45s both}
.smoke{position:absolute;top:-18px;left:-4px;font-size:37px;color:#bb829d;opacity:0;z-index:5;transform:rotate(90deg)}
.cake-visual.extinguished .smoke{animation:smokeRise 1.3s .2s both}
.floating-star{position:absolute;color:#d983a6;z-index:3;animation:twinkle 2.5s ease-in-out infinite}.floating-star.s1{top:90px;right:60px;font-size:36px}.floating-star.s2{top:200px;left:40px;font-size:25px;animation-delay:.7s}.floating-star.s3{bottom:74px;right:82px;font-size:29px;animation-delay:1.2s}
.cake-kitty{position:absolute;right:5px;bottom:18px;width:125px;z-index:8;transform:rotate(8deg)}
.mini-poster{position:absolute;padding:6px 6px 19px;background:white;box-shadow:0 16px 26px rgba(117,56,82,.14);transform:rotate(-10deg);z-index:1}
.mini-poster img{width:104px;height:112px;object-fit:cover}
.cake-poster{left:2px;top:70px}
.tiny-ribbon{position:absolute;top:90px;right:28px;font:45px QingKe;color:#e998b7;transform:rotate(14deg)}

/* Letter scenes */
.scene-note{background:radial-gradient(circle at 5% 12%,#fff6fa,transparent 40%),#f9dce8}
.friend-scene{background:radial-gradient(circle at 96% 9%,#fff7fa,transparent 43%),#f9dce8}
.note-layout{min-height:550px;display:grid;place-items:center}
.letter-card{position:relative;width:min(710px,100%);min-height:430px;padding:clamp(42px,6vw,70px);background:linear-gradient(147deg,#fffefd,#fff8fa);border:1px solid rgba(255,255,255,.98);border-radius:17px 52px 25px 44px;box-shadow:0 31px 65px rgba(150,71,104,.14),5px 6px 0 rgba(255,255,255,.45);transform:rotate(-1deg);z-index:3}
.letter-card:before{content:"";position:absolute;inset:14px;border:1px solid #f8d7e4;border-radius:13px 42px 20px 37px;pointer-events:none}
.tape{position:absolute;top:-19px;left:calc(50% - 54px);width:108px;height:37px;transform:rotate(2deg);background:rgba(255,213,227,.78);border-left:1px dashed rgba(234,162,186,.6);border-right:1px dashed rgba(234,162,186,.6);box-shadow:0 2px 3px rgba(178,99,132,.07)}
.letter-kicker{color:#bb7b99;letter-spacing:.15em}
.letter-kicker span{font-size:22px}
.letter-card h2{font-size:clamp(42px,5.7vw,72px);line-height:1.28;margin:28px 0 16px}
.letter-card p{max-width:480px;color:#89627a;font-size:17px;line-height:1.85}
.letter-card .button-row{position:relative;z-index:3}
.letter-doodle{position:absolute;right:70px;bottom:54px;font-size:39px;color:#edabc4;transform:rotate(13deg)}
.letter-doodle span{font-size:22px;margin-left:6px}
.ephemera{position:absolute;width:175px;padding:7px 7px 21px;background:#fff;box-shadow:0 18px 30px rgba(130,68,94,.18);z-index:4}
.ephemera img{width:100%;aspect-ratio:1;object-fit:cover;object-position:center}
.hello-ephemera{left:-26px;top:12px;transform:rotate(-10deg)}
.friend-ephemera{right:-26px;top:14px;transform:rotate(9deg)}
.flight-notice{display:block;margin-top:15px;min-height:24px;color:#b96f91;font:18px QingKe;opacity:0;transform:translateY(8px);transition:opacity .35s ease,transform .35s ease}
.flight-notice.visible{opacity:1;transform:translateY(0)}
.fly-away{animation:flyAway .6s ease-in forwards!important;pointer-events:none}

/* The ten-second joke */
.scene-ask{background:radial-gradient(circle at 92% 75%,#fff8fa 0,transparent 44%),#f8d9e7}
.ask-layout{min-height:530px;display:grid;place-items:center}
.ask-card{position:relative;width:min(690px,100%);padding:clamp(42px,5vw,66px);z-index:3;background:rgba(255,252,252,.89);border:1px solid white;border-radius:55px 20px 55px 20px;box-shadow:var(--shadow)}
.ask-card h2{font-size:clamp(45px,5.8vw,73px);line-height:1.25;margin:24px 0 18px}
.ask-card p{color:#9e7890;font-size:17px}
.ask-decoration{position:absolute;left:-12px;top:-5px;width:150px;height:150px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#eea7c2;color:white;transform:rotate(-13deg);box-shadow:0 10px 22px rgba(147,60,97,.16);z-index:4}
.ask-decoration span{font:72px/1 QingKe}.ask-decoration small{font-size:9px;font-weight:800;letter-spacing:.21em}
.ask-kitty{position:absolute;width:135px;right:-10px;bottom:1px;z-index:5;transform:rotate(10deg)}
.toast-layer{position:fixed;inset:0;z-index:20;pointer-events:none}
.joke-toast{position:absolute;padding:13px 20px;background:#fff;border:1px solid #f3b7ce;border-radius:50px;box-shadow:0 15px 28px rgba(155,70,110,.22);color:#b14e7a;font:22px QingKe;white-space:nowrap;animation:toastPop 2.8s both}

.scene-count{background:radial-gradient(circle at center,#fff8fa 0,#f8dce8 63%)}
.count-layout{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:540px;text-align:center}
.count-face{position:relative;width:clamp(245px,32vw,350px);aspect-ratio:1;display:grid;place-items:center;margin:30px auto 5px;border-radius:50%;background:conic-gradient(#df79a2 var(--progress,0%),rgba(255,255,255,.72) 0);box-shadow:0 21px 49px rgba(171,77,116,.16)}
.count-face:before{content:"";position:absolute;inset:12px;border-radius:50%;background:radial-gradient(circle at 32% 22%,#fff,#ffe8f0 70%);box-shadow:inset 0 5px 18px rgba(200,110,148,.14)}
.count-number{position:relative;font:clamp(100px,12vw,150px)/1 QingKe;color:#c5668e}
.count-dot{position:absolute;color:#d77b9e;animation:twinkle 2s infinite}.count-dot.d1{left:-25px;top:25px;font-size:36px}.count-dot.d2{right:-37px;top:50%;font-size:32px;animation-delay:.3s}.count-dot.d3{bottom:-18px;left:20%;font-size:30px;animation-delay:.9s}
.count-face.done{display:none}
.count-end{display:none;animation:popIn .6s both}.count-end.visible{display:block}
.count-end h2{font-size:clamp(50px,7vw,88px);line-height:1.25;margin:29px 0 16px}.count-end p{font-size:16px;color:#9a7189;margin-bottom:22px}
.angry-button{border:0;background:white;border-radius:50%;font-size:37px;display:grid;place-items:center;width:76px;height:76px;margin:auto;box-shadow:0 12px 25px rgba(156,78,115,.18);animation:angryRise 1.2s .5s both;transition:transform .2s}.angry-button:hover{transform:rotate(-13deg) scale(1.1)}

/* A real photo shower with one image per card */
.scene-photos{background:radial-gradient(circle at 50% 25%,#fff0f5,#f1b9d0 70%,#eba9c3)}
.photo-rain{position:absolute;inset:0;overflow:hidden}
.rain-card{position:absolute;top:0;left:var(--left);width:var(--width);padding:7px 7px 22px;background:#fffaf9;border-radius:4px;box-shadow:0 18px 25px rgba(98,38,71,.27);transform:translateY(-50vh) rotate(var(--rot));animation:cardFall var(--dur) var(--delay) cubic-bezier(.12,.64,.19,1) forwards;will-change:transform}
.rain-card img{width:100%;height:var(--height);object-fit:cover;object-position:center top;background:#efc1d2}
.rain-card:after{content:"JEN";position:absolute;bottom:4px;right:10px;font-size:10px;font-weight:900;color:#be849e;letter-spacing:.22em}
.photo-reveal{position:relative;z-index:5;width:min(510px,calc(100% - 12px));padding:42px clamp(30px,5vw,55px);margin:auto;text-align:center;background:rgba(255,250,252,.9);border:1px solid #fff;box-shadow:0 20px 70px rgba(105,37,72,.22);border-radius:38px;backdrop-filter:blur(13px);-webkit-backdrop-filter:blur(13px);opacity:0;transform:translateY(25px) scale(.96);pointer-events:none;transition:opacity .7s,transform .7s}
.photo-reveal.visible{opacity:1;transform:none;pointer-events:auto}
.photo-reveal h2{font:clamp(72px,9vw,120px)/1.1 QingKe;color:#81405f;margin:13px 0}.photo-reveal h2 em{color:#d66e97}.photo-reveal p{font-size:17px;color:#946a81;margin:0 0 25px}
.photo-sparkle{position:absolute;color:white;font-size:70px;z-index:4;filter:drop-shadow(0 4px 8px rgba(183,84,125,.19));pointer-events:none}.photo-sparkle.p1{top:11%;left:6%}.photo-sparkle.p2{bottom:10%;right:7%;font-size:45px}

.scene-deny{background:radial-gradient(circle at 22% 70%,#fff9fb 0,transparent 43%),#fae3ed}
.deny-layout{min-height:540px;display:grid;place-items:center}
.deny-card{position:relative;z-index:3;width:min(680px,100%);padding:clamp(48px,6vw,75px);border-radius:26px;background:#fff9fb;border:1px solid white;box-shadow:var(--shadow);transform:rotate(-1deg)}
.deny-card h2{font-size:clamp(51px,6.5vw,78px);line-height:1.3;margin:25px 0 30px}
.mobile-break{display:none}
.deny-poster{position:absolute;z-index:4;right:1%;bottom:-25px;width:150px;padding:7px 7px 20px;background:white;box-shadow:0 12px 30px rgba(123,60,91,.2);transform:rotate(10deg)}.deny-poster img{aspect-ratio:1;object-fit:cover}

.scene-video{background:radial-gradient(circle at 77% 20%,#fff8fa 0,transparent 43%),#f8deea}
.video-layout{text-align:center;max-width:850px}
.video-layout h2{font-size:clamp(45px,6vw,73px);line-height:1.2;margin:17px 0 24px}.video-star{color:#dc83a7;font:34px system-ui;margin-left:8px}
.video-shell{position:relative;margin:auto;max-width:750px;padding:9px;background:#fff;border:1px solid white;border-radius:26px;box-shadow:0 25px 55px rgba(130,55,88,.2)}
.video-shell video{display:block;width:100%;max-height:min(56vh,460px);background:#30202f;border-radius:18px;object-fit:contain}
.video-hint{font-size:13px;color:#98738a;margin:18px 0}

.scene-ending{background:radial-gradient(circle at 80% 15%,#fff8fa 0,transparent 40%),#f8dce8}
.ending-layout{display:grid;grid-template-columns:.55fr 1fr;align-items:center;gap:clamp(12px,3vw,50px);min-height:560px}
.ending-art{height:450px;position:relative;display:grid;place-items:center}
.ending-art:before{content:"";position:absolute;width:310px;height:310px;border-radius:50%;background:rgba(255,250,252,.72)}
.ending-poster{position:relative;width:255px;padding:8px 8px 29px;background:#fff;box-shadow:0 25px 38px rgba(138,66,98,.23);transform:rotate(-8deg)}.ending-poster img{aspect-ratio:1;object-fit:cover}
.end-heart{position:absolute;color:#d977a0;font-size:45px;filter:drop-shadow(0 5px 2px rgba(255,255,255,.7))}.end-heart.e1{top:17px;right:12px;transform:rotate(16deg)}.end-heart.e2{bottom:18px;left:18px;transform:rotate(-16deg)}
.ending-letter{position:relative;min-height:460px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:clamp(32px,5vw,61px);background:rgba(255,252,252,.88);border:1px solid white;border-radius:48px 22px 48px 22px;box-shadow:var(--shadow)}
.ending-letter:before{content:"";position:absolute;top:-15px;right:13%;width:100px;height:29px;background:rgba(243,172,196,.66);transform:rotate(7deg)}
.ending-letter h2{font-size:clamp(31px,3.3vw,46px);line-height:1.55;min-height:170px;margin:25px 0 15px}
.ending-letter p{font-size:17px;color:#a66584;min-height:48px;line-height:1.8;margin:0 0 20px}
.ending-letter h2.typing:after,.ending-letter p.typing:after{content:"|";color:#da749b;animation:blink .7s steps(1) infinite}

@keyframes sceneIn{from{opacity:0}to{opacity:1}}
@keyframes orbFloat{50%{transform:translateY(-11px)}}
@keyframes orbBurst{0%{transform:scale(1)}45%{transform:scale(1.16)}67%{transform:scale(.94)}100%{transform:scale(1)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes twinkle{50%{opacity:.35;transform:scale(.72)}}
@keyframes flameDance{0%{transform:rotate(-8deg) scale(.94)}100%{transform:rotate(7deg) scale(1.09)}}
@keyframes flameOut{to{opacity:0;transform:translateY(-16px) scale(.05)}}
@keyframes smokeRise{0%{opacity:0;transform:translateY(10px) rotate(90deg) scale(.7)}35%{opacity:.8}100%{opacity:0;transform:translateY(-78px) rotate(110deg) scale(1.6)}}
@keyframes flyAway{to{opacity:0;transform:translate(120vw,-90vh) rotate(48deg) scale(.3)}}
@keyframes toastPop{0%{opacity:0;transform:scale(.4) rotate(-15deg)}18%{opacity:1;transform:scale(1.1) rotate(4deg)}28%{transform:scale(1) rotate(var(--tilt))}79%{opacity:1}100%{opacity:0;transform:translateY(-25px) rotate(var(--tilt))}}
@keyframes popIn{0%{opacity:0;transform:scale(.9) translateY(15px)}100%{opacity:1;transform:none}}
@keyframes angryRise{from{opacity:0;transform:translateY(35px) scale(.6)}to{opacity:1;transform:none}}
@keyframes cardFall{0%{transform:translateY(-110vh) rotate(calc(var(--rot) - 22deg));opacity:0}5%{opacity:1}72%{transform:translateY(calc(var(--land) + 23px)) rotate(calc(var(--rot) + 4deg))}100%{transform:translateY(var(--land)) rotate(var(--rot));opacity:1}}
@keyframes blink{50%{opacity:0}}

@media(max-width:900px){
  .intro-layout{grid-template-columns:1fr .87fr}.intro-title{font-size:clamp(37px,5.4vw,58px)}.luck-orb{width:clamp(235px,35vw,310px)}.intro-art{height:440px}.intro-kitty{right:-8%;bottom:3px}
  .cake-layout{grid-template-columns:.85fr 1.15fr}.cake-visual{transform:scale(.82);transform-origin:center}
  .ending-layout{grid-template-columns:.43fr 1fr}.ending-poster{width:190px}.ending-art{height:350px}
}
@media(max-width:640px){
  .site-header{padding:13px 15px}.site-logo{font-size:12px;padding:6px 11px 6px 6px;gap:6px}.logo-mark{width:25px;height:25px;font-size:17px}
  .scene{padding:74px 18px 22px;align-items:safe center}.scene-inner{width:100%}.eyebrow,.letter-kicker,.ending-kicker{font-size:9px;letter-spacing:.13em}
  .intro-layout{min-height:unset;display:flex;flex-direction:column;justify-content:flex-start;gap:0;text-align:center}.intro-copy{padding:6px 0 0;order:1}.intro-title{font-size:clamp(36px,10vw,54px);line-height:1.15;white-space:normal;margin:10px 0 9px}.intro-desc{font-size:13px;margin:0 0 5px;min-height:19px}.luck-lines{min-height:72px;gap:0}.luck-line{font-size:clamp(24px,7vw,33px)}.intro-art{order:0;height:clamp(260px,40vh,355px);width:100%}.luck-orb{width:clamp(210px,28vh,280px)}.orb-number{font-size:clamp(80px,13vh,110px)}.orb-caption.top{top:7px;right:3%;font-size:9px}.orb-caption.bottom{bottom:8px;left:0;font-size:9px}.intro-kitty{width:93px;right:2%;bottom:6px}.sticker-heart{font-size:33px;top:20px;left:4%}.ambient-word{font-size:55px;bottom:-12px}.reveal-button{margin:12px auto 0}
  .cake-layout{display:flex;flex-direction:column;justify-content:flex-start;gap:0;text-align:center;min-height:unset}.cake-copy{order:0}.cake-copy h2{font-size:clamp(40px,10vw,58px);margin:9px 0 5px;line-height:1.19}.cake-copy p{font-size:13px;line-height:1.6;margin:0}.wish-action{position:relative;z-index:10;align-items:center;margin:0;gap:4px;order:2}.cake-visual{order:1;height:clamp(280px,41vh,345px);width:100%;transform:scale(.67);transform-origin:top center;margin-top:15px;margin-bottom:-50px}.cake-visual .cake-halo{top:-30px}.cake-visual .cake-body{top:148px}.cake-visual .cake-top{top:118px}.cake-visual .cake-plate{top:309px}.cake-visual .candle{top:12px}.cake-kitty{bottom:123px;right:-17px}.cake-poster{top:5px;left:-40px}.tiny-ribbon{top:35px;right:0}.floating-star.s1{top:30px}.floating-star.s2{top:140px}.floating-star.s3{bottom:150px}.hold-button{min-width:min(300px,100%);min-height:51px}.wish-tip{font-size:11px}
  .note-layout{min-height:520px;align-items:center}.letter-card{min-height:400px;padding:41px 28px 34px;border-radius:18px 35px 19px 32px;transform:none}.letter-card:before{inset:9px}.letter-card h2{font-size:clamp(40px,10vw,58px);margin:20px 0 13px;line-height:1.22}.letter-card p{font-size:14px;line-height:1.7}.letter-card .button-row{gap:10px;margin-top:24px}.letter-card .pill-button{width:100%}.flight-notice{font-size:15px;margin-top:11px}.letter-doodle{right:25px;bottom:18px;font-size:24px}.ephemera{width:95px;padding:4px 4px 12px}.hello-ephemera{left:-12px;top:0}.friend-ephemera{right:-13px;top:0}
  .ask-layout{min-height:510px}.ask-card{padding:54px 29px 36px;border-radius:37px 17px 37px 17px}.ask-card h2{font-size:clamp(41px,10vw,56px);margin:19px 0 13px}.ask-card p{font-size:14px;line-height:1.7}.ask-card .button-row{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:24px}.ask-card .pill-button{padding:11px 14px;font-size:13px;min-height:49px}.ask-decoration{width:80px;height:80px;top:-33px;left:0}.ask-decoration span{font-size:39px}.ask-decoration small{font-size:6px}.ask-kitty{width:90px;right:0;bottom:-10px}.joke-toast{font-size:17px;padding:11px 15px}
  .count-layout{min-height:530px}.count-face{width:clamp(235px,32vh,310px)}.count-end h2{font-size:clamp(42px,10vw,65px)}.count-end p{font-size:14px}
  .rain-card{padding:5px 5px 16px}.rain-card img{height:var(--height)}.rain-card:after{font-size:7px;bottom:3px}.photo-reveal{padding:31px 24px;border-radius:26px}.photo-reveal h2{font-size:73px}.photo-reveal p{font-size:13px}
  .deny-layout{min-height:510px}.deny-card{padding:53px 29px 42px}.deny-card h2{font-size:clamp(42px,9vw,56px)}#denySecond h2{font-size:clamp(30px,8vw,38px);line-height:1.45}.mobile-break{display:inline}.deny-poster{width:86px;right:-7px;bottom:0}
  .video-layout h2{font-size:clamp(43px,10vw,60px);margin:10px 0 20px}.video-shell{padding:6px;border-radius:17px}.video-shell video{border-radius:12px;max-height:52vh}.video-hint{font-size:12px}
  .ending-layout{display:flex;flex-direction:column;gap:0;min-height:unset}.ending-art{height:clamp(180px,29vh,250px);width:100%;order:0}.ending-art:before{width:210px;height:210px}.ending-poster{width:clamp(145px,21vh,195px);padding:5px 5px 15px}.end-heart.e1{right:15%;top:5px;font-size:29px}.end-heart.e2{left:10%;bottom:5px;font-size:26px}.ending-letter{order:1;width:100%;min-height:350px;padding:30px 26px;border-radius:32px 17px 32px 17px}.ending-letter h2{font-size:clamp(26px,6.6vw,38px);min-height:130px;margin:16px 0 8px;line-height:1.53}.ending-letter p{font-size:14px;min-height:45px;margin-bottom:16px}
}
@media(max-width:400px){.intro-art{height:245px}.luck-orb{width:200px}.intro-title{font-size:35px}.luck-line{font-size:24px}.cake-visual{height:330px;margin-bottom:-40px}.cake-copy h2{font-size:39px}.letter-card{min-height:385px}.ending-art{height:175px}.ending-poster{width:142px}.ending-letter h2{font-size:26px}}
@media(max-height:700px) and (min-width:641px){.scene{padding-top:72px;padding-bottom:15px}.intro-layout,.cake-layout,.count-layout,.ending-layout{min-height:500px}.intro-art{height:440px}.luck-orb{width:295px}.cake-visual{transform:scale(.82)}.cake-copy h2{font-size:56px}.ending-art{height:360px}.ending-letter{min-height:430px}}
@media(max-height:680px) and (max-width:640px){.scene{padding-top:65px;padding-bottom:14px}.intro-art{height:210px}.luck-orb{width:185px}.orb-number{font-size:78px}.intro-title{font-size:34px}.luck-lines{min-height:60px}.luck-line{font-size:23px}.cake-visual{height:295px;margin-bottom:-45px;transform:scale(.59)}.cake-copy h2{font-size:35px}.note-layout,.ask-layout,.count-layout,.deny-layout{min-height:475px}.letter-card{padding:35px 25px 27px;min-height:365px}.ending-art{height:150px}.ending-poster{width:130px}.ending-letter{min-height:325px;padding:26px}.ending-letter h2{font-size:24px;min-height:113px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
