/* Frontline internal ops — shell styles
   Compact density. Cream app bg, navy-deep sidebar, flat bordered cards. */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
@import url('./tokens.css');

* { box-sizing: border-box; }
html, body, #root { height: 100%; margin: 0; }
body {
  font-family: var(--font-ui);
  color: var(--ink-900);
  background: var(--cream);
  -webkit-font-smoothing: antialiased;
  font-size: 14px;
  line-height: 20px;
}
button { font-family: inherit; cursor: pointer; }
button:focus-visible, a:focus-visible, input:focus-visible, [tabindex]:focus-visible {
  outline: none; box-shadow: 0 0 0 2px var(--cream), 0 0 0 4px var(--rust); border-radius: 6px;
}

.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

/* ---------- Layout ---------- */
.app {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: 52px 1fr;
  height: 100vh;
  background: var(--cream);
}
.sidebar { grid-row: 1 / span 2; background: var(--navy-deep); color: rgba(255,255,255,0.86); border-right: 1px solid #000; }
.topbar  { background: var(--cream); border-bottom: 1px solid var(--ink-200); display: flex; align-items: center; padding: 0 16px; gap: 16px; }
.main    { overflow: auto; padding: 20px 24px; min-width: 0; }
.app { min-width: 1100px; }

/* ---------- Sidebar ---------- */
.sb-brand { padding: 16px 14px; display: flex; align-items: center; gap: 10px; }
.sb-brand img { height: 36px; display: block; }
.sb-section { padding: 14px 12px 6px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(255,255,255,0.4); font-weight: 600; }
.sb-nav { display: flex; flex-direction: column; padding: 0 8px; gap: 1px; }
.sb-nav a { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 6px; font-size: 13px; color: rgba(255,255,255,0.78); text-decoration: none; }
.sb-nav a:hover { background: rgba(255,255,255,0.05); color: #fff; }
.sb-nav a.active { background: rgba(199,90,42,0.16); color: #fff; box-shadow: inset 2px 0 0 var(--rust); }
.sb-nav a .badge { margin-left: auto; background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.7); font-size: 10px; padding: 1px 6px; border-radius: 999px; font-variant-numeric: tabular-nums; }
.sb-nav a.danger .badge { background: var(--danger); color: #fff; }
.sb-foot { position: absolute; bottom: 12px; left: 12px; right: 12px; padding: 8px 10px; display: flex; align-items: center; gap: 8px; color: rgba(255,255,255,0.7); font-size: 12px; border-radius: 6px; }
.sb-foot:hover { background: rgba(255,255,255,0.04); }
.sb-foot .avt { width: 24px; height: 24px; border-radius: 999px; background: var(--rust); color: #fff; display:inline-flex; align-items:center; justify-content:center; font-size: 11px; font-weight: 600; }

/* ---------- Topbar ---------- */
.tb-back {
  display: inline-flex; align-items: center; gap: 4px;
  height: 28px; padding: 0 10px 0 8px;
  background: transparent;
  border: 1px solid var(--ink-200);
  border-radius: 6px;
  color: var(--ink-700);
  font: 500 12px/1 var(--font-ui);
  cursor: pointer;
  transition: background 120ms, border-color 120ms, color 120ms;
}
.tb-back:hover { background: var(--ink-50); border-color: var(--ink-300); color: var(--navy); }
.tb-back:active { background: var(--ink-100); }
.tb-back:focus-visible { outline: 2px solid var(--rust); outline-offset: 2px; }
.tb-search { flex: 1; max-width: 480px; height: 32px; background: var(--surface); border: 1px solid var(--ink-200); border-radius: 6px; display: flex; align-items: center; padding: 0 10px; gap: 8px; color: var(--ink-500); font-size: 13px; }
.tb-search kbd { margin-left: auto; font: 11px var(--font-mono); background: var(--ink-100); border: 1px solid var(--ink-200); padding: 1px 5px; border-radius: 3px; color: var(--ink-700); }
.tb-actions { display: flex; align-items: center; gap: 8px; margin-left: auto; }
.tb-actions .ico { width: 32px; height: 32px; border-radius: 6px; border: 1px solid transparent; background: transparent; display: inline-flex; align-items: center; justify-content: center; color: var(--ink-700); }
.tb-actions .ico:hover { background: var(--ink-100); }
.tb-actions .ico .dot { position: absolute; width: 7px; height: 7px; background: var(--rust); border: 1.5px solid var(--cream); border-radius: 999px; margin-top: -10px; margin-left: 9px; }
.tb-avatar { width: 28px; height: 28px; border-radius: 999px; background: var(--navy); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600; }

/* ---------- Page header ---------- */
.page-head { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 16px; }
.page-head h1 { margin: 0; font-size: 22px; font-weight: 600; letter-spacing: -0.01em; }
.page-head .crumb { font-size: 12px; color: var(--ink-500); margin-bottom: 4px; }
.page-head .actions { display: flex; gap: 8px; }

/* ---------- KPI strip ---------- */
.kpi-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 18px; }
.kpi { background: var(--surface); border: 1px solid var(--ink-200); border-radius: 6px; padding: 12px 14px; display:flex; flex-direction: column; gap: 2px; cursor: pointer; }
.kpi:hover { background: var(--ink-50); }
.kpi .lab { font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-500); font-weight: 600; margin-bottom: 4px; }
.kpi .val { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 24px; font-weight: 600; line-height: 1; letter-spacing: -0.01em; }
.kpi .delta { font-size: 11px; font-family: var(--font-mono); margin-top: 4px; }
.delta.pos { color: var(--success); }
.delta.neg { color: var(--danger); }
.delta.warn { color: var(--warning); }
.kpi.active { box-shadow: inset 0 0 0 2px var(--rust); }
.kpi .spark { margin-top: 8px; height: 22px; }

/* ---------- Saved view tabs ---------- */
.views { display: flex; align-items: center; gap: 2px; border-bottom: 1px solid var(--ink-200); margin-bottom: 12px; }
.views .tab { padding: 8px 12px; font-size: 13px; color: var(--ink-700); cursor: pointer; border: 0; background: transparent; border-bottom: 2px solid transparent; margin-bottom: -1px; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.views .tab .ct { font-family: var(--font-mono); font-size: 11px; color: var(--ink-500); background: var(--ink-100); padding: 1px 6px; border-radius: 999px;}
.views .tab.active { color: var(--ink-900); border-bottom-color: var(--navy); font-weight: 600; }
.views .tab.active .ct { background: var(--sky-light); color: #1f5d85; }
.views .tab:hover:not(.active) { color: var(--ink-900); }
.views .new { margin-left: auto; font-size: 12px; color: var(--ink-500); background: transparent; border: 0; padding: 6px 8px; }

/* ---------- Filter bar ---------- */
.filterbar { display:flex; align-items: center; gap: 8px; padding: 10px 12px; background: var(--surface); border: 1px solid var(--ink-200); border-radius: 6px 6px 0 0; border-bottom: 0;}
.fchip { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: 999px; background: var(--ink-50); border: 1px dashed var(--ink-300); color: var(--ink-700); font-size: 12px; cursor: pointer; white-space: nowrap;}
.fchip.set { background: var(--sky-light); border: 1px solid #7FB3D5; color: #1f5d85; }
.fchip .x { color: inherit; opacity: .6; margin-left: 2px; }
.fchip .lab { font-weight: 500; }
.fchip .val { color: var(--ink-900); }
.fchip.set .val { color: #1f5d85; font-weight: 600; }
.filterbar .right { margin-left: auto; display: flex; gap: 8px; align-items: center; color: var(--ink-500); font-size: 12px;}
.filterbar .save { color: var(--rust); font-weight: 500; cursor: pointer; background: transparent; border: 0; font-size: 12px; }

/* ---------- Bulk actions ---------- */
.bulkbar { display: flex; align-items: center; gap: 12px; padding: 8px 12px; background: var(--navy); color: #fff; border-radius: 6px 6px 0 0; font-size: 13px; margin-bottom: -1px;}
.bulkbar .ct { font-weight: 600; }
.bulkbar .bact { color: rgba(255,255,255,0.92); background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.18); padding: 4px 10px; border-radius: 4px; font-size: 12px; }
.bulkbar .bact:hover { background: rgba(255,255,255,0.14); }
.bulkbar .clear { margin-left: auto; color: rgba(255,255,255,0.7); background: transparent; border: 0; font-size: 12px; }

/* ---------- Table ---------- */
.tbl { background: var(--surface); border: 1px solid var(--ink-200); border-radius: 0 0 6px 6px; overflow: hidden; font-size: 13px; }
.tbl.standalone { border-radius: 6px; }
.tcols, .trow { display: grid; grid-template-columns: 30px 22px 130px 1fr 90px 110px 96px 64px 34px; gap: 12px; padding: 0 14px; align-items: center; }
.tcols { background: var(--ink-50); color: var(--ink-500); text-transform: uppercase; font-size: 10px; letter-spacing: 0.06em; font-weight: 600; height: 34px; border-bottom: 1px solid var(--ink-200); position: sticky; top: 0; z-index: 1;}
.tcols .sort { color: var(--ink-700); }
.trow { height: 36px; border-bottom: 1px solid var(--ink-100); cursor: pointer; }
.trow:last-child { border-bottom: 0; }
.trow:hover { background: var(--ink-50); }
.trow.sel { background: var(--sky-light); }
.trow.sel:hover { background: #C0DFEE; }
.trow .stat { width: 8px; height: 8px; border-radius: 999px; }
.trow .stat.exc { box-shadow: 0 0 0 3px rgba(178,59,46,0.22); }
.trow .id { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 12px; color: var(--ink-900); }
.trow .route { display: flex; align-items: center; gap: 6px; color: var(--ink-700); overflow: hidden; }
.trow .route .city { color: var(--ink-900); font-weight: 500; }
.trow .route .arr { color: var(--ink-500); }
.trow .route .mode { color: var(--ink-500); font-size: 11px; margin-left: 4px; }
.trow .eta { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 12px; color: var(--ink-900); }
.trow .delta { font-size: 11px; font-family: var(--font-mono); }
.trow .av { width: 22px; height: 22px; border-radius: 999px; background: var(--navy); color: #fff; font-size: 10px; font-weight: 600; display: inline-flex; align-items: center; justify-content: center; }
.trow .flagstop { color: var(--danger); font-size: 13px; font-weight: 700; line-height: 1; }
.trow .more { color: var(--ink-500); }
.trow .row-actions { display: none; align-items: center; gap: 4px; }
.trow:hover .row-actions, .trow.sel .row-actions { display: inline-flex; }
.trow .row-actions button { background: var(--surface); border: 1px solid var(--ink-200); color: var(--ink-700); height: 24px; padding: 0 8px; font-size: 11px; border-radius: 4px;}
.trow .row-actions button:hover { background: var(--ink-100); }

/* checkbox */
.ck { width: 14px; height: 14px; border: 1.5px solid var(--ink-300); border-radius: 3px; background: #fff; display: inline-flex; align-items: center; justify-content: center; }
.ck.on { background: var(--navy); border-color: var(--navy); color: #fff; }
.ck.on::after { content: '✓'; font-size: 10px; line-height: 1; }

/* pill */
.pill { display: inline-flex; align-items: center; gap: 5px; padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 500; line-height: 18px; white-space: nowrap; }
.pill .dot { width: 5px; height: 5px; border-radius: 999px; }
.p-info    { background: var(--info-bg); color: #1f5d85; }
.p-info    .dot { background: var(--sky); }
.p-warn    { background: var(--warning-bg); color: #8a6018; }
.p-warn    .dot { background: var(--warning); }
.p-danger  { background: var(--danger-bg); color: #8a2a20; }
.p-danger  .dot { background: var(--danger); }
.p-ok      { background: var(--success-bg); color: #1f5230; }
.p-ok      .dot { background: var(--success); }
.p-mut     { background: var(--ink-100); color: var(--ink-700); }
.p-mut     .dot { background: var(--ink-500); }

/* ---- Stock list expanded drawer — grouped sections ---- */
.row-detail .stk-section + .stk-section { margin-top: 14px; }
.row-detail .stk-section-head {
  font-size: 10.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--ink-500);
  margin: 0 0 8px 0;
  padding-bottom: 6px;
  border-bottom: 1px dashed var(--ink-200);
}
.p-success { background: var(--success-bg); color: #1f5638; }
.p-success .dot { background: var(--success); }
.p-neutral { background: var(--ink-100); color: var(--ink-700); }
.p-neutral .dot { background: var(--ink-500); }

/* table footer / pagination */
.tfoot { display: flex; align-items: center; padding: 10px 14px; border-top: 1px solid var(--ink-200); background: var(--surface); border-radius: 0 0 6px 6px; color: var(--ink-500); font-size: 12px; gap: 10px;}
.tfoot .right { margin-left: auto; display: flex; gap: 4px; align-items: center; }
.pg { background: transparent; border: 1px solid var(--ink-200); padding: 4px 8px; font-size: 12px; border-radius: 4px; color: var(--ink-700);}
.pg:hover { background: var(--ink-50); }
.pg[disabled] { opacity: .4; cursor: not-allowed; }
.pg.cur { background: var(--navy); color: #fff; border-color: var(--navy); }

/* density toggle */
.densel { display: inline-flex; align-items: center; gap: 0; border: 1px solid var(--ink-200); border-radius: 4px; overflow: hidden;}
.densel button { background: transparent; border: 0; padding: 4px 10px; font-size: 11px; color: var(--ink-700); }
.densel button.on { background: var(--ink-100); color: var(--ink-900); font-weight: 500; }

/* ---------- Drawer ---------- */
.drawer-mask { position: fixed; inset: 0; background: rgba(10,22,61,0.32); z-index: 100; animation: fade var(--dur) var(--ease-out); }
@keyframes fade { from { opacity: 0; } to { opacity: 1; } }
.drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(640px, 92vw); background: var(--surface); border-left: 1px solid var(--ink-200); z-index: 101; box-shadow: var(--shadow-modal); display: flex; flex-direction: column; animation: slide var(--dur-slow) var(--ease-out); }
@keyframes slide { from { transform: translateX(24px); opacity: 0; } to { transform: translateX(0); opacity: 1;} }

.dr-head { display: flex; align-items: flex-start; gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--ink-200);}
.dr-head .id { font-family: var(--font-mono); font-size: 12px; color: var(--ink-500); margin-bottom: 2px; }
.dr-head h2 { margin: 0; font-size: 18px; font-weight: 600; letter-spacing: -0.01em;}
.dr-head .close { margin-left: auto; background: transparent; border: 0; color: var(--ink-500); font-size: 18px; line-height: 1; padding: 4px 8px; border-radius: 4px;}
.dr-head .close:hover { background: var(--ink-100); color: var(--ink-900); }
.dr-body { padding: 16px 20px; overflow: auto; flex: 1; display: flex; flex-direction: column; gap: 18px;}

.dr-meta { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px 18px; }
.dr-meta .it .lab { font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-500); font-weight: 600; margin-bottom: 2px;}
.dr-meta .it .val { font-size: 13px; color: var(--ink-900); }
.dr-meta .it.mn .val { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

.dr-section h3 { margin: 0 0 8px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-500); font-weight: 600;}
.dr-tl { display: flex; flex-direction: column; gap: 0; }
.dr-tl .step { display: grid; grid-template-columns: 80px 14px 1fr; gap: 10px; padding: 8px 0; position: relative; }
.dr-tl .step::before { content: ''; position: absolute; left: 86px; top: 16px; bottom: -2px; width: 2px; background: var(--ink-200); }
.dr-tl .step:last-child::before { display: none; }
.dr-tl .step .ts { font-family: var(--font-mono); font-size: 11px; color: var(--ink-500); padding-top: 1px;}
.dr-tl .step .node { width: 10px; height: 10px; border-radius: 999px; border: 2px solid var(--ink-200); background: #fff; margin: 4px 2px; z-index: 1;}
.dr-tl .step.done .node { background: var(--ink-500); border-color: var(--ink-500); }
.dr-tl .step.now .node { background: var(--rust); border-color: var(--rust); box-shadow: 0 0 0 4px rgba(199,90,42,0.18);}
.dr-tl .step .lab { font-size: 13px; font-weight: 500; color: var(--ink-900); }
.dr-tl .step .sub { font-size: 12px; color: var(--ink-500); margin-top: 2px;}
.dr-tl .step.future .lab { color: var(--ink-300); }
.dr-tl .step.future .sub { color: var(--ink-300); }
.dr-tl .step.now .delta { display: inline-block; margin-left: 6px; font-family: var(--font-mono); font-size: 11px; color: var(--warning); }

.docs { display: flex; flex-direction: column; border: 1px solid var(--ink-200); border-radius: 6px; }
.docs .doc { display: grid; grid-template-columns: 22px 1fr 130px 100px 28px; gap: 10px; align-items: center; padding: 10px 12px; border-bottom: 1px solid var(--ink-100); font-size: 13px;}
.docs .doc:last-child { border-bottom: 0; }
.docs .doc:hover { background: var(--ink-50); }
.docs .doc .ico { color: var(--ink-500); }
.docs .doc .name { color: var(--ink-900); font-weight: 500;}
.docs .doc .name .meta { font-size: 11px; color: var(--ink-500); font-weight: 400; margin-left: 6px; font-family: var(--font-mono);}
.docs .doc .ts { font-family: var(--font-mono); font-size: 11px; color: var(--ink-500); }
.docs .doc .dl { background: transparent; border: 0; color: var(--ink-500); padding: 4px;}
.docs .doc .dl:hover { color: var(--navy);}

.dr-foot { padding: 12px 20px; border-top: 1px solid var(--ink-200); background: var(--ink-50); display: flex; gap: 8px; align-items: center;}
.dr-foot .right { margin-left: auto; display: flex; gap: 8px; }

/* ---------- Buttons (shared) ---------- */
.btn { display:inline-flex; align-items:center; gap:6px; font: 500 13px/1 var(--font-ui); padding: 0 12px; height: 30px; border-radius: 6px; border: 1px solid transparent; cursor: pointer; white-space: nowrap; }
.btn-primary { background: var(--navy); color: #fff; }
.btn-primary:hover { background: var(--navy-deep); }
.btn-accent  { background: var(--rust); color: #fff; }
.btn-accent:hover { background: var(--rust-deep); }
.btn-secondary { background: var(--surface); color: var(--navy); border-color: var(--navy); }
.btn-secondary:hover { background: var(--ink-100); }
.btn-ghost { background: transparent; color: var(--navy);}
.btn-ghost:hover { background: var(--ink-100);}
.btn-danger { background: var(--surface); color: var(--danger); border-color: var(--danger);}
.btn-danger:hover { background: var(--danger-bg);}
.btn .ic { width: 14px; height: 14px; }
.btn-sm { height: 26px; padding: 0 9px; font-size: 12px;}
.btn-lg { height: 38px; padding: 0 16px; font-size: 14px;}

.flag { display:inline-block; width:18px; height:12px; border-radius:1px; vertical-align:middle; background:#ddd; flex-shrink: 0; }
.flag.cn { background: #de2910; }
.flag.us { background: #3c3b6e; }
.flag.de { background: linear-gradient(to bottom,#000 33%,#dd0000 33% 66%,#ffce00 66%); }
.flag.nl { background: linear-gradient(to bottom,#ae1c28 33%,#fff 33% 66%,#21468b 66%); }
.flag.vn { background: #da251d; }
.flag.gb { background: #00247d; }
.flag.jp { background: linear-gradient(#fff,#fff); position: relative; }
.flag.jp::after { content: ''; position: absolute; left:50%; top:50%; width: 8px; height: 8px; background: #bc002d; border-radius: 999px; transform: translate(-50%,-50%);}
.flag.kr { background: #fff; position: relative; }
.flag.kr::after { content: ''; position: absolute; left:50%; top:50%; width:8px; height:5px; background: linear-gradient(to bottom, #c70d2c 50%, #003478 50%); transform: translate(-50%,-50%);}
.flag.mx { background: linear-gradient(to right,#006847 33%,#fff 33% 66%,#ce1126 66%); }

/* SVG icon defaults */
.ic { stroke: currentColor; fill: none; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round;}
