:root{--pink:#ff5fa2;--bubblegum:#ff8cc8;--blush:#ffd8ea;--ink:#1a1a1a;--paper:#f6f1f4;--silver:#c0c0c0;--white:#fff;--gutter:clamp(1.15rem,5vw,5rem);--content:1180px;--ease:cubic-bezier(.2,.75,.25,1)}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:1rem}
body{margin:0;color:var(--ink);background:var(--paper);font-family:Arial,Helvetica,sans-serif;line-height:1.6}
[hidden]{display:none!important}
img{display:block;max-width:100%}
.icon-arrow{display:inline-block;width:1rem;height:1rem;flex-shrink:0;vertical-align:middle;pointer-events:none}
.gallery-controls button{display:inline-flex;align-items:center;justify-content:center}
button,input,select,textarea{font:inherit}
a{color:inherit;text-underline-offset:.3em}
button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}
:focus-visible{outline:3px solid currentColor;outline-offset:5px}
button{cursor:pointer}
h1,h2,p,figure{margin:0}
h1,h2{font-family:'Arial Black','Helvetica Neue',Arial,sans-serif;font-weight:900;letter-spacing:-.065em;line-height:1.02;overflow-wrap:anywhere}
h2{font-size:clamp(2.35rem,6.3vw,5.5rem)}
p,a,label{overflow-wrap:anywhere}
.eyebrow{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.18em;line-height:1.5}
.section{padding:clamp(3.5rem,8vw,7rem) var(--gutter);max-width:calc(var(--content) + var(--gutter)*2);margin-inline:auto;min-width:0}
.section-heading{margin-bottom:2rem}.section-heading .eyebrow{margin-bottom:1rem}
.skip-link{position:absolute;top:1rem;left:1rem;padding:.7rem;background:white;z-index:10;transform:translateY(-200%)}.skip-link:focus{transform:none}
.load-status{padding:2rem}.cover{position:relative;background:var(--pink);min-height:100svh;padding:1rem var(--gutter) 1.7rem;display:flex;flex-direction:column;isolation:isolate;overflow:clip}
.cover::before{content:'';position:absolute;inset:0;z-index:-1;opacity:.1;background-image:radial-gradient(var(--ink) .7px,transparent .7px);background-size:7px 7px}
.cover-top{display:flex;justify-content:space-between;align-items:center;gap:1rem;font-size:.7rem;letter-spacing:.15em;text-transform:uppercase;font-weight:700;width:100%;max-width:var(--content);margin-inline:auto}
.cover-top a{display:flex;align-items:center;min-height:44px;gap:.7rem;text-decoration:none;border-bottom:1px solid currentColor}
.poster{width:100%;max-width:var(--content);margin:auto;display:grid;gap:1rem;padding-block:1.5rem;align-items:center}
.poster-copy{position:relative;z-index:3}.poster-copy .eyebrow{margin-bottom:.7rem}
h1{font-size:clamp(3.25rem,11vw,8rem);max-width:9ch;text-wrap:balance}
.celebrant{display:table;background:var(--ink);color:var(--white);padding:.3rem .75rem;font-weight:700;letter-spacing:.01em;font-size:clamp(1rem,2.3vw,1.65rem);margin-top:1rem;transform:rotate(-2deg)}
.tagline{font-size:clamp(.95rem,2vw,1.2rem);max-width:30ch;line-height:1.45;margin-top:1.1rem}
.poster-art{position:relative;min-width:0;width:min(100%,31rem);height:clamp(255px,78vw,390px);margin-inline:auto;--cover-shift:0px;transform:translateY(var(--cover-shift))}
.age{position:absolute;inset:-.05em auto auto 0;font-family:'Arial Black',Arial,sans-serif;font-size:clamp(12rem,53vw,23rem);font-weight:900;letter-spacing:-.09em;line-height:1;color:var(--blush);text-shadow:3px 3px 0 var(--ink);transform:rotate(-7deg)}
.portrait{position:absolute;left:31%;top:19%;width:48%;height:69%;background:var(--paper);padding:.6rem .6rem 2.2rem;box-shadow:0 10px 30px #1a1a1a22;transform:rotate(8deg);z-index:1}
.portrait img,.portrait-placeholder{width:100%;height:100%;object-fit:cover;object-position:center;display:grid;place-items:center;background:var(--bubblegum)}
.portrait-placeholder svg{width:72%;color:var(--ink);animation:star-turn 20s linear infinite}
.portrait-label{position:absolute;bottom:.5rem;left:.6rem;right:.6rem;text-align:center;font-size:.65rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700}
.disco{position:absolute;top:-5%;right:-2%;width:34%;height:auto;z-index:2;animation:disco-sway 7s ease-in-out infinite;filter:drop-shadow(0 10px 10px #1a1a1a20)}
.sticker{position:absolute;z-index:2;font-weight:900;line-height:1.1}
.sticker-party{bottom:9%;left:0;width:6.6rem;height:6.6rem;display:grid;place-content:center;text-align:center;background:var(--ink);color:var(--pink);border-radius:50%;transform:rotate(-13deg);font-size:1.25rem;border:2px dashed var(--pink);outline:5px solid var(--ink)}
.sticker-date{right:0;bottom:1%;background:var(--white);border:1px solid var(--ink);padding:.65rem .8rem;font-size:.7rem;letter-spacing:.08em;transform:rotate(-5deg);box-shadow:3px 3px var(--ink)}
.scroll-cue{display:flex;align-items:center;justify-content:center;gap:1rem;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;min-height:44px}
.scroll-line{width:1px;height:26px;background:var(--ink);transform-origin:top;animation:scroll-pulse 2.4s ease-in-out infinite}
.party-ribbon{background:var(--ink);color:var(--pink);padding:.9rem 0;overflow:hidden;font-size:clamp(.9rem,2vw,1.25rem);font-weight:900;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}.party-ribbon span{display:block;width:max-content;animation:ribbon-drift 35s linear infinite}
.intro{text-align:center}.intro h2{margin-block:1.2rem 1.8rem}.outline{-webkit-text-stroke:1px var(--ink);color:transparent}.intro-copy{max-width:48ch;margin-inline:auto;font-size:clamp(1rem,2vw,1.2rem)}
.details{padding-top:0}.ticket{display:grid;background:var(--blush);border:1px solid var(--ink);box-shadow:6px 6px 0 var(--ink);position:relative;min-width:0}.ticket-main,.ticket-place{padding:1.5rem;min-width:0}.ticket-main{border-bottom:1px dashed var(--ink)}.ticket-date{font-size:clamp(1.5rem,3.3vw,2.5rem);font-weight:900;line-height:1.2;letter-spacing:-.04em;margin-block:.7rem}.ticket-time{font-weight:700}.ticket-place>p:first-of-type{font-weight:700;font-size:1.1rem;margin-top:.65rem}.ticket-place a{display:inline-flex;align-items:center;gap:1rem;min-height:44px;font-size:.8rem;margin-top:.4rem}.ticket-stub{padding:.7rem 1.5rem;border-top:1px dashed currentColor;letter-spacing:.18em;font-size:.6rem;text-align:center;font-weight:700}
.countdown{max-width:none;background:var(--ink);color:var(--white);text-align:center}.countdown-heading{max-width:760px;margin:0 auto 2rem}.countdown-heading .eyebrow{color:var(--bubblegum);margin-bottom:1rem}.countdown h2{font-size:clamp(2.2rem,5.7vw,4.3rem)}.countdown-values{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));max-width:760px;margin-inline:auto;gap:clamp(.6rem,3vw,3rem)}.countdown-values>div{border-top:1px solid #ffffff50;padding-top:1rem;min-width:0}.countdown strong{display:block;font-size:clamp(2.5rem,10vw,6.5rem);font-weight:900;letter-spacing:-.055em;line-height:1.15;color:var(--pink);font-variant-numeric:tabular-nums}.countdown-values span{font-size:.65rem;letter-spacing:.14em;text-transform:uppercase}
.dress{display:grid;gap:2.5rem;align-items:center}.dress-copy .eyebrow{margin-bottom:1rem}.script-accent{font-family:Georgia,'Times New Roman',serif;font-style:italic;letter-spacing:-.06em;font-weight:400;color:#a42459}.dress-copy>p:last-child{margin-top:1.5rem;font-weight:700}.dress-art{position:relative;display:flex;justify-content:center;align-items:center;min-height:230px;padding-bottom:2rem;gap:.5rem}.swatch{width:29%;max-width:130px;aspect-ratio:.7;border:6px solid var(--white);box-shadow:0 5px 18px #1a1a1a20;display:flex;align-items:end;justify-content:center;padding-bottom:.5rem;font-weight:700;font-size:.6rem;letter-spacing:.05em}.swatch-pink{background:var(--pink);transform:rotate(-13deg)}.swatch-black{background:var(--ink);color:var(--white);transform:translateY(-1rem) rotate(3deg)}.swatch-silver{background:repeating-conic-gradient(#dedee4 0% 25%,#9f9fa8 0% 50%) 50%/20px 20px;transform:rotate(13deg)}.dress-note{position:absolute;bottom:0;right:1rem;transform:rotate(-8deg);font:italic 1.5rem/1 Georgia,serif}
.gallery{padding-top:0}.gallery-track{display:grid;gap:2rem;padding:1rem .5rem;min-width:0}.memory{min-width:0;background:white;padding:.7rem .7rem 1rem;box-shadow:0 6px 20px #1a1a1a15;--tilt:-3deg;transform:rotate(var(--tilt))}.memory:nth-child(2){--tilt:3deg}.memory:nth-child(3){--tilt:-2deg}.memory-visual{aspect-ratio:4/5;overflow:hidden;background:var(--bubblegum);position:relative;display:grid;place-items:center}.memory:nth-child(2) .memory-visual{background:var(--ink);color:var(--white)}.memory:nth-child(3) .memory-visual{background:var(--blush)}.memory-visual img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ease)}.memory:hover img{transform:scale(1.035)}.memory-placeholder{font-size:5rem;line-height:1;font-family:Georgia,serif}.memory figcaption{padding:.9rem .3rem 0;font-size:.8rem;font-weight:700;text-align:center}.gallery-track.is-slider{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;gap:1rem;padding:1rem .5rem 1.5rem;overscroll-behavior-x:contain}.is-slider .memory{flex:0 0 calc(100% - 1rem);scroll-snap-align:center;transform:none}.gallery-controls{display:flex;align-items:center;justify-content:center;gap:1.5rem;margin-top:.7rem}.gallery-controls button{background:none;border:1px solid var(--ink);border-radius:50%;width:44px;height:44px}.gallery-controls span{font-size:.8rem;min-width:3rem;text-align:center}.gallery-controls button:disabled{opacity:.35;cursor:default}
.location{display:grid;gap:2rem;padding-top:0;align-items:start}.location h2{font-size:clamp(2.3rem,5.3vw,4.5rem)}.location-card{min-width:0;border-top:2px solid var(--ink);padding-top:1.3rem}.venue-name{font-size:1.4rem;font-weight:900;line-height:1.2;margin-bottom:.7rem}.map-frame{aspect-ratio:4/3;background:var(--blush);margin-top:1.5rem;border:1px solid #1a1a1a30;overflow:hidden}.map-frame iframe{display:block;width:100%;height:100%;border:0}.map-links{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1rem}.map-links a{display:inline-flex;align-items:center;justify-content:center;gap:1rem;border:1px solid var(--ink);padding:.5rem 1rem;min-height:44px;font-size:.8rem;text-decoration:none}.map-links a:hover{background:var(--blush)}
.rsvp{max-width:none;background:var(--blush);display:grid;gap:2rem}.rsvp-copy .eyebrow{margin-bottom:1rem}.rsvp-copy>p:last-child{margin-top:1.5rem;max-width:30ch}.rsvp h2{font-size:clamp(4rem,9vw,8rem)}.rsvp-form{min-width:0}.rsvp-form label{display:block;font-size:.8rem;font-weight:700;margin-bottom:.5rem}.rsvp-form input,.rsvp-form textarea,.rsvp-form select{display:block;min-width:0;width:100%;min-height:48px;padding:.8rem;border:1px solid #1a1a1a70;background:#fff9;color:var(--ink);border-radius:0;font-size:1rem}.rsvp-form textarea{resize:vertical}.form-row{display:grid;gap:1rem;margin-block:1rem}.form-row>div{min-width:0}.send-button{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;padding:1rem;border:1px solid var(--ink);background:var(--ink);color:white;font-weight:700;font-size:.9rem;margin-top:1rem;min-height:52px;box-shadow:4px 4px var(--pink);transition:transform .2s,box-shadow .2s}.send-button:hover{transform:translate(-2px,-2px);box-shadow:6px 6px var(--pink)}.form-note{font-size:.73rem;margin-top:1rem;line-height:1.5}
.footer{padding:3rem var(--gutter) 1.5rem;background:var(--pink)}.closing{font-size:clamp(2.5rem,6vw,5rem);font-weight:900;line-height:1.06;letter-spacing:-.05em;max-width:14ch;margin:0 auto 3rem;text-align:center}.footer-bottom{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.5rem;max-width:var(--content);margin:auto;border-top:1px solid #1a1a1a60;padding-top:1.5rem}.footer-bottom img{width:85px;height:auto;max-height:48px;object-fit:contain}.footer-bottom p{font-size:.65rem;margin-top:.5rem}.footer-bottom a{display:flex;align-items:center;min-height:44px;font-size:.7rem;gap:.5rem}.footer-bottom #brand-name{font-weight:900}
/* Motion is applied to whole blocks: glyphs remain outside clipping masks. */
.motion-ready .entry{animation:poster-enter .85s var(--ease) both}.motion-ready .poster-copy .entry:nth-child(2){animation-delay:.08s}.motion-ready .poster-copy .entry:nth-child(3){animation-delay:.18s}.motion-ready .poster-copy .entry:nth-child(4){animation-delay:.25s}.motion-ready .poster-art.entry{animation-name:collage-enter;animation-delay:.15s}
.motion-ready .reveal{opacity:0;translate:0 22px;transition:opacity .7s var(--ease),translate .8s var(--ease)}.motion-ready .reveal.is-visible{opacity:1;translate:0 0}.motion-ready .ticket.reveal{rotate:-1.5deg;scale:.97;transition:opacity .7s,translate .8s var(--ease),rotate .9s var(--ease),scale .9s var(--ease)}.motion-ready .ticket.is-visible{rotate:0deg;scale:1}.motion-ready .memory.reveal{transition-delay:var(--delay,0ms)}
@keyframes poster-enter{from{opacity:0;translate:0 25px;filter:blur(3px)}to{opacity:1;translate:0 0;filter:blur(0)}}
@keyframes collage-enter{from{opacity:0;scale:.91;rotate:5deg}to{opacity:1;scale:1;rotate:0deg}}
@keyframes disco-sway{0%,100%{rotate:-7deg;translate:0 0}50%{rotate:5deg;translate:0 -8px}}
@keyframes star-turn{to{rotate:360deg}}
@keyframes scroll-pulse{0%,100%{scale:1 .6;opacity:.5}50%{scale:1 1;opacity:1}}
@keyframes ribbon-drift{to{transform:translateX(-25%)}}
@media(min-width:600px){.gallery-track:not(.is-slider){grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.form-row{grid-template-columns:1.2fr 1fr}.ticket{grid-template-columns:1fr 1fr}.ticket-main{border-bottom:0;border-right:1px dashed var(--ink)}.ticket-stub{grid-column:1/-1}.is-slider .memory{flex-basis:60%}.dress{grid-template-columns:1fr 1fr}.poster-art{height:390px}.age{font-size:23rem}}
@media(min-width:900px){.cover{padding-top:1.5rem}.poster{grid-template-columns:1.1fr 1fr;gap:3rem;padding-block:3rem}.poster-art{height:460px;width:100%}.age{font-size:clamp(23rem,30vw,29rem)}.portrait{top:22%;height:65%;left:34%}.sticker-party{width:8rem;height:8rem;font-size:1.6rem}.sticker-date{font-size:.85rem}.disco{top:0}.location{grid-template-columns:1fr 1fr;gap:4rem}.rsvp{grid-template-columns:1fr 1fr;gap:clamp(3rem,8vw,8rem);padding-inline:max(var(--gutter),calc((100vw - var(--content))/2))}.is-slider .memory{flex-basis:43%}.dress-art{min-height:340px}.swatch{max-width:160px;font-size:.75rem}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.motion-ready .reveal{opacity:1;translate:none;rotate:none;scale:1}.poster-art{transform:none}}
