/* ============================================================================
   os-v3-chassis.css — SXMeets Desktop OS v3 component chassis (SHARED)
   ----------------------------------------------------------------------------
   Layer 2 of 2. Requires os-v3-tokens.css loaded first.
   Productionized from mockups/fleet-desktop-v3-redesign.html. All accent
   references are var-based (--accent / --accent-glow / color-mix) so a single
   8-line per-OS :root override re-skins the whole component set.

   Contents: layout shell · sidebar · topbar · content · hero (mode/theme
   variants) · KPI strip · grid · panel/seg · list rows · tags · buttons ·
   form inputs · chips/badges · modals · tables · note.

   Domain-specific components (vehicle cards, SVG maps, fuel bars, sparklines,
   bar charts, calendars, floor plans, KDS tiles, …) stay in each OS file's
   own <style> block — they are NOT chassis. See README.md.
   ============================================================================ */

/* ══ LAYOUT SHELL ══════════════════════════════════════════════════════════ */
.app { display:grid; grid-template-columns:var(--sb-w) 1fr; min-height:100vh; }

/* ══ SIDEBAR ═══════════════════════════════════════════════════════════════ */
.sidebar {
  background:var(--surface); border-right:1px solid var(--line);
  display:flex; flex-direction:column; height:100vh; position:sticky; top:0;
  overflow-y:auto;
}
.sb-brand { display:flex; align-items:center; gap:10px; padding:18px 16px 14px; }
.brand-mark {
  width:34px; height:34px; background:var(--accent); color:var(--ink-on-accent);
  border-radius:9px; display:inline-flex; align-items:center; justify-content:center;
  font-weight:800; font-size:17px; letter-spacing:-.02em; flex:0 0 auto;
  box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent),
             0 4px 14px color-mix(in srgb, var(--accent) 25%, transparent);
}
.sb-brand-name { font-weight:600; font-size:15px; color:var(--ink); letter-spacing:-.01em; line-height:1.15; }
.sb-brand-tag { font-family:var(--mono); font-size:10px; color:var(--ink-3); letter-spacing:.04em; margin-top:2px; }
.sb-section {
  font-family:var(--mono); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--ink-3); font-weight:700; padding:16px 18px 6px;
}
.sb-item {
  display:flex; align-items:center; gap:11px; width:calc(100% - 16px); margin:1px 8px;
  padding:9px 11px; border:0; background:none; cursor:pointer; text-align:left;
  color:var(--ink-2); font-family:var(--font); font-size:13.5px; font-weight:500;
  border-radius:9px; transition:background .12s,color .12s; position:relative;
  text-decoration:none;
}
.sb-item:hover { background:var(--surface-2); color:var(--ink); }
.sb-item.active { background:var(--accent-glow); color:var(--accent); font-weight:600; }
.sb-item.active::before {
  content:''; position:absolute; left:-8px; top:50%; transform:translateY(-50%);
  width:3px; height:18px; background:var(--accent); border-radius:0 3px 3px 0;
}
.sb-item svg { width:17px; height:17px; flex:0 0 auto; }
.sb-item .si-lab { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sb-badge {
  font-family:var(--mono); font-size:10px; font-weight:700; min-width:18px; height:18px;
  padding:0 5px; border-radius:9px; display:inline-flex; align-items:center; justify-content:center;
  background:var(--surface-3); color:var(--ink-2);
}
.sb-badge.warn { background:color-mix(in srgb, var(--alert) 18%, transparent); color:var(--alert); }
.sb-badge.accent { background:var(--accent-glow); color:var(--accent); }
.sb-foot { margin-top:auto; padding:14px 16px; border-top:1px solid var(--line); }
.sb-foot-name { font-weight:600; font-size:13px; color:var(--ink); }
.sb-foot-sub { font-family:var(--mono); font-size:10px; color:var(--ink-3); margin-top:2px; }
.sb-foot-row { display:flex; gap:6px; margin-top:10px; }

/* ══ TOP BAR ═══════════════════════════════════════════════════════════════ */
.main { display:flex; flex-direction:column; min-width:0; }
.topbar {
  position:sticky; top:0; z-index:20;
  display:flex; align-items:center; gap:14px;
  padding:14px 26px; background:color-mix(in srgb, var(--bg) 86%, transparent);
  backdrop-filter:blur(14px); border-bottom:1px solid var(--line);
}
.page-title { font-size:18px; font-weight:600; letter-spacing:-.02em; }
.page-title small { display:block; font-family:var(--mono); font-size:10.5px; color:var(--ink-3); font-weight:500; letter-spacing:.04em; margin-top:1px; }
.spacer { flex:1; }
.search {
  display:flex; align-items:center; gap:8px; height:38px; padding:0 12px; min-width:280px;
  background:var(--surface); border:1px solid var(--line); border-radius:10px; color:var(--ink-3);
  font-family:var(--mono); font-size:12px;
}
.search svg { width:15px; height:15px; }
.search .kbd { margin-left:auto; font-family:var(--mono); font-size:10px; color:var(--ink-3); border:1px solid var(--line-2); border-radius:5px; padding:2px 6px; }
.icon-btn {
  width:38px; height:38px; border-radius:10px; background:var(--surface); border:1px solid var(--line);
  color:var(--ink-2); display:inline-flex; align-items:center; justify-content:center; cursor:pointer;
  transition:background .12s,color .12s; position:relative;
}
.icon-btn:hover { background:var(--surface-2); color:var(--ink); }
.icon-btn svg { width:18px; height:18px; }
.icon-btn .dot { position:absolute; top:8px; right:8px; width:7px; height:7px; border-radius:50%; background:var(--alert); border:2px solid var(--surface); }
.action-chip {
  display:inline-flex; align-items:center; gap:7px; height:38px; padding:0 13px;
  background:var(--surface); border:1px solid var(--line); border-radius:10px; cursor:pointer;
  color:var(--ink-2); font-family:var(--mono); font-size:11px; font-weight:700; letter-spacing:.05em;
  text-transform:uppercase; transition:background .12s,border-color .12s,color .12s;
}
.action-chip:hover { background:var(--surface-2); border-color:var(--accent); color:var(--accent); }
.avatar {
  width:38px; height:38px; border-radius:10px; background:var(--surface-3); color:var(--ink);
  display:inline-flex; align-items:center; justify-content:center; font-weight:700; font-size:13px;
  font-family:var(--mono); border:1px solid var(--line-2); cursor:pointer;
}

/* ══ CONTENT ═══════════════════════════════════════════════════════════════ */
.content { padding:22px 26px 60px; max-width:1500px; width:100%; }

/* ══ STATUS HERO ═══════════════════════════════════════════════════════════ */
.hero {
  position:relative; overflow:hidden; border-radius:var(--r-lg);
  background:var(--hero-idle); border:1px solid color-mix(in srgb, var(--accent) 25%, transparent);
  padding:22px 24px; margin-bottom:18px;
  display:flex; align-items:center; gap:28px;
}
[data-mode="offline"] .hero { background:var(--hero-offline); border-color:var(--line); }
[data-mode="online_surge"] .hero { background:var(--hero-surge); border-color:color-mix(in srgb, var(--accent) 30%, transparent); }
.hero-l { flex:1; min-width:0; }
.hero .meta {
  display:flex; align-items:center; gap:8px; font-family:var(--mono); font-size:10.5px;
  color:rgba(255,255,255,.82); letter-spacing:.12em; text-transform:uppercase; margin-bottom:9px;
}
[data-theme="light"] .hero .meta { color:rgba(255,255,255,.92); }
.hero .pulse { width:7px; height:7px; border-radius:50%; background:var(--online); animation:pulse 2s ease-in-out infinite; }
[data-mode="offline"] .hero .pulse { background:var(--offline); animation:none; }
[data-mode="online_surge"] .hero .pulse { background:#fff; }
@keyframes pulse { 0%{box-shadow:0 0 0 0 currentColor;opacity:1} 50%{opacity:.5} 100%{box-shadow:0 0 0 9px transparent;opacity:1} }
.hero .headline { font-size:26px; font-weight:600; color:#fff; letter-spacing:-.02em; line-height:1.15; margin:0 0 5px; }
[data-mode="offline"] .hero .headline { color:var(--ink); }
.hero .sub { font-family:var(--mono); font-size:12.5px; color:rgba(255,255,255,.8); }
[data-mode="offline"] .hero .sub { color:var(--ink-2); }
.hero-stats { display:flex; gap:26px; flex:0 0 auto; }
.hero-stat { text-align:right; }
.hero-stat .v { font-family:var(--mono); font-weight:700; font-size:23px; color:#fff; letter-spacing:-.02em; line-height:1; }
[data-mode="offline"] .hero-stat .v { color:var(--ink); }
.hero-stat .l { font-family:var(--mono); font-size:9.5px; letter-spacing:.12em; text-transform:uppercase; color:rgba(255,255,255,.72); margin-top:5px; }
[data-mode="offline"] .hero-stat .l { color:var(--ink-3); }
.hero-actions { display:flex; gap:8px; margin-left:8px; }
.hbtn {
  height:40px; padding:0 16px; border-radius:10px; border:1px solid rgba(255,255,255,.28);
  background:rgba(255,255,255,.12); color:#fff; font-family:var(--font); font-weight:600; font-size:13px;
  cursor:pointer; display:inline-flex; align-items:center; gap:7px; transition:background .12s;
}
.hbtn:hover { background:rgba(255,255,255,.2); }
.hbtn.solid { background:var(--ink-on-accent); border-color:transparent; color:var(--accent); }
[data-mode="offline"] .hbtn { border-color:var(--line-2); background:var(--surface-2); color:var(--ink); }

/* ══ KPI STRIP ═════════════════════════════════════════════════════════════ */
.kpis { display:grid; grid-template-columns:repeat(6,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:var(--r-md); overflow:hidden; margin-bottom:20px; }
.kpi { background:var(--surface); padding:14px 15px; display:flex; flex-direction:column; gap:5px; }
.kpi .lab { font-family:var(--mono); font-size:9px; color:var(--ink-3); letter-spacing:.1em; text-transform:uppercase; font-weight:600; }
.kpi-val { font-family:var(--mono); font-weight:600; font-size:23px; color:var(--ink); letter-spacing:-.02em; line-height:1; }
.kpi .delta { font-family:var(--mono); font-size:10px; font-weight:600; }
.kpi .delta.up { color:var(--online); } .kpi .delta.down { color:var(--alert); }
.kpi .delta.warn { color:var(--accent); } .kpi .delta.flat { color:var(--ink-3); }

/* ══ CONTENT GRID ══════════════════════════════════════════════════════════ */
.grid { display:grid; grid-template-columns:1.55fr 1fr; gap:18px; align-items:start; }
@media (max-width:1180px){ .grid { grid-template-columns:1fr; } }

/* ══ PANEL ═════════════════════════════════════════════════════════════════ */
.panel { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:16px; margin-bottom:18px; }
.panel-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:13px; }
.panel-head h3 { margin:0; font-size:14.5px; font-weight:600; letter-spacing:-.01em; }
.panel-head .ctrl { font-family:var(--mono); font-size:10.5px; color:var(--ink-3); letter-spacing:.06em; text-transform:uppercase; font-weight:600; background:none; border:0; cursor:pointer; display:inline-flex; align-items:center; gap:4px; }
.panel-head .ctrl:hover { color:var(--accent); }
.seg { display:inline-flex; background:var(--surface-2); border:1px solid var(--line); border-radius:9px; padding:2px; gap:2px; }
.seg button { font-family:var(--mono); font-size:10.5px; font-weight:600; letter-spacing:.04em; padding:5px 11px; border:0; border-radius:7px; background:none; color:var(--ink-3); cursor:pointer; }
.seg button.on { background:var(--surface); color:var(--ink); box-shadow:var(--shadow-sm); }

/* ══ LIST ROWS ═════════════════════════════════════════════════════════════ */
.row { display:flex; align-items:center; gap:12px; padding:11px; border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface-2); margin-bottom:8px; transition:border-color .12s,background .12s; cursor:pointer; }
.row:hover { border-color:var(--line-2); background:var(--surface-3); }
.row:last-child { margin-bottom:0; }
.r-ico { width:38px; height:38px; border-radius:9px; background:var(--surface-3); border:1px solid var(--line); display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto; color:var(--ink); }
.r-ico svg { width:18px; height:18px; }
.r-ico.accent { background:var(--accent-glow); color:var(--accent); border-color:color-mix(in srgb, var(--accent) 30%, transparent); }
.r-ico.online { background:color-mix(in srgb, var(--online) 14%, transparent); color:var(--online); border-color:color-mix(in srgb, var(--online) 30%, transparent); }
.r-ico.alert { background:color-mix(in srgb, var(--alert) 14%, transparent); color:var(--alert); border-color:color-mix(in srgb, var(--alert) 30%, transparent); }
.r-ico.info { background:color-mix(in srgb, var(--info) 14%, transparent); color:var(--info); border-color:color-mix(in srgb, var(--info) 30%, transparent); }
.r-main { flex:1; min-width:0; }
.r-title { font-size:13.5px; font-weight:600; color:var(--ink); letter-spacing:-.005em; }
.r-sub { font-family:var(--mono); font-size:10.5px; color:var(--ink-3); margin-top:2px; letter-spacing:.02em; }
.r-val { font-family:var(--mono); font-size:13.5px; font-weight:600; color:var(--ink); text-align:right; flex:0 0 auto; }
.r-val small { display:block; font-size:9.5px; color:var(--ink-3); font-weight:500; letter-spacing:.06em; text-transform:uppercase; margin-top:2px; }
.r-val.up { color:var(--online); } .r-val.warn { color:var(--accent); } .r-val.alert { color:var(--alert); }

/* ══ TAGS ══════════════════════════════════════════════════════════════════ */
.tag { display:inline-flex; align-items:center; gap:3px; font-family:var(--mono); font-size:9px; letter-spacing:.1em; text-transform:uppercase; font-weight:700; padding:2px 7px; border-radius:5px; background:var(--surface-3); color:var(--ink-2); border:1px solid var(--line); }
.tag.accent { background:var(--accent-glow); color:var(--accent); border-color:color-mix(in srgb, var(--accent) 30%, transparent); }
.tag.online { background:color-mix(in srgb, var(--online) 14%, transparent); color:var(--online); border-color:color-mix(in srgb, var(--online) 30%, transparent); }
.tag.alert { background:color-mix(in srgb, var(--alert) 14%, transparent); color:var(--alert); border-color:color-mix(in srgb, var(--alert) 30%, transparent); }
.tag.info { background:color-mix(in srgb, var(--info) 14%, transparent); color:var(--info); border-color:color-mix(in srgb, var(--info) 30%, transparent); }
.tag.warn { background:color-mix(in srgb, var(--warn) 16%, transparent); color:var(--warn); border-color:color-mix(in srgb, var(--warn) 32%, transparent); }

/* ══ BUTTONS (authored for chassis — not in mockup) ════════════════════════ */
.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  height:38px; padding:0 16px; border-radius:10px; cursor:pointer;
  font-family:var(--font); font-size:13px; font-weight:600; letter-spacing:-.005em;
  border:1px solid var(--line); background:var(--surface); color:var(--ink);
  transition:background .12s,border-color .12s,color .12s,transform .08s;
}
.btn:hover { background:var(--surface-2); border-color:var(--line-2); }
.btn:active { transform:translateY(1px); }
.btn svg { width:16px; height:16px; }
.btn.primary { background:var(--accent); border-color:transparent; color:var(--ink-on-accent); }
.btn.primary:hover { background:var(--accent-deep); }
.btn.ghost { background:none; }
.btn.ghost:hover { background:var(--surface-2); }
.btn.danger { background:color-mix(in srgb, var(--alert) 16%, transparent); border-color:color-mix(in srgb, var(--alert) 32%, transparent); color:var(--alert); }
.btn.danger:hover { background:color-mix(in srgb, var(--alert) 24%, transparent); }
.btn.sm { height:32px; padding:0 12px; font-size:12px; border-radius:8px; }
.btn.lg { height:44px; padding:0 20px; font-size:14px; }
.btn:disabled, .btn[disabled] { opacity:.5; cursor:not-allowed; }

/* ══ FORM INPUTS (authored) ════════════════════════════════════════════════ */
.field { display:flex; flex-direction:column; gap:6px; margin-bottom:14px; }
.field > label, .form-label {
  font-family:var(--mono); font-size:10px; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--ink-3);
}
.input, input[type="text"].input, input[type="email"].input, input[type="number"].input,
input[type="search"].input, input[type="tel"].input, input[type="password"].input,
input[type="date"].input, input[type="time"].input, select.input, textarea.input {
  width:100%; height:40px; padding:0 13px; border-radius:10px;
  background:var(--surface-2); border:1px solid var(--line); color:var(--ink);
  font-family:var(--font); font-size:13.5px; transition:border-color .12s,background .12s;
  outline:none;
}
textarea.input { height:auto; min-height:88px; padding:11px 13px; line-height:1.5; resize:vertical; }
.input:focus, select.input:focus, textarea.input:focus {
  border-color:var(--accent); background:var(--surface);
  box-shadow:0 0 0 3px var(--accent-glow);
}
.input::placeholder { color:var(--ink-3); }
.input:disabled { opacity:.5; cursor:not-allowed; }
select.input { appearance:none; cursor:pointer; padding-right:34px;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 17px) 17px,calc(100% - 12px) 17px; background-size:5px 5px,5px 5px; background-repeat:no-repeat;
}

/* ══ CHIPS / BADGES (authored) ═════════════════════════════════════════════ */
.chip {
  display:inline-flex; align-items:center; gap:6px; height:30px; padding:0 12px;
  border-radius:999px; background:var(--surface-2); border:1px solid var(--line);
  color:var(--ink-2); font-family:var(--font); font-size:12.5px; font-weight:500; cursor:pointer;
  transition:background .12s,border-color .12s,color .12s;
}
.chip:hover { background:var(--surface-3); color:var(--ink); }
.chip.on { background:var(--accent-glow); border-color:color-mix(in srgb, var(--accent) 32%, transparent); color:var(--accent); font-weight:600; }
.badge {
  display:inline-flex; align-items:center; gap:4px; font-family:var(--mono); font-size:10px;
  font-weight:700; letter-spacing:.06em; text-transform:uppercase; padding:3px 8px; border-radius:6px;
  background:var(--surface-3); color:var(--ink-2); border:1px solid var(--line);
}
.badge.accent { background:var(--accent-glow); color:var(--accent); border-color:color-mix(in srgb, var(--accent) 30%, transparent); }
.badge.online { background:color-mix(in srgb, var(--online) 14%, transparent); color:var(--online); border-color:color-mix(in srgb, var(--online) 30%, transparent); }
.badge.alert  { background:color-mix(in srgb, var(--alert) 14%, transparent); color:var(--alert); border-color:color-mix(in srgb, var(--alert) 30%, transparent); }
.badge.warn   { background:color-mix(in srgb, var(--warn) 16%, transparent); color:var(--warn); border-color:color-mix(in srgb, var(--warn) 32%, transparent); }

/* ══ MODALS (authored) ═════════════════════════════════════════════════════ */
.modal-overlay {
  position:fixed; inset:0; z-index:100; display:flex; align-items:center; justify-content:center;
  padding:24px; background:rgba(8,10,14,.62); backdrop-filter:blur(6px);
}
[data-theme="light"] .modal-overlay { background:rgba(30,40,60,.38); }
.modal {
  width:100%; max-width:520px; max-height:90vh; overflow-y:auto;
  background:var(--surface); border:1px solid var(--line-2); border-radius:var(--r-xl);
  box-shadow:var(--shadow-lg);
}
.modal.lg { max-width:760px; }
.modal.sm { max-width:400px; }
.modal-head { display:flex; align-items:center; justify-content:space-between; gap:14px; padding:18px 20px; border-bottom:1px solid var(--line); }
.modal-head h3 { margin:0; font-size:16px; font-weight:600; letter-spacing:-.01em; }
.modal-head .x { width:32px; height:32px; border-radius:8px; border:1px solid var(--line); background:var(--surface-2); color:var(--ink-2); cursor:pointer; display:inline-flex; align-items:center; justify-content:center; font-size:18px; line-height:1; }
.modal-head .x:hover { background:var(--surface-3); color:var(--ink); }
.modal-body { padding:20px; }
.modal-foot { display:flex; align-items:center; justify-content:flex-end; gap:10px; padding:16px 20px; border-top:1px solid var(--line); }

/* ══ TABLES (authored) ═════════════════════════════════════════════════════ */
.tbl { width:100%; border-collapse:collapse; font-size:13px; }
.tbl thead th {
  text-align:left; font-family:var(--mono); font-size:9.5px; font-weight:700; letter-spacing:.1em;
  text-transform:uppercase; color:var(--ink-3); padding:10px 12px; border-bottom:1px solid var(--line);
  position:sticky; top:0; background:var(--surface);
}
.tbl tbody td { padding:11px 12px; border-bottom:1px solid var(--line); color:var(--ink-2); }
.tbl tbody tr:hover td { background:var(--surface-2); }
.tbl tbody tr:last-child td { border-bottom:0; }
.tbl td.num, .tbl th.num { text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums; }
.tbl td .strong { color:var(--ink); font-weight:600; }

/* ══ NOTE / EMPTY ══════════════════════════════════════════════════════════ */
.note { margin-top:24px; padding:13px 16px; border:1px dashed var(--line-2); border-radius:var(--r-md); font-family:var(--mono); font-size:11px; color:var(--ink-3); line-height:1.7; }
.note b { color:var(--accent); }
.empty { text-align:center; padding:48px 20px; color:var(--ink-3); }
.empty svg { width:40px; height:40px; opacity:.4; margin-bottom:12px; }

/* ══ RESPONSIVE SIDEBAR COLLAPSE ═══════════════════════════════════════════ */
@media (max-width:880px){
  .app { grid-template-columns:1fr; }
  .sidebar { position:fixed; left:0; top:0; z-index:60; width:var(--sb-w); transform:translateX(-100%); transition:transform .2s; }
  .app.sb-open .sidebar { transform:translateX(0); box-shadow:var(--shadow-lg); }
}
