/* Enjin SENJA platform jemputan (port dari site/public/senja/senja.css). Warna HANYA lewat var() dari
   /t/<tema>/tema.css (dimuat sebelum fail ni). Cerah sahaja.
   Satu dunia: latar sungai tetap (.world) di belakang lajur 480px, kamera (zoom, tilt, pan) digerakkan skrol oleh senja.js.
   Bab berpin (.bab > .pentas sticky) dengan lapisan aset .ly: GSAP gerakkan .ly (transform), CSS ayunkan .ly__img (rotate). */

@font-face{font-family:"Cormorant Garamond";src:url(/fonts/cormorant-var.woff2) format("woff2");font-weight:500 600;font-style:normal;font-display:swap}
@font-face{font-family:"Cormorant Garamond";src:url(/fonts/cormorant-italic.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}
@font-face{font-family:"Inter";src:url(/fonts/inter-var.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap}
@font-face{font-family:"Pinyon Script";src:url(/fonts/pinyon-latin.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Amiri";src:url(/fonts/amiri-arabic.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;
  unicode-range:U+0600-06FF,U+0750-077F,U+0870-08FF,U+200C-200E,U+FB50-FDFF,U+FE70-FEFC}
@font-face{font-family:"Cormorant Fallback";src:local("Times New Roman"),local("TimesNewRomanPSMT"),local("Georgia");font-style:normal;size-adjust:95.2%;ascent-override:96.6%;descent-override:30.5%;line-gap-override:0%}
@font-face{font-family:"Cormorant Fallback";src:local("Times New Roman Italic"),local("TimesNewRomanPS-ItalicMT"),local("Georgia Italic");font-style:italic;size-adjust:87.7%;ascent-override:104.9%;descent-override:33%;line-gap-override:0%}
@font-face{font-family:"Inter Fallback";src:local("Arial"),local("ArialMT"),local("Helvetica");size-adjust:106.3%;ascent-override:91.3%;descent-override:22.6%;line-gap-override:0%}

/* ---------- ASAS ---------- */
*,*::before,*::after{box-sizing:border-box}
html{background:var(--bg);color-scheme:light;-webkit-text-size-adjust:100%}
html.is-locked,html.is-locked body{overflow:hidden;overscroll-behavior:none}
body{margin:0;background:transparent;color:var(--ink-soft);font:400 1rem/1.6 var(--f-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:clip;min-height:100svh}
img,svg{display:block;max-width:100%}
img{height:auto}
p,h1,h2,h3,figure,ol,ul{margin:0}
a{color:inherit}
:where(a,button,input,textarea,[tabindex]):focus-visible{outline:2px solid var(--ink);outline-offset:3px}
main:focus{outline:none}
.ico{width:1.1em;height:1.1em;flex:none}

/* ---------- DUNIA (latar tetap) ---------- */
.page-bg{display:none}
.world{position:fixed;top:0;bottom:0;left:50%;translate:-50% 0;width:min(100%,var(--col));z-index:-1;overflow:hidden;background:var(--bg);pointer-events:none}
.world__cam{position:absolute;left:0;top:0;width:100%;height:100%;transform-origin:0 0}
.cam-on .world__cam{will-change:transform}
.world__img{width:100%;height:100%;max-width:none;object-fit:cover;object-position:50% 50%;backface-visibility:hidden}
.world__wash{position:absolute;inset:0;background:linear-gradient(180deg,var(--wash) 0%,var(--wash-0) 46%)}
.app{position:relative;width:min(100%,var(--col));margin-inline:auto;overflow-x:clip;min-height:100svh}
@media (min-width:600px){
  .page-bg{display:block;position:fixed;inset:0;width:100%;height:100%;max-width:none;object-fit:cover;z-index:-2;pointer-events:none}
  .world{box-shadow:var(--sh-col)}
}

/* ---------- LAPISAN ASET ---------- */
.ly{position:absolute;z-index:var(--z,0);pointer-events:none}
.ly__img{display:block;width:100%;height:auto;max-width:none}
.mirror .ly__img{scale:-1 1}
.gs .bab .ly,.gs .card__flora,.gs [data-g]{will-change:transform}
/* cover: lapisan masuk dengan CSS (tak perlu GSAP) */
.js .cover .ly__img{opacity:0;translate:var(--fx,0px) var(--fy,0px);
  transition:opacity 1.3s var(--ease-soft) var(--d,0s),translate 1.7s var(--ease-out) var(--d,0s)}
.js .cover.is-live .ly__img{opacity:1;translate:0 0}
/* bab ayat: sakura + palem masuk sekali selepas bukaan (kelas .intro dari JS) */
.gs .bab--ayat .ly__img{opacity:0;translate:var(--fx,0px) var(--fy,0px);
  transition:opacity 1.4s var(--ease-soft) var(--d,0s),translate 2s var(--ease-out) var(--d,0s)}
.intro .bab--ayat .ly__img{opacity:1;translate:0 0}
.b-sakura{--fx:-70%;--fy:-40%}
.b-palem{--fx:70%;--fy:45%;--d:.2s}
.from-top{--fy:-56px}
.from-bottom{--fy:56px}

/* ---------- TIPOGRAFI ---------- */
.eyebrow{font:500 .7rem/1.3 var(--f-text);letter-spacing:.24em;text-transform:uppercase;color:var(--rose);margin:0}
.names{font:400 clamp(3.1rem,2.4rem + 3.4vw,3.8rem)/1.25 var(--f-script);color:var(--rose);margin:0;padding-inline:.2em;text-shadow:var(--glow-text)}
.sec-h{font:500 clamp(2rem,1.7rem + 1.6vw,2.4rem)/1.1 var(--f-display);color:var(--ink);margin:0;text-wrap:balance}
.sec-title{font:italic 500 clamp(2.15rem,1.8rem + 1.8vw,2.6rem)/1.08 var(--f-display);color:var(--rose);margin:0}
.prose{font:500 1.14rem/1.6 var(--f-display);color:var(--ink-soft);max-width:24rem;margin-inline:auto;text-wrap:pretty}
.prose--sm{font-size:1.06rem}
.orn{display:block;width:84px;height:1px;background:linear-gradient(90deg,var(--mist-0),var(--gold),var(--mist-0));margin:.4rem auto}

/* kabus lembut di belakang teks atas lukisan (bukan kad), supaya kontras kekal bila teks lalu atas sungai/bunga */
.mist{position:relative;isolation:isolate}
.mist::before{content:"";position:absolute;inset:-12% -16%;z-index:-1;pointer-events:none;opacity:var(--mo,1);
  background:radial-gradient(closest-side,var(--mist) 0%,var(--mist) 52%,var(--mist-mid) 74%,var(--mist-0) 100%)}

/* ---------- BAB BERPIN ----------
   Tanpa GSAP atau reduced-motion: .bab = seksyen statik biasa, semua teks nampak.
   Dengan GSAP (.gs pada html): .bab tinggi N svh, .pentas sticky 100svh, timeline scrub ikut skrol. */
.bab{position:relative}
.pentas{position:relative;min-height:100svh;overflow:clip;isolation:isolate}
.gs .pentas{position:sticky;top:0;height:100svh;min-height:0;overflow:hidden}
/* bab bertindih 100svh: bab seterusnya mula tepat bila bab ni tamat, tiada skrol kosong antara bab */
.gs .bab + .bab{margin-top:-100svh}
/* kandungan disembunyi selagi sampul belum dibuka */
.is-locked #main,.is-locked .foot{visibility:hidden}
.gs .bab--ayat{height:270svh}
.gs .bab--kisah{height:290svh}
.gs .bab--jemput{height:320svh}
.gs .bab--akad{height:240svh}
.gs .bab--majlis{height:280svh}
.gs .bab--penutup{height:300svh}
.stage{position:relative;z-index:2;min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.4rem;text-align:center;
  padding:clamp(2.6rem,7svh,4rem) var(--gutter) calc(var(--nav-h) + 1.6rem + env(safe-area-inset-bottom))}
.stage--top{justify-content:flex-start;gap:1rem;padding-top:clamp(2rem,5.5svh,3.4rem)}
.gs .stage{position:absolute;inset:0;min-height:0}
.txt,.frame{position:relative;z-index:1;width:100%;max-width:25rem;display:grid;justify-items:center;gap:.5rem}
.gs .bab--ayat .frame{position:absolute;left:var(--gutter);right:var(--gutter);width:auto;top:46%;translate:0 -50%;margin-inline:auto}

/* ayat: ranting sakura kiri atas, daun palem kanan bawah */
.b-sakura{top:-1%;left:-10%;width:min(54%,250px);--z:1}
.b-palem{right:-14%;bottom:calc(var(--nav-h) - 26px);width:min(58%,270px);--z:3}
.bismillah{font:400 1.75rem/1.9 var(--f-arab);color:var(--rose)}
.arabic{font:400 1.55rem/2.2 var(--f-arab);color:var(--ink);margin:.2rem 0 .2rem;max-width:26rem}
.arabic .w,.prose .w,.terjemahan .w{display:inline-block}
.terjemahan{font:italic 500 1.12rem/1.62 var(--f-display);color:var(--ink-soft);max-width:25rem;text-wrap:pretty}
.rujukan{font:500 .72rem/1.3 var(--f-text);letter-spacing:.24em;text-transform:uppercase;color:var(--rose);margin-top:.2rem}

/* kisah: watak pasangan dalam bingkai gerbang + gapura di atas bingkai */
.arch{position:relative;z-index:1;width:min(58%,250px);margin:clamp(2.6rem,6svh,3.6rem) auto 0;flex:none}
.arch__frame{position:relative;aspect-ratio:2/3;overflow:hidden;isolation:isolate;
  border-radius:50% 50% var(--r) var(--r) / 28% 28% var(--r) var(--r);
  box-shadow:0 0 0 5px var(--frame-ring),0 0 0 6px var(--line-strong),var(--sh-frame)}
.arch__img{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:cover;object-position:50% 70%}
.arch__gate{left:-16%;width:132%;top:-16%;--z:2}
.arch__buket{left:-2%;width:104%;bottom:-19%;--z:2}
.prose--kisah{font-size:1.1rem;line-height:1.55}

/* jemputan formal: hibiscus kanan atas, vas kiri bawah */
.b-hib{top:0;right:-13%;width:min(46%,215px);--z:3}
.b-vas{left:-6%;bottom:calc(var(--nav-h) - 14px);width:min(36%,170px);--z:3}
.jemputan{gap:.42rem}
.j-salam{font:italic 500 1.24rem/1.35 var(--f-display);color:var(--rose);margin-bottom:.15rem;max-width:20rem}
.j-line{font:500 1.06rem/1.5 var(--f-display);color:var(--ink-soft);max-width:23rem;text-wrap:pretty}
.j-host{font:600 1.18rem/1.3 var(--f-display);color:var(--ink)}
.j-jemput{margin-top:.25rem}
.j-name{font:400 clamp(1.85rem,1.5rem + 1.6vw,2.2rem)/1.3 var(--f-script);color:var(--rose);margin-top:.15rem;max-width:22rem;padding-inline:.3em}
.j-dengan{font:italic 500 1rem/1.2 var(--f-display);color:var(--ink-soft)}
.j-small{font-size:.98rem}

/* akad: cahaya + lampion tergantung, air mancur tengah bawah */
.bab--akad .stage{padding-bottom:calc(var(--nav-h) + 30svh)}
.b-lam-l{top:-4%;left:6%;width:min(19%,84px);--z:1}
.b-lam-r{top:-2%;right:8%;width:min(15%,68px);--z:1}
.glow{position:absolute;z-index:0;width:min(56%,270px);aspect-ratio:1;border-radius:50%;pointer-events:none;
  background:radial-gradient(closest-side,var(--glow-gold) 0%,var(--glow-gold-mid) 45%,var(--glow-0) 100%)}
.glow--l{top:-2%;left:-12%}
.glow--r{top:-6%;right:-14%}
.b-air{left:50%;bottom:calc(var(--nav-h) - 30px);width:min(70%,320px);margin-left:max(-35%,-160px);--z:3}
.ev-date{font:600 1.32rem/1.25 var(--f-display);color:var(--ink);margin-top:.1rem}
.ev-time{font:500 1.12rem/1.3 var(--f-display);color:var(--ink-soft)}
.ev-place,.ev-venue{font:600 1.2rem/1.3 var(--f-display);color:var(--ink);margin-top:.35rem;max-width:20rem}
.ev-venue{font-size:1.35rem}
.ev-addr{font:400 .9rem/1.5 var(--f-text);color:var(--ink-soft);max-width:18rem}
.ev-note{font:italic 500 1.02rem/1.3 var(--f-display);color:var(--rose);margin-top:.2rem}

/* majlis: wisteria dari bucu atas, aturcara satu demi satu */
.b-wis-l{top:-3%;left:-11%;width:min(38%,180px);--z:1}
.b-wis-r{top:-6%;right:-11%;width:min(34%,160px);--z:1}
.atur-h{margin-top:1rem}
.sec-title[data-g="tulis"],.names[data-g="tulis"]{padding-inline:.3em}

/* ---------- KAD KACA ---------- */
.sec{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:center;text-align:center;padding:clamp(4rem,10svh,5.5rem) var(--gutter) clamp(2.5rem,6svh,3.5rem)}
.card{position:relative;z-index:1;width:100%;max-width:26rem;padding:2.2rem 1.25rem 1.6rem;border-radius:var(--r);display:grid;justify-items:center;gap:.8rem;
  background:var(--glass);-webkit-backdrop-filter:blur(16px) saturate(1.12);backdrop-filter:blur(16px) saturate(1.12);
  box-shadow:inset 0 0 0 1px var(--glass-line),var(--sh-card)}
/* bunga bucu di bawah kandungan kad (.card z-index 1 = konteks tindanan), tak pernah tutup butang/teks */
.card__flora{width:min(36%,150px);--z:-1}
.card__flora--tr{top:-54px;right:-30px}
.card__flora--tl{top:-54px;left:-30px}

.aturcara{list-style:none;padding:0;width:100%;max-width:22rem;border-top:1px solid var(--line)}
.aturcara li{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:.8rem .2rem;border-bottom:1px solid var(--line)}
.aturcara__t{font:500 .82rem/1.3 var(--f-text);color:var(--rose);letter-spacing:.02em;text-align:left;font-variant-numeric:tabular-nums}
.aturcara__a{font:500 1.12rem/1.3 var(--f-display);color:var(--ink);text-align:right}

/* ---------- BUTANG ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.55em;min-height:48px;padding:14px 26px;border:0;border-radius:var(--r-pill);
  font:500 .95rem/1.15 var(--f-text);letter-spacing:.01em;text-decoration:none;cursor:pointer;white-space:nowrap;
  transition:background-color .2s var(--ease-out),color .2s var(--ease-out),scale .15s var(--ease-out)}
.btn svg{width:1.05em;height:1.05em;flex:none}
.btn--rose{background:var(--rose);color:var(--on-rose);box-shadow:var(--sh-float)}
.btn--ghost{background:var(--paper);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-strong)}
.btn--sm{min-height:42px;padding:10px 18px;font-size:.875rem}
.btn--wide{width:100%}
.btn[disabled]{opacity:.55;cursor:progress}
.btn:active{scale:.97}
@media (hover:hover) and (pointer:fine){
  .btn--rose:hover{background:var(--rose-deep)}
  .btn--ghost:hover{background:var(--paper-hover)}
}

.lokasi{width:100%;max-width:22rem;display:grid;gap:.7rem}
.lokasi__row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}
.lokasi__row .btn{width:100%}
.kal{position:relative}
.kal__menu{margin-top:.5rem;display:grid;border-radius:var(--r-sm);background:var(--paper-solid);box-shadow:inset 0 0 0 1px var(--line-strong),var(--sh-float);overflow:hidden}
.kal__menu[hidden]{display:none}
.kal__opt{display:flex;align-items:center;gap:.6rem;min-height:48px;padding:.75rem 1rem;font:500 .92rem/1.2 var(--f-text);color:var(--ink);text-decoration:none}
.kal__opt+.kal__opt{border-top:1px solid var(--line)}
.kal__opt .ico{color:var(--rose)}
@media (hover:hover){.kal__opt:hover{background:var(--paper-hover)}}

.cd{width:100%;max-width:22rem;margin-top:.6rem;text-align:center}
.cd__pre,.cd__post{font:italic 500 1.12rem/1.3 var(--f-display);color:var(--ink-soft);margin:0}
.cd__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem;margin:.7rem 0}
.cd__box{display:grid;justify-items:center;gap:.15rem;padding:.75rem .2rem .65rem;border-radius:var(--r-sm);background:var(--paper);box-shadow:inset 0 0 0 1px var(--line)}
.cd__n{font:500 2.1rem/1 var(--f-display);color:var(--ink);font-variant-numeric:lining-nums tabular-nums}
.cd__u{font:500 .64rem/1.2 var(--f-text);letter-spacing:.16em;text-transform:uppercase;color:var(--rose)}
.cd__msg{font:italic 500 1.5rem/1.3 var(--f-display);color:var(--rose);margin:0}
.cd__run[hidden],.cd__msg[hidden]{display:none}

/* ---------- RSVP ---------- */
.form{width:100%;max-width:24rem;display:grid;gap:1.05rem;margin-top:.5rem;text-align:left}
.form[hidden]{display:none}
.field{display:grid;gap:.45rem;margin:0;padding:0;border:0;min-width:0}
.field[hidden]{display:none}
.field__l{font:500 .78rem/1.3 var(--f-text);letter-spacing:.04em;color:var(--ink);padding:0}
.input{width:100%;min-height:48px;padding:.75rem .9rem;border:0;border-radius:var(--r-sm);background:var(--paper);box-shadow:inset 0 0 0 1px var(--line-strong);
  font:400 1rem/1.4 var(--f-text);color:var(--ink);transition:box-shadow .2s var(--ease-out)}
.input::placeholder{color:var(--ink-soft);opacity:.8}
.input:focus{outline:none;box-shadow:inset 0 0 0 1.5px var(--rose)}
.input--area{min-height:112px;resize:vertical}
.pills{display:grid;grid-template-columns:1fr 1fr;gap:.55rem}
.pills--num{grid-template-columns:repeat(5,1fr)}
.pills--n1{grid-template-columns:repeat(1,1fr)}.pills--n2{grid-template-columns:repeat(2,1fr)}.pills--n3{grid-template-columns:repeat(3,1fr)}.pills--n4{grid-template-columns:repeat(4,1fr)}.pills--n5{grid-template-columns:repeat(5,1fr)}.pills--n6{grid-template-columns:repeat(3,1fr)}.pills--n7{grid-template-columns:repeat(4,1fr)}.pills--n8{grid-template-columns:repeat(4,1fr)}.pills--n9{grid-template-columns:repeat(5,1fr)}.pills--n10{grid-template-columns:repeat(5,1fr)}
.pill{position:relative;display:block;cursor:pointer}
.pill input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.pill span{display:flex;align-items:center;justify-content:center;min-height:46px;padding:.6rem .7rem;border-radius:var(--r-pill);background:var(--paper);
  box-shadow:inset 0 0 0 1px var(--line-strong);font:500 .9rem/1.2 var(--f-text);color:var(--ink);text-align:center;
  transition:background-color .2s var(--ease-out),color .2s var(--ease-out),box-shadow .2s var(--ease-out)}
.pill--num span{font:500 1.2rem/1 var(--f-display);font-variant-numeric:lining-nums tabular-nums;padding:.5rem 0}
.pill input:checked+span{background:var(--rose);color:var(--on-rose);box-shadow:none}
.pill input:focus-visible+span{outline:2px solid var(--ink);outline-offset:2px}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form__err{margin:0;padding:.7rem .9rem;border-radius:var(--r-sm);background:var(--danger-bg);color:var(--danger);font:500 .88rem/1.4 var(--f-text)}
.form__err[hidden]{display:none}
.rsvp-ok{width:100%;max-width:24rem;padding:1.6rem 1.2rem;border-radius:var(--r-sm);background:var(--paper);box-shadow:inset 0 0 0 1px var(--line);text-align:center}
.rsvp-ok[hidden]{display:none}
.rsvp-ok p{font:italic 500 1.3rem/1.4 var(--f-display);color:var(--ink);margin:0}

/* ---------- UCAPAN ---------- */
.uc__count{font:500 .78rem/1.3 var(--f-text);letter-spacing:.14em;text-transform:uppercase;color:var(--rose);font-variant-numeric:tabular-nums}
.uc{width:100%;max-width:24rem;display:grid;gap:.6rem;margin-top:.3rem;text-align:left}
.uc__list{list-style:none;padding:0;display:grid;gap:.6rem}
.uc__list:empty{display:none}
.uc__item{padding:.95rem 1rem;border-radius:var(--r-sm);background:var(--paper);box-shadow:inset 0 0 0 1px var(--line)}
.uc__item.is-new{animation:ucIn .8s var(--ease-out) both}
.uc__head{display:flex;justify-content:space-between;align-items:baseline;gap:.8rem;margin:0 0 .3rem}
.uc__nama{font:600 1.08rem/1.25 var(--f-display);color:var(--ink);overflow-wrap:anywhere}
.uc__masa{flex:none;font:400 .72rem/1.2 var(--f-text);color:var(--ink-soft)}
.uc__txt{font:400 .92rem/1.55 var(--f-text);color:var(--ink-soft);white-space:pre-line;overflow-wrap:anywhere}
.uc__more{justify-self:center}
.uc__more[hidden],.uc__kosong[hidden]{display:none}
.uc__kosong{font:italic 500 1.05rem/1.4 var(--f-display);color:var(--ink-soft);text-align:center}
@keyframes ucIn{from{opacity:0;translate:0 -8px}to{opacity:1;translate:0 0}}

/* ---------- SALAM KAUT ---------- */
.bank{width:100%;max-width:22rem;display:grid;justify-items:center;gap:.25rem;padding:1.3rem 1.1rem 1.15rem;margin-top:.3rem;border-radius:var(--r-sm);background:var(--paper);box-shadow:inset 0 0 0 1px var(--line)}
.bank__name{font:500 .7rem/1.3 var(--f-text);letter-spacing:.22em;text-transform:uppercase;color:var(--rose)}
.bank__no{font:500 1.9rem/1.2 var(--f-display);color:var(--ink);letter-spacing:.06em;font-variant-numeric:lining-nums tabular-nums;margin-top:.1rem}
.bank__owner{font:500 1.02rem/1.35 var(--f-display);color:var(--ink-soft);margin-bottom:.7rem}
.qr{margin-top:.3rem;display:grid;justify-items:center;gap:.6rem}
.qr[hidden]{display:none}
.qr__box{padding:10px;border-radius:var(--r-sm);background:var(--qr-light);box-shadow:inset 0 0 0 1px var(--line);color:var(--qr-dark)}
.qr__box img{width:150px;height:150px;image-rendering:pixelated}
.qr__label{font:500 .78rem/1.3 var(--f-text);letter-spacing:.06em;color:var(--ink)}
.nota{font:400 .78rem/1.5 var(--f-text);color:var(--ink-soft);max-width:20rem;margin-top:.2rem}

/* ---------- HUBUNGI ---------- */
.hub{list-style:none;padding:0;width:100%;max-width:22rem;display:grid;gap:.7rem;margin-top:.2rem}
.hub__item{padding:1rem 1rem 1.05rem;border-radius:var(--r-sm);background:var(--paper);box-shadow:inset 0 0 0 1px var(--line);display:grid;justify-items:center;gap:.1rem}
.hub__nama{font:600 1.3rem/1.2 var(--f-display);color:var(--ink)}
.hub__peranan{font:400 .82rem/1.4 var(--f-text);color:var(--ink-soft);margin-bottom:.6rem}
.hub__row{display:grid;grid-template-columns:1fr 1fr;gap:.55rem;width:100%}
.hub__row .btn{width:100%;padding-inline:12px}

/* ---------- PENUTUP ---------- */
.arch--penutup{width:min(54%,236px);margin-top:clamp(1.2rem,3svh,1.8rem)}
.p-fam{font:600 1.06rem/1.38 var(--f-display);color:var(--ink);max-width:21rem}
.p-jumpa{font:italic 500 1.12rem/1.3 var(--f-display);color:var(--ink-soft)}
.names--end{font-size:clamp(2.8rem,2.2rem + 3vw,3.4rem);margin-top:-.1rem}
.txt--end{gap:.1rem;margin-top:clamp(3.2rem,8svh,4.4rem)}
.gs .bab--penutup .txt--end{position:absolute;left:var(--gutter);right:var(--gutter);width:auto;bottom:calc(var(--nav-h) + 2.2rem + env(safe-area-inset-bottom));margin:0 auto}
.petals--lagi{opacity:0}
.petals--lagi .petal{--s:14px}

/* ---------- FOOTER ---------- */
.foot{position:relative;padding:1.2rem var(--gutter) calc(var(--nav-h) + 1.8rem + env(safe-area-inset-bottom));text-align:center}
.foot p{display:inline-block;padding:.45rem .9rem;border-radius:var(--r-pill);background:var(--mist);font:400 .74rem/1.4 var(--f-text);letter-spacing:.06em;color:var(--ink-soft)}

/* ---------- COVER: sampul jemputan + cop lilin (geometri sampul dalam bukaan.css, dijana build) ---------- */
.cover{position:relative;min-height:100svh;isolation:isolate;overflow:hidden;display:flex;flex-direction:column;align-items:center;text-align:center}
.js .cover{position:fixed;top:0;bottom:0;left:50%;translate:-50% 0;width:min(100%,var(--col));z-index:100;min-height:0;height:100svh}
.js .cover[hidden]{display:none}
.cover__dim{position:absolute;inset:0;z-index:-2;pointer-events:none;background:var(--wash);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.cover::before{content:"";position:absolute;inset:0 0 auto 0;height:60%;z-index:-1;pointer-events:none;opacity:var(--mist-o,1);
  background:linear-gradient(180deg,var(--mist-mid) 0%,var(--mist-mid) 40%,var(--mist-0) 100%)}
.c-wis-l{top:-26px;left:-12%;width:min(34%,165px);--z:0;--d:.15s}
.c-wis-r{top:-34px;right:-12%;width:min(31%,152px);--z:0;--d:.3s}
.c-lam-l{top:23svh;left:1.5%;width:min(12.5%,56px);--z:6;--d:.55s}
.c-lam-r{top:19.5svh;right:2%;width:min(11%,50px);--z:6;--d:.7s}
.c-buket{left:50%;bottom:-18px;width:min(58%,270px);margin-left:max(-29%,-135px);--z:1;--d:.45s}
.cover__top{position:relative;z-index:5;width:100%;padding:clamp(2.2rem,7svh,4rem) 0 0;display:flex;flex-direction:column;align-items:center;gap:.3rem}
.cover__top .eyebrow{padding-inline:var(--gutter)}
.cover .names{margin:-.1rem 0 -.35rem}
.cover__date{font:500 1.18rem/1.3 var(--f-display);color:var(--ink);letter-spacing:.02em;margin:0;text-shadow:var(--glow-text)}
.cover__env{position:relative;z-index:3;flex:none;width:min(88%,380px,calc(58svh - 90px));margin-top:calc(min(88vw,380px,58svh - 90px) * -.07)}
.c-gate{left:-3%;width:106%;top:22%;--z:0;--d:0s}
.env{position:relative;z-index:1;width:100%;aspect-ratio:var(--env-ar,1100/1263)}
.env__bob,.env__tilt{position:absolute;inset:0}
.env__tilt{rotate:var(--tilt,-2.5deg);transform-origin:50% 72%;filter:drop-shadow(var(--sh-env))}
.env__tilt>img{position:absolute;inset:0;width:100%;height:100%;max-width:none;display:block;pointer-events:none;-webkit-user-select:none;user-select:none}
.env__lid{z-index:1;visibility:hidden;clip-path:inset(0 0 calc(100% - var(--hinge)) 0);transform-origin:50% var(--hinge)}
.env__back{z-index:1;visibility:hidden;clip-path:inset(var(--hinge) 0 0 0)}
.env__slot{position:absolute;inset:0;z-index:2;clip-path:inset(-400% -80% calc(100% - var(--bottom)) -80%)}
.env__front{z-index:3;visibility:hidden;clip-path:polygon(0 calc(var(--hinge) + .6%),50% var(--pocket,58%),100% calc(var(--hinge) + .6%),100% 100%,0 100%)}
.env__shut{z-index:4}
.env__flap{z-index:5;visibility:hidden;clip-path:polygon(0 var(--hinge),100% var(--hinge),50% calc(var(--tip) + .8%));transform-origin:50% var(--hinge)}
.env__to{position:absolute;z-index:6;left:21%;right:21%;top:calc(var(--hinge) + 4.2%);display:grid;justify-items:center;gap:.1rem;pointer-events:none}
.cover__to{font:500 .62rem/1.2 var(--f-text);letter-spacing:.22em;text-transform:uppercase;color:var(--rose);margin:0}
.cover__name{font:500 1.16rem/1.14 var(--f-display);color:var(--ink);margin:0;max-width:100%;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
.cover__name.is-long{font-size:.96rem}
.seal{position:absolute;z-index:7;left:50%;top:var(--seal-y);width:27%;aspect-ratio:400/403;translate:-50% -50%;cursor:pointer;
  container-type:inline-size;filter:drop-shadow(var(--sh-wax));-webkit-tap-highlight-color:transparent}
.seal::before{content:"";position:absolute;inset:-34%;z-index:-1;border-radius:50%;pointer-events:none;
  background:radial-gradient(closest-side,var(--glow-gold) 0%,var(--glow-gold-mid) 48%,var(--glow-0) 100%)}
/* cop satu keping (Adam 2 Nov, jangan retak atau pecah dua) */
.seal__img{position:absolute;inset:0;width:100%;height:100%;max-width:none;display:block;pointer-events:none}
.seal__mono{position:absolute;inset:0;display:grid;place-items:center;font:italic 600 21cqw/1 var(--f-display);color:var(--wax-ink);
  letter-spacing:.01em;white-space:nowrap;text-shadow:0 1px 0 var(--wax-hi),0 -1px 0 var(--wax-lo);pointer-events:none}
.kad{position:absolute;left:12%;width:76%;top:50%;aspect-ratio:var(--kad-ar,2/3);container-type:inline-size;transform-origin:50% 50%}
.kad__img{position:absolute;inset:0;width:100%;height:100%;max-width:none;display:block}
.kad__txt{position:absolute;left:8%;right:8%;top:30%;bottom:30%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2.4cqw}
.kad__txt p{margin:0}
.kad__mono{font:italic 500 8.5cqw/1 var(--f-display);color:var(--rose)}
.kad__names{font:400 11.5cqw/1.25 var(--f-script);color:var(--rose);white-space:nowrap}
.kad__date{font:500 5.4cqw/1.3 var(--f-display);color:var(--ink);letter-spacing:.02em}
.kad .orn{width:30cqw;margin:0}
.cover__cta{position:relative;z-index:5;display:grid;justify-items:center;gap:.55rem;margin-top:clamp(1.2rem,4.4svh,2.6rem)}
.cover__btn{min-height:48px;padding:12px 26px;pointer-events:auto}
.cover__hint{font:500 .76rem/1.3 var(--f-text);letter-spacing:.04em;color:var(--ink-soft);margin:0;text-shadow:var(--glow-text)}
.is-opening [data-rv]{transition:none!important}

/* ---------- NAV + MUZIK + TOAST ---------- */
.nav{position:fixed;left:50%;bottom:0;translate:-50% 0;width:min(100%,var(--col));z-index:60;display:grid;grid-template-columns:repeat(5,1fr);
  padding:6px 6px calc(6px + env(safe-area-inset-bottom));background:var(--glass-nav);-webkit-backdrop-filter:blur(16px) saturate(1.15);backdrop-filter:blur(16px) saturate(1.15);
  box-shadow:0 -1px 0 var(--glass-line);transform:translateY(115%);transition:transform .7s var(--ease-out)}
.nav a{position:relative;display:grid;justify-items:center;align-content:center;gap:4px;min-height:52px;padding:4px 2px;border-radius:var(--r-sm);
  font:500 .64rem/1.1 var(--f-text);letter-spacing:.02em;color:var(--ink-soft);text-decoration:none;text-align:center;transition:color .25s var(--ease-out)}
.nav a .ico{width:21px;height:21px}
.nav a[aria-current="true"]{color:var(--rose)}
.nav a[aria-current="true"]::after{content:"";position:absolute;top:2px;left:50%;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--rose)}
.music{position:fixed;z-index:61;right:max(14px,calc(50% - var(--col) / 2 + 14px));bottom:calc(var(--nav-h) + 14px + env(safe-area-inset-bottom));
  width:46px;height:46px;display:grid;place-items:center;border:0;border-radius:50%;padding:0;cursor:pointer;color:var(--rose);
  background:var(--glass-nav);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:inset 0 0 0 1px var(--glass-line),var(--sh-float);
  opacity:0;scale:.6;pointer-events:none;transition:opacity .5s var(--ease-out) .3s,scale .5s var(--ease-out) .3s}
.music .ico{width:24px;height:24px;grid-area:1/1}
.music .ico--off{opacity:0}
.music:not(.is-on) .ico--on{opacity:0}
.music:not(.is-on) .ico--off{opacity:1}
.is-open .nav{transform:none}
.is-open .music{opacity:1;scale:1;pointer-events:auto}
.toast{position:fixed;z-index:120;left:50%;bottom:calc(var(--nav-h) + 76px + env(safe-area-inset-bottom));translate:-50% 0;max-width:min(88vw,400px);
  padding:.75rem 1.1rem;border-radius:var(--r-sm);background:var(--toast-bg);color:var(--on-toast);font:500 .86rem/1.4 var(--f-text);text-align:center;
  opacity:0;transform:translateY(8px);pointer-events:none;transition:opacity .3s var(--ease-out),transform .3s var(--ease-out)}
.toast.is-on{opacity:1;transform:none}
.toast:empty{display:none}

.hint{position:fixed;left:50%;translate:-50% 0;bottom:calc(var(--nav-h) + 18px + env(safe-area-inset-bottom));z-index:59;display:flex;flex-direction:column;align-items:center;gap:1px;
  margin:0;padding:.5rem 1.05rem .35rem;border-radius:var(--r-pill);background:var(--glass-nav);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  box-shadow:inset 0 0 0 1px var(--glass-line),var(--sh-float);font:500 .74rem/1.2 var(--f-text);letter-spacing:.05em;color:var(--ink);white-space:nowrap;
  opacity:0;pointer-events:none;transition:opacity .6s var(--ease-out)}
.hint__ico{width:18px;height:18px;color:var(--rose)}
.is-open .hint{opacity:1;transition-delay:.8s}
.is-open.is-scrolled .hint{opacity:0;transition-delay:0s}

/* ---------- KELOPAK + RAMA-RAMA ---------- */
.fx{position:absolute;inset:0;z-index:4;pointer-events:none;overflow:hidden}
.petals{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.petal{position:absolute;top:-6%;left:var(--x,50%);width:var(--s,18px);height:auto;max-width:none;opacity:0;will-change:transform,opacity}
.petal:nth-child(1){--x:6%;--s:17px;--pd:16s;--pdl:-1s;--sw:46px;--pr:300deg}
.petal:nth-child(2){--x:18%;--s:13px;--pd:19s;--pdl:-9s;--sw:-30px;--pr:-260deg}
.petal:nth-child(3){--x:31%;--s:20px;--pd:15s;--pdl:-5s;--sw:38px;--pr:340deg}
.petal:nth-child(4){--x:44%;--s:14px;--pd:21s;--pdl:-14s;--sw:-42px;--pr:-300deg}
.petal:nth-child(5){--x:55%;--s:18px;--pd:17s;--pdl:-3s;--sw:34px;--pr:280deg}
.petal:nth-child(6){--x:66%;--s:12px;--pd:20s;--pdl:-11s;--sw:-36px;--pr:-320deg}
.petal:nth-child(7){--x:76%;--s:19px;--pd:16s;--pdl:-7s;--sw:40px;--pr:300deg}
.petal:nth-child(8){--x:86%;--s:14px;--pd:22s;--pdl:-16s;--sw:-28px;--pr:-280deg}
.petal:nth-child(9){--x:93%;--s:16px;--pd:18s;--pdl:-4s;--sw:-44px;--pr:320deg}
.petal:nth-child(10){--x:40%;--s:11px;--pd:24s;--pdl:-19s;--sw:30px;--pr:-340deg}
.fly{position:absolute;top:0;left:0;width:40px;pointer-events:none;opacity:0;offset-rotate:0deg;
  offset-path:path("M -70 560 C 40 480, 90 640, 190 520 S 300 300, 380 360 S 470 260, 560 210")}
.fly img{display:block;width:100%;height:auto;transform-origin:50% 55%}
.fly--kisah{width:34px;offset-path:path("M 560 380 C 420 420, 380 260, 280 300 S 140 180, 60 220 S -20 150, -80 120")}
.fly--penutup{width:36px;offset-path:path("M -70 470 C 60 380, 120 520, 220 420 S 330 220, 420 280 S 500 200, 560 150")}

/* ---------- GERAK (dimatikan semua bila reduced-motion) ---------- */
@media (prefers-reduced-motion:no-preference){
  .hint__ico{animation:bob 1.5s var(--ease-inout) infinite}
  .glow{animation:pulse 3.6s var(--ease-inout) infinite alternate}
  /* ayun lapisan, jalan hanya bila seksyen dalam viewport */
  .sway-lamp .ly__img{transform-origin:50% 0;animation:lamp 5.6s var(--ease-inout) infinite alternate;animation-play-state:paused}
  .sway-alt .ly__img{animation-duration:6.8s;animation-delay:-2.2s}
  .sway-hang .ly__img{transform-origin:50% 0;animation:hang 7.5s var(--ease-inout) infinite alternate;animation-play-state:paused}
  .mirror.sway-hang .ly__img{animation-delay:-3s}
  .sway-branch .ly__img{transform-origin:0 100%;animation:branch 8s var(--ease-inout) infinite alternate;animation-play-state:paused}
  .sway-palm .ly__img{transform-origin:50% 100%;animation:palm 7s var(--ease-inout) infinite alternate;animation-play-state:paused}
  .sway-bloom .ly__img{transform-origin:50% 100%;animation:bloom 9s var(--ease-inout) infinite alternate;animation-play-state:paused}
  .is-live .ly__img{animation-play-state:running}
  /* kelopak + rama-rama */
  .petal{animation:fall var(--pd,18s) linear var(--pdl,0s) infinite;animation-play-state:paused}
  .is-live .petal{animation-play-state:running}
  .fly{animation:fly var(--fd,26s) var(--ease-inout) var(--fdl,0s) infinite;animation-play-state:paused}
  .fly img{animation:flap .42s var(--ease-inout) infinite alternate}
  .is-live .fly{animation-play-state:running}
  .fly--cover{--fdl:-6s;--fd:24s}
  .fly--kisah{--fd:28s;--fdl:-4s}
  .fly--penutup{--fd:26s;--fdl:-12s}
  /* teks masuk berperingkat */
  .js .cover [data-rv]{opacity:0;translate:0 14px;filter:blur(6px);
    transition:opacity .9s var(--ease-soft),translate .9s var(--ease-soft),filter .9s var(--ease-soft);transition-delay:calc(var(--i,0) * 120ms)}
  .js .cover [data-rv].is-in{opacity:1;translate:0 0;filter:none}
  /* sampul terapung naik turun, cahaya cop berdenyut */
  .env__bob{animation:envbob 4.8s var(--ease-inout) infinite alternate}
  .is-opening .env__bob{animation-play-state:paused}
  .seal::before{animation:pulse 2.6s var(--ease-inout) infinite alternate}
  .seal:hover{scale:1.04;transition:scale .3s var(--ease-out)}
  .music.is-on .ico--on{animation:spin 7s linear infinite}
}
@keyframes bob{0%,100%{translate:0 0}50%{translate:0 4px}}
@keyframes envbob{from{translate:0 -4px}to{translate:0 5px}}
@keyframes pulse{from{filter:opacity(.6);scale:.94}to{filter:opacity(1);scale:1.05}}
@keyframes lamp{from{rotate:-3.2deg}to{rotate:3.2deg}}
@keyframes hang{from{rotate:-1.8deg}to{rotate:1.6deg}}
@keyframes branch{from{rotate:-1.6deg}to{rotate:1.4deg}}
@keyframes palm{from{rotate:-2.2deg}to{rotate:1.6deg}}
@keyframes bloom{from{rotate:-.9deg}to{rotate:.9deg}}
@keyframes fall{
  0%{opacity:0;transform:translate3d(0,0,0) rotate(0deg)}
  8%{opacity:.95}
  50%{transform:translate3d(var(--sw,30px),56svh,0) rotate(calc(var(--pr,300deg) * .5))}
  90%{opacity:.85}
  100%{opacity:0;transform:translate3d(calc(var(--sw,30px) * -.4),112svh,0) rotate(var(--pr,300deg))}
}
@keyframes fly{0%{offset-distance:0%;opacity:0}5%{opacity:1}88%{opacity:1}100%{offset-distance:100%;opacity:0}}
@keyframes flap{from{transform:scaleX(1)}to{transform:scaleX(.38)}}
@keyframes spin{to{rotate:360deg}}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .petals,.fly{display:none}
  .ly,.world__cam{transform:none!important}
  .js .ly__img{opacity:1;translate:none;transition:none}
}

/* =====================================================================================================================
   PLATFORM (ENGINE). Tambahan atas gaya page live, warna lewat token tema sahaja.
   ===================================================================================================================== */

/* geometri sampul lalai (dikira build_senja.py dari amplop-*.webp, aset bukaan sama semua tema ikut CONTRACT).
   senja.js tulis semula dari cfg.env kalau pek tema bawa geometri lain. */
.env{--env-ar:1100/1263;--hinge:44.00%;--tip:83.97%;--bottom:99.21%;--seal-y:81.97%;--pocket:57.56%}
.kad{--kad-ar:1024/1506}

/* cop warna selain asal: dakwat --wax-ink disampel dari lilin asal, jadi monogram guna --on-rose timbul */
.seal--warna .seal__mono{color:var(--on-rose)}

/* bab bersyarat + nav ikut bilangan pautan, muzik boleh tiada */
.nav--4{grid-template-columns:repeat(4,1fr)}
.nav--3{grid-template-columns:repeat(3,1fr)}
.nav--2{grid-template-columns:repeat(2,1fr)}
.music[hidden]{display:none}

/* kod pakaian dalam bab majlis */
.ev-pakaian__l{margin-top:.8rem}
.ev-pakaian{font:italic 500 1.08rem/1.3 var(--f-display);color:var(--ink-soft);margin:0}

/* RSVP tak aktif (pratonton/demo) dan tutup */
.btn[disabled]{opacity:.55;cursor:not-allowed}
.nota--rsvp{margin:0;text-align:center;justify-self:center}
.rsvp-tutup{font:italic 500 1.2rem/1.45 var(--f-display);color:var(--ink);max-width:22rem;margin:.4rem 0 0}

/* GALERI (pakej video+), kad kaca, grid 2 lajur + lightbox boleh leret */
.galeri{list-style:none;margin:.4rem 0 0;padding:0;width:100%;max-width:24rem;display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.galeri__btn{display:block;width:100%;aspect-ratio:1/1;padding:0;border:0;border-radius:var(--r-sm);overflow:hidden;cursor:zoom-in;
  background:var(--paper);box-shadow:inset 0 0 0 1px var(--line),var(--sh-card);-webkit-tap-highlight-color:transparent}
.galeri__btn img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;transition:scale .5s var(--ease-out)}
@media (hover:hover) and (pointer:fine){.galeri__btn:hover img{scale:1.04}}
.galeri__btn:focus-visible{outline:2px solid var(--rose);outline-offset:2px}
.lb{position:fixed;inset:0;z-index:130;display:grid;grid-template-rows:1fr auto;align-items:center;justify-items:center;
  background:var(--mist);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);touch-action:pan-y;opacity:0;transition:opacity .3s var(--ease-out)}
.lb[hidden]{display:none}
.lb.is-on{opacity:1}
.lb__fig{margin:0;width:100%;height:100%;display:grid;place-items:center;padding:calc(56px + env(safe-area-inset-top)) 14px 8px;overflow:hidden}
.lb__img{display:block;max-width:min(100%,var(--col));max-height:100%;width:auto;height:auto;border-radius:var(--r-sm);box-shadow:var(--sh-col);
  user-select:none;-webkit-user-drag:none}
.lb__bar{display:flex;align-items:center;justify-content:center;gap:1rem;padding:.6rem 1rem calc(1rem + env(safe-area-inset-bottom))}
.lb__n{font:500 .8rem/1 var(--f-text);color:var(--ink-soft);font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:center}
.lb__btn{width:46px;height:46px;display:grid;place-items:center;padding:0;border:0;border-radius:50%;cursor:pointer;color:var(--rose);
  background:var(--paper-solid);box-shadow:inset 0 0 0 1px var(--line-strong),var(--sh-float)}
.lb__btn[hidden]{display:none}
.lb__btn .ico{width:22px;height:22px}
.lb__btn--tutup{position:absolute;top:calc(10px + env(safe-area-inset-top));right:max(12px,calc(50% - var(--col) / 2 + 12px))}
.lb__btn--sebelum .ico{rotate:90deg}
.lb__btn--seterusnya .ico{rotate:-90deg}
.lb-buka{overflow:hidden}

/* JALUR atas (pratonton / demo) */
.jalur{position:fixed;top:0;left:50%;translate:-50% 0;width:min(100%,var(--col));height:var(--jalur-h);z-index:140;
  display:flex;align-items:center;gap:.7rem;padding:.4rem .7rem .4rem .9rem;background:var(--toast-bg);color:var(--on-toast)}
.jalur__t{flex:1;margin:0;font:500 .72rem/1.35 var(--f-text);letter-spacing:.01em;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.jalur__btn{flex:none;min-height:34px;padding:6px 12px;border-radius:var(--r-pill);font:600 .72rem/1.15 var(--f-text);text-decoration:none;
  background:var(--rose);color:var(--on-rose);text-align:center;max-width:46%}
.jalur__btn[hidden]{display:none}
.ada-jalur{--jalur-h:3.5rem}
.ada-jalur .app{padding-top:var(--jalur-h)}
.js.ada-jalur .cover{top:var(--jalur-h);height:calc(100svh - var(--jalur-h))}

/* ---------- MOD VIDEO (?video=1, rakaman 9:16 oleh tools/rakam.py), corak sama enjin dunia ----------
   Page biasa tak terkesan (semua di bawah .mod-video, kad akhir display:none). UI interaktif + kad kaca disorok, majlis
   terus ke penutup. Blok teks dialih ke zon selamat Reels/Stories (~/.claude/SAFE-ZONE-SOSMED.md): x 65-1015,
   y 270-1248 pada 1080x1920 = tepi 6% kiri kanan, 14.0625% atas, 65% bawah. Gate kod dalam tools/rakam.py berhenti
   kalau teks keluar zon. */
.kad-akhir{display:none}
.mod-video{--vz-t:14.0625svh;--vz-b:65svh}
.mod-video .nav,.mod-video .music,.mod-video .hint,.mod-video .toast,.mod-video .jalur,.mod-video .cover__cta,
.mod-video #lokasi,.mod-video #rsvp,.mod-video #ucapan,.mod-video #salam-kaut,.mod-video #hubungi,.mod-video #galeri,.mod-video .foot,
.mod-video .lb{display:none}
/* cover: nama + tarikh mula di bawah garis atas zon, sampul lebih kecil supaya nama tetamu + cop masih dalam zon */
.mod-video .cover__top{padding-top:calc(var(--vz-t) + 4px)}
.mod-video .cover__env{width:min(62%,34svh);margin-top:calc(min(62vw,34svh) * -.07)}
/* bab: blok teks di antara garis atas dan bawah zon */
.mod-video .stage,.mod-video .bab--akad .stage{padding:calc(var(--vz-t) + 6px) var(--gutter) calc(100svh - var(--vz-b) + 6px)}
.mod-video .stage--top{gap:.8rem}
.mod-video.gs .bab--ayat .frame{top:calc((var(--vz-t) + var(--vz-b)) / 2)}
.mod-video .bismillah{font-size:1.5rem;line-height:1.7}
.mod-video .arabic{font-size:1.3rem;line-height:2;margin:0}
.mod-video .terjemahan{font-size:1rem;line-height:1.5}
.mod-video .prose--kisah{font-size:1rem;line-height:1.5}
.mod-video .jemputan{gap:.22rem}
.mod-video .j-salam{font-size:1.06rem;margin:0}
.mod-video .j-line{font-size:.92rem;line-height:1.34}
.mod-video .j-host{font-size:1rem;line-height:1.25}
.mod-video .j-jemput{margin-top:0}
.mod-video .j-name{font-size:1.6rem;line-height:1.18;margin:0}
.mod-video .j-small{font-size:.86rem}
.mod-video .bab--majlis .txt{gap:.26rem}
.mod-video .bab--majlis .sec-title{font-size:1.75rem}
.mod-video .bab--majlis :is(.ev-date,.ev-venue){font-size:1.18rem;margin-top:0}
.mod-video .bab--majlis .ev-time{font-size:1rem}
.mod-video .ev-addr{font-size:.84rem;line-height:1.4;text-wrap:balance}
.mod-video .ev-pakaian__l{margin-top:.3rem}
.mod-video .ev-pakaian{font-size:1rem}
.mod-video .atur-h{margin-top:.2rem}
.mod-video .aturcara li{padding:.28rem .2rem}
.mod-video .aturcara__a{font-size:1.02rem;line-height:1.25}
/* hiasan bab dikecilkan supaya tak tindih teks yang kini lebih tinggi (zon selamat) */
.mod-video .b-hib{top:-2%;right:-8%;width:min(28%,124px)}
.mod-video .b-wis-l{width:min(30%,130px)}
.mod-video .b-wis-r{width:min(27%,118px)}
.mod-video .arch--penutup{width:min(40%,23svh)}
/* blok teks terlalu tinggi untuk zon diskala turun oleh senja.js (vfit, sifat `scale`, tak bertembung transform GSAP) */
.mod-video .bab :is(.txt,.frame){scale:var(--vfit,1);transform-origin:50% 50%}
.mod-video .bab .stage--top .txt{transform-origin:50% 0}
.mod-video .bab .txt--end{transform-origin:50% 100%}
.mod-video.gs .bab--penutup .txt--end{bottom:calc(100svh - var(--vz-b) + 8px)}
/* kad akhir: latar sungai kabur + kabus, wisteria tergantung atas, bunga rangkaian bawah, nama + tarikh + alamat jemputan */
.mod-video .kad-akhir{display:grid;position:fixed;top:0;bottom:0;left:50%;translate:-50% 0;width:min(100%,var(--col));z-index:110;
  align-content:start;justify-items:center;text-align:center;overflow:hidden;isolation:isolate;background:var(--bg);pointer-events:none}
.kad-akhir__latar{position:absolute;inset:0;z-index:-2;width:100%;height:100%;max-width:none;object-fit:cover}
.kad-akhir::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(180deg,var(--mist-mid) 0%,var(--mist) 26%,var(--mist) 58%,var(--mist-mid) 82%,var(--mist-0) 100%)}
.kad-akhir__atas,.kad-akhir__bawah{position:absolute;inset:0;z-index:1;pointer-events:none}
.ka-wis-l{top:-24px;left:-6%;width:min(30%,140px)}
.ka-wis-r{top:-30px;right:-6%;width:min(27%,126px)}
.ka-bunga-l{left:-12%;bottom:-2%;width:min(56%,250px)}
.ka-bunga-r{right:-12%;bottom:-3%;width:min(60%,270px)}
.kad-akhir__isi{position:relative;z-index:3;display:grid;justify-items:center;gap:.6rem;padding:calc(var(--vz-t) + 9svh) var(--gutter) 0}
.kad-akhir .names{font-size:clamp(3.1rem,2.6rem + 3vw,3.9rem)}
.kad-akhir .cover__date{font-size:1.28rem}
.kad-akhir .orn{margin:.5rem auto .3rem}
.kad-akhir__label{font:italic 500 1.16rem/1.4 var(--f-display);color:var(--ink-soft);margin:0;max-width:19rem;text-wrap:balance}
.kad-akhir__url{font:600 1.02rem/1.35 var(--f-text);color:var(--rose);letter-spacing:.01em;margin:0;overflow-wrap:anywhere}
.mod-video .kad__txt{opacity:0}
