:root{--bg: #fdf2f8;--bg-2: #faecef;--surface: #fffdfb;--ink: #5c1633;--ink-soft: #8a516a;--rose: #db2777;--rose-soft: #f472b6;--gold: #a16207;--gold-line: #d8b66a;--border: #f3d9e4;--font-display: "Great Vibes", cursive;--font-body: "Cormorant Infant", Georgia, serif;--space-1: 6px;--space-2: 12px;--space-3: 18px;--space-4: 28px;--space-5: 40px;--space-6: 56px;--shadow-card: 0 24px 60px -28px rgba(92, 22, 51, .32), 0 6px 18px -10px rgba(92, 22, 51, .18);--shadow-soft: 0 10px 24px -14px rgba(92, 22, 51, .22)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100dvh;color:var(--ink);font-family:var(--font-body);font-size:18px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;background:radial-gradient(40rem 28rem at 18% -8%,rgba(244,114,182,.22),transparent 60%),radial-gradient(34rem 26rem at 92% 108%,rgba(216,182,106,.18),transparent 60%),linear-gradient(165deg,var(--bg),var(--bg-2));background-attachment:fixed}.invite{max-width:640px;margin:0 auto;padding:clamp(16px,5vw,56px) clamp(12px,4vw,32px);position:relative;z-index:1}.card{position:relative;isolation:isolate;background:var(--surface);border-radius:22px;padding:clamp(30px,7vw,60px) clamp(22px,6vw,52px) clamp(34px,7vw,56px);box-shadow:var(--shadow-card);display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-5);overflow:hidden}.card:before{content:"";position:absolute;top:12px;right:12px;bottom:12px;left:12px;border:1px solid var(--gold-line);border-radius:14px;opacity:.55;pointer-events:none;z-index:-1}.hero{display:flex;flex-direction:column;align-items:center;gap:var(--space-3)}.eyebrow{margin:0;font-size:.82rem;font-weight:600;letter-spacing:.42em;text-transform:uppercase;color:var(--gold);padding-left:.42em}.monogram{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:78px;height:78px;border-radius:50%;border:1px solid var(--gold-line);color:var(--ink);box-shadow:inset 0 0 0 4px #ffffffb3}.monogram__letter{font-family:var(--font-display);font-size:1.9rem;line-height:1;color:var(--ink)}.monogram__amp{font-family:var(--font-body);font-size:1rem;color:var(--gold)}.names{margin:0;font-family:var(--font-display);font-weight:400;line-height:1.05;color:var(--rose);display:flex;flex-direction:column;align-items:center;gap:2px}.names__name{font-size:clamp(3rem,13vw,4.75rem)}.names__amp{font-size:clamp(1.6rem,6vw,2.25rem);color:var(--gold);line-height:1}.hero__sub{margin:4px 0 0;font-size:1.15rem;font-style:italic;color:var(--ink-soft)}.sprig{width:clamp(150px,60%,220px);height:auto;color:var(--gold-line)}.closing .sprig{width:120px}.greeting{display:flex;flex-direction:column;align-items:center;gap:var(--space-1);width:100%}.greeting__lead{margin:0;font-size:.92rem;letter-spacing:.32em;text-transform:uppercase;color:var(--gold);padding-left:.32em}.greeting__name{margin:0;font-family:var(--font-display);font-size:clamp(2.4rem,11vw,3.4rem);line-height:1.15;color:var(--ink);word-break:break-word}.greeting__note{margin:var(--space-1) auto 0;max-width:34ch;font-size:1.05rem;color:var(--ink-soft)}.photos{width:100%;display:grid;grid-template-columns:1fr;gap:var(--space-3)}.photo{margin:0;position:relative;border-radius:16px;padding:7px;background:linear-gradient(160deg,#fff,#fbeef3);box-shadow:var(--shadow-soft)}.photo:after{content:"";position:absolute;top:7px;right:7px;bottom:7px;left:7px;border:1px solid rgba(216,182,106,.5);border-radius:10px;pointer-events:none}.photo__img{display:block;width:100%;height:auto;aspect-ratio:4 / 5;object-fit:cover;border-radius:11px}@media(min-width:600px){.photos{grid-template-columns:1fr 1fr}}.countdown{width:100%}.section-title{margin:0 0 var(--space-3);font-family:var(--font-display);font-weight:400;font-size:clamp(2.1rem,8vw,3rem);line-height:1.1;color:var(--rose)}.countdown__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-2)}.unit{display:flex;flex-direction:column;align-items:center;gap:4px;padding:var(--space-3) var(--space-1);background:linear-gradient(180deg,#fff,#fdf4f8);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-soft)}.unit__value{font-size:clamp(1.85rem,8vw,2.6rem);font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.01em;color:var(--ink)}.unit__label{font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:var(--gold)}.countdown__reached{margin:0;font-family:var(--font-display);font-size:clamp(2rem,8vw,3rem);color:var(--rose)}.details{width:100%;display:flex;flex-direction:column;gap:var(--space-3);align-items:stretch}.detail{display:flex;align-items:center;gap:var(--space-3);text-align:left;padding:var(--space-3) var(--space-4);background:#fdf4f8b3;border:1px solid var(--border);border-radius:16px}.detail__icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:#fff;border:1px solid var(--gold-line);color:var(--gold)}.detail__icon svg{width:22px;height:22px}.detail__text{display:flex;flex-direction:column;gap:1px}.detail__weekday{font-size:.82rem;letter-spacing:.16em;text-transform:uppercase;color:var(--gold)}.detail__main{font-size:1.22rem;font-weight:600;color:var(--ink)}.detail__sub{font-size:1rem;color:var(--ink-soft)}.closing{display:flex;flex-direction:column;align-items:center;gap:var(--space-2)}.closing__line{margin:0;font-family:var(--font-display);font-size:clamp(1.9rem,8vw,2.6rem);color:var(--rose)}.card>*{animation:rise .72s cubic-bezier(.22,1,.36,1) both}.card>*:nth-child(1){animation-delay:80ms}.card>*:nth-child(2){animation-delay:.18s}.card>*:nth-child(3){animation-delay:.28s}.card>*:nth-child(4){animation-delay:.38s}.card>*:nth-child(5){animation-delay:.48s}.card>*:nth-child(6){animation-delay:.58s}.card>*:nth-child(7){animation-delay:.68s}@keyframes rise{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}.admin{max-width:520px;margin:0 auto;padding:clamp(28px,7vw,56px) clamp(18px,5vw,32px)}.admin__card{background:var(--surface);border-radius:22px;padding:clamp(28px,6vw,48px) clamp(22px,5vw,40px);box-shadow:var(--shadow-card);display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-4)}.admin__title{margin:0;font-family:var(--font-display);font-weight:400;font-size:clamp(2.25rem,8vw,3rem);color:var(--rose)}.admin__field{width:100%;display:flex;flex-direction:column;gap:var(--space-1);text-align:left}.admin__label{font-size:.85rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}.admin__input{width:100%;min-height:48px;padding:12px 16px;font-family:var(--font-body);font-size:1.1rem;color:var(--ink);background:#fff;border:1px solid var(--border);border-radius:12px;transition:border-color .18s ease,box-shadow .18s ease}.admin__input::placeholder{color:#c69cb0}.admin__input:focus{outline:none;border-color:var(--rose);box-shadow:0 0 0 3px #db27772e}.admin__result{width:100%;display:flex;flex-direction:column;align-items:center;gap:var(--space-3)}.admin__link{word-break:break-all;font-size:.95rem;color:var(--rose)}.admin__qr{width:100%;max-width:300px;height:auto;padding:10px;background:#fff;border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow-soft)}.admin__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-2)}.admin__btn{min-height:48px;padding:12px 22px;font-family:var(--font-body);font-size:1.05rem;color:var(--ink);background:#fff;border:1px solid var(--border);border-radius:999px;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background-color .15s ease}.admin__btn:hover{box-shadow:var(--shadow-soft)}.admin__btn:active{transform:scale(.97)}.admin__btn:focus-visible{outline:2px solid var(--rose);outline-offset:2px}.admin__btn--primary{color:#fff;background:var(--rose);border-color:var(--rose)}.admin__hint{margin:0;color:var(--ink-soft)}.hearts{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;overflow:hidden;pointer-events:none;contain:layout paint}.particle{position:absolute;left:var(--left);bottom:-8vh;width:var(--size);height:var(--size);color:var(--clr);opacity:0;transform:translateZ(0);animation:particle-float var(--dur) linear var(--delay) infinite}.particle svg{display:block;width:100%;height:100%}@keyframes particle-float{0%{transform:translateZ(0) scale(.85);opacity:0}12%{opacity:var(--op)}50%{transform:translate3d(var(--sway),-58vh,0) scale(1)}85%{opacity:var(--op)}to{transform:translate3d(0,-116vh,0) scale(.9);opacity:0}}.gate{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;overflow:hidden;cursor:pointer;perspective:2200px;perspective-origin:50% 42%}.gate__panel{position:absolute;top:0;bottom:0;width:50.5vw;z-index:1;overflow:hidden;backface-visibility:hidden;transform-style:preserve-3d;will-change:transform;background:radial-gradient(120% 80% at 50% 16%,rgba(216,182,106,.3),transparent 60%),linear-gradient(150deg,#7a1742 0%,var(--ink) 55%,#45102680 100%),var(--ink);box-shadow:inset 0 0 90px #00000059}.gate__panel--left{left:0;transform-origin:left center;border-right:1px solid rgba(216,182,106,.5)}.gate__panel--right{right:0;transform-origin:right center;border-left:1px solid rgba(216,182,106,.5)}.gate__filigree{position:absolute;top:16px;right:16px;bottom:16px;left:16px;border:1px solid var(--gold-line);border-radius:10px;opacity:.7;pointer-events:none}.gate__filigree:before{content:"";position:absolute;top:7px;right:7px;bottom:7px;left:7px;border:1px solid rgba(216,182,106,.45);border-radius:6px}.gate__inner{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(10px,3vh,22px);padding:0 clamp(16px,6vw,48px);color:var(--gold-line);text-align:center}.gate__role{font-family:var(--font-body);font-size:clamp(.72rem,2.4vw,.92rem);letter-spacing:.42em;text-transform:uppercase;color:var(--gold-line);padding-left:.42em}.gate__figure{width:clamp(96px,26vw,150px);height:auto;color:var(--gold-line);filter:drop-shadow(0 2px 6px rgba(0,0,0,.25))}.gate__name{font-family:var(--font-display);font-size:clamp(2rem,9vw,3.4rem);line-height:1.05;color:#fbeedb}.gate__seam{position:absolute;top:0;bottom:0;left:50%;width:3px;transform:translate(-50%);z-index:2;pointer-events:none;background:linear-gradient(180deg,transparent,var(--gold-line) 12%,#f0d79a 50%,var(--gold-line) 88%,transparent);box-shadow:0 0 12px #d8b66a99;transition:opacity .6s ease}.gate__seal{position:absolute;top:50%;left:50%;z-index:3;width:clamp(78px,20vw,104px);height:clamp(78px,20vw,104px);transform:translate(-50%,-50%);display:grid;place-items:center;padding:0;border-radius:50%;cursor:pointer;color:#fbeedb;background:radial-gradient(circle at 38% 32%,#c0246b,var(--rose) 45%,#9d1b56 100%);border:2px solid var(--gold-line);box-shadow:0 6px 20px -6px #5c163399,inset 0 2px 6px #ffffff59,inset 0 -6px 12px #00000040;will-change:transform,opacity;transition:transform .18s ease,box-shadow .18s ease}.gate__seal:hover{transform:translate(-50%,-50%) scale(1.05)}.gate__seal:active{transform:translate(-50%,-50%) scale(.96)}.gate__seal:focus-visible{outline:3px solid #fff;outline-offset:3px}.gate__seal-ring{position:absolute;top:8px;right:8px;bottom:8px;left:8px;width:calc(100% - 16px);height:calc(100% - 16px);color:var(--gold-line);opacity:.9}.gate__seal-mono{display:inline-flex;align-items:center;gap:3px;line-height:1}.gate__seal-letter{font-family:var(--font-display);font-size:clamp(1.5rem,5vw,2rem)}.gate__seal-amp{font-family:var(--font-body);font-size:.8rem;color:var(--gold-line)}.gate__skip{position:absolute;top:14px;left:50%;z-index:4;transform:translate(-50%);width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;background:var(--rose);color:#fff;cursor:pointer}.gate__skip:focus-visible{width:auto;height:auto;padding:10px 20px;clip:auto;clip-path:none;border-radius:999px;box-shadow:0 4px 16px #0000004d;outline:2px solid #fff;outline-offset:2px;font-family:var(--font-body);font-size:1rem}.gate--open{cursor:default}.gate--open .gate__panel--left{animation:gateSwingLeft 1.1s cubic-bezier(.7,0,.3,1) forwards}.gate--open .gate__panel--right{animation:gateSwingRight 1.1s cubic-bezier(.7,0,.3,1) forwards}.gate--open .gate__seam{opacity:0}.gate--open .gate__seal{animation:gateSealOut .52s cubic-bezier(.4,0,1,1) forwards;pointer-events:none}.gate--open .gate__skip{pointer-events:none}@keyframes gateSwingLeft{0%{transform:rotateY(0)}to{transform:rotateY(-115deg)}}@keyframes gateSwingRight{0%{transform:rotateY(0)}to{transform:rotateY(115deg)}}@keyframes gateSealOut{0%{transform:translate(-50%,-50%) scale(1);opacity:1}60%{transform:translate(-50%,-50%) scale(1.18);opacity:1}to{transform:translate(-50%,-50%) scale(.4);opacity:0}}.music{position:fixed;top:calc(env(safe-area-inset-top,0px) + 12px);right:calc(env(safe-area-inset-right,0px) + 12px);z-index:1000;display:flex;align-items:center;padding:5px;background:#fffdfbbd;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--gold-line);border-radius:999px;box-shadow:var(--shadow-soft)}.music__disc{position:relative;flex:0 0 auto;width:46px;height:46px;padding:0;border:none;border-radius:50%;background:transparent;cursor:pointer;display:grid;place-items:center;-webkit-tap-highlight-color:transparent}.music__disc:focus-visible{outline:2px solid var(--rose);outline-offset:2px}.vinyl{display:block;width:46px;height:46px;border-radius:50%;box-shadow:0 2px 8px #0000004d}.music__disc.is-playing .vinyl{animation:vinyl-spin 4s linear infinite}@keyframes vinyl-spin{to{transform:rotate(360deg)}}.music__icon{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:none;color:#fbeedb}.music__icon svg{width:15px;height:15px;filter:drop-shadow(0 1px 1.5px rgba(0,0,0,.45))}@media(max-height:480px){.gate__inner{gap:clamp(4px,1.6vh,12px)}.gate__figure{width:clamp(56px,14vh,120px)}.gate__role{font-size:clamp(.62rem,2vh,.85rem)}.gate__name{font-size:clamp(1.4rem,7vh,2.6rem)}}@media(prefers-reduced-motion:reduce){.card>*,.card{animation:none!important}.admin__btn{transition:none}body{background-attachment:scroll}.gate{display:none!important}.particle{animation:none;opacity:var(--op);transform:translate3d(0,-40vh,0)}.particle:nth-child(n+8){display:none}.music__disc.is-playing .vinyl{animation:none}}
