/* ============ xGreen design system ============ */
:root {
  --font-ui: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-mono: var(--font-ui);
  --accent: #1f9d57;
  --ok: #1f9d57;
  --warn: #d39424;
  --alert: #dd5a40;
  --info: #3b7dd8;
  --r: 14px;
  --r-sm: 9px;
  --gap: 18px;
  --pad: 18px;
  --logo-stem: var(--accent);
  --logo-leaf: color-mix(in oklab, var(--accent) 74%, #ffffff);
  --logo-leaf-2: color-mix(in oklab, var(--accent) 90%, #07371f);
  --logo-vein: color-mix(in oklab, var(--accent) 40%, #ffffff);
}
.xg-logomark { display: block; flex: none; background: url(img/xgreen.png) center / contain no-repeat; }

/* OTA update surfacing (1.37.2): the global "update available" bar under the topbar, + the firmware changelog
   rendered inside the Devices OTA card (compacts the reused Help/What's-new Block styles). */
.xg-ota-bar { display: flex; align-items: center; gap: 10px; padding: 8px 16px; background: rgba(56, 161, 105, 0.12); border-bottom: 1px solid var(--accent); font-size: 0.9em; }
.xg-ota-bar svg { color: var(--accent); flex: none; }
.xg-ota-bar-txt { flex: 1; min-width: 0; }
.xg-ota-bar .xg-btn-sm { padding: 3px 10px; font-size: 0.85em; }
.xg-ota-bar-x { border: none; background: none; color: var(--text-dim); cursor: pointer; padding: 2px; display: flex; align-items: center; }
.xg-ota-bar-x:hover { color: var(--text); }
.xg-ota-bar-x svg { color: inherit; }
.xg-ota-changelog { margin-top: 6px; }
.xg-ota-changelog .xg-help-h { font-size: 0.95em; margin: 8px 0 3px; }
.xg-ota-changelog .xg-help-ul { margin: 3px 0; padding-left: 18px; }
.xg-ota-changelog .xg-help-ul li { font-size: 0.85em; margin: 2px 0; line-height: 1.45; }
.xg-ota-changelog .xg-help-ver { font-size: 0.78em; }
:root[data-density="compact"] { --gap: 12px; --pad: 13px; --r: 11px; }
:root[data-density="comfy"]   { --gap: 24px; --pad: 24px; --r: 16px; }

:root[data-theme="light"] {
  --bg: #f5f7f3;
  --surface: #ffffff;
  --surface-2: #eef1ea;
  --border: #e4e8e0;
  --border-strong: #d2d8cd;
  --text: #1b2620;
  --text-dim: #6a7770;
  --text-faint: #97a299;
  --track: #e9ece6;
  --shadow: 0 1px 2px rgba(20,30,24,.04), 0 6px 18px -8px rgba(20,30,24,.10);
  --chip-bg: #eef4ee;
}
:root[data-theme="dark"] {
  --bg: #101613;
  --surface: #19211d;
  --surface-2: #212b26;
  --border: #2a352f;
  --border-strong: #36443c;
  --text: #e8ede9;
  --text-dim: #93a39b;
  --text-faint: #6c7c74;
  --track: #2a342e;
  --shadow: 0 1px 2px rgba(0,0,0,.3), 0 10px 26px -10px rgba(0,0,0,.5);
  --chip-bg: #243029;
}

* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; }
body {
  font-family: var(--font-ui);
  background: var(--bg);
  color: var(--text);
  font-size: 15px;
  line-height: 1.45;
  -webkit-font-smoothing: antialiased;
  letter-spacing: -0.01em;
}
#root { height: 100%; }

/* ============ themed scrollbars ============ */
/* Replaces the OS scrollbar (which clashed with the dark theme). Colours come from the theme vars, so they
   flip automatically light/dark. Firefox: thin + scrollbar-color (inherits from html). WebKit/Blink (Chrome,
   Edge, Safari, the Electron app): the thumb uses a transparent border + background-clip:padding-box so it
   reads as a slim floating pill over a transparent track. */
html { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
::-webkit-scrollbar { width: 12px; height: 12px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-corner { background: transparent; }
::-webkit-scrollbar-thumb {
  background-color: var(--border-strong);
  border: 3px solid transparent;
  background-clip: padding-box;
  border-radius: 8px;
}
::-webkit-scrollbar-thumb:hover { background-color: var(--text-faint); }
::-webkit-scrollbar-thumb:active { background-color: var(--text-dim); }

.mono { font-family: var(--font-mono); font-feature-settings: "tnum" 1; font-variant-numeric: tabular-nums; }
h1, h2, h3 { margin: 0; font-weight: 600; letter-spacing: -0.02em; }
button { font-family: inherit; cursor: pointer; }
.xg-icon { flex: none; }

/* ============ buttons ============ */
.xg-btn {
  display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid var(--border-strong); background: var(--surface);
  color: var(--text); padding: 9px 14px; border-radius: var(--r-sm);
  font-size: 14px; font-weight: 500; transition: .15s; white-space: nowrap;
}
.xg-btn:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
.xg-btn:disabled { opacity: .5; cursor: not-allowed; }
.xg-btn-primary { background: var(--accent); border-color: var(--accent); color: #fff; }
.xg-btn-primary:hover:not(:disabled) { filter: brightness(1.06); color: #fff; }
.xg-btn-ghost { background: transparent; }
.xg-btn-block { width: 100%; justify-content: center; padding: 12px; font-size: 15px; }
.xg-btn-sm { padding: 6px 10px; font-size: 13px; }
.xg-iconbtn {
  display: grid; place-items: center; width: 34px; height: 34px;
  border: none; background: transparent; color: var(--text-dim); border-radius: 8px; transition: .15s;
}
.xg-iconbtn:hover { background: var(--surface-2); color: var(--text); }
.xg-iconbtn.is-active { background: var(--surface-2); color: var(--accent); }

/* ============ login ============ */
.xg-login {
  height: 100%; display: grid; grid-template-columns: 1.05fr 1fr;
}
.xg-login-brand {
  position: relative; overflow: hidden; padding: 48px;
  display: flex; flex-direction: column; justify-content: space-between;
  background:
    radial-gradient(120% 120% at 0% 0%, color-mix(in oklab, var(--accent) 30%, #0c130f) 0%, #0c130f 60%);
  color: #eaf3ec;
}
.xg-login-brand-mid h1 { font-size: 52px; line-height: 1.02; letter-spacing: -0.03em; }
.xg-login-brand-mid p { max-width: 30ch; color: #b5c7bb; font-size: 16px; margin-top: 16px; }
.xg-login-brand-chips { display: flex; gap: 10px; flex-wrap: wrap; }
.xg-bchip {
  display: inline-flex; align-items: center; gap: 7px; font-size: 13px;
  background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.12);
  padding: 7px 12px; border-radius: 999px; color: #d6e4da;
}
.xg-login-rings { position: absolute; right: -140px; bottom: -160px; }
.xg-login-rings span {
  position: absolute; right: 0; bottom: 0; border-radius: 50%;
  border: 1px solid color-mix(in oklab, var(--accent) 45%, transparent);
}
.xg-login-rings span:nth-child(1) { width: 360px; height: 360px; }
.xg-login-rings span:nth-child(2) { width: 540px; height: 540px; opacity: .6; }
.xg-login-rings span:nth-child(3) { width: 720px; height: 720px; opacity: .35; }

.xg-login-form-wrap { display: grid; place-items: center; padding: 32px; background: var(--bg); }
.xg-login-form { width: 100%; max-width: 380px; }
.xg-login-form-head h2 { font-size: 26px; }
.xg-login-form-head p { color: var(--text-dim); margin: 8px 0 28px; }
.xg-field { display: block; margin-bottom: 16px; }
.xg-field-label { display: flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 500; color: var(--text-dim); margin-bottom: 7px; }
.xg-input {
  width: 100%; padding: 12px 13px; border-radius: var(--r-sm);
  border: 1px solid var(--border-strong); background: var(--surface);
  color: var(--text); font-size: 15px; transition: .15s;
  color-scheme: dark;
}
.xg-input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--accent) 18%, transparent); }
.xg-input-affix { position: relative; }
.xg-affix-btn { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); border: none; background: none; color: var(--text-dim); padding: 6px; border-radius: 6px; }
.xg-affix-btn:hover { color: var(--text); }
.xg-login-err { display: flex; align-items: center; gap: 8px; color: var(--alert); font-size: 13.5px; margin-bottom: 14px; }
.xg-check { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--text-dim); margin-bottom: 22px; cursor: pointer; user-select: none; }
.xg-check input { position: absolute; opacity: 0; }
.xg-check-box { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 6px; border: 1px solid var(--border-strong); color: transparent; transition: .15s; }
.xg-check input:checked + .xg-check-box { background: var(--accent); border-color: var(--accent); color: #fff; }
.xg-login-hint { font-size: 12px; color: var(--text-faint); text-align: center; margin-top: 18px; }
.xg-login-hint b { color: var(--text-dim); }
.xg-spin { width: 16px; height: 16px; border: 2px solid rgba(255,255,255,.4); border-top-color: #fff; border-radius: 50%; animation: xgspin .7s linear infinite; }
@keyframes xgspin { to { transform: rotate(360deg); } }

/* ============ app shell ============ */
.xg-app { display: flex; height: 100%; }
.xg-sidebar {
  width: 264px; flex: none; background: var(--surface); border-right: 1px solid var(--border);
  display: flex; flex-direction: column; padding: 18px 14px; gap: 4px; overflow-y: auto;
}
.xg-logo { display: flex; align-items: center; gap: 10px; padding: 4px 8px 16px; }
.xg-logo-mark { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; background: var(--accent); color: #fff; }
.xg-logo-word { font-size: 19px; font-weight: 600; letter-spacing: -0.03em; }
.xg-side-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .09em; color: var(--text-faint); padding: 14px 10px 6px; }
.xg-switcher { display: flex; flex-direction: column; gap: 2px; }
.xg-gh {
  display: flex; align-items: center; gap: 11px; text-align: left; width: 100%;
  border: 1px solid transparent; background: transparent; padding: 9px 10px; border-radius: 10px;
  color: var(--text); transition: .15s;
}
.xg-gh:hover { background: var(--surface-2); }
.xg-gh.is-active { background: color-mix(in oklab, var(--accent) 12%, transparent); border-color: color-mix(in oklab, var(--accent) 30%, transparent); }
.xg-gh-add { cursor: pointer; color: var(--text-dim); border: 1px dashed var(--border); margin-top: 4px; font-size: 13px; }
.xg-gh-add:hover { color: var(--accent); border-color: color-mix(in oklab, var(--accent) 40%, transparent); background: transparent; }
.xg-gh-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.xg-gh-dot.ok { background: var(--ok); box-shadow: 0 0 0 3px color-mix(in oklab, var(--ok) 20%, transparent); }
.xg-gh-dot.warn { background: var(--warn); box-shadow: 0 0 0 3px color-mix(in oklab, var(--warn) 20%, transparent); }
.xg-gh-dot.alert { background: var(--alert); box-shadow: 0 0 0 3px color-mix(in oklab, var(--alert) 22%, transparent); }
.xg-gh-dot.off { background: var(--text-faint); }
.xg-gh-txt { display: flex; flex-direction: column; line-height: 1.2; flex: 1; min-width: 0; }
.xg-gh-name { font-size: 14px; font-weight: 500; }
.xg-gh-crop { font-size: 12px; color: var(--text-dim); }
.xg-gh-badge { font-size: 11px; font-weight: 600; background: var(--alert); color: #fff; min-width: 18px; height: 18px; border-radius: 9px; display: grid; place-items: center; padding: 0 5px; }
.xg-gh-officon { color: var(--text-faint); }
/* device switcher reorder: the row wraps grip + button so the grip is draggable while the button keeps its
   click; the row carries CSS `order` and is the drop target (same model as the dashboard block/card grips). */
.xg-gh-row { display: flex; align-items: center; gap: 2px; transition: opacity .15s; }
.xg-gh-row.is-dragging { opacity: .4; }
.xg-gh-row .xg-gh { width: auto; flex: 1 1 auto; min-width: 0; }
.xg-gh-grip { display: inline-flex; align-items: center; flex: none; padding: 2px; color: var(--text-dim); cursor: grab; opacity: .45; transition: opacity .15s, color .15s; }
.xg-gh-grip:hover { opacity: 1; color: var(--accent); }
.xg-gh-grip:active { cursor: grabbing; }
.xg-nav { display: flex; flex-direction: column; gap: 2px; }
.xg-navitem { display: flex; align-items: center; gap: 11px; width: 100%; text-align: left; border: none; background: transparent; padding: 10px; border-radius: 10px; color: var(--text-dim); font-size: 14px; font-weight: 500; transition: .15s; }
.xg-navitem:hover { background: var(--surface-2); color: var(--text); }
.xg-navitem.is-active { background: var(--surface-2); color: var(--text); }
.xg-navitem.is-active .xg-icon { color: var(--accent); }
.xg-side-foot { margin-top: auto; padding-top: 14px; }
.xg-side-user { display: flex; align-items: center; gap: 10px; background: var(--surface-2); border: 1px solid var(--border); padding: 10px; border-radius: 11px; }
.xg-side-user-txt { display: flex; flex-direction: column; line-height: 1.25; flex: 1; min-width: 0; }
.xg-side-dev { font-size: 12px; overflow: hidden; text-overflow: ellipsis; }
.xg-side-conn { font-size: 11px; color: var(--ok); }

.xg-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.xg-topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 28px; height: 60px; flex: none;
  border-bottom: 1px solid var(--border); background: color-mix(in oklab, var(--surface) 70%, transparent);
  backdrop-filter: blur(8px); position: sticky; top: 0; z-index: 5;
}
.xg-topbar-title { font-size: 16px; font-weight: 600; }
.xg-topbar-right { display: flex; align-items: center; gap: 16px; }
.xg-clock { display: flex; align-items: center; gap: 7px; font-size: 13px; color: var(--text-dim); }
/* language switch */
.xg-lang { display: inline-flex; gap: 2px; background: var(--surface-2); border-radius: 8px; padding: 3px; }
.xg-lang-btn { border: none; background: transparent; color: var(--text-dim); font-size: 12px; font-weight: 600; letter-spacing: .03em; padding: 4px 9px; border-radius: 6px; transition: .15s; }
.xg-lang-btn:hover { color: var(--text); }
.xg-lang-btn.is-active { background: var(--surface); color: var(--accent); box-shadow: 0 1px 3px rgba(0,0,0,.1); }
.xg-login-brand .xg-lang { background: rgba(255,255,255,.1); }
.xg-login-brand .xg-lang-btn { color: #b5c7bb; }
.xg-login-brand .xg-lang-btn.is-active { background: rgba(255,255,255,.16); color: #fff; }
.xg-login-brand-top { display: flex; align-items: center; justify-content: space-between; }
.xg-alertbell { position: relative; color: var(--text-dim); }
.xg-alertbell.has { color: var(--warn); }
.xg-alertcount { position: absolute; top: -6px; right: -7px; background: var(--alert); color: #fff; font-size: 10px; font-weight: 700; min-width: 16px; height: 16px; border-radius: 8px; display: grid; place-items: center; padding: 0 4px; }
.xg-content { flex: 1; overflow-y: auto; padding: 28px; }

/* ============ screen scaffolding ============ */
.xg-screen { max-width: 1180px; margin: 0 auto; display: flex; flex-direction: column; gap: 26px; }
.xg-screen-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.xg-screen-head-l { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; }
.xg-screen-head h2 { font-size: 27px; white-space: nowrap; }
.xg-crop { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-dim); }
.xg-screen-head-r { display: flex; gap: 18px; flex-wrap: wrap; }
.xg-meta { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text-dim); }
.xg-sec-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 14px; }
.xg-sec-head h3 { font-size: 16px; }
.xg-sec-note { font-size: 12px; color: var(--text-faint); }
.xg-grid { display: grid; gap: var(--gap); }
.xg-grid-sensors { grid-template-columns: repeat(auto-fill, minmax(216px, 1fr)); }
.xg-grid-acts { grid-template-columns: repeat(auto-fill, minmax(248px, 1fr)); }
.xg-grid-dev { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }

/* ============ cards ============ */
.xg-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r); padding: var(--pad); box-shadow: var(--shadow); }
.xg-chip { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px; background: var(--chip-bg); color: var(--accent); flex: none; }
.xg-chip-sm { width: 30px; height: 30px; }
.xg-chip.is-active { background: var(--accent); color: #fff; }

/* status pill */
.xg-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 600; padding: 3px 9px 3px 7px; border-radius: 999px; white-space: nowrap; }
.xg-pill-dot { width: 7px; height: 7px; border-radius: 50%; }
.xg-pill-ok { background: color-mix(in oklab, var(--ok) 14%, transparent); color: color-mix(in oklab, var(--ok) 78%, var(--text)); }
.xg-pill-ok .xg-pill-dot { background: var(--ok); }
.xg-pill-warn { background: color-mix(in oklab, var(--warn) 16%, transparent); color: color-mix(in oklab, var(--warn) 80%, var(--text)); }
.xg-pill-warn .xg-pill-dot { background: var(--warn); }
.xg-pill-alert { background: color-mix(in oklab, var(--alert) 16%, transparent); color: color-mix(in oklab, var(--alert) 82%, var(--text)); }
.xg-pill-alert .xg-pill-dot { background: var(--alert); }

/* ============ sensor card ============ */
.xg-sensor { display: flex; flex-direction: column; align-items: center; }
.xg-sensor-head { display: flex; align-items: center; gap: 9px; width: 100%; margin-bottom: 6px; }
.xg-sensor-name { font-size: 14px; font-weight: 500; flex: 1; }
.xg-gauge { position: relative; }
.xg-gauge-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.xg-gauge-val { font-size: 26px; font-weight: 600; line-height: 1; }
.xg-gauge-unit { font-size: 13px; font-weight: 500; color: var(--text-dim); margin-left: 2px; }
.xg-sensor-foot { width: 100%; margin-top: 4px; }
.xg-sensor-range { font-size: 11px; color: var(--text-faint); text-align: center; margin-top: 2px; }

/* ============ actuator card ============ */
.xg-act { display: flex; flex-direction: column; gap: 16px; transition: .2s; }
.xg-act.is-running { border-color: color-mix(in oklab, var(--accent) 40%, transparent); }
.xg-act-top { display: flex; align-items: center; gap: 12px; }
.xg-act-titles { min-width: 0; }
.xg-act-name { font-size: 14.5px; font-weight: 500; }
.xg-act-sub { font-size: 11.5px; color: var(--text-dim); margin-top: 1px; }
.xg-act-bottom { display: flex; align-items: center; justify-content: space-between; }

/* segmented */
.xg-seg { display: inline-flex; background: var(--surface-2); border-radius: 8px; padding: 3px; gap: 2px; }
.xg-seg-btn { border: none; background: transparent; color: var(--text-dim); font-size: 12.5px; font-weight: 500; padding: 5px 12px; border-radius: 6px; transition: .15s; }
.xg-seg-btn:not(.is-active):not(:disabled):hover { color: var(--text); background: rgba(255,255,255,0.04); cursor: pointer; }
.xg-seg-btn.is-active { background: var(--surface); color: var(--text); box-shadow: 0 1px 3px rgba(0,0,0,.08); }
.xg-seg-btn:disabled { opacity: 0.5; cursor: not-allowed; }

/* switch */
.xg-switch { position: relative; width: 46px; height: 27px; border-radius: 999px; border: none; background: var(--track); transition: .2s; flex: none; }
.xg-switch.is-on { background: var(--accent); }
.xg-switch.is-disabled { opacity: .55; cursor: not-allowed; }
.xg-switch-knob { position: absolute; top: 3px; left: 3px; width: 21px; height: 21px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25); transition: .2s; }
.xg-switch.is-on .xg-switch-knob { transform: translateX(19px); }

/* sparkline */
.xg-spark { display: block; }

/* ============ banner ============ */
.xg-banner { display: flex; align-items: center; gap: 13px; padding: 14px 16px; border-radius: var(--r); border: 1px solid; }
.xg-banner-alert { background: color-mix(in oklab, var(--alert) 10%, var(--surface)); border-color: color-mix(in oklab, var(--alert) 35%, transparent); color: var(--alert); }
.xg-banner-warn { background: color-mix(in oklab, var(--warn) 10%, var(--surface)); border-color: color-mix(in oklab, var(--warn) 35%, transparent); color: var(--warn); }
.xg-banner-body { display: flex; flex-direction: column; line-height: 1.3; flex: 1; min-width: 0; }
.xg-banner-body b { font-size: 14px; }
.xg-banner-body span { font-size: 13px; color: var(--text-dim); }

/* ============ rules / schedules ============ */
.xg-rules { display: flex; flex-direction: column; gap: var(--gap); }
.xg-rule { display: flex; align-items: center; gap: 16px; }
.xg-rule.is-off, .xg-sched.is-off { opacity: .55; }
.xg-rule-body { flex: 1; min-width: 0; }
.xg-rule-logic { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 14.5px; font-weight: 500; }
.xg-tag { font-size: 10.5px; font-weight: 700; letter-spacing: .06em; padding: 2px 6px; border-radius: 5px; background: var(--surface-2); color: var(--text-dim); }
.xg-tag-do { background: color-mix(in oklab, var(--accent) 16%, transparent); color: var(--accent); }
/* Guard ("only if") clause — a subdued inline segment so it reads as a secondary qualifier on the rule. */
.xg-rule-if { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; padding-left: 8px; border-left: 2px solid var(--border); }
.xg-tag-if { background: color-mix(in oklab, var(--warn) 16%, transparent); color: var(--warn); }
.xg-cond-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; border-top: 1px solid var(--border); padding-top: 10px; margin-top: 2px; }
/* Rule firing history (#4) — per-rule modal + global Activity feed share these rows. */
.xg-activity { display: flex; flex-direction: column; gap: 6px; }
.xg-activity-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface-2); border-left-width: 3px; border-right-width: 3px; }
.xg-activity-row.is-on { border-left-color: var(--ok); border-right-color: var(--ok); }
.xg-activity-row.is-off { border-left-color: var(--text-faint); border-right-color: var(--text-faint); }
.xg-activity-row.is-on .xg-chip { background: color-mix(in oklab, var(--ok) 18%, transparent); color: var(--ok); }
.xg-activity-row.is-off .xg-chip { color: var(--text-dim); }
.xg-activity-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.xg-activity-name { font-size: 13.5px; font-weight: 500; }
.xg-activity-val { color: var(--text-dim); font-weight: 400; }
.xg-activity-arrow { color: var(--text-faint); padding: 0 2px; }
.xg-activity-act { font-weight: 600; }
.xg-activity-time { font-size: 11.5px; color: var(--text-dim); }
/* Energy tab: runtime + estimated kWh per actuator */
.xg-energy { display: flex; flex-direction: column; gap: 12px; }
.xg-energy-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; padding: 12px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-2); }
.xg-energy-total-val { font-size: 26px; font-weight: 700; }
.xg-energy-unit { font-size: 14px; font-weight: 500; color: var(--text-dim); }
.xg-energy-total-lbl { font-size: 12px; color: var(--text-dim); margin-top: 2px; }
.xg-energy-note { display: inline-flex; align-items: center; gap: 6px; max-width: 280px; font-size: 11.5px; color: var(--text-faint); line-height: 1.35; }
.xg-energy-list { display: flex; flex-direction: column; gap: 8px; }
.xg-energy-row { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface-2); }
.xg-energy-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.xg-energy-name { font-size: 13.5px; font-weight: 500; }
.xg-energy-sub { font-size: 11.5px; color: var(--text-dim); }
.xg-energy-kwh { font-size: 14px; font-weight: 700; white-space: nowrap; }
.xg-energy-nopow { font-size: 11px; font-weight: 400; color: var(--text-faint); }
/* Contextual advice (#12) — tip under an out-of-range reading */
.xg-advice { display: flex; align-items: flex-start; gap: 6px; margin-top: 8px; padding: 7px 9px; border-radius: 7px; font-size: 11.5px; line-height: 1.4; background: var(--surface-2); border-left: 3px solid var(--text-faint); border-right: 3px solid var(--text-faint); color: var(--text-dim); text-align: left; }
.xg-advice svg { flex-shrink: 0; margin-top: 1px; }
.xg-advice-warn { border-left-color: var(--warn); border-right-color: var(--warn); background: color-mix(in srgb, var(--warn) 9%, var(--surface-2)); }
.xg-advice-alert { border-left-color: var(--alert); border-right-color: var(--alert); background: color-mix(in srgb, var(--alert) 9%, var(--surface-2)); }
/* Weather-risk advisory banners (top of dashboard) — more prominent than a gauge tip */
.xg-risk-banners { display: flex; flex-direction: column; gap: 8px; margin: 0 0 14px; }
.xg-risk-banner { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: 9px; border-left: 4px solid var(--text-faint); border-right: 4px solid var(--text-faint); background: var(--surface-2); }
.xg-risk-banner svg { flex-shrink: 0; }
.xg-risk-body { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.xg-risk-label { font-weight: 600; font-size: 12.5px; letter-spacing: .02em; }
.xg-risk-text { font-size: 12px; line-height: 1.4; color: var(--text-dim); }
.xg-risk-frost { border-left-color: var(--alert); border-right-color: var(--alert); background: color-mix(in srgb, var(--alert) 9%, var(--surface-2)); }
.xg-risk-frost svg, .xg-risk-frost .xg-risk-label { color: var(--alert); }
.xg-risk-storm { border-left-color: var(--warn); border-right-color: var(--warn); background: color-mix(in srgb, var(--warn) 9%, var(--surface-2)); }
.xg-risk-storm svg, .xg-risk-storm .xg-risk-label { color: var(--warn); }
.xg-risk-heat { border-left-color: var(--alert); border-right-color: var(--alert); background: color-mix(in srgb, var(--alert) 9%, var(--surface-2)); }
.xg-risk-heat svg, .xg-risk-heat .xg-risk-label { color: var(--alert); }
.xg-risk-wind { border-left-color: var(--warn); border-right-color: var(--warn); background: color-mix(in srgb, var(--warn) 9%, var(--surface-2)); }
.xg-risk-wind svg, .xg-risk-wind .xg-risk-label { color: var(--warn); }
/* Activity tab: filter pills + fire-count histogram */
.xg-activity-wrap { display: flex; flex-direction: column; gap: 12px; }
.xg-activity-filters { display: flex; gap: 6px; flex-wrap: wrap; }
.xg-activity-chart { position: relative; border: 1px solid var(--border); border-radius: 10px; padding: 6px 8px 2px; background: var(--surface); }
.xg-activity-chart-tip { position: absolute; top: 6px; right: 10px; font-size: 11px; color: var(--text-dim); background: var(--surface-2); border: 1px solid var(--border); border-radius: 6px; padding: 2px 7px; pointer-events: none; }
.xg-op { color: var(--text-dim); font-weight: 600; }
.xg-rule-val { color: var(--text); }
.xg-rule-arrow { color: var(--text-faint); }
.xg-rule-state { font-size: 11px; font-weight: 700; padding: 2px 7px; border-radius: 5px; }
.xg-rule-state.on { background: color-mix(in oklab, var(--ok) 16%, transparent); color: var(--ok); }
.xg-rule-state.off { background: var(--surface-2); color: var(--text-dim); }
.xg-rule-hold { font-size: 11px; color: var(--text-faint); }
.xg-rule-note { font-size: 12.5px; color: var(--text-dim); margin-top: 5px; }
.xg-lastrun { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--text-dim); margin-top: 5px; opacity: .8; }
.xg-rule-af { color: var(--text-faint); }
/* Cloud-dependent rule (reads a shared sensor) whose billing key isn't covered — visibly paused / non-firing. */
.xg-rule.is-cloud-paused, .xg-sched.is-cloud-paused { opacity: .6; }
.xg-cloud-paused { display: inline-flex; align-items: center; gap: 4px; margin-top: 5px; font-size: 12px; font-weight: 600; color: var(--warn, #c77d00); }
.xg-cloud-paused svg { width: 12px; height: 12px; }
.xg-sched { display: flex; align-items: center; gap: 16px; }
.xg-sched-body { flex: 1; min-width: 0; }
.xg-sched-title { font-size: 14.5px; font-weight: 500; }
.xg-sched-time { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text-dim); margin-top: 2px; }
.xg-days { display: flex; gap: 4px; }
.xg-day { width: 24px; height: 24px; display: grid; place-items: center; font-size: 11px; font-weight: 600; border-radius: 6px; background: var(--surface-2); color: var(--text-faint); }
.xg-day.on { background: color-mix(in oklab, var(--accent) 16%, transparent); color: var(--accent); }

/* ============ history ============ */
.xg-sensor-tabs { display: flex; gap: 8px; flex-wrap: wrap; }
.xg-stab { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; border: 1px solid var(--border); background: var(--surface); color: var(--text-dim); font-size: 13px; font-weight: 500; padding: 8px 13px; border-radius: 999px; transition: .15s; }
.xg-stab:hover { color: var(--text); }
.xg-stab.is-active { background: var(--text); color: var(--bg); border-color: var(--text); }
.xg-stab.is-active .xg-icon { color: var(--bg); }
.xg-chart-card { padding: 22px; }
.xg-chart-head { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 8px; }
.xg-chart-cur { font-size: 34px; font-weight: 600; line-height: 1; }
.xg-chart-cur span { font-size: 16px; color: var(--text-dim); margin-left: 3px; }
.xg-chart-cap { font-size: 13px; color: var(--text-dim); margin-top: 6px; }
.xg-chart { display: block; overflow: visible; }
.xg-axis { fill: var(--text-faint); font-size: 11px; }

/* ============ devices ============ */
.xg-dev { display: flex; flex-direction: column; gap: 16px; }
.xg-dev.is-offline { opacity: .72; }
.xg-dev-top { display: flex; align-items: center; gap: 12px; }
.xg-dev-titles { flex: 1; min-width: 0; }
.xg-dev-name { font-size: 15px; font-weight: 600; }
.xg-dev-id { font-size: 12px; color: var(--text-dim); }
.xg-dev-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.xg-dev-stat { display: flex; flex-direction: column; gap: 3px; }
.xg-dev-k { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-faint); }
.xg-dev-v { font-size: 14px; display: inline-flex; align-items: center; gap: 7px; }
.xg-dev-foot { display: flex; gap: 8px; padding-top: 4px; border-top: 1px solid var(--border); margin-top: 2px; }
.xg-dev-foot .xg-btn { flex: 1; justify-content: center; }
.xg-bars { display: inline-flex; align-items: flex-end; gap: 2px; }
.xg-bar { width: 3px; background: var(--track); border-radius: 1px; }
.xg-bar.on { background: var(--ok); }

/* ============ status color tokens ============ */
.s-ok { --sc: var(--ok); }
.s-warn { --sc: var(--warn); }
.s-alert { --sc: var(--alert); }
.s-info { --sc: var(--info); }
.s-idle { --sc: var(--text-faint); }
.s-open { --sc: var(--ok); }
.s-on { --sc: var(--ok); }
.s-closed { --sc: var(--text-faint); }
.s-off { --sc: var(--text-faint); }
.s-opening { --sc: var(--info); }
.s-closing { --sc: var(--warn); }
.s-partial { --sc: var(--info); }

.xg-bigval { font-family: var(--font-mono); font-size: 30px; font-weight: 600; line-height: 1; margin: 14px 0 16px; }
.xg-bigval span { font-size: 14px; color: var(--text-dim); margin-left: 4px; font-weight: 500; }

/* ============ grids ============ */
.xg-grid-air { grid-template-columns: repeat(auto-fill, minmax(248px, 1fr)); }
.xg-grid-soil { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); align-items: start; }
.xg-grid-relays { grid-template-columns: repeat(auto-fill, minmax(228px, 1fr)); }

/* ============ digital input badges ============ */
.xg-di-strip { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--gap); }
.xg-di { display: flex; align-items: center; gap: 12px; padding: 13px 15px; border-radius: var(--r); border: 1px solid var(--border); background: var(--surface); box-shadow: var(--shadow); }
.xg-di-ico { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 10px; background: color-mix(in oklab, var(--sc, var(--text-faint)) 14%, transparent); color: var(--sc, var(--text-dim)); flex: none; }
.xg-di-txt { min-width: 0; }
.xg-di-label { font-size: 13px; font-weight: 500; display: flex; align-items: center; gap: 7px; }
.xg-di-term { font-size: 10px; color: var(--text-faint); background: var(--surface-2); padding: 1px 5px; border-radius: 4px; }
.xg-di-state { font-size: 12.5px; font-weight: 600; color: var(--sc, var(--text-dim)); margin-top: 2px; letter-spacing: .02em; }
.xg-di-ok { --sc: var(--ok); }
.xg-di-info { --sc: var(--info); }
.xg-di-warn { --sc: var(--warn); }
.xg-di-alert { --sc: var(--alert); border-color: color-mix(in oklab, var(--alert) 45%, transparent); background: color-mix(in oklab, var(--alert) 8%, var(--surface)); }
.xg-di-idle { --sc: var(--text-faint); }
.xg-di.is-flash { animation: xgflash 1.1s ease-in-out infinite; }
@keyframes xgflash { 0%,100% { box-shadow: var(--shadow); } 50% { box-shadow: 0 0 0 3px color-mix(in oklab, var(--sc) 30%, transparent); } }

/* ============ micro stat ============ */
.xg-micro { display: flex; align-items: center; gap: 11px; width: 100%; margin-top: 12px; padding-top: 14px; border-top: 1px dashed var(--border); }
.xg-micro-ico { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; background: color-mix(in oklab, var(--sc) 13%, transparent); color: var(--sc); }
.xg-micro-txt { flex: 1; }
.xg-micro-label { font-size: 12px; color: var(--text-dim); }
.xg-micro-val { font-size: 17px; font-weight: 600; }
.xg-micro-val span { font-size: 12px; color: var(--text-dim); margin-left: 2px; font-weight: 500; }
.xg-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--sc); }

/* ============ range bar (EC) ============ */
.xg-range-track { position: relative; height: 12px; border-radius: 7px; background: var(--track); overflow: hidden; }
.xg-range-ok { position: absolute; top: 0; bottom: 0; background: color-mix(in oklab, var(--ok) 26%, transparent); }
.xg-range-fill { position: absolute; top: 0; bottom: 0; left: 0; border-radius: 7px; background: var(--sc); opacity: .85; transition: width .6s; }
.xg-range-mark { position: absolute; top: -3px; width: 3px; height: 18px; border-radius: 2px; background: var(--text); transform: translateX(-1px); transition: left .6s; }
.xg-range-scale { display: flex; justify-content: space-between; gap: 10px; font-size: 11px; color: var(--text-faint); margin-top: 7px; }
.xg-range-okrange { color: color-mix(in oklab, var(--ok) 70%, var(--text)); white-space: nowrap; }

/* ============ pH spectrum ============ */
.xg-ph-bar { position: relative; height: 16px; border-radius: 8px; margin-top: 4px;
  background: linear-gradient(90deg, #d98b3f 0%, #e3c54e 28%, #4fb06a 50%, #3f9bd9 74%, #8a6bd6 100%); }
.xg-ph-okzone { position: absolute; top: -2px; bottom: -2px; border: 2px solid var(--text); border-radius: 8px; opacity: .55; }
.xg-ph-pointer { position: absolute; top: 50%; transform: translate(-50%, -50%); transition: left .6s; }
.xg-ph-pointer span { display: block; transform: translateY(-22px); font-size: 11px; font-weight: 600; background: var(--text); color: var(--bg); padding: 1px 5px; border-radius: 4px; }
.xg-ph-pointer::after { content: ""; position: absolute; left: 50%; top: 50%; width: 14px; height: 14px; border-radius: 50%; background: #fff; border: 3px solid var(--text); transform: translate(-50%, -50%); }
.xg-ph-scale { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--text-faint); margin-top: 9px; }

/* ============ NPK nutrient bars ============ */
.xg-npk { display: flex; flex-direction: column; }
.xg-nut { display: flex; align-items: center; gap: 12px; margin-top: 13px; }
.xg-nut-key { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 7px; background: var(--chip-bg); color: var(--accent); font-size: 12px; font-weight: 700; flex: none; }
.xg-nut-main { flex: 1; min-width: 0; }
.xg-nut-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 5px; }
.xg-nut-label { font-size: 12.5px; color: var(--text-dim); }
.xg-nut-val { font-size: 13px; font-weight: 600; }
.xg-nut-val i { font-style: normal; font-size: 10px; color: var(--text-faint); margin-left: 2px; }
.xg-nut-track { position: relative; height: 8px; border-radius: 5px; background: var(--track); overflow: hidden; }
.xg-nut-ok { position: absolute; top: 0; bottom: 0; background: color-mix(in oklab, var(--ok) 24%, transparent); }
.xg-nut-fill { position: absolute; top: 0; bottom: 0; left: 0; border-radius: 5px; background: var(--sc); transition: width .6s; }

/* ============ relay status cards ============ */
.xg-relay { display: flex; flex-direction: column; gap: 15px; transition: .2s; }
.xg-relay.is-on { border-color: color-mix(in oklab, var(--accent) 38%, transparent); }
.xg-relay-top { display: flex; align-items: flex-start; gap: 11px; }
.xg-term { font-size: 11px; font-weight: 600; color: var(--text-dim); background: var(--surface-2); padding: 4px 7px; border-radius: 6px; flex: none; }
.xg-relay-titles { flex: 1; min-width: 0; }
.xg-relay-name { font-size: 14px; font-weight: 500; }
.xg-relay-meta { font-size: 11px; color: var(--text-faint); margin-top: 1px; }
.xg-relay-led { width: 10px; height: 10px; border-radius: 50%; background: var(--track); flex: none; }
.xg-relay-led.on { background: var(--ok); box-shadow: 0 0 0 3px color-mix(in oklab, var(--ok) 22%, transparent); }
.xg-relay-foot { display: flex; align-items: center; gap: 12px; }
.xg-state-tag { font-size: 12px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; padding: 4px 10px; border-radius: 7px; color: var(--sc); background: color-mix(in oklab, var(--sc) 14%, transparent); }
.xg-state-tag.big { font-size: 15px; padding: 8px 16px; }
.xg-win-track { height: 10px; border-radius: 6px; background: var(--track); overflow: hidden; }
.xg-win-fill { height: 100%; border-radius: 6px; background: var(--ok); transition: width 1s linear; }

.xg-win-row { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; }
.xg-win-pct { font-size: 11.5px; color: var(--text-dim); }
.xg-flowbadge { display: inline-flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 600; padding: 6px 12px; border-radius: 8px; background: var(--surface-2); color: var(--text-dim); }
.xg-flowbadge.on { background: color-mix(in oklab, var(--ok) 14%, transparent); color: var(--ok); }
.xg-flow-dots { display: inline-flex; gap: 3px; }
.xg-flow-dots i { width: 5px; height: 5px; border-radius: 50%; background: currentColor; animation: xgflow 1s ease-in-out infinite; }
.xg-flow-dots i:nth-child(2) { animation-delay: .15s; }
.xg-flow-dots i:nth-child(3) { animation-delay: .3s; }
@keyframes xgflow { 0%,100% { opacity: .25; } 50% { opacity: 1; } }
.xg-fan { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 10px; background: var(--surface-2); color: var(--text-faint); }
.xg-fan.spin { background: color-mix(in oklab, var(--ok) 14%, transparent); color: var(--ok); }
.xg-fan.spin .xg-icon { animation: xgspin 0.4s linear infinite; }
.xg-relay-reserved { display: flex; align-items: center; gap: 11px; opacity: .55; border-style: dashed; }

/* ============ safe-state banner ============ */
.xg-safebanner { display: flex; gap: 16px; padding: 18px 20px; border-radius: var(--r);
  background: linear-gradient(180deg, #3a1310, #2a0f0d); color: #ffd9d2;
  border: 1px solid color-mix(in oklab, var(--alert) 60%, transparent);
  box-shadow: 0 0 0 4px color-mix(in oklab, var(--alert) 14%, transparent); }
.xg-safebanner-ico { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 11px; background: color-mix(in oklab, var(--alert) 30%, transparent); color: #ff7a64; flex: none; animation: xgflash 1.4s ease-in-out infinite; }
.xg-safebanner-body { display: flex; flex-direction: column; gap: 4px; }
.xg-safebanner-body b { font-size: 14.5px; letter-spacing: .04em; color: #ffe6e0; }
.xg-safebanner-body span { font-size: 13px; color: #e6b3aa; }
.xg-safebanner-sub { font-size: 12.5px !important; color: #c79a92 !important; }

/* ============ stale / dim ============ */
.xg-stale { display: flex; align-items: center; gap: 14px; color: var(--text-dim); border-style: dashed; }
.xg-stale b { color: var(--text); font-size: 14px; }
.xg-stale span { font-size: 13px; }
.xg-rules.is-dim { opacity: .5; pointer-events: none; }
.xg-hist-note { font-size: 12px; color: var(--text-faint); margin: -8px 0 0; }

/* ============ devices extra ============ */
.xg-dev.s-alert { border-color: color-mix(in oklab, var(--alert) 40%, transparent); }
.xg-dev.s-warn { border-color: color-mix(in oklab, var(--warn) 38%, transparent); }
.xg-dev-msg { display: flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--warn); background: color-mix(in oklab, var(--warn) 10%, transparent); padding: 7px 10px; border-radius: 8px; line-height: 1.3; }

/* ============ relay icon + manual override ============ */
.xg-relay-ico { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 10px; background: var(--chip-bg); color: var(--accent); flex: none; transition: .2s; }
.xg-relay-ico.is-on { background: var(--accent); color: #fff; }
.xg-relay.is-manual { border-color: color-mix(in oklab, var(--info) 42%, transparent); }
.xg-relay-ctl { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 13px; margin-top: 2px; border-top: 1px solid var(--border); flex-wrap: wrap; }
.xg-act-btn { white-space: nowrap; }
.xg-blocked { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 600; color: var(--alert); background: color-mix(in oklab, var(--alert) 12%, transparent); padding: 5px 10px; border-radius: 7px; }
.xg-btn-danger { color: var(--alert); border-color: color-mix(in oklab, var(--alert) 40%, transparent); }
.xg-btn-danger:hover:not(:disabled) { background: color-mix(in oklab, var(--alert) 12%, transparent); border-color: var(--alert); color: var(--alert); }

/* ============ view toggle ============ */
.xg-viewbar { display: flex; justify-content: flex-end; align-items: center; gap: 10px; margin: 2px 0 -6px; }
.xg-viewbar::before { content: ""; flex: 1; }
.xg-viewseg .xg-seg-btn { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; }

/* ============ glance tiles ============ */
.xg-glance-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--gap); }
.xg-glance { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 8px; padding: 18px 14px; border-radius: var(--r); background: var(--surface); border: 1px solid var(--border); box-shadow: var(--shadow); border-top: 3px solid var(--sc, var(--track)); }
.xg-glance-ico { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; background: color-mix(in oklab, var(--sc, var(--text-faint)) 14%, transparent); color: var(--sc, var(--text-dim)); }
.xg-glance-name { font-size: 12.5px; color: var(--text-dim); font-weight: 500; min-height: 2.4em; display: flex; align-items: center; justify-content: center; line-height: 1.2; }
.xg-glance-val { font-size: 22px; font-weight: 600; line-height: 1; }
.xg-glance-val span { font-size: 12px; color: var(--text-dim); margin-left: 2px; font-weight: 500; }
.xg-glance.s-off { opacity: .6; }

/* ============ edit affordance / empty ============ */
.xg-edit { color: var(--text-faint); }
.xg-edit:hover { color: var(--accent); }
.xg-rule-actions { display: flex; align-items: center; gap: 6px; }
.xg-empty { padding: 28px; text-align: center; color: var(--text-dim); font-size: 14px; border: 1px dashed var(--border-strong); border-radius: var(--r); background: var(--surface); }

/* ============ modal ============ */
.xg-modal-scrim { position: fixed; inset: 0; z-index: 50; background: color-mix(in oklab, #0a0f0c 55%, transparent); backdrop-filter: blur(3px); display: grid; place-items: center; padding: 24px; animation: xgfade .15s ease; }
@keyframes xgfade { from { opacity: 0; } }
/* Cap the modal at the viewport (scrim has 24px padding each side) and lay it out as a flex column so the
   head + footer stay pinned while only the body scrolls — a tall form can no longer push the buttons off-screen. */
.xg-modal { width: 100%; max-width: 480px; max-height: calc(100vh - 48px); display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--border); border-radius: 16px; box-shadow: 0 24px 60px -16px rgba(0,0,0,.4); overflow: hidden; animation: xgpop .18s cubic-bezier(.2,.9,.3,1.2); }
@keyframes xgpop { from { transform: translateY(8px) scale(.98); opacity: 0; } }
.xg-modal-head { flex: none; display: flex; align-items: center; justify-content: space-between; padding: 18px 20px; border-bottom: 1px solid var(--border); }
.xg-modal-head h3 { font-size: 17px; }
.xg-modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 20px; }
.xg-modal-foot { flex: none; display: flex; align-items: center; gap: 10px; padding: 16px 20px; border-top: 1px solid var(--border); background: var(--surface-2); }
.xg-foot-sp { flex: 1; }

/* ============ form ============ */
.xg-form { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
.xg-fld { display: flex; flex-direction: column; gap: 7px; }
.xg-fld-full { grid-column: 1 / -1; }
.xg-fld-label { font-size: 12.5px; font-weight: 500; color: var(--text-dim); }
.xg-select-wrap { position: relative; }
.xg-select { width: 100%; appearance: none; padding: 11px 34px 11px 12px; border-radius: var(--r-sm); border: 1px solid var(--border-strong); background: var(--surface); color: var(--text); font-size: 14.5px; font-family: inherit; }
.xg-select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--accent) 16%, transparent); }
.xg-select-caret { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); color: var(--text-dim); pointer-events: none; }
.xg-form .xg-input { padding: 11px 12px; }
.xg-daypick { display: flex; gap: 6px; }
.xg-daybtn { flex: 1; padding: 9px 0; border-radius: 8px; border: 1px solid var(--border-strong); background: var(--surface); color: var(--text-dim); font-size: 12.5px; font-weight: 600; transition: .15s; }
.xg-daybtn.on { background: var(--accent); border-color: var(--accent); color: #fff; }

/* ============ sensor panel (one physical sensor → many readings) ============ */
.xg-sp-stack { display: flex; flex-direction: column; gap: var(--gap); }
.xg-sp { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r); box-shadow: var(--shadow); overflow: visible; }
.xg-sp-head { display: flex; align-items: center; gap: 13px; padding: 14px 18px; border-bottom: 1px solid var(--border); background: color-mix(in oklab, var(--surface-2) 50%, var(--surface)); border-top-left-radius: inherit; border-top-right-radius: inherit; }
.xg-sp-ico { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 11px; background: color-mix(in oklab, var(--sc, var(--accent)) 15%, transparent); color: var(--sc, var(--accent)); flex: none; }
.xg-sp-ico.is-offline { --sc: var(--alert); }
.xg-sp.s-ok { --sc: var(--accent); }
.xg-sp.s-warn { --sc: var(--warn); }
.xg-sp.s-alert, .xg-sp.s-off { --sc: var(--alert); }
.xg-sp-id { flex: 1; min-width: 0; }
.xg-sp-name { font-size: 15.5px; font-weight: 600; }
.xg-sp-meta { font-size: 11.5px; color: var(--text-faint); margin-top: 2px; }
.xg-sp-status { display: flex; align-items: center; gap: 12px; flex: none; }
.xg-live { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 500; color: var(--text-dim); }
.xg-live-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); box-shadow: 0 0 0 0 color-mix(in oklab, var(--ok) 60%, transparent); animation: xglive 1.8s ease-out infinite; }
@keyframes xglive { 0% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--ok) 55%, transparent); } 70%, 100% { box-shadow: 0 0 0 6px transparent; } }
.xg-sp-body { padding: 18px; }
.xg-reading-grid { display: grid; gap: 14px; }
.xg-rg-air { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.xg-rg-soil { display: grid; grid-template-columns: minmax(0, 1fr) minmax(148px, 0.4fr); gap: 14px; align-items: stretch; }
.xg-soil-quad { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-content: start; }

/* Inline per-card view picker (the little grid button on a reading card header) */
.xg-viewmenu { position: absolute; right: 0; top: 100%; margin-top: 4px; z-index: 61; display: flex; flex-direction: column;
  min-width: 152px; padding: 4px; background: var(--surface); border: 1px solid var(--border); border-radius: 9px; box-shadow: var(--shadow); }
.xg-viewmenu-item { display: block; width: 100%; text-align: left; padding: 6px 10px; font: inherit; font-size: 13px;
  color: var(--text); background: none; border: none; border-radius: 6px; cursor: pointer; }
.xg-viewmenu-item:hover { background: var(--surface-2); }
.xg-viewmenu-item.is-active { color: var(--accent); font-weight: 600; }

/* NPK vertical bars (beside the 4 soil stats, height-matched) */
.xg-reading-npk { align-items: stretch; }
.xg-nutv-wrap { display: flex; gap: 8px; align-items: stretch; justify-content: space-around; flex: 1; min-height: 150px; padding-top: 8px; }
/* Each bar in a profile card is a cell so it can carry its own view button below it (pull a bar out to a dial…). */
.xg-nutv-cell { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.xg-nutv-cell .xg-nutv { flex: 1; width: 100%; }
.xg-nutv { display: flex; flex-direction: column; align-items: center; gap: 8px; flex: 1; }
.xg-nutv-val { font-size: 13px; font-weight: 600; }
.xg-nutv-unit { font-size: 9px; color: var(--text-faint); margin-left: 2px; font-weight: 500; }
.xg-nutv-track { position: relative; flex: 1; width: 30px; min-height: 80px; background: var(--track); border-radius: 8px; overflow: hidden; }
.xg-nutv-ok { position: absolute; left: 0; right: 0; background: color-mix(in oklab, var(--ok) 26%, transparent); }
.xg-nutv-fill { position: absolute; left: 0; right: 0; bottom: 0; border-radius: 8px 8px 0 0; background: var(--sc); transition: height .6s; }
.xg-nutv-key { width: 24px; height: 24px; display: grid; place-items: center; border-radius: 7px; background: var(--chip-bg); color: var(--accent); font-size: 12px; font-weight: 700; }

/* inner reading tile (lighter than a full card — the panel is the card) */
.xg-reading { background: color-mix(in oklab, var(--surface-2) 55%, var(--surface)); border: 1px solid var(--border); border-radius: 12px; padding: 15px; display: flex; flex-direction: column; align-items: center; }
.xg-reading-head { display: flex; align-items: center; gap: 8px; width: 100%; margin-bottom: 8px; }
.xg-reading-ico { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: var(--chip-bg); color: var(--accent); flex: none; }
.xg-reading-name { font-size: 13.5px; font-weight: 500; flex: 1; min-width: 0; }
.xg-reading-foot { width: 100%; margin-top: 4px; }
.xg-reading-range { font-size: 10.5px; color: var(--text-faint); text-align: center; margin-top: 2px; }
.xg-reading .xg-bigval { align-self: flex-start; margin: 8px 0 14px; font-size: 26px; }
.xg-reading-npk { align-items: stretch; }
.xg-reading-npk .xg-nut:first-of-type { margin-top: 4px; }

/* A reading card centres its content, so a viz with no intrinsic width (the bars, the spectrum) used to collapse
   to its text width. This wrapper gives every visualisation a full-width box; each viz then sizes within it. */
.xg-reading-viz { width: 100%; margin-top: 6px; }
/* Fixed-size visuals (dial, and the spark card before its data loads → a dial) centre in that box. */
.xg-reading-viz-gauge, .xg-reading-viz-spark { display: flex; justify-content: center; }
/* Spectrum + a lone vertical bar are locked to a share of the width and centred, so they read as deliberate
   rather than sprawling edge-to-edge. The spectrum's top margin clears its floating value label. */
.xg-reading-viz-spectrum .xg-ph { width: 82%; margin: 22px auto 0; }
.xg-reading-viz-nutrient .xg-nutv { flex: none; width: 80%; height: 150px; margin: 0 auto; }
/* The live 24h trace matches its FlexChart height prop. */
.xg-reading-trace { height: 132px; }

/* ============ history: per-sensor chart grids ============ */
.xg-time-pills { display: inline-flex; gap: 2px; background: var(--surface-2); border-radius: 9px; padding: 3px; }
.xg-time-wrap { position: relative; }
.xg-tpill-cal { display: inline-flex; align-items: center; gap: 7px; }
.xg-datepop { position: absolute; top: calc(100% + 8px); right: 0; z-index: 30; width: 320px; background: var(--surface); border: 1px solid var(--border-strong); border-radius: 14px; box-shadow: 0 18px 44px -12px rgba(0,0,0,.35); padding: 16px; animation: xgpop .16s cubic-bezier(.2,.9,.3,1.2); }
.xg-datepop-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.xg-datepop .xg-input { padding: 9px 10px; font-size: 13.5px; }
.xg-datepop-err { display: flex; align-items: center; gap: 7px; color: var(--alert); font-size: 12.5px; margin-top: 10px; }
.xg-datepop-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 14px; }
.xg-tpill { border: none; background: transparent; color: var(--text-dim); font-size: 12.5px; font-weight: 600; padding: 6px 14px; border-radius: 7px; transition: .15s; }
.xg-tpill:hover { color: var(--text); }
.xg-tpill.is-active { background: var(--surface); color: var(--accent); box-shadow: 0 1px 3px rgba(0,0,0,.1); }

.xg-hgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(252px, 1fr)); gap: 14px; }
.xg-hcard { background: color-mix(in oklab, var(--surface-2) 55%, var(--surface)); border: 1px solid var(--border); border-radius: 12px; padding: 14px; cursor: pointer; transition: border-color .15s, box-shadow .15s; }
.xg-hcard:hover { border-color: color-mix(in oklab, var(--accent) 45%, var(--border)); }
.xg-hcard.is-expanded { grid-column: 1 / -1; cursor: zoom-out; border-color: color-mix(in oklab, var(--accent) 45%, var(--border)); box-shadow: var(--shadow); }
.xg-hcard.is-offline { opacity: .6; cursor: default; }
.xg-hcard-head { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; }
.xg-hcard-ico { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: var(--chip-bg); color: var(--accent); flex: none; }
.xg-hcard-id { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.xg-hcard-name { font-size: 13px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xg-hcard-val { font-size: 15px; font-weight: 600; }
.xg-hcard-val i { font-style: normal; font-size: 11px; color: var(--text-dim); margin-left: 2px; }
.xg-hcard-chart { border-radius: 8px; overflow: visible; }
.xg-hcard-nodata { display: grid; place-items: center; height: 120px; color: var(--text-faint); }
.xg-hcard-detail { display: flex; justify-content: space-between; margin-top: 10px; }
.xg-hcard-range, .xg-hcard-now { font-size: 11px; color: var(--text-faint); }

/* ============ responsive ============ */
@media (max-width: 1080px) {
  .xg-sidebar { width: 72px; padding: 18px 10px; }
  .xg-logo-word, .xg-side-label, .xg-gh-txt, .xg-gh-badge, .xg-navitem span,
  .xg-side-user-txt, .xg-gh-officon, .xg-gh-grip { display: none; }
  .xg-gh, .xg-navitem { justify-content: center; }
  .xg-side-user { justify-content: center; padding: 8px; }
  /* Collapse the subscription row to an icon-only chip so it fits the 72px rail. */
  .xg-sub-txt, .xg-sub-chev { display: none; }
  .xg-sub-card { justify-content: center; padding: 8px; }
  .xg-content { padding: 20px; }
}
@media (max-width: 820px) {
  .xg-login { grid-template-columns: 1fr; }
  .xg-login-brand { display: none; }
}
@media (max-width: 760px) {
  .xg-rg-soil { grid-template-columns: 1fr; }
  .xg-soil-quad { grid-template-columns: 1fr 1fr; }
  .xg-nutv-wrap { min-height: 130px; }
}
@media (prefers-reduced-motion: reduce) { * { transition: none !important; } }

/* ============ weather card ============ */
.xg-weather-card { display: flex; flex-direction: column; gap: 12px; }
.xg-weather-empty { align-items: center; justify-content: center; text-align: center; gap: 8px; padding: 28px var(--pad); }
.xg-weather-empty-txt { color: var(--text-dim); font-size: 13px; }
.xg-weather-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.xg-weather-head-actions { display: flex; align-items: center; gap: 6px; }
.xg-modal-hint { margin: 0 0 16px; font-size: 12.5px; line-height: 1.45; color: var(--text-dim); }
/* #18 quick-login code display */
.xg-quickcode-wrap { text-align: center; padding: 8px 0 4px; }
.xg-quickcode { font-size: 40px; font-weight: 600; letter-spacing: 0.18em; padding: 14px 8px; border-radius: 10px; background: var(--surface-2); border: 1px solid var(--border); color: var(--accent); user-select: all; }
.xg-quickcode.is-expired { color: var(--text-faint); text-decoration: line-through; }
.xg-quickcode-ttl { margin-top: 10px; font-size: 12.5px; color: var(--text-dim); }
.xg-weather-loc { color: var(--text-dim); font-weight: 400; font-size: 12.5px; margin-left: 6px; }
.xg-weather-stale-banner { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--warn); background: color-mix(in oklab, var(--warn) 12%, transparent); border: 1px solid color-mix(in oklab, var(--warn) 30%, transparent); border-radius: 8px; padding: 6px 10px; }
.xg-weather-card.is-stale .xg-weather-now { opacity: .55; }
.xg-weather-now { display: flex; align-items: center; gap: 12px; }
.xg-weather-now-temp { font-size: 26px; font-weight: 600; }
.xg-weather-now-meta { display: flex; flex-direction: column; gap: 3px; font-size: 12.5px; color: var(--text-dim); }
.xg-weather-wind { display: inline-flex; align-items: center; gap: 5px; }
.xg-weather-updated { margin-left: auto; font-size: 11px; color: var(--text-dim); opacity: .8; align-self: flex-start; }
.xg-weather-sun { display: flex; gap: 14px; font-size: 12px; color: var(--text-dim); }
.xg-weather-sun-item { display: inline-flex; align-items: center; gap: 5px; }
.xg-weather-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.xg-soil-trend { display: flex; align-items: center; gap: 6px; margin-top: 8px; font-size: 11.5px; color: var(--text-dim); }
.xg-soil-trend svg { flex-shrink: 0; color: var(--accent); }

/* ---- Suggested automations / schedules (#17) ---- */
.xg-suggest { margin-bottom: 14px; }
.xg-suggest-head { display: flex; align-items: center; gap: 7px; margin-bottom: 8px; font-size: 13.5px; }
.xg-suggest-head svg { color: var(--accent); }
.xg-suggest-hint { color: var(--text-dim); font-size: 11.5px; font-weight: 400; }
.xg-suggest-list { display: flex; flex-direction: column; gap: 8px; }
.xg-suggest-card { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 10px;
  background: color-mix(in oklab, var(--accent) 7%, var(--surface)); border: 1px solid color-mix(in oklab, var(--accent) 28%, transparent); }
.xg-suggest-card.has-conflict { background: color-mix(in oklab, var(--warn) 8%, var(--surface)); border-color: color-mix(in oklab, var(--warn) 35%, transparent); }
.xg-suggest-body { flex: 1; min-width: 0; }
.xg-suggest-reason { font-size: 12.5px; font-weight: 600; margin-bottom: 4px; }
.xg-suggest-conflict { display: flex; align-items: center; gap: 6px; margin-top: 6px; font-size: 11.5px; color: color-mix(in oklab, var(--warn) 80%, var(--text)); }
.xg-suggest-conflict svg { flex-shrink: 0; }
.xg-suggest-actions { display: flex; align-items: center; gap: 4px; flex: none; }
/* card automation icon (per-reading) */
.xg-suggest-btn { color: var(--text-dim); }
.xg-suggest-btn:hover { color: var(--accent); }
.xg-suggest-btn.has-sugg { color: var(--accent); position: relative; }
.xg-suggest-btn.has-sugg::after { content: ""; position: absolute; top: 2px; right: 2px; width: 6px; height: 6px;
  border-radius: 50%; background: var(--warn); box-shadow: 0 0 0 2px var(--surface); }

/* ---- Priority badge (#15) ---- */
.xg-prio-badge { display: inline-flex; align-items: center; gap: 3px; margin-left: 6px; padding: 1px 6px; border-radius: 999px;
  font-size: 10.5px; font-weight: 600; border: 1px solid transparent; vertical-align: middle; }
.xg-prio-badge svg { width: 11px; height: 11px; }
.xg-prio-badge.is-low { background: color-mix(in oklab, var(--text-dim) 14%, transparent); color: var(--text-dim); }
.xg-prio-badge.is-high { background: color-mix(in oklab, var(--accent) 14%, transparent); color: color-mix(in oklab, var(--accent) 80%, var(--text)); border-color: color-mix(in oklab, var(--accent) 30%, transparent); }
.xg-prio-badge.is-safety { background: color-mix(in oklab, var(--alert) 14%, transparent); color: color-mix(in oklab, var(--alert) 82%, var(--text)); border-color: color-mix(in oklab, var(--alert) 32%, transparent); }

/* #4b support conversations — chat bubbles (client Messages screen) */
.xg-msg-bubble { max-width: 80%; padding: 8px 12px; border-radius: 12px; font-size: 14px; line-height: 1.45; }
.xg-msg-bubble.is-mine { align-self: flex-end; background: var(--accent); color: #fff; border-bottom-right-radius: 4px; }
.xg-msg-bubble.is-them { align-self: flex-start; background: var(--bg-hover); color: var(--text); border-bottom-left-radius: 4px; border: 1px solid var(--border); }
.xg-msg-time { font-size: 11px; opacity: 0.7; margin-top: 4px; }
.xg-msgbtn .xg-alertcount { position: absolute; top: -4px; right: -4px; }

/* #2 VPD chooser — advisory (non-primary) climate reading tag */
.xg-advisory-tag { display: inline-flex; align-items: center; padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 600;
  color: var(--text-dim); background: color-mix(in oklab, var(--text-dim) 14%, transparent); border: 1px solid color-mix(in oklab, var(--text-dim) 22%, transparent); }

/* first-run setup checklist */
.xg-setup-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.xg-setup-steps { display: flex; flex-direction: column; gap: 2px; margin-top: 12px; }
.xg-setup-step { display: flex; align-items: center; gap: 10px; padding: 8px 6px; border-radius: 8px; }
.xg-setup-step + .xg-setup-step { border-top: 1px solid var(--border); }
.xg-setup-step.is-done { opacity: 0.6; }
.xg-setup-tick { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 999px; flex: none; color: var(--text-dim); }
.xg-setup-step.is-done .xg-setup-tick { background: color-mix(in oklab, var(--ok) 18%, transparent); color: var(--ok); }
.xg-setup-dot { width: 9px; height: 9px; border-radius: 999px; border: 2px solid color-mix(in oklab, var(--accent) 55%, transparent); }
.xg-setup-step-label { font-size: 13.5px; font-weight: 600; }
.xg-setup-step.is-done .xg-setup-step-label { font-weight: 500; text-decoration: line-through; }
.xg-setup-step-desc { font-size: 12px; color: var(--text-dim); line-height: 1.4; margin-top: 2px; }

/* #8 Phase B — cross-module shared-sensor attribution badge (rule cards + editor) */
.xg-link-badge { display: inline-flex; align-items: center; gap: 3px; margin-left: 6px; padding: 1px 6px; border-radius: 999px;
  font-size: 10.5px; font-weight: 600; vertical-align: middle;
  background: color-mix(in oklab, var(--accent) 13%, transparent); color: color-mix(in oklab, var(--accent) 80%, var(--text));
  border: 1px solid color-mix(in oklab, var(--accent) 28%, transparent); }
.xg-link-badge svg { width: 11px; height: 11px; }
/* …and in the Activity feed rows */
.xg-activity-link { display: inline-flex; align-items: center; gap: 3px; margin-left: 6px; font-size: 11px; color: color-mix(in oklab, var(--accent) 78%, var(--text)); }
.xg-activity-link svg { width: 11px; height: 11px; }

/* ---- Conflict audit (#15) ---- */
.xg-conflict-audit { margin-bottom: 14px; padding: 10px 12px; border-radius: 10px;
  background: color-mix(in oklab, var(--warn) 7%, var(--surface)); border: 1px solid color-mix(in oklab, var(--warn) 30%, transparent); }
.xg-conflict-audit .xg-suggest-head svg { color: var(--warn); }
.xg-conflict-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 5px 0; font-size: 12px; border-top: 1px solid color-mix(in oklab, var(--warn) 15%, transparent); }
.xg-conflict-row:first-of-type { border-top: 0; }
.xg-conflict-ch { font-weight: 600; }
.xg-conflict-claimants { display: inline-flex; flex-wrap: wrap; gap: 4px 10px; }
.xg-conflict-claimant { display: inline-flex; align-items: center; color: var(--text-dim); }
.xg-conflict-claimant.is-winner { color: var(--text); font-weight: 600; }
.xg-conflict-wins { margin-left: 5px; font-size: 10px; font-weight: 700; text-transform: uppercase; color: color-mix(in oklab, var(--accent) 80%, var(--text)); }
.xg-conflict-soft { color: var(--text-dim); }
.xg-weather-strip { display: flex; gap: 4px; overflow-x: auto; padding-top: 8px; margin-top: 8px; border-top: 1px solid var(--border); }
.xg-weather-hour { display: flex; flex-direction: column; align-items: center; gap: 5px; flex: 1 0 auto; min-width: 46px; padding: 8px 2px; border-radius: 9px; color: var(--text-dim); transition: background .2s; }
/* Day-phase tint (low-alpha fixed hues → reads on both light & dark surfaces). dawn = warm yellow-orange,
   day = faint warm, dusk = pink→violet (so morning vs evening are distinguishable), night = cool indigo. */
.xg-wh-dawn  { background: linear-gradient(180deg, rgba(255,178,102,.26), rgba(255,140,110,.10)); }
.xg-wh-day   { background: linear-gradient(180deg, rgba(255,214,110,.15), rgba(255,214,110,.03)); }
.xg-wh-dusk  { background: linear-gradient(180deg, rgba(240,120,150,.24), rgba(150,92,196,.13)); }
.xg-wh-night { background: linear-gradient(180deg, rgba(66,84,176,.22), rgba(40,52,120,.10)); }
.xg-weather-hour-t { font-size: 10.5px; }
.xg-weather-hour-temp { font-size: 13px; color: var(--text); font-weight: 600; }
.xg-weather-hour-rain, .xg-weather-hour-wind { display: flex; align-items: center; gap: 2px; font-size: 10.5px; line-height: 1; }
.xg-weather-hour-rain { color: var(--info); }
.xg-weather-hour-wind { color: var(--text-dim); }
.xg-weather-details-toggle { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; background: none; border: none; border-top: 1px solid var(--border); padding: 9px 0 2px; color: var(--text-dim); font-size: 12.5px; font-weight: 500; cursor: pointer; transition: color .15s; }
.xg-weather-details-toggle:hover { color: var(--accent); }
.xg-weather-details { display: flex; flex-direction: column; gap: 7px; }
.xg-weather-detail-window { font-size: 11px; color: var(--text-dim); text-transform: uppercase; letter-spacing: .05em; }
.xg-weather-detail-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 13px; }
.xg-weather-detail-rules { display: flex; flex-direction: column; gap: 9px; margin-top: 3px; padding-top: 8px; border-top: 1px dashed var(--border); }
.xg-weather-rule-hint { display: block; font-size: 11px; color: var(--text-dim); margin-top: 1px; }

/* ============ collapsible / re-orderable dashboard blocks ============ */
.xg-dash-blocks { display: flex; flex-direction: column; gap: 1.25rem; margin-top: 1rem; }
.xg-dash-block { display: flex; flex-direction: column; transition: opacity .15s; }
.xg-dash-block.is-dragging { opacity: .4; }
.xg-dash-block-head { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; }
.xg-dash-drag { display: inline-flex; align-items: center; color: var(--text-dim); cursor: grab; opacity: .55; transition: opacity .15s, color .15s; }
.xg-dash-drag:hover { opacity: 1; color: var(--accent); }
.xg-dash-drag:active { cursor: grabbing; }
.xg-dash-collapse { display: inline-flex; align-items: center; gap: 6px; background: none; border: none; padding: 2px 4px; margin: 0; color: var(--text); font-size: 14px; font-weight: 600; cursor: pointer; transition: color .15s; }
.xg-dash-collapse:hover { color: var(--accent); }
.xg-dash-title { letter-spacing: .01em; }
/* translucent drag preview (a cloned block appended off-screen, used as the drag image) */
.xg-dash-ghost { opacity: .72; background: var(--surface); border: 1px solid var(--border-strong); border-radius: 12px; padding: 10px; box-shadow: 0 12px 32px rgba(0,0,0,.32); }
/* per-card reorder: the wrapper is the flex/grid item that carries CSS `order` + is the drop target; the grip
   (rendered inside the card head) is the only draggable element. Mirrors the block-level drag affordances. */
.xg-card-reorder { display: flex; flex-direction: column; min-width: 0; transition: opacity .15s; }
.xg-card-reorder.is-dragging { opacity: .4; }
.xg-card-drag { display: inline-flex; align-items: center; flex: none; margin: -2px -6px -2px -4px; color: var(--text-dim); cursor: grab; opacity: .5; transition: opacity .15s, color .15s; }
.xg-card-drag:hover { opacity: 1; color: var(--accent); }
.xg-card-drag:active { cursor: grabbing; }

/* ============ location picker ============ */
.xg-loc-row { display: flex; justify-content: space-between; align-items: center; }
.xg-loc-current { display: flex; align-items: center; gap: 6px; }
.xg-loc-search-wrap { position: relative; }
.xg-loc-results { position: absolute; z-index: 20; top: calc(100% + 4px); left: 0; right: 0; background: var(--surface); border: 1px solid var(--border-strong); border-radius: 8px; box-shadow: var(--shadow); max-height: 220px; overflow-y: auto; }
.xg-loc-result { display: block; width: 100%; text-align: left; padding: 9px 12px; border: none; background: none; font-size: 13px; color: var(--text); cursor: pointer; border-bottom: 1px solid var(--border); }
.xg-loc-result:last-child { border-bottom: none; }
.xg-loc-result:hover { background: var(--surface-2); }
/* isolation: confine Leaflet's internal z-indexes (panes/controls reach ~1000) to the map's own
   stacking context, so the city-search dropdown above can render over the map. */
.xg-loc-map { width: 100%; height: 220px; border-radius: 10px; overflow: hidden; border: 1px solid var(--border); margin-top: 10px; isolation: isolate; }
.xg-loc-hint { font-size: 11.5px; color: var(--text-dim); margin-top: 6px; }
.xg-loc-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }

.xg-spin-anim svg { animation: xgspin 0.4s linear infinite; }

/* ============ Help / documentation (#14) ============ */
.xg-help { display: flex; flex-direction: column; gap: 16px; max-width: 1080px; }
.xg-help-bar { display: flex; align-items: center; justify-content: space-between; }
.xg-help-guides { display: inline-flex; gap: 4px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 999px; padding: 4px; }
.xg-help-guidebtn {
  display: inline-flex; align-items: center; gap: 7px; border: none; background: transparent;
  color: var(--text-dim); font: inherit; font-weight: 600; font-size: 13px; cursor: pointer;
  padding: 7px 14px; border-radius: 999px; transition: .15s;
}
.xg-help-guidebtn:hover { color: var(--text); }
.xg-help-guidebtn.is-active { background: var(--surface); color: var(--accent); box-shadow: var(--shadow); }

.xg-help-body { display: grid; grid-template-columns: 230px 1fr; gap: 18px; align-items: start; }
.xg-help-toc { position: sticky; top: 8px; display: flex; flex-direction: column; gap: 2px; }
.xg-help-tocitem {
  display: flex; align-items: center; gap: 9px; text-align: left; border: none; background: transparent;
  color: var(--text-dim); font: inherit; font-size: 13.5px; cursor: pointer; padding: 8px 10px;
  border-radius: var(--r-sm); transition: .12s; border-left: 2px solid transparent;
}
.xg-help-tocitem:hover { background: var(--surface-2); color: var(--text); }
.xg-help-tocitem.is-active { background: var(--surface-2); color: var(--accent); border-left-color: var(--accent); font-weight: 600; }
.xg-help-tocitem .xg-icon { flex: none; }

.xg-help-content { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r); padding: 24px 28px; box-shadow: var(--shadow); min-width: 0; }
.xg-help-title { display: flex; align-items: center; gap: 10px; font-size: 22px; font-weight: 600; margin: 0 0 14px; color: var(--text); }
.xg-help-title .xg-icon { color: var(--accent); flex: none; }
.xg-help-lead { font-size: 15.5px; line-height: 1.65; color: var(--text); margin: 0 0 16px; }
.xg-help-h { font-size: 16px; font-weight: 600; color: var(--text); margin: 22px 0 8px; }
.xg-help-ver { display: inline-block; margin-left: 8px; padding: 1px 7px; border-radius: 999px; font-size: 11px; font-weight: 600; font-family: var(--mono, monospace); color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent); vertical-align: middle; letter-spacing: 0.02em; }
.xg-help-p { font-size: 14px; line-height: 1.7; color: var(--text-dim); margin: 0 0 12px; }
.xg-help-ul, .xg-help-ol { margin: 0 0 14px; padding-left: 20px; }
.xg-help-ul li, .xg-help-ol li { font-size: 14px; line-height: 1.7; color: var(--text-dim); margin-bottom: 6px; }
.xg-help-content strong { color: var(--text); font-weight: 600; }
.xg-help-code { font-family: var(--font-mono); font-size: 12.5px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 5px; padding: 1px 5px; color: var(--text); }
.xg-help-pre { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 12px 14px; overflow-x: auto; margin: 0 0 14px; }
.xg-help-pre code { font-family: var(--font-mono); font-size: 12.5px; color: var(--text); white-space: pre; }

/* ---- cloud badge + upsell teaser (standalone app marks web/cloud-only features) ---- */
.xg-cloud-badge { display: inline-flex; align-items: center; gap: 3px; font-size: 10px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.04em; color: #2563eb; background: rgba(37,99,235,0.12);
  border: 1px solid rgba(37,99,235,0.28); border-radius: 6px; padding: 1px 5px; vertical-align: middle; line-height: 1.4; }
.xg-cloud-badge.is-compact { padding: 2px; gap: 0; }
[data-theme="dark"] .xg-cloud-badge { color: #8fb4ff; background: rgba(37,99,235,0.20); border-color: rgba(143,180,255,0.35); }
.xg-cloud-dot { position: absolute; top: 1px; right: 1px; width: 8px; height: 8px; border-radius: 50%;
  background: #2563eb; box-shadow: 0 0 0 1.5px var(--surface); }
.xg-navitem.is-cloud { opacity: 0.9; }
.xg-navitem.is-cloud .xg-cloud-badge { margin-left: auto; }
.xg-cloud-teaser { text-align: center; padding: 20px 8px 8px; }
.xg-cloud-teaser-ico { color: #2563eb; opacity: 0.85; }
.xg-cloud-teaser-desc { font-size: 15px; margin: 14px 0 8px; line-height: 1.5; color: var(--text); }
.xg-cloud-teaser-up { font-size: 13px; color: var(--text-dim); line-height: 1.5; }
.xg-cloud-card .xg-cloud-teaser-desc { text-align: left; font-size: 14px; }
.xg-cloud-card .xg-cloud-teaser-up { text-align: left; }

.xg-help-note { display: flex; gap: 10px; align-items: flex-start; border-radius: var(--r-sm); padding: 11px 13px; margin: 0 0 14px; font-size: 13.5px; line-height: 1.6; border: 1px solid var(--border); background: var(--surface-2); }
.xg-help-note .xg-icon { flex: none; margin-top: 2px; }
.xg-help-note.is-tip { border-color: color-mix(in srgb, var(--ok) 40%, var(--border)); }
.xg-help-note.is-tip .xg-icon { color: var(--ok); }
.xg-help-note.is-warn, .xg-help-note.is-danger { border-color: color-mix(in srgb, var(--warn) 45%, var(--border)); }
.xg-help-note.is-warn .xg-icon, .xg-help-note.is-danger .xg-icon { color: var(--warn); }
.xg-help-note.is-info .xg-icon { color: var(--info); }

.xg-help-diagram { margin: 0 0 16px; }
.xg-help-svg { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 14px; color: var(--text); }
.xg-help-diagram figcaption, .xg-help-fig figcaption { font-size: 12.5px; color: var(--text-faint); margin-top: 8px; text-align: center; }
.xg-help-fig { margin: 0 0 16px; }
.xg-help-img { width: 100%; border: 1px solid var(--border); border-radius: var(--r-sm); display: block; }
.xg-help-fig-ph {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
  min-height: 120px; border: 1.5px dashed var(--border-strong); border-radius: var(--r-sm);
  color: var(--text-faint); font-size: 12.5px; background: var(--surface-2);
}
.xg-help-fig-file { font-size: 11px; color: var(--text-dim); background: var(--surface); border: 1px solid var(--border); border-radius: 5px; padding: 1px 7px; }

.xg-help-tablewrap { overflow-x: auto; margin: 0 0 16px; }
.xg-help-table { border-collapse: collapse; width: 100%; font-size: 13px; }
.xg-help-table th, .xg-help-table td { text-align: left; padding: 8px 12px; border-bottom: 1px solid var(--border); vertical-align: top; }
.xg-help-table th { color: var(--text); font-weight: 600; background: var(--surface-2); }
.xg-help-table td { color: var(--text-dim); }
.xg-help-table tr:last-child td { border-bottom: none; }

.xg-help-foot { margin-top: 24px; padding-top: 12px; border-top: 1px solid var(--border); font-size: 12px; color: var(--text-faint); }

@media (max-width: 760px) {
  .xg-help-body { grid-template-columns: 1fr; }
  .xg-help-toc { position: static; flex-direction: row; flex-wrap: wrap; }
  .xg-help-tocitem { border-left: none; }
}

/* ============ Timed manual override (#9) ============ */
.xg-manual-ctl { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.xg-dur-sel {
  font: inherit; font-size: 12px; color: var(--text); background: var(--surface-2);
  border: 1px solid var(--border); border-radius: 7px; padding: 4px 8px; cursor: pointer; outline: none;
}
.xg-dur-custom { width: 64px; font-size: 12px; padding: 4px 8px; }
.xg-ovr-timer {
  display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 600;
  color: var(--accent); background: var(--chip-bg); border-radius: 999px; padding: 3px 6px 3px 8px;
}
.xg-ovr-cancel {
  border: none; background: var(--surface); color: var(--text-dim); font: inherit; font-size: 10.5px;
  font-weight: 600; cursor: pointer; border-radius: 999px; padding: 2px 8px; margin-left: 2px;
}
.xg-ovr-cancel:hover { color: var(--alert); }

/* UAT environment indicator — shown ONLY on the UAT deployment (driven by api/env.php). Amber so it can't
   be confused with the green accent or red alerts. Fixed ribbon = always visible (login + every screen +
   mobile); the chip sits next to the sidebar logo as a second cue. */
.xg-env-ribbon {
  position: fixed; top: 0; left: 50%; transform: translateX(-50%); z-index: 99999; pointer-events: none;
  background: var(--warn); color: #fff; font-weight: 800; font-size: 11px; letter-spacing: 0.18em;
  padding: 3px 16px 4px; border-radius: 0 0 8px 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.25);
}
.xg-env-chip {
  display: inline-flex; align-items: center; margin-left: 8px; padding: 2px 7px; border-radius: 6px;
  background: var(--warn); color: #fff; font-size: 10px; font-weight: 800; letter-spacing: 0.12em;
}

/* Brand wordmark — Lato Bold, base64-embedded so the "xGreen" wordmark renders identically in the
   frontend, /admin AND the offline standalone app (all load this stylesheet) with no webfont request or
   bundling path. Scoped to .xg-logo-word only (sidebar + login); the body UI stays on --font-ui. */
@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("data:font/woff2;base64,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") format("woff2");
}
.xg-logo-word { font-family: "Lato", var(--font-ui); font-weight: 700; letter-spacing: -0.02em; }

/* ---- subscription paywall + trial banner (cloud web only) ---- */
.xg-paywall-wrap { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px; background: var(--bg-app); }
.xg-paywall { max-width: 460px; width: 100%; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 14px; padding: 34px 30px; }
.xg-paywall-title { margin: 6px 0 0; font-size: 1.5rem; font-weight: 700; }
.xg-paywall-lead { margin: 0; font-weight: 600; color: var(--text); }
.xg-paywall-body { margin: 0; color: var(--text-dim); line-height: 1.55; }
.xg-paywall-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-top: 4px; }
.xg-btn-lg { font-size: 1.02rem; padding: 12px 26px; }
.xg-paywall-note { margin: 0; font-size: 0.86rem; color: var(--alert); }
.xg-paywall-free { margin: 6px 0 0; font-size: 0.84rem; color: var(--text-faint); line-height: 1.5; border-top: 1px solid var(--border); padding-top: 14px; }
.xg-paywall-foot { display: flex; gap: 18px; margin-top: 6px; }
.xg-linkbtn { background: none; border: none; color: var(--text-dim); cursor: pointer; font-size: 0.85rem; padding: 2px 4px; }
.xg-linkbtn:hover { color: var(--accent); text-decoration: underline; }
.xg-trial-banner { display: flex; align-items: center; gap: 10px; margin: 0 0 4px; padding: 9px 16px; background: var(--surface-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-right: 3px solid var(--accent); border-radius: 10px; font-size: 0.88rem; color: var(--text); }
.xg-trial-banner .xg-linkbtn { margin-left: auto; color: var(--accent); font-weight: 600; }

/* Boot splash — shown between login and the first status.php reply so the dashboard never flashes before we
   know whether the token is subscribed (→ paywall). */
.xg-boot { position: fixed; inset: 0; display: grid; place-items: center; background: var(--bg); z-index: 50; }
.xg-boot .xg-logomark { animation: xg-boot-pulse 1.3s ease-in-out infinite; }
@keyframes xg-boot-pulse { 0%, 100% { opacity: .45; } 50% { opacity: 1; } }

/* Sidebar subscription row — a compact clickable card (pinned to the foot above the icons) that opens the
   Subscription settings page. */
.xg-sub-card { display: flex; align-items: center; gap: 10px; width: 100%; margin: 0 0 10px; padding: 10px 12px; font: inherit; text-align: left; color: var(--text); background: var(--surface-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-right: 3px solid var(--accent); border-radius: 12px; cursor: pointer; transition: border-color .15s; }
.xg-sub-card:hover { border-color: var(--accent); }
.xg-sub-card.is-active { border-left-color: var(--ok); border-right-color: var(--ok); }
.xg-sub-card.is-none { border-left-color: var(--alert); border-right-color: var(--alert); }
.xg-sub-txt { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; flex: 1; }
.xg-sub-name { font-size: 0.9rem; font-weight: 700; }
.xg-sub-state { font-size: 0.75rem; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xg-sub-chev { color: var(--text-faint); flex: 0 0 auto; }

/* Subscription settings page (reached from the sidebar row). */
.xg-subpage-hero { display: flex; flex-direction: column; gap: 14px; border-left: 3px solid var(--accent); border-right: 3px solid var(--accent); }
.xg-subpage-hero.is-active { border-left-color: var(--ok); border-right-color: var(--ok); }
.xg-subpage-hero.is-none { border-left-color: var(--alert); border-right-color: var(--alert); }
.xg-subpage-status { display: flex; align-items: center; gap: 10px; color: var(--accent); }
.xg-subpage-hero.is-active .xg-subpage-status { color: var(--ok); }
.xg-subpage-hero.is-none .xg-subpage-status { color: var(--alert); }
.xg-subpage-state { font-size: 1.15rem; font-weight: 700; color: var(--text); }
.xg-subpage-lead { margin: 0; color: var(--text-dim); font-size: 0.92rem; line-height: 1.5; }
.xg-subpage-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.xg-subpage-note { margin: 0; font-size: 0.85rem; color: var(--warn); }
.xg-subpage-rows { display: flex; flex-direction: column; }
.xg-subpage-row { display: flex; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--border); font-size: 0.9rem; }
.xg-subpage-row:last-child { border-bottom: none; }
.xg-subpage-row span { color: var(--text-dim); }
.xg-subpage-free { margin: 14px 0 0; font-size: 0.82rem; color: var(--text-faint); line-height: 1.5; }
