/* =========================================================
   DESIGN TOKENS
   ========================================================= */
:root{
  --ivory:#FDFBF7;
  --gold:#D4AF37;
  --gold-soft:#E9D59C;
  --gold-deep:#9C7A26;
  --mahogany:#2C1B18;
  --mahogany-2:#3E2621;
  --glass:rgba(30,19,16,.66);
  --line:rgba(212,175,55,.38);
  --font-script:'Great Vibes',cursive;
  --font-serif:'Cormorant Garamond',Georgia,serif;
  --font-sans:'Montserrat',system-ui,sans-serif;
  --gold-grad:linear-gradient(135deg,#f6e3a1 0%,#d4af37 45%,#b08a2c 70%,#f1d98b 100%);
}
*{box-sizing:border-box}
html,body{height:100%;margin:0;overflow:hidden;background:var(--mahogany);color:var(--ivory);
  font-family:var(--font-sans);font-weight:300;-webkit-tap-highlight-color:transparent;overscroll-behavior:none}
::selection{background:var(--gold);color:var(--mahogany)}

#scene{position:fixed;inset:0;width:100vw;height:100vh;height:100dvh;display:block;touch-action:none;outline:none}
.vignette{position:fixed;inset:0;pointer-events:none;z-index:2;
  background:radial-gradient(ellipse at center,rgba(0,0,0,0) 55%,rgba(12,6,4,.55) 100%)}

/* Cinematic letterbox shown during fly-through */
.lb{position:fixed;left:0;right:0;height:0;background:#070403;z-index:30;pointer-events:none;transition:height .9s cubic-bezier(.65,0,.35,1)}
.lb-top{top:0}.lb-bottom{bottom:0}
body.flying .lb{height:7.5vh}

/* Fly-through caption */
#flyCaption{position:fixed;inset:0;z-index:31;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 5vw;pointer-events:none;opacity:0;visibility:hidden}
#flyCaption .fc-eyebrow{font-size:.72rem;letter-spacing:.5em;text-transform:uppercase;color:var(--gold-soft)}
#flyCaption .fc-title{font-family:var(--font-serif);font-size:clamp(2rem,5.5vw,3.8rem);font-weight:500;line-height:1.1;
  text-shadow:0 4px 30px rgba(0,0,0,.6)}
#flyCaption .fc-line{width:90px;height:1px;margin:14px auto 0;background:var(--gold-grad)}

/* =========================================================
   TYPOGRAPHY / ORNAMENTS
   ========================================================= */
.script{font-family:var(--font-script);font-weight:400}
.serif{font-family:var(--font-serif)}
.eyebrow{font-size:.68rem;letter-spacing:.38em;text-transform:uppercase;color:var(--gold-soft);font-weight:500}
.gold-text{background:var(--gold-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ornament{display:flex;align-items:center;justify-content:center;gap:12px;color:var(--gold);margin:14px auto}
.ornament span{height:1px;width:70px;background:linear-gradient(90deg,transparent,var(--gold),transparent)}
.ornament i{font-size:.6rem}
.ornament.sm{margin:8px 0 14px;justify-content:flex-start}
.ornament.sm span{width:44px}

/* =========================================================
   LOADER
   ========================================================= */
#loader{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:radial-gradient(circle at 50% 40%,#3e2621 0%,#1a0f0c 70%)}
.loader-ring{position:relative;width:118px;height:118px;display:grid;place-items:center}
.loader-ring::before{content:"";position:absolute;inset:0;border-radius:50%;border:1px solid rgba(212,175,55,.25);border-top-color:var(--gold);animation:spin 1.4s linear infinite}
.loader-ring::after{content:"";position:absolute;inset:9px;border-radius:50%;border:1px dashed rgba(212,175,55,.25);animation:spin 6s linear infinite reverse}
.loader-ring .mono{font-family:var(--font-script);font-size:2.6rem;color:var(--gold)}
#loaderText{margin-top:22px;font-size:.7rem;letter-spacing:.35em;text-transform:uppercase;color:var(--gold-soft)}
.loader-bar{width:180px;height:1px;background:rgba(212,175,55,.2);margin-top:12px;overflow:hidden}
.loader-bar i{display:block;height:100%;width:0;background:var(--gold-grad);transition:width .4s ease}
@keyframes spin{to{transform:rotate(360deg)}}

/* =========================================================
   COVER (SECTION 1)
   ========================================================= */
#cover{position:fixed;inset:0;z-index:40;display:flex;align-items:flex-end;justify-content:center;
  padding:24px 18px calc(6vh + env(safe-area-inset-bottom));
  background:linear-gradient(to top,rgba(18,10,8,.94) 0%,rgba(18,10,8,.55) 38%,rgba(18,10,8,0) 66%)}
.cover-inner{max-width:620px;text-align:center}
#cover .names{font-size:clamp(3.2rem,11vw,6.4rem);line-height:1;margin:6px 0 0;
  background:var(--gold-grad);-webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 4px 24px rgba(0,0,0,.55))}
#cover .names .amp{font-size:.7em;padding:0 .08em}
.cover-date{font-size:1.15rem;font-style:italic;color:#f3e7cf;margin:0 0 18px}
.guest-card{display:inline-block;min-width:min(340px,90vw);padding:14px 22px;margin-bottom:22px;border-radius:16px;
  border:1px solid var(--line);background:rgba(44,27,24,.55);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.guest-card small{display:block;font-size:.7rem;letter-spacing:.12em;color:#e9dcc2}
.guest-name{font-size:1.55rem;font-weight:600;color:var(--ivory);margin:2px 0}

/* =========================================================
   BUTTONS & FORMS
   ========================================================= */
.btn-gold{position:relative;overflow:hidden;background:var(--gold-grad);background-size:200% 200%;color:var(--mahogany)!important;border:0;
  border-radius:999px;font-weight:600;letter-spacing:.06em;box-shadow:0 8px 26px rgba(212,175,55,.28);transition:transform .25s,box-shadow .25s,background-position .6s}
.btn-gold:hover,.btn-gold:focus-visible{transform:translateY(-2px);box-shadow:0 12px 32px rgba(212,175,55,.42);background-position:100% 0}
.btn-gold::after{content:"";position:absolute;top:0;left:-60%;width:40%;height:100%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-20deg);animation:shine 3.8s ease-in-out infinite}
@keyframes shine{0%,60%{left:-60%}100%{left:130%}}
.btn-outline-gold{color:var(--gold-soft);border:1px solid var(--line);border-radius:999px;background:rgba(253,251,247,.03);letter-spacing:.04em;font-weight:500}
.btn-outline-gold:hover,.btn-outline-gold:focus-visible{color:var(--mahogany);background:var(--gold);border-color:var(--gold)}
.btn-check:checked+.btn-outline-gold{color:var(--mahogany);background:var(--gold-grad);border-color:var(--gold)}
.form-control.lux,.form-select.lux{background-color:rgba(253,251,247,.06);border:1px solid rgba(212,175,55,.3);color:var(--ivory);border-radius:12px;font-size:.88rem;padding:.6rem .85rem}
.form-control.lux::placeholder{color:rgba(253,251,247,.45)}
.form-control.lux:focus,.form-select.lux:focus{background-color:rgba(253,251,247,.1);border-color:var(--gold);box-shadow:0 0 0 .2rem rgba(212,175,55,.18);color:var(--ivory)}
.form-select.lux{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23D4AF37' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}
.form-select.lux option{background:var(--mahogany);color:var(--ivory)}

/* =========================================================
   HUD / NAV / MUSIC
   ========================================================= */
#hud{position:fixed;top:calc(14px + env(safe-area-inset-top));left:16px;z-index:35;display:flex;align-items:center;gap:12px;opacity:0;visibility:hidden}
.hud-mono{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line);
  background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-family:var(--font-script);font-size:1.25rem;color:var(--gold)}
.hud-index{font-size:.62rem;letter-spacing:.32em;color:var(--gold-soft)}
.hud-name{font-family:var(--font-serif);font-size:1.12rem;font-weight:500;line-height:1.1;text-shadow:0 2px 12px rgba(0,0,0,.6)}

#musicBtn{position:fixed;top:calc(14px + env(safe-area-inset-top));right:16px;z-index:45;width:50px;height:50px;border-radius:50%;
  border:1px solid var(--line);background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--gold);
  display:grid;place-items:center;font-size:1.25rem;opacity:0;visibility:hidden;transition:transform .25s}
#musicBtn:hover{transform:scale(1.07)}
#musicBtn::before{content:"";position:absolute;inset:-5px;border-radius:50%;border:1px dashed rgba(212,175,55,.45);opacity:0;transition:opacity .4s}
#musicBtn.is-playing::before{opacity:1;animation:spin 7s linear infinite}
#musicBtn .eq{position:absolute;bottom:-14px;left:50%;transform:translateX(-50%);display:flex;gap:2px;height:8px;align-items:flex-end}
#musicBtn .eq i{width:2px;background:var(--gold);height:2px;border-radius:1px}
#musicBtn.is-playing .eq i{animation:eq 1s ease-in-out infinite}
#musicBtn.is-playing .eq i:nth-child(2){animation-delay:.2s}
#musicBtn.is-playing .eq i:nth-child(3){animation-delay:.4s}
#musicBtn.is-playing .eq i:nth-child(4){animation-delay:.1s}
@keyframes eq{0%,100%{height:2px}50%{height:8px}}

#venueNav{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:35;
  display:flex;align-items:center;gap:10px;padding:7px;border-radius:999px;border:1px solid var(--line);
  background:var(--glass);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);opacity:0;visibility:hidden;white-space:nowrap}
#venueNav .nav-round{width:40px;height:40px;border-radius:50%;padding:0;display:grid;place-items:center}
#venueNav .nav-next{height:40px;padding:0 18px;font-size:.78rem}
#venueNav button:disabled{opacity:.35;pointer-events:none}
.nav-dots{display:flex;gap:8px;padding:0 4px}
.nav-dots button{width:9px;height:9px;padding:0;border-radius:50%;border:1px solid var(--gold);background:transparent;transition:all .35s}
.nav-dots button.active{width:26px;border-radius:6px;background:var(--gold)}
.scroll-hint{position:fixed;left:50%;bottom:calc(76px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:34;font-size:.62rem;
  letter-spacing:.3em;text-transform:uppercase;color:rgba(233,213,156,.8);pointer-events:none;opacity:0;visibility:hidden}

/* =========================================================
   VENUE LAYERS / PANELS
   ========================================================= */
.venue-layer{position:fixed;inset:0;z-index:20;display:flex;align-items:center;padding:92px 4.5vw 96px;pointer-events:none;visibility:hidden;opacity:0}
.venue-layer.right{justify-content:flex-end}
.venue-layer.left{justify-content:flex-start}
.panel{pointer-events:auto;touch-action:pan-y;position:relative;width:min(470px,100%);max-height:100%;overflow-y:auto;overscroll-behavior:contain;
  padding:30px 28px;border-radius:24px;border:1px solid var(--line);
  background:linear-gradient(160deg,rgba(52,32,27,.78),rgba(26,16,13,.74));
  backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);
  box-shadow:0 30px 80px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.06);
  scrollbar-width:thin;scrollbar-color:rgba(212,175,55,.5) transparent}
.panel::-webkit-scrollbar{width:5px}
.panel::-webkit-scrollbar-thumb{background:rgba(212,175,55,.45);border-radius:4px}
.panel-corner{position:sticky;top:-30px;height:0;pointer-events:none}
.panel-corner::before,.panel-corner::after{content:"";position:absolute;top:-18px;width:26px;height:26px;border:1px solid var(--gold);opacity:.7}
.panel-corner::before{left:-16px;border-right:0;border-bottom:0;border-top-left-radius:8px}
.panel-corner::after{right:-16px;border-left:0;border-bottom:0;border-top-right-radius:8px}
.panel-title{font-size:clamp(2rem,4vw,2.6rem);font-weight:500;line-height:1.05;margin:6px 0 0}
.panel p,.panel .lead-sm{font-size:.86rem;line-height:1.75;color:#eadfcb}
.verse{margin:14px 0 18px;padding:14px 16px;border-left:2px solid var(--gold);border-radius:0 12px 12px 0;background:rgba(212,175,55,.07);
  font-family:var(--font-serif);font-style:italic;font-size:1.02rem;line-height:1.55;color:#f4ead6}
.verse cite{display:block;margin-top:6px;font-style:normal;font-family:var(--font-sans);font-size:.7rem;letter-spacing:.18em;color:var(--gold-soft)}
.small-label{font-size:.66rem;letter-spacing:.3em;text-transform:uppercase;color:var(--gold-soft);font-weight:500}
.badge-gold{font-size:.68rem;padding:4px 10px;border-radius:999px;border:1px solid var(--line);color:var(--gold-soft)}
.section-sub{font-family:var(--font-serif);font-size:1.45rem;font-weight:500;margin:22px 0 4px}

/* Guestbook */
.gb-list{max-height:210px;overflow-y:auto;padding-right:4px;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(212,175,55,.5) transparent}
.gb-item{padding:10px 12px;margin-bottom:8px;border-radius:12px;background:rgba(253,251,247,.05);border-left:2px solid var(--gold)}
.gb-item strong{font-family:var(--font-serif);font-size:1.02rem;font-weight:600;color:var(--gold-soft)}
.gb-item small{font-size:.66rem;color:rgba(253,251,247,.5)}
.gb-item p{margin:2px 0 0;font-size:.8rem!important;line-height:1.55!important}

/* Couple */
.couple{display:grid;grid-template-columns:1fr auto 1fr;align-items:start;gap:6px;text-align:center;margin-top:10px}
.couple .amp{font-family:var(--font-script);font-size:2.6rem;color:var(--gold);align-self:center;margin-top:-40px}
.portrait{width:96px;height:96px;margin:0 auto 10px;border-radius:50%;padding:3px;background:var(--gold-grad);box-shadow:0 10px 30px rgba(0,0,0,.4)}
.portrait img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block;background:var(--mahogany)}
.couple .nick{font-family:var(--font-script);font-size:2.1rem;line-height:1;color:var(--gold-soft)}
.couple .full{font-family:var(--font-serif);font-size:1rem;font-weight:600;margin:4px 0 2px}
.couple .parents{font-size:.72rem!important;line-height:1.5!important;color:#d9ccb3!important;margin:0}
.couple a{color:var(--gold-soft);font-size:.72rem;text-decoration:none}

.event-card{height:100%;padding:14px 10px;border-radius:16px;text-align:center;border:1px solid var(--line);background:rgba(253,251,247,.04)}
.event-card i{font-size:1.3rem;color:var(--gold)}
.event-card h6{font-family:var(--font-serif);font-size:1.2rem;font-weight:600;margin:4px 0 2px}
.event-card p{font-size:.76rem!important;line-height:1.5!important;margin:0}
.venue-addr{display:flex;gap:10px;align-items:flex-start;margin:12px 0;font-size:.84rem}
.venue-addr i{color:var(--gold);font-size:1.1rem}
.countdown{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:12px 0}
.cd-box{padding:10px 4px;border-radius:14px;text-align:center;background:linear-gradient(160deg,rgba(212,175,55,.18),rgba(212,175,55,.04));border:1px solid var(--line)}
.cd-box span{display:block;font-family:var(--font-serif);font-size:1.75rem;font-weight:600;line-height:1;color:var(--ivory)}
.cd-box small{font-size:.6rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-soft)}

/* Gallery */
.gallery-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}
.g-item{position:relative;aspect-ratio:3/4;border-radius:12px;overflow:hidden;padding:0;border:1px solid var(--line);background:#1a0f0c;cursor:zoom-in}
.g-item img{width:100%;height:100%;object-fit:cover;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.g-item:hover img{transform:scale(1.08)}
.g-item::after{content:"";position:absolute;inset:4px;border:1px solid rgba(233,213,156,.45);border-radius:9px;pointer-events:none}
.g-item:first-child{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}
.story{position:relative;margin-top:12px;padding-left:18px;border-left:1px solid var(--line)}
.story-item{position:relative;margin-bottom:14px}
.story-item::before{content:"";position:absolute;left:-23px;top:6px;width:9px;height:9px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 4px rgba(212,175,55,.18)}
.story-year{font-size:.66rem;letter-spacing:.3em;color:var(--gold-soft)}
.story-item strong{display:block;font-family:var(--font-serif);font-size:1.1rem;font-weight:600}
.story-item p{margin:0;font-size:.8rem!important;line-height:1.6!important}

/* Gift */
.bank-card{position:relative;overflow:hidden;padding:18px 18px 16px;border-radius:18px;margin-bottom:12px;color:var(--ivory);
  background:linear-gradient(135deg,#4a2c25 0%,#2C1B18 55%,#1b100d 100%);border:1px solid var(--line);box-shadow:0 14px 34px rgba(0,0,0,.35)}
.bank-card::before{content:"";position:absolute;right:-50px;top:-50px;width:160px;height:160px;border-radius:50%;
  background:radial-gradient(circle,rgba(212,175,55,.35),transparent 70%)}
.bank-logo{font-family:var(--font-serif);font-weight:600;font-size:1.3rem;letter-spacing:.12em;color:var(--gold-soft)}
.bank-card .chip{font-size:1.6rem;color:var(--gold)}
.bank-no{font-family:ui-monospace,Consolas,monospace;font-size:1.25rem;letter-spacing:.14em;margin:14px 0 10px}
.bank-card small{font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-soft)}
.bank-name{font-family:var(--font-serif);font-size:1.05rem;font-weight:600}
.gift-addr{padding:14px;border-radius:16px;border:1px dashed var(--line);font-size:.82rem;margin-bottom:6px}
.rsvp-thanks{padding:18px;border-radius:16px;text-align:center;border:1px solid var(--line);background:rgba(212,175,55,.08)}
.rsvp-thanks i{font-size:2rem;color:var(--gold)}
.closing{margin-top:26px;padding-top:20px;border-top:1px solid var(--line)}
.closing-title{font-size:3.4rem;line-height:1;background:var(--gold-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.names-sm{font-size:2.1rem;color:var(--gold-soft);line-height:1.1}

/* Toast & modal */
.toast-lux{background:rgba(30,19,16,.95);color:var(--ivory);border:1px solid var(--line);border-radius:14px;backdrop-filter:blur(10px)}
.modal-content.lux{background:transparent;border:0}
.modal-content.lux img{width:100%;border-radius:16px;border:1px solid var(--line);box-shadow:0 30px 80px rgba(0,0,0,.6)}
.modal-backdrop.show{opacity:.85}

/* =========================================================
   RESPONSIVE (mobile-first adjustments)
   ========================================================= */
@media (max-width:767.98px){
  .venue-layer{align-items:flex-end;justify-content:center!important;padding:72px 10px calc(72px + env(safe-area-inset-bottom))}
  .panel{max-height:56vh;max-height:56dvh;padding:22px 18px;border-radius:20px}
  .panel-corner{top:-22px}
  .panel-corner::before{left:-8px}.panel-corner::after{right:-8px}
  #hud{left:12px}
  .hud-mono{width:40px;height:40px;font-size:1.05rem}
  .hud-name{font-size:.98rem}
  #musicBtn{right:12px;width:44px;height:44px}
  #venueNav{bottom:calc(12px + env(safe-area-inset-bottom));gap:6px}
  #venueNav .nav-next{padding:0 14px;font-size:.72rem}
  .scroll-hint{display:none}
  .couple .amp{font-size:2rem}
  .portrait{width:80px;height:80px}
  .couple .nick{font-size:1.8rem}
  .cd-box span{font-size:1.45rem}
  #cover{padding-bottom:calc(4vh + env(safe-area-inset-bottom))}
}
@media (prefers-reduced-motion:reduce){
  .btn-gold::after,#musicBtn.is-playing::before{animation:none}
}

/* =========================================================
   TAMBAHAN INTEGRASI — data dinamis ($data) pada platform
   ========================================================= */
.verse .arabic{display:block;margin-bottom:8px;text-align:center;font-family:'Amiri',serif;font-style:normal;font-size:1.35rem;line-height:1.9;color:var(--gold-soft)}
.event-card .ev-venue{margin-top:6px;font-size:.74rem!important;line-height:1.45!important;opacity:.85}
.event-card .ev-maps{display:inline-block;margin-top:8px;font-size:.72rem;color:var(--gold-soft);text-decoration:none;letter-spacing:.06em}
.event-card .ev-maps:hover{color:var(--gold)}
.person-ig{display:inline-block;margin-top:2px}
.gb-item small{white-space:nowrap}
.guest-card .guest-name{word-break:break-word}
