/* FeedPlumb Check (/check/) & Stats (/stats/) v2 tokens: three named DARK variants. Generated by v2/_tools/build_v2.py.
   Scope: .fp-monitor (name kept). Variant: data-variant="midnight|dusk|graphite" on the .fp-monitor element; no attribute = Midnight.
   Each variant defines the full set (base + monitor tokens), so the app no longer follows the site light/dim/dark tokens.
   Default Midnight. First-visit mapping from the site theme: dark -> Midnight, dim -> Dusk, light -> Graphite; an explicit
   choice (localStorage "fpc:variant") always wins. See switcher.md. */
.fp-monitor{--mon-font-num:var(--mono);--mon-fs:13px;--mon-fs-sm:12px;--mon-fs-kpi:22px;--mon-row-h:32px;--mon-pad:12px;--mon-gap:12px;--mon-header-h:48px;--mon-rail-w:248px;--mon-r:8px;--mon-r-sm:6px;--mon-pulse-period:3.2s;--card:var(--surface);--pipe-live:var(--fresh);--pipe-stale:var(--stale);--pipe-rev:var(--rev);--pipe-dev:var(--deviate);--pipe-unknown:var(--pipe);--viz-band-edge:var(--deviate);--viz-axis:var(--muted);--spark:var(--ink-2);--focus:0 0 0 3px color-mix(in srgb,var(--brand) 75%,transparent)}
.fp-monitor,.fp-monitor[data-variant=midnight]{--bg:#060a13;--mon-canvas:#060a13;--surface:#0d1424;--surface-hi:#121b2f;--surface-2:#121b2e;--surface-3:#182339;--ink:#e7ecf4;--ink-2:#c3cddc;--muted:#97a5ba;--line:#1c2740;--line-2:#62718f;--brand:#7ea4ff;--brand-soft:#16234a;--on-brand:#060a13;--accent:#5eead4;--accent-2:#5eead4;--mon-chrome:#03060c;--mon-chrome-ink:#e7ecf4;--mon-chrome-muted:#97a5ba;--mon-chrome-line:#18213a;--mon-chrome-focus:#7ea4ff;--mon-area:#5eead4;--mon-sticky:#121b2e;--mon-row-alt:#101828;--mon-row-hover:#16234a;--fresh:#4ade80;--fresh-fg:#86efac;--fresh-bg:#102d2c;--stale:#fbbf24;--stale-fg:#fcd34d;--stale-bg:#2d2720;--rev:#f87171;--rev-fg:#fca5a5;--rev-bg:#311c29;--deviate:#e879f9;--deviate-fg:#f0abfc;--deviate-bg:#2e1c44;--nodata:#97a5ba;--nodata-fg:#b8c3d3;--nodata-bg:#1e2536;--pipe:#62718f;--pipe-pulse:#bbf7d0;--viz-1:#7ea4ff;--viz-2:#3dd1c5;--viz-3:#856fff;--viz-4:#b87915;--viz-5:#fe4487;--viz-6:#169e86;--viz-7:#bc7cc0;--viz-8:#f29052;--viz-ref:#c3cddc;--viz-grid:#18223a;--viz-band:#1f1836;--mon-shadow:0 1px 0 rgba(255,255,255,.04) inset,0 10px 24px -14px rgba(0,0,0,.85);--mon-shadow-lg:0 1px 0 rgba(255,255,255,.05) inset,0 16px 32px -18px rgba(0,0,0,.95);color-scheme:dark}
.fp-monitor[data-variant=dusk]{--bg:#1b2232;--mon-canvas:#1b2232;--surface:#252e42;--surface-hi:#2b354b;--surface-2:#2b354b;--surface-3:#333e56;--ink:#e3e8f0;--ink-2:#c4ccda;--muted:#a9b4c7;--line:#38435d;--line-2:#8a96b2;--brand:#92b1ff;--brand-soft:#33446f;--on-brand:#151b29;--accent:#72e5d3;--accent-2:#72e5d3;--mon-chrome:#131927;--mon-chrome-ink:#e3e8f0;--mon-chrome-muted:#a9b4c7;--mon-chrome-line:#2c3650;--mon-chrome-focus:#92b1ff;--mon-area:#72e5d3;--mon-sticky:#2b354b;--mon-row-alt:#283146;--mon-row-hover:#33446f;--fresh:#6fe39a;--fresh-fg:#a3f3c0;--fresh-bg:#244947;--stale:#fcc95e;--stale-fg:#fdd877;--stale-bg:#4a4238;--rev:#ff9b9b;--rev-fg:#ffc2c2;--rev-bg:#4d3242;--deviate:#f0a6fb;--deviate-fg:#f7cdfd;--deviate-bg:#493365;--nodata:#aab5c8;--nodata-fg:#c6cedb;--nodata-bg:#384155;--pipe:#8a96b2;--pipe-pulse:#c8f7d9;--viz-1:#92b1ff;--viz-2:#5fe3eb;--viz-3:#8989ff;--viz-4:#cfc082;--viz-5:#f37189;--viz-6:#1dac91;--viz-7:#b88dc8;--viz-8:#d59d1a;--viz-ref:#c4ccda;--viz-grid:#333e56;--viz-band:#373053;--mon-shadow:0 1px 0 rgba(255,255,255,.05) inset,0 10px 24px -14px rgba(5,8,16,.7);--mon-shadow-lg:0 1px 0 rgba(255,255,255,.06) inset,0 16px 32px -18px rgba(5,8,16,.8);color-scheme:dark}
.fp-monitor[data-variant=graphite]{--bg:#131210;--mon-canvas:#131210;--surface:#1c1b19;--surface-hi:#22211e;--surface-2:#232220;--surface-3:#2c2a27;--ink:#ece8e1;--ink-2:#d0cac0;--muted:#a9a298;--line:#34312d;--line-2:#7d776f;--brand:#8eaeff;--brand-soft:#262a3a;--on-brand:#131210;--accent:#6ee7d2;--accent-2:#6ee7d2;--mon-chrome:#0c0b0a;--mon-chrome-ink:#ece8e1;--mon-chrome-muted:#a9a298;--mon-chrome-line:#2a2825;--mon-chrome-focus:#8eaeff;--mon-area:#6ee7d2;--mon-sticky:#232220;--mon-row-alt:#201f1c;--mon-row-hover:#2c2f3d;--fresh:#4ade80;--fresh-fg:#86efac;--fresh-bg:#1d3323;--stale:#fbbf24;--stale-fg:#fcd34d;--stale-bg:#3a2d17;--rev:#f87171;--rev-fg:#fca5a5;--rev-bg:#3e2220;--deviate:#e879f9;--deviate-fg:#f0abfc;--deviate-bg:#3a223b;--nodata:#a9a298;--nodata-fg:#c4bdb2;--nodata-bg:#2d2b28;--pipe:#7d776f;--pipe-pulse:#bbf7d0;--viz-1:#8eaeff;--viz-2:#3dd1c5;--viz-3:#8f7bff;--viz-4:#b87915;--viz-5:#fe5a92;--viz-6:#1aa68d;--viz-7:#c48ac8;--viz-8:#f29052;--viz-ref:#d0cac0;--viz-grid:#2a2825;--viz-band:#2d1f2c;--mon-shadow:0 1px 0 rgba(255,255,255,.05) inset,0 10px 24px -14px rgba(0,0,0,.8);--mon-shadow-lg:0 1px 0 rgba(255,255,255,.06) inset,0 16px 32px -18px rgba(0,0,0,.9);color-scheme:dark}
/* page canvas behind the app (overscroll, short pages); only on pages that contain the app shell */
:root:has(.fp-monitor[data-variant=midnight]),:root:has(.fp-monitor:not([data-variant])){background:#060a13;color-scheme:dark}
:root:has(.fp-monitor[data-variant=dusk]){background:#1b2232;color-scheme:dark}
:root:has(.fp-monitor[data-variant=graphite]){background:#131210;color-scheme:dark}
.fp-monitor[data-density=compact]{--mon-row-h:26px;--mon-pad:8px;--mon-gap:8px;--mon-fs:12px}
.fp-monitor[data-density=comfortable]{--mon-row-h:40px;--mon-pad:16px;--mon-gap:16px;--mon-fs:14px}
.fp-monitor .num,.fp-monitor td.num,.fp-monitor .kpi-value{font-family:var(--mon-font-num);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
/* motion: one soft pulse per --mon-pulse-period (3.2 s), opacity/transform/background-position only, never a flash */
@keyframes fp-mon-flow{from{stroke-dashoffset:0}to{stroke-dashoffset:-48}}
@keyframes fp-mon-pulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--fresh) 45%,transparent)}50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--fresh) 0%,transparent)}}
@keyframes fp-mon-sweep{0%{background-position:-30% 0}60%,100%{background-position:130% 0}}
@keyframes fp-mon-shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
.fp-monitor .pipe-live .pulse{animation:fp-mon-flow var(--mon-pulse-period) linear infinite}
.fp-monitor .live-dot{animation:fp-mon-pulse var(--mon-pulse-period) ease-out infinite}
@media (prefers-reduced-motion:reduce){.fp-monitor *,.fp-monitor *::before,.fp-monitor *::after,.fp-monitor::before,.fp-monitor::after{animation:none!important;transition:none!important}}
