/* Tema bersama DBenk (ui/theme/theme.css) — tampilan dashboard admin Vita untuk semua UI web DBenk.
   Sumber: apps/office/frontend/src/admin/admin.css (+ theme.ts), disederhanakan untuk halaman yang dirender server.
   Satu sumber: ubah DI SINI lalu jalankan ui/theme/sync.sh; salinan per aplikasi diuji sama byte (lihat README).
   Tema gelap/terang lewat <html data-theme>, disimpan di localStorage "vita-admin-theme" (sama seperti Vita). */
:root {
  color-scheme: dark;
  --bg:#0a0b1a; --surface:#12142b; --surface-2:#191c3a; --line:rgba(255,255,255,.09); --line-2:rgba(255,255,255,.16);
  --text:#f1f2ff; --text-2:#c6c9e8; --muted:#9298c0; --focus:#a5b4fc;
  --series-1:#3987e5; --meter-track:rgba(57,135,229,.2);
  --st-good:#0ca30c; --st-warn:#fab219; --st-bad:#d03b3b;
  --ok-text:#4ade80; --warn-text:#fbbf24; --bad-text:#fca5a5;
  --shadow:0 18px 40px -22px rgba(0,0,0,.7);
  --violet-s:#c4b5fd; --cyan-s:#67e8f9; --emerald-s:#6ee7b7; --amber-s:#fcd34d; --rose-s:#fda4af; --blue-s:#93c5fd; --fuchsia-s:#f0abfc; --orange-s:#fdba74;
  --font:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif; --mono:ui-monospace,SFMono-Regular,Menlo,monospace; --r:18px;
  --ha:#7c3aed; --hb:#4f46e5; --hs:var(--violet-s);
}
:root[data-theme='light'] {
  color-scheme: light;
  --bg:#eef0fb; --surface:#ffffff; --surface-2:#f5f6fd; --line:rgba(20,24,60,.10); --line-2:rgba(20,24,60,.2);
  --text:#12142b; --text-2:#3b3f66; --muted:#565c84; --focus:#4f46e5;
  --series-1:#2a78d6; --meter-track:rgba(42,120,214,.16);
  --ok-text:#006300; --warn-text:#8a5a00; --bad-text:#a11d1d;
  --shadow:0 14px 34px -22px rgba(30,40,110,.35);
  --violet-s:#5b21b6; --cyan-s:#155e75; --emerald-s:#065f46; --amber-s:#92400e; --rose-s:#9f1239; --blue-s:#1e40af; --fuchsia-s:#86198f; --orange-s:#9a3412;
}
.h-violet,.c-violet{--ha:#7c3aed;--hb:#4f46e5;--hs:var(--violet-s)}
.h-cyan,.c-cyan{--ha:#0e7490;--hb:#0369a1;--hs:var(--cyan-s)}
.h-emerald,.c-emerald{--ha:#047857;--hb:#0f766e;--hs:var(--emerald-s)}
.h-amber,.c-amber{--ha:#b45309;--hb:#c2410c;--hs:var(--amber-s)}
.h-rose,.c-rose{--ha:#be123c;--hb:#9f1239;--hs:var(--rose-s)}
.h-blue,.c-blue{--ha:#1d4ed8;--hb:#4338ca;--hs:var(--blue-s)}
.h-fuchsia,.c-fuchsia{--ha:#a21caf;--hb:#7e22ce;--hs:var(--fuchsia-s)}
.h-orange,.c-orange{--ha:#c2410c;--hb:#b91c1c;--hs:var(--orange-s)}

* { box-sizing:border-box; margin:0 }
html,body { min-height:100%; }
body { background:var(--bg); color:var(--text); font:14px/1.5 var(--font); -webkit-font-smoothing:antialiased; }
button { font:inherit; color:inherit; cursor:pointer; background:none; border:0; }
a { color:var(--hs); text-decoration:none } a:hover { text-decoration:underline }
code, pre { font:12px var(--mono); }
code { background:var(--surface-2); padding:1px 6px; border-radius:6px; overflow-wrap:anywhere }
pre { background:var(--surface-2); border:1px solid var(--line); border-radius:12px; padding:12px 14px; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; line-height:1.45 }
:focus-visible { outline:2px solid var(--focus); outline-offset:2px }
.muted { color:var(--muted) } .small, small { font-size:12px }
h1 { font-size:26px; font-weight:800; letter-spacing:-.01em } h2 { font-size:16px; font-weight:700 } h3 { font-size:14px; font-weight:700 }
p + p { margin-top:8px }
ul.plain, ol.plain { list-style:none; padding:0 }

/* Latar aurora */
.aurora { position:fixed; inset:0; overflow:hidden; pointer-events:none; z-index:0 }
.aurora i { position:absolute; width:46vmax; height:46vmax; border-radius:50%; filter:blur(90px); opacity:.5; animation:drift 28s ease-in-out infinite alternate }
.aurora i:nth-child(1){ background:#5b21b6; top:-18vmax; left:-10vmax }
.aurora i:nth-child(2){ background:#0e7490; bottom:-22vmax; right:-12vmax; animation-delay:-9s }
.aurora i:nth-child(3){ background:#9d174d; top:30%; left:45%; width:30vmax; height:30vmax; opacity:.28; animation-delay:-16s }
:root[data-theme='light'] .aurora i { opacity:.28 }
@keyframes drift { to { transform:translate3d(6vmax,4vmax,0) scale(1.1) } }

/* Kerangka: sidebar + topbar */
.shell { position:relative; z-index:1; display:grid; grid-template-columns:268px minmax(0,1fr); min-height:100vh }
.side { position:sticky; top:0; height:100vh; padding:20px 14px; display:flex; flex-direction:column; gap:18px; overflow:auto;
  background:linear-gradient(180deg,color-mix(in oklab,var(--surface) 86%,transparent),color-mix(in oklab,var(--surface) 72%,transparent)); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); border-right:1px solid var(--line) }
.brand2 { display:flex; align-items:center; gap:12px; padding:4px 8px; color:var(--text) } .brand2:hover { text-decoration:none }
.logo2 { width:42px; height:42px; flex:none; display:grid; place-items:center; border-radius:14px; font:800 20px var(--font); color:#fff; background:linear-gradient(135deg,#8b5cf6,#06b6d4 60%,#f43f5e); box-shadow:0 10px 24px -8px #8b5cf6 }
.brand2 b { display:block; font-size:17px; letter-spacing:.01em } .brand2 small { color:var(--muted); font-size:11px; letter-spacing:.14em; text-transform:uppercase }
.nav-group { margin-bottom:12px }
.nav-group > p { padding:0 12px 6px; font-size:11px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--muted) }
.nav-item { position:relative; display:flex; align-items:center; gap:11px; padding:8px 12px; border-radius:12px; color:var(--text-2); font-weight:500; transition:background .18s,color .18s }
.nav-item:hover { background:var(--surface-2); color:var(--text); text-decoration:none }
.nav-ico { width:30px; height:30px; flex:none; display:grid; place-items:center; border-radius:10px; font-size:14px; color:var(--hs); background:color-mix(in oklab,var(--ha) 18%,transparent); transition:.18s }
.nav-item.on, .nav-item[aria-current=page] { color:var(--text); background:linear-gradient(90deg,color-mix(in oklab,var(--ha) 26%,transparent),transparent) }
.nav-item.on::before, .nav-item[aria-current=page]::before { content:''; position:absolute; left:-14px; top:8px; bottom:8px; width:4px; border-radius:0 4px 4px 0; background:linear-gradient(var(--ha),var(--hb)); box-shadow:0 0 14px var(--ha) }
.nav-item.on .nav-ico, .nav-item[aria-current=page] .nav-ico { background:linear-gradient(135deg,var(--ha),var(--hb)); color:#fff; box-shadow:0 8px 18px -8px var(--ha) }
.nav-txt { flex:1 }
.badge { font-style:normal; font-size:11px; font-weight:700; color:#fff; background:#be123c; padding:1px 8px; border-radius:999px }
.badge.ok { background:#047857 } .badge.info { background:#0e7490 } .badge.mute { background:#475569 }
.side-foot { margin-top:auto; display:flex; flex-direction:column; gap:8px; align-items:flex-start; padding:0 8px; font-size:12px; color:var(--muted) }

.main { min-width:0 }
.top { position:sticky; top:0; z-index:20; display:flex; align-items:center; gap:10px; padding:14px 28px;
  background:color-mix(in oklab,var(--bg) 70%,transparent); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px); border-bottom:1px solid var(--line) }
.crumbs { display:flex; align-items:center; gap:6px; margin-right:auto; font-size:14px; min-width:0 } .crumbs b { font-weight:700 }
.who { display:flex; align-items:center; gap:8px; font-size:13px; color:var(--text-2) }
.icon-btn { position:relative; width:40px; height:40px; flex:none; display:grid; place-items:center; border-radius:13px; background:var(--surface); border:1px solid var(--line); color:var(--text-2); font-size:16px; transition:.18s }
.icon-btn:hover { color:var(--text); border-color:var(--line-2); transform:translateY(-1px) }
.icon-btn.menu { display:none }
.theme-ico-light { display:none } :root[data-theme='light'] .theme-ico-light { display:inline } :root[data-theme='light'] .theme-ico-dark { display:none }
.scrim { display:none }

.page { padding:24px 28px 56px; display:flex; flex-direction:column; gap:20px; max-width:1680px }
.pg-head { display:flex; justify-content:space-between; align-items:flex-end; gap:16px; flex-wrap:wrap }
.pg-head p { max-width:70ch; margin-top:2px; color:var(--muted) }
.pg-stats { display:flex; gap:8px; flex-wrap:wrap }

/* Hero */
.hero { position:relative; overflow:hidden; display:flex; align-items:center; justify-content:space-between; gap:28px; padding:28px 32px; border-radius:24px; color:#fff;
  background:radial-gradient(120% 140% at 100% 0%,#be123c 0%,transparent 55%),radial-gradient(90% 120% at 0% 100%,#0369a1 0%,transparent 60%),linear-gradient(120deg,#4338ca,#7e22ce 55%,#a21caf);
  box-shadow:0 30px 60px -30px #7e22ce }
.hero::after { content:''; position:absolute; inset:0; background:radial-gradient(60% 80% at 20% 0%,rgba(255,255,255,.18),transparent 60%); pointer-events:none }
.hero > * { position:relative; z-index:1 }
.hero .eyebrow { font-size:12px; font-weight:600; letter-spacing:.16em; text-transform:uppercase; opacity:.85 }
.hero h1 { font-size:clamp(22px,2.4vw,32px); line-height:1.15; font-weight:800; margin:6px 0 10px; max-width:26ch }
.hero-sub { font-size:15px; opacity:.95 } .hero a { color:#fff; text-decoration:underline }
.hero-num { font-size:clamp(54px,6vw,84px); line-height:1; font-weight:800; letter-spacing:-.03em; text-shadow:0 8px 30px rgba(0,0,0,.3); text-align:right }
.hero-cap { font-size:14px; opacity:.9; margin-top:4px; text-align:right }

/* Kartu statistik berwarna */
.kpis { display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:14px }
.tile { position:relative; overflow:hidden; display:flex; flex-direction:column; gap:6px; min-height:120px; padding:18px 18px 14px; border-radius:var(--r); color:#fff;
  background:linear-gradient(135deg,var(--ha),var(--hb)); box-shadow:0 20px 34px -22px var(--ha); transition:transform .22s,box-shadow .22s }
.tile::before { content:''; position:absolute; inset:0; background:radial-gradient(90% 90% at 100% 0%,rgba(255,255,255,.26),transparent 60%); pointer-events:none }
a.tile:hover { transform:translateY(-3px); text-decoration:none; color:#fff }
.tile > * { position:relative }
.tile-label { font-size:13px; font-weight:600; opacity:.95 }
.tile-value { font-size:32px; line-height:1.1; font-weight:800; letter-spacing:-.02em; margin-top:4px }
.tile-foot { font-size:12px; opacity:.92; margin-top:auto }

/* Kartu */
.grid { display:grid; grid-template-columns:repeat(12,minmax(0,1fr)); gap:18px }
.card { position:relative; grid-column:span var(--span,12); min-width:0; padding:20px; border-radius:var(--r); background:linear-gradient(180deg,color-mix(in oklab,var(--ha) 9%,var(--surface)),var(--surface) 46%); border:1px solid var(--line); box-shadow:var(--shadow); overflow:hidden; transition:border-color .2s }
.card::before { content:''; position:absolute; left:0; right:0; top:0; height:3px; background:linear-gradient(90deg,var(--ha),var(--hb)) }
.card:hover { border-color:color-mix(in oklab,var(--ha) 45%,var(--line)) }
.card-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:14px; flex-wrap:wrap }
.card-head h2 { font-size:16px; font-weight:700 } .card-head p { font-size:12.5px; color:var(--muted); margin-top:2px }
.cards { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:16px }
.pcard { position:relative; display:flex; flex-direction:column; gap:10px; padding:18px; border-radius:var(--r); overflow:hidden;
  background:linear-gradient(160deg,color-mix(in oklab,var(--ha) 18%,var(--surface)),var(--surface) 62%); border:1px solid color-mix(in oklab,var(--ha) 32%,var(--line)); box-shadow:var(--shadow); transition:transform .2s,border-color .2s }
.pcard::before { content:''; position:absolute; left:0; right:0; top:0; height:3px; background:linear-gradient(90deg,var(--ha),var(--hb)) }
.pcard:hover { transform:translateY(-3px); border-color:var(--ha) }
.pcard-top { display:flex; justify-content:space-between; align-items:flex-start; gap:10px } .pcard-top b { display:block; font-size:16px; font-weight:800 } .pcard-top small { display:block; color:var(--muted); font-size:11.5px; word-break:break-all }
.pcard-foot { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:auto; padding-top:6px }

/* Chip */
.chip { display:inline-flex; align-items:center; gap:5px; padding:2px 9px; border-radius:999px; font-size:11.5px; font-weight:600; border:1px solid transparent; white-space:nowrap }
.chip.c-ok { color:var(--ok-text); background:color-mix(in oklab,#16a34a 16%,transparent); border-color:color-mix(in oklab,#16a34a 30%,transparent) }
.chip.c-warn { color:var(--warn-text); background:color-mix(in oklab,#f59e0b 16%,transparent); border-color:color-mix(in oklab,#f59e0b 32%,transparent) }
.chip.c-bad { color:var(--bad-text); background:color-mix(in oklab,#dc2626 16%,transparent); border-color:color-mix(in oklab,#dc2626 32%,transparent) }
.chip.c-info { color:var(--cyan-s); background:color-mix(in oklab,#0891b2 16%,transparent); border-color:color-mix(in oklab,#0891b2 30%,transparent) }
.chip.c-mute { color:var(--muted); background:var(--surface-2); border-color:var(--line) }
td .chip + .chip { margin-left:6px }

/* Tombol */
.btn, button.primary, button.ghost, button.danger, input[type=submit] { display:inline-flex; align-items:center; justify-content:center; gap:6px; padding:8px 14px; border-radius:11px; font:600 13px var(--font); border:1px solid transparent; transition:.18s; cursor:pointer }
.btn:hover { text-decoration:none }
.btn.primary, button.primary, input[type=submit] { color:#fff; background:linear-gradient(135deg,#047857,#0f766e); box-shadow:0 8px 18px -10px #047857 }
.btn.primary:hover, button.primary:hover { filter:brightness(1.1); transform:translateY(-1px) }
.btn.violet, button.violet { color:#fff; background:linear-gradient(135deg,#7c3aed,#4f46e5); box-shadow:0 8px 18px -8px #7c3aed }
.btn.danger, button.danger { color:#fff; background:linear-gradient(135deg,#e11d48,#9f1239) } .btn.danger:hover { filter:brightness(1.1) }
.btn.ghost, button.ghost { color:var(--text-2); background:var(--surface-2); border-color:var(--line) } .btn.ghost:hover, button.ghost:hover { color:var(--text); border-color:var(--line-2) }
.btn.small, button.small { padding:4px 10px; font-size:12px; border-radius:9px }
button.link { padding:0; color:var(--hs); text-decoration:underline; font-weight:500 }
.btn:disabled, button:disabled { opacity:.45; cursor:not-allowed; transform:none !important }
.acts { display:flex; gap:6px; flex-wrap:wrap; align-items:center } .acts form { display:inline-flex; gap:6px; align-items:center; margin:0 }

/* Tabel */
.table-wrap { overflow:auto; border:1px solid var(--line); border-radius:12px }
table { width:100%; border-collapse:collapse; font-size:13px }
th,td { padding:9px 12px; text-align:left; vertical-align:top; border-bottom:1px solid var(--line) }
thead th { position:sticky; top:0; background:var(--surface-2); font-size:11px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); white-space:nowrap }
tbody th { font-weight:600 } tbody tr:last-child > * { border-bottom:0 } tbody tr:hover > * { background:color-mix(in oklab,var(--surface-2) 70%,transparent) }
tr.grp th { background:var(--surface-2); font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:var(--muted) }

/* Formulir */
form.form { display:grid; gap:14px; max-width:640px }
.field { display:flex; flex-direction:column; gap:6px }
.field > label, .field > span.lbl { font-size:13px; font-weight:600; display:flex; gap:10px; align-items:center; flex-wrap:wrap }
.field small, .hint { color:var(--muted); font-size:12px; font-weight:400 }
input[type=text], input[type=password], input[type=url], input[type=number], input[type=email], input:not([type]), select, textarea {
  font:inherit; font-size:14px; color:var(--text); background:var(--surface); border:1px solid var(--line-2); border-radius:11px; padding:9px 12px; outline:0; width:100%; max-width:640px }
textarea { resize:vertical; min-height:88px; font-family:var(--mono); font-size:12.5px }
input:focus, select:focus, textarea:focus { border-color:var(--focus); box-shadow:0 0 0 3px color-mix(in oklab,var(--focus) 25%,transparent) }
.check { display:flex; align-items:center; gap:8px; font-size:13.5px; font-weight:500 } .check input { width:16px; height:16px; accent-color:#7c3aed }
.err { color:var(--bad-text); font-size:12.5px; font-weight:500 }
.row { display:flex; gap:10px; flex-wrap:wrap; align-items:flex-end } .row > .field { flex:1 1 200px }
fieldset { border:1px solid var(--line); border-radius:14px; padding:14px; display:grid; gap:12px } legend { padding:0 6px; font-weight:700; font-size:13px }

/* Pesan */
.alert { padding:10px 14px; border-radius:12px; font-size:13.5px; border:1px solid var(--line); background:var(--surface-2) }
.alert.ok { color:var(--ok-text); background:color-mix(in oklab,#16a34a 12%,var(--surface)); border-color:color-mix(in oklab,#16a34a 30%,transparent) }
.alert.warn { color:var(--warn-text); background:color-mix(in oklab,#f59e0b 12%,var(--surface)); border-color:color-mix(in oklab,#f59e0b 32%,transparent) }
.alert.err { color:var(--bad-text); background:color-mix(in oklab,#dc2626 12%,var(--surface)); border-color:color-mix(in oklab,#dc2626 32%,transparent) }
.note { padding:8px 12px; border-radius:10px; font-size:12.5px; color:var(--warn-text); background:color-mix(in oklab,#f59e0b 14%,transparent) }
.once { border:2px solid #f59e0b } .once code { display:block; padding:10px; margin:8px 0; word-break:break-all; user-select:all; font-size:13px }
.empty { display:flex; flex-direction:column; align-items:center; gap:6px; padding:30px 10px; color:var(--muted); text-align:center; border:1px dashed var(--line-2); border-radius:16px } .empty b { color:var(--text) }

/* Daftar kunci-nilai, log, titik status */
.kv { display:grid; grid-template-columns:max-content 1fr; gap:8px 16px; font-size:13px } .kv dt { color:var(--muted) } .kv dd { margin:0; word-break:break-word }
.log { max-height:520px; overflow:auto; font:12px/1.5 var(--mono); background:#05060f; color:#d7dbff; border-radius:12px; padding:12px 14px; border:1px solid var(--line); white-space:pre-wrap; overflow-wrap:anywhere }
:root[data-theme='light'] .log { background:#10122a; color:#e5e7ff }
.dot { display:inline-block; width:10px; height:10px; border-radius:50%; background:var(--muted); vertical-align:middle }
.dot.ok { background:#22c55e; box-shadow:0 0 0 4px rgba(34,197,94,.18) } .dot.warn { background:#f59e0b; box-shadow:0 0 0 4px rgba(245,158,11,.18) } .dot.bad { background:#ef4444; box-shadow:0 0 0 4px rgba(239,68,68,.18) }
.tabs { display:flex; gap:4px; border-bottom:1px solid var(--line); flex-wrap:wrap }
.tabs a { padding:9px 16px; font-weight:600; color:var(--muted); border-bottom:2px solid transparent; margin-bottom:-1px }
.tabs a.on, .tabs a[aria-current=page] { color:var(--text); border-color:#8b5cf6; text-decoration:none }
.footnote { font-size:12px; color:var(--muted); text-align:center; padding-top:4px }

/* Halaman tanpa sidebar (login, setup) */
.center-page { position:relative; z-index:1; min-height:100vh; display:grid; place-items:center; padding:24px }
.auth-card { width:min(460px,100%); padding:28px; border-radius:22px; background:var(--surface); border:1px solid var(--line-2); box-shadow:0 40px 80px -30px rgba(0,0,0,.6); display:grid; gap:16px; position:relative; overflow:hidden }
.auth-card::before { content:''; position:absolute; left:0; right:0; top:0; height:4px; background:linear-gradient(90deg,#8b5cf6,#06b6d4 60%,#f43f5e) }
.auth-card .brand2 { padding:0 }
.auth-card h1 { font-size:22px }
.auth-card form { display:grid; gap:12px }
.auth-card .btn, .auth-card button.primary { width:100% }
.auth-tools { position:fixed; top:14px; right:14px; z-index:5 }

/* Responsif */
@media (max-width:1180px) { .card { grid-column:span 12 } }
@media (max-width:980px) {
  .shell { grid-template-columns:minmax(0,1fr) }
  .side { position:fixed; z-index:40; left:0; top:0; width:min(300px,86vw); transform:translateX(-102%); visibility:hidden; transition:transform .25s, visibility 0s linear .25s; box-shadow:0 0 60px rgba(0,0,0,.6) }
  .nav-open .side { transform:none; visibility:visible; transition-delay:0s }
  .nav-open .scrim { display:block; position:fixed; inset:0; z-index:39; background:rgba(0,0,0,.5) }
  .icon-btn.menu { display:grid }
  .top { padding:12px 16px } .page { padding:18px 16px 48px }
  .hero { flex-direction:column; align-items:flex-start; padding:22px 20px } .hero-num, .hero-cap { text-align:left }
}
@media (max-width:720px) {
  table.stack, table.stack tbody, table.stack tr, table.stack td, table.stack th { display:block; width:100% }
  table.stack thead { display:none }
  table.stack tr { border-bottom:1px solid var(--line); padding:6px 0 }
  table.stack td, table.stack tbody th { border:0; padding:4px 12px }
  table.stack td[data-l]::before { content:attr(data-l); display:block; font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--muted) }
  .kv { grid-template-columns:1fr } .kv dd { margin-bottom:6px }
  .who .name { display:none }
}
@media (prefers-reduced-motion:reduce) { *,*::before,*::after { animation:none !important; transition:none !important } }
@media (forced-colors:active) { .tile,.hero,.card,.pcard { border:1px solid CanvasText } }
.live { display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:600; color:var(--ok-text) }
.live i { width:8px; height:8px; border-radius:50%; background:#22c55e; box-shadow:0 0 0 0 rgba(34,197,94,.6); animation:pulse 2s infinite }
@keyframes pulse { 70% { box-shadow:0 0 0 8px rgba(34,197,94,0) } 100% { box-shadow:0 0 0 0 rgba(34,197,94,0) } }
details > summary { cursor:pointer }
