/* SIMALKES: sistem desain.
   Tata letak: sidebar (rail ikon di layar sedang, bilah bawah di ponsel) + topbar + konten selebar layar (maks 1760px, dipusatkan).
   Tanpa font eksternal (jalan di jaringan tertutup). Semua warna lewat token; tema terang/gelap/otomatis. */
:root{
  --bg:#f3f5f8; --surface:#ffffff; --surface2:#f1f4f7; --surface3:#e6ebf0; --fg:#0f1f2e; --muted:#5a6b7b; --line:#e0e6ed; --line2:#cdd6df;
  --accent:#0a7c7c; --accent-h:#086a6a; --accent-fg:#ffffff; --accent-soft:#def2f1; --accent-line:#a7dad7;
  --ok:#15803d; --ok-soft:#dcfce7; --warn:#a15c07; --warn-soft:#fef0cf; --bad:#c0262d; --bad-soft:#fde4e4; --info:#1d4ed8; --info-soft:#e4ebff;
  --shadow:0 1px 2px rgba(15,31,46,.05),0 8px 24px rgba(15,31,46,.05); --shadow-pop:0 12px 40px rgba(15,31,46,.18);
  --r:12px; --r-s:8px; --side:256px; --top:60px; --sel:#e9f6f5;
  --f-body:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,'Helvetica Neue',Roboto,Arial,sans-serif;
  --f-mono:'Cascadia Mono',Consolas,'SFMono-Regular',Menlo,monospace;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#0a1317; --surface:#111d23; --surface2:#16252d; --surface3:#1d303a; --fg:#e5edf1; --muted:#8ea3af; --line:#223540; --line2:#2d4452;
  --accent:#3fc5bd; --accent-h:#5fd6cf; --accent-fg:#052321; --accent-soft:#143a3a; --accent-line:#1f6561;
  --ok:#5fd08c; --ok-soft:#14392a; --warn:#f2b44f; --warn-soft:#3d2d0c; --bad:#ff8c86; --bad-soft:#47201f; --info:#8fb5f5; --info-soft:#1c2f4e;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25); --shadow-pop:0 12px 40px rgba(0,0,0,.5); --sel:#14313a; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#0a1317; --surface:#111d23; --surface2:#16252d; --surface3:#1d303a; --fg:#e5edf1; --muted:#8ea3af; --line:#223540; --line2:#2d4452;
  --accent:#3fc5bd; --accent-h:#5fd6cf; --accent-fg:#052321; --accent-soft:#143a3a; --accent-line:#1f6561;
  --ok:#5fd08c; --ok-soft:#14392a; --warn:#f2b44f; --warn-soft:#3d2d0c; --bad:#ff8c86; --bad-soft:#47201f; --info:#8fb5f5; --info-soft:#1c2f4e;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25); --shadow-pop:0 12px 40px rgba(0,0,0,.5); --sel:#14313a; color-scheme:dark}

*{box-sizing:border-box}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
html,body{margin:0}
body{background:var(--bg);color:var(--fg);font:14px/1.5 var(--f-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4{margin:0;line-height:1.25;font-weight:650;letter-spacing:-.01em}
h2{font-size:22px} h3{font-size:15px} h4{font-size:13px}
p{margin:0}
a{color:var(--accent);text-underline-offset:2px}
a:hover{color:var(--accent-h)}
button,input,select,textarea{font:inherit;color:inherit}
.mono{font-family:var(--f-mono);font-size:.92em} .muted{color:var(--muted)} .small{font-size:12.5px} .num{text-align:right;font-variant-numeric:tabular-nums}
.ik{width:18px;height:18px;flex:none}
.skip{position:absolute;left:-999px;top:8px;background:var(--accent);color:var(--accent-fg);padding:8px 14px;border-radius:var(--r-s);z-index:200}
.skip:focus{left:8px}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

/* ---------- kerangka ---------- */
.app{display:grid;grid-template-columns:var(--side) minmax(0,1fr);min-height:100vh}
.sidebar{position:sticky;top:0;height:100vh;overflow-y:auto;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:14px 12px 12px;gap:6px;z-index:40}
.brand{display:flex;align-items:center;gap:11px;padding:4px 8px 14px}
.logo{width:36px;height:36px;border-radius:10px;background:var(--accent);color:var(--accent-fg);display:grid;place-items:center;flex:none}
.logo svg{width:20px;height:20px}
.brand b{display:block;font-size:16px;letter-spacing:.01em;line-height:1.15}
.brand small{display:block;font-size:11px;color:var(--muted);line-height:1.25;margin-top:2px}
.nav{display:grid;gap:2px}
.nav-grup{padding:14px 10px 4px;font:600 10.5px var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.nav a{display:flex;align-items:center;gap:11px;padding:0 10px;height:38px;border-radius:var(--r-s);color:var(--fg);text-decoration:none;position:relative;font-weight:500}
.nav a .ik{color:var(--muted)}
.nav a:hover{background:var(--surface2)}
.nav a.on{background:var(--accent-soft);color:var(--accent);font-weight:620}
.nav a.on .ik{color:var(--accent)}
.nav a.on::before{content:"";position:absolute;left:-12px;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
.nav .cnt{margin-left:auto}
.side-foot{margin-top:auto;padding:10px 8px 2px;border-top:1px solid var(--line);font-size:11.5px;color:var(--muted)}
.content{min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:30;height:var(--top);background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:saturate(1.4) blur(8px);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:14px;padding:0 clamp(14px,2vw,32px)}
.crumb{display:flex;align-items:center;gap:8px;color:var(--muted);white-space:nowrap}
.crumb b{color:var(--fg);font-weight:620}
.crumb .sep{opacity:.5}
.search{position:relative;flex:1;min-width:0;max-width:560px;margin-inline:auto 0}
.search>.ik{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}
.search input{width:100%;height:38px;padding:0 40px 0 38px;background:var(--surface2);border:1px solid transparent;border-radius:99px}
.search input:focus{background:var(--surface);border-color:var(--accent);outline:none;box-shadow:0 0 0 3px var(--accent-soft)}
.search kbd{position:absolute;right:11px;top:50%;transform:translateY(-50%);font:500 11px var(--f-mono);color:var(--muted);border:1px solid var(--line2);border-radius:5px;padding:1px 6px;background:var(--surface)}
.sr{position:absolute;left:0;right:0;top:calc(100% + 8px);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-pop);max-height:min(70vh,520px);overflow:auto;padding:6px;z-index:60}
.sr h5{margin:8px 10px 4px;font:600 10.5px var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.sr a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r-s);color:var(--fg);text-decoration:none}
.sr a:hover,.sr a.aktif{background:var(--accent-soft)}
.sr a .t{min-width:0;flex:1} .sr a .t b{display:block;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sr .kosong{padding:16px;text-align:center;color:var(--muted)}
.top-actions{display:flex;align-items:center;gap:8px;margin-left:auto;position:relative}
.icon-btn{all:unset;box-sizing:border-box;cursor:pointer;width:38px;height:38px;border-radius:99px;display:grid;place-items:center;position:relative;color:var(--fg)}
.icon-btn:hover{background:var(--surface2)} .icon-btn:focus-visible{outline:2px solid var(--accent)}
.icon-btn .cnt{position:absolute;top:1px;right:0}
.menu-btn{display:none}
.avatar{all:unset;box-sizing:border-box;cursor:pointer;width:36px;height:36px;border-radius:99px;background:var(--accent);color:var(--accent-fg);display:grid;place-items:center;font:700 13px var(--f-body)}
.avatar:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pop{position:absolute;right:0;top:calc(100% + 8px);min-width:270px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-pop);padding:6px;z-index:70}
.pop .who{padding:10px 12px 12px;border-bottom:1px solid var(--line);margin-bottom:6px}
.pop .who b{display:block} .pop .who span{color:var(--muted);font-size:12.5px;display:block}
.pop button.mi,.pop a.mi{all:unset;box-sizing:border-box;cursor:pointer;display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border-radius:var(--r-s);color:var(--fg)}
.pop button.mi:hover,.pop a.mi:hover{background:var(--surface2)} .pop .ik{color:var(--muted)}
.pop .bahaya{color:var(--bad)} .pop .bahaya .ik{color:var(--bad)}
.pop .tema{padding:6px 12px 10px}
.seg{display:flex;gap:2px;padding:3px;background:var(--surface2);border-radius:var(--r-s)}
.seg button{all:unset;box-sizing:border-box;cursor:pointer;flex:1;text-align:center;padding:6px 8px;border-radius:6px;font-size:12.5px;color:var(--muted);display:flex;align-items:center;justify-content:center;gap:6px}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--fg);box-shadow:0 1px 2px rgba(0,0,0,.12)}
.page{width:100%;max-width:1760px;margin-inline:auto;padding:clamp(16px,2vw,32px);display:grid;grid-template-columns:minmax(0,1fr);gap:18px;align-content:start;min-width:0}
.page:focus{outline:none}
.page>*,.dgrid>*,.panel>*{min-width:0}

/* ---------- komponen umum ---------- */
.mh{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap}
.mh h2{font-size:clamp(20px,1.6vw,26px)} .mh p{margin-top:4px;color:var(--muted);font-size:13.5px}
.mh .back{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);text-decoration:none;margin-bottom:6px}
.mh .back:hover{color:var(--accent)}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.g2{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr))}
.g3{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}
.dgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}
.c12{grid-column:span 12}.c8{grid-column:span 8}.c7{grid-column:span 7}.c6{grid-column:span 6}.c5{grid-column:span 5}.c4{grid-column:span 4}
@media (max-width:1280px){.c8,.c7,.c6,.c5,.c4{grid-column:span 12}.c4.setengah,.c6.setengah{grid-column:span 6}}
@media (max-width:760px){.c4.setengah,.c6.setengah{grid-column:span 12}}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:18px;display:grid;grid-template-columns:minmax(0,1fr);gap:14px;align-content:start;min-width:0;box-shadow:var(--shadow)}
.panel.flat{box-shadow:none}
.panel.nopad{padding:0;gap:0;overflow:hidden}
.ph{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.ph h3{display:flex;align-items:center;gap:8px}
.ph .ik{color:var(--muted)}
.lbl{font:600 11px var(--f-body);letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
hr.sp{border:0;border-top:1px solid var(--line);width:100%;margin:0}

/* tombol */
.btn{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:7px;height:38px;padding:0 15px;border-radius:var(--r-s);background:var(--accent);color:var(--accent-fg);font-weight:600;font-size:13.5px;border:1px solid var(--accent);white-space:nowrap;transition:background .12s,border-color .12s}
.btn:hover{background:var(--accent-h);border-color:var(--accent-h);color:var(--accent-fg)}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.btn.ghost{background:var(--surface);color:var(--fg);border-color:var(--line2)}
.btn.ghost:hover{background:var(--surface2);border-color:var(--line2);color:var(--fg)}
.btn.soft{background:var(--accent-soft);color:var(--accent);border-color:transparent}
.btn.soft:hover{background:var(--accent-line);color:var(--accent)}
.btn.danger{background:var(--bad);border-color:var(--bad);color:#fff}
.btn.danger.ghost{background:var(--surface);color:var(--bad);border-color:var(--bad-soft)}
.btn.sm{height:30px;padding:0 11px;font-size:12.5px;border-radius:7px}
.btn.lg{height:44px;padding:0 20px;font-size:14.5px}
.btn:disabled,.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}
.btn .ik{width:16px;height:16px}
.chip{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;border-radius:99px;border:1px solid var(--line2);background:var(--surface);font-size:13px;color:var(--fg)}
.chip:hover{background:var(--surface2)}
.chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.chip[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-fg);font-weight:600}
.chip .n{font:600 11px var(--f-mono);opacity:.75}

/* formulir */
input,select,textarea{background:var(--surface);border:1px solid var(--line2);border-radius:var(--r-s);padding:0 12px;height:38px;width:100%;transition:border-color .12s,box-shadow .12s}
textarea{height:auto;min-height:84px;padding:9px 12px;resize:vertical;line-height:1.45}
select{padding-right:30px}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
input[type=checkbox],input[type=radio]{width:18px;height:18px;min-height:0;padding:0;accent-color:var(--accent);flex:none}
input[type=file]{height:auto;padding:7px 10px}
input::placeholder,textarea::placeholder{color:var(--muted);opacity:.8}
label{display:grid;gap:5px;font-size:12.5px;color:var(--muted);font-weight:600}
label.inline{display:flex;align-items:center;gap:10px;color:var(--fg);font-weight:500;font-size:14px}
.f-hint{font-size:12px;color:var(--muted);font-weight:400}
.f-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:12px}
.err{color:var(--bad);font-size:13px;min-height:0}
.err:empty{display:none}
.rq{color:var(--bad);font-weight:700}

/* lencana, status */
.pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:550;padding:3px 10px;border-radius:99px;white-space:nowrap;line-height:1.6}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.pill.plain::before{display:none}
.ok{background:var(--ok-soft);color:var(--ok)} .warn{background:var(--warn-soft);color:var(--warn)} .bad{background:var(--bad-soft);color:var(--bad)} .info{background:var(--info-soft);color:var(--info)} .neutral{background:var(--surface3);color:var(--muted)}
.tag{display:inline-flex;align-items:center;gap:5px;font:600 11px var(--f-body);padding:2px 8px;border-radius:6px;background:var(--surface3);color:var(--muted)}
.cnt{display:inline-grid;place-items:center;min-width:19px;height:19px;padding:0 5px;border-radius:99px;background:var(--bad);color:#fff;font:700 11px var(--f-body)}
.notice{display:flex;gap:12px;justify-content:space-between;align-items:center;flex-wrap:wrap;padding:12px 16px;border-radius:var(--r);background:var(--warn-soft);border:1px solid color-mix(in srgb,var(--warn) 25%,transparent);font-size:13.5px}
.notice .ik{color:var(--warn)} .notice>span{display:flex;gap:10px;align-items:center;flex:1;min-width:220px}
.notice.info{background:var(--info-soft);border-color:color-mix(in srgb,var(--info) 25%,transparent)} .notice.info .ik{color:var(--info)}
.notice.bad{background:var(--bad-soft);border-color:color-mix(in srgb,var(--bad) 25%,transparent)} .notice.bad .ik{color:var(--bad)}
.empty{padding:40px 20px;text-align:center;color:var(--muted);display:grid;gap:10px;justify-items:center}
.empty .ik{width:34px;height:34px;opacity:.5}
.empty b{color:var(--fg);font-size:15px}

/* tabel */
.scroll{overflow-x:auto}
.tscroll{overflow:auto;max-height:calc(100vh - 330px);min-height:140px}
table{border-collapse:separate;border-spacing:0;width:100%;font-size:13.5px}
th{position:sticky;top:0;z-index:2;background:var(--surface2);font:600 11px var(--f-body);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
th.num{text-align:right}
th button{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:5px;color:inherit;letter-spacing:inherit;text-transform:inherit;font:inherit}
th button:hover{color:var(--fg)} th button .ik{width:13px;height:13px;opacity:.5} th[aria-sort] button{color:var(--accent)} th[aria-sort] button .ik{opacity:1}
td{padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
tbody tr.go{cursor:pointer}
tbody tr.go:hover td{background:var(--surface2)}
tbody tr.sel td{background:var(--sel)}
tbody tr.go:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.padat td{padding-top:6px;padding-bottom:6px}
td .sub{display:block;color:var(--muted);font-size:12px;margin-top:1px}
.tfoot{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;border-top:1px solid var(--line);font-size:13px;color:var(--muted);background:var(--surface)}
.pager{display:flex;align-items:center;gap:4px}
.pager button{all:unset;box-sizing:border-box;cursor:pointer;min-width:32px;height:32px;display:grid;place-items:center;border-radius:7px;color:var(--fg);font-size:13px}
.pager button:hover{background:var(--surface2)} .pager button[aria-current=page]{background:var(--accent);color:var(--accent-fg);font-weight:650} .pager button:disabled{opacity:.35;cursor:default}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.toolbar .grow{flex:1 1 260px;min-width:200px;position:relative}
.toolbar .grow .ik{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}
.toolbar .grow input{padding-left:38px}
.toolbar select{width:auto;min-width:150px;max-width:230px}
.bulk{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:10px 14px;background:var(--accent-soft);color:var(--accent);border-radius:var(--r-s);font-weight:600;font-size:13.5px}

/* kartu angka */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,172px),1fr));gap:14px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;display:grid;grid-template-columns:auto 1fr;gap:2px 14px;align-items:center;color:inherit;text-decoration:none;box-shadow:var(--shadow);position:relative;transition:border-color .12s,transform .12s}
a.kpi:hover{border-color:var(--accent-line);transform:translateY(-1px)}
.kpi .kic{grid-row:span 3;width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:var(--surface3);color:var(--muted)}
.kpi .kic .ik{width:22px;height:22px}
.kpi b{font-size:28px;line-height:1.1;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.kpi span{font-size:12.5px;color:var(--muted)}
.kpi small{font-size:12px;color:var(--muted)}
.kpi.k-ok .kic{background:var(--ok-soft);color:var(--ok)} .kpi.k-bad .kic{background:var(--bad-soft);color:var(--bad)} .kpi.k-warn .kic{background:var(--warn-soft);color:var(--warn)} .kpi.k-info .kic{background:var(--info-soft);color:var(--info)} .kpi.k-ac .kic{background:var(--accent-soft);color:var(--accent)}
.kpi.k-bad b{color:var(--bad)} .kpi.k-warn b{color:var(--warn)}
.skel{background:linear-gradient(90deg,var(--surface2),var(--surface3),var(--surface2));background-size:200% 100%;animation:shim 1.3s infinite;border-radius:var(--r-s)}
@keyframes shim{to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.skel{animation:none}*{scroll-behavior:auto!important;transition:none!important}}

/* grafik */
.bars{display:grid;gap:6px}
.bar{display:grid;grid-template-columns:minmax(90px,150px) minmax(0,1fr) auto;gap:12px;align-items:center;font-size:13px;color:inherit;text-decoration:none;padding:5px 6px;border-radius:6px}
a.bar:hover{background:var(--surface2)}
.bar .t{height:12px;background:var(--surface3);border-radius:99px;display:flex;overflow:hidden}
.bar .t i{display:block;height:100%}
.bar b{font:600 12.5px var(--f-mono);text-align:right;min-width:28px}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px}
.donut{display:grid;grid-template-columns:150px minmax(0,1fr);gap:20px;align-items:center}
.donut svg{width:150px;height:150px;display:block}
.donut .ctr{font:700 26px var(--f-body);fill:var(--fg)} .donut .sub{font:500 11px var(--f-body);fill:var(--muted)}
.dleg{display:grid;gap:8px;font-size:13px}
.dleg div{display:flex;align-items:center;gap:9px} .dleg i{width:10px;height:10px;border-radius:3px;flex:none} .dleg b{margin-left:auto;font-variant-numeric:tabular-nums}
.weeks{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:10px;align-items:end;height:170px}
.wk{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:6px;height:100%;min-width:0}
.wk .st{width:100%;max-width:44px;display:flex;flex-direction:column;justify-content:flex-end;flex:1;gap:2px}
.wk .st i{display:block;border-radius:5px 5px 2px 2px;min-height:0}
.wk small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%} .wk em{font:600 11px var(--f-mono);font-style:normal;color:var(--fg)}
.todo{display:grid}
.todo a,.todo div.it{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:10px 4px;border-bottom:1px solid var(--line);color:inherit;text-decoration:none;cursor:pointer}
.todo>:last-child{border-bottom:0}
.todo a:hover,.todo div.it:hover{background:var(--surface2)}
.todo .ti{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--surface3);color:var(--muted)}
.todo .ti.bad{background:var(--bad-soft);color:var(--bad)} .todo .ti.warn{background:var(--warn-soft);color:var(--warn)} .todo .ti.info{background:var(--info-soft);color:var(--info)}
.todo b{display:block;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .todo .s{display:block;font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);overflow-x:auto}
.tabs button{all:unset;box-sizing:border-box;cursor:pointer;padding:10px 14px;font-weight:600;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;display:flex;gap:7px;align-items:center}
.tabs button:hover{color:var(--fg)} .tabs button[aria-selected="true"]{color:var(--accent);border-bottom-color:var(--accent)} .tabs button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

/* detail alat */
.hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:start}
.hero h2{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.hero .meta{display:flex;gap:8px 16px;flex-wrap:wrap;margin-top:8px;color:var(--muted);font-size:13px;align-items:center}
.hero .meta span{display:inline-flex;gap:6px;align-items:center}
.qrbox{width:112px;height:112px;padding:7px;background:#fff;border:1px solid var(--line);border-radius:var(--r-s)}
.qrbox svg{width:100%;height:100%;display:block}
.kv{display:grid;grid-template-columns:minmax(104px,150px) minmax(0,1fr);gap:9px 14px;font-size:13.5px;margin:0}
.kv dt{color:var(--muted)} .kv dd{margin:0;font-weight:500;overflow-wrap:anywhere}
.tl{list-style:none;margin:0;padding:0;position:relative}
.tl li{display:grid;grid-template-columns:96px minmax(0,1fr);gap:14px;padding:11px 0;border-bottom:1px dashed var(--line);font-size:13px}
.tl li:last-child{border-bottom:0}
.tl time{font:12px var(--f-mono);color:var(--muted)}
.tl b{font-weight:600} .tl span{display:block;color:var(--muted);overflow-wrap:anywhere}
.steps{display:flex;gap:4px;flex-wrap:wrap}
.steps span{font:600 11.5px var(--f-body);padding:5px 10px;border-radius:99px;background:var(--surface3);color:var(--muted)}
.steps span.on{background:var(--accent);color:var(--accent-fg)}
.checks{display:grid;gap:7px}
.checks label{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--fg);font-weight:450;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-s);cursor:pointer;background:var(--surface)}
.checks label:hover{background:var(--surface2)}
.sugg{border:1px solid color-mix(in srgb,var(--info) 30%,transparent);background:var(--info-soft);border-radius:var(--r-s);padding:12px 14px;font-size:13px;display:grid;gap:5px}

/* stepper (alat baru) */
.stepper{display:flex;gap:0;align-items:center;flex-wrap:wrap;margin-bottom:2px}
.stepper .s{display:flex;align-items:center;gap:10px;padding:6px 4px;color:var(--muted);font-weight:600}
.stepper .s .bt{width:28px;height:28px;border-radius:99px;border:2px solid var(--line2);display:grid;place-items:center;font:700 12.5px var(--f-body);background:var(--surface)}
.stepper .s.on{color:var(--fg)} .stepper .s.on .bt{border-color:var(--accent);background:var(--accent);color:var(--accent-fg)}
.stepper .s.done .bt{border-color:var(--ok);background:var(--ok);color:#fff}
.stepper .ln{flex:0 1 44px;min-width:14px;height:2px;background:var(--line2);margin:0 6px}
.wizfoot{position:sticky;bottom:0;display:flex;gap:10px;justify-content:space-between;align-items:center;padding:14px 18px;background:var(--surface);border-top:1px solid var(--line);margin:0 -18px -18px;border-radius:0 0 var(--r) var(--r)}
.opt{display:flex;gap:12px;align-items:flex-start;padding:14px;border:1.5px solid var(--line2);border-radius:var(--r);cursor:pointer;background:var(--surface);color:var(--fg);font-weight:400;font-size:14px}
.opt:hover{border-color:var(--accent-line)} .opt:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}
.opt b{display:block;font-weight:620} .opt small{color:var(--muted);font-size:12.5px;display:block;margin-top:2px}
.unitrows{display:grid;gap:8px}
.unitrow{display:grid;grid-template-columns:36px minmax(120px,1.2fr) minmax(0,1fr) minmax(0,1fr);gap:10px;align-items:center}
.unitrow .no{font:600 12px var(--f-mono);color:var(--muted)}
@media (max-width:700px){.unitrow{grid-template-columns:1fr 1fr}.unitrow .no{grid-column:span 2}}
.ok-big{display:grid;justify-items:center;gap:10px;padding:26px 10px;text-align:center}
.ok-big .ring{width:64px;height:64px;border-radius:99px;background:var(--ok-soft);color:var(--ok);display:grid;place-items:center}.ok-big .ring .ik{width:32px;height:32px}
.cklist{display:grid;gap:6px}
.cklist .ci{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px}
.cb{display:flex;gap:8px;flex-wrap:wrap}
.rg{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:6px;max-height:240px;overflow:auto;padding:2px}

/* dialog, lembar, toast */
dialog{border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--fg);padding:0;width:min(640px,calc(100vw - 24px));max-height:calc(100vh - 24px);box-shadow:var(--shadow-pop)}
dialog[open]{display:flex;flex-direction:column}
dialog>form{display:flex;flex-direction:column;min-height:0;flex:1 1 auto}
dialog::backdrop{background:rgba(6,18,24,.55);backdrop-filter:blur(2px)}
.dh{flex:none;display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line)}
.dh h3{font-size:16px}
.db{padding:18px 20px;display:grid;gap:14px;overflow:auto;flex:1 1 auto;min-height:0;align-content:start}
.df{flex:none;padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;background:var(--surface2);border-radius:0 0 16px 16px}
.x{all:unset;cursor:pointer;width:32px;height:32px;border-radius:99px;display:grid;place-items:center;color:var(--muted);font-size:22px;line-height:1}
.x:hover{background:var(--surface3);color:var(--fg)} .x:focus-visible{outline:2px solid var(--accent)}
#toasts{position:fixed;right:max(16px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));display:grid;gap:10px;z-index:100;width:min(380px,calc(100vw - 32px))}
.toast{display:flex;gap:10px;align-items:flex-start;background:var(--fg);color:var(--bg);padding:12px 14px;border-radius:var(--r-s);font-size:13.5px;box-shadow:var(--shadow-pop);animation:naik .18s ease-out}
.toast .ik{margin-top:1px} .toast.err{background:var(--bad);color:#fff}
@keyframes naik{from{transform:translateY(8px);opacity:0}}
.sheet-bg{position:fixed;inset:0;background:rgba(6,18,24,.5);z-index:80;display:none} .sheet-bg.buka{display:block}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:90;background:var(--surface);border-radius:18px 18px 0 0;padding:10px 14px max(18px,env(safe-area-inset-bottom));max-height:82vh;overflow:auto;transform:translateY(105%);transition:transform .2s;box-shadow:var(--shadow-pop);visibility:hidden}
.sheet.buka{transform:none;visibility:visible}
.sheet .grip{width:42px;height:4px;border-radius:4px;background:var(--line2);margin:2px auto 10px}
.sheet .nav a{height:46px;font-size:15px}
.sheet .nav a.on::before{display:none}
.tabbar{display:none}

/* masuk */
.login{min-height:100vh;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);background:var(--bg)}
.login .brandside{background:linear-gradient(155deg,#075f60 0%,#0a7c7c 55%,#12958f 100%);color:#fff;padding:clamp(28px,5vw,72px);display:flex;flex-direction:column;justify-content:space-between;gap:30px;position:relative;overflow:hidden}
.login .brandside::after{content:"";position:absolute;right:-120px;bottom:-120px;width:420px;height:420px;border-radius:50%;background:rgba(255,255,255,.07)}
.login .brandside .logo{background:rgba(255,255,255,.16);color:#fff;width:46px;height:46px}
.login .brandside h1{font-size:clamp(28px,3.2vw,44px);letter-spacing:-.02em;margin:18px 0 10px;font-weight:700}
.login .brandside p{max-width:46ch;opacity:.9;font-size:15.5px;line-height:1.6}
.login ul{list-style:none;margin:0;padding:0;display:grid;gap:12px;z-index:1}
.login li{display:flex;gap:12px;align-items:flex-start;font-size:14.5px;opacity:.95}
.login li .ik{margin-top:2px;flex:none}
.login .formside{display:grid;place-items:center;padding:28px 20px}
.login form{width:min(400px,100%);display:grid;gap:16px}
.login form h2{font-size:24px}
.login form .btn{height:44px;font-size:15px}
.login .sandi{position:relative} .login .sandi button{all:unset;cursor:pointer;position:absolute;right:6px;top:25px;width:32px;height:32px;display:grid;place-items:center;color:var(--muted)}
@media (max-width:860px){.login{grid-template-columns:1fr}.login .brandside{padding:26px 22px 28px;gap:16px}.login .brandside ul{display:none}.login .brandside h1{font-size:26px;margin:12px 0 6px}}

/* lampiran, offline, notifikasi, pendataan */
.thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
.thumb{margin:0;display:grid;gap:6px;align-content:start;min-width:0}
.thumb .timg,.thumb .tpdf{display:block;width:100%;aspect-ratio:1;border:1px solid var(--line);border-radius:var(--r-s);overflow:hidden;background:var(--surface2);padding:0;cursor:pointer}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb .tpdf{display:grid;place-items:center;align-content:center;gap:4px;color:var(--fg);text-decoration:none;padding:8px;text-align:center}
.thumb .tpdf b{font:700 20px var(--f-mono);color:var(--bad)} .thumb .tpdf span{font-size:11.5px;overflow-wrap:anywhere;color:var(--muted)}
.thumb figcaption{display:grid;gap:2px}
.thapus{all:unset;cursor:pointer;color:var(--bad);font-size:12px;text-decoration:underline;justify-self:start}
dialog.lbx{width:min(960px,calc(100vw - 16px));padding:0}
.lbimg{padding:8px;display:grid;place-items:center;background:#000}
.lbimg img{max-width:100%;max-height:calc(100vh - 110px);object-fit:contain}
.offbar{position:sticky;top:0;z-index:35;background:var(--warn-soft);color:var(--fg);border-bottom:1px solid var(--warn);padding:9px 16px;font-size:13.5px;display:flex;gap:10px;justify-content:space-between;align-items:center;flex-wrap:wrap}
.qitem{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;padding:14px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.qitem p{grid-column:1/-1;margin:0;font-size:13.5px}
.fotos{display:flex;gap:8px;flex-wrap:wrap}
.fotos img,.fotos .ph{width:64px;height:64px;object-fit:cover;border-radius:6px;border:1px solid var(--line)}
.fotos .ph{display:grid;place-items:center;font-size:11px;color:var(--muted);background:var(--surface2)}
.fotos .fx{position:relative}
.fotos .fx button{position:absolute;top:-6px;right:-6px;width:22px;height:22px;border-radius:50%;border:0;background:var(--bad);color:#fff;cursor:pointer;line-height:1;font-size:14px}
.nitem{display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:start;padding:13px 16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);color:inherit;text-decoration:none}
.nitem:hover{border-color:var(--accent-line)}
.nitem.baru{border-left:4px solid var(--accent);background:var(--accent-soft)}
.nitem.penting.baru{border-left-color:var(--bad)}
.nk{font:600 11px var(--f-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding-top:3px;min-width:62px}
.nitem.penting .nk{color:var(--bad)}
.pbar{height:10px;background:var(--surface3);border-radius:99px;overflow:hidden}
.pbar i{display:block;height:100%;background:var(--ok);border-radius:99px}

@media print{.sidebar,.topbar,.tabbar,#toasts,.offbar,.sheet,.sheet-bg{display:none!important}.app{display:block}.page{padding:0;max-width:none}.panel{box-shadow:none}}

/* ---------- responsif ---------- */
@media (max-width:1179px) and (min-width:821px){ /* rail ikon */
  :root{--side:72px}
  .brand div,.nav-grup,.nav a span.lb,.side-foot{display:none}
  .brand{justify-content:center;padding:4px 0 12px}
  .sidebar{padding-inline:10px;align-items:stretch}
  .nav a{justify-content:center;padding:0;height:42px}
  .nav a .cnt{position:absolute;top:3px;right:3px;margin:0;min-width:16px;height:16px;font-size:10px}
  .nav a.on::before{left:-10px}
}
@media (max-width:820px){ /* ponsel: bilah bawah */
  .app{display:block}
  .sidebar{display:none}
  .menu-btn{display:grid}
  .crumb .sep,.crumb .app-n{display:none}
  .search{max-width:none;margin:0;flex:1}
  .search kbd{display:none}
  .top-actions .btn{display:none}
  .page{padding-bottom:calc(92px + env(safe-area-inset-bottom))}
  .tabbar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:50;background:var(--surface);border-top:1px solid var(--line);padding:6px max(6px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(6px,env(safe-area-inset-left))}
  .tabbar a,.tabbar button{all:unset;box-sizing:border-box;cursor:pointer;display:grid;justify-items:center;align-content:center;gap:2px;height:52px;border-radius:12px;color:var(--muted);font-size:11px;font-weight:600;position:relative}
  .tabbar a.on{color:var(--accent)}
  .tabbar .fab{background:var(--accent);color:var(--accent-fg);width:54px;height:54px;border-radius:99px;justify-self:center;margin-top:-20px;box-shadow:0 6px 18px rgba(10,124,124,.4);border:4px solid var(--surface)}
  .tabbar .cnt{position:absolute;top:2px;right:calc(50% - 20px)}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .kpi{padding:13px;grid-template-columns:1fr}.kpi .kic{display:none}.kpi b{font-size:24px}
  .hero{grid-template-columns:1fr}.hero .qrbox{display:none}
  .donut{grid-template-columns:1fr;justify-items:center}
  .bar{grid-template-columns:minmax(76px,96px) minmax(0,1fr) auto;gap:8px}
  .tl li{grid-template-columns:78px minmax(0,1fr)}
  .tscroll{max-height:none}
  .kv{grid-template-columns:104px minmax(0,1fr)}
  dialog{border-radius:16px 16px 0 0;margin:auto auto 0;width:100vw;max-width:100vw;max-height:92vh}
  .df{border-radius:0}
}
@media (max-width:520px){.topbar{gap:8px}.crumb{display:none}.stepper .s:not(.on) span:last-child{display:none}.stepper .ln{flex:1 1 16px}.toolbar select{flex:1 1 140px;max-width:none}.g3{grid-template-columns:1fr}}
@media (min-width:1900px){.page{padding-inline:clamp(32px,3vw,56px)}}
