/* ==========================================================================
   Atlas — FreightMaster design system (dark-only, dense, cartographic)
   Ported from claude.ai/design project "FreightMaster design system"
   (FreightMaster.dc.html + atlas/colors_and_type.css). This file owns the
   app's visual language: design tokens, base elements, Bootstrap dark
   overrides, the app shell, and reusable Atlas components.
   ========================================================================== */

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

:root {
  /* ---- Canvas ---- */
  --bg-0:#07090D; --bg-1:#0A0C10; --bg-2:#0F1218; --bg-3:#151922; --bg-4:#1C2130; --bg-5:#242A3B;
  --scrim:rgba(3,5,9,0.72); --scrim-light:rgba(3,5,9,0.40);

  /* ---- Foreground ---- */
  --fg-0:#F3F5F9; --fg-1:#D5DAE4; --fg-2:#B5BDCB; --fg-3:#9BA5B7; --fg-4:#8792A6;

  /* ---- Borders ---- */
  --border-0:rgba(255,255,255,0.04); --border-1:rgba(255,255,255,0.07);
  --border-2:rgba(255,255,255,0.11); --border-3:rgba(255,255,255,0.18); --border-focus:#4DD4FF;

  /* ---- Accent (Atlas cyan) ---- */
  --accent:#4DD4FF; --accent-hover:#7FE0FF; --accent-press:#2DB8E8;
  --accent-dim:rgba(77,212,255,0.14); --accent-dimmer:rgba(77,212,255,0.06);

  /* ---- Semantic ---- */
  --success:#4ADE80; --success-dim:rgba(74,222,128,0.14);
  --warning:#FBBF24; --warning-dim:rgba(251,191,36,0.14);
  --danger:#F87171;  --danger-dim:rgba(248,113,113,0.14);
  --info:#60A5FA;    --info-dim:rgba(96,165,250,0.14);

  /* ---- Categorical ---- */
  --cat-person:#5EA8FF; --cat-org:#A78BFA; --cat-event:#F59E0B; --cat-place:#34D399;
  --cat-doc:#F472B6; --cat-artifact:#22D3EE; --cat-transaction:#FACC15; --cat-signal:#FB7185;
  --cat-person-dim:rgba(94,168,255,0.16); --cat-org-dim:rgba(167,139,250,0.16);
  --cat-event-dim:rgba(245,158,11,0.16); --cat-place-dim:rgba(52,211,153,0.16);
  --cat-doc-dim:rgba(244,114,182,0.16); --cat-artifact-dim:rgba(34,211,238,0.16);
  --cat-transaction-dim:rgba(250,204,21,0.16); --cat-signal-dim:rgba(251,113,133,0.16);

  /* ---- Agent (Compass) ---- */
  --agent:#B39BFF; --agent-dim:rgba(179,155,255,0.12); --agent-glow:rgba(179,155,255,0.28);

  /* ---- Type ---- */
  --font-sans:'Inter Tight',ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;
  --font-mono:'JetBrains Mono',ui-monospace,'SF Mono',Menlo,Consolas,monospace;

  /* ---- Radii ---- */
  --r-1:2px; --r-2:3px; --r-3:4px; --r-4:6px; --r-full:999px;

  /* ---- Shadows / glows ---- */
  --shadow-0:0 1px 0 rgba(0,0,0,0.4);
  --shadow-1:0 2px 8px rgba(0,0,0,0.35),0 1px 2px rgba(0,0,0,0.25);
  --shadow-2:0 8px 24px rgba(0,0,0,0.45),0 2px 6px rgba(0,0,0,0.3);
  --shadow-3:0 20px 48px rgba(0,0,0,0.55),0 4px 12px rgba(0,0,0,0.35);
  --ring-focus:0 0 0 2px rgba(77,212,255,0.28),0 0 0 1px var(--accent);

  /* ---- Layout ---- */
  --sidebar-w:240px; --topbar-h:56px;
}

* { box-sizing:border-box; }

@keyframes fm-pulse { 0%,100%{opacity:1} 50%{opacity:.45} }
@keyframes fm-dash  { to{stroke-dashoffset:-12} }
@keyframes fm-spin  { to{transform:rotate(360deg)} }
.fm-spin { animation:fm-spin .7s linear infinite; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior:auto !important; }
  *, *::before, *::after {
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    scroll-behavior:auto !important;
    transition-delay:0ms !important;
    transition-duration:.01ms !important;
  }
}

/* ==========================================================================
   BASE ELEMENTS
   ========================================================================== */
html, body {
  background:var(--bg-1);
  color:var(--fg-1);
  font-family:var(--font-sans);
  font-size:13px;
  line-height:1.5;
  font-feature-settings:'ss01','cv11','calt';
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  margin:0;
}

h1,h2,h3,h4,h5,h6 {
  color:var(--fg-0); font-family:var(--font-sans); font-weight:600;
  line-height:1.15; letter-spacing:-0.02em; margin:0;
}
h1 { font-size:24px; font-weight:700; }
h2 { font-size:20px; }
h3 { font-size:16px; }
h4 { font-size:14px; font-weight:500; }

a { color:var(--accent); text-decoration:none; transition:color .14s; }
a:hover { color:var(--accent-hover); }

code,kbd,samp,pre,.mono { font-family:var(--font-mono); }
kbd {
  background:var(--bg-3); border:1px solid var(--border-2); border-bottom-width:2px;
  padding:1px 5px; border-radius:var(--r-1); font-size:10px; color:var(--fg-1);
}
hr { border:0; border-top:1px solid var(--border-1); margin:16px 0; }
::selection { background:var(--accent-dim); color:var(--fg-0); }

* { scrollbar-width:thin; scrollbar-color:var(--bg-5) transparent; }
*::-webkit-scrollbar { width:8px; height:8px; }
*::-webkit-scrollbar-track { background:transparent; }
*::-webkit-scrollbar-thumb { background:var(--bg-5); border-radius:var(--r-full); }
*::-webkit-scrollbar-thumb:hover { background:var(--fg-4); }

/* Hover helpers (from the design's <style> block) */
.fm-nav:hover { background:var(--bg-3)!important; color:var(--fg-0)!important; }
.fm-row:hover { background:var(--bg-3)!important; }
.fm-qa:hover  { background:var(--bg-4)!important; border-color:var(--border-3)!important; }

/* Number inputs without the ugly native spinner arrows */
input.fm-num::-webkit-outer-spin-button,
input.fm-num::-webkit-inner-spin-button { -webkit-appearance:none; margin:0; }
input.fm-num { -moz-appearance:textfield; appearance:textfield; }

/* Stepper (− value +) */
.fm-stepper { display:inline-flex; align-items:center; height:32px; border:1px solid var(--border-2); border-radius:var(--r-2); overflow:hidden; background:var(--bg-2); }
.fm-stepper button { width:28px; height:30px; border:0; background:var(--bg-4); color:var(--fg-1); cursor:pointer; font-size:15px; line-height:1; display:flex; align-items:center; justify-content:center; }
.fm-stepper button:hover { background:var(--bg-5); color:var(--fg-0); }
.fm-stepper input { width:40px; height:30px; text-align:center; border:0; background:none; color:var(--fg-0); font-family:var(--font-mono); font-size:13px; outline:none; }

/* Toggle switch */
.fm-switch { width:34px; height:20px; border-radius:999px; background:var(--bg-4); border:1px solid var(--border-2); position:relative; transition:background .15s,border-color .15s; flex-shrink:0; display:inline-block; cursor:pointer; }
.fm-switch.on { background:var(--accent); border-color:var(--accent); }
.fm-switch-knob { position:absolute; top:1px; left:1px; width:16px; height:16px; border-radius:999px; background:#fff; transition:left .15s; box-shadow:0 1px 2px rgba(0,0,0,.4); }
.fm-switch.on .fm-switch-knob { left:15px; }

/* ==========================================================================
   APP SHELL
   ========================================================================== */
.fm-shell { display:flex; min-height:100vh; width:100%; background:var(--bg-1);
  font-family:var(--font-sans); color:var(--fg-1); }

.fm-sidebar { width:var(--sidebar-w); flex-shrink:0; background:var(--bg-0);
  border-right:1px solid var(--border-1); display:flex; flex-direction:column;
  position:sticky; top:0; height:100vh; }

.fm-brand { height:var(--topbar-h); display:flex; align-items:center; gap:10px;
  padding:0 16px; border-bottom:1px solid var(--border-1); }
.fm-brand-mark { width:28px; height:28px; border-radius:6px;
  background:linear-gradient(135deg,var(--accent),var(--accent-press));
  display:flex; align-items:center; justify-content:center; flex-shrink:0; }

.fm-nav-filter { margin:10px 8px 0;height:34px;display:flex;align-items:center;gap:7px;padding:0 9px;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--bg-2);color:var(--fg-3);flex-shrink:0; }
.fm-nav-filter:focus-within { border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-dim); }
.fm-nav-filter input { width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--fg-1);font-size:11px; }
.fm-nav-filter button { border:0;background:none;color:var(--fg-3);font-size:17px;line-height:1;padding:0; }
.fm-navwrap { flex:1; overflow-y:auto; padding:9px 8px 12px; }
.fm-nav-group { margin-bottom:5px; }
.fm-nav-group > summary { list-style:none;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 9px;border-radius:var(--r-2);cursor:pointer;color:var(--fg-3);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.055em; }
.fm-nav-group > summary::-webkit-details-marker { display:none; }
.fm-nav-group > summary:hover { background:var(--bg-2);color:var(--fg-1); }
.fm-nav-group > summary:focus-visible { background:var(--bg-2);color:var(--fg-1);outline:2px solid var(--accent);outline-offset:2px; }
.fm-nav-group > summary span { display:flex;align-items:center;gap:8px; }
.fm-nav-group > summary span i { color:var(--accent);font-size:12px; }
.fm-nav-group > summary > i { font-size:9px;transition:transform .15s ease; }
.fm-nav-group[open] > summary > i { transform:rotate(180deg); }
.fm-nav-group-items { padding-top:2px; }
.fm-nav-section-label { display:flex;align-items:center;gap:6px;margin:7px 9px 3px;padding-top:7px;border-top:1px solid var(--border-1);font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3); }
.fm-nav-section-label:first-child { margin-top:2px;padding-top:3px;border-top:0; }
.fm-nav-section-label.road i { color:var(--accent); }
.fm-nav-section-label.air i { color:var(--success); }
.fm-nav-section-label.multimodal i { color:var(--cat-org); }
.fm-nav-mode{margin:5px 0;border:1px solid var(--border-1);border-radius:8px;background:color-mix(in srgb,var(--bg-2) 72%,transparent);overflow:hidden}.fm-nav-mode>summary{list-style:none;min-height:42px;display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:7px;padding:6px 9px;cursor:pointer;color:var(--fg-2)}.fm-nav-mode>summary::-webkit-details-marker{display:none}.fm-nav-mode>summary:hover{background:var(--bg-2);color:var(--fg-0)}.fm-nav-mode>summary:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.fm-nav-mode>summary>span:first-child{min-width:0;display:flex;align-items:center;gap:8px}.fm-nav-mode>summary>span:first-child>i{width:16px;text-align:center;font-size:13px}.fm-nav-mode>summary>span:first-child>span{min-width:0;display:grid;gap:1px}.fm-nav-mode>summary strong{font-size:10px;line-height:1.2;text-transform:uppercase;letter-spacing:.055em}.fm-nav-mode>summary small{font-size:8px;color:var(--fg-4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fm-nav-mode>summary>i{font-size:8px;color:var(--fg-4);transition:transform .15s ease}.fm-nav-mode[open]>summary>i{transform:rotate(180deg)}.fm-nav-mode-count{min-width:20px;padding:2px 5px;border:1px solid var(--border-1);border-radius:999px;color:var(--fg-3);font-family:var(--font-mono);font-size:8px;text-align:center}.fm-nav-mode-items{padding:4px;border-top:1px solid var(--border-1);background:var(--bg-0)}.fm-nav-mode.road[open]{border-color:color-mix(in srgb,var(--accent) 35%,var(--border-1))}.fm-nav-mode.road>summary>span:first-child>i{color:var(--accent)}.fm-nav-mode.air[open]{border-color:color-mix(in srgb,var(--success) 35%,var(--border-1))}.fm-nav-mode.air>summary>span:first-child>i{color:var(--success)}.fm-nav-mode.multimodal[open]{border-color:color-mix(in srgb,var(--cat-org) 35%,var(--border-1))}.fm-nav-mode.multimodal>summary>span:first-child>i{color:var(--cat-org)}
.fm-nav-mode.commercial[open]{border-color:color-mix(in srgb,var(--warning) 35%,var(--border-1))}.fm-nav-mode.commercial>summary>span:first-child>i{color:var(--warning)}.fm-nav-mode.fleet[open]{border-color:color-mix(in srgb,var(--cat-org) 35%,var(--border-1))}.fm-nav-mode.fleet>summary>span:first-child>i{color:var(--cat-org)}.fm-nav-mode.compliance-command[open]{border-color:color-mix(in srgb,var(--accent) 35%,var(--border-1))}.fm-nav-mode.compliance-command>summary>span:first-child>i{color:var(--accent)}.fm-nav-mode.people-evidence[open]{border-color:color-mix(in srgb,var(--success) 35%,var(--border-1))}.fm-nav-mode.people-evidence>summary>span:first-child>i{color:var(--success)}.fm-nav-mode.network-authority[open]{border-color:color-mix(in srgb,var(--cat-place) 35%,var(--border-1))}.fm-nav-mode.network-authority>summary>span:first-child>i{color:var(--cat-place)}

/* Road planning enters with the same source-readiness and recovery clarity as Air routing. */
.road-planning-entry{margin-bottom:16px;overflow:hidden}.road-planning-entry-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:13px 14px;border-bottom:1px solid var(--border-1)}.road-planning-entry-head>div{min-width:0}.road-planning-entry-head h2{margin:2px 0 3px;font-size:15px;color:var(--fg-0)}.road-planning-entry-head p{margin:0;max-width:860px;font-size:10px;line-height:1.45;color:var(--fg-3)}.road-planning-state{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;padding:6px 9px;border:1px solid currentColor;border-radius:999px;font-size:9px;font-weight:800}.road-planning-state.ready{color:var(--success)}.road-planning-state.warning{color:var(--warning)}.road-planning-state.blocked{color:var(--danger)}.road-planning-metrics{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));border-bottom:1px solid var(--border-1)}.road-planning-metrics article{min-width:0;display:grid;grid-template-columns:24px minmax(0,1fr);gap:7px;align-items:center;padding:9px 10px;border-right:1px solid var(--border-1)}.road-planning-metrics article:last-child{border-right:0}.road-planning-metrics i{color:var(--accent);font-size:13px}.road-planning-metrics span{display:grid;min-width:0}.road-planning-metrics strong{font:800 12px var(--font-mono);color:var(--fg-0)}.road-planning-metrics small{font-size:7px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.road-planning-scopes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:10px}.road-planning-scope{min-width:0;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--bg-2);overflow:hidden}.road-planning-scope>header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 9px;border-bottom:1px solid var(--border-1)}.road-planning-scope>header span{display:flex;align-items:center;gap:6px;min-width:0}.road-planning-scope>header i{color:var(--success)}.road-planning-scope.blockers>header i{color:var(--warning)}.road-planning-scope>header strong{font-size:9px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-1)}.road-planning-scope>header em{font:700 8px var(--font-mono);font-style:normal;color:var(--fg-3);white-space:nowrap}.road-planning-job{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;align-items:center;padding:7px 9px;border-bottom:1px solid var(--border-1)}.road-planning-job:last-child{border-bottom:0}.road-planning-job>span{display:grid;gap:1px;min-width:0}.road-planning-job strong{font-size:9px;color:var(--fg-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.road-planning-job small{font-size:8px;line-height:1.35;color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.road-planning-job em{font:700 8px var(--font-mono);font-style:normal;color:var(--fg-3);white-space:nowrap}.road-planning-job a{padding:4px 7px;border:1px solid color-mix(in srgb,var(--warning) 42%,var(--border-1));border-radius:5px;color:var(--warning);font-size:8px;font-weight:800;text-decoration:none;white-space:nowrap}.road-planning-job a:hover{border-color:var(--warning);color:var(--fg-0)}.road-planning-job a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.road-planning-empty{min-height:52px;display:flex;align-items:center;gap:8px;padding:9px;color:var(--fg-3);font-size:9px}.road-planning-empty.clear i{color:var(--success)}.road-planning-more{padding:6px 9px;color:var(--fg-3);font-size:8px;background:var(--bg-3)}.road-planning-launch{text-align:left;display:flex;flex-direction:column;gap:10px;border:1px solid var(--border-1);background:var(--bg-2);border-radius:var(--r-3);padding:16px;color:var(--fg-1);min-height:148px;transition:border-color .12s}.road-planning-launch:not(:disabled):hover{border-color:var(--accent)}.road-planning-launch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.road-planning-launch:disabled{opacity:.58;cursor:not-allowed}.road-planning-launch>small{font-size:8px;color:var(--fg-3)}.road-planning-launch-action{margin-top:auto;display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--accent)}
.road-planning-state.loading{color:var(--accent)}.road-planning-loading .road-planning-metrics strong{color:var(--fg-3)}.road-planning-loading-detail{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:10px;align-items:center;padding:13px 14px;background:color-mix(in srgb,var(--accent) 5%,var(--bg-2));color:var(--fg-2)}.road-planning-loading-detail>i{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--accent-dim);color:var(--accent);font-size:14px}.road-planning-loading-detail>span{display:grid;gap:2px;min-width:0}.road-planning-loading-detail strong{font-size:11px;color:var(--fg-1)}.road-planning-loading-detail small{font-size:9px;line-height:1.45;color:var(--fg-3)}.road-planning-loading-detail.failed{background:color-mix(in srgb,var(--danger) 5%,var(--bg-2))}.road-planning-loading-detail.failed>i{background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger)}
.road-saved-route{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:11px;align-items:center;width:100%;min-width:0;text-align:left;border:1px solid var(--border-1);background:var(--bg-3);border-radius:var(--r-2);padding:11px 12px;color:var(--fg-1)}.road-saved-route:not(:disabled):hover{border-color:var(--accent)}.road-saved-route:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.road-saved-route-copy{display:grid;grid-template-columns:auto 1fr;gap:3px 8px;align-items:center;min-width:0}.road-saved-route-copy>span:first-child{grid-column:1/-1}.road-saved-route-copy>.fm-meta.mono{grid-column:1/-1}.road-saved-route-state{width:max-content;max-width:100%;padding:2px 6px;border:1px solid currentColor;border-radius:999px;font-size:8px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.road-saved-route-state.ready{color:var(--success)}.road-saved-route-state.warning{color:var(--warning)}.road-saved-route-state.blocked{color:var(--danger)}.road-saved-route-progress{display:grid;grid-template-columns:64px auto auto;gap:7px;align-items:center}.road-saved-route-progress-track{width:64px;height:7px;border-radius:999px;background:var(--bg-4);overflow:hidden}.road-saved-route-progress-track>span{display:block;height:100%;background:var(--accent)}.road-saved-route-progress small{font:700 8px var(--font-mono);color:var(--fg-3)}
@media(max-width:1100px){.road-planning-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.road-planning-metrics article:nth-child(3){border-right:0}.road-planning-scopes{grid-template-columns:1fr}}
@media(max-width:700px){.road-planning-entry-head{flex-direction:column}.road-planning-state{white-space:normal}.road-planning-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.road-planning-metrics article:nth-child(3){border-right:1px solid var(--border-1)}.road-planning-metrics article:nth-child(even){border-right:0}.road-planning-job{grid-template-columns:1fr}.road-planning-job small{white-space:normal}.road-planning-job a{min-height:44px;display:flex;align-items:center;justify-content:center}}
@media(max-width:700px){.road-planning-loading-detail{grid-template-columns:30px minmax(0,1fr)}.road-planning-loading-detail>.fm-btn{grid-column:1/3;min-height:44px}}
@media(max-width:700px){.road-saved-route{grid-template-columns:36px minmax(0,1fr)}.road-saved-route-progress{grid-column:2;grid-template-columns:minmax(80px,1fr) auto auto}.road-saved-route-progress-track{width:auto}.road-saved-route-copy{grid-template-columns:1fr}.road-saved-route-copy>*{grid-column:1!important}.road-saved-route-state{white-space:normal}.road-saved-route{min-height:44px}}
.road-planning-launch{display:grid;grid-template-columns:40px minmax(0,1fr) auto;grid-template-rows:auto auto;gap:4px 11px;align-items:center;padding:12px 14px;min-height:92px}.road-planning-launch>span:first-child{grid-column:1;grid-row:1/3}.road-planning-launch>span:nth-child(2){grid-column:2;grid-row:1}.road-planning-launch>small{grid-column:2;grid-row:2}.road-planning-launch-action{grid-column:3;grid-row:1/3;margin-top:0;justify-content:flex-end;font-size:11px;white-space:nowrap}
@media(max-width:700px){.road-planning-launch{grid-template-columns:40px minmax(0,1fr)}.road-planning-launch-action{grid-column:1/3;grid-row:3;min-height:44px;justify-content:center;border-top:1px solid var(--border-1);margin-top:7px;padding-top:7px}}
.fm-mode-switch { display:grid;grid-template-columns:minmax(165px,1.25fr) repeat(3,minmax(145px,1fr)) minmax(190px,1.35fr);gap:7px;align-items:stretch;margin:0 0 11px;padding:7px;border:1px solid var(--border-1);border-radius:10px;background:var(--bg-2); }
.fm-mode-switch-label,.fm-mode-switch-boundary,.fm-mode-switch-link { min-width:0;min-height:48px;display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px; }
.fm-mode-switch-label>i { color:var(--fg-3);font-size:17px; }
.fm-mode-switch-label span,.fm-mode-switch-link span { min-width:0;display:grid;line-height:1.25; }
.fm-mode-switch-label strong,.fm-mode-switch-link strong { font-size:11px;color:var(--fg-1); }
.fm-mode-switch-label small,.fm-mode-switch-link small { font-size:9px;color:var(--fg-3); }
.fm-mode-switch-link { border:1px solid transparent;color:var(--fg-2);text-decoration:none;background:var(--bg-1); }
.fm-mode-switch-link>i { font-size:16px;color:var(--fg-3); }
.fm-mode-switch-link:hover { border-color:var(--accent);color:var(--fg-0); }
.fm-mode-switch-link:focus-visible { border-color:var(--accent);outline:2px solid var(--accent);outline-offset:2px;color:var(--fg-0); }
.fm-mode-switch-link.active { border-color:color-mix(in srgb,var(--accent) 55%,var(--border-1));background:color-mix(in srgb,var(--accent) 10%,var(--bg-1)); }
.fm-mode-switch-link.active>i { color:var(--accent); }
.fm-mode-switch-link.air.active { border-color:color-mix(in srgb,var(--success) 55%,var(--border-1));background:color-mix(in srgb,var(--success) 9%,var(--bg-1)); }
.fm-mode-switch-link.air.active>i { color:var(--success); }
.fm-mode-switch-link.multimodal.active { border-color:color-mix(in srgb,var(--cat-org) 55%,var(--border-1));background:color-mix(in srgb,var(--cat-org) 9%,var(--bg-1)); }
.fm-mode-switch-link.multimodal.active>i { color:var(--cat-org); }
.fm-mode-switch-boundary { justify-content:flex-end;color:var(--fg-3);font-size:9px;text-align:right; }
.fm-mode-switch-boundary>i { color:var(--success); }
.fm-mode-switch.compact { grid-template-columns:minmax(110px,.7fr) repeat(3,minmax(130px,1fr));padding:5px;margin-bottom:12px; }
.fm-mode-switch.compact .fm-mode-switch-label,.fm-mode-switch.compact .fm-mode-switch-link { padding:6px 8px; }
.fm-mode-switch.compact .fm-mode-switch-label>i { font-size:14px; }
@media (max-width:1050px) { .fm-mode-switch { grid-template-columns:repeat(3,minmax(0,1fr)); }.fm-mode-switch-label { grid-column:1/-1; }.fm-mode-switch-boundary { grid-column:1/-1;justify-content:flex-start;text-align:left; } }
@media (max-width:620px) { .fm-mode-switch,.fm-mode-switch.compact { grid-template-columns:repeat(3,minmax(0,1fr)); }.fm-mode-switch-label,.fm-mode-switch-boundary { display:none; }.fm-mode-switch-link { min-height:48px;gap:7px;padding:7px 8px; }.fm-mode-switch-link small { display:none; } }
.fm-nav-heading { font-size:10px; font-weight:600; text-transform:uppercase;
  letter-spacing:.08em; color:var(--fg-3); padding:0 10px 6px; }
.fm-nav { width:100%; display:flex; align-items:center; gap:10px; padding:7px 10px;
  margin-bottom:1px; border:0; border-radius:var(--r-2); cursor:pointer; text-align:left;
  font-family:var(--font-sans); font-size:13px; background:transparent; color:var(--fg-2);
  font-weight:500; transition:background .14s,color .14s; text-decoration:none; }
.fm-nav.active { background:var(--accent-dim); color:var(--fg-0); }
.fm-nav .fm-badge { margin-left:auto; }

.fm-tenant { padding:10px; border-top:1px solid var(--border-1); }
.fm-tenant-inner { display:flex; align-items:center; gap:10px; padding:8px;
  border-radius:var(--r-3); background:var(--bg-2); border:1px solid var(--border-1); }
.fm-tenant>button.fm-tenant-inner{width:100%;color:inherit;text-align:left;cursor:pointer}.fm-tenant>button.fm-tenant-inner:hover,.fm-tenant>button.fm-tenant-inner[aria-expanded="true"]{border-color:color-mix(in srgb,var(--accent) 55%,var(--border-1));background:color-mix(in srgb,var(--accent) 7%,var(--bg-2))}.fm-tenant-dismiss{position:fixed;inset:0;z-index:89;border:0;background:transparent}.fm-tenant-context{position:absolute;z-index:90;left:10px;bottom:74px;width:min(360px,calc(100vw - 20px));padding:13px;border:1px solid var(--border-1);border-radius:12px;background:var(--bg-1);box-shadow:0 18px 50px rgba(0,0,0,.35);display:grid;gap:11px}.fm-tenant-context header{display:grid;grid-template-columns:38px 1fr auto;gap:10px;align-items:center}.fm-tenant-context header>div{display:grid;min-width:0}.fm-tenant-context header strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fm-tenant-context header small{font-size:8px;color:var(--fg-3)}.fm-tenant-context header>button{align-self:start;border:0;background:transparent;color:var(--fg-3);padding:3px}.fm-tenant-context-mark{width:38px;height:38px;border-radius:9px;display:grid;place-items:center;color:white;font-weight:800}.fm-tenant-context-facts{display:grid;grid-template-columns:1fr 1fr;gap:6px}.fm-tenant-context-facts>span{display:grid;grid-template-columns:auto 1fr;gap:1px 7px;padding:8px;border:1px solid var(--border-1);border-radius:7px;background:var(--bg-2)}.fm-tenant-context-facts i{grid-row:1/3;color:var(--accent)}.fm-tenant-context-facts small{font-size:7px;text-transform:uppercase;color:var(--fg-4)}.fm-tenant-context-facts strong{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fm-tenant-context-boundary,.fm-tenant-context-warning{display:flex;gap:8px;padding:9px;border-radius:7px;background:color-mix(in srgb,var(--accent) 7%,var(--bg-2))}.fm-tenant-context-warning{background:color-mix(in srgb,var(--warning) 8%,var(--bg-2));border:1px solid color-mix(in srgb,var(--warning) 45%,var(--border-1))}.fm-tenant-context-boundary>i{color:var(--accent)}.fm-tenant-context-warning>i{color:var(--warning)}.fm-tenant-context-boundary span,.fm-tenant-context-warning span{display:grid}.fm-tenant-context-boundary strong,.fm-tenant-context-warning strong{font-size:8px}.fm-tenant-context-boundary small,.fm-tenant-context-warning small{font-size:7px;color:var(--fg-3)}.fm-tenant-context nav{display:grid;grid-template-columns:1fr 1fr;gap:5px}.fm-tenant-context nav a{display:flex;gap:6px;align-items:center;padding:8px;border:1px solid var(--border-1);border-radius:7px;color:var(--fg-1);font-size:8px;text-decoration:none}.fm-tenant-context nav a:hover{border-color:var(--accent);background:var(--accent-dim)}.fm-tenant-change{display:grid;grid-template-columns:auto 1fr auto;gap:9px;align-items:center;text-align:left;border:1px solid var(--border-1);border-radius:7px;padding:9px;background:var(--bg-2);color:var(--fg-1)}.fm-tenant-change span{display:grid}.fm-tenant-change strong{font-size:9px}.fm-tenant-change small{font-size:7px;color:var(--fg-3)}.fm-tenant-change:hover{border-color:var(--warning)}
.fm-nav-availability{margin:7px 10px 9px;padding:9px;display:flex;gap:8px;align-items:flex-start;border:1px solid color-mix(in srgb,var(--warning) 42%,var(--border-1));border-radius:8px;background:color-mix(in srgb,var(--warning) 8%,var(--bg-2));color:var(--warning)}.fm-nav-availability span{display:grid;gap:2px}.fm-nav-availability strong{font-size:9px;line-height:1.25}.fm-nav-availability small{font-size:8px;line-height:1.35;color:var(--fg-3)}.fm-cmdk-status{margin:8px 10px 3px;padding:9px 10px;display:flex;gap:9px;align-items:flex-start;border:1px solid color-mix(in srgb,var(--warning) 42%,var(--border-1));border-radius:8px;background:color-mix(in srgb,var(--warning) 8%,var(--bg-2));color:var(--warning)}.fm-cmdk-status span{display:grid;gap:2px}.fm-cmdk-status strong{font-size:10px}.fm-cmdk-status small{font-size:9px;color:var(--fg-3)}

.fm-main { flex:1; display:flex; flex-direction:column; min-width:0; }
.fm-topbar { height:var(--topbar-h); flex-shrink:0; border-bottom:1px solid var(--border-1);
  background:var(--bg-1); display:flex; align-items:center; gap:16px; padding:0 20px;
  position:sticky; top:0; z-index:5; }
.fm-topbar-context{display:flex;align-items:center;gap:8px;min-width:0;font-size:13px}.fm-topbar-product{color:var(--fg-3)}.fm-topbar-separator{color:var(--fg-4)}.fm-topbar-crumb{overflow:hidden;color:var(--fg-0);font-weight:600;white-space:nowrap;text-overflow:ellipsis}.fm-topbar-spacer{flex:1}.fm-topbar-timezone,.fm-topbar-notifications,.fm-topbar-user{position:relative;flex:0 0 auto}
.fm-mobile-menu,.fm-mobile-scrim,.fm-sidebar-close{display:none}
.fm-content { flex:1; overflow-y:auto; background:var(--bg-1); }

.fm-search { display:flex; align-items:center; gap:8px; height:32px; padding:0 10px;
  border-radius:var(--r-2); background:var(--bg-3); border:1px solid var(--border-2); width:240px; }

.fm-icon-btn { position:relative; width:32px; height:32px; display:flex; align-items:center;
  justify-content:center; border-radius:var(--r-2); background:var(--bg-3);
  border:1px solid var(--border-2); cursor:pointer; color:var(--fg-1); }
.fm-avatar { width:30px; height:30px; border-radius:var(--r-full); background:var(--accent-dim);
  color:var(--accent); display:flex; align-items:center; justify-content:center;
  font-weight:700; font-size:12px; }

/* ==========================================================================
   ATLAS COMPONENTS
   ========================================================================== */
.fm-page { padding:24px; max-width:1320px; margin:0 auto; }
.fm-page-wide { padding:16px 22px; max-width:none; margin:0; }
.fm-page-head { display:flex; align-items:flex-end; justify-content:space-between;
  margin-bottom:18px; gap:16px; flex-wrap:wrap; }
.fm-sub { color:var(--fg-2); font-size:13px; }

.fm-panel { background:var(--bg-2); border:1px solid var(--border-1);
  border-radius:var(--r-3); overflow:hidden; }
.fm-panel-pad { background:var(--bg-2); border:1px solid var(--border-1);
  border-radius:var(--r-3); padding:16px; }
.fm-panel-head { display:flex; align-items:center; justify-content:space-between;
  padding:14px 16px; border-bottom:1px solid var(--border-1); }

.fm-kpi { background:var(--bg-2); border:1px solid var(--border-1);
  border-radius:var(--r-3); padding:14px; display:block; text-decoration:none; }
.fm-kpi:hover { border-color:var(--border-2); }
.fm-kpi-label { font-size:10px; font-weight:600; text-transform:uppercase;
  letter-spacing:.08em; color:var(--fg-3); margin-bottom:10px; }
.fm-kpi-value { font-size:24px; font-weight:700; color:var(--fg-0);
  letter-spacing:-0.02em; line-height:1; }
.fm-kpi-value.mono { font-family:var(--font-mono); }
.fm-kpi-sub { display:flex; align-items:center; gap:5px; margin-top:8px; font-size:11px; }

.fm-grid-6 { display:grid; grid-template-columns:repeat(6,1fr); gap:12px; }
.fm-grid-4 { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }
@media (max-width:1100px){ .fm-grid-6{grid-template-columns:repeat(3,1fr);} .fm-grid-4{grid-template-columns:repeat(2,1fr);} }
@media (max-width:680px){ .fm-grid-6{grid-template-columns:repeat(2,1fr);} }

/* Truck vitals visualisation — schematic | tanks | weight, collapses on narrow viewports */
.fm-truck-vitals { display:grid; grid-template-columns:minmax(0,1.1fr) auto minmax(0,1.2fr); gap:20px; padding:16px; align-items:start; }
@media (max-width:900px){ .fm-truck-vitals{ grid-template-columns:1fr; } }

/* Live telemetry gauge cluster */
.fm-gauge-grid { display:grid; grid-template-columns:repeat(6,1fr); gap:10px; }
@media (max-width:1100px){ .fm-gauge-grid{ grid-template-columns:repeat(3,1fr); } }
@media (max-width:560px){ .fm-gauge-grid{ grid-template-columns:repeat(2,1fr); } }
.fm-gauge { position:relative; background:var(--bg-3); border:1px solid var(--border-1); border-radius:var(--r-2); padding:10px 8px; text-align:center; }
.fm-gauge svg { width:100%; max-width:104px; display:block; margin:0 auto; }
.fm-gauge-val { position:absolute; left:0; right:0; top:calc(50% - 6px); transform:translateY(-50%); font-family:var(--font-mono); font-weight:700; color:var(--fg-0); line-height:1; }
.fm-gauge-lbl { font-size:10px; text-transform:uppercase; letter-spacing:.05em; color:var(--fg-3); margin-top:2px; }

.label-caps { font-size:10px; font-weight:600; text-transform:uppercase;
  letter-spacing:.08em; color:var(--fg-2); }
.fm-meta { font-family:var(--font-mono); font-size:11px; color:var(--fg-3); }

/* Status pill */
.fm-status { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:600;
  padding:3px 9px; border-radius:var(--r-full); }
.fm-status::before { content:''; width:5px; height:5px; border-radius:var(--r-full); background:currentColor; }
.fm-st-open      { color:var(--info);        background:var(--info-dim); }
.fm-st-assigned  { color:var(--cat-person);  background:var(--cat-person-dim); }
.fm-st-intransit { color:var(--warning);     background:var(--warning-dim); }
.fm-st-atrisk    { color:var(--danger);      background:var(--danger-dim); }
.fm-st-completed { color:var(--success);     background:var(--success-dim); }
.fm-st-invoiced  { color:var(--fg-2);        background:var(--bg-4); }
.fm-st-cancelled { color:var(--danger);      background:var(--danger-dim); }

.fm-badge { font-family:var(--font-mono); font-size:10px; font-weight:600;
  padding:1px 6px; border-radius:var(--r-full); background:var(--bg-4); color:var(--fg-2); }
.fm-badge-accent { background:var(--accent-dim); color:var(--accent); }
.fm-badge-danger { background:var(--danger-dim); color:var(--danger); }

/* Buttons (Atlas) */
.fm-btn { display:inline-flex; align-items:center; gap:7px; height:34px; padding:0 14px;
  border-radius:var(--r-2); font-family:var(--font-sans); font-size:13px; font-weight:500;
  cursor:pointer; transition:all .14s; border:1px solid var(--border-2);
  background:var(--bg-3); color:var(--fg-1); text-decoration:none; }
.fm-btn:not(:disabled):hover { background:var(--bg-4); border-color:var(--border-3); color:var(--fg-0); }
.fm-btn:disabled { opacity:.45; cursor:not-allowed; filter:saturate(.35); }
.fm-btn-primary { background:var(--accent); border-color:var(--accent); color:#062430; font-weight:600; }
.fm-btn-primary:not(:disabled):hover { background:var(--accent-hover); border-color:var(--accent-hover); color:#062430; }
.fm-btn-agent { background:var(--agent-dim); border-color:rgba(179,155,255,0.35);
  color:var(--agent); font-weight:600; }
.fm-btn-sm { height:30px; padding:0 12px; font-size:12px; }

/* Data-grid rows */
.fm-grid-row { cursor:pointer; transition:background .14s; }

/* Map */
.fm-map { border-radius:0; }
#fm-map .leaflet-bottom.leaflet-left {
  z-index:1100;
}
#fm-map .leaflet-bottom.leaflet-right {
  z-index:1300;
}
.fm-map-summary {
  min-width:210px;
  max-width:min(300px, calc(100vw - 28px));
  max-height:190px;
  overflow:auto;
  position:relative;
  z-index:940;
  padding:10px;
  border:1px solid rgba(255,255,255,.16);
  border-radius:8px;
  background:rgba(10,12,16,.88);
  color:var(--fg-1);
  box-shadow:0 10px 30px rgba(0,0,0,.32);
  backdrop-filter:blur(8px);
}
.fm-map-summary-title {
  color:var(--fg-0);
  font-size:12px;
  font-weight:800;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-summary-head {
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  align-items:start;
  gap:10px;
}
.fm-map-summary-sub {
  margin-top:2px;
  color:var(--fg-3);
  font-size:10px;
  font-family:var(--font-mono);
}
.fm-map-summary-risk {
  min-width:70px;
  padding:5px 7px;
  border:1px solid;
  border-radius:6px;
  background:rgba(255,255,255,.04);
  text-align:center;
}
.fm-map-summary-risk span {
  display:block;
  color:var(--fg-3);
  font-size:8px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-summary-risk strong {
  display:block;
  margin-top:1px;
  font-family:var(--font-mono);
  font-size:12px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-summary-grid {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:6px;
  margin-top:8px;
}
.fm-map-summary-cell {
  min-width:0;
  padding:6px 5px;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.04);
  text-align:center;
}
.fm-map-summary-cell span,
.fm-map-summary-weather span {
  display:block;
  color:var(--fg-3);
  font-size:9px;
  font-weight:700;
  text-transform:uppercase;
}
.fm-map-summary-cell strong,
.fm-map-summary-weather strong {
  display:block;
  margin-top:2px;
  font-family:var(--font-mono);
  font-size:15px;
}
.fm-map-summary-weather {
  margin-top:7px;
  padding:7px 8px;
  border-left:3px solid;
  border-radius:6px;
  background:rgba(255,255,255,.04);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
}
.fm-map-summary-signals {
  display:flex;
  flex-wrap:wrap;
  gap:5px;
  margin-top:7px;
}
.fm-map-summary-signals button {
  min-width:0;
  max-width:100%;
  padding:4px 6px;
  border:1px solid var(--border-1);
  border-radius:999px;
  background:rgba(255,255,255,.04);
  color:var(--fg-2);
  cursor:pointer;
  font-size:9px;
  font-weight:800;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-summary-signals button:hover {
  border-color:rgba(77,212,255,.38);
  background:rgba(77,212,255,.08);
  color:var(--fg-0);
}
.fm-map-summary-signals button:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-probe {
  width:260px;
  max-width:min(260px, calc(100vw - 28px));
  max-height:calc(100% - 18px);
  overflow:auto;
  position:relative;
  z-index:900;
  margin-left:44px!important;
  padding:9px;
  border:1px solid rgba(255,255,255,.16);
  border-radius:8px;
  background:rgba(10,12,16,.9);
  color:var(--fg-1);
  box-shadow:0 10px 30px rgba(0,0,0,.32);
  backdrop-filter:blur(8px);
}
.fm-map-probe.is-collapsed {
  width:220px;
  max-height:none;
  overflow:hidden;
}
.fm-map-probe-head {
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  align-items:start;
  gap:8px;
}
.fm-map-probe-head span,
.fm-map-probe-head em {
  display:block;
  color:var(--fg-3);
  font-size:9px;
  font-style:normal;
  font-weight:800;
  text-transform:uppercase;
}
.fm-map-probe-head strong {
  display:block;
  min-width:0;
  margin-top:2px;
  color:var(--fg-0);
  font-size:12px;
  font-weight:800;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-probe-head em {
  margin-top:2px;
  font-family:var(--font-mono);
  font-weight:600;
  text-transform:none;
}
.fm-map-probe-actions {
  display:flex;
  align-items:center;
  gap:5px;
}
.fm-map-probe-actions-wide {
  margin-top:7px;
}
.fm-map-probe-toggle {
  min-width:58px;
  height:27px;
  padding:0 9px;
  border:1px solid rgba(77,212,255,.34);
  border-radius:6px;
  background:var(--accent-dim);
  color:var(--accent);
  cursor:pointer;
  font-size:10px;
  font-weight:900;
}
.fm-map-probe-toggle:hover {
  border-color:rgba(77,212,255,.62);
  color:var(--fg-0);
}
.fm-map-probe-toggle:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-probe-collapsed-note {
  margin-top:7px;
  color:var(--fg-3);
  font-size:9px;
  line-height:1.4;
}
.fm-map-probe-action,
.fm-map-probe-scan {
  border:1px solid var(--border-2);
  border-radius:6px;
  background:var(--bg-3);
  color:var(--fg-1);
  cursor:pointer;
  font-size:11px;
  font-weight:800;
}
.fm-map-probe-action {
  height:26px;
  padding:0 8px;
}
.fm-map-probe-scan {
  width:100%;
  height:30px;
  margin-top:7px;
  color:var(--accent);
  background:var(--accent-dim);
  border-color:rgba(77,212,255,.35);
}
.fm-map-probe-action:hover,
.fm-map-probe-scan:hover {
  background:var(--bg-4);
  border-color:var(--border-3);
  color:var(--fg-0);
}
.fm-map-probe-action.is-active {
  border-color:rgba(77,212,255,.48);
  background:var(--accent-dim);
  color:var(--accent);
}
.fm-map-probe-action:focus-visible,
.fm-map-probe-scan:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-probe-counts {
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:5px;
  margin-top:8px;
}
.fm-map-probe-counts span {
  min-width:0;
  padding:5px 6px;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.04);
  color:var(--fg-3);
  font-size:9px;
  font-weight:800;
  text-align:center;
  text-transform:uppercase;
}
.fm-map-probe-counts strong {
  display:block;
  margin-top:2px;
  color:var(--fg-0);
  font-family:var(--font-mono);
  font-size:13px;
}
.fm-map-probe-filters {
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:5px;
  margin-top:7px;
}
.fm-map-probe-source-filters {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:5px;
  margin-top:5px;
}
.fm-map-probe-filters button {
  min-width:0;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.04);
  color:var(--fg-2);
  cursor:pointer;
  padding:5px 4px;
  text-align:center;
}
.fm-map-probe-source-filters button {
  min-width:0;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.035);
  color:var(--fg-2);
  cursor:pointer;
  padding:4px 3px;
  text-align:center;
}
.fm-map-probe-filters button:hover {
  border-color:rgba(255,255,255,.28);
  background:rgba(255,255,255,.08);
}
.fm-map-probe-source-filters button:hover {
  border-color:rgba(255,255,255,.28);
  background:rgba(255,255,255,.08);
}
.fm-map-probe-filters button:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-probe-source-filters button:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-probe-filters button.is-active {
  border-color:rgba(77,212,255,.45);
  background:var(--accent-dim);
  color:var(--accent);
}
.fm-map-probe-source-filters button.is-active {
  border-color:rgba(52,211,153,.45);
  background:rgba(52,211,153,.10);
  color:var(--success);
}
.fm-map-probe-filters span {
  display:block;
  font-size:9px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-probe-source-filters span {
  display:block;
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  font-size:8px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-probe-filters strong {
  display:block;
  margin-top:2px;
  color:var(--fg-0);
  font-family:var(--font-mono);
  font-size:12px;
}
.fm-map-probe-source-filters strong {
  display:block;
  margin-top:2px;
  color:var(--fg-0);
  font-family:var(--font-mono);
  font-size:11px;
}
.fm-map-probe-filter-note {
  margin-top:5px;
  color:var(--fg-3);
  font-size:10px;
  font-family:var(--font-mono);
}
.fm-map-probe-feed-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-top:8px;
  color:var(--fg-3);
  font-size:9px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-probe-feed-head strong {
  color:var(--fg-0);
  font-family:var(--font-mono);
  font-size:11px;
}
.fm-map-probe-feed {
  display:grid;
  gap:5px;
  margin-top:5px;
  max-height:230px;
  overflow:auto;
  padding-right:2px;
}
.fm-map-probe-feed-item {
  width:100%;
  min-width:0;
  display:grid;
  grid-template-columns:56px minmax(0,1fr);
  grid-template-rows:auto auto auto;
  column-gap:7px;
  row-gap:1px;
  padding:6px 7px;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.04);
  color:var(--fg-1);
  cursor:pointer;
  text-align:left;
}
.fm-map-probe-feed-item:hover {
  border-color:rgba(77,212,255,.38);
  background:rgba(77,212,255,.08);
}
.fm-map-probe-feed-item:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-probe-feed-kind,
.fm-map-probe-feed-thumb {
  grid-row:1 / span 3;
  align-self:center;
}
.fm-map-probe-feed-kind {
  color:var(--accent);
  font-size:9px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-probe-feed-thumb {
  width:56px;
  height:40px;
  object-fit:cover;
  border:1px solid rgba(255,255,255,.18);
  border-radius:5px;
  background:var(--bg-4);
}
.fm-map-probe-feed-item strong,
.fm-map-probe-feed-item em,
.fm-map-probe-feed-item small {
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-probe-feed-item strong {
  color:var(--fg-0);
  font-size:11px;
  font-weight:800;
}
.fm-map-probe-feed-item em {
  color:var(--fg-3);
  font-size:10px;
  font-style:normal;
}
.fm-map-probe-feed-item small {
  color:var(--fg-3);
  font-size:9px;
  font-weight:800;
  text-transform:uppercase;
}
.fm-map-probe-feed-item small.is-live {
  color:var(--success);
}
.fm-map-probe-empty {
  margin-top:8px;
  padding:7px;
  border:1px dashed var(--border-1);
  border-radius:6px;
  color:var(--fg-3);
  font-size:10px;
  text-align:center;
}
.fm-map-popup-card {
  width:240px;
  max-width:100%;
}
.fm-map-popup-title {
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:8px;
}
.fm-map-popup-detail {
  margin-top:4px;
  color:var(--fg-2);
}
.fm-map-popup-badge {
  flex:0 0 auto;
  padding:2px 5px;
  border:1px solid var(--border-1);
  border-radius:999px;
  color:var(--fg-3);
  font-size:9px;
  font-weight:800;
  text-transform:uppercase;
}
.fm-map-popup-badge.is-live {
  border-color:rgba(52,211,153,.45);
  color:var(--success);
  background:rgba(52,211,153,.12);
}
.fm-map-popup-image {
  display:block;
  width:100%;
  max-height:150px;
  object-fit:cover;
  margin-top:8px;
  border-radius:6px;
  border:1px solid rgba(255,255,255,.22);
  background:var(--bg-4);
}
.fm-map-popup-placeholder {
  margin-top:8px;
  padding:20px 10px;
  border:1px dashed var(--border-1);
  border-radius:6px;
  color:var(--fg-3);
  background:rgba(255,255,255,.04);
  font-size:11px;
  text-align:center;
}
.fm-map-popup-link {
  display:inline-flex;
  margin-top:8px;
  color:var(--accent);
  font-size:11px;
  font-weight:800;
}
.fm-map-camera-deck {
  position:relative;
  z-index:1250;
  width:310px;
  max-width:min(310px, calc(100vw - 28px));
  max-height:232px;
  overflow:auto;
  padding:9px;
  border:1px solid rgba(255,255,255,.16);
  border-radius:8px;
  background:rgba(10,12,16,.9);
  color:var(--fg-1);
  box-shadow:0 10px 30px rgba(0,0,0,.32);
  backdrop-filter:blur(8px);
}
.fm-map-camera-deck-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  color:var(--fg-0);
  font-size:11px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-camera-deck-head strong {
  color:var(--accent);
  font-family:var(--font-mono);
}
.fm-map-camera-deck-grid {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:6px;
  margin-top:8px;
}
.fm-map-camera-deck-card {
  min-width:0;
  border:1px solid var(--border-1);
  border-radius:7px;
  background:rgba(255,255,255,.04);
  overflow:hidden;
}
.fm-map-camera-deck-card button {
  width:100%;
  min-width:0;
  display:grid;
  gap:4px;
  padding:0 0 7px;
  border:0;
  background:transparent;
  color:inherit;
  cursor:pointer;
  text-align:left;
}
.fm-map-camera-deck-card button:hover {
  background:rgba(77,212,255,.08);
}
.fm-map-camera-deck-card button:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:-2px;
}
.fm-map-camera-deck-card img,
.fm-map-camera-deck-placeholder {
  width:100%;
  height:58px;
  object-fit:cover;
  display:flex;
  align-items:center;
  justify-content:center;
  background:linear-gradient(135deg, rgba(167,139,250,.28), rgba(77,212,255,.14));
  color:var(--fg-2);
  font-size:10px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-camera-deck-card strong,
.fm-map-camera-deck-card em {
  min-width:0;
  margin:0 7px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-camera-deck-card strong {
  color:var(--fg-0);
  font-size:10px;
  font-weight:800;
}
.fm-map-camera-deck-card em {
  color:var(--fg-3);
  font-size:9px;
  font-style:normal;
}
.fm-map-camera-deck-card div {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:6px;
  padding:0 7px 7px;
}
.fm-map-camera-deck-card small {
  min-width:0;
  color:var(--fg-3);
  font-size:8px;
  font-weight:900;
  overflow:hidden;
  text-overflow:ellipsis;
  text-transform:uppercase;
  white-space:nowrap;
}
.fm-map-camera-deck-card small.is-live {
  color:var(--success);
}
.fm-map-camera-deck-card a,
.fm-map-camera-deck-muted {
  flex:0 0 auto;
  color:var(--accent);
  font-size:9px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-camera-deck-muted {
  color:var(--fg-3);
}
.fm-map-weather-deck {
  width:180px;
  max-width:min(180px, calc(100vw - 28px));
  max-height:248px;
  overflow:auto;
  padding:9px;
  border:1px solid rgba(255,255,255,.16);
  border-radius:8px;
  background:rgba(10,12,16,.9);
  color:var(--fg-1);
  box-shadow:0 10px 30px rgba(0,0,0,.32);
  backdrop-filter:blur(8px);
}
.fm-map-weather-deck.is-open {
  width:300px;
  max-width:min(300px, calc(100vw - 28px));
}
.fm-map-weather-samples-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  color:var(--fg-0);
  font-size:11px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-weather-deck-head {
  width:100%;
  min-width:0;
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:2px 8px;
  align-items:center;
  border:0;
  background:transparent;
  color:var(--fg-0);
  cursor:pointer;
  padding:0;
  text-align:left;
  text-transform:uppercase;
}
.fm-map-weather-deck-head:hover span {
  color:var(--accent);
}
.fm-map-weather-deck-head:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:3px;
}
.fm-map-weather-deck-head span {
  color:var(--fg-0);
  font-size:11px;
  font-weight:900;
}
.fm-map-weather-deck-head em {
  grid-column:1 / span 2;
  min-width:0;
  color:var(--fg-3);
  font-size:10px;
  font-style:normal;
  font-weight:800;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  text-transform:none;
}
.fm-map-weather-deck-head strong,
.fm-map-weather-samples-head strong {
  font-family:var(--font-mono);
}
.fm-map-weather-hero,
.fm-map-weather-sample {
  width:100%;
  min-width:0;
  display:grid;
  border:1px solid var(--border-1);
  border-radius:7px;
  background:rgba(255,255,255,.04);
  color:inherit;
  cursor:pointer;
  text-align:left;
}
.fm-map-weather-hero {
  grid-template-columns:34px minmax(0,1fr);
  gap:2px 8px;
  margin-top:8px;
  padding:8px;
}
.fm-map-weather-hero:hover,
.fm-map-weather-sample:hover {
  border-color:rgba(77,212,255,.38);
  background:rgba(77,212,255,.08);
}
.fm-map-weather-hero:focus-visible,
.fm-map-weather-sample:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-weather-glyph,
.fm-map-weather-sample span {
  display:flex;
  align-items:center;
  justify-content:center;
  color:#071018;
  border:2px solid #07090D;
  font:900 12px/1 system-ui;
}
.fm-map-weather-glyph {
  grid-row:1 / span 3;
  width:30px;
  height:30px;
  border-radius:10px;
}
.fm-map-weather-hero strong,
.fm-map-weather-hero em,
.fm-map-weather-hero small,
.fm-map-weather-sample strong,
.fm-map-weather-sample em {
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-weather-hero strong,
.fm-map-weather-sample strong {
  color:var(--fg-0);
  font-size:11px;
  font-weight:850;
}
.fm-map-weather-hero em,
.fm-map-weather-sample em {
  color:var(--fg-3);
  font-size:10px;
  font-style:normal;
}
.fm-map-weather-hero small {
  color:var(--fg-3);
  font-size:9px;
  font-weight:850;
  text-transform:uppercase;
}
.fm-map-weather-samples {
  display:grid;
  gap:5px;
  margin-top:8px;
}
.fm-map-weather-sample {
  grid-template-columns:24px minmax(0,1fr);
  gap:1px 7px;
  padding:6px;
}
.fm-map-weather-sample span {
  grid-row:1 / span 2;
  width:22px;
  height:22px;
  border-radius:999px;
  font-size:10px;
}
.fm-map-weather-empty {
  margin-top:8px;
  padding:7px;
  border:1px dashed var(--border-1);
  border-radius:6px;
  color:var(--fg-3);
  font-size:10px;
  text-align:center;
}
.fm-map-fuel-deck {
  width:150px;
  max-width:min(150px, calc(100vw - 28px));
  max-height:220px;
  overflow:auto;
  padding:9px;
  border:1px solid rgba(255,255,255,.16);
  border-radius:8px;
  background:rgba(10,12,16,.9);
  color:var(--fg-1);
  box-shadow:0 10px 30px rgba(0,0,0,.32);
  backdrop-filter:blur(8px);
}
.fm-map-fuel-deck.is-open {
  width:300px;
  max-width:min(300px, calc(100vw - 28px));
}
.fm-map-fuel-deck-head {
  width:100%;
  min-width:0;
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:2px 8px;
  align-items:center;
  border:0;
  background:transparent;
  color:var(--fg-0);
  cursor:pointer;
  padding:0;
  text-align:left;
  text-transform:uppercase;
}
.fm-map-fuel-deck-head:hover span {
  color:var(--accent);
}
.fm-map-fuel-deck-head:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:3px;
}
.fm-map-fuel-deck-head span {
  color:var(--fg-0);
  font-size:11px;
  font-weight:900;
}
.fm-map-fuel-deck-head em {
  grid-column:1 / span 2;
  min-width:0;
  color:var(--fg-3);
  font-size:10px;
  font-style:normal;
  font-weight:800;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  text-transform:none;
}
.fm-map-fuel-deck-head strong {
  color:#FBBF24;
  font-family:var(--font-mono);
  font-size:12px;
  font-weight:900;
}
.fm-map-fuel-stats {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:6px;
  margin-top:8px;
}
.fm-map-fuel-stats span {
  padding:6px;
  border:1px solid var(--border-1);
  border-radius:7px;
  background:rgba(255,255,255,.04);
  color:var(--fg-3);
  font-size:9px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-fuel-stats strong {
  display:block;
  margin-top:2px;
  color:#FBBF24;
  font-family:var(--font-mono);
  font-size:12px;
}
.fm-map-fuel-list {
  display:grid;
  gap:5px;
  margin-top:8px;
}
.fm-map-fuel-row {
  width:100%;
  min-width:0;
  display:grid;
  grid-template-columns:24px minmax(0,1fr) auto;
  gap:1px 7px;
  align-items:center;
  padding:6px;
  border:1px solid var(--border-1);
  border-radius:7px;
  background:rgba(255,255,255,.04);
  color:inherit;
  cursor:pointer;
  text-align:left;
}
.fm-map-fuel-row:hover {
  border-color:rgba(251,191,36,.45);
  background:rgba(251,191,36,.08);
}
.fm-map-fuel-row:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-fuel-row span {
  grid-row:1 / span 2;
  width:22px;
  height:22px;
  display:flex;
  align-items:center;
  justify-content:center;
  border:2px solid #07090D;
  border-radius:8px;
  background:#FBBF24;
  color:#071018;
  font:900 10px/1 system-ui;
}
.fm-map-fuel-row strong,
.fm-map-fuel-row em {
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-fuel-row strong {
  color:var(--fg-0);
  font-size:11px;
  font-weight:850;
}
.fm-map-fuel-row em {
  grid-column:2 / span 2;
  color:var(--fg-3);
  font-size:10px;
  font-style:normal;
}
.fm-map-fuel-row b {
  grid-column:3;
  grid-row:1;
  color:#FBBF24;
  font-family:var(--font-mono);
  font-size:11px;
}
.fm-map-fuel-empty {
  margin-top:8px;
  padding:8px;
  border:1px dashed var(--border-1);
  border-radius:7px;
  color:var(--fg-3);
  background:rgba(255,255,255,.035);
  font-size:10px;
  line-height:1.35;
}
.fm-scan-bounds-label {
  width:118px;
  height:26px;
  border:1px solid rgba(77,212,255,.55);
  border-radius:999px;
  background:rgba(10,12,16,.86);
  color:var(--accent);
  box-shadow:0 8px 20px rgba(0,0,0,.35);
  cursor:pointer;
  font-size:10px;
  font-weight:900;
  text-transform:uppercase;
}
.fm-map-legend {
  width:190px;
  max-width:min(190px, calc(100vw - 28px));
  max-height:320px;
  overflow:auto;
  padding:9px;
  border:1px solid rgba(255,255,255,.16);
  border-radius:8px;
  background:rgba(10,12,16,.88);
  color:var(--fg-1);
  box-shadow:0 10px 30px rgba(0,0,0,.32);
  backdrop-filter:blur(8px);
}
.fm-map-legend-title {
  color:var(--fg-0);
  font-size:11px;
  font-weight:800;
  text-transform:uppercase;
}
.fm-map-legend-grid {
  display:grid;
  grid-template-columns:1fr;
  gap:5px;
  margin-top:7px;
}
.fm-map-legend-item {
  min-width:0;
  width:100%;
  display:grid;
  grid-template-columns:22px minmax(0,1fr) auto;
  align-items:center;
  gap:7px;
  padding:5px 6px;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.04);
  color:inherit;
  cursor:pointer;
  text-align:left;
}
.fm-map-legend-item:hover {
  border-color:rgba(255,255,255,.28);
  background:rgba(255,255,255,.08);
}
.fm-map-legend-item:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-legend-item.is-off {
  opacity:.48;
  background:rgba(255,255,255,.025);
}
.fm-map-legend-item span:not(.fm-map-legend-swatch):not(.fm-map-legend-line) {
  min-width:0;
  color:var(--fg-2);
  font-size:11px;
  font-weight:700;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-legend-item strong {
  color:var(--fg-0);
  font-family:var(--font-mono);
  font-size:12px;
}
.fm-map-legend-swatch {
  width:22px;
  height:20px;
  border-radius:6px;
  color:#071018;
  display:flex;
  align-items:center;
  justify-content:center;
  font:900 10px/1 system-ui;
  border:2px solid #07090D;
}
.fm-map-legend-density {
  width:22px;
  height:20px;
  display:block;
  border:2px solid #07090D;
  border-radius:6px;
  background:
    linear-gradient(135deg, rgba(248,113,113,.92) 0 42%, transparent 42%),
    linear-gradient(45deg, rgba(251,191,36,.88) 0 55%, rgba(245,158,11,.9) 55%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.18);
}
.fm-map-legend-line {
  width:22px;
  height:20px;
  display:block;
  position:relative;
}
.fm-map-legend-line::before {
  content:"";
  position:absolute;
  left:1px;
  right:1px;
  top:8px;
  height:5px;
  border-radius:999px;
  background:linear-gradient(90deg,#34D399 0 33%,#FBBF24 33% 66%,#F87171 66% 100%);
}
.fm-map-source-health {
  margin-top:8px;
  padding-top:8px;
  border-top:1px solid var(--border-1);
}
.fm-map-source-health-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
}
.fm-map-source-health-head span {
  color:var(--fg-3);
  font-size:9px;
  font-weight:900;
  letter-spacing:.04em;
  text-transform:uppercase;
}
.fm-map-source-health-head strong,
.fm-map-source-backend {
  color:var(--fg-3);
  font-family:var(--font-mono);
  font-size:9px;
  font-weight:700;
}
.fm-map-source-backend {
  margin-top:2px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-source-list {
  display:grid;
  gap:4px;
  margin-top:6px;
}
.fm-map-source-row {
  min-width:0;
  width:100%;
  display:grid;
  grid-template-columns:8px minmax(0,1fr) auto;
  gap:2px 6px;
  align-items:center;
  padding:5px 6px;
  border:1px solid var(--border-1);
  border-radius:6px;
  background:rgba(255,255,255,.035);
  color:inherit;
  cursor:pointer;
  text-align:left;
}
.fm-map-source-row:hover {
  border-color:rgba(77,212,255,.35);
  background:rgba(77,212,255,.08);
}
.fm-map-source-row:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:2px;
}
.fm-map-source-row > span {
  grid-row:1 / span 2;
  width:7px;
  height:7px;
  border-radius:999px;
  background:var(--fg-3);
}
.fm-map-source-row.is-live > span,
.fm-map-source-row.is-configured > span { background:var(--success); }
.fm-map-source-row.is-watch > span { background:var(--warning); }
.fm-map-source-row.is-stale > span,
.fm-map-source-row.is-empty > span { background:var(--danger); }
.fm-map-source-row strong,
.fm-map-source-row em,
.fm-map-source-row b {
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.fm-map-source-row strong {
  color:var(--fg-1);
  font-size:10px;
  font-weight:850;
}
.fm-map-source-row em {
  grid-column:2 / span 2;
  color:var(--fg-3);
  font-size:9px;
  font-style:normal;
}
.fm-map-source-row b {
  color:var(--fg-2);
  font-family:var(--font-mono);
  font-size:9px;
  font-weight:800;
}

.fm-route-workspace {
  display:grid;
  grid-template-columns:300px minmax(0,1fr) 340px;
  gap:14px;
  align-items:start;
}
.fm-route-corridor-grid {
  padding:9px;
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
}

@media (max-width:1180px) {
  .fm-route-workspace { grid-template-columns:1fr; }
}

@media (max-width:900px) {
  .fm-shell { display:block; }
  .fm-sidebar { position:fixed;z-index:120;top:0;bottom:0;left:0;width:min(330px,88vw);height:100dvh;border-right:1px solid var(--border-1);transform:translateX(-102%);visibility:hidden;pointer-events:none;transition:transform .2s ease,visibility 0s linear .2s;box-shadow:none; }
  .fm-sidebar.mobile-open { transform:translateX(0);visibility:visible;pointer-events:auto;transition-delay:0s;box-shadow:18px 0 50px rgba(0,0,0,.38); }
  .fm-mobile-scrim{display:block;position:fixed;z-index:119;inset:0;border:0;background:rgba(2,6,12,.68);backdrop-filter:blur(2px)}
  .fm-mobile-menu{display:grid;place-items:center;width:36px;height:36px;flex:0 0 auto;border:1px solid var(--border-1);border-radius:8px;background:var(--bg-2);color:var(--fg-1);font-size:19px}
  .fm-sidebar-close{display:grid;place-items:center;position:absolute;z-index:2;top:10px;right:10px;width:36px;height:36px;border:1px solid var(--border-2);border-radius:8px;background:var(--bg-2);color:var(--fg-1);font-size:16px;cursor:pointer}.fm-sidebar-close:hover{border-color:var(--accent);color:var(--fg-0)}.fm-sidebar-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .fm-brand { height:56px; }
  .fm-nav-filter { margin:10px 8px 0; }
  .fm-navwrap { display:block;overflow-y:auto;overflow-x:hidden;padding:9px 8px 12px;width:auto;max-width:none; }
  .fm-nav-group { display:block;margin-bottom:5px; }
  .fm-nav-group > summary { border:0;background:transparent;white-space:normal; }
  .fm-nav-group[open] { display:block; }
  .fm-nav-group-items { display:block;overflow:visible;padding-top:2px; }
  .fm-nav-heading,.fm-tenant { display:block; }
  .fm-nav { width:100%;white-space:normal;margin-bottom:1px;border:0; }
  .fm-tenant-context{position:fixed;left:8px;bottom:70px;width:min(360px,calc(88vw - 16px))}
  .fm-main { width:100%; min-width:0; }
  .fm-topbar { position:relative; height:auto; min-height:48px; flex-wrap:wrap; gap:8px; padding:8px 12px; }
  .fm-topbar > * { min-width:0; }
  .fm-search { width:100%; order:10; }
  .fm-page, .fm-page-wide { padding:14px 12px; }
  .fm-page-head { align-items:flex-start; }
  #fm-map { height:460px!important; }
  .fm-map-probe { width:210px; margin-left:40px!important; padding:8px; }
  .fm-map-summary { width:210px; max-height:176px; padding:8px; }
  .fm-map-summary-grid { gap:4px; }
  .fm-map-summary-cell { padding:4px; }
  .fm-map-summary-cell strong { font-size:12px; }
  .fm-map-summary-signals button { font-size:8px; }
  .fm-map-probe-head strong { font-size:11px; }
  .fm-map-probe-actions { flex-direction:column; gap:4px; }
  .fm-map-probe-action { width:100%; }
  .fm-map-probe-counts { grid-template-columns:repeat(3,minmax(0,1fr)); gap:4px; }
  .fm-map-probe-counts span { padding:4px; font-size:8px; }
  .fm-map-probe-filters { gap:4px; }
  .fm-map-probe-filters span { font-size:8px; }
  .fm-map-probe-source-filters { grid-template-columns:repeat(2,minmax(0,1fr)); gap:4px; }
  .fm-map-probe-filter-note { font-size:9px; }
  .fm-map-probe-feed { max-height:126px; }
  .fm-map-probe-feed-item { grid-template-columns:48px minmax(0,1fr); padding:5px 6px; }
  .fm-map-probe-feed-thumb { width:48px; height:34px; }
  .fm-map-probe-feed-item strong { font-size:10px; }
  .fm-map-probe-feed-item em { font-size:9px; }
  .fm-map-camera-deck { width:210px; max-height:168px; padding:8px; }
  .fm-map-camera-deck-grid { grid-template-columns:1fr; }
  .fm-map-camera-deck-card img,
  .fm-map-camera-deck-placeholder { height:46px; }
  .fm-map-weather-deck { width:210px; max-height:170px; padding:8px; }
  .fm-map-weather-hero { grid-template-columns:30px minmax(0,1fr); padding:6px; }
  .fm-map-weather-glyph { width:26px; height:26px; }
  .fm-map-weather-hero strong,
  .fm-map-weather-sample strong { font-size:10px; }
  .fm-map-weather-hero em,
  .fm-map-weather-sample em { font-size:9px; }
  .fm-map-fuel-deck { width:150px; max-height:160px; padding:8px; }
  .fm-map-fuel-deck.is-open { width:210px; max-width:min(210px, calc(100vw - 28px)); }
  .fm-map-fuel-row strong { font-size:10px; }
  .fm-map-fuel-row em { font-size:9px; }
  .fm-map-legend { width:150px; max-height:260px; padding:8px; }
  .fm-map-legend-title { font-size:10px; }
  .fm-map-legend-grid { gap:4px; }
  .fm-map-legend-item { grid-template-columns:20px minmax(0,1fr) auto; gap:5px; padding:4px 5px; }
  .fm-map-legend-item span:not(.fm-map-legend-swatch):not(.fm-map-legend-line) { font-size:10px; }
  .fm-map-legend-swatch, .fm-map-legend-line { width:20px; height:18px; }
  .fm-map-legend-density { width:20px; height:18px; }
  .fm-route-corridor-grid { grid-template-columns:1fr; }
}
@media (max-width:520px) {
  .fm-topbar{display:grid;grid-template-columns:36px minmax(0,1fr) repeat(3,32px) 30px;gap:8px;padding:8px 12px}
  .fm-topbar-spacer,.fm-topbar-public-track,.fm-topbar-product,.fm-topbar-separator{display:none}
  .fm-mobile-menu{grid-column:1;grid-row:1}.fm-topbar-context{grid-column:2;grid-row:1;overflow:hidden}.fm-topbar-compass{grid-column:3;grid-row:1}.fm-topbar-timezone{grid-column:4;grid-row:1}.fm-topbar-notifications{grid-column:5;grid-row:1}.fm-topbar-user{grid-column:6;grid-row:1}
  .fm-topbar-compass,.fm-topbar-timezone .fm-btn{width:32px;height:32px;padding:0;justify-content:center}
  .fm-topbar-utility-label,.fm-topbar-timezone .fm-btn>.fm-meta{display:none}
  .fm-topbar-timezone .fm-btn{font-size:0}
  .fm-search{grid-column:1/-1;grid-row:2;order:initial}
}
@media (max-width:720px) and (prefers-reduced-motion:reduce){.fm-sidebar{transition:none}}

/* ==========================================================================
   LEAFLET — dark overrides
   ========================================================================== */
.leaflet-container { background:var(--bg-1)!important; font-family:var(--font-sans)!important; }
.leaflet-control-zoom a { background:var(--bg-3)!important; color:var(--fg-1)!important; border-color:var(--border-2)!important; }
.leaflet-control-zoom a:hover { background:var(--bg-4)!important; }
.leaflet-bar { border:1px solid var(--border-2)!important; box-shadow:none!important; }
.leaflet-control-attribution { background:rgba(10,12,16,.72)!important; color:var(--fg-3)!important; font-size:9px!important; }
.leaflet-control-attribution a { color:var(--fg-2)!important; }
.leaflet-popup-content-wrapper,.leaflet-popup-tip { background:var(--bg-3)!important; color:var(--fg-1)!important; border:1px solid var(--border-2)!important; box-shadow:var(--shadow-2)!important; }
.leaflet-popup-content { font-size:12px!important; font-family:var(--font-sans)!important; }
.leaflet-popup-content b { color:var(--fg-0); }

/* ==========================================================================
   BOOTSTRAP DARK OVERRIDES
   So legacy pages (Fleet, Customers, Admin, Users, etc.) inherit the look.
   ========================================================================== */
.container, .container-fluid { color:var(--fg-1); }
.text-muted { color:var(--fg-3)!important; }
.text-success { color:var(--success)!important; }
.text-warning { color:var(--warning)!important; }
.text-danger  { color:var(--danger)!important; }
.text-primary { color:var(--accent)!important; }

.card { background:var(--bg-2); border:1px solid var(--border-1); border-radius:var(--r-3);
  box-shadow:none; color:var(--fg-1); }
.card-header { background:var(--bg-1); border-bottom:1px solid var(--border-1); color:var(--fg-0);
  font-weight:600; }
.card-body { color:var(--fg-1); }
.card.border-primary { border-color:var(--accent)!important; }
.kpi-card .display-6 { font-weight:700; color:var(--fg-0); letter-spacing:-0.02em; }

.table { color:var(--fg-1); border-color:var(--border-1); }
.table > :not(caption) > * > * { background:transparent; color:var(--fg-1); border-color:var(--border-0); }
.table > thead { color:var(--fg-3); }
.table > thead th { font-size:10px; font-weight:600; text-transform:uppercase;
  letter-spacing:.07em; color:var(--fg-3); border-color:var(--border-1); }
.table-hover > tbody > tr:hover > * { background:var(--bg-3); color:var(--fg-0); }
.table-striped > tbody > tr:nth-of-type(odd) > * { background:rgba(255,255,255,0.015); }

.btn-primary { background:var(--accent); border-color:var(--accent); color:#062430; font-weight:600; }
.btn-primary:hover,.btn-primary:active,.btn-primary.active { background:var(--accent-hover)!important; border-color:var(--accent-hover)!important; color:#062430!important; }
.btn-outline-primary { color:var(--accent); border-color:var(--accent); }
.btn-outline-primary:hover { background:var(--accent); border-color:var(--accent); color:#062430; }
.btn-outline-secondary { color:var(--fg-1); border-color:var(--border-2); }
.btn-outline-secondary:hover { background:var(--bg-4); border-color:var(--border-3); color:var(--fg-0); }
.btn-outline-success { color:var(--success); border-color:var(--success); }
.btn-outline-success:hover { background:var(--success); color:#062414; }
.btn-outline-info { color:var(--info); border-color:var(--info); }
.btn-outline-info:hover { background:var(--info); color:#04122b; }
.btn-outline-dark { color:var(--fg-1); border-color:var(--border-2); }
.btn-outline-dark:hover { background:var(--bg-4); color:var(--fg-0); border-color:var(--border-3); }
.btn-outline-danger { color:var(--danger); border-color:var(--danger); }
.btn-outline-danger:hover { background:var(--danger); color:#1a0606; }
.btn-secondary { background:var(--bg-4); border-color:var(--border-2); color:var(--fg-1); }
.btn-close { filter:invert(1) grayscale(1) brightness(1.6); }

.form-control, .form-select { background:var(--bg-3); border:1px solid var(--border-2);
  color:var(--fg-0); border-radius:var(--r-2); }
.form-control:focus, .form-select:focus { background:var(--bg-3); color:var(--fg-0);
  border-color:var(--accent); box-shadow:0 0 0 .2rem rgba(77,212,255,.2); }
.form-control:disabled, .form-select:disabled { background:var(--bg-2); color:var(--fg-2);
  -webkit-text-fill-color:var(--fg-2); border-color:var(--border-1); opacity:1; cursor:not-allowed; }
.form-control::placeholder { color:var(--fg-4); }
.form-label { color:var(--fg-2); font-size:12px; }
.input-group-text { background:var(--bg-4); border:1px solid var(--border-2); color:var(--fg-2); }

.modal-content { background:var(--bg-2); border:1px solid var(--border-2); border-radius:var(--r-4);
  color:var(--fg-1); box-shadow:var(--shadow-3); }
.modal-header, .modal-footer { border-color:var(--border-1); }
.modal-title { color:var(--fg-0); }

.badge.bg-info     { background:var(--info-dim)!important; color:var(--info)!important; }
.badge.bg-warning  { background:var(--warning-dim)!important; color:var(--warning)!important; }
.badge.bg-primary  { background:var(--accent-dim)!important; color:var(--accent)!important; }
.badge.bg-success  { background:var(--success-dim)!important; color:var(--success)!important; }
.badge.bg-secondary{ background:var(--bg-4)!important; color:var(--fg-2)!important; }
.badge.bg-danger   { background:var(--danger-dim)!important; color:var(--danger)!important; }
.badge.bg-light    { background:var(--bg-4)!important; color:var(--fg-1)!important; }

.alert-warning { background:var(--warning-dim); border-color:rgba(251,191,36,.3); color:var(--warning); }
.alert-danger  { background:var(--danger-dim);  border-color:rgba(248,113,113,.3); color:var(--danger); }
.alert-success { background:var(--success-dim); border-color:rgba(74,222,128,.3); color:var(--success); }
.alert-primary { background:var(--accent-dim);  border-color:rgba(77,212,255,.3); color:var(--accent); }
.alert-info    { background:var(--info-dim);     border-color:rgba(96,165,250,.3); color:var(--info); }

.nav-tabs { border-bottom:1px solid var(--border-1); }
.nav-tabs .nav-link { color:var(--fg-3); border:0; }
.nav-tabs .nav-link.active { color:var(--fg-0); background:transparent; border-bottom:2px solid var(--accent); }

.list-group-item { background:var(--bg-2); border-color:var(--border-1); color:var(--fg-1); }
.dropdown-menu { background:var(--bg-3); border:1px solid var(--border-2); }
.dropdown-item { color:var(--fg-1); }
.dropdown-item:hover { background:var(--bg-4); color:var(--fg-0); }

/* ── Keyboard-driven UI: key badges + command palette ───────────────────── */
button.fm-search { cursor:pointer; text-align:left; font:inherit; transition:border-color .12s, background .12s; }
button.fm-search:hover { border-color:var(--border-3); background:var(--bg-4); }

/* Colour-coded key hint pill (nav badges, palette, legends) */
.fm-key {
  font-family:var(--font-mono); font-size:10px; line-height:1; font-weight:700;
  padding:2px 6px; border-radius:var(--r-1); border:1px solid var(--border-2);
  background:var(--bg-3); color:var(--fg-2); min-width:16px; text-align:center;
  display:inline-flex; align-items:center; justify-content:center; letter-spacing:.02em;
}
.fm-nav-key { margin-left:auto; opacity:.55; transition:opacity .12s; }
.fm-nav:hover .fm-nav-key, .fm-nav.active .fm-nav-key { opacity:1; }

/* Command palette (Cmd-K) */
.fm-cmdk-scrim { position:fixed; inset:0; z-index:120; background:rgba(4,7,12,.62);
  backdrop-filter:blur(2px); display:flex; align-items:flex-start; justify-content:center; padding:14vh 16px 16px; }
.fm-cmdk { width:min(620px,100%); background:var(--bg-2); border:1px solid var(--border-2);
  border-radius:var(--r-4); box-shadow:var(--shadow-3); overflow:hidden; display:flex; flex-direction:column;
  max-height:70vh; animation:fm-cmdk-in .12s ease-out; }
@keyframes fm-cmdk-in { from { opacity:0; transform:translateY(-8px) scale(.98); } to { opacity:1; transform:none; } }
.fm-cmdk-search { display:flex; align-items:center; gap:10px; padding:13px 15px; border-bottom:1px solid var(--border-1); }
.fm-cmdk-input { flex:1; background:none; border:0; outline:none; color:var(--fg-0); font-size:15px; }
.fm-cmdk-input::placeholder { color:var(--fg-3); }
.fm-cmdk-hint { flex-shrink:0; }
.fm-cmdk-list { overflow-y:auto; padding:6px; }
.fm-cmdk-context{display:flex;align-items:center;gap:12px;justify-content:space-between;margin:3px 4px 0;padding:8px 10px;border:1px solid var(--border-1);border-radius:8px;background:var(--bg-1)}.fm-cmdk-context>span:first-child{min-width:0;display:grid;gap:2px}.fm-cmdk-context strong{font-size:10px;color:var(--fg-1)}.fm-cmdk-context small{font-size:9px;color:var(--fg-3)}.fm-cmdk-count{flex:0 0 auto;padding:3px 6px;border-radius:999px;background:var(--bg-3);color:var(--fg-3);font-family:var(--font-mono);font-size:8px}
.fm-cmdk-group { font-size:10px; text-transform:uppercase; letter-spacing:.06em; color:var(--fg-3);
  padding:9px 10px 4px; font-weight:600; display:flex;align-items:center;gap:6px; }.fm-cmdk-group::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--fg-4)}.fm-cmdk-group.road::before{background:var(--accent)}.fm-cmdk-group.air::before{background:var(--success)}.fm-cmdk-group.multimodal::before{background:var(--cat-org)}
.fm-cmdk-row { display:flex; align-items:center; gap:11px; width:100%; text-align:left; cursor:pointer;
  padding:8px 10px; border:0; background:none; border-radius:var(--r-2); color:var(--fg-1); }
.fm-cmdk-row.is-active { background:var(--bg-4); }
.fm-cmdk-ico { width:28px; height:28px; border-radius:var(--r-2); display:flex; align-items:center;
  justify-content:center; flex-shrink:0; }
.fm-cmdk-copy{flex:1;min-width:0;display:grid;gap:2px}.fm-cmdk-label { font-size:13.5px; color:var(--fg-0); }.fm-cmdk-copy small{font-size:9px;color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fm-cmdk-empty { padding:22px; text-align:center; color:var(--fg-3); font-size:13px; }
.fm-cmdk-foot { display:flex; align-items:center; gap:14px; padding:9px 14px; border-top:1px solid var(--border-1);
  font-size:11px; color:var(--fg-3); flex-wrap:wrap; }
.fm-cmdk-foot .fm-key { font-size:9px; padding:1px 4px; }
.fm-cmdk-scope{margin-left:auto;color:var(--fg-4);font-family:var(--font-mono);font-size:9px}
@media (max-width:620px){.fm-cmdk-scrim{padding:8vh 8px 8px}.fm-cmdk{max-height:82vh}.fm-cmdk-context{align-items:flex-start}.fm-cmdk-context small{white-space:normal}.fm-cmdk-foot{gap:9px}.fm-cmdk-scope{width:100%;margin-left:0}}

/* ── Bootstrap Icons integration + template chips ───────────────────────── */
.bi { line-height:1; vertical-align:-.125em; display:inline-block; }
.fm-nav-ico { font-size:15px; width:18px; text-align:center; opacity:.9; flex-shrink:0; }
.fm-nav.active .fm-nav-ico, .fm-nav:hover .fm-nav-ico { opacity:1; }

/* One-tap message/dispatch template chip */
.fm-tpl { display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:500;
  padding:5px 10px; border-radius:var(--r-full); border:1px solid var(--border-2);
  background:var(--bg-3); color:var(--fg-1); cursor:pointer; transition:background .12s, border-color .12s; }
.fm-tpl:hover { background:var(--bg-4); color:var(--fg-0); }
.fm-tpl .bi { font-size:13px; }

/* ── Alert prioritisation: severity chips + line clamps ─────────────────── */
.fm-sev { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.03em;
  display:inline-flex; align-items:center; gap:5px; }
.fm-sev .bi { font-size:11px; }
.fm-clamp2, .fm-clamp3 { display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden; }
.fm-clamp2 { -webkit-line-clamp:2; line-clamp:2; }
.fm-clamp3 { -webkit-line-clamp:3; line-clamp:3; }

/* ── Map intelligence: progressive disclosure ───────────────────────────────
   The always-on camera / layers / source-health controls collapse to just their
   header so they don't bury the map; hover or keyboard-focus reveals them. Info
   stays available on demand instead of vomited over the map. */
.fm-map-camera-deck, .fm-map-legend, .fm-map-source-health {
  max-height: 44px; overflow: hidden; opacity: .82;
  transition: max-height .18s ease, opacity .18s ease, box-shadow .18s ease;
}
.fm-map-camera-deck:hover, .fm-map-camera-deck:focus-within,
.fm-map-legend:hover, .fm-map-legend:focus-within,
.fm-map-source-health:hover, .fm-map-source-health:focus-within {
  max-height: 68vh; overflow: auto; opacity: 1; box-shadow: var(--shadow-3);
}
.fm-map-camera-deck-head, .fm-map-legend-title, .fm-map-source-health-head { cursor: pointer; position: relative; }
.fm-map-camera-deck-head::after, .fm-map-legend-title::after, .fm-map-source-health-head::after {
  content: "\F282"; font-family: "bootstrap-icons"; float: right; opacity: .5; font-size: 11px; margin-left: 8px;
}
.fm-map-camera-deck:hover .fm-map-camera-deck-head::after,
.fm-map-legend:hover .fm-map-legend-title::after,
.fm-map-source-health:hover .fm-map-source-health-head::after { content: "\F286"; }

/* ── Reusable panel board (drag / pin / collapse / persist) ─────────────────── */
.fm-board { display:flex; flex-direction:column; gap:10px; width:100%; }
.fm-board-tray { display:flex; flex-wrap:wrap; gap:8px; justify-content:flex-end; }
.fm-board-tray:empty { display:none; }
.fm-board-lane { display:flex; flex-wrap:wrap; gap:14px; align-items:flex-start; width:100%; }

.fm-board-badge { display:inline-flex; align-items:center; gap:7px; padding:5px 11px; border-radius:var(--r-full);
  border:1px dashed var(--border-3); background:var(--bg-3); color:var(--fg-1); font-size:12px; font-weight:600; cursor:pointer;
  transition:background .12s, border-color .12s, color .12s; }
.fm-board-badge:hover { background:var(--bg-4); color:var(--fg-0); border-color:var(--accent); }
.fm-board-badge .bi:first-child { color:var(--accent); }
.fm-board-reset { border-style:solid; }

/* A board panel = flex item; grow/min-width come inline from BoardPanel. */
.fm-bp { position:relative; display:flex; flex-direction:column; gap:14px; min-width:0; }
.fm-bp.is-full-row { width:100%; }
.fm-bp.is-pinned::before { content:""; position:absolute; left:-6px; top:2px; bottom:2px; width:2px;
  border-radius:2px; background:var(--accent); opacity:.7; }

/* Hover control pill straddling the panel's top edge — avoids covering inner headers/toolbars. */
.fm-bp-ctl { position:absolute; top:-11px; right:14px; z-index:30; display:flex; align-items:center; gap:2px;
  padding:2px 4px; border-radius:var(--r-full); background:var(--bg-4); border:1px solid var(--border-2);
  box-shadow:var(--shadow-2); opacity:0; transform:translateY(-2px); transition:opacity .12s, transform .12s; }
.fm-bp:hover .fm-bp-ctl, .fm-bp:focus-within .fm-bp-ctl { opacity:1; transform:none; }
.fm-bp-grip, .fm-bp-btn { display:inline-flex; align-items:center; justify-content:center; width:24px; height:22px;
  border:0; background:none; color:var(--fg-2); border-radius:var(--r-1); cursor:pointer; font-size:13px; }
.fm-bp-grip { cursor:grab; color:var(--fg-3); }
.fm-bp-grip:active { cursor:grabbing; }
.fm-bp-btn:hover { background:var(--bg-5); color:var(--fg-0); }
.fm-bp-btn.is-on { color:var(--accent); }

@media (max-width:900px){ .fm-board-lane { flex-direction:column; } .fm-bp { flex-basis:auto !important; width:100%; } }

/* Route Planning keeps the task setup and map as the primary work surface. Long-running
   evidence feeds form a scannable board beneath it instead of stretching a right rail and
   leaving an empty centre column. */
.routing-intelligence-grid {
  display:grid;
  grid-template-columns:repeat(3,minmax(280px,1fr));
  gap:14px;
  align-items:start;
  min-width:0;
}
.routing-intelligence-grid > .fm-panel { min-width:0; }
@media (max-width:1400px){ .routing-intelligence-grid { grid-template-columns:repeat(2,minmax(280px,1fr)); } }
@media (max-width:900px){ .routing-intelligence-grid { grid-template-columns:1fr; } }

/* Keep active route decisions and dispatch actions together, then let optional evidence
   consume the full width below. This prevents a tall alerts panel from creating a long,
   empty desktop column beside stacked secondary tools. */
.routing-intelligence-layout {
  display:grid;
  gap:14px;
  min-width:0;
}
.routing-decision-grid {
  display:grid;
  grid-template-columns:minmax(0,1.5fr) minmax(290px,.7fr);
  gap:14px;
  align-items:start;
  min-width:0;
}
.routing-decision-grid > .fm-panel,
.routing-action-stack,
.routing-secondary-grid { min-width:0; }
.routing-action-stack {
  display:grid;
  gap:14px;
  align-content:start;
}
.routing-dispatch-body{padding:12px;display:grid;gap:9px}.routing-dispatch-readiness{display:grid;grid-template-columns:20px minmax(0,1fr);gap:8px;align-items:start;padding:9px 10px;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--bg-3);color:var(--fg-2)}.routing-dispatch-readiness>i{margin-top:1px;color:var(--fg-3)}.routing-dispatch-readiness>span{display:grid;gap:2px}.routing-dispatch-readiness strong{font-size:10px}.routing-dispatch-readiness small{font-size:9px;line-height:1.4;color:var(--fg-3)}.routing-dispatch-readiness.ready{border-color:color-mix(in srgb,var(--success) 34%,var(--border-1));background:color-mix(in srgb,var(--success) 6%,var(--bg-3))}.routing-dispatch-readiness.ready>i,.routing-dispatch-readiness.ready strong{color:var(--success)}.routing-dispatch-readiness.blocked{border-color:color-mix(in srgb,var(--danger) 46%,var(--border-1));background:color-mix(in srgb,var(--danger) 7%,var(--bg-3))}.routing-dispatch-readiness.blocked>i,.routing-dispatch-readiness.blocked strong{color:var(--danger)}.routing-dispatch-readiness.sent{border-color:color-mix(in srgb,var(--accent) 38%,var(--border-1));background:color-mix(in srgb,var(--accent) 7%,var(--bg-3))}.routing-dispatch-readiness.sent>i,.routing-dispatch-readiness.sent strong{color:var(--accent)}.routing-override-field{display:grid;gap:5px}.routing-override-field>span{font-size:8px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--fg-2)}.routing-override-field>small{font-size:8px;line-height:1.35;color:var(--fg-3)}
.routing-secondary-grid {
  display:grid;
  grid-template-columns:repeat(2,minmax(280px,1fr));
  gap:14px;
  align-items:start;
  min-width:0;
}
.routing-secondary-grid > .fm-panel { min-width:0; }
@media (max-width:1050px){
  .routing-decision-grid,
  .routing-secondary-grid { grid-template-columns:1fr; }
}

/* Secondary Road tools stay available without forcing every feed, metric and explanation into
   the primary dispatch scan. Native disclosure keeps keyboard and screen-reader behaviour intact. */
.routing-tool-group{min-width:0;overflow:hidden}.routing-tool-group>summary{list-style:none}.routing-tool-group>summary::-webkit-details-marker{display:none}.routing-tool-summary{min-height:58px;padding:11px 13px;display:grid;grid-template-columns:minmax(0,1fr) 18px;gap:10px;align-items:center;cursor:pointer;color:var(--fg-1)}.routing-tool-summary>span{display:grid;gap:2px;min-width:0}.routing-tool-summary small{font-size:7px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--fg-4)}.routing-tool-summary strong{font-size:12px;color:var(--fg-0)}.routing-tool-summary em{font-size:9px;font-style:normal;color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.routing-tool-summary>i{color:var(--fg-3);transition:transform .16s ease}.routing-tool-summary:hover{background:var(--bg-3)}.routing-tool-summary:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.routing-tool-group[open]>.routing-tool-summary{border-bottom:1px solid var(--border-1);background:var(--bg-3)}.routing-tool-group[open]>.routing-tool-summary>i{transform:rotate(180deg);color:var(--accent)}.routing-tool-body{min-width:0}.routing-tool-actions{display:flex;gap:7px;align-items:center;justify-content:flex-end;padding:9px 10px 0}.routing-tool-group:not([open]){align-self:start}.routing-tool-group:not([open]) .routing-tool-actions,.routing-tool-group:not([open]) .routing-tool-body{display:none}
@media(max-width:700px){.routing-tool-summary{min-height:48px}.routing-tool-summary em{white-space:normal}.routing-tool-actions{justify-content:stretch}.routing-tool-actions>.fm-btn{min-height:44px;justify-content:center}.routing-tool-actions>.form-select{min-height:44px}}

/* Road planning decision evidence stays in the primary reading flow. It mirrors Air's explicit
   progress and provenance without creating another long right-hand rail. */
.road-decision-evidence{margin-bottom:14px;overflow:hidden}.road-decision-evidence-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 14px;border-bottom:1px solid var(--border-1)}.road-decision-evidence-head>div{min-width:0}.road-decision-evidence-head h2{font-size:15px;margin:2px 0;color:var(--fg-0)}.road-decision-evidence-head p{font-size:10px;color:var(--fg-3);margin:0}.road-decision-outcome{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;padding:6px 9px;border:1px solid currentColor;border-radius:999px;font-size:9px;font-weight:800}.road-decision-outcome.ready{color:var(--success)}.road-decision-outcome.warning{color:var(--warning)}.road-decision-outcome.blocked{color:var(--danger)}.road-decision-outcome.active{color:var(--accent)}.road-decision-outcome.active i{animation:road-decision-spin .9s linear infinite}.road-decision-steps{list-style:none;margin:0;padding:10px 12px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px}.road-decision-steps li{position:relative;display:grid;grid-template-columns:22px minmax(0,1fr);gap:7px;align-items:start;min-width:0;padding:9px;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--bg-3)}.road-decision-steps li.complete{border-top:2px solid var(--success)}.road-decision-steps li.active{border-top:2px solid var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--bg-3))}.road-decision-steps li.pending{border-top:2px solid var(--border-2)}.road-decision-steps li.warning{border-top:2px solid var(--warning)}.road-decision-steps li.blocked{border-top:2px solid var(--danger)}.road-decision-step-number{display:grid;place-items:center;width:22px;height:22px;border-radius:999px;background:var(--bg-5);font:800 9px var(--font-mono);color:var(--fg-1)}.road-decision-steps li.complete .road-decision-step-number{color:var(--success)}.road-decision-steps li.active .road-decision-step-number{color:var(--accent)}.road-decision-steps li.pending .road-decision-step-number{color:var(--fg-4)}.road-decision-steps li.warning .road-decision-step-number{color:var(--warning)}.road-decision-steps li.blocked .road-decision-step-number{color:var(--danger)}.road-decision-steps li>div{display:grid;gap:2px;min-width:0}.road-decision-steps strong{font-size:9px;color:var(--fg-0)}.road-decision-steps small{font-size:7px;line-height:1.4;color:var(--fg-3)}.road-decision-step-state{grid-column:2;font-size:7px;font-weight:800;text-transform:uppercase;color:var(--fg-2)}.road-decision-sources{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;padding:0 12px 11px}.road-decision-sources>span{display:grid;grid-template-columns:17px minmax(0,1fr);column-gap:6px;padding:7px 8px;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--bg-2);min-width:0}.road-decision-sources i{grid-row:1/3;color:var(--accent);font-size:12px}.road-decision-sources strong{font-size:7px;text-transform:uppercase;color:var(--fg-2)}.road-decision-sources small{font-size:7px;line-height:1.35;color:var(--fg-3);overflow-wrap:anywhere}.road-decision-sources small:empty::after{content:"Not retained"}.road-decision-progress-note{display:flex;align-items:center;gap:6px;margin:0;padding:0 12px 11px;font-size:8px;color:var(--fg-3)}.road-decision-evidence.busy{border-color:color-mix(in srgb,var(--accent) 34%,var(--border-1))}@keyframes road-decision-spin{to{transform:rotate(360deg)}}
.road-agent-authority{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:10px;align-items:center;margin-bottom:14px;padding:12px 14px;border:1px solid color-mix(in srgb,var(--success) 35%,var(--border-1));border-radius:var(--r-2);background:color-mix(in srgb,var(--success) 5%,var(--bg-2))}.road-agent-authority.unbound,.road-agent-authority.review{border-color:color-mix(in srgb,var(--warning) 44%,var(--border-1));background:color-mix(in srgb,var(--warning) 6%,var(--bg-2))}.road-agent-authority.blocked{border-color:color-mix(in srgb,var(--danger) 52%,var(--border-1));background:color-mix(in srgb,var(--danger) 7%,var(--bg-2))}.road-agent-authority>i{display:grid;place-items:center;width:36px;height:36px;border-radius:9px;background:var(--success-dim);color:var(--success);font-size:18px}.road-agent-authority.unbound>i,.road-agent-authority.review>i{background:var(--warning-dim);color:var(--warning)}.road-agent-authority.blocked>i{background:var(--danger-dim);color:var(--danger)}.road-agent-authority>span{display:grid;gap:2px;min-width:0}.road-agent-authority>span small{font-size:7px;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-4)}.road-agent-authority>span strong{font-size:12px;color:var(--fg-0)}.road-agent-authority>span em{max-width:880px;font-size:8px;line-height:1.45;font-style:normal;color:var(--fg-3)}.road-agent-authority dl{grid-column:2;display:flex;gap:8px;flex-wrap:wrap;margin:0}.road-agent-authority dl>div{display:grid;gap:1px;min-width:112px;padding:7px 9px;border:1px solid var(--border-1);border-radius:6px;background:var(--bg-3)}.road-agent-authority dt{font-size:7px;text-transform:uppercase;color:var(--fg-4)}.road-agent-authority dd{margin:0;font:800 9px var(--font-mono);color:var(--fg-1)}.road-agent-authority>.fm-btn{grid-column:3;grid-row:2;white-space:nowrap}.road-agent-authority-error{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:center;margin:-4px 0 14px;padding:10px 14px;border:1px solid color-mix(in srgb,var(--danger) 45%,var(--border-1));border-radius:var(--r-2);color:var(--danger)}.road-agent-authority-error span{display:grid}.road-agent-authority-error strong{font-size:9px}.road-agent-authority-error small{font-size:8px;color:var(--fg-3)}
.road-planning-control-focus{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:8px;align-items:center;padding:10px;border:1px solid color-mix(in srgb,var(--danger) 50%,var(--border-1));border-left:3px solid var(--danger);border-radius:var(--r-2);background:color-mix(in srgb,var(--danger) 7%,var(--bg-2))}.road-planning-control-focus.ready{border-color:color-mix(in srgb,var(--success) 45%,var(--border-1));border-left-color:var(--success);background:color-mix(in srgb,var(--success) 7%,var(--bg-2))}.road-planning-control-focus>i{display:grid;place-items:center;width:32px;height:32px;border-radius:8px;background:var(--danger-dim);color:var(--danger);font-size:15px}.road-planning-control-focus.ready>i{background:var(--success-dim);color:var(--success)}.road-planning-control-focus>span{display:grid;gap:2px;min-width:0}.road-planning-control-focus small{font-size:7px;text-transform:uppercase;letter-spacing:.05em;color:var(--fg-4);overflow-wrap:anywhere}.road-planning-control-focus strong{font-size:10px;color:var(--fg-0)}.road-planning-control-focus em{font-size:8px;line-height:1.45;font-style:normal;color:var(--fg-3)}.road-planning-control-focus>b{padding:3px 6px;border:1px solid currentColor;border-radius:999px;color:var(--danger);font-size:7px;white-space:nowrap}.road-planning-control-focus.ready>b{color:var(--success)}.road-plan-control-field{display:grid;gap:5px}.road-plan-control-field.focused{margin:1px -6px;padding:8px 7px;border:1px solid color-mix(in srgb,var(--danger) 55%,var(--border-1));border-radius:var(--r-2);background:color-mix(in srgb,var(--danger) 6%,transparent)}.road-plan-control-field.focused:focus-within{outline:2px solid var(--accent);outline-offset:2px}.road-plan-control-field>p{display:flex;gap:5px;align-items:flex-start;margin:0;font-size:8px;line-height:1.45;color:var(--fg-3)}.road-plan-control-field>p i{margin-top:1px;color:var(--warning)}.road-capacity-scope{overflow:hidden;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--bg-3)}.road-capacity-scope>header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 9px;border-bottom:1px solid var(--border-1)}.road-capacity-scope>header span{display:grid;gap:1px}.road-capacity-scope>header small{font-size:7px;text-transform:uppercase;color:var(--fg-4)}.road-capacity-scope>header strong{font-size:9px;color:var(--fg-1)}.road-capacity-scope>header em{font:700 8px var(--font-mono);font-style:normal;color:var(--fg-3);white-space:nowrap}.road-capacity-orders{display:grid;max-height:248px;overflow:auto}.road-capacity-orders article{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px;align-items:center;padding:7px 8px;border-bottom:1px solid var(--border-1)}.road-capacity-orders article:last-child{border-bottom:0}.road-capacity-orders article>span{display:grid;gap:1px;min-width:0}.road-capacity-orders strong{font-size:8px;color:var(--fg-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.road-capacity-orders small{font-size:7px;color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.road-capacity-orders .deferred{background:color-mix(in srgb,var(--warning) 5%,var(--bg-3))}.road-capacity-orders .deferred strong,.road-capacity-orders .deferred small{color:var(--fg-4)}.road-capacity-scope>footer{display:flex;gap:6px;align-items:flex-start;padding:7px 9px;border-top:1px solid var(--border-1);font-size:7px;line-height:1.4;color:var(--fg-3)}.road-capacity-scope>footer i{color:var(--accent)}
@media(max-width:1180px){.road-decision-steps{grid-template-columns:repeat(3,minmax(0,1fr))}.road-decision-sources{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:920px){.road-agent-authority{grid-template-columns:36px minmax(0,1fr)}.road-agent-authority dl,.road-agent-authority>.fm-btn{grid-column:2}.road-agent-authority>.fm-btn{grid-row:auto;justify-self:start}}
@media(max-width:700px){.road-decision-evidence-head{align-items:flex-start;flex-direction:column}.road-decision-outcome{white-space:normal}.road-decision-steps,.road-decision-sources{grid-template-columns:1fr}.road-decision-steps li{min-height:44px}.road-agent-authority{grid-template-columns:1fr}.road-agent-authority>i,.road-agent-authority>span,.road-agent-authority dl,.road-agent-authority>.fm-btn{grid-column:auto}.road-agent-authority dl{display:grid;grid-template-columns:1fr}.road-agent-authority>.fm-btn{min-height:44px;justify-content:center}}
@media(max-width:700px){.road-planning-control-focus{grid-template-columns:32px minmax(0,1fr)}.road-planning-control-focus>b{grid-column:2;justify-self:start}.road-capacity-scope>header{align-items:flex-start;flex-direction:column}.road-capacity-orders article{grid-template-columns:1fr}.road-capacity-orders .fm-btn{min-height:44px;justify-content:center}}
.fm-overlay{position:fixed;inset:0;z-index:1200;display:grid;place-items:center;padding:16px;background:var(--scrim);backdrop-filter:blur(4px);overflow:auto}
.fm-modal{width:min(760px,100%);max-height:calc(100vh - 32px);overflow:auto;border:1px solid var(--border-2);border-radius:var(--r-4);background:var(--bg-2);box-shadow:var(--shadow-3)}
.fm-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px;border-bottom:1px solid var(--border-1)}
.fm-modal-head>div{min-width:0}.fm-modal-head h2{margin:2px 0;font-size:20px}.fm-modal-head .fm-meta{max-width:720px}
@media(max-width:520px){.fm-overlay{padding:8px}.fm-modal{max-height:calc(100vh - 16px)}.fm-modal-head{padding:13px}}
.fm-confirm-overlay{position:fixed;inset:0;z-index:1200;display:grid;place-items:center;padding:20px;background:rgba(5,10,18,.72);backdrop-filter:blur(4px)}
.fm-confirm-dialog{width:min(520px,100%);padding:24px;border:1px solid var(--border-1);border-radius:18px;background:var(--surface-1);box-shadow:0 24px 70px rgba(0,0,0,.45)}
.fm-confirm-dialog header{display:flex;gap:14px;align-items:flex-start}.fm-confirm-dialog header h2{margin:2px 0 0;font-size:22px}.fm-confirm-icon{display:grid;place-items:center;width:42px;height:42px;flex:0 0 42px;border-radius:12px;font-size:20px}.fm-confirm-dialog.danger .fm-confirm-icon{color:var(--danger);background:color-mix(in srgb,var(--danger) 14%,transparent)}.fm-confirm-dialog.warning .fm-confirm-icon{color:var(--warning);background:color-mix(in srgb,var(--warning) 14%,transparent)}
.fm-confirm-dialog>p{margin:18px 0 12px;color:var(--text-1);line-height:1.55}.fm-confirm-impact{display:flex;gap:10px;padding:12px;border:1px solid var(--border-1);border-radius:10px;background:var(--surface-2);color:var(--text-2);font-size:13px;line-height:1.45}.fm-confirm-phrase{display:grid;gap:8px;margin-top:16px;font-size:13px}.fm-confirm-phrase code{color:var(--text-1)}.fm-confirm-dialog footer{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
.fm-editor-validation{display:grid;grid-template-columns:auto 1fr;gap:12px;margin:0 0 12px;padding:14px;border:1px solid color-mix(in srgb,var(--danger) 55%,var(--border-1));border-radius:10px;background:color-mix(in srgb,var(--danger) 7%,var(--surface-1));color:var(--text-1)}.fm-editor-validation>i{margin-top:2px;color:var(--danger);font-size:18px}.fm-editor-validation>div{display:grid;gap:3px}.fm-editor-validation span{color:var(--text-2);font-size:12px}.fm-editor-validation ul{display:grid;gap:3px;margin:5px 0 0;padding-left:18px;color:var(--text-2);font-size:12px}
.directory-warning{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;margin-bottom:10px;padding:11px 13px;border:1px solid color-mix(in srgb,var(--warning) 50%,var(--border-1));border-radius:9px;background:color-mix(in srgb,var(--warning) 7%,var(--surface-1))}.directory-warning>i{color:var(--warning)}.directory-warning>span{display:grid}.directory-warning small{color:var(--text-2)}@media(max-width:650px){.directory-warning{grid-template-columns:auto 1fr}.directory-warning button{grid-column:1/-1}}
