:root,:root[data-theme=dark]{color-scheme:dark;--bg: #0a1017;--panel: #111a24;--panel-2: #172231;--panel-3: #1d2a3b;--line: #233142;--line-soft: #1a2634;--ink: #e8edf2;--ink-2: #b6c2ce;--muted: #7f8d9b;--accent: #e8a24a;--accent-ink: #1a1206;--link: #6db3ff;--land: #142131;--land-line: #26384d;--water: #0a1017;--grid: #1e2a38;--axis: #2e3d50;--s1: #3987e5;--s2: #d95926;--s3: #199e70;--s4: #c98500;--s5: #d55181;--s6: #9085e9;--good: #0ca30c;--warn: #fab219;--serious: #ec835a;--crit: #d03b3b;--good-ink: #3ccf3c;--crit-ink: #ff7a7a;--warn-ink: #fab219;--shadow: 0 8px 30px rgba(0, 0, 0, .45)}:root[data-theme=light]{color-scheme:light;--bg: #eef2f5;--panel: #ffffff;--panel-2: #f5f7fa;--panel-3: #e9eef3;--line: #d6dee6;--line-soft: #e6ebf0;--ink: #0f1720;--ink-2: #3a4754;--muted: #677382;--accent: #b5762a;--accent-ink: #ffffff;--link: #1f63b8;--land: #e2e8ee;--land-line: #c3ced9;--water: #f6f9fb;--grid: #e8edf1;--axis: #c3ccd5;--s1: #2a78d6;--s2: #eb6834;--s3: #1baf7a;--s4: #eda100;--s5: #e87ba4;--s6: #4a3aa7;--good: #0ca30c;--warn: #fab219;--serious: #ec835a;--crit: #d03b3b;--good-ink: #006300;--crit-ink: #b42323;--warn-ink: #8a5a00;--shadow: 0 8px 30px rgba(15, 23, 32, .14)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased}a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit}.num,table td.n,table th.n{font-variant-numeric:tabular-nums;text-align:right}.muted{color:var(--muted)}.ink2{color:var(--ink-2)}.small{font-size:12px}.tiny{font-size:11px}.nowrap{white-space:nowrap}.mono{font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:12.5px}h1,h2,h3,h4{margin:0;font-weight:600}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.demo-strip{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;padding:5px 16px;font-size:12px;background:var(--accent);color:var(--accent-ink);text-align:center}.demo-strip a{color:inherit;font-weight:600;text-decoration:underline}.topbar{display:flex;align-items:center;gap:16px;padding:10px 18px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:30}.brand{display:flex;align-items:center;gap:10px;min-width:0}.brand-mark{width:30px;height:30px;flex-shrink:0}.brand-text{line-height:1.15;min-width:0}.brand-text b{display:block;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand-text span{font-size:11px;color:var(--muted);letter-spacing:.06em;text-transform:uppercase}.topbar-spacer{flex:1}.clock{display:flex;align-items:center;gap:10px;padding:5px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}.clock-time{font-variant-numeric:tabular-nums;font-weight:600;font-size:15px;white-space:nowrap}.clock-date{font-size:11px;color:var(--muted)}.live-dot{width:9px;height:9px;border-radius:50%;background:var(--good);box-shadow:0 0 #0ca30cb3;animation:pulse 2s infinite;flex-shrink:0}.live-dot.off{background:var(--muted);animation:none}.live-dot.paused{background:var(--warn);animation:none}@keyframes pulse{0%{box-shadow:0 0 #0ca30c99}70%{box-shadow:0 0 0 8px #0ca30c00}to{box-shadow:0 0 #0ca30c00}}.speed-badge{font-size:11px;font-weight:700;padding:2px 6px;border-radius:4px;background:var(--warn);color:#1a1206}.icon-btn{background:none;border:1px solid var(--line);color:var(--ink-2);border-radius:7px;padding:6px 9px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.icon-btn:hover{color:var(--ink);background:var(--panel-2)}.menu-btn{display:none}.layout{display:flex;min-height:calc(100vh - 90px)}.nav{width:212px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);padding:12px 0;display:flex;flex-direction:column;gap:2px;position:sticky;top:53px;height:calc(100vh - 53px);overflow-y:auto}.nav a{display:flex;align-items:center;gap:11px;padding:9px 18px;color:var(--ink-2);border-left:3px solid transparent;font-size:13.5px}.nav a:hover{background:var(--panel-2);color:var(--ink);text-decoration:none}.nav a.active{color:var(--ink);border-left-color:var(--accent);background:var(--panel-2);font-weight:600}.nav a svg{width:17px;height:17px;flex-shrink:0;opacity:.85}.nav .nav-count{margin-left:auto;font-size:11px;font-weight:700;padding:1px 7px;border-radius:10px;background:var(--crit);color:#fff}.nav-section{padding:14px 18px 4px;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.nav-foot{margin-top:auto;padding:14px 18px 4px;font-size:12px;color:var(--muted);border-top:1px solid var(--line)}.nav-foot a{padding:0;border:none;display:inline;font-size:12px;color:var(--link)}.nav-foot a:hover{background:none}main.content{flex:1;min-width:0;padding:20px 24px 40px}.page-head{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:16px}.page-head h1{font-size:21px}.page-head p{margin:2px 0 0;color:var(--muted);font-size:13px}.page-head .actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;align-items:center}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;min-width:0}.panel-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;flex-wrap:wrap}.panel-head h2{font-size:14px}.panel-head h3{font-size:13px}.panel-head .sub{color:var(--muted);font-size:12px}.panel-head .right{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.panel.flush{padding:0;overflow:hidden;align-self:start}.panel.flush .panel-head{padding:12px 16px 0}.grid{display:grid;gap:14px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g-main{grid-template-columns:minmax(0,2.1fr) minmax(300px,1fr)}.stack{display:flex;flex-direction:column;gap:14px;min-width:0}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spacer{flex:1}.mt{margin-top:14px}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:14px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;min-width:0;position:relative}a.kpi{color:inherit;display:block}a.kpi:hover{text-decoration:none;border-color:var(--axis)}.kpi-label{font-size:11.5px;color:var(--muted);letter-spacing:.02em;display:flex;align-items:center;gap:6px}.kpi-value{font-size:26px;font-weight:650;margin-top:2px;line-height:1.15;white-space:nowrap}.kpi-value small{font-size:13px;font-weight:500;color:var(--muted);margin-left:4px}.kpi-sub{font-size:12px;color:var(--ink-2);margin-top:3px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.kpi-spark{margin-top:6px}.delta-up-good,.delta-down-good{color:var(--good-ink);font-weight:600}.delta-up-bad,.delta-down-bad{color:var(--crit-ink);font-weight:600}.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;border:1px solid var(--line);color:var(--ink-2);background:var(--panel-2)}.pill .dot{width:7px;height:7px;border-radius:50%;background:currentColor}.pill svg{width:12px;height:12px}.pill.good{color:var(--good-ink);border-color:color-mix(in srgb,var(--good) 45%,transparent);background:color-mix(in srgb,var(--good) 12%,transparent)}.pill.warn{color:var(--warn-ink);border-color:color-mix(in srgb,var(--warn) 50%,transparent);background:color-mix(in srgb,var(--warn) 13%,transparent)}.pill.serious{color:var(--serious);border-color:color-mix(in srgb,var(--serious) 50%,transparent);background:color-mix(in srgb,var(--serious) 13%,transparent)}:root[data-theme=light] .pill.serious{color:#a8461f}.pill.crit{color:var(--crit-ink);border-color:color-mix(in srgb,var(--crit) 50%,transparent);background:color-mix(in srgb,var(--crit) 13%,transparent)}.pill.info{color:var(--link);border-color:color-mix(in srgb,var(--s1) 45%,transparent);background:color-mix(in srgb,var(--s1) 11%,transparent)}.pill.plain{font-weight:500}.sev-bar{width:4px;align-self:stretch;border-radius:2px;flex-shrink:0}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:13px}table.data th{text-align:left;font-weight:600;font-size:11.5px;color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;background:var(--panel)}table.data td{padding:8px 10px;border-bottom:1px solid var(--line-soft);vertical-align:middle}table.data tr.click{cursor:pointer}table.data tr.click:hover td{background:var(--panel-2)}table.data tr.selected td{background:var(--panel-3)}.pager{display:flex;gap:8px;align-items:center;justify-content:flex-end;padding:10px 12px;font-size:12.5px;color:var(--muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 13px;border-radius:7px;border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink);font-weight:600;cursor:pointer;font-size:13px;white-space:nowrap}.btn:hover{filter:brightness(1.08);text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.ghost{background:transparent;color:var(--ink);border-color:var(--line)}.btn.ghost:hover{background:var(--panel-2)}.btn.danger{background:var(--crit);border-color:var(--crit);color:#fff}.btn.small{padding:4px 9px;font-size:12px}input[type=text],input[type=search],input[type=email],input[type=password],input[type=number],input[type=date],select,textarea{font:inherit;font-size:13px;background:var(--panel-2);color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:7px 10px;min-width:0}input:focus,select:focus,textarea:focus,.btn:focus-visible,.icon-btn:focus-visible,.seg button:focus-visible{outline:2px solid var(--link);outline-offset:1px}textarea{width:100%;resize:vertical}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.field label{font-size:12px;color:var(--muted)}.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}.filters input[type=search]{min-width:220px;flex:1;max-width:340px}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--panel-2)}.seg button{background:none;border:none;color:var(--ink-2);padding:6px 11px;cursor:pointer;font-size:12.5px;border-right:1px solid var(--line);white-space:nowrap}.seg button:last-child{border-right:none}.seg button.on{background:var(--panel-3);color:var(--ink);font-weight:600;box-shadow:inset 0 -2px 0 var(--accent)}.error-text{color:var(--crit-ink);font-size:13px;margin:6px 0}.notice{padding:10px 12px;border-radius:8px;background:var(--panel-2);border:1px solid var(--line);font-size:13px;color:var(--ink-2)}.feed{display:flex;flex-direction:column}.feed-item{display:flex;gap:10px;padding:8px 2px;border-bottom:1px solid var(--line-soft);font-size:12.5px;align-items:flex-start}.feed-item:last-child{border-bottom:none}.feed-item .ico{width:24px;height:24px;border-radius:6px;display:grid;place-items:center;flex-shrink:0;background:var(--panel-2)}.feed-item .ico svg{width:14px;height:14px}.feed-item .t{color:var(--muted);font-size:11px;white-space:nowrap;font-variant-numeric:tabular-nums}.feed-item .body{min-width:0;flex:1}.feed-item .body b{font-weight:600}.feed-item.new{animation:flash 2.5s ease-out}@keyframes flash{0%{background:color-mix(in srgb,var(--accent) 22%,transparent)}to{background:transparent}}.drawer-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:60}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(620px,100vw);background:var(--panel);border-left:1px solid var(--line);z-index:61;overflow-y:auto;box-shadow:var(--shadow);padding:18px 20px 40px;animation:slidein .18s ease-out}@keyframes slidein{0%{transform:translate(30px);opacity:0}to{transform:none;opacity:1}}.drawer-close{position:absolute;top:12px;right:12px}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:70;display:grid;place-items:center;padding:16px}.modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;width:min(440px,100%);box-shadow:var(--shadow);max-height:calc(100vh - 32px);overflow-y:auto}.modal h3{margin-bottom:12px}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}.toasts{position:fixed;right:16px;bottom:16px;z-index:80;display:flex;flex-direction:column;gap:8px;width:min(360px,calc(100vw - 32px))}.toast{background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--crit);border-radius:8px;padding:10px 12px;box-shadow:var(--shadow);font-size:12.5px;animation:slidein .2s ease-out}.toast.high{border-left-color:var(--serious)}.toast b{display:block;margin-bottom:2px}.toast a{color:inherit}.timeline{list-style:none;margin:0;padding:0 0 0 4px}.timeline li{position:relative;padding:0 0 14px 22px;font-size:13px}.timeline li:before{content:"";position:absolute;left:5px;top:14px;bottom:-2px;width:2px;background:var(--line)}.timeline li:last-child:before{display:none}.timeline .node{position:absolute;left:0;top:3px;width:12px;height:12px;border-radius:50%;border:2px solid var(--panel);background:var(--muted)}.timeline .node.good{background:var(--good)}.timeline .node.warn{background:var(--warn)}.timeline .node.crit{background:var(--crit)}.timeline .node.info{background:var(--s1)}.timeline .node.future{background:var(--panel);border:2px dashed var(--muted)}.timeline .when{color:var(--muted);font-size:11.5px;font-variant-numeric:tabular-nums}.timeline .future-row{color:var(--muted)}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px 16px}.facts div span{display:block;font-size:11px;color:var(--muted)}.facts div b{font-weight:600;font-size:13.5px}.chart{position:relative;width:100%}.chart svg{display:block;overflow:visible}.chart .gridline{stroke:var(--grid);stroke-width:1}.chart .baseline{stroke:var(--axis);stroke-width:1}.chart .tick{fill:var(--muted);font-size:10.5px;font-variant-numeric:tabular-nums}.chart .marker-line{stroke:var(--accent);stroke-width:1.5}.chart .marker-label{fill:var(--accent);font-size:10.5px;font-weight:600}.chart .band{fill:var(--crit);opacity:.09}.chart .target-line{stroke:var(--ink-2);stroke-width:1;stroke-dasharray:4 3;opacity:.7}.chart .target-label{fill:var(--ink-2);font-size:10.5px}.chart .crosshair{stroke:var(--ink-2);stroke-width:1;opacity:.5}.chart .end-label{fill:var(--ink);font-size:11px;font-weight:600}.tooltip{position:absolute;pointer-events:none;background:var(--panel-3);border:1px solid var(--line);border-radius:7px;padding:7px 9px;font-size:12px;box-shadow:var(--shadow);z-index:5;white-space:nowrap;color:var(--ink)}.tooltip .tt-title{font-weight:600;margin-bottom:3px}.tooltip .tt-row{display:flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}.tooltip .sw{width:9px;height:9px;border-radius:2px;flex-shrink:0}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--ink-2)}.legend span{display:inline-flex;align-items:center;gap:6px}.legend .sw{width:10px;height:10px;border-radius:2px}.legend .sw.line{height:3px;border-radius:2px}.hbars{display:flex;flex-direction:column;gap:7px}.hbar{display:grid;grid-template-columns:minmax(90px,160px) 1fr auto;gap:10px;align-items:center;font-size:12.5px}.hbar.click{cursor:pointer}.hbar.click:hover .hbar-label{color:var(--ink);text-decoration:underline}.hbar-label{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hbar-track{height:10px;background:var(--panel-2);border-radius:0 4px 4px 0;position:relative}.hbar-fill{height:100%;border-radius:0 4px 4px 0}.hbar-target{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink-2);opacity:.7}.hbar-value{font-variant-numeric:tabular-nums;font-weight:600;min-width:52px;text-align:right}.map-wrap{position:relative;width:100%;background:var(--water);border-radius:8px;overflow:hidden}.map-wrap>svg{display:block;width:100%;height:auto}.map-legend svg{display:inline-block;flex-shrink:0}.map-land{fill:var(--land);stroke:var(--land-line);stroke-width:.7}.map-nation{fill:none;stroke:var(--land-line);stroke-width:1.2}.map-route{fill:none;stroke:var(--ink-2);stroke-width:.8;opacity:.14}.map-route.hi{opacity:.9;stroke-width:1.8;stroke:var(--accent)}.map-route.ocean{stroke-dasharray:3 3;opacity:.3}.map-zone{fill:var(--crit);fill-opacity:.14;stroke:var(--crit);stroke-width:1.4;stroke-dasharray:5 4}.map-zone.upcoming{fill:var(--warn);stroke:var(--warn)}.map-zone-pulse{fill:none;stroke:var(--crit);stroke-width:1.5;animation:zonepulse 2.4s ease-out infinite;transform-box:fill-box;transform-origin:center}@keyframes zonepulse{0%{opacity:.7;transform:scale(.85)}to{opacity:0;transform:scale(1.25)}}.map-site-label{fill:var(--ink-2);font-size:10px;font-weight:600;paint-order:stroke;stroke:var(--water);stroke-width:3px;pointer-events:none}.map-ship{cursor:pointer;transition:cx 1s linear,cy 1s linear}.map-hit{fill:transparent;cursor:pointer}.map-legend{position:absolute;left:10px;bottom:10px;background:color-mix(in srgb,var(--panel) 88%,transparent);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:11.5px;display:flex;flex-direction:column;gap:4px}.map-legend span{display:flex;align-items:center;gap:7px;color:var(--ink-2)}.map-tip{position:absolute;pointer-events:none;background:var(--panel-3);border:1px solid var(--line);border-radius:7px;padding:7px 9px;font-size:12px;box-shadow:var(--shadow);z-index:4;max-width:280px}.heat{border-collapse:separate;border-spacing:2px;font-size:11.5px}.heat th{font-weight:600;color:var(--muted);padding:4px 6px;white-space:nowrap;text-align:left;font-size:11px}.heat td{padding:0}.heat .cell{display:block;min-width:54px;padding:5px 4px;text-align:center;border-radius:3px;font-variant-numeric:tabular-nums;font-weight:600;cursor:pointer;border:1px solid transparent}.heat .cell:hover{border-color:var(--ink)}.heat .cell.sel{outline:2px solid var(--accent)}.auth-screen{min-height:70vh;display:grid;place-items:center;padding:20px}.auth-card{width:min(380px,100%)}.auth-card h2{margin-bottom:14px}.auth-card .btn{width:100%;margin-top:6px}.loading{color:var(--muted);padding:30px;text-align:center}.rebuild-screen{display:grid;place-items:center;min-height:60vh;text-align:center;color:var(--ink-2);gap:10px}.spinner{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 10px}@keyframes spin{to{transform:rotate(360deg)}}.wall{min-height:100vh;padding:16px 20px;background:var(--bg)}.wall .kpi-value{font-size:34px}.wall-progress{height:3px;background:var(--accent);transition:width 1s linear}@media (max-width: 1200px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g-main{grid-template-columns:minmax(0,1fr)}}@media (max-width: 900px){.nav{position:fixed;left:0;top:0;height:100vh;z-index:50;transform:translate(-100%);transition:transform .2s;box-shadow:var(--shadow)}.nav.open{transform:none}.menu-btn{display:inline-flex}.g2,.g3{grid-template-columns:minmax(0,1fr)}main.content{padding:16px}.clock-date{display:none}.hide-sm{display:none!important}}@media (max-width: 560px){.g4{grid-template-columns:minmax(0,1fr)}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.kpi-value{font-size:21px}.topbar{gap:8px;padding:8px 12px}.brand-text span{display:none}.filters input[type=search]{max-width:none;min-width:0;width:100%}.hbar{grid-template-columns:minmax(70px,110px) 1fr auto}}@media (forced-colors: active){.pill,.live-dot{forced-color-adjust:none}}table.data td a[href^="/shipments/"]{white-space:nowrap}
