/* Lotus Invites – Lux engine (modern designs) */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body.lx{margin:0;min-height:100vh;font-family:var(--fb);color:var(--ink);background:linear-gradient(170deg,var(--bg1),var(--bg2) 55%,var(--bg3));background-attachment:fixed;overflow-x:hidden;-webkit-font-smoothing:antialiased;line-height:1.5}
body.lx.is-intro{overflow:hidden;height:100vh;height:100svh}
img{max-width:100%;display:block}
button{font:inherit;cursor:pointer}
p{margin:0}
h1,h2,h3{margin:0;font-weight:inherit}
a{color:inherit}
[hidden]{display:none!important}

/* ============ background layer ============ */
.bgl{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.bgl>*{position:absolute}
.grain{inset:-50%;opacity:.12;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");animation:grain 1.2s steps(6) infinite}
.dark .grain{opacity:.08;mix-blend-mode:screen;filter:invert(1)}
@keyframes grain{0%{transform:translate(0,0)}25%{transform:translate(-3%,2%)}50%{transform:translate(2%,-3%)}75%{transform:translate(-2%,-1%)}100%{transform:translate(1%,3%)}}
.vign{inset:0;background:radial-gradient(ellipse at center,transparent 40%,rgba(0,0,0,.45))}
.light .vign{background:radial-gradient(ellipse at center,transparent 50%,rgba(0,0,0,.08))}
.bgpat{inset:0;width:100%;height:100%}
.bgpat.mv{inset:-120px;width:calc(100% + 240px);height:calc(100% + 240px);animation:patmv 60s linear infinite}
@keyframes patmv{to{transform:translate(96px,96px)}}
/* aurora */
.au{width:70vmax;height:70vmax;border-radius:50%;filter:blur(80px);opacity:.42;mix-blend-mode:screen;animation:au 18s ease-in-out infinite alternate}
.au:nth-child(1){background:var(--a1);left:-25vmax;top:-20vmax}
.au:nth-child(2){background:var(--a2);right:-25vmax;top:10vh;animation-duration:22s;animation-delay:-6s}
.au:nth-child(3){background:var(--a3);left:10vw;bottom:-35vmax;opacity:.45;animation-duration:26s}
.au:nth-child(4){background:var(--acc);right:5vw;bottom:-30vmax;opacity:.45;animation-duration:20s;animation-delay:-10s}
@keyframes au{0%{transform:translate(0,0) scale(1)}50%{transform:translate(8vw,6vh) scale(1.15)}100%{transform:translate(-6vw,10vh) scale(.92)}}
/* colour blocks */
.bk{border-radius:50%}
.bk.b1{width:58vmax;height:58vmax;background:var(--a1);right:-26vmax;top:-22vmax;animation:spinS 60s linear infinite}
.bk.b2{width:34vmax;height:34vmax;background:var(--a2);left:-14vmax;bottom:10vh;border-radius:50% 50% 0 0;animation:bob 9s ease-in-out infinite}
.bk.b3{width:18vmax;height:18vmax;background:var(--a3);left:8vw;top:12vh;animation:bob 7s ease-in-out infinite reverse}
.bk.b4{width:22vmax;height:22vmax;border:3px solid var(--ink);background:none;right:6vw;bottom:-6vmax;opacity:.25}
@keyframes spinS{to{transform:rotate(360deg)}}
@keyframes bob{50%{transform:translateY(-22px) rotate(4deg)}}
/* soft blobs */
.bl{width:52vmax;height:52vmax;filter:blur(40px);opacity:.75;border-radius:43% 57% 61% 39%/45% 38% 62% 55%;animation:morph 16s ease-in-out infinite alternate}
.bl:nth-child(1){background:var(--a1);left:-18vmax;top:-12vmax}
.bl:nth-child(2){background:var(--a2);right:-18vmax;top:20vh;animation-delay:-5s}
.bl:nth-child(3){background:var(--a3);left:5vw;bottom:-22vmax;animation-delay:-9s}
.bl:nth-child(4){background:var(--m1);right:10vw;bottom:-10vmax;width:30vmax;height:30vmax;animation-delay:-3s}
.bl:nth-child(5){background:#fff;left:40vw;top:30vh;width:24vmax;height:24vmax;opacity:.5}
@keyframes morph{0%{border-radius:43% 57% 61% 39%/45% 38% 62% 55%;transform:translate(0,0) rotate(0)}100%{border-radius:61% 39% 35% 65%/58% 62% 38% 42%;transform:translate(4vw,5vh) rotate(40deg)}}
/* paper */
.grid{inset:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:48px 48px;opacity:.35;-webkit-mask:radial-gradient(ellipse at center,#000 30%,transparent 80%);mask:radial-gradient(ellipse at center,#000 30%,transparent 80%)}
/* bokeh */
.bo{border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.95),rgba(255,236,210,.35) 40%,transparent 70%);width:calc(40px + var(--i) * 9px);height:calc(40px + var(--i) * 9px);left:calc(var(--i) * 6.2%);top:calc(((var(--i) * 37) % 100) * 1%);opacity:.55;filter:blur(2px);animation:bok calc(9s + var(--i) * .7s) ease-in-out infinite alternate;animation-delay:calc(var(--i) * -1.3s)}
@keyframes bok{0%{transform:translate(0,0);opacity:.2}50%{opacity:.75}100%{transform:translate(30px,-60px);opacity:.3}}
/* stars & night */
.neb{inset:-20%;background:radial-gradient(ellipse at 20% 20%,color-mix(in srgb,var(--a1) 35%,transparent),transparent 50%),radial-gradient(ellipse at 80% 70%,color-mix(in srgb,var(--a2) 30%,transparent),transparent 55%);animation:au 30s ease-in-out infinite alternate}
.bg-night .neb{background:radial-gradient(ellipse at 50% 120%,var(--bg3),transparent 60%),radial-gradient(ellipse at 15% 10%,color-mix(in srgb,var(--a1) 25%,transparent),transparent 50%)}
.st{width:2px;height:2px;border-radius:50%;background:#fff;left:calc((var(--i) * 53) % 100 * 1%);top:calc((var(--i) * 29) % 100 * 1%);box-shadow:0 0 6px #fff;animation:twk calc(2s + (var(--i) % 5) * .7s) ease-in-out infinite;animation-delay:calc(var(--i) * -.37s)}
.st:nth-child(3n){width:3px;height:3px}
@keyframes twk{50%{opacity:.15;transform:scale(.5)}}
/* retro waves */
.bg-waves .sun,.in-waves .ibg .sun{width:46vmin;height:46vmin;border-radius:50%;left:50%;top:14vh;transform:translateX(-50%);background:repeating-linear-gradient(180deg,var(--m1) 0 18px,transparent 18px 24px);-webkit-mask:linear-gradient(#000 55%,transparent 100%);opacity:.9}
.bgw{left:0;right:0;bottom:0;height:42vh}
.bgw svg{width:100%;height:100%}
.rw{animation:wvx 7s ease-in-out infinite alternate}.rw1{animation-delay:-2s}.rw2{animation-delay:-4s}.rw3{animation-delay:-1s}
@keyframes wvx{to{transform:translateX(-60px)}}
/* sunset */
.bg-sunset .sun{width:70vmin;height:70vmin;border-radius:50%;left:50%;top:38vh;transform:translateX(-50%);background:radial-gradient(circle,var(--m1),var(--a1) 60%,transparent 70%);opacity:.85;animation:sunp 8s ease-in-out infinite alternate}
@keyframes sunp{to{transform:translateX(-50%) scale(1.06)}}
.dune{left:-10%;right:-10%;border-radius:50% 50% 0 0}
.dune.d1{height:34vh;bottom:-6vh;background:var(--a1);opacity:.55}
.dune.d2{height:24vh;bottom:-8vh;left:-30%;background:var(--a2);opacity:.6}
/* marble */
.marble{inset:0;width:100%;height:100%;opacity:.55}
/* faint large art */
.bgk{right:-22vmin;top:-16vmin;width:80vmin;opacity:.14;animation:spinS 140s linear infinite}
.bgv{left:2vw;bottom:-4vh;height:110vh;opacity:.18}
.bgv svg{height:100%;width:auto}
/* user photo */
.ubg{position:fixed;inset:0;z-index:0;background-size:cover;background-position:center 25%;opacity:0;transition:opacity 1.4s ease}
.ubg::after{content:"";position:absolute;inset:0;background:var(--bg1);opacity:.62}
.is-open .ubg{opacity:1}
.has-ubg .bgl{opacity:.35}

/* ============ side decorations ============ */
.sides{position:fixed;inset:0;z-index:2;pointer-events:none;opacity:0;transition:opacity 1.2s ease .4s}
.is-open .sides{opacity:1}
.sd{position:absolute;top:0;bottom:0;width:clamp(44px,12vw,150px);overflow:hidden}
.sd.l{left:0}.sd.r{right:0;transform:scaleX(-1)}
.sd svg{width:100%;height:100%}
@media (max-width:560px){.sd{width:44px;opacity:.75}}
/* hanging things swing */
.sw{animation:swing calc(4s + var(--i) * .6s) ease-in-out infinite alternate;animation-delay:calc(var(--i) * -.9s)}
@keyframes swing{from{transform:rotate(-2.4deg)}to{transform:rotate(2.4deg)}}
.pz{animation:pzf 6s ease-in-out infinite;animation-delay:calc(var(--i) * -1.1s);transform-box:fill-box;transform-origin:center}
@keyframes pzf{50%{opacity:.55}}
/* orbs */
.sd-orbs .sd i{position:absolute;left:-30%;width:120%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fff,var(--a1) 40%,var(--a2) 75%,transparent 76%);filter:blur(1px) drop-shadow(0 0 30px var(--a1));opacity:.75;animation:orb calc(10s + var(--i) * 3s) ease-in-out infinite alternate}
.sd-orbs .sd i:nth-child(1){top:8%}.sd-orbs .sd i:nth-child(2){top:46%;width:70%;left:-10%;animation-delay:-4s}.sd-orbs .sd i:nth-child(3){top:76%;width:90%;animation-delay:-7s}
@keyframes orb{to{transform:translateY(-14vh) scale(1.1)}}
/* bubbles */
.sd-bubbles .sd i{position:absolute;bottom:-20%;left:calc(var(--i) * 12%);width:calc(24px + var(--i) * 7px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 30% 30%,#fff,rgba(255,255,255,.2) 45%,color-mix(in srgb,var(--a2) 50%,transparent) 75%);box-shadow:inset 0 0 12px rgba(255,255,255,.7);animation:bub calc(9s + var(--i) * 1.4s) linear infinite;animation-delay:calc(var(--i) * -2.1s)}
@keyframes bub{to{transform:translateY(-130vh) translateX(20px)}}
/* vertical ticker */
.vt{position:absolute;top:0;left:50%;width:100vh;transform-origin:0 0;transform:rotate(90deg) translateY(-50%);white-space:nowrap;display:flex;font:500 13px/1 var(--fl);letter-spacing:.28em;text-transform:uppercase;color:var(--ink);opacity:.55}
.vt span{display:inline-block;padding-right:2em;animation:tick 40s linear infinite}
.sd.r .vt{transform:rotate(90deg) translateY(-50%) scaleY(-1) scaleX(-1)}
@keyframes tick{to{transform:translateX(-100%)}}
/* minimal lines */
.vl{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:space-around;padding:6vh 0}
.vl i{flex:1;width:1px;background:linear-gradient(transparent,var(--ink),transparent);opacity:.35;margin:10px 0}
.vl b{writing-mode:vertical-rl;font:500 12px var(--fl);letter-spacing:.4em;opacity:.6}
.sd.r .vl b{transform:scaleX(-1) rotate(180deg)}
/* neon tubes */
.nt{filter:drop-shadow(0 0 4px var(--c)) drop-shadow(0 0 12px var(--c));animation:nflk 6s infinite;animation-delay:calc(var(--i) * -1.7s)}
@keyframes nflk{0%,19%,21%,23%,80%,100%{opacity:1}20%,22%{opacity:.25}}
.wv{animation:wvy 6s ease-in-out infinite alternate;animation-delay:calc(var(--i) * -1.5s)}
@keyframes wvy{to{transform:translateY(-70px)}}
.stem{stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 3.5s ease .6s}
.is-open .stem,.bgv .stem{stroke-dashoffset:0}
.lf{opacity:0;transform:scale(.3);transform-box:fill-box;transform-origin:center;transition:opacity .6s,transform .8s cubic-bezier(.2,.9,.3,1.3);transition-delay:calc(1s + var(--i) * .12s)}
.is-open .lf,.bgv .lf{opacity:1;transform:none}
.tw{animation:twk 3s ease-in-out infinite;animation-delay:calc(var(--i,0) * -.6s);transform-box:fill-box;transform-origin:center}

/* ============ intro ============ */
#intro{position:fixed;inset:0;z-index:50;display:grid;place-items:center;overflow:hidden;background:radial-gradient(ellipse at 50% 40%,var(--bg2),var(--bg1) 75%);perspective:1400px}
.ibg{position:absolute;inset:0;pointer-events:none}
.ic{position:relative;z-index:4;width:min(92vw,560px);text-align:center;padding:24px 18px;display:flex;flex-direction:column;align-items:center;gap:10px}
.ic>*{opacity:0;transform:translateY(16px);animation:icin .9s cubic-bezier(.2,.8,.2,1) forwards;animation-delay:calc(.35s + var(--k,0) * .14s)}
.ic>:nth-child(1){--k:0}.ic>:nth-child(2){--k:1}.ic>:nth-child(3){--k:2}.ic>:nth-child(4){--k:3}.ic>:nth-child(5){--k:4}.ic>:nth-child(6){--k:5}.ic>:nth-child(7){--k:6}.ic>:nth-child(8){--k:7}
@keyframes icin{to{opacity:1;transform:none}}
.bism{font-family:Amiri,serif;font-size:clamp(18px,4.6vw,26px);color:var(--acc);line-height:1.6}
.ml{font-family:"Noto Serif Malayalam",serif;font-weight:600;font-size:clamp(20px,5vw,28px);color:var(--acc)}
.tg{font:500 clamp(10px,2.6vw,12.5px)/1.5 var(--fl);letter-spacing:.32em;text-transform:uppercase;color:var(--mut)}
.ti{font:400 clamp(12px,3vw,14px)/1.4 var(--fl);letter-spacing:.42em;text-transform:uppercase;color:var(--acc)}
.nm{font-family:var(--fn);font-weight:var(--fnw);font-style:var(--fns);line-height:1.02;font-size:calc(var(--nk,1) * clamp(46px,14vw,104px));display:flex;flex-direction:column;align-items:center;gap:.02em;color:var(--ink);letter-spacing:-.01em}
.nm .nmw{display:block;white-space:nowrap;padding:.06em .18em}
.nm .amp{font-size:.42em;color:var(--acc);font-family:var(--fn);font-style:italic;line-height:1.1}
.dt{font:500 clamp(11px,2.8vw,13px) var(--fl);letter-spacing:.26em;text-transform:uppercase;color:var(--mut);padding-top:6px}
.open-btn{position:relative;margin-top:12px;padding:16px 34px;border:0;border-radius:999px;font:600 clamp(11px,3vw,13px) var(--fl);letter-spacing:.3em;text-transform:uppercase;color:#fff;background:linear-gradient(120deg,var(--acc),var(--acc2));box-shadow:0 14px 34px -12px var(--acc);overflow:hidden;white-space:nowrap;transition:transform .25s}
.open-btn::before{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.65) 50%,transparent 65%);transform:translateX(-120%);animation:sheen 3s 2s ease-in-out infinite}
.open-btn::after{content:"";position:absolute;inset:-6px;border-radius:999px;border:2px solid var(--acc);opacity:0;animation:ring 2.4s 2s ease-out infinite}
.open-btn:hover{transform:translateY(-2px) scale(1.03)}
.open-btn span{position:relative}
@keyframes sheen{60%,100%{transform:translateX(120%)}}
@keyframes ring{0%{transform:scale(.9);opacity:.8}100%{transform:scale(1.35);opacity:0}}
.tap{font:500 10px var(--fl);letter-spacing:.4em;text-transform:uppercase;color:var(--mut);animation:tapb 2s ease-in-out infinite}
@keyframes tapb{50%{opacity:.3}}
.irisc{display:none}
/* generic open/close timing */
body.opening #intro .ic{transition:opacity .5s,transform .7s;opacity:0;transform:scale(.94)}
body.intro-done #intro{display:none}

/* intro: iris */
.in-iris #intro{background:transparent;clip-path:circle(150% at var(--ox,50%) var(--oy,70%));transition:clip-path 1.2s cubic-bezier(.7,0,.2,1)}
.in-iris .ibg{background:inherit}
.in-iris #intro::before{content:"";position:absolute;inset:0;background:linear-gradient(170deg,var(--bg1),var(--bg2) 55%,var(--bg3))}
.in-iris #intro::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 30% 20%,color-mix(in srgb,var(--a1) 55%,transparent),transparent 45%),radial-gradient(circle at 75% 75%,color-mix(in srgb,var(--a2) 55%,transparent),transparent 50%);filter:blur(30px);animation:au 14s ease-in-out infinite alternate}
.halo{position:absolute;left:50%;top:50%;width:min(130vw,900px);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--acc) 30%,transparent),transparent 60%);animation:hal 5s ease-in-out infinite alternate;z-index:1}
@keyframes hal{to{transform:translate(-50%,-50%) scale(1.15);opacity:.7}}
body.opening.in-iris #intro{clip-path:circle(0 at var(--ox,50%) var(--oy,70%))}
/* intro: shutters */
.in-shutters #intro{background:transparent}
.shut{position:absolute;inset:0;display:flex}
.shut i{flex:1;height:100%;background:var(--bg1);transition:transform .9s cubic-bezier(.7,0,.2,1);transition-delay:calc(var(--i) * .08s)}
.shut i:nth-child(2){background:var(--bg2)}.shut i:nth-child(4){background:var(--bg2)}
.dot1,.dot2{position:absolute;border-radius:50%;z-index:2}
.dot1{width:46vmin;height:46vmin;background:var(--a1);right:-12vmin;top:-10vmin;animation:spinS 30s linear infinite;border-radius:50% 50% 0 50%}
.dot2{width:30vmin;height:30vmin;background:var(--a2);left:-8vmin;bottom:-6vmin;animation:bob 6s ease-in-out infinite}
.in-shutters .ic::before{content:"";position:absolute;inset:-14px;background:#fff;border:2px solid var(--ink);border-radius:28px;box-shadow:10px 10px 0 var(--ink);z-index:-1}
.in-shutters .ic{padding:34px 20px}
body.opening.in-shutters .shut i{transform:translateY(-102%)}
body.opening.in-shutters .shut i:nth-child(even){transform:translateY(102%)}
body.opening.in-shutters .dot1,body.opening.in-shutters .dot2{transition:transform .8s;transform:scale(0)}
/* intro: draw (kolam) */
.ikolam{position:absolute;left:50%;top:50%;width:min(130vw,780px);transform:translate(-50%,-50%);opacity:.5}
.ikolam .kl{stroke-dasharray:1;stroke-dashoffset:1;animation:drawk 5s ease forwards}
.ikolam .kl1{animation-delay:.6s}.ikolam .kl2{animation-delay:1.2s}.ikolam .kl3{stroke-dasharray:2 7;animation:spinS 60s linear infinite;transform-origin:200px 200px}
.ikolam .kd circle{opacity:0;animation:fadein .4s forwards;animation-delay:calc(var(--i,0) * .02s + .2s)}
@keyframes drawk{to{stroke-dashoffset:0}}
@keyframes fadein{to{opacity:1}}
.ikolam svg{width:100%}
body.opening.in-draw #intro{transition:opacity 1s .4s;opacity:0}
body.opening.in-draw .ikolam{transition:transform 1.4s cubic-bezier(.7,0,.2,1),opacity 1.2s;transform:translate(-50%,-50%) scale(3) rotate(40deg);opacity:0}
/* intro: doors / curtain */
.dr{position:absolute;top:0;bottom:0;width:50.5%;z-index:3;transition:transform 1.5s cubic-bezier(.65,0,.25,1);box-shadow:0 0 40px rgba(0,0,0,.45)}
.dr.l{left:0;transform-origin:0 50%}
.dr.r{right:0;transform-origin:100% 50%}
.dr.r>*{transform:scaleX(-1)}
.dr svg{width:100%;height:100%;display:block}
.in-doors .ic::before{content:"";position:absolute;inset:-6px;border-radius:24px;background:color-mix(in srgb,var(--bg1) 82%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line);box-shadow:0 30px 70px -30px rgba(0,0,0,.6);z-index:-1}
.in-doors .ic{width:min(86vw,460px);padding:30px 18px}
body.opening.in-doors .dr.l{transform:rotateY(-108deg)}
body.opening.in-doors .dr.r{transform:rotateY(108deg)}
body.opening.in-doors #intro{transition:background-color 1s .8s;background:transparent}
.cur{position:absolute;inset:0;background:repeating-linear-gradient(90deg,var(--bg2) 0 26px,var(--bg3) 40px,var(--bg1) 52px,var(--bg2) 64px);box-shadow:inset 0 -60px 80px -40px rgba(0,0,0,.25)}
.in-curtain .dr{transition:transform 1.6s cubic-bezier(.65,0,.25,1)}
.in-curtain .ic::before{content:"";position:absolute;inset:-6px;background:var(--pan);border:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:-1}
body.opening.in-curtain .dr.l{transform:translateX(-100%) skewX(-6deg)}
body.opening.in-curtain .dr.r{transform:translateX(100%) skewX(6deg)}
body.opening.in-curtain #intro{transition:background-color .6s .6s;background:transparent}
/* intro: bubbles */
.bb{position:absolute;border-radius:50%;width:calc(50px + var(--i) * 18px);aspect-ratio:1;left:calc((var(--i) * 37) % 90 * 1%);top:calc((var(--i) * 53) % 85 * 1%);background:radial-gradient(circle at 30% 28%,#fff 0,rgba(255,255,255,.4) 18%,color-mix(in srgb,var(--a1) 60%,transparent) 55%,color-mix(in srgb,var(--a2) 70%,transparent) 100%);box-shadow:inset -8px -10px 24px rgba(255,255,255,.5),0 20px 40px -20px var(--a2);animation:bobb calc(5s + var(--i) * .6s) ease-in-out infinite alternate;animation-delay:calc(var(--i) * -.8s);transition:transform .9s cubic-bezier(.5,0,.2,1),opacity .9s}
@keyframes bobb{to{transform:translate(18px,-26px) scale(1.06)}}
.in-bubble .ic::before{content:"";position:absolute;inset:-4px;border-radius:40px;background:rgba(255,255,255,.4);border:1px solid rgba(255,255,255,.8);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:0 30px 60px -30px var(--a2);z-index:-1}
.in-bubble .ic{padding:30px 18px}
body.opening.in-bubble .bb{transform:scale(4);opacity:0}
body.opening.in-bubble #intro{transition:opacity .9s .5s;opacity:0}
/* intro: magazine cover */
.in-cover #intro{background:var(--bg1);transform-origin:0 50%;transition:transform 1.4s cubic-bezier(.6,0,.2,1),box-shadow 1.4s}
.mag{position:absolute;inset:0;padding:16px;display:grid;grid-template-rows:auto auto 1fr auto;pointer-events:none}
.mag-top{display:flex;justify-content:space-between;font:600 11px var(--fl);letter-spacing:.2em;text-transform:uppercase;border-bottom:2px solid var(--ink);padding-bottom:6px}
.mag-mast{font-family:var(--fn);font-weight:700;font-size:clamp(54px,17vw,150px);line-height:.9;letter-spacing:-.02em;text-align:center;margin-top:6px}
.mag-img{position:absolute;inset:28% 10% 24%;overflow:hidden;filter:grayscale(1) contrast(1.1);opacity:.9}
.mag-img img{width:100%;height:100%;object-fit:cover}
.mag-ini{display:grid;place-items:center;width:100%;height:100%;font-family:var(--fn);font-size:40vmin;font-style:italic;color:rgba(0,0,0,.06)}
.mag-lines{position:absolute;left:16px;bottom:18px;font:500 11px var(--fl);letter-spacing:.14em;text-transform:uppercase;display:flex;flex-direction:column;gap:4px;text-align:left}
.mag-lines b{color:var(--acc2)}
.in-cover .ic{margin-top:26vh;background:rgba(255,255,255,.86);padding:22px 16px;box-shadow:0 20px 50px -20px rgba(0,0,0,.4)}
.in-cover .nm{font-size:calc(var(--nk,1) * clamp(40px,12vw,84px))}
body.opening.in-cover #intro{transform:rotateY(-100deg);box-shadow:-40px 0 80px rgba(0,0,0,.4)}
body.opening.in-cover #intro .ic{opacity:1;transform:none}
/* intro: envelope */
.env{position:absolute;left:50%;top:56%;width:min(94vw,560px);aspect-ratio:1.45;transform:translate(-50%,-50%);z-index:2}
.env i{position:absolute;display:block}
.env-b{inset:0;background:var(--door);border-radius:10px;box-shadow:0 40px 80px -30px rgba(0,0,0,.35)}
.env-l{left:0;top:0;bottom:0;width:52%;background:color-mix(in srgb,var(--door) 92%,#000);clip-path:polygon(0 0,100% 55%,0 100%);z-index:5;border-radius:10px 0 0 10px}
.env-r{right:0;top:0;bottom:0;width:52%;background:color-mix(in srgb,var(--door) 92%,#000);clip-path:polygon(100% 0,0 55%,100% 100%);z-index:5;border-radius:0 10px 10px 0}
.env-f{left:0;right:0;top:0;height:60%;background:color-mix(in srgb,var(--door) 86%,#000);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:50% 0;z-index:6;transition:transform .8s ease,z-index 0s .4s}
.seal{position:absolute;left:50%;top:58%;transform:translate(-50%,-50%);z-index:7;width:clamp(64px,16vw,86px);aspect-ratio:1;border-radius:50%;display:grid;place-items:center;font:600 22px var(--fl);color:#fff;letter-spacing:.06em;background:radial-gradient(circle at 35% 30%,#d36b6b,#9B2D30 70%);box-shadow:0 0 0 6px rgba(155,45,48,.25),0 10px 18px -6px rgba(0,0,0,.4);transition:transform .5s,opacity .5s}
.in-envelope .ic{position:absolute;left:50%;top:50%;transform:translate(-50%,-56%);width:min(86vw,500px);background:#FFFDF7;padding:26px 14px;border-radius:6px;box-shadow:0 20px 50px -24px rgba(0,0,0,.35);z-index:3}
.in-envelope .ic>*{animation-delay:calc(.2s + var(--k,0) * .1s)}
.in-envelope .ic .nm{font-size:calc(var(--nk,1) * clamp(40px,12vw,80px))}
body.opening.in-envelope .seal{transform:translate(-50%,-50%) scale(0);opacity:0}
body.opening.in-envelope .env-f{transform:rotateX(180deg);z-index:1}
body.opening.in-envelope .env{transition:transform 1s .5s ease,opacity .8s .9s;transform:translate(-50%,40%);opacity:0}
body.opening.in-envelope #intro .ic{transition:transform 1s .3s,opacity .6s 1s;transform:translate(-50%,-120%);opacity:0}
body.opening.in-envelope #intro{transition:opacity .7s 1.1s;opacity:0}
/* intro: burst */
.rays{position:absolute;left:50%;top:50%;width:220vmax;height:220vmax;transform:translate(-50%,-50%);background:repeating-conic-gradient(from 0deg,color-mix(in srgb,var(--m1) 70%,transparent) 0 4deg,transparent 4deg 14deg);-webkit-mask:radial-gradient(circle,#000 5%,transparent 45%);mask:radial-gradient(circle,#000 5%,transparent 45%);animation:spinS 70s linear infinite;opacity:.65}
.in-burst .ic::before{content:"";position:absolute;inset:-4px;border-radius:30px;background:rgba(255,255,255,.42);border:1px solid rgba(255,255,255,.75);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 30px 60px -30px rgba(120,70,40,.5);z-index:-1}
.in-burst .ic{padding:28px 18px}
body.opening.in-burst .halo{transition:transform 1s,opacity 1s .4s;transform:translate(-50%,-50%) scale(4);opacity:0}
body.opening.in-burst #intro{transition:opacity .8s .6s,filter .8s;opacity:0;filter:brightness(1.6)}
/* intro: neon */
.in-neon #intro{background:radial-gradient(ellipse at 50% 30%,#1B1F55,#070818 70%)}
.in-neon .ic{border:2px solid var(--a2);border-radius:26px;padding:30px 16px;box-shadow:0 0 14px var(--a2),inset 0 0 14px var(--a2);animation:nbox 5s infinite}
@keyframes nbox{0%,40%,44%,100%{box-shadow:0 0 14px var(--a2),inset 0 0 14px var(--a2)}42%{box-shadow:none}}
body.opening.in-neon #intro{animation:noff 1.2s steps(1) forwards}
@keyframes noff{0%{opacity:1}15%{opacity:.2}25%{opacity:1}35%{opacity:.1}45%{opacity:.8}60%,100%{opacity:0}}
/* intro: waves */
.iwaves{position:absolute;left:0;right:0;bottom:0;width:100%;height:46vh;transition:transform 1.4s cubic-bezier(.7,0,.2,1)}
.in-waves #intro .sun{position:absolute}
.in-waves .ic::before{content:"";position:absolute;inset:-4px;border-radius:999px 999px 30px 30px;background:var(--pan);border:3px solid var(--ink);z-index:-1}
.in-waves .ic{padding:56px 18px 28px}
body.opening.in-waves .iwaves{transform:translateY(-140vh) scaleY(3)}
body.opening.in-waves #intro{transition:opacity .6s .9s;opacity:0}
/* intro: rosette */
.irose{position:absolute;left:50%;top:50%;width:min(140vw,820px);transform:translate(-50%,-50%);opacity:.3;animation:spinS 80s linear infinite}
.irose .rs{stroke-dasharray:1200;stroke-dashoffset:1200;animation:drawk 4s ease forwards;animation-delay:calc(var(--d,0s))}
.irose .rs1{--d:.3s}.irose .rs2{--d:.6s}.irose .rs3{--d:.9s}.irose .rs4{--d:1.1s}.irose .rs5{--d:1.3s}
body.opening.in-rosette .irose{transition:transform 1.4s cubic-bezier(.7,0,.2,1),opacity 1.2s;transform:translate(-50%,-50%) scale(4) rotate(45deg);opacity:0;animation:none}
body.opening.in-rosette #intro{transition:opacity 1s .5s;opacity:0}
/* intro: arch */
.iarch{position:absolute;left:50%;top:6vh;height:46vh;transform:translateX(-50%);filter:drop-shadow(0 30px 40px rgba(120,40,20,.35))}
.iarch .sun{animation:sunr 4s ease-out both}
@keyframes sunr{from{transform:translateY(80px)}}
.in-arch .ic{margin-top:40vh;padding-top:10px}
.in-arch .ic .nm{font-size:calc(var(--nk,1) * clamp(40px,11vw,80px))}
body.opening.in-arch #intro{transition:transform 1.4s cubic-bezier(.7,0,.2,1),opacity 1s .5s;transform:scale(2.6);transform-origin:50% 28%;opacity:0}
/* intro: moon */
.imoon{position:absolute;left:50%;top:4vh;width:min(78vw,480px);transform:translateX(-50%)}
.imoon .mn{animation:mrise 3s cubic-bezier(.2,.8,.2,1) both;transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 0 30px var(--m2))}
@keyframes mrise{from{transform:translateY(60px) rotate(-20deg);opacity:0}}
.imoon .cst{stroke-dasharray:1;stroke-dashoffset:1;animation:drawk 4s 1s ease forwards}
.in-moon .ic{margin-top:min(44vw,250px)}
body.opening.in-moon .imoon{transition:transform 1.4s cubic-bezier(.7,0,.2,1);transform:translate(-50%,-80vh)}
body.opening.in-moon #intro{transition:opacity 1s .5s;opacity:0}

/* ============ main ============ */
#inv{position:relative;z-index:3;opacity:0;transition:opacity .8s}
.is-open #inv{opacity:1}
.sec{position:relative;width:min(92vw,720px);margin:0 auto;padding:clamp(56px,10vh,96px) 0;text-align:center}
@media (min-width:700px){.sec{width:min(80vw,760px)}}
.k{font:600 clamp(10px,2.6vw,12px)/1.4 var(--fl);letter-spacing:.38em;text-transform:uppercase;color:var(--acc);margin-bottom:10px}
.h2{font-family:var(--fn);font-weight:var(--fnw);font-style:var(--fns);font-size:clamp(30px,8vw,52px);line-height:1.1;margin-bottom:30px}
.dv{width:min(240px,60vw);margin:14px auto}
.dv svg{width:100%;height:auto;display:block}
/* hero */
.hero{min-height:100vh;min-height:100svh;display:grid;place-items:center;position:relative;padding:60px 0}
.hero-in{width:min(92vw,760px);text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px}
.nm.big{font-size:calc(var(--nk,1) * clamp(52px,16vw,132px))}
.hdate{display:flex;align-items:center;gap:14px;font:500 clamp(11px,2.8vw,13px) var(--fl);letter-spacing:.24em;text-transform:uppercase;color:var(--mut)}
.hdate b{font:var(--fnw) clamp(22px,6vw,34px)/1 var(--fn);letter-spacing:.04em;color:var(--ink);padding:0 14px;border-left:1px solid var(--line);border-right:1px solid var(--line)}
.hven{font:500 clamp(14px,3.6vw,18px)/1.4 var(--fb);display:flex;flex-direction:column;gap:2px}
.hven small{font-size:.78em;color:var(--mut);letter-spacing:.06em}
.scroll-hint{position:absolute;bottom:22px;left:50%;width:26px;height:42px;margin-left:-13px;border:2px solid var(--line);border-radius:14px}
.scroll-hint span{position:absolute;left:50%;top:8px;width:4px;height:8px;margin-left:-2px;border-radius:2px;background:var(--acc);animation:sh 1.8s infinite}
@keyframes sh{0%{transform:translateY(0);opacity:1}100%{transform:translateY(14px);opacity:0}}
/* ticker strip */
.tick{display:none;position:relative;z-index:3;overflow:hidden;background:var(--ink);color:var(--bg1);padding:14px 0;transform:rotate(-2deg);margin:10px -10px;font:600 clamp(12px,3vw,15px)/1 var(--fl);letter-spacing:.24em;text-transform:uppercase}
.tick>div{display:flex;white-space:nowrap}
.tick span{padding-right:2em;animation:tick 30s linear infinite}
.sd-ticker .tick,.t-retro .tick,.t-aurora .tick{display:block}
.t-retro .tick{background:var(--acc);color:#fff}
.t-aurora .tick{background:linear-gradient(90deg,var(--a1),var(--a2));color:#fff;transform:rotate(2deg)}

/* ============ text animations (names) ============ */
.ch{display:inline-block;white-space:pre}
.tx-rise .ch{transform:translateY(.7em);opacity:0}
.tx-rise .on .ch{animation:chrise .8s cubic-bezier(.2,.9,.3,1.2) forwards;animation-delay:calc(var(--i) * .05s)}
@keyframes chrise{to{transform:none;opacity:1}}
.tx-blur .ch{filter:blur(12px);opacity:0;transform:scale(1.3)}
.tx-blur .on .ch{animation:chblur 1.1s ease forwards;animation-delay:calc(var(--i) * .06s)}
@keyframes chblur{to{filter:none;opacity:1;transform:none}}
.tx-mask .nmw{overflow:hidden}
.tx-mask .ch{transform:translateY(110%)}
.tx-mask .on .ch{animation:chmask .9s cubic-bezier(.7,0,.2,1) forwards;animation-delay:calc(var(--i) * .035s)}
@keyframes chmask{to{transform:none}}
.tx-shimmer .ch{background:linear-gradient(100deg,var(--m3) 0%,var(--m1) 25%,var(--m2) 45%,var(--m1) 62%,var(--m3) 85%,var(--m1) 100%);background-size:400% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;opacity:0;transform:translateY(.3em)}
.tx-shimmer .on .ch{animation:chrise .9s ease forwards,shim 4.5s linear infinite;animation-delay:calc(var(--i) * .05s),calc(var(--i) * -.18s)}
.tx-shimmer .nmw{filter:drop-shadow(0 2px 10px color-mix(in srgb,var(--m2) 35%,transparent))}
@keyframes shim{from{background-position:0 0}to{background-position:-400% 0}}
.tx-wave .ch{opacity:0;transform:translateY(.5em) rotate(8deg)}
.tx-wave .on .ch{animation:chrise .7s ease forwards,chwave 3.4s ease-in-out infinite;animation-delay:calc(var(--i) * .05s),calc(1.4s + var(--i) * .12s)}
@keyframes chwave{50%{transform:translateY(-.08em)}}
.tx-neon .nmw{color:#fff;text-shadow:0 0 4px #fff,0 0 12px var(--a1),0 0 26px var(--a1),0 0 50px var(--a1)}
.tx-neon .nm .nmw:last-child{text-shadow:0 0 4px #fff,0 0 12px var(--a2),0 0 26px var(--a2),0 0 50px var(--a2)}
.tx-neon .ch{opacity:.08}
.tx-neon .on .ch{animation:nonc 1.6s steps(1) forwards,nflk 7s 3s infinite;animation-delay:calc(var(--i) * .08s),calc(3s + var(--i) * .3s)}
@keyframes nonc{0%{opacity:.08}20%{opacity:1}30%{opacity:.2}45%{opacity:1}55%{opacity:.3}70%,100%{opacity:1}}
.tx-bounce .ch{transform:scale(0) rotate(-20deg);opacity:0}
.tx-bounce .on .ch{animation:chbounce .7s cubic-bezier(.3,1.8,.5,1) forwards;animation-delay:calc(var(--i) * .06s)}
@keyframes chbounce{to{transform:none;opacity:1}}
.tx-bounce .nmw{color:var(--acc);text-shadow:3px 3px 0 var(--acc2)}
.tx-type .ch{opacity:0}
.tx-type .on .ch{animation:fadein .01s forwards;animation-delay:calc(var(--i) * .09s)}
.tx-type .nm{text-transform:uppercase;letter-spacing:.14em}
.tx-type .nm .nmw{font-size:.62em}
.tx-type .on .nmw:last-of-type::after{content:"";display:inline-block;width:2px;height:.8em;margin-left:4px;background:var(--ink);animation:car 1s steps(1) infinite;vertical-align:-.05em}
@keyframes car{50%{opacity:0}}
.t-marigoldpop .nm .nmw,.t-marigoldpop .h2{color:var(--ink)}
.t-marigoldpop .nm .amp{color:var(--acc);font-style:normal}

/* ============ countdown ============ */
.cd{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(8px,2.4vw,18px);max-width:620px;margin:0 auto}
.cdu{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1}
.cdu b{font:var(--fnw) clamp(26px,8vw,52px)/1 var(--fn);font-style:normal;font-variant-numeric:tabular-nums}
.cdu span{font:600 clamp(8px,2.2vw,11px) var(--fl);letter-spacing:.24em;text-transform:uppercase;color:var(--mut);margin-top:6px}
.ring{display:none;position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:4}
.rt{stroke:var(--line)}
.rp{stroke:var(--acc);stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:calc(100 - var(--p,0));transition:stroke-dashoffset .8s ease}
.cd-note{font-family:var(--fn);font-size:clamp(22px,6vw,34px);margin-top:10px}
.tk{animation:tk .5s ease}
@keyframes tk{0%{transform:translateY(-30%);opacity:0}100%{transform:none;opacity:1}}
/* rings */
.cd-rings .ring{display:block}
.cd-rings .rp{stroke:url(#lxa);filter:drop-shadow(0 0 6px var(--acc))}
.cd-rings .cdu b{font-size:clamp(22px,6.5vw,42px)}
/* chips */
.cd-chips .cdu{aspect-ratio:auto;padding:18px 4px;border-radius:999px;background:var(--pan);border:2px solid var(--ink);box-shadow:5px 5px 0 var(--ink)}
.cd-chips .cdu:nth-child(2){background:var(--a1);color:#fff}.cd-chips .cdu:nth-child(3){background:var(--a3);color:#fff}
.cd-chips .cdu:nth-child(2) span,.cd-chips .cdu:nth-child(3) span{color:rgba(255,255,255,.85)}
.cd-chips .cdu:nth-child(odd){transform:rotate(-3deg)}.cd-chips .cdu:nth-child(even){transform:rotate(3deg)}
/* mono */
.cd-mono .cd{gap:0}
.cd-mono .cdu{aspect-ratio:auto;padding:10px 0;border-left:1px solid var(--line)}
.cd-mono .cdu:first-child{border-left:0}
.cd-mono .cdu b{font-size:clamp(40px,12vw,92px);font-weight:300;letter-spacing:-.04em}
/* flip */
.cd-flip .cdu{aspect-ratio:.8;border-radius:12px;background:linear-gradient(180deg,color-mix(in srgb,var(--ink) 10%,var(--bg2)) 50%,color-mix(in srgb,var(--ink) 4%,var(--bg2)) 50%);border:1px solid var(--line);box-shadow:0 18px 30px -18px rgba(0,0,0,.6);overflow:hidden;perspective:300px}
.cd-flip .cdu::after{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:rgba(0,0,0,.35)}
.cd-flip .cdu b{color:var(--acc)}
.cd-flip .tk{animation:flipd .55s ease}
@keyframes flipd{0%{transform:rotateX(-90deg);opacity:.2}100%{transform:none;opacity:1}}
/* glass */
.cd-glass .cdu{border-radius:22px;background:var(--pan);border:1px solid rgba(255,255,255,.6);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 18px 40px -24px var(--acc)}
.dark .cd-glass .cdu,.dark.cd-glass .cdu{border-color:var(--line)}
/* neon */
.cd-neon .cdu{border-radius:16px;border:2px solid var(--a2);box-shadow:0 0 10px var(--a2),inset 0 0 10px var(--a2)}
.cd-neon .cdu:nth-child(even){border-color:var(--a1);box-shadow:0 0 10px var(--a1),inset 0 0 10px var(--a1)}
.cd-neon .cdu b{color:#fff;text-shadow:0 0 8px var(--a2),0 0 18px var(--a2)}
/* star */
.cd-star .cdu::before{content:"";position:absolute;inset:4%;background:var(--pan);border:1px solid var(--acc);clip-path:polygon(50% 0,64.6% 14.6%,85.4% 14.6%,85.4% 35.4%,100% 50%,85.4% 64.6%,85.4% 85.4%,64.6% 85.4%,50% 100%,35.4% 85.4%,14.6% 85.4%,14.6% 64.6%,0 50%,14.6% 35.4%,14.6% 14.6%,35.4% 14.6%);animation:spinS 40s linear infinite}
.cd-star .cdu::after{content:"";position:absolute;inset:4%;border:1px solid var(--acc);transform:rotate(45deg);opacity:.6}
.cd-star .cdu b,.cd-star .cdu span{position:relative;z-index:1}
.cd-star .cdu b{color:var(--acc2)}
/* arch */
.cd-arch .cdu{aspect-ratio:.72;border-radius:999px 999px 10px 10px;background:var(--pan);border:1px solid var(--line);box-shadow:0 20px 40px -26px var(--acc)}
.cd-arch .cdu b{color:var(--acc)}

/* ============ verse ============ */
.verse{font-family:var(--fn);font-style:italic;font-size:clamp(19px,5vw,27px);line-height:1.55;max-width:600px;margin:0 auto}
.verse .w{display:inline-block;opacity:0;transform:translateY(10px);filter:blur(4px);transition:all .6s ease;transition-delay:calc(var(--i) * .05s)}
.verse.in .w{opacity:1;transform:none;filter:none}

/* ============ couple ============ */
.pp{display:grid;grid-template-columns:1fr auto 1fr;align-items:start;gap:clamp(10px,3vw,30px)}
.pc{display:flex;flex-direction:column;align-items:center;gap:14px}
.ph{position:relative;width:100%;max-width:240px}
.ph-in{position:relative;aspect-ratio:1;overflow:hidden;background:linear-gradient(135deg,var(--a1),var(--a2));display:grid;place-items:center}
.ph-in img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s ease}
.pc:hover .ph-in img{transform:scale(1.06)}
.ph-in span{font-family:var(--fn);font-size:clamp(48px,14vw,96px);color:#fff;font-style:italic}
.ph-r{display:none}
.pt{display:flex;flex-direction:column;gap:4px}
.role{font:600 clamp(9px,2.4vw,11px) var(--fl);letter-spacing:.32em;text-transform:uppercase;color:var(--acc)}
.pt h3{font-family:var(--fn);font-weight:var(--fnw);font-style:var(--fns);font-size:clamp(26px,7vw,42px);line-height:1.1}
.par{font-size:clamp(12px,3.2vw,15px);color:var(--mut)}
.adr{font-size:clamp(11px,3vw,13px);color:var(--mut);opacity:.85}
.pamp{align-self:center;font-family:var(--fn);font-style:italic;font-size:clamp(40px,11vw,72px);color:var(--acc)}
@media (max-width:520px){.pp{grid-template-columns:1fr;justify-items:center}.ph{max-width:220px}.pamp{margin:-6px 0}}
/* circle */
.cp-circle .ph-in{border-radius:50%;box-shadow:0 20px 50px -20px var(--acc)}
.cp-circle .ph-r{display:block;position:absolute;inset:-12px;border-radius:50%;border:2px dashed var(--acc);animation:spinS 24s linear infinite}
.cp-circle .ph-r::before{content:"";position:absolute;inset:-10px;border-radius:50%;border:1px solid var(--line)}
/* tilt stickers */
.cp-tilt .ph-in{border-radius:26px;border:3px solid var(--ink);box-shadow:8px 8px 0 var(--ink)}
.cp-tilt .pc0 .ph{transform:rotate(-5deg)}.cp-tilt .pc1 .ph{transform:rotate(5deg)}
.cp-tilt .pc0 .ph-in{background:var(--a1)}.cp-tilt .pc1 .ph-in{background:var(--a3)}
/* arch */
.cp-arch .ph-in{aspect-ratio:.78;border-radius:999px 999px 14px 14px;box-shadow:0 26px 50px -26px rgba(0,0,0,.55)}
.cp-arch .ph-r{display:block;position:absolute;inset:-9px;border-radius:999px 999px 20px 20px;border:1.5px solid var(--acc)}
/* blob */
.cp-blob .ph-in{border-radius:43% 57% 61% 39%/45% 38% 62% 55%;animation:morph 9s ease-in-out infinite alternate;box-shadow:0 24px 50px -24px var(--a2)}
.cp-blob .pc1 .ph-in{animation-delay:-4s}
/* polaroid */
.cp-polaroid .ph{background:#fff;padding:10px 10px 46px;box-shadow:0 22px 40px -22px rgba(0,0,0,.5)}
.cp-polaroid .pc0 .ph{transform:rotate(-4deg)}.cp-polaroid .pc1 .ph{transform:rotate(3.5deg)}
.cp-polaroid .ph::after{content:"";position:absolute;top:-12px;left:50%;width:80px;height:24px;margin-left:-40px;background:color-mix(in srgb,var(--acc2) 45%,transparent);transform:rotate(-3deg)}
.cp-polaroid .ph-in{aspect-ratio:.9}
/* editorial */
.cp-editorial .pp{grid-template-columns:1fr 1fr;gap:clamp(12px,4vw,40px)}
.cp-editorial .pamp{display:none}
.cp-editorial .ph{max-width:none}
.cp-editorial .ph-in{aspect-ratio:.75;filter:grayscale(1) contrast(1.05);transition:filter .8s}
.cp-editorial .pc:hover .ph-in{filter:none}
.cp-editorial .pc1{margin-top:60px}
.cp-editorial .pt{text-align:left;align-self:stretch;border-top:1px solid var(--ink);padding-top:10px}
.cp-editorial .ph-in span{color:var(--bg1)}
.cp-editorial .ph-in{background:var(--ink)}
@media (max-width:520px){.cp-editorial .pp{grid-template-columns:1fr 1fr}.cp-editorial .pt h3{font-size:24px}}
/* neon */
.cp-neon .ph-in{border-radius:50%;border:3px solid var(--a1);box-shadow:0 0 12px var(--a1),0 0 30px var(--a1),inset 0 0 12px var(--a1)}
.cp-neon .pc1 .ph-in{border-color:var(--a2);box-shadow:0 0 12px var(--a2),0 0 30px var(--a2),inset 0 0 12px var(--a2)}
.cp-neon .pamp svg{fill:none;stroke:var(--a1);stroke-width:4;filter:drop-shadow(0 0 6px var(--a1)) drop-shadow(0 0 14px var(--a1))}

/* ============ events ============ */
.evs{display:grid;gap:22px}
.ev{position:relative;text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px}
.ev-d{display:flex;flex-direction:column;align-items:center;line-height:1}
.ev-d b{font:var(--fnw) clamp(42px,12vw,72px)/1 var(--fn)}
.ev-d span{font:600 13px var(--fl);letter-spacing:.3em;text-transform:uppercase;color:var(--acc)}
.ev-d small{font:500 11px var(--fl);letter-spacing:.3em;color:var(--mut)}
.ev-b{display:flex;flex-direction:column;align-items:center;gap:5px}
.ev-t{font-family:var(--fn);font-weight:var(--fnw);font-style:var(--fns);font-size:clamp(24px,6.6vw,36px)}
.ev-day{font:500 13px var(--fl);letter-spacing:.14em;text-transform:uppercase;color:var(--mut)}
.ev-time{font-weight:600;color:var(--acc)}
.ev-note{font-size:14px;color:var(--mut)}
.ev-v{font-size:clamp(16px,4.2vw,19px);font-weight:600;margin-top:4px}
.ev-a{font-size:14px;color:var(--mut)}
.ev-btns{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:10px}
.qr{width:110px;height:110px;padding:6px;background:#fff;border-radius:10px}
.qr img,.qr canvas{width:100%!important;height:100%!important}
/* glass */
.ev-glass .ev{padding:28px 20px;border-radius:26px;background:var(--pan);border:1px solid var(--line);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:0 30px 60px -36px rgba(0,0,0,.5)}
.ev-glass .ev-d{position:absolute;top:-22px;right:16px;width:74px;height:74px;justify-content:center;border-radius:50%;background:linear-gradient(135deg,var(--acc),var(--acc2));color:#fff}
.ev-glass .ev-d b{font-size:30px}.ev-glass .ev-d span{color:#fff;font-size:10px}.ev-glass .ev-d small{display:none}
/* ticket */
.ev-ticket .ev{flex-direction:row;text-align:left;align-items:stretch;gap:0;background:var(--pan);border-radius:20px;border:2px solid var(--ink);overflow:hidden;box-shadow:6px 6px 0 var(--ink)}
.dark.ev-ticket .ev,.ev-ticket.dark .ev{border-color:var(--a2);box-shadow:0 0 14px color-mix(in srgb,var(--a2) 50%,transparent)}
.ev-ticket .ev-d{justify-content:center;padding:18px 14px;background:var(--acc);color:#fff;min-width:96px;border-right:2px dashed var(--bg1);position:relative}
.ev-ticket .ev-d span,.ev-ticket .ev-d small{color:#fff}
.ev-ticket .ev-d b{font-size:44px}
.ev-ticket .ev-b{align-items:flex-start;padding:18px 16px}
.ev-ticket .ev-btns{justify-content:flex-start}
.ev-ticket .qr{display:none}
/* list (editorial) */
.ev-list .evs{gap:0;border-top:1px solid var(--ink)}
.ev-list .ev{flex-direction:row;align-items:flex-start;text-align:left;gap:clamp(14px,4vw,34px);padding:26px 0;border-bottom:1px solid var(--ink)}
.ev-list .ev-d{align-items:flex-start;min-width:clamp(72px,20vw,130px)}
.ev-list .ev-d b{font-size:clamp(58px,16vw,110px);font-weight:300;letter-spacing:-.05em}
.ev-list .ev-b{align-items:flex-start}
.ev-list .ev-btns{justify-content:flex-start}
.ev-list .qr{display:none}
/* timeline */
.ev-timeline .evs{position:relative;padding-left:34px;text-align:left}
.ev-timeline .evs::before{content:"";position:absolute;left:10px;top:6px;bottom:6px;width:2px;background:linear-gradient(var(--acc),transparent)}
.ev-timeline .ev{align-items:flex-start;text-align:left;padding:22px 20px;border-radius:18px;background:var(--pan);border:1px solid var(--line)}
.ev-timeline .ev::before{content:"";position:absolute;left:-30px;top:30px;width:14px;height:14px;border-radius:50%;background:var(--acc);box-shadow:0 0 0 6px color-mix(in srgb,var(--acc) 25%,transparent);animation:pulse 2.4s infinite}
@keyframes pulse{50%{box-shadow:0 0 0 12px color-mix(in srgb,var(--acc) 0%,transparent)}}
.ev-timeline .ev-d{flex-direction:row;gap:8px;align-items:baseline}
.ev-timeline .ev-d b{font-size:36px}
.ev-timeline .ev-b{align-items:flex-start}
.ev-timeline .ev-btns{justify-content:flex-start}
.ev-timeline .qr{position:absolute;right:16px;top:16px;width:74px;height:74px;padding:4px}
@media (max-width:420px){.ev-timeline .qr{display:none}}
/* arch */
.ev-arch .evs{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.ev-arch .ev{padding:62px 18px 26px;border-radius:999px 999px 22px 22px;background:var(--pan);border:1px solid var(--line);box-shadow:0 30px 60px -36px rgba(0,0,0,.6)}
.ev-arch .ev::before{content:"";position:absolute;inset:8px;border-radius:999px 999px 16px 16px;border:1px solid var(--line);pointer-events:none}

/* ============ media & misc ============ */
.vid{position:relative;max-width:760px;margin:0 auto;aspect-ratio:16/9;border-radius:20px;overflow:hidden;background:#111}
.vid img{width:100%;height:100%;object-fit:cover;opacity:.85}
.vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.vplay{position:absolute;left:50%;top:50%;width:76px;height:76px;margin:-38px 0 0 -38px;border-radius:50%;border:0;background:rgba(255,255,255,.92);color:var(--acc);display:grid;place-items:center;animation:ring2 2.2s infinite}
.vplay svg{width:32px;height:32px;margin-left:4px}
@keyframes ring2{0%{box-shadow:0 0 0 0 rgba(255,255,255,.6)}100%{box-shadow:0 0 0 22px rgba(255,255,255,0)}}
.lnk-act{margin-top:20px}
.lnk-sub{margin:-16px 0 20px;color:var(--mut)}
.live-dot{display:inline-block;width:9px;height:9px;margin-right:4px;border-radius:50%;background:#E53935;vertical-align:middle;animation:livep 1.6s infinite}
@keyframes livep{0%{box-shadow:0 0 0 0 rgba(229,57,53,.6)}70%{box-shadow:0 0 0 9px rgba(229,57,53,0)}100%{box-shadow:0 0 0 0 rgba(229,57,53,0)}}
.gl{display:grid;gap:12px;grid-template-columns:repeat(3,1fr)}
.gl-1{grid-template-columns:1fr;max-width:420px;margin:0 auto}.gl-2{grid-template-columns:1fr 1fr}
.gi{padding:0;border:0;border-radius:18px;overflow:hidden;aspect-ratio:.8;background:var(--line)}
.gi img{width:100%;height:100%;object-fit:cover;transition:transform .8s}
.gi:hover img{transform:scale(1.07)}
.card-img{max-width:520px;margin:0 auto;border-radius:16px;overflow:hidden;box-shadow:0 30px 60px -30px rgba(0,0,0,.6)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border-radius:999px;border:1.5px solid var(--acc);background:var(--acc);color:#fff;font:600 14px var(--fb);text-decoration:none;transition:transform .25s,box-shadow .25s}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 24px -12px var(--acc)}
.btn.ghost{background:transparent;color:var(--acc)}
.btn.wa{background:#25D366;border-color:#25D366;color:#fff}
.dark .btn.ghost{color:var(--ink);border-color:var(--line)}
.sh-btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.foot{padding-bottom:110px}
.ty{font-family:var(--fn);font-weight:var(--fnw);font-style:var(--fns);font-size:clamp(46px,13vw,90px);line-height:1}
.ft-sub{color:var(--mut);margin:8px 0 18px}
.ft-n{font:600 clamp(15px,4vw,19px) var(--fl);letter-spacing:.14em;text-transform:uppercase}
.ft-n span{color:var(--acc);display:inline-block;animation:beat 1.4s infinite}
@keyframes beat{30%{transform:scale(1.3)}}
.ft-d{color:var(--mut);letter-spacing:.3em;margin-top:6px}
.mus{position:fixed;right:16px;bottom:16px;z-index:60;width:50px;height:50px;border-radius:50%;border:1px solid var(--line);background:var(--pan);color:var(--acc);display:grid;place-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 10px 24px -10px rgba(0,0,0,.4)}
.mus svg{width:22px;height:22px}
.mus.on svg{animation:spinS 4s linear infinite}
.lb{position:fixed;inset:0;z-index:80;background:rgba(10,8,12,.55);-webkit-backdrop-filter:blur(18px) saturate(1.15);backdrop-filter:blur(18px) saturate(1.15);display:flex;align-items:center;justify-content:center;touch-action:pan-y}
.lb img{max-width:92vw;max-height:82vh;border-radius:12px;box-shadow:0 30px 70px -20px rgba(0,0,0,.7)}
.lb img.z{animation:lz .45s ease}.lb img.l{animation:ll .45s ease}.lb img.r{animation:lr .45s ease}
@keyframes lz{from{transform:scale(.85);opacity:0}}@keyframes ll{from{transform:translateX(-40px);opacity:0}}@keyframes lr{from{transform:translateX(40px);opacity:0}}
.lb button{position:absolute;z-index:2;width:48px;height:48px;border-radius:50%;border:1px solid rgba(255,255,255,.55);background:rgba(0,0,0,.38);color:#fff;font-size:26px;line-height:1}
.lb-x{top:14px;right:14px;font-size:18px!important}.lb-p{left:12px;top:50%;margin-top:-24px}.lb-n{right:12px;top:50%;margin-top:-24px}
.lb-c{position:absolute;bottom:18px;left:0;right:0;text-align:center;color:#fff;font-size:13px;letter-spacing:.2em;text-shadow:0 1px 6px rgba(0,0,0,.7)}
.toast{position:fixed;left:50%;bottom:80px;transform:translateX(-50%);z-index:90;background:rgba(20,20,20,.9);color:#fff;padding:10px 18px;border-radius:999px;font-size:14px}
.m-ribbon{position:fixed;top:10px;left:50%;z-index:95;transform:translateX(-50%);padding:5px 14px;border-radius:99px;background:rgba(0,0,0,.72);color:#fff;font:600 11px/1.4 system-ui,sans-serif;letter-spacing:.12em;text-transform:uppercase;pointer-events:none;white-space:nowrap}
@media (max-width:320px){.m-ribbon{top:30px;font-size:9px;padding:4px 10px}}
canvas.fx{position:fixed;inset:0;width:100%;height:100%;z-index:55;pointer-events:none}

/* reveal */
[data-a]{opacity:0;transform:translateY(34px);transition:opacity 1s ease,transform 1s cubic-bezier(.2,.8,.2,1);transition-delay:var(--d,0s)}
[data-a].in{opacity:1;transform:none}
.cp-tilt .pc0[data-a].in .ph,.cp-polaroid .pc0[data-a].in .ph{animation:dropin 1s cubic-bezier(.3,1.5,.5,1) both}
@keyframes dropin{from{transform:translateY(-40px) rotate(-14deg)}}

/* panels per design (soft backdrop behind sections so text stays readable over art) */
.t-aurora .sec:not(.cdsec):not(.msg)>.pp,.t-lilacmoon .pp{}
.has-ubg .sec{background:color-mix(in srgb,var(--bg1) 70%,transparent);border-radius:28px;padding-left:16px;padding-right:16px;margin-bottom:24px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01s!important;animation-iteration-count:1!important;transition-duration:.01s!important}}

/* script-font designs: keep long text & numbers in the clean label font */
.scr .verse{font-family:var(--fl);font-style:italic;font-size:clamp(18px,4.6vw,24px)}
.scr .hdate b,.scr .cdu b,.scr .ev-d b,.scr .cd-note{font-family:var(--fl);font-style:normal;font-weight:500}
.scr .ft-n{font-family:var(--fl)}
.t-retro .verse{font-family:var(--fb);font-style:normal;font-weight:600}
/* retro waves calmer behind content */
.bg-waves .bgw{transition:opacity 1s;height:30vh}
.is-open.bg-waves .bgw,.is-open.bg-waves .sun{opacity:.35}
/* star countdown tiles */
.cd-star .cdu::before{inset:3%;background:linear-gradient(135deg,var(--m1),var(--m3));border:0}
.cd-star .cdu::after{inset:calc(3% + 2px);transform:none;opacity:1;border:0;background:var(--bg2);clip-path:polygon(50% 0,64.6% 14.6%,85.4% 14.6%,85.4% 35.4%,100% 50%,85.4% 64.6%,85.4% 85.4%,64.6% 85.4%,50% 100%,35.4% 85.4%,14.6% 85.4%,14.6% 64.6%,0 50%,14.6% 35.4%,14.6% 14.6%,35.4% 14.6%);animation:spinS 40s linear infinite}
.cd-star .cdu b{color:var(--m1)}
.mag-ini{color:rgba(0,0,0,.08)}
.mag-img{background:linear-gradient(160deg,#e9e6df,#d8d3c9)}

/* ============ romantic touches ============ */
.pamp{position:relative;align-self:center;width:clamp(62px,15vw,88px);aspect-ratio:1;display:grid;place-items:center;font-size:clamp(24px,6vw,34px)!important;color:#fff!important}
.pamp svg{position:absolute;inset:0;width:100%;height:100%;fill:var(--acc);filter:drop-shadow(0 8px 14px color-mix(in srgb,var(--acc) 45%,transparent));animation:hbeat 1.6s ease-in-out infinite}
.pamp span{position:relative;font-family:var(--fn);font-style:italic;margin-top:-8%}
.cp-neon .pamp span{text-shadow:0 0 8px var(--a1)}
@keyframes hbeat{0%,60%,100%{transform:scale(1)}15%{transform:scale(1.12)}30%{transform:scale(.98)}45%{transform:scale(1.07)}}
.lline{width:min(300px,72vw);height:auto;overflow:visible;margin:6px 0 2px}
.lline path:first-child{fill:none;stroke:var(--acc);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1}
.lline .lh{fill:var(--acc);opacity:0;transform-box:fill-box;transform-origin:center}
.hero-in.on .lline path:first-child{transition:stroke-dashoffset 2.2s ease .5s;stroke-dashoffset:0}
.hero-in.on .lline .lh{animation:lhin .6s 2.2s ease forwards,hbeat 1.6s 2.8s ease-in-out infinite}
@keyframes lhin{from{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}
.hero-in>*:not(.nm){opacity:0;transform:translateY(14px);transition:opacity .9s ease,transform .9s ease}
.hero-in.on>*{opacity:1;transform:none}
.hero-in.on>:nth-child(2){transition-delay:.1s}.hero-in.on>:nth-child(3){transition-delay:.2s}.hero-in.on>:nth-child(6){transition-delay:.7s}.hero-in.on>:nth-child(7){transition-delay:.9s}.hero-in.on>:nth-child(8){transition-delay:1.1s}
/* floating hearts on the sides */
.sd-hearts .sd i{position:absolute;bottom:-12%;left:calc(var(--i) * 15%);width:calc(18px + (var(--i) % 3) * 12px);aspect-ratio:1;background:var(--a2);opacity:.55;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 92'%3E%3Cpath d='M50 86C22 66 4 50 4 30A22 22 0 0 1 50 20A22 22 0 0 1 96 30C96 50 78 66 50 86Z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 92'%3E%3Cpath d='M50 86C22 66 4 50 4 30A22 22 0 0 1 50 20A22 22 0 0 1 96 30C96 50 78 66 50 86Z'/%3E%3C/svg%3E") center/contain no-repeat;animation:hrise calc(11s + var(--i) * 2s) linear infinite;animation-delay:calc(var(--i) * -2.6s)}
.sd-hearts .sd i:nth-child(odd){background:var(--a1)}
@keyframes hrise{0%{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-60vh) translateX(14px) rotate(8deg)}100%{transform:translateY(-125vh) rotate(-6deg)}}
.sd-waves .sd{width:clamp(30px,6vw,70px)}
.sd-waves .sd svg{opacity:.75}

/* ============ name reveal moment ============ */
.nr{position:fixed;inset:0;z-index:58;display:grid;place-items:center;pointer-events:none;opacity:0;visibility:hidden;background:color-mix(in srgb,var(--bg1) 80%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transition:opacity 1s ease,visibility 0s 1s}
.nr.show{opacity:1;visibility:visible;transition:opacity .6s ease}
.nr-glow{position:absolute;left:50%;top:50%;width:90vmin;height:90vmin;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--acc) 26%,transparent),transparent 65%)}
.show .nr-glow{animation:hal 3s ease-in-out infinite alternate}
.nr-in{position:relative;text-align:center;display:flex;flex-direction:column;align-items:center;width:min(92vw,720px)}
.nr-n{font-family:var(--fn);font-weight:var(--fnw);font-style:var(--fns);font-size:calc(var(--nk,1) * clamp(46px,14vw,112px));line-height:1.08;white-space:nowrap;padding:.06em .22em;color:var(--ink);opacity:0}
.nr-amp{font-family:var(--fn);font-style:italic;color:var(--acc);font-size:clamp(26px,7vw,48px);line-height:1;opacity:0}
.nr-s{font:500 clamp(10px,2.8vw,13px) var(--fl);letter-spacing:.42em;text-transform:uppercase;color:var(--mut);margin-top:18px;opacity:0}
.show .nr-s{animation:nrs 1s 1.7s ease forwards}
@keyframes nrs{from{opacity:0;letter-spacing:.9em}to{opacity:1;letter-spacing:.42em}}
.nr-hs{position:absolute;left:50%;top:47%;width:min(82vw,440px);transform:translate(-50%,-50%);overflow:visible;display:none}
.nr-hp{fill:none;stroke:var(--acc);stroke-width:.9;stroke-dasharray:1;stroke-dashoffset:1;vector-effect:non-scaling-stroke}
.nr-rg{display:none;position:relative;width:120px;height:70px;margin-bottom:8px}
.nr-rg i{position:absolute;top:5px;width:60px;height:60px;border-radius:50%;border:4px solid var(--m2);box-shadow:0 0 14px color-mix(in srgb,var(--m2) 50%,transparent),inset 0 0 6px rgba(255,255,255,.4);opacity:0}
.nr-rg i:first-child{left:30px}.nr-rg i:last-child{left:30px}
/* meet: names glide in from both sides */
.nr-meet .nr-a{transform:translateX(-70vw)}.nr-meet .nr-b{transform:translateX(70vw)}
.show.nr-meet .nr-a{animation:nrmeet 1.3s cubic-bezier(.2,.8,.2,1) .15s forwards}
.show.nr-meet .nr-b{animation:nrmeet 1.3s cubic-bezier(.2,.8,.2,1) .35s forwards}
@keyframes nrmeet{to{transform:none;opacity:1}}
.show.nr-meet .nr-amp{animation:nramp .8s cubic-bezier(.3,1.6,.5,1) 1.2s forwards}
@keyframes nramp{from{opacity:0;transform:scale(0) rotate(-30deg)}to{opacity:1;transform:none}}
/* heart: a heart is drawn, names bloom inside */
.nr-heart .nr-hs{display:block}
.show.nr-heart .nr-hp{animation:drawk 2s ease .1s forwards}
.nr-heart .nr-n{filter:blur(14px);transform:scale(.9)}
.show.nr-heart .nr-a{animation:nrbloom 1.2s ease .7s forwards}
.show.nr-heart .nr-b{animation:nrbloom 1.2s ease 1s forwards}
@keyframes nrbloom{to{opacity:1;filter:none;transform:none}}
.show.nr-heart .nr-amp{animation:nramp .7s ease 1.3s forwards}
/* ink: names are written left to right */
.nr-ink .nr-n{opacity:1;clip-path:inset(0 100% 0 0)}
.show.nr-ink .nr-a{animation:nrink 1.3s cubic-bezier(.6,0,.3,1) .2s forwards}
.show.nr-ink .nr-b{animation:nrink 1.3s cubic-bezier(.6,0,.3,1) 1.1s forwards}
@keyframes nrink{to{clip-path:inset(0 -5% 0 -5%)}}
.show.nr-ink .nr-amp{animation:nramp .7s ease .9s forwards}
.nr-ink .nr-s{animation-delay:2.2s!important}
/* rings: two rings join, then the names settle in */
.nr-rings .nr-rg{display:block}
.show.nr-rings .nr-rg i:first-child{animation:ringl 1.2s cubic-bezier(.2,.8,.2,1) .1s forwards}
.show.nr-rings .nr-rg i:last-child{animation:ringr 1.2s cubic-bezier(.2,.8,.2,1) .1s forwards}
@keyframes ringl{from{opacity:0;transform:translateX(-80px)}to{opacity:1;transform:translateX(-17px)}}
@keyframes ringr{from{opacity:0;transform:translateX(80px)}to{opacity:1;transform:translateX(17px)}}
.nr-rings .nr-n{letter-spacing:.35em}
.show.nr-rings .nr-a{animation:nrspace 1.4s ease .8s forwards}
.show.nr-rings .nr-b{animation:nrspace 1.4s ease 1.05s forwards}
@keyframes nrspace{to{opacity:1;letter-spacing:0}}
.show.nr-rings .nr-amp{animation:nramp .7s ease 1.3s forwards}
/* text styling of the reveal follows the design */
.tx-shimmer .nr-n{background:linear-gradient(100deg,var(--m3),var(--m1) 30%,var(--m2) 50%,var(--m1) 70%,var(--m3));background-size:300% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.tx-neon .nr-n{color:#fff;text-shadow:0 0 4px #fff,0 0 14px var(--a1),0 0 30px var(--a1)}
.tx-neon .nr-b{text-shadow:0 0 4px #fff,0 0 14px var(--a2),0 0 30px var(--a2)}
.tx-neon .nr-hp{stroke:var(--a1);stroke-width:2;filter:drop-shadow(0 0 6px var(--a1))}
.tx-bounce .nr-n{color:var(--acc);text-shadow:3px 3px 0 var(--acc2)}
.tx-type .nr-n{text-transform:uppercase;letter-spacing:.14em;font-size:calc(var(--nk,1) * clamp(30px,9vw,70px))}
.t-marigoldpop .nr-n{color:var(--ink)}

/* ======================================================================
   Rectangular photo frames everywhere (bride & groom)
   ====================================================================== */
.lx .ph-in,.cp-circle .ph-in,.cp-arch .ph-in,.cp-blob .ph-in,.cp-neon .ph-in{border-radius:6px!important;aspect-ratio:.8!important;animation:none}
.cp-circle .ph-r,.cp-arch .ph-r{border-radius:12px!important;inset:-10px!important;animation:none!important;border-style:solid!important}
.cp-circle .ph-r::before{border-radius:16px}

/* ======================================================================
   V2 themes – shared pieces
   ====================================================================== */
.v2 .yi{font:italic 400 clamp(14px,3.8vw,18px) var(--fb);color:var(--mut)}
.v2 .ic{gap:7px}
.v2 #intro .nm{font-size:calc(var(--nk,1) * clamp(36px,10.5vw,76px))}
.ipp{display:flex;align-items:center;justify-content:center;gap:8px;margin:4px 0}
.ipf{position:relative;width:clamp(92px,25vw,138px);aspect-ratio:.8;overflow:hidden;display:grid;place-items:center;background:linear-gradient(135deg,var(--a1),var(--a2));border:5px solid #fff;border-radius:4px;box-shadow:0 16px 30px -14px rgba(0,0,0,.45)}
.ipf img{width:100%;height:100%;object-fit:cover}
.ipf span{font-family:var(--fn);font-size:clamp(40px,11vw,60px);color:#fff}
.ipf:first-child{transform:rotate(-4deg)}.ipf:last-of-type{transform:rotate(4deg)}
.ipa{font-family:var(--fn);font-size:clamp(30px,8vw,44px);color:var(--acc);margin:0 -4px;position:relative;z-index:2}
.nav{position:fixed;top:10px;left:50%;transform:translate(-50%,-90px);z-index:40;display:flex;gap:2px;padding:5px;border-radius:999px;background:var(--pan);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--line);box-shadow:0 10px 30px -16px rgba(0,0,0,.4);max-width:calc(100vw - 20px);overflow-x:auto;scrollbar-width:none;transition:transform .8s cubic-bezier(.2,.8,.2,1) 3.6s}
.nav::-webkit-scrollbar{display:none}
.is-open .nav{transform:translate(-50%,0)}
.nav a{white-space:nowrap;padding:8px 13px;border-radius:999px;font:600 10.5px var(--fl);letter-spacing:.12em;text-transform:uppercase;text-decoration:none;color:var(--ink);transition:background .25s,color .25s}
.nav a:hover{background:var(--acc);color:#fff}
.m-ribbon~.nav{top:40px}
.v2 .tick{display:block;transform:none;margin:0;background:var(--acc);color:#fff;font-family:var(--fl);font-weight:500;letter-spacing:.18em}
.v2 .tick.t2{margin:10px 0}
.v2 .tick.t2 span{animation-direction:reverse}
.topd{position:fixed;left:0;right:0;top:0;z-index:2;pointer-events:none;opacity:0;transition:opacity 1s .4s}
.is-open .topd{opacity:1}
.topd svg{width:100%;height:auto;display:block}
.objs{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.ob-butterflies .objs{z-index:52}
.pfc{position:absolute;inset:-10px;width:calc(100% + 20px);height:calc(100% + 20px);pointer-events:none;overflow:visible}
.v2 .hero{padding-top:90px}
.v2 .lline{display:block}
/* hero & section headings get a soft panel on busy backgrounds */
.v2 .pt h3{font-size:clamp(28px,7.5vw,44px)}

/* ---------- reusable flyers ---------- */
.bf{position:absolute;left:0;top:0;width:54px;height:54px;will-change:transform}
.bf-in{position:relative;width:100%;height:100%;perspective:200px}
.bw{position:absolute;top:0;width:50%;height:100%;transform-style:preserve-3d}
.bw svg{width:100%;height:100%;display:block}
.bw.r{left:50%;transform-origin:0 50%;animation:flapR .28s ease-in-out infinite alternate}
.bw.l{right:50%;transform-origin:100% 50%;animation:flapL .28s ease-in-out infinite alternate}
.bw.l svg{transform:scaleX(-1)}
.bfb{position:absolute;left:calc(50% - 2px);top:22%;width:4px;height:56%;border-radius:4px;background:#4A3242}
.bf:nth-child(2n) .bw{animation-duration:.22s}.bf:nth-child(3n) .bw{animation-duration:.33s}
@keyframes flapR{from{transform:rotateY(0)}to{transform:rotateY(70deg)}}
@keyframes flapL{from{transform:rotateY(0)}to{transform:rotateY(-70deg)}}
.bf.rest .bw{animation-duration:1.4s}
.skl{position:absolute;left:var(--x);bottom:-120px;width:calc(54px * var(--s));animation:skrise var(--d) linear infinite;animation-delay:var(--dl);filter:drop-shadow(0 0 18px rgba(255,170,80,.75))}
.skl svg{width:100%;height:auto;animation:sksway 4s ease-in-out infinite alternate}
@keyframes skrise{0%{transform:translateY(0);opacity:0}8%{opacity:1}85%{opacity:.9}100%{transform:translateY(-125vh);opacity:0}}
@keyframes sksway{from{transform:translateX(-12px) rotate(-3deg)}to{transform:translateX(12px) rotate(3deg)}}
.ph2{position:absolute;left:var(--x);top:-80px;width:calc(46px * var(--s));animation:hfall var(--d) linear infinite;animation-delay:var(--dl);opacity:.85}
.ph2 svg{width:100%;height:auto;animation:hflip 3s ease-in-out infinite alternate}
@keyframes hfall{0%{transform:translateY(0) rotate(-14deg)}100%{transform:translateY(120vh) rotate(16deg)}}
@keyframes hflip{from{transform:rotateY(0) rotate(-6deg)}to{transform:rotateY(60deg) rotate(8deg)}}
.pp2{position:absolute;left:-90px;top:var(--y);width:64px;animation:plane var(--d) linear infinite;animation-delay:var(--dl)}
.pp2 svg{width:100%;height:auto;position:relative;z-index:1}
.pp2 i{position:absolute;right:52px;top:18px;width:160px;height:2px;background:repeating-linear-gradient(90deg,var(--mut) 0 6px,transparent 6px 12px);opacity:.5}
@keyframes plane{0%{transform:translate(0,0) rotate(-6deg)}50%{transform:translate(60vw,-6vh) rotate(4deg)}100%{transform:translate(130vw,4vh) rotate(-8deg)}}
.kt2{position:absolute;left:var(--x);top:14vh;width:52px;animation:kitef var(--d) ease-in-out infinite alternate;transform-origin:50% 100%;opacity:.9}
.kt2:nth-child(2n){top:30vh}.kt2:nth-child(3n){top:8vh}
.kt2 svg{width:100%;height:auto}
@keyframes kitef{0%{transform:translate(0,0) rotate(-10deg)}50%{transform:translate(18px,-22px) rotate(8deg)}100%{transform:translate(-14px,10px) rotate(-4deg)}}
.koi{position:absolute;left:0;top:0;width:90px;will-change:transform;opacity:.85}
.koi svg{width:100%;height:auto}
.koi .kt{transform-origin:14px 25px;animation:ktail .5s ease-in-out infinite alternate}
@keyframes ktail{from{transform:scaleY(.7) rotate(-14deg)}to{transform:scaleY(1) rotate(14deg)}}
.dfy{position:absolute;left:0;top:0;width:62px;will-change:transform}
.dfy svg{width:100%;height:auto}
.dfy .dw{transform-origin:40px 22px;animation:dwing .07s linear infinite alternate}
@keyframes dwing{to{transform:scaleY(.6)}}
.fth{position:absolute;left:var(--x);top:-200px;width:calc(70px * var(--s));animation:ffall var(--d) linear infinite;animation-delay:var(--dl);opacity:.7}
.fth svg{width:100%;height:auto;animation:fsway 3.6s ease-in-out infinite alternate;transform-origin:50% 0}
@keyframes ffall{0%{transform:translateY(0)}100%{transform:translateY(130vh)}}
@keyframes fsway{from{transform:rotate(-28deg) translateX(-20px)}to{transform:rotate(24deg) translateX(20px)}}
.hab{position:absolute;width:clamp(70px,16vw,120px);animation:habf 30s ease-in-out infinite alternate}
.hab:nth-child(1){left:6vw;top:24vh}.hab:nth-child(2){right:4vw;top:58vh;width:clamp(50px,11vw,84px);animation-duration:24s;animation-delay:-8s}
.hab svg{width:100%;height:auto}
@keyframes habf{0%{transform:translate(0,0)}50%{transform:translate(4vw,-10vh)}100%{transform:translate(-3vw,-4vh)}}
.hb2{position:absolute;left:var(--x);bottom:-150px;width:40px;animation:skrise var(--d) linear infinite;animation-delay:var(--dl)}
.hb2 svg{width:100%;height:auto;animation:sksway 3s ease-in-out infinite alternate}
.brd{position:absolute;left:-60px;width:34px;animation:birdf 22s linear infinite}
.brd:nth-child(n){top:calc(10vh + var(--i) * 4vh);animation-delay:calc(var(--i) * -1.1s)}
.brd .bwg{animation:bwf .35s ease-in-out infinite alternate;transform-origin:20px 10px}
@keyframes bwf{to{transform:scaleY(-.4)}}
@keyframes birdf{to{transform:translate(120vw,-4vh)}}

/* ======================================================================
   BUTTERFLY GARDEN  (t-retro)
   ====================================================================== */
.t-retro{background:linear-gradient(170deg,#FFF7F4,#FCEEE8 50%,#EEF7EF)}
.wash{position:absolute;border-radius:50%;filter:blur(60px);opacity:.55}
.wash.w1{width:60vmax;height:60vmax;background:#F9C9D5;left:-20vmax;top:-20vmax}
.wash.w2{width:50vmax;height:50vmax;background:#CFE6D2;right:-18vmax;bottom:-10vmax}
.wash.w3{width:34vmax;height:34vmax;background:#FFE7C7;right:10vw;top:20vh;opacity:.4}
.fc{position:absolute;width:clamp(150px,40vw,320px);z-index:2}
.fc svg{width:100%;height:auto;animation:fcsway 7s ease-in-out infinite alternate;transform-origin:0 0}
.fc.tl{left:-4%;top:-4%}.fc.tr{right:-4%;top:-4%;transform:scaleX(-1)}.fc.bl{left:-4%;bottom:-4%;transform:scaleY(-1)}.fc.br{right:-4%;bottom:-4%;transform:scale(-1)}
@keyframes fcsway{to{transform:rotate(2.5deg) scale(1.02)}}
.bgl .fc{opacity:.75;width:clamp(120px,30vw,280px)}
.in-wreath #intro{background:linear-gradient(170deg,#FFF7F4,#FCEEE8 50%,#EEF7EF)}
.in-wreath .ic{background:rgba(255,255,255,.78);border-radius:28px;padding:20px 16px 24px;box-shadow:0 30px 60px -34px rgba(120,60,80,.5);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:min(88vw,460px)}
.farch-w{width:min(92%,340px);margin:-56px auto -18px}
.farch-w svg{width:100%;height:auto}
.in-wreath .fc{transition:transform 1.3s cubic-bezier(.7,0,.2,1),opacity 1s}
body.opening.in-wreath .fc.tl{transform:translate(-60%,-60%)}body.opening.in-wreath .fc.tr{transform:scaleX(-1) translate(-60%,-60%)}
body.opening.in-wreath .fc.bl{transform:scaleY(-1) translate(-60%,-60%)}body.opening.in-wreath .fc.br{transform:scale(-1) translate(-60%,-60%)}
body.opening.in-wreath #intro{transition:opacity .9s .6s;opacity:0}
body.opening.in-wreath #intro .ic{transition:transform 1s,opacity .8s;transform:scale(1.15);opacity:0}
.t-retro .ipf{border-color:#fff;outline:1px solid #E9C98F;outline-offset:3px}
.t-retro .tick{background:linear-gradient(90deg,#F3A6B9,#D16B8A);font-family:var(--fl);font-style:italic;letter-spacing:.1em;font-size:16px}
/* flower countdown */
.cd-flower .cdu{aspect-ratio:1}
.cd-flower .cdu::before{content:"";position:absolute;inset:0;background:conic-gradient(from 0deg,#F7C3CF,#FBE0E6,#F7C3CF,#FBE0E6,#F7C3CF,#FBE0E6,#F7C3CF,#FBE0E6,#F7C3CF);-webkit-mask:radial-gradient(circle at 50% 50%,#000 58%,transparent 59%),radial-gradient(circle at 50% 8%,#000 21%,transparent 22%),radial-gradient(circle at 92% 50%,#000 21%,transparent 22%),radial-gradient(circle at 50% 92%,#000 21%,transparent 22%),radial-gradient(circle at 8% 50%,#000 21%,transparent 22%),radial-gradient(circle at 80% 20%,#000 21%,transparent 22%),radial-gradient(circle at 80% 80%,#000 21%,transparent 22%),radial-gradient(circle at 20% 80%,#000 21%,transparent 22%),radial-gradient(circle at 20% 20%,#000 21%,transparent 22%);mask:radial-gradient(circle at 50% 50%,#000 58%,transparent 59%),radial-gradient(circle at 50% 8%,#000 21%,transparent 22%),radial-gradient(circle at 92% 50%,#000 21%,transparent 22%),radial-gradient(circle at 50% 92%,#000 21%,transparent 22%),radial-gradient(circle at 8% 50%,#000 21%,transparent 22%),radial-gradient(circle at 80% 20%,#000 21%,transparent 22%),radial-gradient(circle at 80% 80%,#000 21%,transparent 22%),radial-gradient(circle at 20% 80%,#000 21%,transparent 22%),radial-gradient(circle at 20% 20%,#000 21%,transparent 22%);animation:spinS 30s linear infinite}
.cd-flower .cdu::after{content:"";position:absolute;inset:24%;border-radius:50%;background:#fff;box-shadow:0 6px 14px -6px rgba(209,107,138,.6)}
.cd-flower .cdu b,.cd-flower .cdu span{position:relative;z-index:1}
.cd-flower .cdu b{font-size:clamp(18px,5.4vw,32px);color:var(--acc)}
.cd-flower .cdu span{font-size:clamp(7px,1.9vw,9px);margin-top:2px}
/* floral rectangular frames */
.cp-floral .ph{max-width:210px}
.cp-floral .ph-in{border:6px solid #fff;box-shadow:0 22px 40px -22px rgba(120,60,80,.55)}
.cp-floral .pc1 .ph{transform:rotate(2deg)}.cp-floral .pc0 .ph{transform:rotate(-2deg)}
.ev-floral .ev{padding:30px 20px;border-radius:24px;background:rgba(255,255,255,.8);border:1px solid #F3D7DF;box-shadow:0 30px 60px -40px rgba(120,60,80,.6);overflow:hidden}
.ev-floral .ev::before,.ev-floral .ev::after{content:"";position:absolute;width:110px;height:110px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cg fill='%238DB596'%3E%3Cellipse cx='30' cy='14' rx='14' ry='5' transform='rotate(30 30 14)'/%3E%3Cellipse cx='14' cy='34' rx='14' ry='5' transform='rotate(60 14 34)'/%3E%3Cellipse cx='44' cy='30' rx='12' ry='4' transform='rotate(-20 44 30)'/%3E%3C/g%3E%3Ccircle cx='22' cy='22' r='12' fill='%23F3A6B9'/%3E%3Ccircle cx='22' cy='22' r='6' fill='%23D16B8A'/%3E%3Ccircle cx='46' cy='12' r='7' fill='%23FBD3DC'/%3E%3C/svg%3E") no-repeat;opacity:.9}
.ev-floral .ev::before{left:-8px;top:-8px}.ev-floral .ev::after{right:-8px;bottom:-8px;transform:rotate(180deg)}
.ev-floral .ev-d b{color:var(--acc)}

/* ======================================================================
   LANTERN NIGHT  (t-neon)
   ====================================================================== */
.t-neon{background:linear-gradient(180deg,#070B20,#151B45 55%,#2F1E4C)}
.moon{position:absolute;right:10vw;top:12vh;width:80px;height:80px;border-radius:50%;background:radial-gradient(circle at 40% 40%,#FFFBEA,#F6E7B4 60%,#E8D08A);box-shadow:0 0 50px 14px rgba(255,236,170,.35),0 0 140px 40px rgba(255,220,140,.15)}
.hl{position:absolute;left:0;right:0;bottom:0;height:30vh}
.hl svg{width:100%;height:100%}
.sl{position:absolute;left:0;right:0;top:0}
.sl svg{width:100%;height:auto;display:block;min-height:90px}
.bulb{animation:bulb 2.4s ease-in-out infinite;animation-delay:calc(var(--i) * -.35s)}
@keyframes bulb{50%{opacity:.45}}
.in-lanterns #intro{background:linear-gradient(180deg,#070B20,#151B45 55%,#2F1E4C)}
.in-lanterns .ic{margin-top:6vh}
.in-lanterns .ipf{border-color:#FFE7B8;box-shadow:0 0 30px -4px rgba(255,190,100,.7)}
body.opening.in-lanterns #intro{transition:transform 1.6s cubic-bezier(.7,0,.2,1) .25s,opacity 1s .8s;transform:translateY(-100%);opacity:0}
body.opening.in-lanterns .objs .skl{animation-duration:4s}
.t-neon .nm .nmw,.t-neon .nr-n{color:#FFE7B8;text-shadow:0 0 18px rgba(255,180,90,.55)}
.t-neon .tick{background:linear-gradient(90deg,#F07B2D,#FFB65C);color:#2A1206}
.cd-lantern .cdu{aspect-ratio:.66;border-radius:40% 40% 18% 18%/22% 22% 10% 10%;background:linear-gradient(180deg,#FFE7A8,#FFB65C 60%,#F07B2D);box-shadow:0 0 36px -2px rgba(255,170,80,.7);color:#4A1E06}
.cd-lantern .cdu::before{content:"";position:absolute;top:-8px;left:30%;right:30%;height:10px;border-radius:4px 4px 0 0;background:#7A3B12}
.cd-lantern .cdu::after{content:"";position:absolute;bottom:-8px;left:36%;right:36%;height:8px;border-radius:0 0 4px 4px;background:#7A3B12}
.cd-lantern .cdu b{color:#4A1E06}.cd-lantern .cdu span{color:rgba(74,30,6,.75)}
.cd-lantern .cdu:nth-child(even){animation:sksway 3.4s ease-in-out infinite alternate}
.cp-glow .ph{max-width:210px}
.cp-glow .ph-in{border:3px solid #FFE3A0;box-shadow:0 0 0 6px rgba(255,200,120,.12),0 0 40px rgba(255,180,90,.45)}
.ev-glowcard .ev{padding:28px 20px;border-radius:22px;background:rgba(255,255,255,.06);border:1px solid rgba(255,200,120,.35);box-shadow:0 0 40px -12px rgba(255,170,80,.45);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.ev-glowcard .ev-d b{color:#FFD98A;text-shadow:0 0 16px rgba(255,190,100,.6)}
.nr-ln{position:absolute;bottom:-40px;width:56px;opacity:0;filter:drop-shadow(0 0 18px rgba(255,170,80,.8))}
.nr-ln svg{width:100%;height:auto}
.nr-ln.l{left:4%}.nr-ln.r{right:4%}
.nr-lantern .nr-n{opacity:0;transform:translateY(30px);filter:blur(6px)}
.show.nr-lantern .nr-ln.l{animation:nrlan 3.4s ease-out forwards}
.show.nr-lantern .nr-ln.r{animation:nrlan 3.4s ease-out .3s forwards}
@keyframes nrlan{0%{opacity:0;transform:translateY(80px)}20%{opacity:1}100%{opacity:.9;transform:translateY(-340px)}}
.show.nr-lantern .nr-a{animation:nrbloom 1.2s ease .5s forwards}.show.nr-lantern .nr-b{animation:nrbloom 1.2s ease .85s forwards}
.show.nr-lantern .nr-amp{animation:nramp .7s ease 1.2s forwards}
.fx-fireflies canvas.fx{mix-blend-mode:screen}

/* ======================================================================
   LOVE LETTER  (t-vogue)
   ====================================================================== */
.t-vogue{background:#F3E9D7}
.paperf{position:absolute;inset:0;background:radial-gradient(ellipse at 30% 20%,rgba(255,255,255,.6),transparent 60%),repeating-linear-gradient(0deg,rgba(120,90,50,.035) 0 1px,transparent 1px 34px);}
.pm{position:absolute;width:220px;color:#A3342F;opacity:.12;transform:rotate(-14deg)}
.pm.p1{right:-30px;top:16vh}.pm.p2{left:-40px;bottom:12vh;transform:rotate(10deg);color:#3E5F86}
.pm svg{width:100%;height:auto}
.in-letter #intro{background:#EFE2CB}
.in-letter .ic{background:#FFFBF2;width:min(88vw,460px);padding:56px 18px 28px;box-shadow:0 30px 60px -30px rgba(80,50,20,.55);background-image:linear-gradient(180deg,transparent calc(33.3% - 1px),rgba(120,90,50,.18) 33.3%,transparent calc(33.3% + 1px),transparent calc(66.6% - 1px),rgba(120,90,50,.18) 66.6%,transparent calc(66.6% + 1px))}
.seal2{position:absolute;left:50%;top:-34px;width:78px;height:78px;transform:translateX(-50%) rotate(-8deg);display:grid;place-items:center;filter:drop-shadow(0 6px 8px rgba(0,0,0,.3));z-index:3}
.seal2 svg{position:absolute;inset:0;width:100%;height:100%}
.seal2 b{position:relative;font:400 22px "Special Elite",monospace;color:#FBE3D8;letter-spacing:.04em}
.in-letter .ic>.seal2{opacity:1;transform:translateX(-50%) rotate(-8deg);animation:none}
.ipl{position:absolute;left:50%;top:50%;width:90px;opacity:0;z-index:6}
.ipl svg{width:100%;height:auto}
.in-letter .ipf{border-width:6px 6px 6px;border-color:#fff;filter:sepia(.15)}
body.opening.in-letter .seal2{transition:transform .5s,opacity .5s;transform:translateX(-50%) scale(1.6) rotate(20deg);opacity:0}
body.opening.in-letter #intro .ic{transition:transform .9s cubic-bezier(.6,0,.4,1) .3s,opacity .5s .7s;transform:scale(.08) rotate(-30deg);opacity:0}
body.opening.in-letter .ipl{animation:plfly 1.4s cubic-bezier(.5,0,.5,1) .7s forwards}
@keyframes plfly{0%{opacity:1;transform:translate(-50%,-50%) scale(.6) rotate(-10deg)}100%{opacity:1;transform:translate(70vw,-80vh) scale(1.2) rotate(-24deg)}}
body.opening.in-letter #intro{transition:opacity .7s 1.3s;opacity:0}
.t-vogue .tick{background:#3B2A20;color:#F3E9D7;font-family:"Special Elite",monospace;letter-spacing:.14em}
.t-vogue .nm .nmw{padding:.1em .3em}
.cd-stamp .cdu{aspect-ratio:.82;padding:8px;background:#FFFBF2;border:5px dotted var(--bg2);filter:drop-shadow(0 4px 6px rgba(0,0,0,.15))}
.cd-stamp .cdu::before{content:"";position:absolute;inset:6px;border:1.5px solid var(--c,#A3342F)}
.cd-stamp .cdu b,.cd-stamp .cdu span{position:relative;z-index:1}
.cd-stamp .cdu:nth-child(1){--c:#A3342F}.cd-stamp .cdu:nth-child(2){--c:#3E5F86}.cd-stamp .cdu:nth-child(3){--c:#6F8F4E}.cd-stamp .cdu:nth-child(4){--c:#C9862E}
.cd-stamp .cdu b{color:var(--c)}
.cd-stamp .cdu:nth-child(odd){transform:rotate(-3deg)}.cd-stamp .cdu:nth-child(even){transform:rotate(2deg)}
.cp-stamp .ph{max-width:200px;padding:12px;background:#FFFBF2;border:6px dotted var(--bg1);filter:drop-shadow(0 8px 12px rgba(0,0,0,.2))}
.cp-stamp .pc0 .ph{transform:rotate(-3deg)}.cp-stamp .pc1 .ph{transform:rotate(3deg)}
.cp-stamp .ph-in{filter:sepia(.12)}
.cp-stamp .ph::after{content:"";position:absolute;right:-26px;bottom:-14px;width:90px;height:90px;border-radius:50%;border:3px double rgba(163,52,47,.55);transform:rotate(-12deg)}
.cp-stamp .pamp svg{fill:#A3342F}
.ev-postcard .ev{flex-direction:row;text-align:left;align-items:stretch;gap:0;background:#FFFBF2;border-radius:6px;box-shadow:0 20px 40px -26px rgba(80,50,20,.6);padding:22px 16px;background-image:linear-gradient(90deg,transparent calc(58% - 1px),rgba(59,42,32,.25) 58%,transparent calc(58% + 1px))}
.ev-postcard .ev-d{order:2;width:42%;align-items:flex-end;padding-left:12px;position:relative}
.ev-postcard .ev-d::before{content:"";position:absolute;right:0;top:0;width:58px;height:70px;border:2px dashed #A3342F;opacity:.6}
.ev-postcard .ev-d b{font-size:34px;margin:12px 12px 0 0;color:#A3342F}
.ev-postcard .ev-d span,.ev-postcard .ev-d small{margin-right:12px}
.ev-postcard .ev-b{order:1;width:58%;align-items:flex-start;padding-right:10px}
.ev-postcard .ev-t{font-size:30px}
.ev-postcard .ev-btns{justify-content:flex-start}
.ev-postcard .qr{display:none}
@media (max-width:440px){.ev-postcard .ev{flex-direction:column;background-image:none}.ev-postcard .ev-d,.ev-postcard .ev-b{width:100%;order:0;align-items:flex-start}.ev-postcard .ev-d::before{display:none}}

/* ======================================================================
   MARIGOLD FESTIVE  (t-marigoldpop)
   ====================================================================== */
.t-marigoldpop{background:linear-gradient(180deg,#FFF8E2,#FFEDB8 60%,#FFE09A)}
.sunb{position:absolute;left:50%;top:40%;width:170vmax;height:170vmax;transform:translate(-50%,-50%);background:repeating-conic-gradient(rgba(255,183,3,.16) 0 6deg,transparent 6deg 15deg);animation:spinS 120s linear infinite}
.dots{position:absolute;inset:0;background-image:radial-gradient(rgba(194,24,91,.18) 1.6px,transparent 1.8px);background-size:26px 26px}
.mcur{position:absolute;inset:0;display:flex;justify-content:space-between;padding:0 2px;z-index:2}
.mcur>div{width:8.33%;transition:transform 1.2s cubic-bezier(.7,0,.2,1);transition-delay:calc(var(--i) * .05s);animation:mcsw 4s ease-in-out infinite alternate;animation-delay:calc(var(--i) * -.4s);transform-origin:50% 0}
.mcur svg{width:100%;height:100%}
@keyframes mcsw{from{rotate:-1.2deg}to{rotate:1.2deg}}
.in-marigold #intro{background:linear-gradient(180deg,#FFF3CF,#FFE29A)}
.in-marigold .ic{background:#FFFDF6;border-radius:24px;padding:22px 16px 26px;width:min(86vw,440px);border:3px solid #E8590C;box-shadow:0 0 0 6px #FFB703,0 30px 60px -24px rgba(154,52,18,.6)}
body.opening.in-marigold .mcur>div{transform:translateY(-105%)}
body.opening.in-marigold #intro{transition:background-color .6s .6s;background:transparent}
body.opening.in-marigold #intro{transition:opacity .8s .9s;opacity:0}
.t-marigoldpop .tick{background:#C2185B;font-family:var(--fn);font-size:17px;letter-spacing:.06em}
.t-marigoldpop .tick.t2{background:#2E7D32}
.t-marigoldpop .nm .nmw,.t-marigoldpop .nr-n{color:#9A1B1B;text-shadow:2px 2px 0 #FFB703}
.t-marigoldpop .h2{color:#9A1B1B}
.cd-marigold .cdu::before{content:"";position:absolute;inset:2%;border-radius:50%;background:repeating-conic-gradient(#FF9F1C 0 7.5deg,#E8590C 7.5deg 15deg);-webkit-mask:radial-gradient(circle,transparent 60%,#000 61%);mask:radial-gradient(circle,transparent 60%,#000 61%);animation:spinS 30s linear infinite}
.cd-marigold .cdu::after{content:"";position:absolute;inset:15%;border-radius:50%;background:#FFFDF6;box-shadow:inset 0 0 0 2px #FFB703,0 6px 12px -6px rgba(154,52,18,.5)}
.cd-marigold .cdu b,.cd-marigold .cdu span{position:relative;z-index:1}
.cd-marigold .cdu b{font-size:clamp(18px,5.4vw,32px);color:#9A1B1B}
.cd-marigold .cdu span{font-size:clamp(7px,1.9vw,9px);color:#9A3412}
.cp-marigold .ph{max-width:200px}
.cp-marigold .ph-in{border:5px solid #FFFDF6;outline:3px solid #E8590C;box-shadow:0 22px 40px -20px rgba(154,52,18,.6)}
.cp-marigold .pfc{inset:-18px -14px auto;width:calc(100% + 28px);height:calc(100% + 30px)}
.ev-toran .ev{padding:46px 20px 26px;border-radius:20px;background:#FFFDF6;border:2px solid #E8590C;box-shadow:0 26px 50px -30px rgba(154,52,18,.6);overflow:hidden}
.ev-toran .ev::before{content:"";position:absolute;left:0;right:0;top:0;height:26px;background:radial-gradient(circle at 12px 8px,#FF9F1C 7px,#E8590C 8px,transparent 9px) 0 0/24px 26px repeat-x,linear-gradient(#7A3B12,#7A3B12) 0 2px/100% 3px no-repeat}
.ev-toran .ev::after{content:"";position:absolute;left:0;top:0;bottom:0;width:8px;background:linear-gradient(#2E7D32,#81C784)}
.ev-toran .ev-d b{color:#C2185B}
.nr-gl{position:absolute;left:50%;top:-30px;width:min(96vw,620px);transform:translateX(-50%) scaleY(0);transform-origin:50% 0}
.nr-gl svg{width:100%;height:auto}
.show.nr-garland .nr-gl{animation:glDrop 1s cubic-bezier(.3,1.5,.5,1) .1s forwards}
@keyframes glDrop{to{transform:translateX(-50%) scaleY(1)}}
.nr-garland .nr-n{transform:scale(.4);opacity:0}
.show.nr-garland .nr-a{animation:chbounce .8s cubic-bezier(.3,1.8,.5,1) .7s forwards}
.show.nr-garland .nr-b{animation:chbounce .8s cubic-bezier(.3,1.8,.5,1) 1s forwards}
.show.nr-garland .nr-amp{animation:nramp .6s ease 1.3s forwards}
.sd-bells .sd{width:clamp(60px,14vw,130px)}

/* ======================================================================
   LOTUS POND  (t-kolamline)
   ====================================================================== */
.t-kolamline{background:linear-gradient(180deg,#EAF8F5,#CDEDE7 50%,#A6DCD3)}
.caust{position:absolute;inset:-20%;background:radial-gradient(ellipse 120px 60px at 20% 30%,rgba(255,255,255,.45),transparent 70%),radial-gradient(ellipse 160px 70px at 70% 60%,rgba(255,255,255,.35),transparent 70%),radial-gradient(ellipse 100px 50px at 40% 80%,rgba(255,255,255,.35),transparent 70%);filter:blur(6px);animation:caus 14s ease-in-out infinite alternate}
@keyframes caus{to{transform:translate(4%,3%) scale(1.1)}}
.rip{position:absolute;left:calc((var(--i) * 23 + 12) % 90 * 1%);top:calc((var(--i) * 37 + 18) % 85 * 1%);width:160px;height:60px;margin:-30px -80px;border-radius:50%;border:1.5px solid rgba(255,255,255,.8);opacity:0;animation:ripl 6s ease-out infinite;animation-delay:calc(var(--i) * -1.2s)}
@keyframes ripl{0%{transform:scale(.1);opacity:.9}100%{transform:scale(1.6);opacity:0}}
.lp{position:absolute;width:clamp(60px,16vw,120px);animation:lpbob 6s ease-in-out infinite alternate;animation-delay:calc(var(--i) * -1.4s)}
.lp:nth-child(7){left:4%;top:68%}.lp:nth-child(8){right:6%;top:14%;width:clamp(50px,12vw,90px)}.lp:nth-child(9){left:68%;bottom:4%}.lp:nth-child(10){left:12%;top:8%;width:clamp(44px,10vw,80px)}.lp:nth-child(11){right:2%;top:46%}
.lp svg{width:100%;height:auto;filter:drop-shadow(0 8px 8px rgba(22,62,61,.18))}
@keyframes lpbob{from{transform:rotate(-6deg) translateY(0)}to{transform:rotate(6deg) translateY(-8px)}}
.in-lotusbloom #intro{background:linear-gradient(180deg,#EAF8F5,#CDEDE7 50%,#A6DCD3)}
.in-lotusbloom .ibg .lp:nth-of-type(1){left:4%;top:8%}.in-lotusbloom .ibg .lp:nth-of-type(2){right:4%;top:20%}.in-lotusbloom .ibg .lp:nth-of-type(3){left:8%;bottom:10%}.in-lotusbloom .ibg .lp:nth-of-type(4){right:8%;bottom:6%}.in-lotusbloom .ibg .lp:nth-of-type(5){left:46%;bottom:-2%}
.in-lotusbloom .ic{background:rgba(255,255,255,.55);border-radius:36px;padding:22px 16px 26px;width:min(88vw,450px);border:1px solid rgba(255,255,255,.8);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 30px 60px -30px rgba(22,62,61,.45)}
.ilotus{position:absolute;left:50%;top:50%;width:60vmin;transform:translate(-50%,-50%) scale(0);opacity:0;z-index:5}
.ilotus svg{width:100%;height:auto}
body.opening.in-lotusbloom .ilotus{transition:transform 1.5s cubic-bezier(.3,1,.4,1),opacity .6s;transform:translate(-50%,-50%) scale(3.2);opacity:1}
body.opening.in-lotusbloom #intro{transition:opacity .9s .8s;opacity:0}
.koi,.dfy{opacity:.8}
.t-kolamline .tick{background:#2C8C84;font-family:var(--fn);letter-spacing:.12em}
.t-kolamline .tick.t2{background:#E26D8F}
.cd-lily .cdu{aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 40% 35%,#8FD3A6,#5FAF7A 70%);box-shadow:0 12px 20px -12px rgba(22,62,61,.5);-webkit-mask:conic-gradient(from 150deg,transparent 0 16deg,#000 16deg);mask:conic-gradient(from 150deg,transparent 0 16deg,#000 16deg);animation:lpbob 5s ease-in-out infinite alternate}
.cd-lily .cdu:nth-child(2){animation-delay:-1.2s}.cd-lily .cdu:nth-child(3){animation-delay:-2.4s}.cd-lily .cdu:nth-child(4){animation-delay:-3.6s}
.cd-lily .cdu b{color:#fff;text-shadow:0 2px 6px rgba(0,0,0,.2)}.cd-lily .cdu span{color:rgba(255,255,255,.9)}
.cp-lotus .ph{max-width:200px;margin-bottom:26px}
.cp-lotus .ph-in{border:5px solid rgba(255,255,255,.9);box-shadow:0 26px 40px -22px rgba(22,62,61,.6)}
.pf-lotus{position:absolute;left:50%;bottom:-38px;width:120px;transform:translateX(-50%)}
.pf-lotus svg{width:100%;height:auto}
.ev-water .ev{padding:28px 20px;border-radius:30px;background:rgba(255,255,255,.55);border:1px solid rgba(255,255,255,.85);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 26px 50px -34px rgba(22,62,61,.6);overflow:hidden}
.ev-water .ev::before{content:"";position:absolute;right:-40px;top:-40px;width:140px;height:140px;border-radius:50%;border:2px solid rgba(44,140,132,.25);box-shadow:0 0 0 18px rgba(44,140,132,.06),0 0 0 36px rgba(44,140,132,.04);animation:ripl2 5s ease-in-out infinite}
@keyframes ripl2{50%{transform:scale(1.12)}}
.ev-water .ev-d b{color:#E26D8F}
.nr .rr{position:absolute;left:50%;top:50%;width:220px;height:90px;margin:-45px -110px;border-radius:50%;border:2px solid var(--acc2);opacity:0}
.show.nr-ripple .rr{animation:ripl 2.6s ease-out infinite}
.show.nr-ripple .rr:nth-child(2){animation-delay:.6s}.show.nr-ripple .rr:nth-child(3){animation-delay:1.2s}
.nr-ripple .nr-n{filter:blur(10px);transform:translateY(20px) scaleY(.6)}
.show.nr-ripple .nr-a{animation:nrbloom 1.4s ease .4s forwards}.show.nr-ripple .nr-b{animation:nrbloom 1.4s ease .8s forwards}
.show.nr-ripple .nr-amp{animation:nramp .7s ease 1.2s forwards}

/* ======================================================================
   ROYAL PEACOCK  (t-midnightgold)
   ====================================================================== */
.t-midnightgold{background:radial-gradient(ellipse at 50% 0,#0B5357,#073A4D 45%,#041F33)}
.in-fan #intro{background:radial-gradient(ellipse at 50% 20%,#0B5357,#073A4D 45%,#041F33)}
.ifan{position:absolute;left:50%;top:-2vh;width:min(130vw,640px);transform:translateX(-50%)}
.ifan svg,.sfan svg,.nr-fan svg{width:100%;height:auto;overflow:visible}
.ff{transform-origin:150px 300px;transform:rotate(calc(var(--a) * -1)) scale(.6);opacity:0;animation:ffopen 1.6s cubic-bezier(.2,.9,.3,1.1) forwards;animation-delay:calc(.2s + var(--i) * .05s)}
@keyframes ffopen{to{transform:none;opacity:1}}
.in-fan .ic{margin-top:30vh;background:rgba(4,31,51,.72);border:1px solid rgba(212,175,55,.45);border-radius:22px;padding:20px 16px 24px;width:min(86vw,440px);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.in-fan .ipf{border-color:#D4AF37;outline:1px solid rgba(212,175,55,.5);outline-offset:4px}
body.opening.in-fan .ifan .ff{animation:fffold 1s ease forwards}
@keyframes fffold{from{transform:none;opacity:1}to{transform:rotate(calc(var(--a) * -1)) scale(.4);opacity:0}}
body.opening.in-fan #intro{transition:opacity .9s .7s;opacity:0}
.sfan{position:absolute;top:-30px;left:-60%;width:220%;}
.sd-pfans .sd{width:clamp(60px,16vw,170px);opacity:.8}
.sd-pfans .sfan svg{animation:fcsway 6s ease-in-out infinite alternate;transform-origin:50% 100%}
.t-midnightgold .tick{background:linear-gradient(90deg,#8C6A1A,#D4AF37,#8C6A1A);color:#041F33;font-family:var(--fl);font-weight:700}
.t-midnightgold .tick.t2{background:#2EC4B6}
.cd-jhar .cdu{aspect-ratio:.72;border-radius:999px 999px 8px 8px;background:linear-gradient(180deg,#0B5357,#041F33);border:2px solid #D4AF37;box-shadow:inset 0 0 0 4px rgba(4,31,51,1),inset 0 0 0 5px rgba(212,175,55,.6),0 14px 30px -14px rgba(0,0,0,.7)}
.cd-jhar .cdu b{color:#FBEBC0}
.cp-jhar .ph{max-width:210px;padding:10px;background:linear-gradient(135deg,#8C6A1A,#FBEBC0 40%,#D4AF37 60%,#8C6A1A)}
.cp-jhar .ph-in{border-radius:2px!important}
.cp-jhar .pfc{inset:-18px;width:calc(100% + 36px);height:calc(100% + 36px)}
.cp-jhar .pamp svg{fill:#D4AF37}
.ev-royal .ev{padding:30px 20px;background:rgba(4,31,51,.6);border:1px solid #D4AF37;outline:1px solid rgba(212,175,55,.4);outline-offset:-8px;box-shadow:0 30px 60px -30px rgba(0,0,0,.8)}
.ev-royal .ev-d b{background:linear-gradient(180deg,#FBEBC0,#D4AF37);-webkit-background-clip:text;background-clip:text;color:transparent}
.nr-fan{position:absolute;left:50%;top:-180px;width:min(90vw,440px);transform:translateX(-50%);opacity:.75}
.nr-fan .ff{animation:none;opacity:0}
.show.nr-fan .nr-fan .ff{animation:ffopen 1.4s cubic-bezier(.2,.9,.3,1.1) forwards;animation-delay:calc(var(--i) * .05s)}
.nr-fan .nr-n{opacity:0;transform:scale(.8)}
.show.nr-fan .nr-a{animation:nrbloom 1.1s ease .8s forwards}.show.nr-fan .nr-b{animation:nrbloom 1.1s ease 1.05s forwards}.show.nr-fan .nr-amp{animation:nramp .6s ease 1.3s forwards}

/* ======================================================================
   CLOUD NINE  (t-lotuspastel)
   ====================================================================== */
.t-lotuspastel{background:linear-gradient(180deg,#A9D8FF,#DDEFFF 55%,#FFE6EF)}
.sunb2{position:absolute;right:-10vmax;top:-10vmax;width:50vmax;height:50vmax;border-radius:50%;background:radial-gradient(circle,rgba(255,240,180,.9),rgba(255,220,150,.3) 40%,transparent 70%)}
.cl{position:absolute;width:clamp(140px,34vw,300px);opacity:.95;animation:cldr calc(50s + var(--i) * 9s) linear infinite;animation-delay:calc(var(--i) * -13s)}
.cl:nth-of-type(2){top:6vh}.cl:nth-of-type(3){top:22vh;width:clamp(100px,24vw,200px)}.cl:nth-of-type(4){top:40vh}.cl:nth-of-type(5){top:58vh;width:clamp(120px,28vw,240px)}.cl:nth-of-type(6){top:74vh}.cl:nth-of-type(7){top:88vh;width:clamp(160px,40vw,340px)}.cl:nth-of-type(8){top:14vh;width:clamp(90px,20vw,170px)}
.cl svg{width:100%;height:auto;filter:drop-shadow(0 10px 14px rgba(80,120,180,.18))}
@keyframes cldr{from{transform:translateX(-40vw)}to{transform:translateX(130vw)}}
.in-balloons #intro{background:linear-gradient(180deg,#A9D8FF,#DDEFFF 55%,#FFE6EF)}
.in-balloons .ic{background:#fff;border-radius:26px;padding:22px 16px 26px;width:min(86vw,440px);margin-top:16vh;box-shadow:0 30px 60px -30px rgba(46,58,102,.45)}
.ibal{position:absolute;left:0;right:0;top:-150px;height:150px;display:flex;justify-content:center;gap:4px;pointer-events:none}
.hb{width:58px;animation:sksway 3s ease-in-out infinite alternate;animation-delay:calc(var(--i) * -1s);transform-origin:50% 100%}
.hb:nth-child(2){margin-top:-24px;width:66px}
.hb svg{width:100%;height:auto}
.in-balloons .ic>.ibal{opacity:1;transform:none;animation:none}
body.opening.in-balloons #intro .ic{transition:transform 1.6s cubic-bezier(.6,0,.4,1) .1s,opacity .6s 1.1s;transform:translateY(-130vh) rotate(-6deg);opacity:1}
body.opening.in-balloons #intro{transition:opacity .8s 1.1s;opacity:0}
.t-lotuspastel .tick{background:#6C8CFF;font-family:var(--fn);letter-spacing:.06em;font-size:16px}
.t-lotuspastel .tick.t2{background:#FF6F91}
.t-lotuspastel .nm .nmw,.t-lotuspastel .nr-n{color:#FF6F91;text-shadow:3px 3px 0 #fff,5px 5px 0 rgba(108,140,255,.35)}
.cd-cloud .cdu{aspect-ratio:1.1;background:#fff;border-radius:40px 40px 22px 22px;margin-top:16px;box-shadow:0 10px 18px -10px rgba(80,120,180,.4);animation:lpbob 5s ease-in-out infinite alternate}
.cd-cloud .cdu::before{content:"";position:absolute;left:14%;top:-16px;width:44%;aspect-ratio:1;border-radius:50%;background:#fff}
.cd-cloud .cdu::after{content:"";position:absolute;right:12%;top:-9px;width:34%;aspect-ratio:1;border-radius:50%;background:#fff}
.cd-cloud .cdu b,.cd-cloud .cdu span{position:relative;z-index:1}
.cd-cloud .cdu:nth-child(2){animation-delay:-1.6s}.cd-cloud .cdu:nth-child(3){animation-delay:-3s}.cd-cloud .cdu:nth-child(4){animation-delay:-4s}
.cd-cloud .cdu b{color:#6C8CFF;font-family:var(--fl);font-weight:600}
.cd-cloud .cdu span{color:#FF6F91;font-size:clamp(6px,1.8vw,9px)}
.cp-balloon .ph{max-width:190px;background:#fff;padding:10px 10px 36px;box-shadow:0 22px 40px -22px rgba(46,58,102,.5);margin-top:110px}
.cp-balloon .pc0 .ph{transform:rotate(-4deg)}.cp-balloon .pc1 .ph{transform:rotate(4deg)}
.pf-bal{position:absolute;left:50%;top:-118px;width:56px;transform:translateX(-50%);animation:sksway 3s ease-in-out infinite alternate}
.pf-bal svg{width:100%;height:auto}
.pc1 .pf-bal svg path:first-child{fill:#6C8CFF}
.ev-boarding .ev{flex-direction:row;text-align:left;align-items:stretch;gap:0;background:#fff;border-radius:18px;overflow:hidden;box-shadow:0 24px 50px -30px rgba(46,58,102,.6);padding:0}
.ev-boarding .ev-b{padding:20px 16px;align-items:flex-start;flex:1}
.ev-boarding .ev-b::before{content:"✈  BOARDING PASS";font:600 10px var(--fl);letter-spacing:.24em;color:#6C8CFF}
.ev-boarding .ev-d{order:2;justify-content:center;padding:16px 12px;min-width:92px;background:linear-gradient(180deg,#FF6F91,#FF9BB3);color:#fff;border-left:2px dashed #fff;position:relative}
.ev-boarding .ev-d::after{content:"";position:absolute;left:8px;right:8px;bottom:10px;height:24px;background:repeating-linear-gradient(90deg,#fff 0 2px,transparent 2px 4px,#fff 4px 5px,transparent 5px 8px);opacity:.8}
.ev-boarding .ev-d span,.ev-boarding .ev-d small{color:#fff}
.ev-boarding .ev-btns{justify-content:flex-start}
.ev-boarding .qr{display:none}
.nr-hb{position:absolute;top:-170px;width:70px;opacity:0}
.nr-hb svg{width:100%;height:auto}
.nr-hb.l{left:18%}.nr-hb.r{right:18%}
.nr-balloon .nr-n{opacity:0;transform:translateY(120px)}
.show.nr-balloon .nr-hb{animation:hbup 1.4s cubic-bezier(.2,.8,.2,1) forwards}
.show.nr-balloon .nr-hb.r{animation-delay:.2s}
@keyframes hbup{from{opacity:0;transform:translateY(260px)}to{opacity:1;transform:none}}
.show.nr-balloon .nr-a{animation:nrmeet 1.3s cubic-bezier(.2,.8,.2,1) .2s forwards}.show.nr-balloon .nr-b{animation:nrmeet 1.3s cubic-bezier(.2,.8,.2,1) .4s forwards}
.show.nr-balloon .nr-amp{animation:nramp .7s ease 1.2s forwards}

/* ======================================================================
   1.16 – realistic objects, touch reactions and tidier layout (v2 designs)
   ====================================================================== */
.v2 .objs>*{pointer-events:auto;cursor:pointer;-webkit-tap-highlight-color:transparent}
/* butterflies */
.bf{width:64px;height:64px}
.bf .bw{top:4%;height:92%}
.bf .bw svg{filter:drop-shadow(0 2px 2px rgba(0,0,0,.15))}
.bbody{position:absolute;left:calc(50% - 4px);top:8%;width:8px;height:70%}
.bshadow{position:absolute;left:20%;right:20%;bottom:-18px;height:8px;border-radius:50%;background:rgba(60,30,40,.12);filter:blur(3px)}
.bf.rest .bw.r{animation:restR 1.6s ease-in-out infinite alternate}.bf.rest .bw.l{animation:restL 1.6s ease-in-out infinite alternate}
@keyframes restR{from{transform:rotateY(10deg)}to{transform:rotateY(55deg)}}
@keyframes restL{from{transform:rotateY(-10deg)}to{transform:rotateY(-55deg)}}
.bf.flee .bw{animation-duration:.12s!important}
.sp-morpho .iri{animation:iri 2.4s ease-in-out infinite alternate}
@keyframes iri{from{opacity:.1}to{opacity:.9}}
/* koi */
.koi{width:110px}
.koi svg{filter:drop-shadow(0 10px 6px rgba(22,62,61,.22))}
.koi .kt{transform-origin:18px 30px;animation:ktail .55s ease-in-out infinite alternate}
.koi .kf{transform-origin:64px 30px;animation:kfin .8s ease-in-out infinite alternate}
@keyframes kfin{to{transform:scaleY(.6)}}
.koi.flee .kt{animation-duration:.15s}
/* sky lanterns */
.skl{width:calc(64px * var(--s))}
.skl .sk-in{animation:skflk 1.8s ease-in-out infinite alternate}
.skl .skf{animation:skflk .25s ease-in-out infinite alternate;transform-origin:35px 92px}
@keyframes skflk{from{opacity:.65}to{opacity:1}}
.skl.hit svg{animation:lhit 2.2s ease-out!important}
@keyframes lhit{0%{transform:scale(1);filter:brightness(1)}20%{transform:scale(1.35) rotate(-6deg);filter:brightness(1.7) drop-shadow(0 0 30px #FFD27A)}100%{transform:translateY(-120px) scale(1);filter:brightness(1)}}
/* paper hearts */
.ph2.hit svg{animation:phit 1.4s ease!important}
@keyframes phit{0%,100%{transform:scale(1)}20%{transform:scale(1.5)}35%{transform:scale(1.1)}50%{transform:scale(1.4) rotateY(180deg)}}
/* kites */
.kt2{width:58px}
.kt2 .ktail{animation:ktw 1.2s ease-in-out infinite alternate;transform-origin:35px 80px}
@keyframes ktw{from{transform:skewX(-10deg)}to{transform:skewX(10deg)}}
.kt2.hit{animation:kspin 1.3s ease!important}
@keyframes kspin{0%{transform:none}60%{transform:translateY(-60px) rotate(340deg)}100%{transform:translateY(0) rotate(360deg)}}
/* feathers */
.fth.hit svg{animation:ftw 1.6s ease!important}
@keyframes ftw{0%{transform:rotate(0)}100%{transform:rotate(720deg) scale(1.2)}}
/* balloons */
.hb2{width:46px;transition:transform .2s,opacity .2s}
.hb2.popped{opacity:0!important;transform:scale(1.6)}
.hb2 .str{animation:ktw 2s ease-in-out infinite alternate}
.hab.hit svg{animation:habup 2.4s ease}
.hab.hit .burner{animation:burn 2.4s ease}
@keyframes habup{30%{transform:translateY(-40px)}100%{transform:none}}
@keyframes burn{0%,60%{opacity:1}100%{opacity:0}}

/* ---------- tidy sections: soft panels, consistent spacing ---------- */
.v2 .sec{width:min(92vw,680px)}
.v2 .cdsec,.v2 .msg,.v2 .couple,.v2 .lnk,.v2 .gallery,.v2 .video,.v2 .cardsec,.v2 .share,.v2 .foot{
  margin:28px auto;padding:clamp(38px,8vw,60px) clamp(16px,4vw,36px);border-radius:30px;
  background:var(--sp,rgba(255,255,255,.62));border:1px solid var(--line);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 30px 60px -44px rgba(0,0,0,.5)}
.v2.dark .sec{--sp:rgba(255,255,255,.05)}
.t-midnightgold.v2 .sec{--sp:rgba(4,31,51,.62)}
.t-vogue.v2 .sec{--sp:rgba(255,251,242,.82);border-radius:6px}
.t-marigoldpop.v2 .sec{--sp:rgba(255,253,246,.88)}
.v2 .events{padding-top:40px;padding-bottom:40px}
.v2 .foot{margin-bottom:110px}
.v2 .h2{margin-bottom:24px}
.v2 .cd{max-width:520px}
.v2 .hero-in{position:relative;padding:28px 10px}
.v2 .hero-in::before{content:"";position:absolute;inset:-6% -10%;z-index:-1;border-radius:50%;background:radial-gradient(ellipse at center,var(--hg,rgba(255,255,255,.7)),transparent 68%)}
.v2.dark .hero-in::before{--hg:rgba(0,0,0,.35)}
/* themed heading ornament above every section label */
.v2 .k::before{content:"";display:block;width:38px;height:30px;margin:0 auto 10px;background:var(--acc);-webkit-mask:var(--ic) center/contain no-repeat;mask:var(--ic) center/contain no-repeat}
.v2 .k .live-dot+*{display:inline}
.t-retro{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Cpath d='M20 15C14 2 2 0 2 8c0 6 8 8 14 8-6 2-10 10-4 12 4 2 8-6 8-12 0 6 4 14 8 12 6-2 2-10-4-12 6 0 14-2 14-8 0-8-12-6-18 7z'/%3E%3C/svg%3E")}
.t-neon{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Cpath d='M14 1h12l4 22H10zM12 24h16v2H12zM20 26v4'/%3E%3C/svg%3E")}
.t-vogue{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Cpath d='M3 4h34v22H3zM3 4l17 13L37 4' fill='none' stroke='%23000' stroke-width='2.4'/%3E%3C/svg%3E")}
.t-marigoldpop{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Ccircle cx='20' cy='15' r='13'/%3E%3C/svg%3E")}
.t-marigoldpop .k::before{-webkit-mask:none;mask:none;width:30px;height:30px;border-radius:50%;background:repeating-conic-gradient(#FF9F1C 0 15deg,#E8590C 15deg 30deg);box-shadow:inset 0 0 0 7px #FFB703}
.t-kolamline{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Cpath d='M20 2c-4 6-4 14 0 22 4-8 4-16 0-22zM20 24C12 22 6 16 5 8c8 2 13 8 15 16zM20 24c8-2 14-8 15-16-8 2-13 8-15 16zM4 26h32'/%3E%3C/svg%3E")}
.t-midnightgold{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Cellipse cx='20' cy='10' rx='7' ry='9'/%3E%3Cpath d='M19 18h2v12h-2z'/%3E%3C/svg%3E")}
.t-midnightgold .k::before{background:linear-gradient(#2EC4B6,#D4AF37)}
.t-lotuspastel{--ic:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 30'%3E%3Cpath d='M9 26a7 7 0 0 1 1-14 10 10 0 0 1 19-3 8 8 0 0 1 8 10 6 6 0 0 1-3 7z'/%3E%3C/svg%3E")}
.v2 .lnk .k::before{display:none}
/* extra ambience */
.t-retro .bgl::after{content:"";position:absolute;right:-10%;top:-20%;width:70vmin;height:90vmin;background:linear-gradient(200deg,rgba(255,240,200,.55),transparent 60%);transform:rotate(-20deg);filter:blur(10px);animation:hal 6s ease-in-out infinite alternate}
.t-lotuspastel .bgl::after{content:"";position:absolute;left:50%;top:22vh;width:150vmin;height:150vmin;transform:translateX(-50%);border-radius:50%;background:radial-gradient(circle,transparent 52%,rgba(255,111,145,.18) 53%,rgba(255,209,102,.18) 56%,rgba(127,214,181,.18) 59%,rgba(108,140,255,.18) 62%,transparent 64%)}
.t-vogue .verse .w{filter:none;transform:none;transition-duration:.05s;transition-delay:calc(var(--i) * .07s)}
.t-vogue .verse{font-family:"La Belle Aurore",cursive;font-style:normal;font-size:clamp(20px,5vw,28px)}
@media (max-width:560px){.v2 .objs .bf{width:52px;height:52px}}
