/* ============ R3T Monitor design system ============ */
:root{
  --font-sans:'IBM Plex Sans', system-ui, -apple-system, sans-serif;
  --font-mono:'IBM Plex Mono', ui-monospace, 'SF Mono', monospace;

  --good:#16a34a; --good-rgb:22,163,74;
  --warn:#dc2626; --warn-rgb:220,38,38;
  --orange:#f97316;

  --radius:16px;
  --radius-sm:11px;
  --gap:18px;
  --card-pad:22px;
}

/* ---- accent ---- */
[data-accent="blue"]{ --accent:#2563eb; --accent-strong:#1d4ed8; --accent-rgb:37,99,235; --accent-grad:#3b82f6; }
[data-accent="orange"]{ --accent:#ea6713; --accent-strong:#c2540c; --accent-rgb:234,103,19; --accent-grad:#f97316; }

/* ---- light theme ---- */
[data-theme="light"]{
  --bg:#eef2f7;
  --bg-grid:rgba(15,23,42,.035);
  --surface:#ffffff;
  --surface-2:#f8fafc;
  --surface-inset:#f1f5f9;
  --border:#e3e8ef;
  --border-strong:#d3dae5;
  --text:#0f172a;
  --text-2:#475569;
  --text-3:#94a3b8;
  --shadow:0 1px 2px rgba(15,23,42,.04), 0 10px 26px -14px rgba(15,23,42,.16);
  --shadow-hover:0 1px 2px rgba(15,23,42,.05), 0 18px 38px -16px rgba(15,23,42,.24);
  --chip-bg:#ffffff;
}

/* ---- dark theme ---- */
[data-theme="dark"]{
  --bg:#070d18;
  --bg-grid:rgba(255,255,255,.025);
  --surface:#0f1a2c;
  --surface-2:#0c1525;
  --surface-inset:#0a1322;
  --border:#1d2a42;
  --border-strong:#27375420;
  --border-strong:#28395a;
  --text:#e9eef8;
  --text-2:#9fb0cb;
  --text-3:#5d6e8c;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 14px 34px -18px rgba(0,0,0,.7);
  --shadow-hover:0 1px 2px rgba(0,0,0,.5), 0 22px 46px -18px rgba(0,0,0,.85);
  --chip-bg:#0f1a2c;
}

*{ box-sizing:border-box; }
html,body{ margin:0; padding:0; }
body{
  font-family:var(--font-sans);
  background:
    radial-gradient(1200px 600px at 100% -10%, rgba(var(--accent-rgb),.08), transparent 60%),
    var(--bg);
  background-attachment:fixed;
  color:var(--text);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
.wrap{ max-width:1200px; margin:0 auto; padding:26px clamp(14px,4vw,34px) 56px; }

/* density */
[data-density="compact"]{ --gap:13px; --card-pad:16px; }
[data-density="comfy"]{ --gap:24px; --card-pad:28px; }

/* ---------- generic card ---------- */
.card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
}

/* ---------- header ---------- */
.topbar{
  display:flex; align-items:flex-start; justify-content:space-between;
  gap:20px; flex-wrap:wrap; margin-bottom:var(--gap);
}
.brand{ display:flex; align-items:center; gap:14px; }
.logo{
  width:52px; height:52px; border-radius:14px; flex:none;
  display:grid; place-items:center;
  background:linear-gradient(150deg, var(--accent-grad), var(--accent-strong));
  box-shadow:0 8px 20px -8px rgba(var(--accent-rgb),.6), inset 0 1px 0 rgba(255,255,255,.25);
  position:relative; overflow:hidden;
}
.logo::after{ content:""; position:absolute; inset:0;
  background:linear-gradient(transparent 60%, rgba(0,0,0,.18)); }
.logo span{ font-family:var(--font-mono); font-weight:600; font-size:19px; color:#fff; letter-spacing:.5px; z-index:1; }
.brand-name{ font-size:21px; font-weight:700; letter-spacing:-.3px; line-height:1.1; }
.brand-sub{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:5px;
  font-family:var(--font-mono); font-size:12px; color:var(--text-3); }
.brand-sub .dot{ width:3px; height:3px; border-radius:50%; background:currentColor; opacity:.55; }
.brand-sub b{ color:var(--text-2); font-weight:500; }

.head-right{ display:flex; flex-direction:column; align-items:flex-end; gap:11px; }
.updated{ display:flex; align-items:center; gap:9px; font-size:12.5px; color:var(--text-2); }
.live-dot{ position:relative; width:8px; height:8px; border-radius:50%; background:var(--good); flex:none; }
.live-dot::before{ content:""; position:absolute; inset:-4px; border-radius:50%;
  background:rgba(var(--good-rgb),.45); animation:pulse 2s ease-out infinite; }
@keyframes pulse{ 0%{ transform:scale(.5); opacity:.7 } 100%{ transform:scale(1.9); opacity:0 } }
.updated b{ color:var(--text); font-weight:600; }
.updated .rel{ font-family:var(--font-mono); color:var(--text-3); }

.chips{ display:flex; gap:9px; flex-wrap:wrap; justify-content:flex-end; }
.chip{
  display:flex; align-items:center; gap:8px;
  background:var(--chip-bg); border:1px solid var(--border);
  border-radius:11px; padding:7px 11px 7px 9px; box-shadow:var(--shadow);
}
.chip svg{ width:16px; height:16px; }
.chip .lab{ font-size:10px; text-transform:uppercase; letter-spacing:.6px; color:var(--text-3); font-weight:600; line-height:1; }
.chip .val{ font-family:var(--font-mono); font-size:13px; font-weight:600; color:var(--text); line-height:1.15; }
.chip .stack{ display:flex; flex-direction:column; gap:3px; }
.chip.status .pill{ display:inline-flex; align-items:center; gap:6px; font-size:13px; font-weight:600; line-height:1; }
.chip.ok{ border-color:rgba(var(--good-rgb),.35); }
.chip.ok .ico{ color:var(--good); }
.chip.bad{ border-color:rgba(var(--warn-rgb),.4); }
.chip.bad .ico{ color:var(--warn); }
.valve-led{ width:9px; height:9px; border-radius:50%; }
.ok .valve-led{ background:var(--good); box-shadow:0 0 0 3px rgba(var(--good-rgb),.18); }
.bad .valve-led{ background:var(--warn); box-shadow:0 0 0 3px rgba(var(--warn-rgb),.18); }

/* ---------- metric cards ---------- */
.metrics{ display:grid; grid-template-columns:1.4fr 1fr; gap:var(--gap); margin-bottom:var(--gap); }
.metric{ padding:var(--card-pad); position:relative; overflow:hidden; transition:transform .18s ease, box-shadow .18s ease; }
.metric:hover{ transform:translateY(-2px); box-shadow:var(--shadow-hover); }
.metric .m-top{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.metric .m-label{ font-size:13px; font-weight:600; color:var(--text-2); letter-spacing:.1px; }
.metric .m-ico{ width:38px; height:38px; border-radius:11px; display:grid; place-items:center; flex:none;
  background:rgba(var(--accent-rgb),.1); color:var(--accent); }
.metric .m-ico svg{ width:20px; height:20px; }
.metric .m-value{ font-family:var(--font-mono); font-weight:600; letter-spacing:-1px; line-height:1;
  margin-top:18px; display:flex; align-items:baseline; gap:8px; }
.metric .m-value .num{ font-size:40px; }
.metric .m-value .unit{ font-size:15px; color:var(--text-3); font-weight:500; letter-spacing:0; }
.metric .m-foot{ margin-top:12px; display:flex; align-items:center; gap:7px; font-size:12px; color:var(--text-3); }
.metric .trend{ display:inline-flex; align-items:center; gap:4px; font-family:var(--font-mono); font-weight:600;
  padding:2px 7px; border-radius:7px; font-size:11.5px; }
.trend.up{ color:var(--accent); background:rgba(var(--accent-rgb),.1); }
.trend.flat{ color:var(--text-3); background:var(--surface-inset); }

/* hero (Total) card */
.metric.hero{ color:#fff; border:none;
  background:
    radial-gradient(120% 130% at 90% -10%, rgba(255,255,255,.22), transparent 55%),
    linear-gradient(155deg, var(--accent-grad), var(--accent-strong));
  box-shadow:0 18px 40px -18px rgba(var(--accent-rgb),.7), var(--shadow); }
.metric.hero .m-label{ color:rgba(255,255,255,.85); }
.metric.hero .m-ico{ background:rgba(255,255,255,.16); color:#fff; }
.metric.hero .m-value .num{ font-size:52px; }
.metric.hero .m-value .unit{ color:rgba(255,255,255,.7); }
.metric.hero .m-foot{ color:rgba(255,255,255,.75); }
.metric.hero .trend.up{ color:#fff; background:rgba(255,255,255,.18); }
.metric.hero .grid-tex{ position:absolute; inset:0; pointer-events:none; opacity:.5;
  background-image:linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px);
  background-size:26px 26px; mask-image:radial-gradient(120% 100% at 100% 0,#000,transparent 70%); }

/* ---------- chart panel ---------- */
.panel{ padding:var(--card-pad); margin-bottom:var(--gap); }
.panel-head{ display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-bottom:8px; }
.panel-title{ font-size:15px; font-weight:700; letter-spacing:-.2px; }
.panel-title .muted{ color:var(--text-3); font-weight:500; font-size:13px; }
.seg{ display:inline-flex; background:var(--surface-inset); border:1px solid var(--border); border-radius:11px; padding:3px; gap:2px; }
.seg button{ font-family:var(--font-sans); font-size:12.5px; font-weight:600; color:var(--text-2);
  border:none; background:transparent; padding:7px 14px; border-radius:8px; cursor:pointer; transition:all .15s ease; white-space:nowrap; }
.seg button:hover{ color:var(--text); }
.seg button.on{ background:var(--surface); color:var(--accent); box-shadow:0 1px 3px rgba(15,23,42,.12); }
[data-theme="dark"] .seg button.on{ background:#1b294422; background:rgba(var(--accent-rgb),.16); }
.chart-meta{ display:flex; gap:18px; flex-wrap:wrap; margin:4px 0 14px; }
.legend-item{ display:flex; align-items:center; gap:7px; font-size:12px; color:var(--text-2); }
.legend-swatch{ width:11px; height:11px; border-radius:3px; background:var(--accent); }
.chart-box{ position:relative; height:280px; }

/* ---------- table ---------- */
.tbl-wrap{ overflow-x:auto; }
table.readings{ width:100%; border-collapse:collapse; min-width:620px; }
table.readings.slim{ min-width:340px; }
.readings thead th{ text-align:right; font-size:10.5px; text-transform:uppercase; letter-spacing:.7px;
  font-weight:600; color:var(--text-3); padding:0 16px 12px; white-space:nowrap; border-bottom:1px solid var(--border); }
.readings thead th:first-child{ text-align:left; }
.readings tbody td{ padding:13px 16px; font-family:var(--font-mono); font-size:13px; text-align:right;
  color:var(--text); border-bottom:1px solid var(--border); white-space:nowrap; }
.readings tbody tr:last-child td{ border-bottom:none; }
.readings tbody tr{ transition:background .12s ease; }
.readings tbody tr:hover{ background:var(--surface-2); }
.readings tbody tr.latest{ background:rgba(var(--accent-rgb),.05); }
.readings td.time{ text-align:left; color:var(--text); font-weight:500; }
.readings td.time .new{ display:inline-block; font-family:var(--font-sans); font-size:9.5px; font-weight:700;
  text-transform:uppercase; letter-spacing:.5px; color:var(--accent); background:rgba(var(--accent-rgb),.1);
  padding:2px 6px; border-radius:5px; margin-left:8px; vertical-align:middle; }
.readings td.muted{ color:var(--text-3); }
.cell-valve{ display:inline-flex; align-items:center; gap:6px; justify-content:flex-end; width:100%;
  font-family:var(--font-sans); font-size:11.5px; font-weight:600; }
.cell-valve .led{ width:7px; height:7px; border-radius:50%; }
.cell-valve.on{ color:var(--good); } .cell-valve.on .led{ background:var(--good); }
.cell-valve.off{ color:var(--warn); } .cell-valve.off .led{ background:var(--warn); }
.sig-mini{ display:inline-flex; align-items:flex-end; gap:2px; height:13px; margin-left:7px; vertical-align:middle; }
.sig-mini i{ width:3px; border-radius:1px; background:var(--text-3); opacity:.35; }
.sig-mini i.lit{ opacity:1; background:var(--accent); }

.section-label{ font-size:13px; font-weight:700; color:var(--text-2); letter-spacing:.2px; margin:0 2px 12px;
  display:flex; align-items:center; gap:9px; }
.section-label .ln{ height:1px; flex:1; background:var(--border); }

footer{ margin-top:26px; text-align:center; font-size:12px; color:var(--text-3); display:flex;
  align-items:center; justify-content:center; gap:8px; flex-wrap:wrap; }
footer .sep{ width:3px; height:3px; border-radius:50%; background:currentColor; opacity:.5; }

@media (max-width:820px){
  .metrics{ grid-template-columns:1fr 1fr; }
  .summary{ grid-template-columns:1fr 1fr; }
}
@media (max-width:560px){
  .topbar{ flex-direction:column; }
  .head-right{ align-items:flex-start; width:100%; }
  .chips{ justify-content:flex-start; }
  .updated{ flex-wrap:wrap; }
  .metrics{ grid-template-columns:1fr; }
  .metric .m-value .num{ font-size:40px; }
  .metric.hero .m-value .num{ font-size:46px; }
  .summary{ grid-template-columns:1fr 1fr; }
  .ab-clock{ display:none; }
  .detail-top{ flex-direction:column; align-items:stretch; }
  .period-seg{ width:100%; }
  .period-seg button{ flex:1; }
}

/* ============ fleet overview ============ */
.appbar{ display:flex; align-items:center; justify-content:space-between; gap:16px;
  padding-bottom:18px; margin-bottom:24px; border-bottom:1px solid var(--border); flex-wrap:wrap; }
.brand-sub-2{ font-size:12.5px; color:var(--text-3); margin-top:4px; font-family:var(--font-mono); }
.appbar-right{ display:flex; align-items:center; gap:10px; }
.ab-clock{ font-family:var(--font-mono); font-size:12.5px; color:var(--text-2);
  background:var(--surface); border:1px solid var(--border); padding:8px 12px; border-radius:10px; box-shadow:var(--shadow); }

.fleet-head{ display:flex; align-items:flex-end; justify-content:space-between; gap:16px; flex-wrap:wrap; margin-bottom:18px; }
.fleet-head h2{ font-size:21px; font-weight:700; letter-spacing:-.4px; margin:0; }
.fleet-head .muted{ font-size:13px; color:var(--text-3); margin:5px 0 0; font-family:var(--font-mono); }
.fleet-controls{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.search{ display:flex; align-items:center; gap:8px; background:var(--surface); border:1px solid var(--border);
  border-radius:10px; padding:8px 12px; box-shadow:var(--shadow); }
.search input{ border:none; background:transparent; outline:none; font-family:var(--font-mono); font-size:13px; color:var(--text); width:130px; }
.search input::placeholder{ color:var(--text-3); }

.summary{ display:grid; grid-template-columns:repeat(4,1fr); gap:var(--gap); margin-bottom:24px; }
.stat{ padding:18px 20px; display:flex; flex-direction:column; gap:3px; position:relative; overflow:hidden; }
.stat .s-ico{ position:absolute; top:16px; right:16px; width:32px; height:32px; border-radius:9px; display:grid; place-items:center;
  background:var(--surface-inset); color:var(--text-3); }
.stat .s-ico svg{ width:18px; height:18px; }
.stat .s-num{ font-family:var(--font-mono); font-weight:600; font-size:30px; letter-spacing:-1px; line-height:1.15; }
.stat .s-num small{ font-size:15px; color:var(--text-3); font-weight:500; }
.stat .s-lab{ font-size:12px; color:var(--text-2); font-weight:500; }
.stat.attention .s-num{ color:var(--warn); }
.stat.attention .s-ico{ background:rgba(var(--warn-rgb),.12); color:var(--warn); }
.stat.attention.zero .s-num{ color:var(--good); }
.stat.attention.zero .s-ico{ background:rgba(var(--good-rgb),.12); color:var(--good); }

.dev-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(232px,1fr)); gap:var(--gap); }
.dev-card{ text-align:left; font-family:inherit; cursor:pointer; padding:16px 17px 15px; display:flex; flex-direction:column; gap:11px;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow);
  transition:transform .16s ease, box-shadow .16s ease, border-color .16s ease; }
.dev-card:hover{ transform:translateY(-3px); box-shadow:var(--shadow-hover); border-color:var(--border-strong); }
.dev-card.alerted{ border-color:rgba(var(--warn-rgb),.4); }
.dev-card.offline{ opacity:.82; }
.dc-top{ display:flex; align-items:center; justify-content:space-between; gap:8px; min-height:22px; }
.dc-id{ display:flex; align-items:center; gap:8px; }
.dc-name{ font-family:var(--font-mono); font-size:14px; font-weight:600; letter-spacing:.2px; }
.status-dot{ width:8px; height:8px; border-radius:50%; flex:none; display:inline-block; }
.status-dot.on{ background:var(--good); box-shadow:0 0 0 3px rgba(var(--good-rgb),.16); }
.status-dot.off{ background:var(--text-3); box-shadow:0 0 0 3px rgba(148,163,184,.16); }
.alert-badge{ display:inline-flex; align-items:center; gap:5px; font-size:9.5px; font-weight:700; text-transform:uppercase;
  letter-spacing:.4px; padding:4px 8px; border-radius:7px; white-space:nowrap; }
.alert-badge svg{ width:12px; height:12px; }
.alert-badge.warn{ color:var(--warn); background:rgba(var(--warn-rgb),.1); }
.alert-badge.orange{ color:#c2540c; background:rgba(249,115,22,.13); }
[data-theme="dark"] .alert-badge.orange{ color:#fb923c; }
.alert-badge.off{ color:var(--text-2); background:var(--surface-inset); }

.dc-usage{ display:flex; align-items:baseline; gap:6px; }
.dc-num{ font-family:var(--font-mono); font-weight:600; font-size:30px; letter-spacing:-1px; line-height:1; }
.dc-unit{ font-size:13px; color:var(--text-3); font-family:var(--font-mono); }
.dc-lab{ font-size:10px; color:var(--text-3); margin-left:auto; text-transform:uppercase; letter-spacing:.5px; font-weight:600; align-self:center; }
.spark{ width:100%; height:30px; display:block; }
.dc-meta{ display:flex; align-items:center; justify-content:space-between; gap:8px; padding-top:11px; border-top:1px solid var(--border); }
.dc-valve{ display:inline-flex; align-items:center; gap:6px; font-size:11.5px; font-weight:600; }
.dc-valve .led{ width:7px; height:7px; border-radius:50%; }
.dc-valve.on{ color:var(--good); } .dc-valve.on .led{ background:var(--good); }
.dc-valve.off{ color:var(--warn); } .dc-valve.off .led{ background:var(--warn); }
.dc-sig{ display:inline-flex; align-items:center; gap:6px; font-family:var(--font-mono); font-size:12px; color:var(--text-2); }
.dc-seen{ display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--text-3); }
.empty{ padding:60px 20px; text-align:center; color:var(--text-3); font-size:14px;
  border:1px dashed var(--border-strong); border-radius:var(--radius); }

/* ---- detail header extras ---- */
.detail-head{ margin-bottom:var(--gap); }
.detail-head .topbar{ margin-bottom:0; }
.detail-top{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:18px; flex-wrap:wrap; }
.back-btn{ display:inline-flex; align-items:center; gap:5px; font-family:inherit; font-size:13px; font-weight:600; color:var(--text-2);
  background:var(--surface); border:1px solid var(--border); border-radius:10px; padding:8px 14px 8px 11px; cursor:pointer;
  box-shadow:var(--shadow); transition:all .15s ease; }
.back-btn:hover{ color:var(--accent); border-color:var(--border-strong); transform:translateX(-2px); }
.back-btn .chev{ font-size:19px; line-height:1; margin-top:-2px; }
.seg.period-seg button{ padding:8px 16px; }
.status-txt{ font-size:12px; font-weight:600; color:var(--text-3); margin-left:3px; }
.brand-name .status-dot{ vertical-align:middle; margin-left:9px; }
.logo.dev span{ font-size:20px; }
