:root{--bg:#140e10;--bg-2:#24161c;--paper:#f3eadc;--paper-2:#e7d6c4;--ink:#2a1810;--ink-soft:#6a5044;--rose:#9c3d4a;--rose-deep:#7a2430;--rose-soft:#c46b74;--gold:#c4a574;--gold-dim:#8a7350;--water:#7ea8b8;--serif:"Cormorant Garamond", Georgia, "Times New Roman", serif;--sans:"Manrope", system-ui, sans-serif}*,:before,:after{box-sizing:border-box}html,body{background:var(--bg);min-height:100%;color:var(--paper);margin:0}body{font-family:var(--sans);min-height:100dvh;overflow-x:hidden}body.is-locked{overflow:hidden}#app{min-height:100dvh;position:relative}button,input{font:inherit}button{cursor:pointer;color:inherit;touch-action:manipulation;background:0 0;border:0}.vignette{pointer-events:none;z-index:0;background:radial-gradient(at 50% 20%,#9c3d4a2e,#0000 42%),radial-gradient(at 50% 110%,#0000008c,#0000 50%);position:fixed;inset:0}.fall{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.fall-petal{top:-12vh;left:var(--x);width:var(--size);opacity:var(--op);filter:blur(var(--blur)) drop-shadow(0 8px 10px #280a1047);animation:fall-sway var(--dur) linear infinite;animation-delay:var(--delay);will-change:transform;position:absolute}.fall-svg{fill:currentColor;width:100%;height:auto;display:block}.fall-center{fill:#efd08a}@keyframes fall-sway{0%{transform:translate3d(0, -8vh, 0) rotate(var(--rot))}25%{transform:translate3d(var(--sway), 22vh, 0) rotate(calc(var(--rot) + 55deg))}50%{transform:translate3d(calc(var(--sway) * -1), 52vh, 0) rotate(calc(var(--rot) + 140deg))}75%{transform:translate3d(calc(var(--sway) * .6), 78vh, 0) rotate(calc(var(--rot) + 230deg))}to{transform:translate3d(0, 118vh, 0) rotate(calc(var(--rot) + 360deg))}}.shell{z-index:1;min-height:100dvh;padding:max(20px, env(safe-area-inset-top)) 20px max(24px, env(safe-area-inset-bottom));justify-content:center;align-items:center;display:flex;position:relative}.shell:has(.letter){align-items:flex-start}.stage{width:min(100%,420px);animation:.7s both rise;overflow:visible}.stage:has(.letter){width:min(100%,440px)}@keyframes rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}.card{background:linear-gradient(180deg, #ffffff47, transparent 28%), repeating-linear-gradient(0deg, transparent, transparent 2px, #2a181004 3px), var(--paper);color:var(--ink);border-radius:8px;padding:36px 28px 32px;position:relative;overflow:visible;box-shadow:inset 0 1px #fff6,0 24px 60px #00000073,0 0 0 1px #c4a57438}.card:before{content:"";pointer-events:none;border:1px solid #8a735047;border-radius:2px;position:absolute;inset:10px}.kicker,.step{letter-spacing:.28em;text-transform:uppercase;color:var(--gold-dim);text-align:center;margin:0 0 18px;font-size:11px}h1{font-family:var(--serif);text-align:center;letter-spacing:-.02em;margin:0;font-size:clamp(36px,11vw,52px);font-weight:600;line-height:.95}.lastname{letter-spacing:.34em;text-transform:uppercase;color:var(--gold-dim);margin-top:12px;font-size:.42em;font-weight:500;display:block}.lede{text-align:center;color:var(--ink-soft);margin:22px 0 0;font-size:15px;line-height:1.55}.rule{background:var(--gold);opacity:.7;width:48px;height:1px;margin:22px auto}.seal-wrap{justify-content:center;margin-top:28px;display:flex}.seal{width:96px;height:96px;color:var(--paper);border-radius:50%;position:relative;box-shadow:0 10px 20px #7a243059}.seal-half{width:50%;height:100%;position:absolute;top:0;overflow:hidden}.seal-half.left{left:0}.seal-half.right{left:50%}.seal-face{background:radial-gradient(circle at 35% 30%, #c45c66, var(--rose-deep) 62%, #4c1218);border-radius:50%;width:96px;height:96px;position:absolute;top:0;box-shadow:inset 0 2px 4px #fff3}.seal-half.left .seal-face{left:0}.seal-half.right .seal-face{right:0}.seal-letter{font-family:var(--serif);font-size:36px;font-style:italic;line-height:1;position:absolute;top:52%;left:50%;transform:translate(-50%,-50%)}.seal-crack{opacity:0;z-index:2;pointer-events:none;background:linear-gradient(#0000,#3a0d12 10%,#f3eadc 50%,#3a0d12 90%,#0000);width:2px;height:0;margin-left:-1px;position:absolute;top:8%;left:50%}.wax-bit{opacity:0;pointer-events:none;z-index:3;background:#9c3d4a;border-radius:60% 40% 50% 50%;width:7px;height:6px;margin:-3px;position:absolute;top:50%;left:50%}.seal:hover:not(.is-breaking),.seal:focus-visible:not(.is-breaking){transform:scale(1.04)}.seal:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.seal.is-breaking{pointer-events:none;box-shadow:none}.seal.is-breaking .seal-crack{animation:.22s forwards crack-grow}.seal.is-breaking .seal-half.left{animation:.95s cubic-bezier(.2,.8,.2,1) forwards seal-left}.seal.is-breaking .seal-half.right{animation:.95s cubic-bezier(.2,.8,.2,1) forwards seal-right}.seal.is-breaking .wax-bit{animation:.85s ease-out forwards wax-fly;animation-delay:calc(80ms + var(--a) * 35ms)}@keyframes crack-grow{to{opacity:1;height:84%}}@keyframes seal-left{0%{transform:none}18%{transform:translate(-3px)rotate(-6deg)}to{opacity:0;transform:translate(-92px,54px)rotate(-42deg)}}@keyframes seal-right{0%{transform:none}18%{transform:translate(3px)rotate(7deg)}to{opacity:0;transform:translate(96px,48px)rotate(38deg)}}@keyframes wax-fly{0%{opacity:1;transform:rotate(calc(var(--a) * 40deg)) translateY(0) scale(1)}to{opacity:0;transform:rotate(calc(var(--a) * 40deg)) translateY(-108px) scale(.25)}}.seal-caption{letter-spacing:.18em;text-transform:uppercase;color:var(--gold-dim);margin-top:10px;font-size:11px;transition:opacity .4s;display:block}.card:has(.seal.is-breaking) .seal-caption{opacity:0}.buds{justify-content:center;gap:10px;margin-bottom:18px;display:flex}.bud{border:1px solid var(--gold-dim);opacity:.35;border-radius:50% 50% 50% 0;width:9px;height:9px;transform:rotate(-45deg)}.bud.is-on{opacity:1;background:var(--rose);border-color:var(--rose)}h2{font-family:var(--serif);text-align:center;margin:0 0 8px;font-size:32px;font-weight:600}.vase-wrap,.care-scene{justify-content:center;min-height:280px;margin:12px 0 8px;display:flex;position:relative}.vase-svg{width:210px;height:300px;overflow:visible}.stem-long,.stem-short,.offcut{fill:none;stroke:#4f7348;stroke-width:2.1px;stroke-linecap:round}.stem-short,.offcut,.plant.is-cut .stem-long{opacity:0}.plant.is-cut .stem-short{opacity:1}.plant.is-cut .offcut{animation:.7s ease-in forwards stem-fall}.plant-1 .head{transform:translate(86px,58px)rotate(-16deg)}.plant-2 .head{transform:translate(120px,38px)scale(1.18)}.plant-3 .head{transform:translate(170px,56px)rotate(14deg)scale(1.06)}.filler-a{transform:translate(100px,90px)rotate(-8deg)scale(.72)}.filler-b{transform:translate(148px,94px)rotate(12deg)scale(.68)}.leaf{fill:#5d7c52;opacity:.85}.leaf.small{fill:#6b8a5c;opacity:.75}.rose-head{transform-origin:0 10px;transform-box:fill-box;transition:transform .7s,filter .7s}.care-scene[data-level="0"] .rose-head{filter:grayscale(.55)brightness(.92);transform:rotate(12deg)translate(1px,7px)scale(.9)}.care-scene[data-level="1"] .rose-head{filter:grayscale(.25);transform:rotate(6deg)translateY(4px)scale(.96)}.care-scene[data-level="2"] .rose-head{filter:grayscale(.08);transform:rotate(2deg)scale(1)}.care-scene[data-level="3"] .rose-head{filter:none;transform:scale(1.04)}.rose-head.wine .p.back{fill:#7a2430}.rose-head.wine .p.mid{fill:#9c3d4a}.rose-head.wine .p.front{fill:#c45c66}.rose-head.wine .p.inner{fill:#e08b93}.rose-head.wine .heart{fill:#5c1520}.rose-head.blush .p.back{fill:#a34854}.rose-head.blush .p.mid{fill:#c46b74}.rose-head.blush .p.front{fill:#e3a8ae}.rose-head.blush .p.inner{fill:#f0c9cc}.rose-head.blush .heart{fill:#8a3340}.rose-head.cream .p.back{fill:#c4a574}.rose-head.cream .p.mid{fill:#e0c7a0}.rose-head.cream .p.front{fill:#f3eadc}.rose-head.cream .p.inner{fill:#fff8ee}.rose-head.cream .heart{fill:#d4a574}.water-layer{transform-box:fill-box;transform-origin:bottom;transition:transform .85s cubic-bezier(.22,1,.36,1);transform:scaleY(0)}.care-scene[data-level="1"] .water-layer{transform:scaleY(.36)}.care-scene[data-level="2"] .water-layer{transform:scaleY(.68)}.care-scene[data-level="3"] .water-layer{transform:scaleY(1)}.bubble{fill:#ffffff73;opacity:0}.care-scene[data-level="2"] .bubble,.care-scene[data-level="3"] .bubble{opacity:1;animation:3.4s ease-in infinite bubble-up}.care-scene[data-level="2"] .b2,.care-scene[data-level="3"] .b2{animation-delay:.6s}.care-scene[data-level="2"] .b3,.care-scene[data-level="3"] .b3{animation-delay:1.4s}.care-scene[data-level="2"] .b4,.care-scene[data-level="3"] .b4{animation-delay:2.1s}@keyframes bubble-up{0%{opacity:.5;transform:translateY(0)}to{opacity:0;transform:translateY(-40px)}}.vase-glass{fill:url(#glass-grad);stroke:#8a7350;stroke-width:1.7px}.vase-shine{fill:none;stroke:#ffffff59;stroke-width:2px;stroke-linecap:round}.vase-rim{fill:none;stroke:#8a7350;stroke-width:2.2px;stroke-linecap:round}.can-g{transform-origin:134px 158px;opacity:0;pointer-events:none;transition:transform .55s cubic-bezier(.22,1,.36,1),opacity .35s;transform:translate(56px,-48px)rotate(18deg)}.is-trim .can-g{display:none}.is-pouring .can-g{opacity:1;transform:translate(0)rotate(-16deg)}.stream-ribbon{fill:#8ec5d4;opacity:0}.is-pouring .stream-ribbon{animation:.9s ribbon-pour}@keyframes ribbon-pour{0%{opacity:0;transform-origin:134px 158px;transform:scaleY(.15)}25%{opacity:.9;transform-origin:134px 158px;transform:scaleY(1)}80%{opacity:.75}to{opacity:0;transform-origin:134px 158px;transform:scaleY(1)}}.shears{opacity:0;pointer-events:none;transition:transform .45s cubic-bezier(.22,1,.36,1),opacity .25s;transform:translate(168px,40px)rotate(-38deg)}.is-water .shears{display:none}.is-trim.is-snipping .shears,.is-trim[data-trim="1"] .shears,.is-trim[data-trim="2"] .shears,.is-trim[data-trim="3"] .shears{opacity:1}.is-trim[data-trim="0"].is-snipping .shears,.is-trim[data-trim="1"] .shears{transform:translate(80px,158px)rotate(-18deg)}.is-trim[data-trim="1"].is-snipping .shears,.is-trim[data-trim="2"] .shears{transform:translate(88px,158px)rotate(-4deg)}.is-trim[data-trim="2"].is-snipping .shears,.is-trim[data-trim="3"] .shears{transform:translate(96px,158px)rotate(8deg)}.is-snipping .blade-a{transform-origin:14px 25px;animation:.32s .28s snip-a}.is-snipping .blade-b{transform-origin:14px 11px;animation:.32s .28s snip-b}@keyframes snip-a{50%{transform:rotate(-18deg)}}@keyframes snip-b{50%{transform:rotate(18deg)}}@keyframes stem-fall{0%{opacity:1;transform:translate(0)rotate(0)}to{opacity:0;transform:translate(8px,36px)rotate(24deg)}}.field{margin-top:18px}input[type=text]{width:100%;font-family:var(--serif);text-align:center;color:var(--ink);background:0 0;border:0;border-bottom:1px solid #2a181040;outline:none;padding:12px 4px;font-size:22px}input[type=text]::placeholder{color:#2a181047;font-style:italic}.letters-wrap{cursor:text;margin:8px 0 4px;position:relative}.letters{justify-content:center;gap:12px;display:flex}.letters span{width:34px;height:48px;font-family:var(--serif);text-transform:lowercase;background:#2a18100a;border-bottom:1.5px solid #2a181066;border-radius:6px 6px 0 0;place-items:center;font-size:28px;display:grid}.letters-input{opacity:0;border:0;width:100%;font-size:16px;position:absolute;inset:0}.actions{justify-content:center;margin-top:24px;display:flex}.btn{background:var(--ink);min-width:180px;color:var(--paper);letter-spacing:.12em;text-transform:uppercase;border-radius:999px;padding:13px 22px;font-size:12px;font-weight:500;transition:transform .2s,background .2s;box-shadow:0 10px 20px #2a18102e}.btn:hover,.btn:focus-visible{background:#3b2218;transform:translateY(-1px)}.btn:disabled{opacity:.45;transform:none}.hint,.wrong{text-align:center;min-height:1.3em;color:var(--rose);margin:12px 0 0;font-size:14px}.hint{color:var(--gold-dim)}.shake{animation:.45s shake}@keyframes shake{20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}.daisy-scene{justify-items:center;margin:8px 0 4px;display:grid}.daisy{width:220px;height:220px;position:relative}.daisy-center{z-index:2;pointer-events:none;background:radial-gradient(circle at 40% 35%,#f0d789,#c4a574 60%,#8a7350);border-radius:50%;width:58px;height:58px;margin:-29px 0 0 -29px;position:absolute;top:50%;left:50%;box-shadow:0 6px 16px #2a181033}.petal{z-index:1;width:44px;height:78px;transform:rotate(calc(var(--i) * 51.428deg)) translateY(-62px);background:linear-gradient(#fffaf3,#f0e2cf);border-radius:50%;margin:-39px 0 0 -22px;transition:transform .7s,opacity .7s;position:absolute;top:50%;left:50%;box-shadow:0 6px 10px #2a18101f}.petal.is-gone{opacity:.4;pointer-events:none}.daisy.is-loved .petal{opacity:1;background:linear-gradient(#f8dfe1,#d47b84)}.verdict{font-family:var(--serif);min-height:40px;color:var(--rose-deep);text-align:center;margin:4px 0 0;font-size:28px;font-style:italic}.letter{padding:22px 28px 48px;overflow:visible}.letter p{font-family:var(--serif);margin:0 0 1em;font-size:20px;line-height:1.45}.letter p:first-of-type{font-size:28px;font-style:italic}.closing{font-family:var(--serif);text-align:right;color:var(--gold-dim);margin:8px 0 0;font-style:italic}.heart{background:var(--rose);width:18px;height:16px;margin:18px 0 0 auto;display:block;position:relative;transform:rotate(-45deg)}.heart:before,.heart:after{content:"";background:var(--rose);border-radius:50%;width:18px;height:18px;position:absolute}.heart:before{top:-9px;left:0}.heart:after{top:0;left:9px}.album-note{text-align:center;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-dim);margin:28px 0 8px;font-size:11px}.album{height:500px;margin:8px -18px;position:relative}.polaroid{left:var(--left);top:var(--top);width:var(--w);z-index:var(--z);transform:rotate(var(--r));animation:.9s cubic-bezier(.16,1,.3,1) both polaroid-in;animation-delay:calc(var(--i) * .16s + .4s);background:linear-gradient(#fffaf3,#efe4d4);padding:7px 7px 26px;position:absolute;box-shadow:inset 0 1px #ffffffb3,0 14px 28px #2a181047}.polaroid.is-front{z-index:12}.polaroid:hover,.polaroid:focus-visible{z-index:13;transform:rotate(var(--r)) scale(1.04)}.polaroid img{aspect-ratio:3/4;object-fit:cover;object-position:var(--pos,center);background:#1c1214;width:100%;display:block}@keyframes polaroid-in{0%{opacity:0;transform:translateY(-36px)rotate(0)scale(.86)}to{opacity:1;transform:translateY(0) rotate(var(--r)) scale(1)}}.lightbox{z-index:30;background:#0a0608eb;place-items:center;padding:28px 18px 40px;display:grid;position:fixed;inset:0}.lightbox[hidden]{display:none}.lightbox-close{top:max(16px, env(safe-area-inset-top));letter-spacing:.18em;text-transform:uppercase;color:var(--paper);opacity:.8;font-size:11px;position:absolute;right:18px}.lightbox-frame{background:#f7f1e6;width:min(92vw,400px);margin:0;padding:12px 12px 34px;transform:rotate(-1.5deg);box-shadow:0 28px 70px #00000080}.lightbox-frame img{object-fit:contain;background:#140e10;width:100%;max-height:70vh;display:block}.letter-note{text-align:center;letter-spacing:.08em;color:var(--ink-soft);margin:22px 0 0;font-size:12px}.scrap{cursor:pointer;width:118px;color:var(--ink);background:0 0;border:0;margin:-10px auto 22px;padding:0;display:block}.scrap-folded{clip-path:polygon(7% 0,100% 9%,93% 100%,0 86%);background:linear-gradient(160deg,#f7f0e4 0%,#ead7bd 100%);padding:18px 14px 16px;animation:.8s cubic-bezier(.16,1,.3,1) both scrap-land;display:block;transform:rotate(-8deg);box-shadow:inset 0 1px #ffffff8c,0 12px 22px #2a18102e}.scrap:hover .scrap-folded,.scrap:focus-visible .scrap-folded{transform:rotate(-5deg)scale(1.04)}.scrap-tear{background:repeating-linear-gradient(90deg,#0000 0 6px,#2a18102e 6px 7px);height:8px;margin-bottom:8px;display:block}.scrap-peek{letter-spacing:.28em;text-transform:uppercase;color:var(--gold-dim);text-align:center;font-size:10px;display:block}.scrap-date{font-family:var(--serif);text-align:center;color:var(--rose-deep);margin-top:6px;font-size:18px;font-weight:600;display:block}@keyframes scrap-land{0%{opacity:0;transform:translateY(-24px)rotate(-16deg)}to{opacity:1;transform:rotate(-8deg)}}.invite{z-index:40;padding:18px 16px max(24px, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:radial-gradient(at 50% 20%,#9c3d4a47,#0000 48%),#0a0608e6;position:fixed;inset:0;overflow:auto}.invite[hidden]{display:none}.invite-close{top:max(16px, env(safe-area-inset-top));z-index:2;letter-spacing:.18em;text-transform:uppercase;color:#f3eadc;background:#0a06088c;border-radius:999px;padding:8px 12px;font-size:11px;position:absolute;right:18px}.invite-card{width:min(92vw,360px);color:var(--ink);text-align:center;background:radial-gradient(at 50% 0,#c4a57438,#0000 42%),linear-gradient(#fbf6ec 0%,#efe2cf 100%);margin:52px auto 28px;padding:42px 28px 30px;animation:.6s cubic-bezier(.16,1,.3,1) invite-in;position:relative;box-shadow:0 0 0 7px #f7f1e4,0 0 0 8px #c4a5748c,0 28px 70px #00000075}.invite-card:before{content:"";pointer-events:none;border:1px solid #9a3d4a38;position:absolute;inset:10px}.invite-x{z-index:1;width:32px;height:32px;color:var(--gold-dim);font-size:24px;line-height:1;position:absolute;top:12px;right:14px}.invite-seal{width:42px;height:42px;font-family:var(--serif);color:#f7e6c8;background:radial-gradient(circle at 32% 28%,#c45a66,#7a2430 62%,#5a1820);border-radius:50%;place-items:center;margin:0 auto 14px;font-size:20px;font-weight:700;display:grid;box-shadow:inset 0 1px #ffffff47,0 8px 14px #5a182047}.invite-kicker{letter-spacing:.34em;text-transform:uppercase;color:var(--gold-dim);margin:0 0 6px;font-size:10px}.invite-kicker:before,.invite-kicker:after{content:"✦";letter-spacing:0;margin:0 8px;font-size:8px}.invite-name{font-family:var(--serif);margin:0;font-size:34px;font-style:italic;font-weight:600;line-height:1}.invite-lead{font-family:var(--serif);color:var(--ink-soft);margin:8px 0 0;font-size:18px;font-style:italic;font-weight:500;line-height:1.3}.invite-when{border-top:1px solid #8a735047;border-bottom:1px solid #8a735047;gap:2px;margin:22px 0 20px;padding:12px 0;display:grid}.invite-day{font-family:var(--serif);color:var(--rose-deep);font-size:40px;font-weight:600;line-height:1}.invite-meta{letter-spacing:.18em;text-transform:uppercase;color:var(--gold-dim);font-size:12px}.invite-block{margin:0 0 4px}.invite-label{letter-spacing:.26em;text-transform:uppercase;color:var(--gold-dim);margin:0 0 6px;font-size:10px}.invite-place{font-family:var(--serif);margin:0;font-size:22px;font-weight:600;line-height:1.2}.invite-addr{font-family:var(--serif);color:var(--ink-soft);margin:4px 0 0;font-size:16px}.invite-hint{font-family:var(--serif);color:var(--ink-soft);margin:6px 0 0;font-size:15px;font-style:italic}.invite-path{justify-content:center;gap:6px;margin:16px 0;display:flex}.invite-path span{background:var(--rose-soft);opacity:.7;border-radius:50%;width:5px;height:5px}.invite-path span:nth-child(2){opacity:.45}.invite-path span:nth-child(3){opacity:.25}.invite-ps{font-family:var(--serif);color:var(--rose-deep);border-top:1px solid #8a735047;margin:22px 0 0;padding-top:16px;font-size:16px;font-style:italic}@keyframes invite-in{0%{opacity:0;transform:translateY(22px)rotate(-8deg)scale(.88)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
