:root{--ink: #16202b;--ink-2: #47576a;--ink-3: #7b8b9c;--paper: #edeff0;--surface: #ffffff;--rule: #d5dadd;--rule-2: #e6eaec;--advance: #2e6f8e;--ontime: #3f7d52;--delay: #b23b2e;--target: #c8860d;--advance-soft: #dceaf1;--ontime-soft: #dfeee4;--delay-soft: #f7dedb;--font-display: "Archivo", system-ui, sans-serif;--font-body: "IBM Plex Sans", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--ribbon-max: 200}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased}h1,h2,h3{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;margin:0}.topbar{display:flex;align-items:flex-end;gap:28px;flex-wrap:wrap;padding:14px 24px;background:var(--surface);border-bottom:1px solid var(--rule)}.brand{display:flex;align-items:center;gap:10px;margin-right:auto}.brand-mark{width:34px;height:auto}.brand-name{font-family:var(--font-display);font-weight:700;font-size:18px;letter-spacing:.02em;line-height:1.1}.brand-sub{font-size:12px;color:var(--ink-3)}.filters{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}.field{display:flex;flex-direction:column;gap:3px}.field[hidden]{display:none}.field>span{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);font-weight:500}.field-inline{flex-direction:row;align-items:center;gap:8px}.field-inline>span{text-transform:none;letter-spacing:0;font-size:12px}select,input[type=date]{font-family:var(--font-body);font-size:13px;color:var(--ink);background:var(--surface);border:1px solid var(--rule);border-radius:3px;padding:5px 8px;min-width:130px}select:focus-visible,input:focus-visible,button:focus-visible{outline:2px solid var(--advance);outline-offset:1px}.top-actions{display:flex;gap:6px}.btn,.btn-ghost{font-family:var(--font-body);font-size:13px;padding:6px 12px;border-radius:3px;cursor:pointer;border:1px solid var(--rule);background:var(--surface);color:var(--ink-2)}.btn{background:var(--ink);border-color:var(--ink);color:#fff;font-weight:500}.btn:hover{background:#223243}.btn-ghost:hover{background:var(--paper);color:var(--ink)}.tabs{display:flex;gap:2px;padding:0 24px;background:var(--surface);border-bottom:1px solid var(--rule);overflow-x:auto}.tab{font-family:var(--font-display);font-size:13px;font-weight:500;letter-spacing:.01em;padding:10px 14px;border:0;border-bottom:2px solid transparent;background:none;color:var(--ink-3);cursor:pointer;white-space:nowrap}.tab:hover{color:var(--ink)}.tab.active{color:var(--ink);border-bottom-color:var(--target)}.main{padding:20px 24px 40px;max-width:1500px}.panel[hidden]{display:none}.state{padding:40px 0;color:var(--ink-3);font-size:14px}.state-error{color:var(--delay);background:var(--delay-soft);border-left:3px solid var(--delay);padding:14px 16px}.card{background:var(--surface);border:1px solid var(--rule);border-radius:4px;padding:18px 20px;margin-bottom:16px}.card h2{font-size:15px}.card-sub{margin:3px 0 14px;font-size:12px;color:var(--ink-3)}.card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap}.card-head .card-sub{margin-bottom:14px}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.hero{display:grid;grid-template-columns:auto 1fr auto;gap:32px;align-items:center;background:var(--surface);border:1px solid var(--rule);border-radius:4px;padding:22px 24px;margin-bottom:16px}.hero-figure{text-align:left}.hero-num{font-family:var(--font-mono);font-size:52px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;color:var(--ontime)}.hero-label{font-family:var(--font-display);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);margin-top:6px}.hero-note{font-size:12px;color:var(--ink-3);margin-top:3px}.hero-ribbon{min-width:0}.ribbon-head{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-bottom:6px}.ribbon{display:flex;height:30px;border-radius:2px;overflow:hidden;background:var(--rule-2)}.ribbon>span{display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:12px;font-weight:500;color:#fff;min-width:0;overflow:hidden}.ribbon-key{display:flex;gap:16px;margin-top:8px;font-size:11px;color:var(--ink-2);flex-wrap:wrap}.ribbon-key span{display:flex;align-items:center;gap:5px}.sw{width:9px;height:9px;border-radius:2px;display:inline-block}.sw-advance{background:var(--advance)}.sw-ontime{background:var(--ontime)}.sw-delay{background:var(--delay)}.hero-stats{display:flex;gap:22px;margin:0}.hero-stats dt{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.hero-stats dd{margin:2px 0 0;font-family:var(--font-mono);font-size:19px;font-weight:500;font-variant-numeric:tabular-nums}.lt{width:100%}.lt-head,.lt-row{display:grid;grid-template-columns:minmax(180px,2fr) 62px 62px 62px minmax(200px,3fr) 74px;gap:12px;align-items:center;padding:7px 0}.lt-head{border-bottom:1px solid var(--ink);padding-bottom:6px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);font-weight:500;position:sticky;top:0;background:var(--surface);z-index:2}.lt-row{border-bottom:1px solid var(--rule-2)}.lt-row.clickable{cursor:pointer}.lt-row.clickable:hover{background:#f6f8f9}.lt-row.lvl-1{padding-left:18px;background:#fafbfc}.lt-row.lvl-2{padding-left:36px;background:#fafbfc}.lt-name{font-weight:500;min-width:0}.lt-name small{display:block;font-weight:400;font-size:11px;color:var(--ink-3)}.lt-name .caret{color:var(--ink-3);font-size:10px;margin-right:5px}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:13px;text-align:right}.num-dim{color:var(--ink-3)}.num-head{text-align:right}.bar{position:relative;height:17px;background:var(--rule-2);border-radius:2px;overflow:hidden}.bar-seg{position:absolute;top:0;bottom:0}.bar-advance{background:var(--advance)}.bar-ontime{background:var(--ontime)}.bar-delay{background:var(--delay)}.bar-target{position:absolute;top:-4px;bottom:-4px;left:50%;width:1px;background:var(--target);z-index:1}.bar-target:after{content:"";position:absolute;top:0;left:-2px;width:5px;height:3px;background:var(--target)}.pill{font-family:var(--font-mono);font-size:11px;font-weight:500;text-align:center;padding:2px 0;border-radius:2px}.pill-good{background:var(--ontime-soft);color:var(--ontime)}.pill-warn{background:#fbeed4;color:var(--target)}.pill-bad{background:var(--delay-soft);color:var(--delay)}.lt-compact .lt-head,.lt-compact .lt-row{grid-template-columns:minmax(160px,3fr) 62px 62px 62px 74px}.lt-vendor .lt-head,.lt-vendor .lt-row{grid-template-columns:minmax(200px,2fr) 62px 62px 62px minmax(200px,3fr) 74px}.mini-list{display:flex;flex-direction:column}.mini-row{display:grid;grid-template-columns:1fr auto 90px;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--rule-2)}.mini-row:last-child{border-bottom:0}.mini-row .lbl{min-width:0}.mini-row .lbl small{display:block;font-size:11px;color:var(--ink-3)}.mini-bar{height:6px;background:var(--rule-2);border-radius:3px;overflow:hidden}.mini-bar>i{display:block;height:100%;background:var(--delay)}.chart-wrap{position:relative;height:260px}.map{height:460px;border:1px solid var(--rule);border-radius:3px;background:var(--rule-2)}.leaflet-container{font-family:var(--font-body);font-size:12px}.map-key{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px}.key-btn{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-body);font-size:13px;color:var(--ink);background:var(--surface);border:1px solid var(--rule);border-radius:3px;padding:5px 10px;cursor:pointer}.key-btn i{width:16px;height:4px;border-radius:2px;flex:none}.key-btn:hover{background:var(--paper)}.key-btn.mati{color:var(--ink-3);background:var(--paper)}.key-btn.mati i{opacity:.25}.key-note{font-size:11px;color:var(--ink-3)}@media (max-width: 720px){.map{height:340px}}@media print{.map{height:320px}}.chart-tall{height:300px;margin-bottom:18px}.foot{padding:0 24px 26px;font-size:11px;color:var(--ink-3);display:flex;align-items:center;gap:5px}.live{width:7px;height:7px;border-radius:50%;display:inline-block;flex:none}.live-nyala{background:var(--ontime)}.live-putus{background:var(--delay)}.live-jeda{background:var(--target)}.live-mati{background:var(--ink-3)}@media print{.foot{display:none}}.notice{background:#fbeed4;border-left:3px solid var(--target);color:#6b4708;padding:11px 14px;border-radius:3px;font-size:13px;margin-bottom:16px}.notice strong{font-weight:600}.empty{padding:26px 0;color:var(--ink-3);font-size:13px}@media (max-width: 1100px){.hero{grid-template-columns:1fr;gap:18px}.grid-2{grid-template-columns:1fr}.lt-head,.lt-row,.lt-vendor .lt-head,.lt-vendor .lt-row{grid-template-columns:minmax(140px,2fr) 54px 54px minmax(140px,3fr) 66px}.lt-compact .lt-head,.lt-compact .lt-row{grid-template-columns:minmax(140px,3fr) 54px 54px 66px}.lt-head .hide-sm,.lt-row .hide-sm{display:none}}@media (max-width: 720px){.topbar{align-items:stretch;gap:14px}.brand{margin-right:0}.main{padding:16px 14px 30px}.hero-num{font-size:40px}.hero-stats{flex-wrap:wrap;gap:16px}.lt-head,.lt-row,.lt-vendor .lt-head,.lt-vendor .lt-row,.lt-compact .lt-head,.lt-compact .lt-row{grid-template-columns:1fr 52px 62px}.lt-head .hide-xs,.lt-row .hide-xs{display:none}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}@media print{@page{size:A4 landscape;margin:12mm}body{background:#fff;font-size:11px}.topbar,.tabs,.top-actions,.filters,.foot,.btn,.btn-ghost{display:none!important}.panel[hidden]{display:none}.card,.hero{border-color:#bbb;break-inside:avoid}.chart-wrap{height:200px}.lt-head{position:static}.lt-row{break-inside:avoid}}.login-container{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px;background:var(--bg)}.login-card{width:100%;max-width:372px;background:var(--surface);border:1px solid var(--rule);border-radius:5px;padding:32px 30px}.login-header{margin-bottom:22px}.login-header .brand{display:flex;align-items:center;gap:9px;margin-bottom:14px}.brand-label{font-family:var(--font-display);font-weight:700;font-size:18px;letter-spacing:.02em}.login-header h1,.login-header h2{font-size:19px}.login-sub{margin:5px 0 0;font-size:13px;color:var(--ink-3)}.login-form{display:flex;flex-direction:column;gap:15px}.form-group{display:flex;flex-direction:column;gap:5px}.form-group label{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);font-weight:500}.form-group input{font-family:var(--font-body);font-size:14px;color:var(--ink);background:var(--surface);border:1px solid var(--rule);border-radius:3px;padding:9px 11px;width:100%}.form-group input:focus-visible{outline:2px solid var(--advance);outline-offset:1px}.btn-login{font-family:var(--font-body);font-size:14px;font-weight:500;color:#fff;background:var(--ink);border:1px solid var(--ink);border-radius:3px;padding:10px 14px;cursor:pointer;position:relative}.btn-login:hover{background:#223243}.btn-login:disabled{opacity:.55;cursor:default}.btn-loader{display:none;gap:4px;align-items:center;justify-content:center}.btn-login.loading .btn-text{display:none}.btn-login.loading .btn-loader{display:flex}.btn-loader .dot{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.5;animation:blink 1.2s infinite}.btn-loader .dot:nth-child(2){animation-delay:.2s}.btn-loader .dot:nth-child(3){animation-delay:.4s}@keyframes blink{0%,80%,to{opacity:.25}40%{opacity:1}}.login-error:not(:empty){display:block;color:var(--delay);background:var(--delay-soft);border-left:3px solid var(--delay)}.login-footer{margin-top:18px;font-size:13px;color:var(--ink-3);text-align:center}.login-footer a{color:var(--advance);font-weight:500;text-decoration:none}.login-footer a:hover{text-decoration:underline}.hero-split{font-size:.78rem;color:var(--muted, #6b7280);letter-spacing:.01em;margin-top:.15rem}.drv-cat{font-weight:400;font-size:.75rem;color:var(--muted, #6b7280)}.drv-catatan{font-size:.8rem;color:var(--muted, #6b7280);margin:0 0 .75rem;line-height:1.5}.drv-tabel{width:100%;border-collapse:collapse;font-size:.82rem}.drv-tabel th,.drv-tabel td{padding:.45rem .5rem;border-bottom:1px solid #eceef1;text-align:left}.drv-tabel th{font-weight:600;font-size:.74rem;color:var(--muted, #6b7280)}.drv-tabel .num{text-align:right;font-variant-numeric:tabular-nums}.drv-nama{font-weight:500}.drv-sub{color:var(--muted, #9ca3af);font-size:.74rem}.drv-tag{margin-left:.4rem;font-size:.68rem;color:var(--muted, #9ca3af);font-weight:400}.drv-merah{color:#b91c1c;font-weight:600}.drv-ngebut{background:#fef6f6}.drv-sorot{border:1px solid #f0d4d4;background:snow;border-radius:8px;padding:.9rem 1rem;margin-bottom:1.75rem}.drv-sorot h3{margin:0 0 .2rem;font-size:.9rem;color:#b91c1c}.drv-sorot p{margin:0 0 .6rem;font-size:.78rem;color:var(--muted, #6b7280)}.drv-sorot ul{margin:0;padding-left:1.1rem;font-size:.82rem;line-height:1.7}.drv-bagian{font-size:.95rem;margin:2rem 0 .5rem;padding-top:1rem;border-top:1px solid #eceef1}.drv-bagian:first-child{margin-top:0;padding-top:0;border-top:0}.drv-kecil{font-size:.74rem;margin:.4rem 0 0}.drv-vendor{border:1px solid #e6e8eb;border-radius:8px;margin-bottom:.6rem;background:#fff}.drv-vendor>summary{padding:.7rem .9rem;cursor:pointer;display:flex;align-items:baseline;gap:.7rem;flex-wrap:wrap;list-style:none}.drv-vendor>summary::-webkit-details-marker{display:none}.drv-vendor>summary:before{content:"▸";color:var(--muted, #9ca3af);font-size:.8rem}.drv-vendor[open]>summary:before{content:"▾"}.drv-vendor[open]>summary{border-bottom:1px solid #eceef1}.drv-vendor-nama{font-weight:600;font-size:.88rem}.drv-vendor-cat{font-size:.75rem;color:var(--muted, #6b7280)}.drv-vendor-isi{padding:.5rem .9rem .9rem}.drv-moda{border-left:2px solid #e6e8eb;margin:.5rem 0 .5rem .3rem;padding-left:.8rem}.drv-moda>summary{cursor:pointer;display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap;padding:.35rem 0;list-style:none}.drv-moda>summary::-webkit-details-marker{display:none}.drv-moda>summary:before{content:"▸";color:var(--muted, #9ca3af);font-size:.72rem}.drv-moda[open]>summary:before{content:"▾"}.drv-moda-nama{font-weight:500;font-size:.82rem}.drv-moda-cat{font-size:.72rem;color:var(--muted, #6b7280)}.drv-nilai-blok{margin-bottom:2rem}.drv-chart-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin:1.75rem 0 .35rem;flex-wrap:wrap}.drv-chart-head h4{margin:0;font-size:.9rem}.drv-grade{display:inline-block;min-width:1.15rem;padding:.05rem .3rem;margin-left:.3rem;border-radius:4px;font-size:.7rem;font-weight:600;line-height:1.5;color:#fff;text-align:center;vertical-align:.06rem}.drv-grade-A{background:#2f7a72}.drv-grade-B{background:#3f7d52}.drv-grade-C{background:#c8860d}.drv-grade-D{background:#d1653f}.drv-grade-E{background:#b23b2e}.drv-grade-N{background:#b9c2cb}.drv-grade-X{background:#eef1f3;color:#7b8b9c;font-weight:500;min-width:0;margin-left:0}.kb-pihak{display:inline-block;margin-left:.4rem;padding:.02rem .34rem;border:1px solid var(--pihak, #8b98a5);border-radius:3px;color:var(--pihak, #8b98a5);font-size:.64rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;vertical-align:.08rem}.kb-head{display:flex;justify-content:flex-end;margin-bottom:.35rem}.bj-kabar{margin:.4rem 0;font-size:.82rem;color:var(--ink-3)}.bj-kabar.bj-awas{color:#b23b2e;font-weight:600}.bj-ikhtisar{display:flex;gap:1.75rem;flex-wrap:wrap;padding:.1rem 0 1.1rem;margin-bottom:.6rem;border-bottom:1px solid var(--rule-2)}.bj-angka{display:flex;flex-direction:column}.bj-angka b{font-size:1.5rem;line-height:1.1;font-variant-numeric:tabular-nums}.bj-angka span{font-size:.72rem;color:var(--ink-3)}.bj-angka-awas b{color:#b23b2e}.bj-lokasi{margin-top:1.4rem}.bj-lokasi h3{margin:0 0 .35rem;font-size:.88rem;display:flex;align-items:baseline;gap:.6rem}.bj-lokasi h3 small{font-weight:400;font-size:.72rem;color:var(--ink-3)}.bj-row-awas{background:#fdf4f2}.bj-status{display:inline-block;padding:.05rem .4rem;border-radius:4px;font-size:.68rem;font-weight:600;white-space:nowrap}.bj-tunggu_manifest{background:#fdf0d8;color:#8a5d09}.bj-tunggu_berangkat{background:#f3e6f5;color:#6b3a75}.bj-jalan{background:#e2eef1;color:#245c6e}.bj-tanda{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.25rem}.bj-cap{padding:.02rem .35rem;border-radius:3px;font-size:.66rem;background:#eef1f3;color:#5a6b7a}.bj-cap-awas{background:#f7dcd7;color:#96271a;font-weight:600}.bj-tabel .lt-head,.bj-tabel .lt-row{grid-template-columns:minmax(150px,3fr) 76px minmax(110px,1fr) 84px 68px 60px}.bj-tabel .num{align-self:start}.ud-bar,.ud-satuan{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:.6rem}.ud-bar #udPilih{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.ud-aksi{display:flex;gap:.5rem}.ud-satuan .ud-kabar{margin:0}.ud-mode{display:flex;gap:.3rem;margin-bottom:.8rem}.ud-tab{padding:.3rem .7rem;font:inherit;font-size:.78rem;border:1px solid var(--rule);border-radius:5px;background:#fff;color:var(--ink-3);cursor:pointer}.ud-tab.aktif{background:#1f3a4d;border-color:#1f3a4d;color:#fff;font-weight:600}.ud-kabar{margin:.3rem 0 .7rem;font-size:.8rem;color:var(--ink-3)}.ud-kabar.ud-awas{color:#b23b2e;font-weight:600}.ud-row{cursor:pointer}.ud-row:hover{background:#f6f8f9}.ud-titik{padding:.5rem .2rem .9rem;border-bottom:1px solid var(--rule-2)}.ud-scroll{overflow-x:auto;max-height:320px;overflow-y:auto}.ud-tabel{border-collapse:collapse;font-size:.74rem;white-space:nowrap}.ud-tabel th,.ud-tabel td{padding:.2rem .55rem;border-bottom:1px solid var(--rule-2);text-align:left}.ud-tabel th{position:sticky;top:0;background:#fff;font-weight:600;color:var(--ink-3)}.drv-chart-head label,.kb-head label,.ud-bar label,.ps-bar label{font-size:.78rem;color:var(--ink-3)}.drv-chart-head select,.kb-head select,.ud-bar select,.ud-bar input[type=search],.ps-bar select{margin-left:.4rem;padding:.28rem .5rem;font:inherit;font-size:.8rem;border:1px solid var(--rule);border-radius:5px;background:#fff}.ud-bar input[type=search]{min-width:15rem}.btn-kecil{padding:.12rem .45rem;font:inherit;font-size:.72rem;border:1px solid var(--rule);border-radius:4px;background:#fff;color:var(--ink-2);cursor:pointer}.btn-kecil:hover{border-color:var(--ink-3)}.ps-bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:.6rem}.ps-legenda{display:flex;gap:.9rem;font-size:.74rem;color:var(--ink-3)}.ps-legenda i{display:inline-block;width:.6rem;height:.6rem;border-radius:50%;margin-right:.3rem}.ps-legenda .ontime{background:#2f7a72}.ps-legenda .delay{background:#b23b2e}#petaPosisi{height:460px;border:1px solid var(--rule);border-radius:6px;margin-bottom:1.1rem}#petaPosisi.kosong{display:none}.ps-tabel{overflow-x:auto}.ps-tabel table{border-collapse:collapse;width:100%;font-size:.78rem;white-space:nowrap}.ps-tabel th,.ps-tabel td{padding:.38rem .6rem;border-bottom:1px solid var(--rule-2);text-align:left}.ps-tabel th{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);font-weight:600}.ps-tabel tbody tr{cursor:pointer}.ps-tabel tbody tr:hover{background:#f6f8f9}.ps-tabel tbody tr.terpilih{background:#eef4f6}.ps-num{font-variant-numeric:tabular-nums}.ps-status{display:inline-block;padding:.05rem .42rem;border-radius:4px;font-size:.68rem;font-weight:600}.ps-ontime{background:#e0efec;color:#1f5d55}.ps-delay{background:#f7dcd7;color:#96271a}.ps-entah{background:#eef1f3;color:#7b8b9c}@media (max-width: 1100px){.bj-tabel .lt-head,.bj-tabel .lt-row{grid-template-columns:minmax(140px,3fr) minmax(100px,1fr) 84px 62px}}@media (max-width: 720px){.bj-tabel .lt-head,.bj-tabel .lt-row{grid-template-columns:1fr 78px 58px}#petaPosisi{height:320px}}.bj-angka-jam b{font-size:1.1rem;color:var(--ink-3);font-weight:500}
