:root{--bg:#f4f5f7;--surface:#fff;--surface2:#f8f9fb;--line:#e3e6ea;--line2:#d2d7dd;--text:#15181c;--muted:#5d6670;--dim:#8a939c;--red:#d31f26;--red-dark:#a8161c;--red-soft:#fdecec;--ink:#1d2227;--green:#1b8a4b;--green-soft:#e6f4ec;--amber:#b86e00;--amber-soft:#fdf2e0;--blue:#1f63b5;--blue-soft:#e8f0fb;--radius:10px;--font:"Montserrat","Helvetica Neue",Arial,sans-serif;--mono:ui-monospace,SFMono-Regular,Consolas,monospace}*{box-sizing:border-box}body,html{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:13.5px;line-height:1.45;-webkit-font-smoothing:antialiased}a{color:var(--red);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}input,select,textarea{font:inherit;color:var(--text);background:#fff;border:1px solid var(--line2);border-radius:7px;padding:7px 9px;min-width:0}button:focus-visible,input:focus,select:focus,textarea:focus{outline:2px solid var(--red);outline-offset:1px}label{display:block;font-size:11.5px;color:var(--muted);margin:10px 0 4px;font-weight:600}h1,h2,h3{margin:0;letter-spacing:-.01em}h1{font-size:22px}h1,h2{font-weight:800}h2{font-size:16px}h3{font-size:13px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.top{position:-webkit-sticky;position:sticky;top:0;z-index:20;background:var(--ink);gap:18px;padding:0 20px;height:54px}.brand,.top{color:#fff;display:flex;align-items:center}.brand{gap:10px;font-weight:800;white-space:nowrap}.brand:hover{text-decoration:none}.brand img{height:30px;background:#fff;border-radius:6px;padding:3px 5px}.brand small{color:#b9c0c7;font-weight:600;font-size:12px}.top nav{display:flex;gap:2px;overflow-x:auto;flex:1 1;scrollbar-width:none}.top nav::-webkit-scrollbar{display:none}.top nav a{color:#cfd5db;padding:8px 11px;border-radius:7px;font-weight:600;white-space:nowrap}.top nav a:hover{background:#2c3238;text-decoration:none;color:#fff}.top nav a.on{background:var(--red);color:#fff}.who{display:flex;align-items:center;gap:10px;color:#cfd5db;font-size:12.5px;white-space:nowrap}.who b{color:#fff}.who button{color:#cfd5db;border:1px solid #3a4148;border-radius:7px;padding:5px 9px}.who button:hover{background:#2c3238;color:#fff}main{max-width:1400px;margin:0 auto;padding:20px}main.narrow{max-width:420px;padding-top:8vh}.foot{max-width:1400px;margin:0 auto;padding:10px 20px 30px;color:var(--dim);font-size:12px}.head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:14px}.head p{margin:4px 0 0;color:var(--muted)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:0 0 16px;overflow-x:auto;scrollbar-width:none}.tabs a{padding:9px 12px;color:var(--muted);font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}.tabs a:hover{color:var(--text);text-decoration:none}.tabs a.on{color:var(--text);border-bottom-color:var(--red)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.card+.card{margin-top:14px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.grow{flex:1 1}.right{margin-left:auto}.stack{display:flex;flex-direction:column;gap:14px}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));grid-gap:14px;gap:14px}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));grid-gap:10px;gap:10px;margin-bottom:14px}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.kpi span{display:block;font-size:11.5px;color:var(--muted);font-weight:600}.kpi b{display:block;font-size:22px;font-weight:800;margin-top:2px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.kpi small{color:var(--dim);font-size:11.5px}.kpi.alert b{color:var(--red)}.kpi.good b{color:var(--green)}.btn{display:inline-flex;align-items:center;gap:6px;background:var(--red);color:#fff;border-radius:7px;padding:8px 14px;font-weight:700;white-space:nowrap}.btn:hover{background:var(--red-dark);text-decoration:none}.btn:disabled{opacity:.5;cursor:default}.btn.ghost{background:#fff;color:var(--text);border:1px solid var(--line2)}.btn.ghost:hover{background:var(--surface2)}.btn.sm{padding:5px 10px;font-size:12.5px}.btn.link{background:none;color:var(--red);padding:0;font-weight:600}.btn.link:hover{text-decoration:underline;background:none}.tbl-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);max-height:calc(100vh - 230px)}table{border-collapse:separate;border-spacing:0;width:100%;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}td,th{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;vertical-align:middle}th{position:-webkit-sticky;position:sticky;top:0;z-index:2;background:var(--surface2);font-size:11.5px;color:var(--muted);font-weight:700}td.num,th.num{text-align:right}tr:last-child td{border-bottom:0}tbody tr:hover td{background:#fafbfc}td.code{font-weight:700}td.desc{color:var(--muted);max-width:280px;overflow:hidden;text-overflow:ellipsis}td.sticky,th.sticky{position:-webkit-sticky;position:sticky;left:0;background:inherit;z-index:1}th.sticky{z-index:3;background:var(--surface2)}tbody td.sticky{background:#fff}tr.sub td{background:var(--surface2);white-space:normal}.muted{color:var(--muted)}.dim{color:var(--dim)}.tiny{font-size:11.5px}.red{color:var(--red)}.green{color:var(--green)}.amber{color:var(--amber)}.strong{font-weight:700}.mono{font-family:var(--mono);font-size:12px}.chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:99px;font-size:11.5px;font-weight:700;background:var(--surface2);border:1px solid var(--line);color:var(--muted);white-space:nowrap}.chip.ORDERED{background:var(--blue-soft);color:var(--blue);border-color:transparent}.chip.ON_WATER{background:var(--amber-soft);color:var(--amber);border-color:transparent}.chip.ARRIVED{background:var(--green-soft);color:var(--green);border-color:transparent}.chip.CANCELLED{text-decoration:line-through}.chip.red{background:var(--red-soft);color:var(--red)}.chip.green,.chip.red{border-color:transparent}.chip.green{background:var(--green-soft);color:var(--green)}.note{background:var(--blue-soft);color:#16467f;border-radius:8px;padding:9px 12px;font-size:12.5px}.note.warn{background:var(--amber-soft);color:#7a4a00}.note.err{background:var(--red-soft);color:var(--red-dark)}.age-old{color:var(--red);font-weight:700}.age-mid{color:var(--amber);font-weight:700}.cell-in{width:64px;text-align:right;padding:5px 6px}.cell-in.changed{background:#fff7d6;border-color:#e6c65a}td.past{background:var(--surface2);color:var(--muted)}th.past{color:var(--dim)}td.now,th.now{box-shadow:inset 2px 0 0 var(--red)}.bar{height:8px;border-radius:99px;background:var(--line);overflow:hidden;min-width:80px}.bar>i{display:block;height:100%;background:var(--red)}.bar.good>i{background:var(--green)}.spark{display:flex;gap:2px;align-items:flex-end;height:26px}.spark i{width:6px;background:var(--line2);border-radius:2px 2px 0 0}.spark i.neg{background:var(--red)}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:4px 14px;gap:4px 14px}.form-grid input,.form-grid select{width:100%}.switch{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;cursor:pointer;margin-top:8px}.switch input{width:18px;height:18px;accent-color:var(--red)}.switch b{display:block}.switch span{color:var(--muted);font-size:12px}.loading{padding:40px;color:var(--dim)}.empty,.loading{text-align:center}.empty{padding:30px;color:var(--muted)}.login{background:#fff;border:1px solid var(--line);border-radius:14px;padding:26px}.login img{height:54px;display:block;margin:0 auto 14px}.login input{width:100%;font-size:15px;padding:10px 12px}.login .btn{width:100%;justify-content:center;margin-top:14px;padding:11px}@media (max-width:760px){main{padding:14px}.top{padding:0 12px;gap:10px}.brand small,.who span{display:none}.kpi b,h1{font-size:19px}.tbl-wrap{max-height:none}}@media print{.btn,.foot,.tabs,.top{display:none}body{background:#fff}.tbl-wrap{max-height:none;border:0}}