:root{
  --navy:#1a1a2e; --navy2:#26264a; --ink:#1f2430; --muted:#6b7280;
  --line:#e6e8ee; --bg:#f4f6fb; --card:#fff; --brand:#3b5bdb; --brand-d:#2f49b0;
  --green:#2f9e44; --green-bg:#e9f7ee; --red:#e03131; --red-bg:#fdecec;
  --amber:#f08c00; --amber-bg:#fff4e2; --radius:12px; --shadow:0 1px 3px rgba(20,25,45,.08),0 1px 2px rgba(20,25,45,.04);
}
*{box-sizing:border-box}
body{margin:0;font-family:'Segoe UI',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5}
a{color:var(--brand);text-decoration:none}
h1{font-size:1.5rem;margin:0 0 .25rem} h2{font-size:1.05rem;margin:0}
.muted{color:var(--muted)} .sm{font-size:.85rem} .mono{font-family:'Consolas',monospace;font-size:.85rem}
.r{text-align:right} .center{text-align:center}

/* Layout */
.layout{display:flex;min-height:100vh}
.sidebar{width:238px;background:var(--navy);color:#cdd2e6;flex-shrink:0;position:sticky;top:0;height:100vh;overflow:auto}
.brand{display:flex;align-items:center;gap:.6rem;padding:1.1rem 1.2rem;color:#fff}
.brand .logo{font-size:1.6rem} .brand b{display:block;font-size:1.05rem;letter-spacing:.5px} .brand small{color:#9aa2c4;font-size:.72rem}
.sidebar nav{display:flex;flex-direction:column;padding:.4rem}
.sidebar nav a{display:flex;align-items:center;gap:.5rem;color:#cdd2e6;padding:.62rem .8rem;border-radius:9px;margin:1px 0;font-weight:500}
.sidebar nav a:hover{background:var(--navy2);color:#fff}
.sidebar nav a.on{background:var(--brand);color:#fff}
.sidebar nav a.soon{color:#6b7099;cursor:default;font-weight:400}
.sidebar nav a.soon:hover{background:transparent}
.sidebar nav a em{margin-left:auto;font-style:normal;font-size:.62rem;background:#33375e;color:#aab;padding:1px 6px;border-radius:20px}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:.8rem;padding:.7rem 1.2rem;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.topbar .spacer{flex:1}
.topbar .user{font-size:.9rem}
.topbar .role{background:var(--navy);color:#fff;font-size:.65rem;text-transform:uppercase;padding:2px 7px;border-radius:20px;margin-left:3px;letter-spacing:.5px}
.hamb{display:none;background:none;border:none;font-size:1.3rem;cursor:pointer}
.content{padding:1.4rem;max-width:1200px;width:100%;margin:0 auto}
.inline{display:inline}

/* Cards & tables */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem;margin-bottom:1.1rem}
.card.no-pad{padding:0;overflow:hidden} .card.center{text-align:center;padding:2.5rem}
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.7rem}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem;margin-bottom:1.1rem}
.card.stat{padding:1.1rem 1.2rem} .card.stat .num{font-size:2rem;font-weight:700;line-height:1} .card.stat .lbl{color:var(--muted);font-size:.82rem;margin-top:.25rem}
.card.stat.warn .num{color:var(--amber)}
.scroll-x{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:.88rem}
.tbl th{text-align:left;background:var(--navy);color:#fff;padding:.6rem .8rem;font-weight:600;white-space:nowrap;position:sticky;top:0}
.tbl td{padding:.55rem .8rem;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tbody tr:hover{background:#fafbff}
.tbl tr.dim{opacity:.5}
.count{background:var(--line);color:var(--muted);font-size:.8rem;padding:2px 9px;border-radius:20px;vertical-align:middle;margin-left:.3rem}

/* Bits */
.pill{display:inline-block;min-width:34px;text-align:center;padding:2px 9px;border-radius:20px;font-weight:600;font-size:.82rem}
.pill.green{background:var(--green-bg);color:var(--green)} .pill.red{background:var(--red-bg);color:var(--red)}
.tag{background:#eef1fb;color:#42509c;padding:2px 8px;border-radius:6px;font-size:.78rem;white-space:nowrap}
.badge{font-size:.72rem;padding:2px 9px;border-radius:20px;font-weight:600}
.badge.ok{background:var(--green-bg);color:var(--green)} .badge.off{background:#eee;color:#888}
.actions{white-space:nowrap;text-align:right}

/* Buttons */
.btn{display:inline-block;border:1px solid var(--line);background:#fff;color:var(--ink);padding:.5rem .9rem;border-radius:9px;cursor:pointer;font-size:.86rem;font-weight:600;transition:.12s}
.btn:hover{background:#f3f5fb}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff} .btn.primary:hover{background:var(--brand-d)}
.btn.ghost{background:transparent} .btn.sm{padding:.32rem .6rem;font-size:.78rem}
.btn.block{width:100%} .btn.danger{color:var(--red);border-color:#f3c7c7} .btn.danger:hover{background:var(--red-bg)}

/* Forms */
.filters{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:1rem}
.filters input,.filters select{flex:0 1 auto}
input,select{width:100%;padding:.55rem .7rem;border:1px solid var(--line);border-radius:9px;font-size:.9rem;font-family:inherit;background:#fff}
input:focus,select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,91,219,.12)}
label{display:block;font-weight:600;font-size:.82rem;color:#374151;margin-bottom:.2rem}
label input,label select{margin-top:.3rem;font-weight:400}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.form-grid .form-actions{grid-column:1/-1;display:flex;gap:.6rem;margin-top:.4rem}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}

/* Flash */
.flash{padding:.7rem 1rem;border-radius:9px;margin-bottom:.9rem;font-size:.88rem;font-weight:500}
.flash.ok{background:var(--green-bg);color:#1b6b2e;border:1px solid #b7e4c2}
.flash.error{background:var(--red-bg);color:#a51111;border:1px solid #f3c7c7}

/* Auth / Login — split brand rail + form, tenang & monokrom */
.auth{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr}
.wordmark{display:flex;flex-direction:column;line-height:1}
.wm-name{font-size:1.55rem;font-weight:800;letter-spacing:.14em}
.wm-sub{margin-top:.4rem;font-size:.72rem;font-weight:600;letter-spacing:.34em;text-transform:uppercase}

.auth-brand{background:#14141d;color:#fff;display:flex;flex-direction:column;justify-content:space-between;padding:clamp(2rem,4vw,3.25rem)}
.auth-brand .wm-sub{color:#8b90b4}
.auth-tagline{max-width:32ch;margin:0;color:#a2a7c6;font-size:1.06rem;line-height:1.65}

.auth-panel{display:flex;align-items:center;justify-content:center;background:#fff;padding:2rem}
.auth-inner{width:100%;max-width:344px}
.auth-mark-mobile{display:none;margin-bottom:2rem}
.auth-mark-mobile .wm-name{color:var(--navy)} .auth-mark-mobile .wm-sub{color:var(--muted)}
.auth-inner h1{font-size:1.55rem;font-weight:700;letter-spacing:-.01em;margin:0 0 .35rem}
.auth-lead{color:#5b6270;margin:0 0 1.75rem;font-size:.95rem}
.field{display:block;margin-bottom:1rem}
.field span{display:block;font-size:.82rem;font-weight:600;color:#374151;margin-bottom:.4rem}
.field input{width:100%;padding:.72rem .85rem;border:1px solid #d6d9e0;border-radius:8px;font-size:.95rem;background:#fff;transition:border-color .15s,box-shadow .15s}
.field input:hover{border-color:#b7bcc8}
.field input:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,26,46,.1)}
.btn-auth{width:100%;margin-top:.5rem;padding:.78rem;border:none;border-radius:8px;background:var(--navy);color:#fff;font-size:.95rem;font-weight:600;cursor:pointer;transition:background .15s}
.btn-auth:hover{background:#2a2a48}
.btn-auth:active{background:#101019}
.btn-auth:focus-visible{outline:2px solid var(--navy);outline-offset:2px}
.auth-foot{margin:1.6rem 0 0;font-size:.8rem;color:#6b7280;text-align:center}

.auth-error{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;text-align:center;background:#f6f7f9;padding:2rem}
.auth-error .wordmark{align-items:center;color:var(--navy);margin-bottom:1.5rem}
.auth-error .wm-sub{color:var(--muted)}
.auth-error-code{font-size:3.25rem;font-weight:800;color:var(--navy);letter-spacing:-.02em;line-height:1}
.auth-error p{color:#5b6270;margin:.2rem 0 1rem}

@media(max-width:820px){
  .auth{grid-template-columns:1fr}
  .auth-brand{display:none}
  .auth-panel{align-items:flex-start;padding:3rem 1.5rem}
  .auth-mark-mobile{display:flex}
}
@media(prefers-reduced-motion:reduce){
  *{transition:none!important;animation:none!important}
}

/* Responsive */
@media(max-width:820px){
  .sidebar{position:fixed;left:-238px;z-index:20;transition:.2s;box-shadow:2px 0 12px rgba(0,0,0,.2)}
  body.nav-open .sidebar{left:0}
  .hamb{display:block}
  .form-grid{grid-template-columns:1fr}
}
