@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600&family=Playfair+Display:ital,wght@0,400;0,500;1,400;1,500&display=swap');
:root{--paper:#f6f3eb;--ink:#313b2e;--muted:#68705f;--line:#d5d8c9;--green:#43523b}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{margin:0;background:var(--paper);color:var(--ink);font-family:'DM Sans',sans-serif;font-size:16px}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}header,footer{max-width:1440px;margin:auto;padding:29px 5%;display:flex;align-items:center;justify-content:space-between}header{border-bottom:1px solid var(--line)}.brand{font-family:'Playfair Display',Georgia,serif;font-size:27px}.brand span{margin-left:9px;font-size:25px}.header-note,.eyebrow{font-size:12px;letter-spacing:2px;font-weight:500}.note-link{font-size:14px;border-bottom:1px solid;padding-bottom:5px}.hero{max-width:1440px;margin:auto;display:grid;grid-template-columns:1fr 1fr;min-height:740px;padding:54px 5% 76px;gap:7%}.hero-copy{padding:40px 0 10px}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:'Playfair Display',Georgia,serif;font-weight:400}h1{font-size:clamp(56px,6.2vw,90px);line-height:1.1;letter-spacing:-3px;margin:28px 0}em{font-weight:400;color:#6b765c}p{line-height:1.7}.intro{max-width:340px;color:var(--muted);font-size:17px}.button{display:inline-flex;gap:48px;align-items:center;margin-top:15px;background:var(--green);color:white;padding:18px 25px;border-radius:3px}.button:hover{background:#303e28}.tiny{font-size:12px;color:var(--muted);margin-top:22px}.flowers{margin:0;position:relative;align-self:stretch;min-height:570px}.flowers img{height:100%;width:100%;object-fit:cover;position:absolute;border-radius:210px 210px 3px 3px}.flowers figcaption{position:absolute;bottom:22px;left:24px;right:24px;background:#f6f3ebe8;padding:17px 12px;text-align:center;font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:20px}.photo-tag{position:absolute;right:-15px;top:57px;background:#e3e7d9;border:1px solid #c6cfb9;border-radius:50%;width:115px;height:115px;padding:32px 17px;text-align:center;transform:rotate(12deg);font-family:Georgia,serif;font-style:italic;line-height:1.5}.details{padding:75px 5% 95px;border-top:1px solid var(--line);max-width:1440px;margin:auto}.section-title{text-align:center}h2{font-size:clamp(35px,4vw,52px);line-height:1.2;letter-spacing:-1px;margin:18px 0}.section-title>p:last-child{color:var(--muted)}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:44px}.card{text-align:left;border:1px solid var(--line);background:transparent;padding:28px;cursor:pointer;transition:background .2s,transform .2s;border-radius:3px}.card:hover{background:#ecefdf;transform:translateY(-5px)}.card-no{font-size:12px;letter-spacing:1.3px}.symbol{display:block;font-size:43px;margin:27px 0;color:#66765c}.card h3{font-size:30px;line-height:1.25;max-width:240px;min-height:76px}.card-bottom{border-top:1px solid var(--line);padding-top:20px;font-size:14px;display:flex;justify-content:space-between;gap:8px}.birthday{background:#e7eadf;display:flex;justify-content:space-between;align-items:center;gap:35px;padding:65px max(5%,calc((100vw - 1296px)/2))}.birthday h2{font-size:72px}.birthday p{margin-bottom:0}.countdown{display:flex;align-items:center;justify-content:center;gap:22px;position:relative;padding-bottom:40px}.countdown div{text-align:center;min-width:70px}.countdown strong{font:52px 'Playfair Display',Georgia,serif;font-variant-numeric:tabular-nums}.countdown span{display:block;font-size:12px;letter-spacing:1.7px;margin-top:9px}.countdown i{font-style:normal;font-size:26px}.countdown>p{position:absolute;bottom:0;font-size:14px;width:100%;text-align:center;color:var(--muted)}.letter{text-align:center;padding:95px 25px;max-width:760px;margin:auto}.letter-star{display:block;font-size:37px;margin-top:26px}.letter h2{font-size:56px;margin:22px 0 30px}.letter p{color:var(--muted)}.signature{display:block;font-family:'Playfair Display',Georgia,serif;font-style:italic;font-size:22px;margin-top:35px}footer{border-top:1px solid var(--line);font-size:14px}dialog{border:1px solid var(--line);background:var(--paper);color:var(--ink);max-width:500px;width:calc(100% - 40px);padding:55px 38px 28px;border-radius:6px;text-align:center;box-shadow:0 20px 100px #25302130}dialog::backdrop{background:#26302375;backdrop-filter:blur(5px)}dialog p{font-family:'Playfair Display',Georgia,serif;font-size:27px;line-height:1.5;margin:25px 0}.close{position:absolute;right:15px;top:10px;border:0;background:none;font-size:32px;cursor:pointer;width:40px;height:40px}.dialog-heart{font-size:35px}a:focus-visible,button:focus-visible{outline:3px solid #7d885c;outline-offset:5px}@media(max-width:720px){header,footer{padding:22px 6%}.header-note{display:none}.brand{font-size:23px}.hero{padding:22px 6% 45px;grid-template-columns:1fr;gap:30px}.hero-copy{padding-top:22px}h1{font-size:62px;letter-spacing:-2px}.intro{max-width:100%}.flowers{min-height:430px;margin:0 10px 0 0}.photo-tag{width:100px;height:100px;padding:25px 12px;font-size:14px;top:25px}.details{padding:50px 6%}.cards{grid-template-columns:1fr;gap:15px;margin-top:30px}.card{padding:24px}.symbol{margin:18px 0;font-size:34px}.card h3{max-width:none;min-height:0;font-size:29px}.birthday{padding:45px 6%;display:block;text-align:center}.birthday h2{font-size:62px}.countdown{margin-top:32px;gap:16px}.countdown strong{font-size:44px}.letter{padding:65px 6%}.letter h2{font-size:44px}.letter br{display:none}.letter h2 br{display:block}footer>span{display:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.card{transition:none}}
/* Floating keepsakes, behind all interactive content. */
body{isolation:isolate}.rain{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:-1}.rain-item{position:absolute;top:-140px;left:var(--left);width:var(--size);height:var(--size);opacity:0;animation:keepsake-fall var(--duration) linear var(--delay) infinite;will-change:transform}.sticker{display:block;background-image:url('keepsakes.png');background-repeat:no-repeat;background-size:300% 100%;width:100%;height:100%}.sticker-flower{background-position:0% 50%}.sticker-cat{background-position:50% 50%}.sticker-pudding{background-position:100% 50%}.rain-item .sticker{animation:keepsake-sway 5s ease-in-out infinite alternate;filter:drop-shadow(0 4px 5px #43523b12)}@keyframes keepsake-fall{0%{transform:translate3d(0,-30px,0) rotate(-15deg);opacity:0}8%{opacity:.7}90%{opacity:.7}100%{transform:translate3d(var(--drift),calc(100dvh + 300px),0) rotate(30deg);opacity:0}}@keyframes keepsake-sway{from{transform:translateX(-15px) rotate(-12deg)}to{transform:translateX(15px) rotate(12deg)}}.rain-paused .rain-item,.rain-paused .rain-item .sticker{animation-play-state:paused}.rain-toggle{position:fixed;bottom:16px;right:16px;z-index:5;background:#f6f3ebed;border:1px solid var(--line);border-radius:30px;padding:12px 17px;font-size:14px;cursor:pointer;box-shadow:0 3px 18px #313b2e12}.hero-copy{background:radial-gradient(ellipse at center,#f6f3ebeb 35%,#f6f3eb00 72%)}.flower-dedication{align-self:center;text-align:center;padding:20px 0}.dedication-flower{width:300px;height:300px;max-width:100%;margin:0 auto 5px;filter:drop-shadow(0 15px 20px #53614615)}.flower-dedication p{font:32px/1.5 'Playfair Display',Georgia,serif;margin-bottom:25px}.flower-dedication .eyebrow{font-size:12px;letter-spacing:1px}.card{background:#f6f3ebdf}.section-title,.letter{background:radial-gradient(ellipse at center,#f6f3ebf5 35%,#f6f3eb00 75%)}.birthday{background:#e7eadfeb}header,footer{background:#f6f3ebba}@media(max-width:720px){.hero{gap:5px}.flower-dedication{padding:0 0 20px}.dedication-flower{width:220px;height:220px}.flower-dedication p{font-size:27px}.rain-item:nth-child(n+19){display:none}.rain-toggle{bottom:10px;right:10px;font-size:12px;padding:10px 14px}footer{padding-bottom:70px}}@media(prefers-reduced-motion:reduce){.rain-item,.rain-item .sticker{animation:none}.rain-item{top:var(--still-top);opacity:.3;transform:none}} 
/* Explicit, visible falling layer; content remains above it. */
.rain{z-index:0}header,main,footer{position:relative;z-index:1}.rain-item{animation:none!important;top:0;left:0;opacity:.7}.rain-item .sticker{animation:none!important}.rain-toggle{z-index:5}.album,.mini-game{max-width:1240px;margin:auto;padding:65px 5%}.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:45px}.photo-frame{margin:0;padding:13px 13px 20px;background:#fffef9;border:1px solid var(--line);box-shadow:0 12px 28px #313b2e12;transform:rotate(-3deg)}.photo-frame:nth-child(2){transform:rotate(2deg);margin-top:22px}.photo-frame:nth-child(3){transform:rotate(-1deg)}.photo-window{position:relative;aspect-ratio:3/4;background:#e8ebdf;overflow:hidden}.photo-window img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}.photo-window img[hidden]{display:none}.photo-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:42px;color:#68765f}.photo-placeholder small{font:14px 'DM Sans',sans-serif;margin-top:16px}.photo-frame figcaption{text-align:center;font:italic 24px 'Playfair Display',Georgia,serif;margin-top:20px}.mini-game{padding-top:80px}.game-toolbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:28px 0 16px}.game-toolbar .button{border:0;cursor:pointer;margin:0}.game-field{height:340px;position:relative;overflow:hidden;border:1px solid #bcc6ad;border-radius:14px;background:#e9eddfd9;box-shadow:inset 0 0 70px #fff9}.game-hint{position:absolute;inset:0;display:grid;place-content:center;text-align:center;color:var(--muted);margin:0;font-family:Georgia,serif;font-style:italic;font-size:22px}#game-rose{position:absolute;width:90px;height:90px;background:#ffffffe6;border:1px solid #bac6ac;border-radius:50%;padding:5px;cursor:pointer;box-shadow:0 5px 18px #33452820;touch-action:manipulation}#game-rose:hover{box-shadow:0 5px 25px #33452840}#game-rose:active{scale:.94}[hidden]{display:none!important}.surprise{text-align:center;background:#fffdf4;border:1px solid var(--line);border-radius:14px;padding:45px 20px;margin-top:20px}.surprise h3{font-size:42px}.surprise p{color:var(--muted)}.surprise .signature{font-size:23px}.hero{min-height:650px}@media(max-width:720px){.photo-grid{gap:16px;grid-template-columns:1fr;max-width:330px;margin:35px auto 0}.photo-frame:nth-child(2){margin-top:5px}.album,.mini-game{padding:45px 6%}.game-field{height:300px}.game-toolbar .button{padding:14px 18px;font-size:14px}.surprise h3{font-size:34px}}
/* A quieter scrapbook, with a proper little arcade. */
:root{--paper:#faf7f0;--green:#43583e;--ink:#2f3d2d}body{background:radial-gradient(ellipse at 90% 8%,#e6ecd9aa,transparent 36%),var(--paper)}header{padding-top:23px;padding-bottom:23px}.hero{min-height:620px;gap:5%}.hero h1{font-size:clamp(58px,6.5vw,92px)}.hero-actions{display:flex;gap:22px;align-items:center;flex-wrap:wrap}.subtle-link{font-size:14px;border-bottom:1px solid var(--line);padding:12px 0}.hero .tiny{font-size:14px}.rain-item{opacity:.44}.secret{font:inherit;color:inherit;border:0;background:none;cursor:pointer}.secret-flower{position:relative;width:100%;padding:0}.secret-flower .dedication-flower{transition:transform .4s}.secret-flower:hover .dedication-flower{transform:rotate(8deg) scale(1.04)}.secret-whisper{display:block;font:italic 16px Georgia,serif;margin:-4px 0 18px;color:#708061}.secret-small{min-width:44px;min-height:44px;font-size:28px;vertical-align:middle;color:#748558}.secret.discovered{color:#43583e}.secret-progress{max-width:800px;margin:30px auto 0;padding:25px;text-align:center;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.secret-progress .button{display:block;margin:20px auto 0;border:0;cursor:pointer}.album{border-top:1px solid var(--line)}.photo-frame{border-radius:3px}.photo-grid{gap:34px}.section-title{margin-bottom:25px}.mini-game{max-width:940px}.game-shell{border:1px solid #c9d1bd;padding:18px;background:#fffdf8e8;border-radius:24px;box-shadow:0 18px 60px #3345280d}.game-toolbar{margin:0 0 15px;font-size:16px;flex-wrap:wrap}.game-toolbar>span:first-child{font-weight:600}.game-toolbar button{background:#edf0e4;border:1px solid #d0d7c3;border-radius:20px;padding:10px 17px;cursor:pointer;min-height:44px}.game-toolbar button:disabled{opacity:.45;cursor:default}.catch-field{height:410px;position:relative;overflow:hidden;border-radius:14px;background:linear-gradient(180deg,#e4ebd9,#f4f3e8 75%,#d8e1c9);touch-action:none;outline-offset:4px}.catch-items{position:absolute;inset:0;pointer-events:none}.falling-treat{position:absolute;width:52px;height:52px;top:0;left:0;will-change:transform}#catcher{position:absolute;width:92px;height:82px;bottom:13px;transform:translateX(-50%);pointer-events:none}#catcher .sticker{height:72px}.basket-label{position:absolute;bottom:-3px;left:17px;right:17px;background:#526846;color:#fff;text-align:center;border-radius:5px 5px 18px 18px;font-size:20px;line-height:24px}.game-overlay{position:absolute;inset:0;z-index:2;background:#f5f4eaf5;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:20px}.game-mascot{width:105px;height:85px;flex-shrink:0}.game-overlay h3{font-size:32px;margin:12px 0}.game-overlay p{font-size:15px;color:var(--muted);margin:0;line-height:1.65}.game-overlay .button{border:0;cursor:pointer;margin-top:20px;padding:15px 24px}.catch-feedback{position:absolute;top:16px;left:0;right:0;text-align:center;pointer-events:none;font-size:16px;font-weight:600;color:#43583e}.game-controls{display:flex;align-items:center;justify-content:space-between;margin-top:15px;gap:10px}.game-controls button{width:64px;height:48px;border:1px solid #c2ccb5;background:#e8eddf;border-radius:13px;font-size:27px;cursor:pointer;touch-action:none}.game-controls p{text-align:center;font-size:14px;color:var(--muted);line-height:1.5;margin:0}.surprise{box-shadow:0 10px 35px #3345280d}.mobile-nav{display:none}.rain-toggle{min-height:44px}.letter h2{letter-spacing:-1.5px}.photo-window{border-radius:2px}.birthday{border-block:1px solid #d4dcc7}
@media(max-width:720px){header{padding:18px 6%}.hero{min-height:0;padding:30px 6% 35px;gap:12px}.hero-copy{padding-top:10px}.hero h1{font-size:clamp(49px,13.5vw,70px);line-height:1.06;letter-spacing:-2px;margin:22px 0}.hero .intro{font-size:16px;max-width:320px}.hero-actions{gap:12px 20px}.hero-actions .button{padding:16px 19px;gap:20px;font-size:15px}.hero .tiny{font-size:12px}.flower-dedication{padding-top:8px}.dedication-flower{width:160px;height:160px}.flower-dedication p{font-size:25px;margin-bottom:17px}.secret-whisper{font-size:14px}.photo-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;max-width:none;margin-top:27px}.photo-frame{padding:6px 6px 11px;transform:rotate(-3deg)}.photo-frame:nth-child(2){margin-top:15px}.photo-frame figcaption{font-size:16px;margin-top:12px;line-height:1.25}.photo-placeholder{font-size:28px}.photo-placeholder small{font-size:12px;text-align:center;padding:0 5px;line-height:1.35;margin-top:8px}.photo-frame .secret-small{display:block;margin:2px auto -5px;font-size:22px}.section-title h2{font-size:clamp(30px,8.5vw,40px);letter-spacing:-.8px}.section-title p{font-size:15px}.mini-game{padding:40px 4%}.game-shell{padding:12px;border-radius:18px}.game-toolbar{font-size:14px;gap:8px;margin-bottom:10px}.game-toolbar button{font-size:14px;padding:8px 12px}.catch-field{height:370px}.game-overlay h3{font-size:29px}.game-overlay p{font-size:14px}.game-controls button{width:57px}.game-controls p{font-size:12px}.details{padding-top:45px}.card{padding:24px}.birthday{padding-top:36px;padding-bottom:38px}.birthday h2{font-size:57px}.letter h2{font-size:43px}.mobile-nav{position:fixed;display:flex;bottom:0;left:0;right:0;z-index:4;justify-content:space-around;background:#faf7f0f5;backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:8px 8px calc(8px + env(safe-area-inset-bottom))}.mobile-nav a{font-size:14px;min-height:44px;display:flex;align-items:center;padding:0 14px}.rain-toggle{bottom:calc(75px + env(safe-area-inset-bottom));right:10px;font-size:12px;padding:9px 12px;background:#faf7f0d9}.rain-item{opacity:.36}footer{padding-bottom:145px}.secret-progress{padding:24px 15px;font-size:14px}html{scroll-padding-bottom:90px}}
@media(max-width:360px){.photo-grid{gap:6px}.photo-frame figcaption{font-size:14px}.header-note{display:none}.note-link{font-size:12px}.game-overlay h3{font-size:25px}.catch-field{height:350px}.mobile-nav a{font-size:13px;padding:0 10px}}
.mood-gallery{max-width:1200px;margin:auto;padding:60px 5%}.mood-filters{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:25px 0 30px}.mood-filters button{border:1px solid #cbd3bf;background:#faf8f1;padding:12px 18px;border-radius:30px;font:inherit;font-size:14px;cursor:pointer;min-height:44px}.mood-filters .active{background:#43583e;color:white;border-color:#43583e}.mood-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}.mood-tile{padding:9px 9px 16px;border:1px solid #d4d9ca;border-radius:8px;background:#fffdf7;text-align:left;cursor:pointer;box-shadow:0 7px 22px #33452809;transition:transform .2s}.mood-tile:hover{transform:translateY(-4px)}.mood-image{display:block;aspect-ratio:1;background-image:url('variety.png');background-repeat:no-repeat;background-size:300% 300%;border-radius:4px;margin-bottom:14px}.mood-tile>span:last-child{display:flex;justify-content:space-between;gap:6px;padding:0 5px;font-family:Georgia,serif;font-size:18px}.mood-tile i{font-style:normal;color:#708061}.mood-0{background-position:0 0}.mood-1{background-position:50% 0}.mood-2{background-position:100% 0}.mood-3{background-position:0 50%}.mood-4{background-position:50% 50%}.mood-5{background-position:100% 50%}.mood-6{background-position:0 100%}.mood-7{background-position:50% 100%}.mood-8{background-position:100% 100%}.love-section{max-width:850px;margin:35px auto;padding:60px 5%;text-align:center;background:#ecf0e3d9;border:1px solid #d4ddc7;border-radius:120px 120px 15px 15px}.love-section h2{font-size:clamp(36px,5vw,58px)}.love-arena{position:relative;width:100%;height:235px;max-width:520px;margin:0 auto}.love-arena button{min-width:100px;min-height:50px;border-radius:30px;cursor:pointer;font:inherit}.love-arena #love-yes{position:absolute;left:15%;top:42%;margin:0;border:0;padding:14px 24px}.love-arena #love-no{position:absolute;right:15%;top:42%;background:#fffdf7;border:1px solid #c8d2bd;padding:14px 24px;touch-action:none}.love-caption{font-size:14px;color:var(--muted);min-height:24px}.love-result{border-top:1px solid #ced7c2;padding:25px 10px 0}.love-spark{font-size:50px;color:#74875a}.love-result p{font:27px/1.5 'Playfair Display',Georgia,serif;min-height:80px;margin:10px 0}.love-result button{padding:12px 20px;border:1px solid #bccaae;border-radius:25px;background:#fffdf7;cursor:pointer;min-height:44px}.celebrate{animation:love-reveal .5s ease-out}@keyframes love-reveal{from{opacity:0;transform:translateY(12px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.fortune-section{max-width:750px;margin:35px auto 65px;padding:45px 6%;text-align:center}.fortune-section .button{border:0;cursor:pointer;margin:10px 0 24px}.fortune-section>p:last-child{font:italic 24px/1.6 Georgia,serif;color:#677759;min-height:78px;max-width:530px;margin:auto}.love-intro{color:var(--muted)}@media(max-width:720px){.mood-gallery{padding:40px 6%}.mood-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.mood-tile{padding:6px 6px 12px}.mood-tile>span:last-child{font-size:15px;line-height:1.3}.mood-filters{gap:7px;margin:20px 0}.mood-filters button{padding:10px 12px;font-size:13px}.mood-image{margin-bottom:10px}.love-section{margin:25px 4%;padding:45px 5%;border-radius:65px 65px 15px 15px}.love-section h2{font-size:39px}.love-arena{height:230px}.love-arena #love-yes{left:7%}.love-arena #love-no{right:7%}.love-result p{font-size:23px}.fortune-section{padding:35px 6%;margin-bottom:35px}.fortune-section>p:last-child{font-size:22px}.love-caption{font-size:13px}}
@media(prefers-reduced-motion:reduce){.celebrate{animation:none}.mood-tile{transition:none}}
.rain-photo{display:block;width:100%;height:100%;background-image:url('variety.png');background-size:300% 300%;background-repeat:no-repeat;border-radius:18px;border:3px solid #fffdf7;box-shadow:0 5px 14px #43523b17}.rain-extra{display:block;width:100%;height:100%;background-image:url('makeup-travel.png');background-size:300% 200%;background-repeat:no-repeat;filter:drop-shadow(0 3px 4px #43523b12)}.extra-0{background-position:0 0}.extra-1{background-position:50% 0}.extra-2{background-position:100% 0}.extra-3{background-position:0 100%}.extra-4{background-position:50% 100%}.extra-5{background-position:100% 100%}.flower-dedication .eyebrow{line-height:1.8;display:block}.love-result p{margin-bottom:0}
.roaming-cat{position:fixed;bottom:18px;left:0;width:72px;height:64px;z-index:3;pointer-events:none;will-change:transform}#walking-cat{width:72px;height:64px;padding:0;background:none;border:0;cursor:pointer;pointer-events:auto;touch-action:manipulation;border-radius:24px}.cat-avatar{display:block;font-size:53px;line-height:64px;filter:drop-shadow(0 4px 3px #45533720);transform:scaleX(var(--cat-facing,1));animation:cat-steps .45s ease-in-out infinite alternate}.roaming-cat.cat-talking .cat-avatar{animation-play-state:paused}.cat-bubble{position:absolute;bottom:76px;left:var(--bubble-left,0px);width:210px;max-width:calc(100vw - 24px);padding:14px 17px;border:1px solid #c8d3ba;border-radius:19px 19px 19px 5px;background:#fffdf7;box-shadow:0 7px 24px #3345281b;font-size:14px;line-height:1.5;color:#43583e;pointer-events:none}.cat-bubble::after{content:'';position:absolute;bottom:-6px;left:var(--bubble-tail,28px);width:10px;height:10px;background:#fffdf7;border-right:1px solid #c8d3ba;border-bottom:1px solid #c8d3ba;transform:rotate(45deg)}@keyframes cat-steps{from{translate:0 0;rotate:-2deg}to{translate:0 -4px;rotate:2deg}}@media(max-width:720px){.roaming-cat{bottom:calc(72px + env(safe-area-inset-bottom))}.rain-toggle{bottom:calc(148px + env(safe-area-inset-bottom))}}@media(prefers-reduced-motion:reduce){.cat-avatar{animation:none}}
/* Four distinct leg poses, played as a walk cycle instead of a sliding emoji. */
.cat-avatar{width:72px;height:64px;font-size:0;line-height:normal;background-image:url('cat-walk.png');background-size:400% 100%;background-repeat:no-repeat;background-position:0 0;transform:scaleX(var(--cat-facing,1));translate:none;rotate:none;animation:cat-walk-cycle .64s steps(4) infinite;image-rendering:auto}.roaming-cat.cat-talking .cat-avatar,.roaming-cat.cat-idle .cat-avatar{animation-play-state:paused}@keyframes cat-walk-cycle{from{background-position:0 0}to{background-position:133.333333% 0}}@media(prefers-reduced-motion:reduce){.cat-avatar{animation:none}}
.cat-avatar{position:absolute;bottom:-12px;left:0;height:96px;width:72px}

/* Position and gait use the same JS clock; CSS motion preferences cannot freeze only the legs. */
.cat-avatar{animation:none!important;background-size:288px 96px;background-position:0px 0px;transition:none!important}
.align-photo{--photo-angle:-9deg;transform:rotate(var(--photo-angle))!important;transition:transform .18s ease-out}.align-photo.aligned{border-color:#81966b;box-shadow:0 8px 28px #50683e1f}.align-label{display:block;text-align:center;font-size:14px;margin-top:16px;color:#5f7152}.align-status{display:block;text-align:center;font-size:12px;line-height:1.4;color:#677759;min-height:34px;margin-top:8px}#photo-angle{width:100%;margin:12px 0 0;accent-color:#637e4f;min-height:30px}#align-surface{touch-action:pan-y;cursor:grab}#align-surface:active{cursor:grabbing}#align-surface img{pointer-events:none;user-select:none}.secret-bouquet{display:flex;justify-content:center;gap:4px;margin:15px auto 20px}.secret-bouquet .bouquet-flower{width:62px;height:62px;opacity:.18;filter:grayscale(1);transition:opacity .4s,filter .4s,transform .4s}.secret-bouquet .collected{opacity:1;filter:none;transform:translateY(-4px)}#finale-dialog{width:calc(100% - 28px);max-width:580px;max-height:calc(100dvh - 32px);overflow-y:auto;padding:46px 26px 30px;border-radius:24px}#finale-dialog h2{font-size:40px;margin-bottom:5px}#finale-dialog .eyebrow{font:500 12px/1.6 'DM Sans',sans-serif;letter-spacing:1.5px;margin:0}.finale-close{position:absolute;right:10px;top:8px;min-width:44px;min-height:44px;background:none;border:0;font-size:30px;cursor:pointer}.delivery-stage{height:145px;position:relative;overflow:hidden;margin:15px 0}.delivery-cat{position:absolute;bottom:8px;left:0;width:120px;height:110px}.delivery-avatar{display:block;position:absolute;bottom:0;left:0;width:72px;height:96px;background:url('cat-walk.png') 0 0 / 288px 96px no-repeat}.delivery-flowers{position:absolute;right:0;bottom:10px;width:75px;height:95px;display:grid;grid-template-columns:1fr 1fr;gap:0}.delivery-flowers .sticker{width:43px;height:48px;filter:drop-shadow(0 2px 2px #43523b18)}#finale-dialog #delivery-status{font:15px/1.6 'DM Sans',sans-serif;margin:8px 0 18px}#delivery-skip{padding:12px 22px;min-height:44px;border:1px solid #c4d1b7;background:#edf1e4;border-radius:24px;cursor:pointer}#personal-message{border-top:1px solid #d2dbc7;padding-top:10px}#finale-dialog .finale-salutation{font:italic 26px Georgia,serif;text-align:left;margin:16px 0}#finale-dialog #personal-message-text{font:17px/1.9 'DM Sans',sans-serif;text-align:left;margin:15px 0}#finale-dialog .signature{font-size:23px;line-height:1.5;margin:22px 0 5px}@media(max-width:720px){.photo-grid{align-items:start}.align-label{font-size:12px;line-height:1.3}.align-status{font-size:12px}#photo-angle{min-height:38px}.secret-bouquet .bouquet-flower{width:52px;height:52px}#finale-dialog{padding:42px 21px 26px}#finale-dialog h2{font-size:33px}#finale-dialog #personal-message-text{font-size:16px}}@media(prefers-reduced-motion:reduce){.align-photo,.bouquet-flower{transition:none}}
/* A compact, overlapping bouquet; each bloom has its own step-synced motion. */
.delivery-flowers{right:-3px;bottom:28px;width:70px;height:77px;display:block;transform:rotate(-9deg);transform-origin:25% 90%}.delivery-flowers .sticker{position:absolute;left:0;top:0;width:48px;height:54px;transform-origin:50% 85%;will-change:transform;transition:none;filter:drop-shadow(0 2px 2px #43523b20)}.delivery-stage{height:160px}

/* Finale delivery polish: keep the bouquet compact and readable instead of
   making each flower shake independently while the cat walks. */
#finale-dialog .delivery-stage{
  height:148px;
  margin:10px 0 8px;
  overflow:hidden;
}
#finale-dialog .delivery-cat{
  bottom:7px;
  width:154px;
  height:112px;
}
#finale-dialog .delivery-avatar{
  left:7px;
  bottom:0;
}
#finale-dialog .delivery-flowers{
  right:1px;
  bottom:25px;
  width:84px;
  height:82px;
  display:block;
  transform:translateY(0) rotate(-2deg);
  transform-origin:38% 82%;
  will-change:transform;
}
#finale-dialog .delivery-flowers .sticker{
  position:absolute;
  width:50px;
  height:56px;
  left:auto;
  top:auto;
  opacity:.98;
  filter:drop-shadow(0 3px 4px #43523b1a);
  will-change:auto;
}
#finale-dialog .delivery-flowers .sticker:nth-child(1){left:13px;top:0;transform:rotate(-7deg) scale(.95)}
#finale-dialog .delivery-flowers .sticker:nth-child(2){left:35px;top:8px;transform:rotate(8deg) scale(.91)}
#finale-dialog .delivery-flowers .sticker:nth-child(3){left:2px;top:27px;transform:rotate(-12deg) scale(.91)}
#finale-dialog .delivery-flowers .sticker:nth-child(4){left:28px;top:29px;transform:rotate(4deg) scale(1)}
#finale-dialog .delivery-stage.is-delivered .delivery-flowers{
  filter:drop-shadow(0 5px 7px #43523b14);
}
@media(max-width:480px){
  #finale-dialog .delivery-stage{height:138px}
  #finale-dialog .delivery-cat{width:146px}
  #finale-dialog .delivery-flowers{right:0;bottom:24px;transform-origin:38% 82%}
}
@media(prefers-reduced-motion:reduce){
  #finale-dialog .delivery-flowers{transform:rotate(-2deg)!important}
}


/* Bouquet motion v3: the four blooms stay alive instead of looking frozen. */
#finale-dialog .delivery-flowers .sticker{
  transform-origin:50% 82%;
  animation:delivery-flower-alive 1.65s ease-in-out infinite;
}
#finale-dialog .delivery-flowers .sticker:nth-child(1){
  --flower-rot:-7deg;--flower-scale:.95;--flower-sway:-2px;--flower-lift:-3px;
  animation-delay:-.15s;
}
#finale-dialog .delivery-flowers .sticker:nth-child(2){
  --flower-rot:8deg;--flower-scale:.91;--flower-sway:2px;--flower-lift:-4px;
  animation-delay:-.75s;
}
#finale-dialog .delivery-flowers .sticker:nth-child(3){
  --flower-rot:-12deg;--flower-scale:.91;--flower-sway:-2px;--flower-lift:-2px;
  animation-delay:-1.15s;
}
#finale-dialog .delivery-flowers .sticker:nth-child(4){
  --flower-rot:4deg;--flower-scale:1;--flower-sway:2px;--flower-lift:-3px;
  animation-delay:-.45s;
}
@keyframes delivery-flower-alive{
  0%,100%{
    transform:translate(0,0) rotate(var(--flower-rot)) scale(var(--flower-scale));
  }
  35%{
    transform:translate(var(--flower-sway),var(--flower-lift)) rotate(calc(var(--flower-rot) + 2.5deg)) scale(calc(var(--flower-scale) + .025));
  }
  70%{
    transform:translate(calc(var(--flower-sway) * -.55),-1px) rotate(calc(var(--flower-rot) - 1.5deg)) scale(calc(var(--flower-scale) + .01));
  }
}

/* Once delivered, slow the motion down so the bouquet gently breathes. */
#finale-dialog .delivery-stage.is-delivered .delivery-flowers .sticker{
  animation-duration:2.8s;
}
#finale-dialog .delivery-stage.is-delivered .delivery-flowers .sticker:nth-child(1){animation-delay:-.4s}
#finale-dialog .delivery-stage.is-delivered .delivery-flowers .sticker:nth-child(2){animation-delay:-1.5s}
#finale-dialog .delivery-stage.is-delivered .delivery-flowers .sticker:nth-child(3){animation-delay:-2.1s}
#finale-dialog .delivery-stage.is-delivered .delivery-flowers .sticker:nth-child(4){animation-delay:-.9s}

@media(prefers-reduced-motion:reduce){
  #finale-dialog .delivery-flowers .sticker{animation:none!important}
}
