:root{
  --fg-navy:#11263a;
  --fg-navy-deep:#071521;
  --fg-slate:#26445b;
  --fg-ink:#172938;
  --fg-muted:#708292;
  --fg-amber:#d9a31c;
  --fg-amber-dark:#ab7607;
  --fg-amber-soft:#fff5d8;
  --fg-bg:#f3f6f8;
  --fg-card:#ffffff;
  --fg-line:#d8e2e9;
  --fg-success:#168a52;
  --fg-danger:#c2494d;
  --fg-shadow:0 14px 34px rgba(14,35,52,.08);
  --fg-radius:20px;
}
*{box-sizing:border-box}
html{background:var(--fg-bg)}
body{min-width:320px;margin:0;background:var(--fg-bg);color:var(--fg-ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}
button,input,select{font:inherit}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgba(217,163,28,.34);outline-offset:2px}

/* App shell & flexible navigation */
.app-shell{min-height:100vh}
.app-sidebar{position:fixed;inset:0 auto 0 0;width:260px;z-index:1030;background:linear-gradient(180deg,var(--fg-navy) 0%,var(--fg-navy-deep) 100%);color:#fff;padding:22px 15px 18px;flex-direction:column;box-shadow:10px 0 28px rgba(4,15,24,.14)}
.brand-link{display:flex;align-items:center;gap:12px;color:#fff;text-decoration:none;padding:3px 8px 24px;min-width:0}.brand-mark{width:50px;height:50px;display:grid;place-items:center;border-radius:16px;background:linear-gradient(145deg,#f6ce58,var(--fg-amber));color:var(--fg-navy);font-weight:900;font-size:18px;letter-spacing:-1px;box-shadow:0 9px 17px rgba(217,163,28,.18);flex:0 0 auto}.brand-mark-sm{width:38px;height:38px;border-radius:12px;font-size:14px}.brand-link strong{display:block;font-size:20px;line-height:1.05}.brand-link small{display:block;color:#c7d5de;font-size:11px;margin-top:4px;line-height:1.2}.app-nav{gap:8px}.app-nav .nav-link{border:0;background:transparent;width:100%;display:flex;align-items:center;gap:12px;color:#c8d6df;font-weight:750;border-radius:14px;padding:13px 14px;text-align:left;transition:background .18s,color .18s,transform .18s}.app-nav .nav-link i{font-size:16px;min-width:20px;text-align:center}.app-nav .nav-link:hover{color:#fff;background:rgba(255,255,255,.08)}.app-nav .nav-link.active{color:#172735;background:linear-gradient(135deg,#f0be37,#d49910);box-shadow:0 12px 22px rgba(216,163,28,.18)}.sidebar-user{border-top:1px solid rgba(255,255,255,.12);padding:16px 8px 0}.user-avatar{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#fff3c5;color:#5f4502;font-weight:850;flex:0 0 auto}.user-avatar-light{background:var(--fg-amber-soft)}.sidebar-user strong,.sidebar-user small{display:block}.sidebar-user strong{font-size:12px;line-height:1.2}.sidebar-user small{color:#bfd0db;font-size:10px;margin-top:3px}.sidebar-logout{display:flex;justify-content:center;align-items:center;gap:9px;color:#d8e2e8;border:1px solid rgba(255,255,255,.14);border-radius:13px;text-decoration:none;padding:11px 12px;margin-top:16px;font-weight:750;font-size:13px}.sidebar-logout:hover{background:rgba(255,255,255,.08);color:#fff}.app-offcanvas{--bs-offcanvas-width:min(320px,88vw)}.app-offcanvas .offcanvas-header{padding:20px 20px 14px}.app-offcanvas .offcanvas-body{padding:12px 20px 20px}.app-nav-light .nav-link{color:#394c58;background:transparent}.app-nav-light .nav-link:hover{background:#f3f6f8;color:#142434}.app-nav-light .nav-link.active{background:var(--fg-amber-soft);color:#785707}

.app-main{margin-left:260px;min-height:100vh;padding:26px 30px 52px}.app-main-inner{width:100%;max-width:1580px;margin:0 auto}.app-topbar{min-height:56px;display:flex;align-items:center;gap:14px;margin-bottom:28px}.topbar-heading{min-width:0}.section-kicker{display:block;font-size:11px;font-weight:850;letter-spacing:1.5px;color:var(--fg-amber-dark);line-height:1.1}.app-topbar h1{margin:5px 0 0;font-size:clamp(25px,2.25vw,37px);font-weight:850;letter-spacing:-1.1px}.page-section{display:block}.page-section.d-none{display:none!important}.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:20px}.page-note h2{font-size:clamp(22px,1.8vw,29px);letter-spacing:-.6px;margin:0 0 6px;font-weight:850}.page-note p{margin:0;color:var(--fg-muted);font-size:14px;line-height:1.55}.period-control{width:min(240px,100%)}.period-control label{display:block;font-size:11px;color:#607582;font-weight:800;margin:0 0 6px}.period-control .form-control{background:#fff}

/* Cards, metrics and data */
.fg-card{border:1px solid var(--fg-line);border-radius:var(--fg-radius);box-shadow:var(--fg-shadow);background:var(--fg-card);overflow:hidden}.fg-card .card-body{padding:22px}.metric-card{height:100%;display:flex;gap:15px;align-items:center;background:#fff;border:1px solid var(--fg-line);border-radius:20px;padding:20px;box-shadow:var(--fg-shadow)}.metric-card small{display:block;color:var(--fg-muted);font-size:12px;margin-bottom:7px}.metric-card strong{display:block;font-size:clamp(27px,2.35vw,37px);line-height:1.1;letter-spacing:-1.2px;overflow-wrap:anywhere}.metric-card p{color:#8a98a3;font-size:11px;margin:7px 0 0}.metric-icon{width:45px;height:45px;display:grid;place-items:center;border-radius:14px;background:var(--fg-amber-soft);color:var(--fg-amber-dark);font-size:20px;flex:0 0 auto}.card-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:15px;margin-bottom:18px}.card-title-row h3{font-size:18px;letter-spacing:-.35px;margin:0 0 5px;font-weight:850}.card-title-row p{margin:0;color:var(--fg-muted);font-size:13px}.chart-badge{font-size:11px;font-weight:850;color:#7f5d08;background:var(--fg-amber-soft);border-radius:999px;padding:6px 10px}.chart-holder{min-height:310px;overflow-x:auto;overscroll-behavior-x:contain}.fg-chart{width:100%;height:auto;min-width:540px;display:block}.chart-grid{stroke:#e8edf1;stroke-width:1}.chart-axis{stroke:#aebdc7;stroke-width:1.25}.chart-tick{fill:#8496a2;font-size:11px}.chart-month{fill:#5f7380;font-size:11px;font-weight:750}.chart-value{fill:#8c6503;font-size:10px;font-weight:850}.chart-axis-label{fill:#55707f;font-size:11px;font-weight:850;letter-spacing:.1px}.chart-bar{fill:var(--fg-amber);transition:opacity .18s}.chart-bar:hover{opacity:.78}.list-group-item{border-color:#edf1f4!important;padding:13px 0;background:transparent}.recent-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:var(--fg-amber-soft);color:var(--fg-amber-dark);font-size:16px;flex:0 0 auto}.recent-title{font-weight:750;font-size:13px}.recent-meta{color:var(--fg-muted);font-size:11px;margin-top:2px}.recent-value{font-weight:800;font-size:13px;text-align:right}.recent-value small{display:block;color:var(--fg-muted);font-weight:600;font-size:10px;margin-top:2px}.table{--bs-table-bg:transparent;--bs-table-hover-bg:#fafbfc;margin:0}.table thead th{background:#f3f6f8;color:#607581;border-bottom:1px solid var(--fg-line);font-size:11px;text-transform:uppercase;letter-spacing:.55px;white-space:nowrap;padding:14px 12px}.table td{font-size:13px;padding:15px 12px;border-color:#edf1f4;vertical-align:middle}.table td small{font-size:10px;color:var(--fg-muted);display:block;margin-top:2px}.table td code{font-size:11px;color:#42606e}.btn.fg-primary{background:linear-gradient(135deg,#e4b33b,#c78a0c);border-color:#c78a0c;color:#182735;font-weight:850;box-shadow:0 10px 18px rgba(205,146,15,.17)}.btn.fg-primary:hover{background:linear-gradient(135deg,#efc44f,#d69812);border-color:#d69812;color:#142434}.form-control,.form-select,.input-group-text{border-color:#d3dfe6}.form-control:focus,.form-select:focus{border-color:#d8a520;box-shadow:0 0 0 .25rem rgba(217,163,28,.15)}.input-group-text{background:#fff;color:#6d7e89}.status-badge{font-size:11px;font-weight:850;border-radius:999px;padding:6px 9px;display:inline-flex;align-items:center;gap:4px}.status-active,.status-subsidy{background:#e6f6ed;color:#16734d}.status-blocked,.status-normal{background:#fff0f1;color:#b33f46}.status-mix{background:var(--fg-amber-soft);color:#8e6405}

/* Petugas operations console */
.reader-status-box{display:grid;justify-items:end;gap:6px;min-width:240px}.reader-status-box small{color:var(--fg-muted);font-size:11px;max-width:330px;text-align:right}.reader-chip{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:9px 12px;font-size:12px;font-weight:850}.reader-chip i{width:8px;height:8px;border-radius:50%;display:block}.reader-chip.checking{background:#edf2f5;color:#5b7280}.reader-chip.checking i{background:#8da3ae}.reader-chip.online{background:#e6f7ee;color:#16774f}.reader-chip.online i{background:#28b76f;box-shadow:0 0 0 4px rgba(40,183,111,.12)}.reader-chip.offline{background:#fff0f1;color:#b33e44}.reader-chip.offline i{background:#df535a;box-shadow:0 0 0 4px rgba(223,83,90,.11)}.operations-console{border-radius:24px;padding:22px;background:linear-gradient(145deg,#0d1b29,#132d43 60%,#0d1b29);box-shadow:0 22px 46px rgba(8,23,35,.22)}.scan-terminal{border:1px solid rgba(240,190,55,.65);border-radius:20px;padding:36px 28px;background:radial-gradient(circle at 50% 22%,rgba(232,180,43,.16),transparent 33%),rgba(0,0,0,.12);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:#fff}.scan-rings{width:112px;height:112px;border:1px solid rgba(243,199,82,.65);border-radius:50%;display:grid;place-items:center;color:#f5c33d;font-size:42px;box-shadow:0 0 0 16px rgba(245,195,61,.07),0 0 0 33px rgba(245,195,61,.035);margin-bottom:38px;animation:pulse 2.6s infinite}.terminal-label{font-size:11px;font-weight:850;letter-spacing:1.3px;color:#e7bd48}.scan-terminal h3{font-size:clamp(24px,2vw,32px);margin:10px 0;letter-spacing:-.7px}.scan-terminal p{color:#cbd6df;max-width:340px;margin:0;line-height:1.55}.scan-terminal code{margin-top:25px;color:#f6d67d;background:rgba(255,255,255,.07);border-radius:10px;padding:9px 11px;font-size:12px}.transaction-console{border:1px solid rgba(255,255,255,.13);border-radius:20px;padding:24px;background:rgba(255,255,255,.035);color:#fff}.console-heading{display:flex;justify-content:space-between;gap:15px;align-items:flex-start;margin-bottom:16px}.console-heading span{display:block;font-size:12px;font-weight:850;letter-spacing:1px;color:#f2c74f}.console-heading small{color:#acbdc9;font-size:11px}.identity-card-dark{min-height:235px;border-radius:16px;border:1px solid rgba(255,255,255,.09);background:rgba(0,0,0,.14);padding:20px}.console-empty{height:190px;display:grid;place-items:center;text-align:center;color:#b6c3cc}.console-empty i{font-size:40px;color:#e3bd4d;display:block;margin-bottom:10px}.console-empty p{margin:0}.identity-name-dark{font-size:27px;letter-spacing:-.6px;margin:0 0 5px}.identity-vehicle-dark{color:#c0ced6;margin:0 0 18px}.identity-grid-dark{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.info-box-dark{border:1px solid rgba(255,255,255,.1);border-radius:13px;padding:11px;background:rgba(255,255,255,.04)}.info-box-dark span{display:block;color:#adbdc8;font-size:10px;text-transform:uppercase;letter-spacing:.55px;margin-bottom:5px}.info-box-dark b{font-size:14px}.operations-console .input-group-text,.operations-console .form-control{background:#111f2d;border-color:rgba(255,255,255,.15);color:#fff}.operations-console .form-control::placeholder{color:#71828e}.fg-transaction-btn{font-weight:850;background:linear-gradient(135deg,#f2c446,#cf920c);border:0;color:#162535;padding:13px}.fg-transaction-btn:hover{background:linear-gradient(135deg,#f8d05c,#da9d12);color:#162535}

/* Warga */
.warga-hero{min-height:180px;border-radius:24px;padding:30px;background:radial-gradient(circle at 86% -20%,rgba(255,222,129,.28),transparent 33%),linear-gradient(135deg,#102536,#163e57);color:#fff;display:flex;align-items:center;gap:24px;box-shadow:0 20px 38px rgba(14,37,54,.16)}.warga-hero h2{font-size:clamp(30px,3vw,44px);letter-spacing:-1px;margin:7px 0}.warga-hero p{margin:0;color:#d6e1e8}.warga-usage-section{padding-right:22px;border-right:1px solid #edf1f4}.usage-overview{display:flex;align-items:center;justify-content:center;gap:24px;padding:20px 0 4px;flex-wrap:wrap}.usage-donut{width:138px;height:138px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--fg-amber) 0deg,#edf2f5 0deg);position:relative}.usage-donut:after{content:"";position:absolute;width:101px;height:101px;border-radius:50%;background:#fff}.usage-donut span{z-index:1;font-weight:850;font-size:21px}.usage-overview strong{display:block;font-size:30px;letter-spacing:-1px}.usage-overview p{color:var(--fg-muted);margin:5px 0}.usage-remaining{display:inline-block;margin-top:6px;padding:7px 9px;border-radius:10px;background:var(--fg-amber-soft);color:#765405;font-size:12px;font-weight:750}.warga-history-section{padding-left:4px}

/* Modal & toast */
.modal-content{border-radius:20px}.modal-header,.modal-footer{border-color:#edf1f4}.toast{border-radius:14px}.toast.success{background:#137653;color:#fff}.toast.error{background:#b43e45;color:#fff}.toast.warning{background:#9a6a0b;color:#fff}.result-item{border:1px solid var(--fg-line);border-radius:12px;padding:12px;background:#fbfcfd}.result-item span{display:block;color:var(--fg-muted);font-size:10px;text-transform:uppercase;letter-spacing:.55px;margin-bottom:5px}.result-item strong{font-size:14px}

/* Login */
.login-page{min-height:100vh;background:linear-gradient(135deg,#0b1c2b 0%,#12344d 48%,#edf2f5 48%,#f6f8fa 100%)}.login-page-main{min-height:100vh;display:grid;place-items:center;padding:28px}.login-container{max-width:1120px}.login-shell{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(380px,.92fr);overflow:hidden;border-radius:28px;background:#fff;box-shadow:0 28px 80px rgba(3,15,24,.28)}.login-side{min-height:560px;padding:56px;background:radial-gradient(circle at 15% 16%,rgba(244,198,70,.22),transparent 28%),linear-gradient(145deg,#102536,#0b3852);color:#fff;display:flex;flex-direction:column;justify-content:center}.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:36px}.login-brand strong{display:block;font-size:20px}.login-brand small{display:block;color:#c6d6de;font-size:11px;margin-top:4px}.login-kicker{color:#f1c34b}.login-side h1{font-size:clamp(32px,3.3vw,49px);line-height:1.04;letter-spacing:-1.55px;margin:11px 0 17px;max-width:570px}.login-side>p{color:#c6d7e1;line-height:1.7;font-size:15px;max-width:510px;margin:0}.login-chip-list{display:flex;gap:9px;flex-wrap:wrap;margin-top:26px}.login-chip{border:1px solid rgba(255,255,255,.18);color:#e6f0f4;border-radius:999px;padding:8px 11px;font-size:11px}.login-chip i{color:#f3c744;margin-right:5px}.developer-going{margin-top:auto;display:flex;align-items:center;gap:10px;padding-top:42px;color:#d5e2e8}.developer-going>i{width:36px;height:36px;display:grid;place-items:center;border-radius:11px;background:rgba(255,255,255,.09);color:#f2c443;font-size:17px}.developer-going b,.developer-going small{display:block}.developer-going b{font-size:12px}.developer-going small{margin-top:2px;font-size:10px;color:#f5ca58;text-transform:uppercase;letter-spacing:.75px}.login-form-side{background:#fff;display:grid;place-items:center;padding:42px}.login-form-wrap{width:min(390px,100%)}.login-icon{width:52px;height:52px;display:grid;place-items:center;border-radius:16px;background:var(--fg-amber-soft);color:var(--fg-amber-dark);font-size:25px;margin-bottom:18px}.login-form-wrap h2{font-size:29px;letter-spacing:-.8px;margin:0 0 8px}.login-form-wrap .form-control{border-radius:13px;padding:12px 14px}.login-submit{width:100%;border:0;border-radius:13px;padding:13px 15px;background:linear-gradient(135deg,#172d42,#102333);color:#fff;font-weight:850;box-shadow:0 12px 22px rgba(16,37,54,.18)}.login-submit:hover{background:linear-gradient(135deg,#213b54,#142b3e);color:#fff}.login-submit:disabled{opacity:.8;cursor:wait}.login-success-screen{min-height:100vh;background:linear-gradient(135deg,#0d2335,#133b53);display:grid;place-items:center;padding:24px}.login-success-card{text-align:center;color:#fff}.success-check{width:78px;height:78px;display:grid;place-items:center;border-radius:50%;margin:0 auto 18px;background:#e4f7ec;color:#16724c;font-size:44px;box-shadow:0 0 0 14px rgba(255,255,255,.08)}.login-success-card h1{font-size:34px;letter-spacing:-1px;margin:8px 0}.login-success-card p{color:#ccdae2;margin:0 0 16px}

/* Entrance splash */
.app-splash{position:fixed;inset:0;z-index:2000;background:linear-gradient(145deg,#0d2234,#143b54);display:grid;place-items:center;color:#fff;animation:splashFade 1.25s ease forwards;pointer-events:none}.splash-card{text-align:center;animation:splashRise .55s ease both}.splash-mark{width:78px;height:78px;display:grid;place-items:center;border-radius:24px;margin:0 auto 16px;background:linear-gradient(145deg,#f5cf5a,#d79d17);color:#11263a;font-size:28px;font-weight:900}.splash-card strong{display:block;font-size:28px;letter-spacing:-.9px}.splash-card span{display:block;font-size:12px;color:#c8d8e1;margin-top:5px}.splash-loader{width:120px;height:4px;border-radius:999px;background:rgba(255,255,255,.16);overflow:hidden;margin:22px auto 0}.splash-loader i{display:block;height:100%;background:#efbd37;border-radius:999px;animation:loadLine .9s ease forwards}

@keyframes pulse{0%,100%{transform:scale(1);box-shadow:0 0 0 16px rgba(245,195,61,.07),0 0 0 33px rgba(245,195,61,.035)}50%{transform:scale(1.04);box-shadow:0 0 0 20px rgba(245,195,61,.045),0 0 0 40px rgba(245,195,61,.018)}}@keyframes splashRise{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}@keyframes splashFade{0%,72%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes loadLine{from{width:0}to{width:100%}}

/* Zoom-aware / responsive behavior: CSS viewport becomes narrower as browser zoom increases. */
@media (max-width:1199px) and (min-width:992px){.app-sidebar{width:86px;padding-left:12px;padding-right:12px}.brand-link{justify-content:center;padding-left:0;padding-right:0}.sidebar-label{display:none!important}.app-nav .nav-link{justify-content:center;padding:14px 8px}.app-main{margin-left:86px;padding-left:24px;padding-right:24px}.sidebar-user{padding-left:0;padding-right:0}.sidebar-user>div{justify-content:center}.sidebar-logout{padding:11px;justify-content:center}.app-sidebar .nav-link{position:relative}.app-sidebar .nav-link:hover::after{content:attr(title);position:absolute;left:76px;top:50%;transform:translateY(-50%);white-space:nowrap;background:#162d42;color:#fff;padding:8px 10px;border-radius:9px;font-size:12px;box-shadow:0 8px 20px rgba(0,0,0,.2);z-index:1040}}
@media (max-width:991px){.app-main{margin-left:0;padding:22px 20px 42px}.app-topbar{margin-bottom:24px}.page-head{align-items:flex-start;flex-direction:column}.period-control{width:100%;max-width:260px}.reader-status-box{justify-items:start}.reader-status-box small{text-align:left}.warga-usage-section{padding-right:0;border-right:0;border-bottom:1px solid #edf1f4;padding-bottom:24px}.warga-history-section{padding-left:0;padding-top:4px}.warga-hero{flex-direction:column;align-items:flex-start}}
@media (max-width:767px){.app-main{padding:18px 13px 34px}.app-topbar{min-height:44px;margin-bottom:20px}.app-topbar h1{font-size:25px}.topbar-heading{min-width:0}.topbar-heading h1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:70vw}.fg-card .card-body{padding:17px}.metric-card{padding:18px}.metric-icon{display:none}.chart-holder{min-height:275px}.fg-chart{min-width:490px}.operations-console{padding:13px}.scan-terminal{padding:30px 20px;min-height:345px}.transaction-console{padding:17px}.identity-grid-dark{grid-template-columns:1fr}.reader-status-box{width:100%}.warga-hero{padding:23px 20px}.warga-hero h2{font-size:31px}.table th,.table td{white-space:nowrap}.modal-dialog{margin:10px}.form-control,.form-select{font-size:16px}.app-topbar .text-secondary{display:none}.login-page-main{padding:16px}.login-shell{grid-template-columns:1fr;border-radius:20px}.login-side{min-height:auto;padding:34px 26px}.login-side h1{font-size:34px}.developer-going{padding-top:28px}.login-form-side{padding:34px 24px}.login-chip-list{margin-top:20px}}
@media (max-width:440px){.metric-card strong{font-size:28px}.login-side h1{font-size:30px}.card-title-row{flex-direction:column}.chart-badge{align-self:flex-start}}


/* Session handling */
.session-warning-modal{border-radius:22px}.session-warning-icon{width:52px;height:52px;display:grid;place-items:center;border-radius:16px;background:#fff6df;color:#9a6a0b;font-size:25px;margin-bottom:16px}.logout-page{min-height:100vh;background:linear-gradient(145deg,#0d2234,#143b54);display:grid;place-items:center;padding:24px}.logout-screen{display:grid;place-items:center;text-align:center;color:#fff}.logout-screen .splash-card{animation:splashRise .45s ease both}.logout-screen .splash-card strong{display:block;font-size:32px;letter-spacing:-1px}.logout-screen .splash-card span{display:block;color:#c8d8e1;margin-top:6px;font-size:13px}
