*{box-sizing:border-box}html,body,#root,.app{margin:0;height:100%;background:#e9f0f7;font:13px/1.35 Inter,system-ui,sans-serif;color:#1c2738;overflow:hidden}.app canvas{display:block}.hud{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none}.hud .card{pointer-events:auto;position:absolute;background:#fffffff2;border-radius:16px;box-shadow:0 10px 30px #1e3c6e21,0 1px 2px #1e3c6e14}.muted{color:#8a96a8}.ok{color:#16a34a}.warn{color:#e5493a}.blue{color:#2f6df6}.chev{font-style:normal;color:#9aa6b5;font-size:18px}.badge-red{font-style:normal;font-size:11px;font-weight:700;color:#fff;background:#ff4d3d;padding:1px 6px;border-radius:6px;margin-left:4px;white-space:nowrap}.chip{font-size:12px;font-weight:600;padding:4px 10px;border-radius:8px;background:#2f6df6;color:#fff;white-space:nowrap}.chip.is-red{background:#ff4d3d}.chip.is-blue{background:#eaf1ff;color:#2f6df6}.star{color:#9aa6b5;font-size:15px}.star.on{color:#2f6df6}.top{top:12px;left:12px;right:12px;height:52px;display:flex;align-items:center;gap:16px;padding:0 18px}.logo{display:flex;align-items:center;gap:10px;font-size:19px;letter-spacing:-.01em}.logo svg{width:30px;height:30px}.sep{width:1px;height:22px;background:#e3e9f1}.crumb{font-size:14px;color:#5a6577}.crumb .cur{color:#1c2738;font-weight:700}.top-right{margin-left:auto;display:flex;align-items:center;gap:14px}.date{font-size:14px;color:#3d4756}.live{display:flex;align-items:center;gap:7px;font-weight:600;color:#16a34a;background:#ecfdf3;padding:6px 12px;border-radius:9px}.live i{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 3px #22c55e38;animation:blink 1.6s infinite}@keyframes blink{50%{opacity:.35}}.left{top:76px;left:12px;width:330px;bottom:164px;padding:14px;display:flex;flex-direction:column;gap:10px;overflow:hidden}.term{display:flex;gap:12px;align-items:center}.term-icon{width:42px;height:42px;border-radius:12px;background:#eaf1ff;color:#2f6df6;display:grid;place-items:center;flex:none}.term-icon svg{width:24px;height:24px}.term b{display:block;font-size:17px}.term span{color:#6b778a;font-size:12.5px}.alert{display:flex;gap:12px;align-items:center;padding:11px 12px;border-radius:12px;background:#fff1f0;border:1px solid #ffc9c4}.alert-icon{width:36px;height:36px;border-radius:10px;background:#ff4d3d;color:#fff;display:grid;place-items:center;flex:none;animation:pulse-red 2s infinite}.alert-icon svg{width:20px;height:20px}@keyframes pulse-red{0%,to{box-shadow:0 0 #ff4d3d73}50%{box-shadow:0 0 0 7px #ff4d3d00}}.alert div{flex:1;display:flex;flex-direction:column}.alert b{font-size:14.5px;color:#c0281b}.alert span{color:#5a6577;font-size:12.5px}.search{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-radius:10px;background:#f1f4f8;color:#8a96a8;font-size:12px;white-space:nowrap;overflow:hidden;flex:none}.search svg{width:15px;height:15px}.tabs{display:flex;gap:5px;flex-wrap:wrap;flex:none}.tabs span{font-size:11.5px;padding:6px 8px;border-radius:9px;background:#f1f4f8;color:#5a6577;font-weight:500;white-space:nowrap}.tabs span.is-on{background:#2f6df6;color:#fff}.tabs em{font-style:normal;font-size:11px;font-weight:700;padding:0 5px;border-radius:5px;background:#ffffff40;margin-left:2px}.tabs span:not(.is-on) em{background:#dfe6ee}.left h4{margin:4px 2px 0;font-size:14px}.vlist{display:flex;flex-direction:column;gap:6px;overflow:auto;margin-right:-6px;padding-right:6px}.vlist h4{margin:8px 2px 2px}.vrow{display:flex;gap:10px;align-items:center;padding:7px;border-radius:12px;border:1px solid transparent}.vrow.is-on{background:#f3f7ff;border-color:#9cbcff;box-shadow:0 0 0 3px #2f6df614}.thumb{width:64px;height:40px;flex:none}.thumb.is-big{width:120px;height:80px;border-radius:10px;flex:none}.vrow-text{flex:1;display:flex;flex-direction:column;font-size:12px;color:#6b778a}.vrow-text b{font-size:13.5px;color:#1c2738}.check{font-style:normal;width:22px;height:22px;border-radius:50%;background:#22c55e;color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}.gate-row{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#6b778a;padding:4px}.gate-row .count{background:#eaf1ff;color:#2f6df6;padding:1px 7px;border-radius:6px;margin-right:10px}.maps{position:absolute;top:76px;right:12px;width:440px;display:flex;gap:8px}.maps .card{position:relative;flex:1;padding:8px;height:128px}.map-title{position:absolute;top:12px;left:14px;font-size:12px;font-weight:600;background:#ffffffd9;padding:2px 7px;border-radius:6px;z-index:1}.map svg{width:100%;height:100%;display:block}.map-pulse{animation:blink 1.4s infinite}.vessel{top:214px;right:12px;width:440px;bottom:164px;padding:14px;display:flex;flex-direction:column;gap:10px;overflow:auto}.vessel-head{display:flex;align-items:center;gap:8px}.vessel-head b{font-size:18px;letter-spacing:-.01em}.vessel-head .chip{margin-left:auto}.vessel-head .x{color:#8a96a8;font-size:20px;margin-left:8px}.vessel-body{display:flex;gap:12px}.vessel dl{margin:0;flex:1;display:flex;flex-direction:column;gap:3px;font-size:12px}.vessel dl div{display:flex;gap:8px}.vessel dt{width:118px;color:#8a96a8;flex:none;white-space:nowrap}.vessel dd{margin:0;font-weight:500;white-space:nowrap}.prog{display:flex;align-items:center;gap:8px;flex:1}.bar{flex:1;height:7px;border-radius:4px;background:#eef2f7;overflow:hidden}.bar i{display:block;height:100%;background:linear-gradient(90deg,#22c55e,#4ade80);border-radius:4px}.vessel table{width:100%;border-collapse:collapse;font-size:11.5px}.vessel th{text-align:left;font-weight:500;color:#8a96a8;padding:4px 6px}.vessel td{padding:7px 5px;border-top:1px solid #eef2f7;white-space:nowrap}.vessel tr.is-on td{background:#f3f7ff;border-top-color:#9cbcff;border-bottom:1px solid #9cbcff}.vessel tr.is-on td:first-child{border-left:1px solid #9cbcff;border-radius:8px 0 0 8px}.vessel tr.is-on td:last-child{border-right:1px solid #9cbcff;border-radius:0 8px 8px 0}.more{color:#2f6df6;font-weight:600;font-size:12.5px;padding:2px 6px}.journey{left:12px;right:12px;bottom:12px;height:140px;display:flex;gap:16px;padding:14px 18px}.sel{width:300px;flex:none;border-right:1px solid #eef2f7;padding-right:14px}.sel-title{font-weight:600;font-size:13.5px}.sel-body{display:flex;gap:12px;align-items:center;margin-top:10px}.box-ico{width:74px;height:52px;flex:none;filter:drop-shadow(0 4px 10px rgba(47,109,246,.35))}.sel-body>div{display:flex;flex-direction:column;gap:2px;font-size:12.5px}.sel-name{display:flex;align-items:center;gap:6px;white-space:nowrap}.sel-name b{font-size:15px}.steps{flex:1;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.step{border:0;background:none;text-align:left;font:inherit;color:inherit;display:flex;gap:10px;align-items:flex-start;padding:8px;border-radius:12px;cursor:pointer;transition:background .2s}.step:disabled{cursor:default}.step:not(:disabled):hover{background:#f3f7ff}.step.is-here{background:#eef4ff;box-shadow:inset 0 0 0 1.5px #9cbcff}.step-ico{width:34px;height:34px;border-radius:50%;background:#eef2f7;color:#6b778a;display:grid;place-items:center;flex:none}.step.is-done .step-ico{background:#eaf1ff;color:#2f6df6}.step-ico.is-now{background:#2f6df6;color:#fff}.step-ico.is-late{background:#ff4d3d;color:#fff}.step-ico svg{width:21px;height:21px}.step-text{display:flex;flex-direction:column;gap:2px;font-size:11px;color:#6b778a;min-width:0;flex:1}.step-text>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.step-text b{font-size:12.5px;color:#1c2738;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tick{font-style:normal;display:inline-grid;place-items:center;width:16px;height:16px;border-radius:50%;background:#2f6df6;color:#fff;font-size:10px;margin-left:4px}.step-bar{height:4px;border-radius:2px;background:#e3e9f1;margin-bottom:6px;position:relative;overflow:visible}.step-bar i{position:absolute;top:0;right:100%;bottom:0;left:0;border-radius:2px}.step-bar.is-done i{right:0;background:#2f6df6}.step-bar.is-now i{right:45%;background:#2f6df6}.step-bar.is-late i{right:45%;background:#ff4d3d}.step-bar.is-now i:after,.step-bar.is-late i:after{content:"";position:absolute;right:-5px;top:-3px;width:10px;height:10px;border-radius:50%;background:inherit;box-shadow:0 0 0 4px #ff4d3d33}.state{align-self:flex-start;margin-top:3px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:6px;background:#f1f4f8;color:#6b778a}.state.is-completed{background:#e7f8ee;color:#15803d}.state.is-in{background:#2f6df6;color:#fff}.nav{pointer-events:auto;position:absolute;top:46%;width:46px;height:46px;border-radius:50%;border:0;background:#fffffff2;box-shadow:0 8px 24px #1e3c6e2e;font-size:28px;line-height:1;color:#2f6df6;cursor:pointer;display:grid;place-items:center;padding-bottom:4px;transition:transform .15s}.nav:hover:not(:disabled){transform:scale(1.08)}.nav:disabled{opacity:.35;cursor:default}.nav.prev{left:356px}.nav.next{right:466px}.callout{position:relative;transform:translateY(-50%);display:flex;gap:8px;align-items:flex-start;background:#fffffff5;border:1.5px solid #9cbcff;border-radius:12px;padding:8px 12px;box-shadow:0 8px 22px #1e3c6e33;font-size:12px;color:#3d4756;white-space:nowrap}.callout:after{content:"";position:absolute;left:50%;bottom:-26px;width:2px;height:24px;background:linear-gradient(#2f6df6,#2f6df600)}.callout div{display:flex;flex-direction:column}.callout b{font-size:13px;color:#1c2738}.callout.is-blue{border-color:#2f6df6;background:#2f6df6;color:#dbe7ff}.callout.is-blue b{color:#fff}.callout.is-red{border-color:#ff9a90}.callout.is-red:after{background:linear-gradient(#ff4d3d,#ff4d3d00)}.callout-n{font-style:normal;width:22px;height:22px;border-radius:50%;background:#2f6df6;color:#fff;display:grid;place-items:center;font-weight:700;font-size:12px;flex:none}.callout .ok{color:#16a34a}.callout .warn{color:#e5493a}.plus-one{font:700 15px Inter,sans-serif;color:#fff;background:#22c55e;padding:3px 9px;border-radius:999px;box-shadow:0 4px 12px #22c55e73;animation:plus-rise 1.6s ease-out forwards;pointer-events:none}@keyframes plus-rise{0%{transform:translateY(10px) scale(.6);opacity:0}15%{transform:translateY(0) scale(1.1);opacity:1}70%{opacity:1}to{transform:translateY(-46px) scale(1);opacity:0}}.state-row{display:flex;align-items:center;gap:4px;margin-top:3px;overflow:visible!important}.state-row .state{margin-top:0}
