:root{
  font-family:Inter,"Segoe UI",Arial,sans-serif;
  color:#17324d;background:#f4f8fc;
  --bg:#f4f8fc;--panel:#ffffff;--panel2:#f8fbfe;--line:#d8e4ef;--text:#17324d;--muted:#6d8296;
  --blue:#2878d0;--blue2:#eaf4ff;--teal:#0ea88a;--teal2:#e8faf5;--red:#d9535f;--red2:#fff0f1;--amber:#b97813;--amber2:#fff8e7;
  --shadow:0 10px 30px rgba(37,70,103,.08);--radius:14px;
}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:linear-gradient(180deg,#f8fbff 0,#f2f7fb 100%);min-height:100vh;color:var(--text)}a{color:var(--blue);text-decoration:none}button,input,select,textarea{font:inherit}.app-shell{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}.sidebar{background:#fff;border-right:1px solid var(--line);padding:18px 14px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:20}.brand{display:flex;align-items:center;gap:10px;padding:8px 8px 20px;color:var(--text)}.brand-mark{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:linear-gradient(135deg,#2d8ce6,#19b6a1);color:white;font-size:23px;box-shadow:0 8px 18px rgba(40,120,208,.25)}.brand b{display:block;font-size:14px;letter-spacing:.03em}.brand small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.side-nav{display:flex;flex-direction:column;gap:5px}.side-nav a{display:flex;gap:10px;align-items:center;color:#526d84;padding:10px 11px;border-radius:10px;font-weight:600;font-size:13px}.side-nav a span{width:22px;height:22px;display:grid;place-items:center;border-radius:7px;background:#eef4f9;color:#5a7891}.side-nav a:hover{background:#f4f8fc}.side-nav a.active{background:var(--blue2);color:#1d66af}.side-nav a.active span{background:#d9ebff;color:#1d66af}.sidebar-foot{margin-top:auto;border-top:1px solid var(--line);padding:14px 6px 0;display:grid;grid-template-columns:10px 1fr auto;gap:8px;align-items:center}.sidebar-foot small{display:block;color:var(--muted);font-size:10px}.user-dot{width:9px;height:9px;border-radius:50%;background:var(--teal);box-shadow:0 0 0 4px var(--teal2)}.workspace{min-width:0}.topbar{height:64px;background:rgba(255,255,255,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:15}.topbar-title{font-weight:700;color:#34556f}.topbar-actions{display:flex;gap:18px;align-items:center;color:var(--muted);font-size:13px}.topbar-actions a{font-weight:600}.menu-button{display:none;background:transparent;border:0;font-size:24px;color:var(--text)}main{padding:24px;max-width:1900px;margin:auto}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:18px}.page-head h1{font-size:28px;margin:2px 0 5px}.page-head p{margin:0;color:var(--muted)}.eyebrow{font-size:10px;font-weight:800;letter-spacing:.15em;color:var(--teal)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin-bottom:16px;box-shadow:var(--shadow)}h1,h2,h3{color:#193b57}h2{font-size:18px;margin:0 0 4px}h3{font-size:15px;margin:0}p{color:var(--muted)}.section-title{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px}.section-title p{margin:3px 0 0;font-size:12px}.actions,.inline{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.quick-add{display:flex;gap:8px}.metric-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:16px}.metric{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}.metric span{display:block;color:var(--muted);font-size:12px}.metric b{display:block;font-size:26px;margin:4px 0;color:#1e4f76}.metric small{color:var(--muted)}.danger-text{color:var(--red)!important}.filters{display:flex;gap:9px;align-items:flex-end;flex-wrap:wrap}.filters label,.formgrid label,.field-label{display:flex;flex-direction:column;gap:5px;color:#607b91;font-size:12px;font-weight:600}.filters label.grow{flex:1;min-width:160px}.filters .and{padding-bottom:10px;color:#7890a3}.formgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.formgrid .full{grid-column:1/-1}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.shipment-layout{display:grid;grid-template-columns:1fr 1fr;gap:16px}.shipment-layout>.card{margin-bottom:0}.span2{grid-column:1/-1}.inner-grid{gap:22px}.tabs-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.stack{display:flex;flex-direction:column;gap:10px}.upload-row,.upload-box{border:1px dashed #c8d9e8;border-radius:12px;padding:13px;background:#fbfdff;display:grid;grid-template-columns:1.1fr 1fr auto;gap:10px;align-items:center}.upload-row small,.upload-box small{display:block;color:var(--muted);font-size:11px}.upload-box{grid-template-columns:1fr;margin-top:14px}.info-list{display:grid;gap:8px}.info-list>div{display:grid;grid-template-columns:150px minmax(0,1fr);gap:12px;padding:7px 0;border-bottom:1px solid #edf2f6}.info-list span{color:var(--muted);font-size:12px}.info-list code{white-space:normal;word-break:break-all;color:#355f80}input,select,textarea{background:#fff;color:var(--text);border:1px solid #cbdbe8;border-radius:9px;padding:9px 10px;outline:none;min-width:0}input:focus,select:focus,textarea:focus{border-color:#70aee7;box-shadow:0 0 0 3px rgba(40,120,208,.11)}textarea{resize:vertical}.code-area{width:100%;font-family:Consolas,"SFMono-Regular",monospace;line-height:1.48}.code-area.tall{min-height:340px}.code-area.comm{height:260px}.log-box{white-space:pre-wrap;background:#f7fafc;border:1px solid #e0e9f0;border-radius:10px;padding:13px;font:12px/1.5 Consolas,monospace;color:#2f5069;max-height:420px;overflow:auto}.button,button{border:1px solid #bfd2e1;color:#315d7d;background:#f5f9fc;padding:9px 13px;border-radius:9px;text-decoration:none;cursor:pointer;font-weight:700;font-size:12px;display:inline-flex;align-items:center;justify-content:center;gap:5px}.button:hover,button:hover{filter:brightness(.98);border-color:#9fbcd2}.primary{background:var(--blue);border-color:var(--blue);color:white}.subtle{background:#eaf4ff;border-color:#c9e2fa;color:#2469ad}.danger{background:#fff3f4;border-color:#f1c4c8;color:#bd3f4a}.ghost{background:transparent;border:0;color:#6b8092}.tiny{padding:4px 5px;font-size:10px}.small{padding:6px 9px;font-size:11px}.wide{width:100%;margin-top:8px}.top-gap{margin-top:12px}.scroll{overflow:auto}.data-table{border-collapse:separate;border-spacing:0;width:100%;font-size:12px}.data-table th{background:#f5f9fc;color:#55738a;position:sticky;top:0;text-align:left;z-index:2;font-size:11px}.data-table th,.data-table td{border-bottom:1px solid #e5edf4;padding:10px 11px;vertical-align:middle;white-space:normal}.data-table tbody tr{transition:.15s}.data-table tbody tr:hover{background:#f7fbff}.data-table td small{display:block;color:var(--muted);margin-top:3px}.nowrap{white-space:nowrap!important}.mono{font-family:Consolas,monospace}.strong{font-weight:800;color:#216cb3}.empty{text-align:center;color:var(--muted);padding:30px!important}.empty.mini{padding:15px!important}.pill{display:inline-flex;align-items:center;padding:5px 9px;border-radius:999px;background:#eef4f8;color:#506d83;font-size:11px;font-weight:800}.pill.soft{background:#eef7ff;color:#2b6fae}.pill.blue{background:#e7f3ff;color:#1f6db5}.pill.green{background:var(--teal2);color:#087c68}.pill.red{background:var(--red2);color:#b63b46}.pill.amber{background:var(--amber2);color:#97610d}.status-dot{width:7px;height:7px;border-radius:50%;background:#c7d4df;display:inline-block;margin-right:6px}.status-dot.ok{background:var(--teal)}details>summary{cursor:pointer;font-weight:700;color:#35617f;list-style:none}details>summary::-webkit-details-marker{display:none}.details-panel{margin-top:10px;padding:13px;background:#f9fbfd;border:1px solid #e1eaf1;border-radius:10px}.leg-manage{scroll-margin-top:80px}.notice{padding:12px 14px;border:1px solid #cfe1ef;background:#f4f9fd;border-radius:10px;color:#4e718a}.exception-line{display:flex;gap:16px;padding:10px 12px;border-left:4px solid #e6ab4a;background:#fffaf0;border-radius:6px;margin:7px 0}.exception-line.critical{border-color:var(--red);background:#fff5f6}.exception-line span{color:#607b91}.paste-zone{border:2px dashed #b9d1e4;background:#f8fcff;border-radius:14px;padding:24px;text-align:center;display:flex;flex-direction:column;gap:5px;transition:.15s}.paste-zone b{color:#2c648e}.paste-zone span{font-size:12px;color:var(--muted)}.paste-zone.ready{border-color:#5ec5ad;background:#f1fcf9}.paste-zone input{margin-top:8px;background:white}.screenshot-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}.shot{border:1px solid var(--line);border-radius:11px;padding:8px;background:#fff}.shot img{width:100%;height:120px;object-fit:cover;border-radius:7px;background:#eef3f7}.shot small{display:block;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:5px 0}.preview-panel{border:1px solid #cfe3f2;background:#fbfdff;border-radius:12px;padding:12px}.flash{padding:12px 14px;border-radius:10px;margin-bottom:15px;background:#edf9f5;border:1px solid #bfe8dc;color:#14745f}.flash.error{background:#fff1f2;border-color:#f1c4c8;color:#ad3943}.flash.warn{background:#fff9ec;border-color:#f1dbad;color:#8b6318}.flash.ok{background:#edf9f5;border-color:#bfe8dc}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at 25% 20%,#dff2ff 0,transparent 28%),radial-gradient(circle at 80% 80%,#ddf8f1 0,transparent 30%),#f5f9fd}.auth-card{width:min(420px,95vw);padding:34px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 25px 70px rgba(45,91,126,.15);text-align:center}.auth-card form{text-align:left}.auth-card label{display:flex;flex-direction:column;gap:6px;margin:12px 0;color:#58738a;font-size:12px;font-weight:600}.auth-logo{width:64px;height:64px;border-radius:18px;display:grid;place-items:center;margin:0 auto 14px;background:linear-gradient(135deg,#2d8ce6,#19b6a1);color:#fff;font-size:32px;box-shadow:0 12px 28px rgba(40,120,208,.25)}.auth-card p{margin-top:0}.auth-card small{display:block;color:var(--muted);margin-top:14px}.detail-row td{background:#fbfdff}.shipment-head{align-items:center}
@media(max-width:1200px){.tabs-grid,.grid3{grid-template-columns:1fr}.shipment-layout{grid-template-columns:1fr}.span2{grid-column:auto}.grid2{grid-template-columns:1fr}.metric-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:900px){.app-shell{grid-template-columns:1fr}.sidebar{position:fixed;left:-260px;width:240px;transition:.2s;box-shadow:20px 0 60px rgba(0,0,0,.12)}body.nav-open .sidebar{left:0}.menu-button{display:block}.topbar{padding:0 14px}.topbar-title{display:none}main{padding:14px}.page-head{align-items:flex-start;flex-direction:column}.metric-grid{grid-template-columns:1fr}.formgrid{grid-template-columns:1fr}.formgrid .full{grid-column:auto}.filters{align-items:stretch}.filters label,.filters label.grow{width:100%}.filters .and{display:none}.quick-add{width:100%}.quick-add input{flex:1}.upload-row{grid-template-columns:1fr}.topbar-actions a{display:none}}
.clipboard-source{position:fixed!important;left:-9999px!important;top:-9999px!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important}.sort-link{color:inherit;text-decoration:none}.sort-link:hover{color:var(--blue)}button:disabled{opacity:.45;cursor:not-allowed}
.audit-detail{min-width:340px;max-width:650px;padding:12px}.audit-detail h3{margin:12px 0 5px}.audit-detail small{display:block;color:var(--muted);margin-top:3px}.audit-detail .log-box{max-height:220px;white-space:pre-wrap;word-break:break-word}
.journey-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px;padding:12px;background:#f8fbfe;border:1px solid #dce8f1;border-radius:12px}.journey-metric{background:#fff;border:1px solid #dbe7f0;border-radius:11px;padding:12px 14px;min-width:0}.journey-metric span{display:block;color:#6a8397;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.journey-metric b{display:block;color:#184f78;font-size:21px;margin:4px 0 1px}.journey-metric .duration-alt{display:block;color:#607f96;font-size:12px;line-height:1.2;margin:0 0 4px;font-weight:700}.journey-metric small{display:block;color:#748da1;font-size:10px;line-height:1.45}.journey-metric.transit b{color:#087c68}

/* V0.5.3.2: make airport-local planned times visually distinct from WIB. */
.planned-time{display:grid;grid-template-columns:auto 1fr;gap:4px 6px;align-items:center;min-width:132px}.planned-time b{font-size:11px;color:#244e6e;white-space:nowrap}.time-tag{display:inline-flex;align-items:center;justify-content:center;width:max-content;padding:2px 5px;border-radius:5px;font-size:8px;font-weight:900;letter-spacing:.06em}.time-tag.local{background:#fff2d9;color:#9a6500;border:1px solid #f0d29b}.time-tag.wib{background:#e4f3ff;color:#1769aa;border:1px solid #bfddf5}.time-arrow{display:none}

/* V0.5.3.4: Schedule/Estimated planned fields are editable and independent after one-time initialization. */
.derived-input{background:#f8fbfe;color:var(--text);border:1px solid #cbdbe8;border-radius:9px;padding:9px 10px;min-height:38px;display:flex;align-items:center;font-weight:600;user-select:text}.derived-input:empty::before{content:'-';color:var(--muted)}

/* V0.5.3.5 visual badges: airport LOCAL/WIB, dashboard route and current flight. */
.airport-time-pair{display:grid;gap:5px;min-width:132px}.airport-time-pair>div{display:grid;grid-template-columns:auto 1fr;gap:6px;align-items:center}.airport-time-pair b{font-size:11px;color:#244e6e;white-space:nowrap}.route-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;min-width:92px}.route-badge{display:inline-flex;align-items:center;justify-content:center;padding:4px 7px;border:1px solid #bfdcf4;border-radius:7px;background:#edf7ff;color:#1769aa;font-size:10px;font-weight:900;letter-spacing:.035em;white-space:nowrap}.route-sep{color:#8ba2b4;font-weight:900;font-size:13px}.route-badge.muted,.flight-badge.muted{color:#7e93a3;background:#f2f6f9;border-color:#d8e2e9}.flight-badges{display:flex;gap:5px;flex-wrap:wrap;min-width:180px}.flight-badge{display:inline-flex;align-items:center;padding:5px 8px;border:1px solid #c9dff1;border-radius:7px;background:#f1f8ff;color:#245e8d;font-size:10px;font-weight:800;white-space:nowrap;box-shadow:0 1px 0 rgba(28,83,126,.04)}

.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}

/* V0.5.5.1 Curved directional milestone routes + correction editor */
.milestone-map{border:1px solid var(--line);border-radius:13px;background:#fbfdff;padding:12px;margin-bottom:14px}.milestone-map-head{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:8px}.milestone-map-head>div{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap}.milestone-map-head small{color:var(--muted)}.milestone-leaflet-map{height:430px;width:100%;border:1px solid #d7e5ef;border-radius:12px;overflow:hidden;background:#eaf3f8;z-index:1}.milestone-map-fallback{padding:12px;margin-top:8px;border:1px solid #f0d29b;border-radius:9px;background:#fff8e7;color:#8b641c;font-size:12px}.milestone-map-detail{display:grid;grid-template-columns:110px 1fr;gap:10px;margin-top:9px;padding:10px 12px;background:#fff;border:1px solid #dce8f1;border-radius:10px;font-size:12px}.milestone-map-detail span{color:#55738a;line-height:1.65}.milestone-map-detail strong{color:#087c68}.map-route-summary{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.route-chip{display:flex;flex-direction:column;gap:2px;min-width:190px;padding:8px 10px;background:#fff;border:1px solid #dce8f1;border-left:4px solid #2474d8;border-radius:9px;font-size:11px}.route-chip.diverted{border-left-color:#e43d30}.route-chip span{color:#607f96}.map-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:9px;color:#6d8296;font-size:10px}.legend-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#0ea88a;margin-right:4px}.legend-divert{color:#b9382f}.legend-normal{color:#1d66af}.milestone-airport-icon{background:transparent!important;border:0!important}.milestone-airport-icon span{display:block;width:18px;height:18px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:#0ea88a;border:3px solid white;box-shadow:0 1px 5px rgba(0,0,0,.35)}.milestone-plane-icon{background:transparent!important;border:0!important;font-size:25px;line-height:30px;text-align:center;text-shadow:0 1px 2px #fff}.milestone-plane-icon span{display:block;width:30px;height:30px;transform-origin:50% 50%;transition:transform .15s ease}.milestone-plane-icon.normal{color:#2474d8}.milestone-plane-icon.diverted{color:#e43d30}.milestone-edit-row td{background:#f8fbfe!important}.milestone-edit-form{padding:4px 0}.milestone-edit-row[hidden]{display:none}@media(max-width:700px){.milestone-map-detail{grid-template-columns:1fr}.milestone-map-head{align-items:flex-start;flex-direction:column}.milestone-leaflet-map{height:340px}.route-chip{min-width:100%;}}
