/* SubhInvite invite engine styles (shared by index.html and invite.html) */
/* ---------- invite engine (fixed 360x680 canvas, scaled) ---------- */
.scaler{position:relative;width:100%;aspect-ratio:360/680;max-width:100%;overflow:hidden}
.scaler > .inv{transform:scale(var(--s,1));transform-origin:0 0}
.inv{position:absolute;left:0;top:0;width:360px;height:680px;overflow:hidden;background:var(--bg-i);color:var(--ink-i);
  font-family:var(--fb);text-align:center;line-height:1.4;font-size:13px;
  --pc:color-mix(in srgb,var(--acc) 22%,transparent);--pc2:color-mix(in srgb,var(--acc) 28%,transparent)}
.inv *{margin:0}
.inv .pat{position:absolute;inset:0;pointer-events:none}
.P-dots .pat{background:radial-gradient(circle,var(--pc) 0 1.6px,transparent 2.4px) 0 0/18px 18px}
.P-lattice .pat{background:repeating-linear-gradient(45deg,var(--pc) 0 1px,transparent 1px 16px),repeating-linear-gradient(-45deg,var(--pc) 0 1px,transparent 1px 16px)}
.P-rings .pat{background:repeating-radial-gradient(circle at 50% -10%,transparent 0 18px,var(--pc) 18px 19px)}
.P-glow .pat{background:radial-gradient(circle at 15% 8%,var(--pc2),transparent 42%),radial-gradient(circle at 88% 92%,var(--pc2),transparent 42%)}
.P-temple .pat{background:repeating-linear-gradient(90deg,var(--acc) 0 8px,transparent 8px 14px) top/100% 7px no-repeat,repeating-linear-gradient(90deg,var(--acc) 0 8px,transparent 8px 14px) bottom/100% 7px no-repeat,radial-gradient(circle at 50% 45%,var(--pc),transparent 60%)}
.P-mandala .pat{background:repeating-conic-gradient(from 0deg at 50% 50%,var(--pc) 0 4deg,transparent 4deg 12deg);
  -webkit-mask:radial-gradient(circle at 50% 50%,transparent 120px,#000 121px,#000 170px,transparent 171px);mask:radial-gradient(circle at 50% 50%,transparent 120px,#000 121px,#000 170px,transparent 171px)}
.frame{position:absolute;inset:12px;border:1px solid color-mix(in srgb,var(--acc) 60%,transparent);border-radius:18px;pointer-events:none;z-index:3}
.F-double .frame{outline:1px solid color-mix(in srgb,var(--acc) 35%,transparent);outline-offset:-7px}
.F-dashed .frame{border-style:dashed}
.F-ornate .frame{border-width:2px;border-color:var(--acc)}
.F-ornate .frame::before,.F-ornate .frame::after{content:"";position:absolute;left:50%;width:14px;height:14px;background:var(--acc);transform:translateX(-50%) rotate(45deg)}
.F-ornate .frame::before{top:-8px}.F-ornate .frame::after{bottom:-8px}
.F-none .frame{display:none}
.toran{position:absolute;top:0;left:0;right:0;display:flex;justify-content:center;gap:5px;z-index:4}
.toran i{width:13px;height:20px;border-radius:0 0 50% 50%;background:var(--acc)}
.toran i:nth-child(even){background:#E85D2A;height:14px}
.inv .body{position:relative;z-index:2;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:46px 30px 34px}
.motif{font-family:var(--fh);color:var(--acc);letter-spacing:.14em;font-size:12px}
.line{font-size:13px;opacity:.86;max-width:270px}
.parents{font-size:11.5px;opacity:.75;max-width:280px}
.names{font-family:var(--fn);color:var(--nc);font-weight:400;font-size:calc(48px * var(--ns));line-height:1.04;display:flex;flex-direction:column;align-items:center}
.amp{font-family:var(--fh);font-style:normal;color:var(--acc);font-size:.42em;margin:.12em 0}
.date{font-family:var(--fh);color:var(--acc);font-size:17px;letter-spacing:.08em;font-weight:600;text-transform:uppercase}
.venue{font-size:12.5px;opacity:.9}
.count{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;width:100%}
.count div{background:color-mix(in srgb,var(--ink-i) 8%,transparent);border-radius:10px;padding:5px 0}
.count b{display:block;font-family:var(--fh);font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}
.count small{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;opacity:.72}
.events{width:100%;display:grid;gap:5px;font-size:12px;text-align:left}
.events div{display:flex;justify-content:space-between;gap:8px;border-bottom:1px dashed color-mix(in srgb,var(--ink-i) 24%,transparent);padding-bottom:3px}
.events span:last-child{white-space:nowrap;font-variant-numeric:tabular-nums}
.rsvp{background:var(--acc);color:var(--bink);font-weight:700;border-radius:999px;padding:8px 24px;font-size:13px;letter-spacing:.04em}
.ph{overflow:hidden;position:relative}
.ph img{width:100%;height:100%;object-fit:cover;display:block;max-width:none}

.L-arch .frame{border-radius:170px 170px 18px 18px}
.L-arch .body{gap:8px;padding-top:40px}
.L-arch .ph{width:196px;height:226px;flex:none;border-radius:98px 98px 10px 10px;border:3px solid var(--acc)}
.L-arch .names{flex-direction:row;gap:.22em;align-items:baseline;font-size:calc(38px * var(--ns))}
.L-arch .amp{margin:0}
.L-split .ph{position:absolute;top:0;left:0;right:0;height:300px;z-index:1}
.L-split .ph::after{content:"";position:absolute;left:0;right:0;bottom:0;height:130px;background:linear-gradient(transparent,var(--bg-i))}
.L-split .body{justify-content:flex-start;padding-top:262px;gap:9px}
.kick{font-family:var(--fh);letter-spacing:.22em;text-transform:uppercase;font-size:10.5px;color:var(--acc)}
.L-split .names{flex-direction:row;gap:.22em;align-items:baseline;font-size:calc(40px * var(--ns))}
.L-split .amp{margin:0}
.dblock{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;width:100%;font-family:var(--fh);color:var(--acc)}
.dblock span{border-block:1px solid color-mix(in srgb,var(--acc) 55%,transparent);padding:4px 0;font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.dblock b{font-size:40px;line-height:1;font-weight:600}
.L-minimal .body{align-items:flex-start;text-align:left;justify-content:flex-end;padding:40px 34px 44px;gap:9px}
.L-minimal .motif{position:absolute;top:46px;left:34px;text-align:left;max-width:150px}
.L-minimal .ph{position:absolute;top:44px;right:32px;width:116px;height:150px;border-radius:58px 58px 8px 8px}
.L-minimal .names{align-items:flex-start;font-size:calc(58px * var(--ns))}
.L-minimal .amp{margin:.04em 0 .04em .1em}
.L-minimal hr{width:60px;border:0;border-top:2px solid var(--acc);margin:4px 0}
.dnum{font-family:var(--fh);font-size:28px;letter-spacing:.06em;color:var(--acc);font-weight:600}
.L-minimal .line,.L-minimal .parents{max-width:none}
.L-scroll .frame{display:none}
.L-scroll .body{position:absolute;inset:36px 20px;height:auto;background:color-mix(in srgb,var(--bg-i) 82%,#fff);
  box-shadow:inset 0 0 44px color-mix(in srgb,var(--ink-i) 20%,transparent);border-radius:4px;padding:26px 24px;gap:8px}
.rod{position:absolute;left:8px;right:8px;height:22px;border-radius:11px;z-index:4;background:linear-gradient(var(--acc),color-mix(in srgb,var(--acc) 50%,#000))}
.rod::before,.rod::after{content:"";position:absolute;top:-4px;width:30px;height:30px;border-radius:50%;background:inherit}
.rod::before{left:-6px}.rod::after{right:-6px}
.rod.t{top:22px}.rod.b{bottom:22px}
.orn{color:var(--acc);font-size:20px;line-height:1}
.L-scroll .names{font-size:calc(44px * var(--ns))}
.L-polaroid .body{justify-content:flex-start;padding-top:52px;gap:12px}
.pol{background:#FFFFFF;padding:10px 10px 12px;transform:rotate(-3deg);box-shadow:0 14px 26px rgba(0,0,0,.28);width:236px;position:relative}
.pol::before{content:"";position:absolute;top:-11px;left:50%;width:84px;height:24px;transform:translateX(-50%) rotate(2deg);background:color-mix(in srgb,var(--acc) 45%,rgba(255,255,255,.6))}
.pol .ph{height:214px}
.pol .names{color:#2A2A2A;flex-direction:row;justify-content:center;gap:.2em;align-items:baseline;font-size:calc(34px * var(--ns));margin-top:6px}
.pol .amp{margin:0;color:#8a8a8a}
.stamp{position:absolute;right:26px;top:262px;width:80px;height:80px;border-radius:50%;border:2px dashed var(--acc);color:var(--acc);display:grid;place-content:center;transform:rotate(12deg);font-family:var(--fh);background:var(--bg-i);z-index:3;line-height:1.1}
.stamp b{font-size:26px;display:block}.stamp small{font-size:10px;letter-spacing:.12em;text-transform:uppercase}
.mono{position:relative;width:186px;height:186px;flex:none;display:grid;place-items:center;color:var(--acc)}
.mono svg{position:absolute;inset:0;width:100%;height:100%;max-width:none}
.ini{font-family:var(--fn);color:var(--nc);font-size:calc(58px * var(--ns));display:flex;align-items:center;gap:10px;line-height:1}
.ini i{width:1px;height:54px;background:var(--acc)}
.L-monogram .body{gap:8px;padding-top:40px}
.L-monogram .names{flex-direction:row;gap:.22em;align-items:baseline;font-size:calc(30px * var(--ns))}
.L-monogram .amp{margin:0}
.L-magazine .ph{position:absolute;inset:0;z-index:0}
.shade{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-i) 78%,transparent) 0,transparent 28%,transparent 42%,color-mix(in srgb,var(--bg-i) 94%,transparent) 70%)}
.mast{position:absolute;top:36px;left:0;right:0;z-index:2;font-family:var(--fh);font-size:44px;letter-spacing:.14em;color:var(--nc);line-height:1;font-weight:600}
.issue{position:absolute;top:88px;left:0;right:0;z-index:2;font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--acc)}
.cover{position:absolute;left:28px;right:28px;bottom:36px;z-index:2;text-align:left;display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.cover .names{align-items:flex-start;font-size:calc(50px * var(--ns))}
.cover .amp{margin:.02em 0 .02em .1em}
.lines{list-style:none;padding:0;display:grid;gap:4px;font-size:11.5px}
.lines li{border-left:2px solid var(--acc);padding-left:8px}

.fx{position:absolute;inset:0;pointer-events:none;z-index:6;overflow:hidden}
.fx-petals span,.hpetals span{position:absolute;top:-24px;left:var(--x);width:12px;height:14px;border-radius:70% 0 70% 0;background:var(--acc);opacity:.9;animation:fall var(--d) linear var(--dl) infinite}
.fx-petals span:nth-child(3n){background:#E85D2A}
.fx-petals span:nth-child(4n){background:#F7C6D3}
@keyframes fall{to{transform:translate(var(--dx),var(--fy,720px)) rotate(560deg)}}
.fx-sparkle span{position:absolute;left:var(--x);top:var(--y);width:5px;height:5px;border-radius:50%;background:#FFF6D8;box-shadow:0 0 10px 3px color-mix(in srgb,var(--acc) 80%,transparent);animation:tw var(--d) ease-in-out var(--dl) infinite}
@keyframes tw{0%,100%{opacity:0;transform:scale(.4)}50%{opacity:1;transform:scale(1.2)}}
.fx-curtain i{position:absolute;top:0;bottom:0;width:51%;background:repeating-linear-gradient(90deg,rgba(0,0,0,.28) 0 6px,transparent 6px 22px),linear-gradient(#8E0F2E,#5A0A1E);box-shadow:0 0 30px rgba(0,0,0,.4)}
.fx-curtain i::after{content:"";position:absolute;left:0;right:0;top:0;height:26px;background:var(--acc)}
.fx-curtain .cl{left:0;animation:cl 9s ease-in-out infinite}
.fx-curtain .cr{right:0;animation:cr 9s ease-in-out infinite}
@keyframes cl{0%,12%{transform:none}32%,90%{transform:translateX(-102%)}100%{transform:none}}
@keyframes cr{0%,12%{transform:none}32%,90%{transform:translateX(102%)}100%{transform:none}}
.fx-env{perspective:700px}
.env{position:absolute;inset:0;background:#F1E0C3;animation:envOut 9s ease-in-out infinite}
.flap{position:absolute;top:0;left:0;right:0;height:56%;background:#E3C99B;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;animation:flap 9s ease-in-out infinite}
.seal{position:absolute;left:50%;top:56%;width:78px;height:78px;margin:-39px 0 0 -39px;border-radius:50%;background:#A3123A;color:#FFE9C2;display:grid;place-items:center;font:600 20px "Cinzel",serif;box-shadow:0 4px 10px rgba(0,0,0,.3);animation:seal 9s ease-in-out infinite}
@keyframes flap{0%,12%{transform:rotateX(0)}26%,100%{transform:rotateX(178deg)}}
@keyframes seal{0%,10%{opacity:1;transform:scale(1)}18%,100%{opacity:0;transform:scale(1.4)}}
@keyframes envOut{0%,26%{transform:none;opacity:1}44%,92%{transform:translateY(104%);opacity:1}93%{opacity:0}100%{transform:none;opacity:0}}
.fx-confetti span{position:absolute;top:-20px;left:var(--x);width:7px;height:12px;border-radius:2px;background:hsl(var(--h) 85% 60%);animation:fall var(--d) linear var(--dl) infinite}
.fx-confetti span:nth-child(3n){width:9px;height:9px;border-radius:50%}
.fx-balloons span{position:absolute;bottom:-100px;left:var(--x);width:36px;height:44px;border-radius:50% 50% 48% 48%;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.55),transparent 32%),hsl(var(--h) 78% 60%);animation:up var(--d) linear var(--dl) infinite}
.fx-balloons span::after{content:"";position:absolute;left:50%;top:100%;width:1px;height:46px;background:rgba(0,0,0,.35)}
@keyframes up{to{transform:translate(var(--dx),-840px)}}
.inv .names.single{flex-direction:column;align-items:center;gap:0}
.inv.L-minimal .names.single,.inv .cover .names.single{align-items:flex-start}
.names .tl{font-family:var(--fh);font-style:normal;font-size:.34em;color:var(--acc);letter-spacing:.06em;margin-top:.3em;line-height:1.2}
.pol .names .tl{color:#8a8a8a}
@media (prefers-reduced-motion:reduce){.fx,.hpetals{display:none}}

.phone{position:relative;width:min(310px,100%);border-radius:42px;padding:11px;background:#18161a;box-shadow:0 40px 70px -28px rgba(80,10,35,.55),inset 0 0 0 2px #333}
.phone::before{content:"";position:absolute;top:18px;left:50%;transform:translateX(-50%);width:76px;height:19px;border-radius:12px;background:#18161a;z-index:3}
.phone .scaler{border-radius:31px}
.fade{transition:opacity .45s,transform .45s}
.fade.out{opacity:0;transform:scale(.97)}

