/* Kampung — Luxury. Kampung pengantin isometrik di waktu senja; warna mengikuti tema adat. */
.tpl-kampung{
  --bg:var(--t-night);--bg2:color-mix(in srgb,var(--t-night) 84%,var(--t-paper));--ink:var(--t-paper);
  --muted:color-mix(in srgb,var(--t-paper) 58%,var(--t-night));--accent:var(--t-metal);--on-accent:var(--t-night);--hair:var(--t-metal);--backdrop:#000;
  --stars:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96' fill='none' stroke='%23FFFFFF' stroke-width='1' stroke-linecap='round'%3E%3Cg opacity='.13'%3E%3Cpath d='M24 17v-4M24 31v4M17 24h-4M31 24h4M19 19l-2.5-2.5M29 29l2.5 2.5M29 19l2.5-2.5M19 29l-2.5 2.5'/%3E%3Cpath d='M72 67v-3M72 77v3M67 72h-3M77 72h3'/%3E%3C/g%3E%3C/svg%3E");
}
.tpl-kampung .stage{background:var(--bg) var(--stars)}
.tpl-kampung .names{font-weight:400;font-size:56px;letter-spacing:-.015em;line-height:.98}
.tpl-kampung .names .amp{font-size:.42em;color:var(--accent);margin:.12em 0;}
.tpl-kampung .eyebrow{color:var(--accent)}
.tpl-kampung .sec-head h2{}
.tpl-kampung .orn .ln{stroke:color-mix(in srgb,var(--accent) 55%,transparent);stroke-width:1}
.tstar path{stroke:var(--accent);stroke-width:1.1;stroke-linecap:round;fill:none}
.tstar circle{fill:var(--accent)}

/* sampul: gapura terbelah */
.tpl-kampung .cover{background:transparent}
.tpl-kampung .gate{position:absolute;top:0;bottom:0;width:50.5%;background:var(--bg) var(--stars);z-index:0;transition:transform 1.5s cubic-bezier(.75,0,.2,1) .35s}
.tpl-kampung .gate-l{left:0;box-shadow:inset -1px 0 0 color-mix(in srgb,var(--accent) 60%,transparent),inset -7px 0 0 var(--bg),inset -8px 0 0 color-mix(in srgb,var(--accent) 25%,transparent)}
.tpl-kampung .gate-r{right:0;background-position:48px 0;box-shadow:inset 1px 0 0 color-mix(in srgb,var(--accent) 60%,transparent),inset 7px 0 0 var(--bg),inset 8px 0 0 color-mix(in srgb,var(--accent) 25%,transparent)}
.tpl-kampung .cover-layers{z-index:1;transition:opacity .45s}
.tpl-kampung .cover-inner{transition:opacity .45s,transform .45s}
.tpl-kampung .starfield{position:absolute;inset:0;width:100%;height:100%}
.tpl-kampung .starfield .tstar{animation:twinkle 4.2s ease-in-out infinite}
.tpl-kampung .starfield .tw1{animation-delay:-1.1s}.tpl-kampung .starfield .tw2{animation-delay:-2.3s}.tpl-kampung .starfield .tw3{animation-delay:-3.2s}
@keyframes twinkle{0%,100%{opacity:.15}50%{opacity:.95}}
.tpl-kampung .gunungan{position:absolute;left:50%;top:50%;height:min(92%,760px);transform:translate(-50%,-50%)}
.tpl-kampung .gunungan .g1{fill:color-mix(in srgb,var(--bg2) 70%,transparent);stroke:var(--accent);stroke-width:1.2}
.tpl-kampung .gunungan .g2{fill:none;stroke:color-mix(in srgb,var(--accent) 40%,transparent);stroke-width:1}
.tpl-kampung .cover-inner{padding-top:22dvh}
.tpl-kampung .cover-date{letter-spacing:.3em;font-size:12.5px;color:var(--muted)}
.tpl-kampung .guest strong{}
.tpl-kampung.is-open .cover-layers,.tpl-kampung.is-open .cover-inner{opacity:0}
.tpl-kampung.is-open .cover-inner{transform:scale(.96)}
.tpl-kampung.is-open .gate-l{transform:translateX(-101%)}
.tpl-kampung.is-open .gate-r{transform:translateX(101%)}
.avatar-pick{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:6px 0 4px}
.avatar-pick legend{width:100%;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.avatar-pick label{position:relative}
.avatar-pick input{position:absolute;opacity:0;inset:0}
.avatar-pick span{display:block;padding:8px 16px;border-radius:999px;border:1px solid color-mix(in srgb,var(--ink) 28%,transparent);font-size:13px}
.avatar-pick input:checked+span{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.avatar-pick input:focus-visible+span{outline:2px solid var(--accent);outline-offset:2px}

/* mode baca biasa */
/* foto pembuka bergaya sinema (hitam-putih + gradasi bertahap seperti Sinematik). Warna gradasi = versi gelap
   warna latar (--hs), lalu baru menyatu ke warna latar di paling bawah. Jadi tetap cocok walau palet diganti
   ke warna terang/sedang (mis. mauve): tidak lagi jadi lapisan berwarna yang tebal menutupi wajah. */
.tpl-kampung .hero{--hs:color-mix(in srgb,var(--bg) 58%,#000)} /* dipakai foto dan bayangan teks nama */
.tpl-kampung .hero-photo{background:var(--hs)}
.tpl-kampung .hero-photo img{filter:grayscale(1) contrast(1.04)}
.tpl-kampung .hero-photo::after{content:"";position:absolute;inset:0;background:linear-gradient(color-mix(in srgb,var(--hs) 35%,transparent),color-mix(in srgb,var(--hs) 55%,transparent) 40%,color-mix(in srgb,var(--hs) 86%,transparent) 68%,color-mix(in srgb,var(--hs) 65%,var(--bg)) 86%,var(--bg) 99%)}
.tpl-kampung .hero-text .names,.tpl-kampung .hero-text .hero-date,.tpl-kampung .hero-text .eyebrow{text-shadow:0 1px 16px color-mix(in srgb,var(--hs) 70%,transparent)}
.tpl-kampung .portrait{border-radius:50% 50% 0 0/36% 36% 0 0;outline:1px solid var(--accent);outline-offset:6px}
.tpl-kampung .person-nick{font-size:48px}
.tpl-kampung .people-amp{}
.tpl-kampung .event,.tpl-kampung .gift-card{background:color-mix(in srgb,var(--bg2) 82%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.tpl-kampung .event h3{color:var(--accent)}
.tpl-kampung .salam{}
.tpl-kampung .gallery-item{border-radius:4px}

/* ---- kampung ---- */
.village{position:fixed;top:0;bottom:0;left:50%;width:min(100%,480px);transform:translateX(-50%);z-index:20;background:var(--bg);overflow:hidden;touch-action:none}
.village[hidden]{display:none}
.village canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.hud{position:absolute;inset:0;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 14px calc(16px + env(safe-area-inset-bottom))}
.hud-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.hud-title{display:flex;flex-direction:column;padding:9px 16px 10px;border-radius:16px;background:color-mix(in srgb,var(--bg) 78%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}
.hud-title b{font-family:var(--f-display);font-weight:500;font-size:19px;line-height:1.15}
.hud-title span{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.hud-btn{pointer-events:auto;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--bg) 78%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);color:var(--accent)}
.hud-hint{align-self:center;margin-top:auto;margin-bottom:10px;padding:8px 16px;border-radius:999px;background:color-mix(in srgb,var(--bg) 80%,transparent);font-size:12.5px;text-align:center;transition:opacity .6s;max-width:300px;line-height:1.4}
.hud-hint.is-off{opacity:0}
.hud-progress{align-self:center;display:flex;gap:7px;align-items:center;padding:8px 14px;border-radius:999px;background:color-mix(in srgb,var(--bg) 80%,transparent);font-size:11.5px;letter-spacing:.06em;color:var(--muted)}
.hud-progress i{width:7px;height:7px;transform:rotate(45deg);border:1px solid var(--accent)}
.hud-progress i.on{background:var(--accent)}
.hud-progress span{margin-left:4px}
.has-game.mode-game .music-btn{bottom:auto;top:calc(70px + env(safe-area-inset-top));right:max(14px,calc(50% - 226px));width:46px;height:46px}

.spotlist{position:absolute;inset:0;z-index:5;background:color-mix(in srgb,var(--bg) 70%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:grid;place-items:end center;padding:16px}
.spotlist[hidden]{display:none}
.spotlist-card{width:100%;background:var(--bg2);border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);border-radius:24px;padding:24px 20px 16px;display:grid;gap:10px;text-align:center}
.spotlist-card h2{font-family:var(--f-display);font-weight:400;font-size:25px;margin-bottom:4px}
.spotlist-card li button{width:100%;display:flex;justify-content:space-between;align-items:center;gap:10px;padding:13px 16px;border-radius:14px;border:1px solid color-mix(in srgb,var(--ink) 14%,transparent);background:transparent;text-align:left;font-size:15px}
.spotlist-card ul{display:grid;gap:6px;margin-bottom:6px}
.spotlist-card li small{color:var(--muted);font-size:12px;margin-left:8px}
.spotlist-card li .done{color:var(--accent);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase}

body.mode-game{overflow:hidden}
/* isi undangan sebagai lembar bawah saat mode kampung */
.mode-game .inv .sec{position:fixed;left:50%;bottom:0;width:min(100%,480px);max-height:84dvh;overflow-y:auto;overscroll-behavior:contain;z-index:30;margin:0;padding:0 24px calc(26px + env(safe-area-inset-bottom));background:var(--bg) var(--stars);border-radius:26px 26px 0 0;border-top:1px solid color-mix(in srgb,var(--accent) 55%,transparent);box-shadow:0 -20px 60px rgba(0,0,0,.5);transform:translate(-50%,105%);transition:transform .5s cubic-bezier(.2,.8,.2,1);visibility:hidden}
.mode-game .inv .sec.is-sheet{transform:translate(-50%,0);visibility:visible}
.mode-game .inv .hero{display:none}
.mode-game .inv .closing{padding-bottom:calc(26px + env(safe-area-inset-bottom))}
.mode-game .inv .sec [data-rv]{opacity:1;transform:none}
.sheet-bar{position:sticky;top:0;z-index:2;display:flex;justify-content:space-between;align-items:center;margin:0 -24px 22px;padding:14px 14px 12px 24px;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:26px 26px 0 0;border-bottom:1px solid color-mix(in srgb,var(--accent) 22%,transparent)}
.sheet-bar span{font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--accent);font-weight:600}
.sheet-bar button{width:40px;height:40px;border-radius:50%;border:1px solid color-mix(in srgb,var(--ink) 22%,transparent);background:transparent;display:grid;place-items:center}
.sheet-next{margin-top:30px;width:100%}
body:not(.mode-game) .sheet-bar,body:not(.mode-game) .sheet-next{display:none}
.mode-game .inv .sec .sec-head{margin-bottom:24px}
.mode-game .inv .sec .orn{margin-bottom:20px}
.back-village{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(74px + env(safe-area-inset-bottom));z-index:44;background:var(--accent);color:var(--bg);border:0;border-radius:999px;padding:10px 18px;font-size:13px;font-weight:600;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.mode-game .back-village,body:not(.is-open) .back-village{display:none}
@media (prefers-reduced-motion:reduce){.tpl-kampung .starfield .tstar{animation:none;opacity:.6}.tpl-kampung .gate{transition-duration:.01s}}

.mode-game .inv .sec .sec-head .eyebrow{display:none}
.mode-game .inv .sec .sec-head h2{margin-top:0}

.tpl-kampung.names-caps .names{font-size:34px;letter-spacing:.2em}
.tpl-kampung .gunungan .g1{fill:color-mix(in srgb,var(--bg2) 60%,transparent);stroke:color-mix(in srgb,var(--accent) 70%,transparent);stroke-width:1}
.hud-title b{font-style:normal}
.names-italic .hud-title b,.names-italic .spotlist-card h2{font-style:italic}
.hud-progress i{border-radius:50%;transform:none}

/* ---- iPhone Safari ---- */
.village{bottom:auto;height:100vh;height:100dvh}
/* lembar isi ditambatkan dari atas layar supaya tidak tertutup toolbar bawah Safari */
.mode-game .inv .sec{bottom:auto;top:100vh;top:100dvh;max-height:84vh;max-height:84dvh;transform:translate(-50%,4%)}
.mode-game .inv .sec.is-sheet{transform:translate(-50%,-100%)}

/* sampul: lebih padat, bisa digulir di layar pendek */
.tpl-kampung .cover{display:block}
.tpl-kampung .cover-inner{min-height:100%;justify-content:center;gap:9px;padding:max(calc(env(safe-area-inset-top) + 22px),9dvh) 24px calc(22px + env(safe-area-inset-bottom))}
.tpl-kampung .cover-inner .ghost{display:none}
.tpl-kampung .cover .names{font-size:clamp(40px,12.5vw,54px)}
.tpl-kampung .cover .names .amp{margin:.04em 0}
.tpl-kampung .cover .guest{margin-top:6px}
.tpl-kampung .avatar-pick{margin:2px 0}
.tpl-kampung .cover .btn-link{padding:4px 10px}
.tpl-kampung .gate::after{opacity:.12!important}
.tpl-kampung .gate-l::before,.tpl-kampung .gate-r::before{opacity:.45!important}
.tpl-kampung .crest-cover{opacity:.16!important}

/* daftar tempat: bisa digulir, tombol musik disembunyikan selama daftar terbuka */
.spotlist{place-items:center;padding:calc(14px + env(safe-area-inset-top)) 14px calc(14px + env(safe-area-inset-bottom));overflow:hidden}
.spotlist-card{max-height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:20px 16px 14px;gap:8px}
.spotlist-card h2{font-size:23px}
.spotlist-card ul{gap:5px}
.spotlist-card li button{padding:10px 14px;min-height:48px}
.spotlist-card li button>span:first-child{display:flex;flex-direction:column;align-items:flex-start;gap:1px;min-width:0}
.spotlist-card li small{margin-left:0}
.list-open .music-btn{visibility:hidden}
.sheet-open .music-btn{visibility:hidden}
