/* Geist and Geist Mono, served from the binary (never a CDN: air-gapped Edges and strict CSPs). Variable fonts, weights 400 to
   600, Latin and Latin Extended. Licence: SIL Open Font License 1.1, fonts/LICENSE.txt. URLs are relative to the CSS file, so
   design.Handler() serves them next to pwx.css. */
@font-face { font-family: "Geist"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(/assets/fonts/geist-latin-ext.woff2) format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Geist"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(/assets/fonts/geist-latin.woff2) format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Geist Mono"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(/assets/fonts/geist-mono-latin-ext.woff2) format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Geist Mono"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(/assets/fonts/geist-mono-latin.woff2) format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* BareketAI PWX design tokens. One file for every surface: the cloud portal, the Edge console, the sign-in page, alert e-mails,
   reports and PDF exports, the docs and pwx.bareket.ai. Spec: docs/DESIGN-SYSTEM.md. Contrast is checked by
   internal/design/design_test.go; change a color here and run it.

   Themes: light is the default; dark by `data-theme="dark"` on <html>, or by the OS when no data-theme is set.
   Print is always light. Everything is a CSS variable prefixed --pwx-. */

:root {
  /* Brand (from the pwx.bareket.ai brand page). Emerald is the mark only. Volt is the one accent per screen. */
  --pwx-brand-carbon: #0a0a0a;
  --pwx-brand-graphite: #141414;
  --pwx-brand-ink: #101016;
  --pwx-brand-emerald: #0a8c68;
  --pwx-brand-volt: #9b7fff;
  --pwx-brand-volt-deep: #5b3df5;

  /* Type */
  --pwx-font-sans: "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --pwx-font-mono: "Geist Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;
  --pwx-text-xs: 11px;   --pwx-leading-xs: 16px;   /* telemetry, table meta */
  --pwx-text-sm: 12px;   --pwx-leading-sm: 18px;   /* table cells (compact), chips */
  --pwx-text-md: 13px;   --pwx-leading-md: 20px;   /* default interface text */
  --pwx-text-base: 14px; --pwx-leading-base: 22px; /* reading text, forms */
  --pwx-text-lg: 16px;   --pwx-leading-lg: 24px;   /* card titles, lead */
  --pwx-text-xl: 20px;   --pwx-leading-xl: 28px;   /* page section titles */
  --pwx-text-2xl: 24px;  --pwx-leading-2xl: 32px;  /* page title */
  --pwx-text-3xl: 32px;  --pwx-leading-3xl: 40px;  /* metric numbers */
  --pwx-eyebrow-size: 10.5px;
  --pwx-eyebrow-tracking: 0.14em;
  --pwx-weight-regular: 400;
  --pwx-weight-medium: 500;
  --pwx-weight-strong: 600;  /* headings and labels; above 620 is the wordmark only */

  /* Space (4 px base) */
  --pwx-space-0: 0;
  --pwx-space-1: 2px;
  --pwx-space-2: 4px;
  --pwx-space-3: 8px;
  --pwx-space-4: 12px;
  --pwx-space-5: 16px;
  --pwx-space-6: 20px;
  --pwx-space-7: 24px;
  --pwx-space-8: 32px;
  --pwx-space-9: 40px;
  --pwx-space-10: 48px;
  --pwx-space-11: 64px;

  /* Radius */
  --pwx-radius-xs: 3px;    /* chips, severity */
  --pwx-radius-sm: 6px;    /* buttons, inputs */
  --pwx-radius-md: 10px;   /* cards, panels */
  --pwx-radius-lg: 14px;   /* dialogs */
  --pwx-radius-pill: 999px;

  /* Layout */
  --pwx-header-h: 52px;
  --pwx-content-max: 1440px;
  --pwx-row-h: 40px;           /* table row, comfortable */
  --pwx-row-h-compact: 32px;   /* table row, [data-density="compact"] */
  --pwx-tenant-logo-h: 28px;   /* white-label logo in the header */

  /* Motion */
  --pwx-ease: cubic-bezier(.2, .8, .2, 1);
  --pwx-dur-fast: 120ms;
  --pwx-dur: 200ms;

  /* Layers */
  --pwx-z-header: 20;
  --pwx-z-popover: 40;
  --pwx-z-dialog: 60;
  --pwx-z-toast: 80;

  /* ---- Light theme (default) ---- */
  color-scheme: light;
  --pwx-bg: #f4f4f5;
  --pwx-surface: #ffffff;
  --pwx-surface-raised: #ffffff;
  --pwx-surface-sunken: #f4f4f5;
  --pwx-surface-hover: #f1f0fb;
  --pwx-surface-selected: #ebe7fe;
  --pwx-border: #dedede;
  --pwx-border-strong: #8a8a92;
  --pwx-text: #101016;
  --pwx-text-muted: #55555c;
  --pwx-text-faint: #64646c;
  --pwx-text-inverse: #ffffff;
  --pwx-accent: #5b3df5;
  --pwx-accent-hover: #4a2ee0;
  --pwx-accent-text: #ffffff;
  --pwx-accent-soft: #efebff;
  --pwx-focus: #5b3df5;
  --pwx-link: #4a2ee0;

  /* Severity: text color, soft fill, border. Always shown with its word, never color alone. */
  --pwx-sev-critical: #b80f2a;  --pwx-sev-critical-bg: #fdebee; --pwx-sev-critical-border: #f1aab6;
  --pwx-sev-high: #b0440a;      --pwx-sev-high-bg: #fdf0e6;     --pwx-sev-high-border: #f1c19c;
  --pwx-sev-medium: #865600;    --pwx-sev-medium-bg: #fcf3dc;   --pwx-sev-medium-border: #e8cf8a;
  --pwx-sev-low: #2f5c9c;       --pwx-sev-low-bg: #ebf2fb;      --pwx-sev-low-border: #a9c3e6;
  --pwx-sev-info: #55555c;      --pwx-sev-info-bg: #f1f1f2;     --pwx-sev-info-border: #d0d0d5;

  /* PWX-01 verdicts. CONFIRMED and ISOLATE are the attack color; ISOLATE is the solid one. */
  --pwx-verdict-normal: #0f7a4f;    --pwx-verdict-normal-bg: #e7f5ee;
  --pwx-verdict-suspect: #865600;   --pwx-verdict-suspect-bg: #fcf3dc;
  --pwx-verdict-confirmed: #b80f2a; --pwx-verdict-confirmed-bg: #fdebee;
  --pwx-verdict-isolate: #c8102e;   --pwx-verdict-isolate-text: #ffffff;

  /* Proof status of a capability or a hop: how it was shown, not how bad it is. */
  --pwx-status-real: #0e7a68;
  --pwx-status-bench: #a14f17;
  --pwx-status-fixtures: #2f5c9c;
  --pwx-status-roadmap: #64646c;

  /* How a fact on a path was established */
  --pwx-basis-observed: #0e7a68;
  --pwx-basis-modeled: #2f5c9c;
  --pwx-basis-assumed: #865600;
  --pwx-basis-blocked: #55555c;

  /* White-label: the tenant's color touches the header rule only. */
  --pwx-tenant-accent: var(--pwx-accent);

  /* Elevation: light uses soft shadows; dark uses borders. */
  --pwx-shadow-sm: 0 1px 2px rgba(16, 16, 22, .06);
  --pwx-shadow-md: 0 4px 14px rgba(16, 16, 22, .08);
  --pwx-shadow-lg: 0 14px 36px rgba(16, 16, 22, .14);
}

/* ---- Dark theme ---- */
:root[data-theme="dark"] {
  color-scheme: dark;
  --pwx-bg: #0a0a0a;
  --pwx-surface: #141414;
  --pwx-surface-raised: #1a1a1c;
  --pwx-surface-sunken: #0f0f10;
  --pwx-surface-hover: #1d1b26;
  --pwx-surface-selected: #241f3a;
  --pwx-border: #2c2c2c;
  --pwx-border-strong: #6a6a72;
  --pwx-text: #ececf1;
  --pwx-text-muted: #a8a8b0;
  --pwx-text-faint: #8c8c95;
  --pwx-text-inverse: #0a0a0a;
  --pwx-accent: #9b7fff;
  --pwx-accent-hover: #b09bff;
  --pwx-accent-text: #0a0612;
  --pwx-accent-soft: #221c3d;
  --pwx-focus: #9b7fff;
  --pwx-link: #b09bff;

  --pwx-sev-critical: #ff5c7a;  --pwx-sev-critical-bg: #2a0e14; --pwx-sev-critical-border: #6b1a2a;
  --pwx-sev-high: #ff9a52;      --pwx-sev-high-bg: #2a1708;     --pwx-sev-high-border: #6b3a14;
  --pwx-sev-medium: #f2c14e;    --pwx-sev-medium-bg: #2a2208;   --pwx-sev-medium-border: #6b5414;
  --pwx-sev-low: #7fb3ff;       --pwx-sev-low-bg: #0f1c2e;      --pwx-sev-low-border: #24405e;
  --pwx-sev-info: #a8a8b0;      --pwx-sev-info-bg: #1c1c1f;     --pwx-sev-info-border: #3a3a40;

  --pwx-verdict-normal: #2ee59d;    --pwx-verdict-normal-bg: #0b2419;
  --pwx-verdict-suspect: #f2c14e;   --pwx-verdict-suspect-bg: #2a2208;
  --pwx-verdict-confirmed: #ff5c7a; --pwx-verdict-confirmed-bg: #2a0e14;
  --pwx-verdict-isolate: #c8102e;   --pwx-verdict-isolate-text: #ffffff;

  --pwx-status-real: #3cc2a8;
  --pwx-status-bench: #e08a4c;
  --pwx-status-fixtures: #7fb3ff;
  --pwx-status-roadmap: #8c8c95;

  --pwx-basis-observed: #3cc2a8;
  --pwx-basis-modeled: #7fb3ff;
  --pwx-basis-assumed: #f2c14e;
  --pwx-basis-blocked: #a8a8b0;

  --pwx-shadow-sm: none;
  --pwx-shadow-md: 0 0 0 1px var(--pwx-border);
  --pwx-shadow-lg: 0 16px 40px rgba(0, 0, 0, .55);
}

/* The OS chooses when the page did not. Keep this block identical to [data-theme="dark"] (the test checks it). */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --pwx-bg: #0a0a0a;
    --pwx-surface: #141414;
    --pwx-surface-raised: #1a1a1c;
    --pwx-surface-sunken: #0f0f10;
    --pwx-surface-hover: #1d1b26;
    --pwx-surface-selected: #241f3a;
    --pwx-border: #2c2c2c;
    --pwx-border-strong: #6a6a72;
    --pwx-text: #ececf1;
    --pwx-text-muted: #a8a8b0;
    --pwx-text-faint: #8c8c95;
    --pwx-text-inverse: #0a0a0a;
    --pwx-accent: #9b7fff;
    --pwx-accent-hover: #b09bff;
    --pwx-accent-text: #0a0612;
    --pwx-accent-soft: #221c3d;
    --pwx-focus: #9b7fff;
    --pwx-link: #b09bff;

    --pwx-sev-critical: #ff5c7a;  --pwx-sev-critical-bg: #2a0e14; --pwx-sev-critical-border: #6b1a2a;
    --pwx-sev-high: #ff9a52;      --pwx-sev-high-bg: #2a1708;     --pwx-sev-high-border: #6b3a14;
    --pwx-sev-medium: #f2c14e;    --pwx-sev-medium-bg: #2a2208;   --pwx-sev-medium-border: #6b5414;
    --pwx-sev-low: #7fb3ff;       --pwx-sev-low-bg: #0f1c2e;      --pwx-sev-low-border: #24405e;
    --pwx-sev-info: #a8a8b0;      --pwx-sev-info-bg: #1c1c1f;     --pwx-sev-info-border: #3a3a40;

    --pwx-verdict-normal: #2ee59d;    --pwx-verdict-normal-bg: #0b2419;
    --pwx-verdict-suspect: #f2c14e;   --pwx-verdict-suspect-bg: #2a2208;
    --pwx-verdict-confirmed: #ff5c7a; --pwx-verdict-confirmed-bg: #2a0e14;
    --pwx-verdict-isolate: #c8102e;   --pwx-verdict-isolate-text: #ffffff;

    --pwx-status-real: #3cc2a8;
    --pwx-status-bench: #e08a4c;
    --pwx-status-fixtures: #7fb3ff;
    --pwx-status-roadmap: #8c8c95;

    --pwx-basis-observed: #3cc2a8;
    --pwx-basis-modeled: #7fb3ff;
    --pwx-basis-assumed: #f2c14e;
    --pwx-basis-blocked: #a8a8b0;

    --pwx-shadow-sm: none;
    --pwx-shadow-md: 0 0 0 1px var(--pwx-border);
    --pwx-shadow-lg: 0 16px 40px rgba(0, 0, 0, .55);
  }
}

/* Print and PDF: always light, no shadows, no fills that waste toner; severity keeps its border and word. */
@media print {
  :root, :root[data-theme="dark"] {
    color-scheme: light;
    --pwx-bg: #ffffff; --pwx-surface: #ffffff; --pwx-surface-raised: #ffffff; --pwx-surface-sunken: #ffffff;
    --pwx-border: #c4c4c8; --pwx-border-strong: #8a8a90;
    --pwx-text: #000000; --pwx-text-muted: #333338; --pwx-text-faint: #4a4a50;
    --pwx-accent: #4a2ee0; --pwx-link: #000000;
    --pwx-sev-critical: #9a0c23; --pwx-sev-high: #8f3708; --pwx-sev-medium: #6b4500; --pwx-sev-low: #234a80; --pwx-sev-info: #333338;
    --pwx-sev-critical-bg: #ffffff; --pwx-sev-high-bg: #ffffff; --pwx-sev-medium-bg: #ffffff; --pwx-sev-low-bg: #ffffff; --pwx-sev-info-bg: #ffffff;
    --pwx-shadow-sm: none; --pwx-shadow-md: none; --pwx-shadow-lg: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  :root { --pwx-dur-fast: 0ms; --pwx-dur: 0ms; }
}

/* BareketAI PWX components. Needs tokens.css first. Class prefix pwx-; modifiers --name; parts __name.
   Spec and usage: docs/DESIGN-SYSTEM.md. Every color here is a token; no hex below this line. */

.pwx, .pwx * { box-sizing: border-box; }
.pwx {
  margin: 0; background: var(--pwx-bg); color: var(--pwx-text);
  font: var(--pwx-weight-regular) var(--pwx-text-md)/var(--pwx-leading-md) var(--pwx-font-sans);
  -webkit-font-smoothing: antialiased; font-feature-settings: "tnum" 1;
}
.pwx :focus-visible { outline: 2px solid var(--pwx-focus); outline-offset: 2px; border-radius: var(--pwx-radius-xs); }
/* Links: as weak as possible (:where), so a component that is a link (a button, a card) sets its own color. */
.pwx :where(a) { color: var(--pwx-link); text-decoration: none; }
.pwx :where(a:not(.pwx-btn)):hover { text-decoration: underline; }
.pwx-mono, .pwx code, .pwx time { font-family: var(--pwx-font-mono); font-variant-numeric: tabular-nums; }
.pwx-eyebrow {
  font: var(--pwx-weight-strong) var(--pwx-eyebrow-size)/1.4 var(--pwx-font-mono);
  letter-spacing: var(--pwx-eyebrow-tracking); text-transform: uppercase; color: var(--pwx-text-faint);
}
.pwx-h1 { font-size: var(--pwx-text-2xl); line-height: var(--pwx-leading-2xl); font-weight: var(--pwx-weight-strong); letter-spacing: -0.01em; margin: 0; }
.pwx-h2 { font-size: var(--pwx-text-xl); line-height: var(--pwx-leading-xl); font-weight: var(--pwx-weight-strong); margin: 0; }
.pwx-h3 { font-size: var(--pwx-text-lg); line-height: var(--pwx-leading-lg); font-weight: var(--pwx-weight-strong); margin: 0; }
.pwx-muted { color: var(--pwx-text-muted); }
.pwx-faint { color: var(--pwx-text-faint); }

/* ---- App header, with the white-label tenant slot ---- */
.pwx-header {
  position: sticky; top: 0; z-index: var(--pwx-z-header);
  height: var(--pwx-header-h); display: flex; align-items: center; gap: var(--pwx-space-5);
  padding: 0 var(--pwx-space-6); background: var(--pwx-surface);
  border-bottom: 1px solid var(--pwx-border); box-shadow: inset 0 -2px 0 var(--pwx-tenant-accent);
}
.pwx-header__tenant { display: flex; align-items: center; gap: var(--pwx-space-3); min-width: 0; }
.pwx-header__tenant img { height: var(--pwx-tenant-logo-h); width: auto; max-width: 180px; object-fit: contain; }
.pwx-header__tenant-name { font-weight: var(--pwx-weight-strong); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pwx-header__nav { display: flex; gap: var(--pwx-space-2); flex: 1; min-width: 0; overflow-x: auto; }
.pwx-header__nav a { color: var(--pwx-text-muted); padding: var(--pwx-space-2) var(--pwx-space-4); border-radius: var(--pwx-radius-sm); white-space: nowrap; }
.pwx-header__nav a:hover { color: var(--pwx-text); background: var(--pwx-surface-hover); text-decoration: none; }
.pwx-header__nav a[aria-current="page"] { color: var(--pwx-text); background: var(--pwx-surface-sunken); }
.pwx-header__powered { font: var(--pwx-text-xs)/1 var(--pwx-font-mono); color: var(--pwx-text-faint); white-space: nowrap; }
.pwx-header__powered b { color: var(--pwx-text-muted); font-weight: var(--pwx-weight-strong); }
.pwx-wordmark { font-weight: 700; letter-spacing: -0.02em; white-space: nowrap; }
.pwx-wordmark i { font-style: normal; color: var(--pwx-brand-emerald); }

.pwx-page { max-width: var(--pwx-content-max); margin: 0 auto; padding: var(--pwx-space-7) var(--pwx-space-6) var(--pwx-space-11); }
.pwx-page__head { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--pwx-space-4); margin-bottom: var(--pwx-space-6); }
.pwx-page__head .pwx-h1 { flex: 1 1 auto; }

/* ---- Buttons ---- */
.pwx-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--pwx-space-3);
  min-height: 32px; padding: 0 var(--pwx-space-5); border-radius: var(--pwx-radius-sm);
  font: var(--pwx-weight-strong) var(--pwx-text-md)/1 var(--pwx-font-sans);
  border: 1px solid var(--pwx-border-strong); background: var(--pwx-surface); color: var(--pwx-text);
  cursor: pointer; transition: background var(--pwx-dur-fast) var(--pwx-ease), border-color var(--pwx-dur-fast) var(--pwx-ease);
  text-decoration: none; white-space: nowrap;
}
.pwx-btn:hover { background: var(--pwx-surface-hover); text-decoration: none; }
.pwx-btn--primary { background: var(--pwx-accent); border-color: var(--pwx-accent); color: var(--pwx-accent-text); }
.pwx-btn--primary:hover { background: var(--pwx-accent-hover); border-color: var(--pwx-accent-hover); }
.pwx-btn--ghost { border-color: transparent; background: transparent; color: var(--pwx-text-muted); }
.pwx-btn--ghost:hover { color: var(--pwx-text); }
.pwx-btn--danger { color: var(--pwx-sev-critical); border-color: var(--pwx-sev-critical-border); }
.pwx-btn--danger:hover { background: var(--pwx-sev-critical-bg); }
.pwx-btn--sm { min-height: 26px; padding: 0 var(--pwx-space-4); font-size: var(--pwx-text-sm); }
.pwx-btn:disabled, .pwx-btn[aria-disabled="true"] { opacity: .45; cursor: not-allowed; }

/* ---- Inputs ---- */
.pwx-input, .pwx-select {
  min-height: 32px; padding: 0 var(--pwx-space-4); border-radius: var(--pwx-radius-sm);
  border: 1px solid var(--pwx-border-strong); background: var(--pwx-surface); color: var(--pwx-text);
  font: var(--pwx-text-md)/1 var(--pwx-font-sans);
}
.pwx-input::placeholder { color: var(--pwx-text-faint); }
.pwx-label { display: block; margin-bottom: var(--pwx-space-2); font-weight: var(--pwx-weight-strong); }

/* ---- Card and panel ---- */
.pwx-card { background: var(--pwx-surface); border: 1px solid var(--pwx-border); border-radius: var(--pwx-radius-md); box-shadow: var(--pwx-shadow-sm); }
.pwx-card__head { display: flex; align-items: center; gap: var(--pwx-space-4); padding: var(--pwx-space-4) var(--pwx-space-5); border-bottom: 1px solid var(--pwx-border); }
.pwx-card__head .pwx-h3 { font-size: var(--pwx-text-base); }
.pwx-card__head-meta { margin-left: auto; font: var(--pwx-text-xs)/1 var(--pwx-font-mono); color: var(--pwx-text-faint); }
.pwx-card__body { padding: var(--pwx-space-5); }

/* ---- Metric tile ---- */
.pwx-metric { background: var(--pwx-surface); border: 1px solid var(--pwx-border); border-radius: var(--pwx-radius-md); padding: var(--pwx-space-4) var(--pwx-space-5); }
.pwx-metric__value { font: var(--pwx-weight-medium) var(--pwx-text-3xl)/var(--pwx-leading-3xl) var(--pwx-font-mono); letter-spacing: -0.02em; }
.pwx-metric__value sup { font-size: var(--pwx-text-sm); color: var(--pwx-text-muted); margin-left: 2px; }
.pwx-metric__label { color: var(--pwx-text-muted); }
.pwx-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: var(--pwx-space-4); }

/* ---- Table ---- */
.pwx-table-wrap { overflow-x: auto; border: 1px solid var(--pwx-border); border-radius: var(--pwx-radius-md); background: var(--pwx-surface); }
.pwx-table { width: 100%; border-collapse: collapse; font-size: var(--pwx-text-md); }
.pwx-table th {
  position: sticky; top: 0; z-index: 1; height: 34px; padding: 0 var(--pwx-space-4); text-align: left;
  background: var(--pwx-surface-sunken); border-bottom: 1px solid var(--pwx-border);
  font: var(--pwx-weight-strong) var(--pwx-eyebrow-size)/1 var(--pwx-font-mono); letter-spacing: var(--pwx-eyebrow-tracking);
  text-transform: uppercase; color: var(--pwx-text-faint); white-space: nowrap;
}
.pwx-table td { height: var(--pwx-row-h); padding: var(--pwx-space-3) var(--pwx-space-4); border-bottom: 1px solid var(--pwx-border); vertical-align: middle; }
.pwx-table tr:last-child td { border-bottom: 0; }
.pwx-table tbody tr:hover td { background: var(--pwx-surface-hover); }
.pwx-table tr[aria-selected="true"] td { background: var(--pwx-surface-selected); }
.pwx-table td.pwx-num, .pwx-table th.pwx-num { text-align: right; font-family: var(--pwx-font-mono); font-variant-numeric: tabular-nums; }
.pwx-table td.pwx-id { font-family: var(--pwx-font-mono); font-size: var(--pwx-text-sm); white-space: nowrap; }
[data-density="compact"] .pwx-table td { height: var(--pwx-row-h-compact); padding-top: var(--pwx-space-2); padding-bottom: var(--pwx-space-2); font-size: var(--pwx-text-sm); }

/* ---- Chip ---- */
.pwx-chip {
  display: inline-flex; align-items: center; gap: var(--pwx-space-2); height: 22px; padding: 0 var(--pwx-space-3);
  border: 1px solid var(--pwx-border); border-radius: var(--pwx-radius-pill); background: var(--pwx-surface);
  font: var(--pwx-text-sm)/1 var(--pwx-font-sans); color: var(--pwx-text-muted); white-space: nowrap;
}
.pwx-chip b { color: var(--pwx-text); font-weight: var(--pwx-weight-strong); }
button.pwx-chip { cursor: pointer; }
.pwx-chip[aria-pressed="true"] { border-color: var(--pwx-accent); color: var(--pwx-text); background: var(--pwx-accent-soft); }

/* ---- Severity badge: color + shape + word. Critical is a filled square, high a filled triangle, medium a half circle,
   low an open circle, info a dash, so the badge reads in grayscale and for color-blind readers. ---- */
.pwx-sev {
  display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 var(--pwx-space-3);
  border: 1px solid; border-radius: var(--pwx-radius-xs);
  font: var(--pwx-weight-strong) var(--pwx-text-xs)/1 var(--pwx-font-mono); letter-spacing: .06em; text-transform: uppercase; white-space: nowrap;
}
.pwx-sev::before { content: ""; width: 8px; height: 8px; flex: none; background: currentColor; }
.pwx-sev--critical { color: var(--pwx-sev-critical); background: var(--pwx-sev-critical-bg); border-color: var(--pwx-sev-critical-border); }
.pwx-sev--high { color: var(--pwx-sev-high); background: var(--pwx-sev-high-bg); border-color: var(--pwx-sev-high-border); }
.pwx-sev--high::before { clip-path: polygon(50% 0, 100% 100%, 0 100%); }
.pwx-sev--medium { color: var(--pwx-sev-medium); background: var(--pwx-sev-medium-bg); border-color: var(--pwx-sev-medium-border); }
.pwx-sev--medium::before { border-radius: 50%; background: linear-gradient(90deg, currentColor 50%, transparent 50%); box-shadow: inset 0 0 0 1.5px currentColor; }
.pwx-sev--low { color: var(--pwx-sev-low); background: var(--pwx-sev-low-bg); border-color: var(--pwx-sev-low-border); }
.pwx-sev--low::before { border-radius: 50%; background: transparent; box-shadow: inset 0 0 0 1.5px currentColor; }
.pwx-sev--info { color: var(--pwx-sev-info); background: var(--pwx-sev-info-bg); border-color: var(--pwx-sev-info-border); }
.pwx-sev--info::before { height: 2px; }
.pwx-sev__score { font-weight: var(--pwx-weight-regular); opacity: .85; }

/* ---- PWX-01 verdict ---- */
.pwx-verdict {
  display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 var(--pwx-space-3); border-radius: var(--pwx-radius-xs);
  font: var(--pwx-weight-strong) var(--pwx-text-xs)/1 var(--pwx-font-mono); letter-spacing: .06em; text-transform: uppercase;
}
.pwx-verdict::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.pwx-verdict--normal { color: var(--pwx-verdict-normal); background: var(--pwx-verdict-normal-bg); }
.pwx-verdict--suspect { color: var(--pwx-verdict-suspect); background: var(--pwx-verdict-suspect-bg); }
.pwx-verdict--confirmed { color: var(--pwx-verdict-confirmed); background: var(--pwx-verdict-confirmed-bg); }
.pwx-verdict--isolate { color: var(--pwx-verdict-isolate-text); background: var(--pwx-verdict-isolate); }
.pwx-verdict--live::before { animation: pwx-pulse 1.6s var(--pwx-ease) infinite; }
@keyframes pwx-pulse { 50% { opacity: .35; } }
@media (prefers-reduced-motion: reduce) { .pwx-verdict--live::before { animation: none; } }

/* ---- Proof status: filled dot = real, half = bench, ring = fixtures, dashed ring = roadmap ---- */
.pwx-status { display: inline-flex; align-items: center; gap: 6px; font: var(--pwx-weight-strong) var(--pwx-text-xs)/1 var(--pwx-font-mono); letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; }
.pwx-status::before { content: ""; width: 9px; height: 9px; border-radius: 50%; box-sizing: border-box; flex: none; }
.pwx-status--real { color: var(--pwx-status-real); }
.pwx-status--real::before { background: currentColor; }
.pwx-status--bench { color: var(--pwx-status-bench); }
.pwx-status--bench::before { border: 2px solid currentColor; background: linear-gradient(90deg, currentColor 50%, transparent 50%); }
.pwx-status--fixtures { color: var(--pwx-status-fixtures); }
.pwx-status--fixtures::before { border: 2px solid currentColor; }
.pwx-status--roadmap { color: var(--pwx-status-roadmap); }
.pwx-status--roadmap::before { border: 2px dashed currentColor; }

/* ---- Basis tag: how one fact was established ---- */
.pwx-basis { display: inline-flex; align-items: center; height: 18px; padding: 0 6px; border-radius: var(--pwx-radius-xs); border: 1px solid currentColor; font: var(--pwx-weight-strong) 10px/1 var(--pwx-font-mono); letter-spacing: .08em; text-transform: uppercase; }
.pwx-basis--observed { color: var(--pwx-basis-observed); }
.pwx-basis--modeled { color: var(--pwx-basis-modeled); border-style: dashed; }
.pwx-basis--assumed { color: var(--pwx-basis-assumed); border-style: dotted; }
.pwx-basis--blocked { color: var(--pwx-basis-blocked); }

/* ---- Evidence card: what was found, on what basis, from where, when, how sure ---- */
.pwx-evidence { background: var(--pwx-surface); border: 1px solid var(--pwx-border); border-left: 3px solid var(--pwx-border-strong); border-radius: var(--pwx-radius-md); padding: var(--pwx-space-4) var(--pwx-space-5); }
.pwx-evidence--critical { border-left-color: var(--pwx-sev-critical); }
.pwx-evidence--high { border-left-color: var(--pwx-sev-high); }
.pwx-evidence--medium { border-left-color: var(--pwx-sev-medium); }
.pwx-evidence--low { border-left-color: var(--pwx-sev-low); }
.pwx-evidence__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pwx-space-3); margin-bottom: var(--pwx-space-3); }
.pwx-evidence__title { font-weight: var(--pwx-weight-strong); font-size: var(--pwx-text-base); }
.pwx-evidence__id { margin-left: auto; font: var(--pwx-text-xs)/1 var(--pwx-font-mono); color: var(--pwx-text-faint); }
.pwx-evidence__facts { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--pwx-space-2) var(--pwx-space-5); margin: 0; }
.pwx-evidence__facts dt { font: var(--pwx-weight-strong) var(--pwx-eyebrow-size)/var(--pwx-leading-md) var(--pwx-font-mono); letter-spacing: var(--pwx-eyebrow-tracking); text-transform: uppercase; color: var(--pwx-text-faint); }
.pwx-evidence__facts dd { margin: 0; overflow-wrap: anywhere; }
.pwx-evidence__source { font-family: var(--pwx-font-mono); font-size: var(--pwx-text-sm); }
.pwx-evidence__fix { margin-top: var(--pwx-space-4); padding-top: var(--pwx-space-3); border-top: 1px solid var(--pwx-border); }
.pwx-evidence__fix b { color: var(--pwx-verdict-normal); }

/* ---- Path chain: tenant -> network -> BMC -> host -> GPU -> power. Each hop shows how it is known. ---- */
.pwx-chain { display: flex; align-items: stretch; gap: 0; overflow-x: auto; padding-bottom: var(--pwx-space-1); }
.pwx-hop {
  position: relative; flex: 1 1 0; min-width: 140px; padding: var(--pwx-space-4); margin-right: 22px;
  background: var(--pwx-surface); border: 1px solid var(--pwx-border); border-radius: var(--pwx-radius-md);
}
.pwx-hop:last-child { margin-right: 0; }
.pwx-hop:not(:last-child)::after {
  content: ""; position: absolute; top: 50%; right: -18px; width: 14px; height: 2px; background: var(--pwx-border-strong);
}
.pwx-hop:not(:last-child)::before {
  content: ""; position: absolute; top: calc(50% - 4px); right: -20px; border: 5px solid transparent; border-left-color: var(--pwx-border-strong); border-right: 0;
}
.pwx-hop__layer { font: var(--pwx-weight-strong) var(--pwx-eyebrow-size)/1.4 var(--pwx-font-mono); letter-spacing: var(--pwx-eyebrow-tracking); text-transform: uppercase; color: var(--pwx-text-faint); }
.pwx-hop__name { margin: var(--pwx-space-1) 0 var(--pwx-space-3); font-family: var(--pwx-font-mono); font-size: var(--pwx-text-sm); font-weight: var(--pwx-weight-strong); overflow-wrap: anywhere; }
.pwx-hop__why { font-size: var(--pwx-text-sm); line-height: var(--pwx-leading-sm); color: var(--pwx-text-muted); }
.pwx-hop--observed { border-color: var(--pwx-basis-observed); }
.pwx-hop--modeled { border-style: dashed; border-color: var(--pwx-basis-modeled); }
.pwx-hop--assumed { border-style: dotted; border-color: var(--pwx-basis-assumed); }
.pwx-hop--blocked { background: var(--pwx-surface-sunken); border-color: var(--pwx-basis-blocked); }
.pwx-hop--blocked .pwx-hop__name { text-decoration: line-through; text-decoration-thickness: 1.5px; }
.pwx-hop--live { box-shadow: 0 0 0 2px var(--pwx-verdict-confirmed); }
@media (max-width: 760px) {
  .pwx-chain { flex-direction: column; }
  .pwx-hop { margin: 0 0 22px 0; }
  .pwx-hop:not(:last-child)::after { top: auto; bottom: -18px; right: auto; left: 24px; width: 2px; height: 14px; }
  .pwx-hop:not(:last-child)::before { top: auto; bottom: -20px; right: auto; left: 20px; border: 5px solid transparent; border-top-color: var(--pwx-border-strong); border-bottom: 0; }
}

/* ---- Banner ---- */
.pwx-banner { display: flex; gap: var(--pwx-space-4); align-items: flex-start; padding: var(--pwx-space-4) var(--pwx-space-5); border-radius: var(--pwx-radius-md); border: 1px solid var(--pwx-sev-info-border); background: var(--pwx-sev-info-bg); }
.pwx-banner--warn { border-color: var(--pwx-sev-medium-border); background: var(--pwx-sev-medium-bg); }
.pwx-banner--critical { border-color: var(--pwx-sev-critical-border); background: var(--pwx-sev-critical-bg); }
.pwx-banner__title { font-weight: var(--pwx-weight-strong); }

/* ---- Empty state: an empty list says what was checked, not "all clear" ---- */
.pwx-empty { padding: var(--pwx-space-9) var(--pwx-space-6); text-align: center; color: var(--pwx-text-muted); }
.pwx-empty__title { color: var(--pwx-text); font-size: var(--pwx-text-lg); font-weight: var(--pwx-weight-strong); margin-bottom: var(--pwx-space-3); }
.pwx-empty__checked { display: inline-block; text-align: left; margin: var(--pwx-space-4) 0; padding: 0; list-style: none; }
.pwx-empty__checked li { padding-left: 18px; position: relative; margin-bottom: var(--pwx-space-2); }
.pwx-empty__checked li::before { content: ""; position: absolute; left: 0; top: 7px; width: 8px; height: 8px; border-radius: 50%; border: 2px solid var(--pwx-text-faint); }
.pwx-empty__checked li.pwx-empty__done::before { background: var(--pwx-status-real); border-color: var(--pwx-status-real); }

/* ---- Small helpers ---- */
.pwx-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pwx-space-3); }
.pwx-stack { display: grid; gap: var(--pwx-space-5); }
.pwx-time { font-family: var(--pwx-font-mono); font-size: var(--pwx-text-sm); color: var(--pwx-text-muted); white-space: nowrap; }
.pwx-kbd { font: var(--pwx-text-xs)/1 var(--pwx-font-mono); padding: 2px 5px; border: 1px solid var(--pwx-border-strong); border-bottom-width: 2px; border-radius: var(--pwx-radius-xs); }

@media print {
  .pwx-header { position: static; box-shadow: none; }
  .pwx-btn, .pwx-header__nav { display: none; }
  .pwx-card, .pwx-evidence, .pwx-hop, .pwx-table-wrap { break-inside: avoid; }
  .pwx-table tbody tr:hover td { background: none; }
}
