:root{
  --cream:#FBF3E3;
  --forest:#2F4A32;
  --sage:#7C9473;
  --meadow:#A9C99A;
  --carrot:#5FA052;
  --blush:#F6DCC9;
  --ink:#253621;
  --surface:#FFFFFF;
  --border:rgba(124,148,115,.32);
  --shadow:rgba(47,74,50,0.16);
  --danger:#B4562F;
  --radius-lg:26px;
  --radius-sm:14px;
  color-scheme: light;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --cream:#1B2A1C; --forest:#EFE8D8; --sage:#9FB893; --meadow:#2C3F2A;
    --carrot:#7FC966; --blush:#33452E; --ink:#F2ECDD; --surface:#233420;
    --border:rgba(159,184,147,.3); --shadow:rgba(0,0,0,0.45); --danger:#E58A63;
    color-scheme: dark;
  }
}
:root[data-theme="dark"]{
  --cream:#1B2A1C; --forest:#EFE8D8; --sage:#9FB893; --meadow:#2C3F2A;
  --carrot:#7FC966; --blush:#33452E; --ink:#F2ECDD; --surface:#233420;
  --border:rgba(159,184,147,.3); --shadow:rgba(0,0,0,0.45); --danger:#E58A63;
  color-scheme: dark;
}

*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0;
  background:var(--cream);
  color:var(--ink);
  font-family:"Quicksand","Trebuchet MS",sans-serif;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
h1,h2,h3{
  font-family:"Fraunces",Georgia,"Times New Roman",serif;
  font-weight:600;
  margin:0;
  text-wrap:balance;
}
p{margin:0;}
a{color:var(--forest);}
button{font-family:inherit;cursor:pointer;}
input,select,textarea{font-family:inherit;}
.icon{width:1em;height:1em;display:inline-block;vertical-align:-.15em;}
[hidden]{display:none!important;}

/* ---------- Shared page shell ---------- */
.page{position:relative;min-height:100%;padding-inline:20px;padding-block:32px 56px;}
.meadow-bg{
  position:fixed;inset:0;z-index:-1;
  background:
    radial-gradient(480px 340px at 14% -8%, var(--blush) 0%, transparent 55%),
    radial-gradient(700px 480px at 100% 10%, var(--meadow) 0%, transparent 55%),
    radial-gradient(640px 440px at 4% 102%, var(--meadow) 0%, transparent 60%),
    var(--cream);
  opacity:.95;
}
.float-deco{position:absolute;color:var(--sage);opacity:.35;width:46px;height:46px;animation:bob 7s ease-in-out infinite;pointer-events:none;}
@media (prefers-reduced-motion: reduce){ .float-deco{animation:none;} }
@keyframes bob{0%,100%{transform:translateY(0) rotate(0deg);}50%{transform:translateY(-14px) rotate(6deg);}}
@keyframes bobBalloon{0%,100%{transform:translateY(0) rotate(-3deg);}50%{transform:translateY(-16px) rotate(3deg);}}
.balloon-deco{opacity:.85;animation-name:bobBalloon;filter:drop-shadow(0 8px 12px rgba(0,0,0,.12));}
.plant-deco{opacity:.6;animation-duration:9s;}
.bunny-deco{opacity:.55;}

/* ---------- Cover ---------- */
.cover{position:relative;display:flex;justify-content:center;align-items:center;min-height:calc(100dvh - 88px);transition:opacity .5s ease, transform .5s ease;isolation:isolate;}
.cover::before{
  content:"";position:absolute;inset:-10% -6%;z-index:-1;pointer-events:none;
  background:
    radial-gradient(420px 320px at 18% 12%, rgba(95,160,82,.38) 0%, transparent 60%),
    radial-gradient(460px 360px at 88% 82%, rgba(169,201,154,.5) 0%, transparent 55%),
    radial-gradient(360px 300px at 92% 8%, rgba(246,220,201,.7) 0%, transparent 55%);
}
.cover.closing{opacity:0;transform:scale(.96);pointer-events:none;}
#cover[hidden]{display:none;}
@media (prefers-reduced-motion: reduce){ .cover{transition:none;} }
.confetti-deco{opacity:.9;}
.cover-card{
  position:relative;width:100%;max-width:420px;background:var(--surface);
  border-radius:var(--radius-lg);padding:44px 28px 36px;text-align:center;
  box-shadow:0 24px 60px -20px var(--shadow);border:1px solid var(--border);
}
.cover-ornament{width:88px;height:104px;color:var(--forest);margin:0 auto 18px;}
.cover-bunting{position:absolute;top:-13px;left:50%;transform:translateX(-50%);width:200px;height:auto;max-width:80%;}
.eyebrow{font-size:.8rem;letter-spacing:.14em;text-transform:uppercase;color:var(--sage);font-weight:700;}
.cover-name{font-size:clamp(1.9rem,7vw,2.5rem);margin-top:10px;color:var(--forest);}
.cover-name span{display:block;font-style:italic;font-weight:500;}
.cover-age{
  display:inline-block;margin-top:12px;font-weight:700;color:#fff;font-size:.95rem;
  background:linear-gradient(120deg, var(--carrot), #8FC96B);
  padding:6px 16px;border-radius:999px;box-shadow:0 8px 18px -8px var(--shadow);
}
.birthday-highlight{
  display:inline-flex;align-items:center;gap:8px;margin-top:14px;font-weight:800;color:#fff;
  font-family:"Quicksand",sans-serif;font-size:clamp(.95rem,4vw,1.15rem);letter-spacing:.01em;
  background:linear-gradient(120deg, var(--carrot), #8FC96B 55%, var(--carrot));
  padding:10px 22px;border-radius:999px;box-shadow:0 12px 24px -10px var(--shadow);
  transform:rotate(-2deg);
}
.birthday-highlight .icon{width:1.2em;height:1.5em;color:#fff;flex:none;}
.cover-age-sub{margin-top:8px;font-size:.78rem;color:var(--sage);font-weight:600;letter-spacing:.02em;}
.cover-date{margin-top:22px;padding:14px 10px;border-radius:var(--radius-sm);background:linear-gradient(135deg, var(--blush), rgba(95,160,82,.3));display:flex;flex-direction:column;gap:2px;}
.cover-date-day{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--forest);opacity:.75;}
.cover-date-full{font-family:"Fraunces",serif;font-size:1.2rem;font-weight:600;color:var(--forest);}
.cover-to{margin-top:22px;font-size:.92rem;line-height:1.5;color:var(--ink);}
.cover-to strong{display:block;margin-top:4px;font-family:"Fraunces",serif;font-size:1.15rem;font-weight:600;color:var(--forest);word-break:break-word;}
.btn-open{
  margin-top:26px;display:inline-flex;align-items:center;gap:10px;padding:14px 30px;border:none;
  border-radius:999px;background:var(--forest);color:var(--cream);font-weight:700;font-size:1rem;
  cursor:pointer;box-shadow:0 14px 30px -12px var(--shadow);transition:transform .2s ease;
}
.btn-open:hover{transform:translateY(-2px);}
.btn-open:focus-visible{outline:3px solid var(--carrot);outline-offset:3px;}
.btn-open .icon{width:1.2em;height:1.2em;color:var(--carrot);}

/* ---------- Invitation body ---------- */
.invitation{max-width:520px;margin:0 auto;display:flex;flex-direction:column;gap:40px;opacity:0;transform:translateY(14px);transition:opacity .6s ease, transform .6s ease;}
.invitation.visible{opacity:1;transform:translateY(0);}
@media (prefers-reduced-motion: reduce){ .invitation{transition:none;} }
.hero{position:relative;text-align:center;padding-top:12px;isolation:isolate;}
.hero-guest{margin-top:14px;font-family:"Fraunces",serif;font-style:italic;font-size:1.3rem;color:var(--forest);}
.hero-copy{margin-top:10px;color:var(--ink);opacity:.85;max-width:38ch;margin-inline:auto;line-height:1.6;}
.hero-title{margin-top:18px;display:flex;flex-direction:column;gap:4px;}
.hero-title-lead{font-size:clamp(.85rem,3.4vw,1rem);font-weight:700;color:var(--sage);text-transform:uppercase;letter-spacing:.08em;}
.hero-title-name{font-family:"Fraunces",serif;font-weight:600;font-size:clamp(1.8rem,6vw,2.3rem);color:var(--forest);}
.hero-deco{z-index:-1;}
section > h3{font-size:1.3rem;color:var(--forest);text-align:center;margin-bottom:18px;}

.countdown{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;}
.countdown-unit{background:var(--surface);border-radius:var(--radius-sm);padding:14px 4px;text-align:center;box-shadow:0 10px 24px -16px var(--shadow);}
.countdown-unit span{display:block;font-family:"Fraunces",serif;font-variant-numeric:tabular-nums;font-size:clamp(1.4rem,5vw,1.9rem);font-weight:600;color:var(--forest);}
.countdown-unit label{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--sage);font-weight:700;}

.details{display:flex;flex-direction:column;gap:12px;}
.detail-card{display:flex;gap:14px;align-items:flex-start;background:var(--surface);border-radius:var(--radius-sm);padding:16px 18px;box-shadow:0 10px 24px -16px var(--shadow);}
.detail-icon{flex:none;width:40px;height:40px;border-radius:50%;background:var(--blush);color:var(--forest);display:flex;align-items:center;justify-content:center;}
.detail-icon .icon{width:20px;height:20px;}
.detail-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--sage);font-weight:700;}
.detail-value{margin-top:2px;font-weight:600;color:var(--ink);}
.detail-value + a{display:inline-block;margin-top:4px;font-size:.85rem;font-weight:600;text-decoration:none;}
.detail-value + a:hover{text-decoration:underline;}

.gallery-note{text-align:center;color:var(--ink);opacity:.75;font-size:.9rem;margin-bottom:18px;}
.gallery-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.gallery-frame{aspect-ratio:1;border-radius:var(--radius-sm);background:var(--blush);border:2px dashed rgba(47,74,50,.35);display:flex;align-items:center;justify-content:center;color:var(--forest);opacity:.55;}
.gallery-frame .icon{width:46%;height:46%;}
.gallery-photo{aspect-ratio:1;border-radius:var(--radius-sm);overflow:hidden;box-shadow:0 10px 24px -16px var(--shadow);}
.gallery-photo img{width:100%;height:100%;object-fit:cover;display:block;}

.rsvp{background:var(--surface);border-radius:var(--radius-lg);padding:26px 22px;box-shadow:0 14px 30px -18px var(--shadow);}
.rsvp-copy{text-align:center;color:var(--ink);opacity:.85;font-size:.92rem;margin-bottom:20px;line-height:1.55;}
.rsvp-status-banner{text-align:center;padding:16px;border-radius:var(--radius-sm);background:var(--blush);margin-bottom:18px;}
.rsvp-status-banner strong{color:var(--forest);}
#rsvpForm{display:flex;flex-direction:column;gap:16px;}
#rsvpForm label{display:flex;flex-direction:column;gap:6px;font-size:.85rem;font-weight:700;color:var(--forest);}
#rsvpForm input[type="text"],#rsvpForm input[type="number"],#rsvpForm textarea{
  font-family:inherit;font-size:1rem;font-weight:500;padding:11px 14px;border-radius:var(--radius-sm);
  border:1.5px solid var(--border);background:var(--cream);color:var(--ink);resize:vertical;
}
#rsvpForm input:focus-visible,#rsvpForm textarea:focus-visible{outline:2px solid var(--carrot);outline-offset:1px;}
fieldset{border:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px;}
legend{font-size:.85rem;font-weight:700;color:var(--forest);padding:0;margin-bottom:2px;}
.status-options{display:flex;gap:8px;flex-wrap:wrap;}
.status-pill{position:relative;}
.status-pill input{position:absolute;opacity:0;inset:0;cursor:pointer;}
.status-pill span{display:inline-block;padding:9px 16px;border-radius:999px;background:var(--cream);border:1.5px solid var(--border);font-weight:600;font-size:.88rem;color:var(--ink);transition:background .15s ease,color .15s ease;}
.status-pill input:checked + span{background:var(--forest);border-color:var(--forest);color:var(--cream);}
.status-pill input:focus-visible + span{outline:2px solid var(--carrot);outline-offset:2px;}
.btn-rsvp{margin-top:4px;padding:14px;border:none;border-radius:999px;background:var(--carrot);color:var(--cream);font-weight:700;font-size:1rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;box-shadow:0 14px 26px -14px var(--shadow);transition:transform .2s ease;}
.btn-rsvp:hover{transform:translateY(-2px);}
.btn-rsvp:focus-visible{outline:3px solid var(--forest);outline-offset:3px;}

.closing{text-align:center;padding:8px 6px 0;color:var(--ink);}
.closing p{line-height:1.6;}
.closing .thanks{margin-top:14px;font-weight:700;color:var(--forest);}
.closing .from{margin-top:4px;font-family:"Fraunces",serif;font-style:italic;color:var(--sage);}

@media (min-width:640px){
  .page{padding-block:56px 72px;}
}

/* ---------- Pop-up konfirmasi RSVP berhasil ---------- */
.modal-overlay{
  position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;
  padding:20px;background:rgba(37,54,33,.55);opacity:0;pointer-events:none;
  transition:opacity .25s ease;
}
.modal-overlay.visible{opacity:1;pointer-events:auto;}
.modal-box{
  width:100%;max-width:360px;background:var(--surface);border-radius:var(--radius-lg);
  padding:34px 26px 28px;text-align:center;box-shadow:0 30px 70px -20px var(--shadow);
  transform:scale(.9) translateY(6px);transition:transform .25s ease;
}
.modal-overlay.visible .modal-box{transform:scale(1) translateY(0);}
@media (prefers-reduced-motion: reduce){ .modal-overlay,.modal-box{transition:none;} }
.modal-icon{width:56px;height:56px;color:var(--forest);margin:0 auto 12px;}
.modal-box h3{color:var(--forest);font-size:1.15rem;}
.modal-box p{margin-top:8px;color:var(--ink);opacity:.85;font-size:.92rem;line-height:1.5;}
.modal-close{
  margin-top:22px;padding:11px 30px;border:none;border-radius:999px;background:var(--forest);
  color:var(--cream);font-weight:700;font-size:.92rem;cursor:pointer;box-shadow:0 14px 26px -14px var(--shadow);
  transition:transform .2s ease;
}
.modal-close:hover{transform:translateY(-2px);}
.modal-close:focus-visible{outline:3px solid var(--carrot);outline-offset:3px;}

/* ---------- Admin ---------- */
.admin-wrap{max-width:960px;margin:0 auto;padding:28px 18px 64px;}
.admin-topbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:22px;flex-wrap:wrap;}
.admin-topbar .brand{display:flex;align-items:center;gap:12px;}
.admin-topbar .brand .mark{width:42px;height:42px;border-radius:50%;background:var(--blush);color:var(--forest);display:flex;align-items:center;justify-content:center;flex:none;}
.admin-topbar h1{font-size:1.3rem;color:var(--forest);}
.admin-nav{display:flex;gap:6px;flex-wrap:wrap;}
.admin-nav a{
  padding:8px 14px;border-radius:999px;font-size:.85rem;font-weight:700;text-decoration:none;
  color:var(--forest);background:var(--surface);border:1.5px solid var(--border);
}
.admin-nav a.active,.admin-nav a:hover{background:var(--forest);color:var(--cream);border-color:var(--forest);}
.admin-card{background:var(--surface);border-radius:20px;border:1px solid var(--border);box-shadow:0 10px 26px -18px var(--shadow);padding:22px;margin-bottom:20px;}
.admin-card h2{font-size:1.1rem;color:var(--forest);margin-bottom:4px;}
.admin-card .hint{font-size:.8rem;color:var(--sage);margin-bottom:16px;}
.admin-form-row{display:flex;gap:10px;flex-wrap:wrap;}
.admin-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;flex:1 1 200px;}
.admin-field label{font-size:.85rem;font-weight:700;color:var(--forest);}
.admin-field input[type="text"],.admin-field input[type="password"],.admin-field input[type="email"],
.admin-field input[type="date"],.admin-field input[type="time"],.admin-field input[type="number"],
.admin-field textarea,.admin-field select{
  padding:10px 14px;border-radius:12px;border:1.5px solid var(--border);background:var(--cream);
  font-weight:500;font-size:.92rem;color:var(--ink);
}
.admin-field textarea{resize:vertical;}
.btn-primary{padding:11px 20px;border:none;border-radius:12px;background:var(--forest);color:var(--cream);font-weight:700;font-size:.92rem;}
.btn-primary:hover{filter:brightness(1.08);}
.btn-secondary{padding:11px 20px;border:1.5px solid var(--border);border-radius:12px;background:var(--surface);color:var(--forest);font-weight:700;font-size:.92rem;}
.btn-danger{padding:8px 14px;border:1.5px solid var(--danger);border-radius:10px;background:transparent;color:var(--danger);font-weight:700;font-size:.82rem;}
.btn-danger:hover{background:var(--danger);color:#fff;}
.btn-danger-lg{padding:11px 20px;border:none;border-radius:12px;background:var(--danger);color:#fff;font-weight:700;font-size:.92rem;cursor:pointer;}
.btn-danger-lg:hover{filter:brightness(1.08);}
.btn-danger-lg:disabled{opacity:.45;cursor:not-allowed;filter:none;}
.admin-card-danger{border-color:var(--danger);}
.modal-icon-danger{color:var(--danger);}
.modal-box h3.modal-title-danger{color:var(--danger);}

.stats-row{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:20px;}
.stat-tile{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px 8px;text-align:center;}
.stat-tile b{display:block;font-family:"Fraunces",serif;font-size:1.4rem;font-variant-numeric:tabular-nums;color:var(--forest);}
.stat-tile span{font-size:.66rem;text-transform:uppercase;letter-spacing:.04em;color:var(--sage);font-weight:700;}

.recap-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;}
.stat-tile-hadir{background:rgba(169,201,154,.22);border-color:rgba(47,74,50,.3);}
.stat-tile-hadir b{color:var(--forest);}
.stat-tile-tidak-hadir{background:rgba(180,86,47,.1);border-color:rgba(180,86,47,.4);}
.stat-tile-tidak-hadir b{color:var(--danger);}

table.guest-table{width:100%;border-collapse:collapse;font-size:.9rem;}
table.guest-table th{text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--sage);padding:8px 10px;border-bottom:2px solid var(--border);}
table.guest-table td{padding:10px;border-bottom:1px solid var(--border);vertical-align:middle;}
table.guest-table tr:last-child td{border-bottom:none;}
.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:.74rem;font-weight:700;}
.badge-pending{background:var(--cream);border:1.5px solid var(--border);color:var(--ink);}
.badge-hadir{background:var(--forest);color:var(--cream);}
.badge-tidak_hadir{background:transparent;border:1.5px solid var(--danger);color:var(--danger);}
.badge-ragu{background:var(--blush);color:var(--ink);}
.link-cell{font-size:.78rem;color:var(--sage);word-break:break-all;max-width:220px;}
.row-actions{display:flex;gap:6px;flex-wrap:wrap;}
.copy-btn{padding:6px 10px;border-radius:8px;border:1.5px solid var(--border);background:var(--cream);font-size:.76rem;font-weight:700;color:var(--forest);}

.gallery-admin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin-bottom:16px;}
.gallery-admin-item{position:relative;aspect-ratio:1;border-radius:14px;overflow:hidden;border:1px solid var(--border);}
.gallery-admin-item img{width:100%;height:100%;object-fit:cover;display:block;}
.gallery-admin-item form{position:absolute;top:6px;right:6px;}
.gallery-admin-item button{width:26px;height:26px;border-radius:50%;border:none;background:rgba(0,0,0,.6);color:#fff;font-size:.8rem;line-height:1;}

.alert{padding:12px 16px;border-radius:12px;font-size:.88rem;font-weight:600;margin-bottom:16px;}
.alert-success{background:var(--meadow);color:var(--forest);}
.alert-error{background:var(--blush);color:var(--danger);}
.field-error{color:var(--danger);font-size:.78rem;font-weight:600;margin-top:2px;}

.login-wrap{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:20px;}
.login-card{width:100%;max-width:380px;background:var(--surface);border-radius:var(--radius-lg);padding:36px 28px;box-shadow:0 24px 60px -20px var(--shadow);border:1px solid var(--border);text-align:center;}
.login-card .cover-ornament{width:64px;height:76px;}
.login-card h1{font-size:1.3rem;color:var(--forest);margin-top:8px;}
.login-card p.hint{color:var(--sage);font-size:.85rem;margin-top:4px;margin-bottom:22px;}
.login-card form{text-align:left;}

@media (max-width:720px){
  .stats-row{grid-template-columns:repeat(3,1fr);}
  table.guest-table, table.guest-table thead, table.guest-table tbody, table.guest-table th, table.guest-table td, table.guest-table tr{display:block;}
  table.guest-table thead{display:none;}
  table.guest-table tr{margin-bottom:14px;border:1px solid var(--border);border-radius:14px;padding:10px;}
  table.guest-table td{border-bottom:none;padding:6px 4px;}
  table.guest-table td::before{content:attr(data-label);display:block;font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:var(--sage);font-weight:700;margin-bottom:2px;}
}
