@font-face{font-family:Outfit;src:url(assets/outfit-regular.woff2) format('woff2');font-display:swap}@font-face{font-family:Outfit;src:url(assets/outfit-bold.woff2) format('woff2');font-weight:700;font-display:swap}@font-face{font-family:Caveat;src:url(assets/caveat.woff2) format('woff2');font-display:swap}@font-face{font-family:GreetingSerif;src:url(assets/playfair.woff2) format('woff2');font-display:swap}
*{box-sizing:border-box}html{scroll-behavior:auto}body{margin:0;background:var(--paper,#f7f3e9);color:var(--ink,#111);font:17px/1.55 Outfit,system-ui,sans-serif;-webkit-font-smoothing:antialiased}h1,h2,h3,p,figure{margin:0}button{font:inherit;color:inherit;cursor:pointer}button,a{touch-action:manipulation}button,a,[tabindex]{outline-offset:5px}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--ink)}[hidden]{display:none!important}button{min-height:44px}svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}a{color:inherit;text-underline-offset:4px}.greet{max-width:980px;margin:auto;overflow:clip}.greet-header{display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:70px;padding:14px 22px;font-size:14px;letter-spacing:.06em}.greet-header p{overflow-wrap:anywhere}.greet-header button{display:grid;place-items:center;width:44px;min-width:44px;border:1px solid currentColor;border-radius:50%;background:none}.greet-hero{position:relative;padding:12px 22px 32px}.greet-final h1{font-size:clamp(38px,11vw,60px);line-height:1.03;font-weight:700;letter-spacing:-.055em;overflow-wrap:anywhere;position:relative;z-index:1}.greet-name,.greet-title{display:block}.greet-name{color:var(--heading-color);font-size:1.3em;margin-bottom:8px}.greet-age{font:32px/1.2 Caveat,serif;margin-top:14px}.greet-age span{font-size:42px}.greet-subtitle{margin-top:12px;font-size:16px}.greet-art{height:305px;margin:16px -4px 8px;position:relative}.greet-art-touch{border:0;background:none;padding:0;width:100%;height:100%;display:block;touch-action:pan-y;position:relative}.greet-motif{width:100%;height:100%;object-fit:contain;display:block;transform-origin:50% 75%;will-change:transform}.greet-hero-from{font-size:15px;margin:14px 0 12px}.greet-scroll{font-size:13px;padding-top:8px}.greet-scroll:after{content:'';display:block;width:1px;height:23px;background:currentColor;margin-top:10px}.greet-intro-letter{display:none;position:absolute;inset:105px 22px 55px;place-items:center;max-width:420px;margin:auto;z-index:5;pointer-events:none}.greet-envelope{width:100%;position:relative;z-index:2;filter:drop-shadow(0 20px 20px #0002)}.greet-letter-paper{position:absolute;top:18%;width:70%;padding:24px 20px;height:48%;background:#f4f1e9;color:#211b33;box-shadow:0 3px 10px #0002;text-align:center;font:30px/1.2 Caveat,serif;display:grid;place-items:start center}.greet-letter-paper p{white-space:pre-wrap}.greet-letter-label{position:absolute;z-index:3;top:55%;left:15%;right:15%;text-align:center;color:#211b33;font:27px/1.1 Caveat,serif}.greet-letter-label p+p{font-size:19px;margin-top:8px}.greeting-intro .greet-intro-letter,.greet[data-phase=intro] .greet-intro-letter{display:grid}.greeting-intro .greet-final{visibility:hidden}.greet[data-phase=intro] .greet-final{opacity:0}.greet-note,.greet-memories,.greet-cake,.greet-facts,.greet-surprise,.greet-closing{padding:42px 22px;max-width:760px;margin:auto}.greet h2{font-size:clamp(30px,8.6vw,44px);font-weight:700;letter-spacing:-.035em;line-height:1.1;margin-bottom:23px;overflow-wrap:anywhere;color:var(--heading-color)}.greet-message{font-size:18px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}.greet-signature{font:38px/1.3 Caveat,serif;margin-top:20px;overflow-wrap:anywhere}.greet-note{border-top:1px solid color-mix(in srgb,var(--ink) 18%,transparent)}.greet-photo-fan{display:flex;gap:22px;overflow:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;padding:16px 12px 25px;margin:0 -12px;scrollbar-width:thin;touch-action:pan-x pan-y}.greet-photo{flex:0 0 89%;max-width:440px;min-width:0;scroll-snap-align:center;background:#fff;color:#30251f;padding:10px;box-shadow:0 8px 17px #0002;transform:rotate(-1.8deg);align-self:flex-start}.greet-photo:nth-child(even){transform:rotate(1.8deg)}.greet-photo img{display:block;width:100%;height:220px;object-fit:cover}.greet-photo figcaption{font:26px/1.15 Caveat,serif;margin:12px 4px 5px;overflow-wrap:anywhere}.greet-photo-controls{display:flex;justify-content:center;align-items:center;gap:24px;margin-top:14px}.greet-photo-controls button{width:44px;display:grid;place-items:center;border:1px solid currentColor;border-radius:50%;background:none}.greet-photo-controls button:disabled{opacity:.4;cursor:default}.greet-photo-controls p{font-size:14px}.greet-cake{text-align:center}.greet-cake-caption{font-size:16px}.greet-cake-stage{position:relative;width:min(78%,260px);aspect-ratio:900/1192;margin:72px auto 12px}.greet-cake-image{display:block;width:100%;height:auto}.greet-flames{position:absolute;inset:0;pointer-events:none}.greet-flames img{position:absolute;top:1.6%;width:16%;height:18%;object-fit:contain;transform:translate(-50%,-85%) scale(var(--flame-scale,1));transform-origin:50% 100%;opacity:var(--flame-opacity,1);filter:drop-shadow(0 0 8px #e6b45699)}.greet-flames img:nth-child(1){left:32.3%}.greet-flames img:nth-child(2){left:50.1%}.greet-flames img:nth-child(3){left:68.3%}.greet-smoke{position:absolute;inset:0;pointer-events:none}.greet-smoke span{position:absolute;top:2%;height:50px;width:12px;border-left:3px solid var(--ink);border-radius:65% 30% 60% 25%;opacity:0;transform:translate(-50%,-100%);filter:blur(2px)}.greet-smoke span:nth-child(1){left:32.3%}.greet-smoke span:nth-child(2){left:50.1%}.greet-smoke span:nth-child(3){left:68.3%}.greet-smoke.rising span{animation:greet-smoke 1.25s ease-out both}.greet-smoke.rising span:nth-child(2){animation-delay:.1s}.greet-smoke.rising span:nth-child(3){animation-delay:.2s}@keyframes greet-smoke{20%{opacity:.5}to{opacity:0;transform:translate(8px,-175%) scale(1.5)}}.greet-cake-hint{font-size:15px;margin:18px 0}.greet-button{max-width:100%;display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:12px 19px;border:0;border-radius:30px;background:var(--accent);color:var(--accent-ink);font-size:15px;font-weight:700;line-height:1.35;overflow-wrap:anywhere}.greet-fact{padding:24px 0;border-bottom:1px solid color-mix(in srgb,var(--ink) 20%,transparent)}.greet-fact-number{font-size:48px;font-weight:700;line-height:1.1;color:var(--heading-color);overflow-wrap:anywhere}.greet-fact h3{font-size:22px;margin:12px 0 8px;line-height:1.2;overflow-wrap:anywhere}.greet-fact p:not(.greet-fact-number){font-size:16px;overflow-wrap:anywhere;white-space:pre-wrap}.greet-fact small,.greet-fact a{display:inline-flex;align-items:center;min-height:44px;font-size:13px;margin-top:6px}.greet-scratch{position:relative;min-height:165px;border:1px solid currentColor;border-radius:12px;overflow:hidden;display:grid;place-items:center;padding:25px;background:var(--paper)}.greet-scratch p{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.6;font-size:18px;max-width:100%}.greet-scratch canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:pan-y;cursor:crosshair}.greet-scratch-help{font-size:14px;margin:16px 0}.greet-status{font-size:14px;min-height:22px;margin-top:12px}.greet-closing{text-align:center;padding-bottom:64px}.greet-closing>p:not(.greet-signature){margin:16px 0;overflow-wrap:anywhere}.greet-closing .greet-button{margin-top:22px}.greet-effects{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:100}.greet-bit{position:absolute;width:6px;height:11px;background:var(--c);left:var(--x);top:-20px;border-radius:2px;animation:greet-fall var(--duration,2.7s) ease-in forwards;animation-delay:var(--delay,0s)}@keyframes greet-fall{to{transform:translate(var(--drift),110vh) rotate(var(--spin));opacity:0}}.greet-spark{position:absolute;left:var(--x);top:var(--y);width:5px;height:5px;border-radius:50%;background:var(--c);animation:greet-burst 1.15s ease-out forwards}@keyframes greet-burst{to{transform:translate(var(--dx),var(--dy));opacity:0}}.motion-paused *{animation-play-state:paused!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.ec-skip{position:absolute;left:-10000px;z-index:200}.ec-skip:focus{left:12px;top:12px;padding:10px;background:var(--paper);color:var(--ink)}
.greet-hearts .greet-final{text-align:center}.greet-hearts h1{display:flex;flex-direction:column;font-family:GreetingSerif,Georgia,serif;font-weight:400;letter-spacing:-.04em;font-size:42px}.greet-hearts .greet-title{order:1}.greet-hearts .greet-name{order:2;font-size:1.18em;margin:7px 0 0}.greet-hearts .greet-hero-from{font:29px/1.2 Caveat,serif;margin:0 0 20px}.greet-hearts .greet-art{height:300px}.greet-heart-envelope{position:absolute;left:2%;bottom:0;width:96%;max-height:245px;object-fit:contain;filter:drop-shadow(0 10px 9px #0002)}.greet-heart-balloons{position:absolute;right:0;top:-4%;width:44%;height:85%;object-fit:contain;transform:rotate(7deg)}.greet-hearts h2{font-family:GreetingSerif,Georgia,serif;font-weight:400}.greet-hearts .greet-letter-label{top:38%;left:17%;right:17%;background:#f4f1e9;padding:8px;max-width:200px;margin:auto}.greet-hearts .greet-scroll:after,.greet-confetti .greet-scroll:after{margin-left:auto;margin-right:auto}.greet-hearts .greet-note{text-align:center}.greet-confetti .greet-final,.greet-classic .greet-final{text-align:center}.greet-confetti .greet-name{font:30px/1.2 Caveat,serif;margin-bottom:12px}.greet-confetti .greet-art{height:260px}.greet-confetti .greet-final h1{font-size:38px}.greet-confetti .greet-note h2{font-size:32px}.greet-classic .greet-final h1{font-size:42px}.greet-classic .greet-name{font-size:1em;color:var(--ink)}.greet-classic .greet-title{color:var(--heading-color)}.greet-classic .greet-scroll:after{margin:auto;margin-top:12px}.greet-digits{height:100%;width:100%;display:flex;justify-content:center;align-items:center;gap:7px;padding:8px;will-change:transform}.greet-digits img{width:auto;max-width:100%;height:100%;object-fit:contain;min-width:0}.greet-digits[data-count="3"] img{height:100%;max-width:100%;flex-shrink:1}.greet-digits[data-count="0"] img{width:100%;height:100%}.greet-cool h1{text-transform:uppercase;font-size:clamp(38px,11vw,62px);letter-spacing:-.045em}.greet-cool .greet-title{color:var(--heading-color)}.greet-cool .greet-name{font-size:1.12em;color:var(--ink)}.greet-cool .greet-art{height:310px}.greet-cool .greet-art:before{content:'';position:absolute;top:50%;left:3%;right:3%;height:1px;box-shadow:0 0 25px 3px color-mix(in srgb,var(--accent) 35%,transparent);background:var(--accent)}.greet-cool .greet-note{border-top-width:2px}.greet-cool .greet-photo{transform:none;border-radius:4px}.greet-cool .greet-cake-image,.greet-classic .greet-cake-image{mix-blend-mode:lighten}.greet-cool .greet-signature{color:var(--heading-color)}
.greeting-preview-price{position:sticky;top:0;z-index:50;padding:9px 20px;background:#fff;color:#451ebb;text-align:center;font:600 14px/1.5 Outfit,system-ui,sans-serif;border-bottom:1px solid #ded7e7}.greeting-preview-bar{max-width:760px;margin:24px auto;padding:24px;border:1px solid #ded7e7;background:#fff;color:#211b33;border-radius:16px;font:16px/1.6 Outfit,system-ui,sans-serif}.greeting-preview-bar a{display:inline-flex;align-items:center;min-height:48px;background:#451ebb;color:#fff;padding:12px 20px;border-radius:10px;font-weight:700;text-decoration:none}.greeting-preview-bar strong{display:block}.greeting-preview-bar p{margin:8px 0 16px}.footer{max-width:760px;margin:auto;padding:30px 20px;font-size:13px;line-height:1.6}.expired-screen{padding:40px 20px;text-align:center;min-height:100svh;display:grid;place-content:center}
@media(min-width:700px){.greet-header{padding:22px 40px}.greet-hero{padding:28px 40px 40px}.greet-art{height:380px}.greet-note,.greet-memories,.greet-cake,.greet-facts,.greet-surprise,.greet-closing{padding:54px 38px}.greet-message{font-size:20px}.greet-photo img{height:290px}.greet-photo{flex-basis:65%}.greet-cake-stage{width:285px}.greet-cool .greet-art{height:370px}}
@media(min-width:1000px){.greet-final{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 28px;align-items:center;min-height:520px}.greet-final>*{grid-column:1}.greet-final .greet-art{grid-column:2;grid-row:1/7;height:420px;margin:0}.greet-final h1{font-size:54px}.greet-hero-from,.greet-age,.greet-subtitle,.greet-scroll{align-self:start}.greet-hearts .greet-final{text-align:left}.greet-hearts .greet-art{height:440px}.greet-classic .greet-final{text-align:left}.greet-hearts .greet-scroll:after,.greet-classic .greet-scroll:after{margin-left:0}.greet-cool .greet-art{height:400px}}
@media(max-width:370px){.greet-header{padding-left:18px;padding-right:18px}.greet-hero{padding-left:18px;padding-right:18px}.greet-final h1{font-size:36px}.greet-art,.greet-cool .greet-art{height:280px}.greet-hearts .greet-art{height:270px}.greet-photo img{height:200px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.greeting-intro .greet-final{visibility:visible!important}.greet-intro-letter,.greet-effects,.greet-smoke{display:none!important}.greet-digits,.greet-motif{transform:none!important}}

.greet-modern .greet-final h1{font-size:clamp(43px,12.8vw,62px)}.greet-modern .greet-name{font-size:1.38em}.greet-modern .greet-art{height:310px}.greet-hearts .greet-name,.greet-hearts .greet-title{order:initial}

.greet-cool .greet-cake-image,.greet-classic .greet-cake-image{mix-blend-mode:normal}.greeting-preview-bar a:focus-visible{outline-color:#451ebb}

.greet p,.greet button,.greet a{overflow-wrap:anywhere}.greet-heart-balloons{right:1%;top:-9%;height:83%;width:46%;z-index:3}.greet-heart-envelope{z-index:1}.greet-hearts .greet-title{color:var(--heading-color)}

.greet-letter-paper{background-image:url(assets/paper.webp);background-position:center;background-size:cover}.greet-cool[data-phase=complete] .greet-art:before{animation:greet-light-pass 1.8s ease-out both}@keyframes greet-light-pass{0%{opacity:0;transform:scaleX(.1)}45%{opacity:.8;transform:scaleX(1)}100%{opacity:.45;transform:scaleX(1)}}

.greet-heart-balloons{top:3%}.greet-title,.greet p{white-space:pre-wrap}
