/* ==========================================================
 * Captura Admin UI
 * Built on the Captura Style Guide tokens.
 *   Signature gradient: #00C6FF -> #0057FF -> #7B2FFF
 *   Dark surfaces:      #08111F (Abyss) / #0D1829 (Deep Navy)
 *   Light surfaces:     #F0F5FF (Ice) / #FFFFFF
 *   Semantics:          #1D9E75 (Verified) / #E24B4A (Alert) / #EF9F27 (Warning)
 *
 * Themes are switched by setting [data-theme="..."] on <html>.
 *   abyss  - default dark (matches style guide hero / dark surfaces)
 *   cobalt - deep cobalt-blue dark variant
 *   violet - violet-tinted dark variant
 *   ice    - light style guide palette (#F0F5FF base)
 *   paper  - pure white, print/share friendly
 * ========================================================== */

:root {
  /* Brand (constant across themes) */
  --electric-blue: #00C6FF;
  --cobalt: #0057FF;
  --violet: #7B2FFF;
  --gradient-primary: linear-gradient(135deg, #00C6FF 0%, #0057FF 55%, #7B2FFF 100%);
  --gradient-soft: linear-gradient(135deg, rgba(0,198,255,0.18), rgba(123,47,255,0.18));

  /* Semantic (constant) */
  --verified: #1D9E75;
  --alert: #E24B4A;
  --warning: #EF9F27;

  /* Type */
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, sans-serif;
  --font-mono: "JetBrains Mono", "SF Mono", Consolas, Monaco, monospace;

  /* Spacing scale (4/8/12/16/24/32/48/64/96) */
  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px;
  --sp-5: 24px; --sp-6: 32px; --sp-7: 48px; --sp-8: 64px; --sp-9: 96px;

  /* Radii */
  --r-sm: 6px; --r-md: 8px; --r-lg: 12px; --r-xl: 16px;
}

/* ============ ABYSS (default dark) ============ */
[data-theme="abyss"],
:root:not([data-theme]) {
  color-scheme: dark;
  --bg-page: #08111F;
  --bg-surface: #0D1829;
  --bg-surface-2: #142336;
  --bg-surface-hover: #18304b;
  --border-1: rgba(0,198,255,0.18);
  --border-2: rgba(0,198,255,0.10);
  --border-3: rgba(255,255,255,0.05);
  --text-primary: #E8F4FF;
  --text-secondary: rgba(180,210,255,0.65);
  --text-tertiary: rgba(180,210,255,0.40);
  --row-selected-bg: linear-gradient(135deg, rgba(0,198,255,0.08), rgba(123,47,255,0.06));
  --section-banner-bg: linear-gradient(135deg, rgba(0,198,255,0.10), rgba(123,47,255,0.08));
  --section-banner-text: var(--text-primary);
  --link: var(--electric-blue);
  --chip-soft-bg: rgba(255,255,255,0.06);
  --backdrop-overlay: rgba(8,17,31,0.85);
}

/* ============ COBALT (deeper blue dark) ============ */
[data-theme="cobalt"] {
  color-scheme: dark;
  --bg-page: #06122C;
  --bg-surface: #0B1B3D;
  --bg-surface-2: #112650;
  --bg-surface-hover: #173061;
  --border-1: rgba(0,87,255,0.30);
  --border-2: rgba(0,87,255,0.16);
  --border-3: rgba(255,255,255,0.05);
  --text-primary: #E6EFFF;
  --text-secondary: rgba(190,210,255,0.72);
  --text-tertiary: rgba(190,210,255,0.45);
  --row-selected-bg: linear-gradient(135deg, rgba(0,87,255,0.18), rgba(0,198,255,0.10));
  --section-banner-bg: linear-gradient(135deg, rgba(0,87,255,0.18), rgba(0,198,255,0.10));
  --section-banner-text: var(--text-primary);
  --link: #6699FF;
  --chip-soft-bg: rgba(255,255,255,0.06);
  --backdrop-overlay: rgba(6,18,44,0.88);
}

/* ============ VIOLET (warmer dark) ============ */
[data-theme="violet"] {
  color-scheme: dark;
  --bg-page: #0F0B1E;
  --bg-surface: #1A1432;
  --bg-surface-2: #251C44;
  --bg-surface-hover: #322458;
  --border-1: rgba(123,47,255,0.30);
  --border-2: rgba(123,47,255,0.16);
  --border-3: rgba(255,255,255,0.05);
  --text-primary: #F0E8FF;
  --text-secondary: rgba(210,190,255,0.70);
  --text-tertiary: rgba(210,190,255,0.42);
  --row-selected-bg: linear-gradient(135deg, rgba(123,47,255,0.20), rgba(0,198,255,0.08));
  --section-banner-bg: linear-gradient(135deg, rgba(123,47,255,0.20), rgba(0,198,255,0.08));
  --section-banner-text: var(--text-primary);
  --link: #B18BFF;
  --chip-soft-bg: rgba(255,255,255,0.06);
  --backdrop-overlay: rgba(15,11,30,0.88);
}

/* ============ ICE (light from style guide) ============ */
[data-theme="ice"] {
  color-scheme: light;
  --bg-page: #F0F5FF;
  --bg-surface: #FFFFFF;
  --bg-surface-2: #F7FAFF;
  --bg-surface-hover: #E8F0FF;
  --border-1: rgba(0,87,255,0.20);
  --border-2: rgba(0,87,255,0.10);
  --border-3: rgba(8,17,31,0.06);
  --text-primary: #08111F;
  --text-secondary: rgba(8,17,31,0.65);
  --text-tertiary: rgba(8,17,31,0.40);
  --row-selected-bg: linear-gradient(135deg, rgba(0,87,255,0.07), rgba(0,198,255,0.06));
  --section-banner-bg: linear-gradient(135deg, rgba(0,87,255,0.10), rgba(0,198,255,0.08));
  --section-banner-text: #08111F;
  --link: #0057FF;
  --chip-soft-bg: rgba(8,17,31,0.05);
  --backdrop-overlay: rgba(8,17,31,0.55);
}

/* ============ PAPER (pure white, print-friendly) ============ */
[data-theme="paper"] {
  color-scheme: light;
  --bg-page: #FFFFFF;
  --bg-surface: #FFFFFF;
  --bg-surface-2: #F7F8FA;
  --bg-surface-hover: #EDEFF4;
  --border-1: rgba(8,17,31,0.18);
  --border-2: rgba(8,17,31,0.10);
  --border-3: rgba(8,17,31,0.06);
  --text-primary: #08111F;
  --text-secondary: rgba(8,17,31,0.62);
  --text-tertiary: rgba(8,17,31,0.38);
  --row-selected-bg: rgba(0,87,255,0.06);
  --section-banner-bg: #F0F5FF;
  --section-banner-text: #0057FF;
  --link: #0057FF;
  --chip-soft-bg: rgba(8,17,31,0.05);
  --backdrop-overlay: rgba(8,17,31,0.55);
}

* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; padding: 0; }
body {
  font-family: var(--font-sans);
  background: var(--bg-page);
  color: var(--text-primary);
  font-size: 14px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  display: flex; flex-direction: column;
}

a { color: var(--electric-blue); text-decoration: none; }
a:hover { color: var(--text-primary); }
button { font-family: inherit; cursor: pointer; }
code, pre, .mono { font-family: var(--font-mono); font-size: 12px; }

/* ----- Top bar ----- */
.topbar {
  display: flex; align-items: center; gap: var(--sp-4);
  padding: var(--sp-3) var(--sp-5);
  background: var(--bg-surface);
  border-bottom: 0.5px solid var(--border-2);
  position: sticky; top: 0; z-index: 50;
}
.brand {
  display: flex; align-items: center; gap: var(--sp-2);
  color: var(--text-primary);
  font-weight: 500;
}
.brand-mark { width: 28px; height: 28px; }
.brand-wordmark { font-size: 18px; letter-spacing: -0.4px; }
/* VeraCalm logo lockup in the topbar. Show the variant that suits the theme
   background: dark logo (white "Calm") on dark themes, light logo on light. */
.brand-logo { height: 30px; width: auto; display: block; }
.brand-logo-light { display: none; }
.brand-logo-dark { display: block; }
[data-theme="ice"] .brand-logo-dark,
[data-theme="paper"] .brand-logo-dark { display: none; }
[data-theme="ice"] .brand-logo-light,
[data-theme="paper"] .brand-logo-light { display: block; }
.brand-sub {
  font-size: 9.5px; letter-spacing: 0.18em; color: var(--electric-blue);
  text-transform: uppercase; font-weight: 600;
  padding: 2px 6px; border-radius: 4px;
  background: rgba(0,198,255,0.10);
}
.breadcrumb {
  flex: 1; display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
  font-size: 13px; color: var(--text-secondary);
  margin-left: var(--sp-3);
}
.breadcrumb .crumb {
  padding: 4px 10px;
  border-radius: var(--r-sm);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  color: var(--text-primary);
  font-weight: 500;
  cursor: pointer;
}
.breadcrumb .crumb:hover { background: var(--bg-surface-hover); }
.breadcrumb .sep { color: var(--text-tertiary); margin: 0 2px; }
.breadcrumb .crumb-label {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-tertiary); margin-right: 4px; font-weight: 500;
}
.topbar-actions { margin-left: auto; }

/* ----- Layout ----- */
#layout {
  flex: 1; display: grid; grid-template-columns: 320px 1fr;
  min-height: 0;
}
#sidebar {
  background: var(--bg-surface);
  border-right: 0.5px solid var(--border-2);
  display: flex; flex-direction: column;
  overflow: hidden;
  padding: var(--sp-4);
  gap: var(--sp-4);
}
.side-section { display: flex; flex-direction: column; gap: var(--sp-2); min-height: 0; }
.side-section.side-scroll { flex: 1; overflow: hidden; }
.side-label {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
}
#sideList {
  overflow-y: auto;
  flex: 1;
  display: flex; flex-direction: column; gap: 4px;
  padding-right: 4px;
}

#mainView {
  overflow-y: auto;
  padding: var(--sp-5) var(--sp-6);
}

/* ----- Inputs / buttons / badges (from style guide) ----- */
.input {
  width: 100%; padding: 8px 12px;
  border-radius: var(--r-md);
  font-size: 13px;
  border: 1px solid rgba(0,87,255,0.30);
  background: rgba(0,87,255,0.05);
  color: var(--text-primary);
  outline: none;
  font-family: var(--font-sans);
}
.input::placeholder { color: var(--text-tertiary); }
.input:focus {
  border-color: var(--electric-blue);
  box-shadow: 0 0 0 3px rgba(0,198,255,0.12);
}
select.input { padding-right: 32px; appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--electric-blue) 50%),
                    linear-gradient(135deg, var(--electric-blue) 50%, transparent 50%);
  background-position: calc(100% - 14px) 50%, calc(100% - 9px) 50%;
  background-size: 5px 5px;
  background-repeat: no-repeat;
}

.btn-primary {
  display: inline-block; padding: 9px 18px; border-radius: var(--r-md);
  border: none; background: var(--gradient-primary);
  color: white; font-size: 13px; font-weight: 500;
}
.btn-secondary {
  display: inline-block; padding: 8px 18px; border-radius: var(--r-md);
  border: 1px solid var(--cobalt); background: transparent;
  color: var(--electric-blue); font-size: 13px; font-weight: 500;
}
.btn-ghost {
  display: inline-block; padding: 8px 14px; border-radius: var(--r-md);
  border: 0.5px solid var(--border-1); background: transparent;
  color: var(--text-secondary); font-size: 12px;
}
.btn-ghost:hover { color: var(--text-primary); border-color: var(--electric-blue); }
.btn-ghost[disabled],
.btn-ghost:disabled {
  opacity: 0.35; cursor: not-allowed;
  pointer-events: none;
}

/* Asset detail Prev/Next walker */
.asset-nav-counter {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-tertiary);
  letter-spacing: 0.04em;
  padding: 0 var(--sp-1);
  align-self: center;
  /* Static width so e.g. "1 / 9" doesn't shift the buttons when
   * walking into "10 / 99" etc. Right-aligned to keep the gap to
   * the Prev button consistent. */
  min-width: 58px;
  text-align: right;
}
.asset-nav-btn {
  font-family: var(--font-mono);
  font-size: 11.5px;
  letter-spacing: 0.02em;
  padding: 7px 12px;
  /* Static widths so labels (← Prev, Next →, 👁 Show/Hide source,
   * ← Back) don't bounce the toolbar around while Tim walks the
   * asset list. Each variant gets its own width below. */
  min-width: 90px;
  text-align: center;
  box-sizing: border-box;
  white-space: nowrap;
}
.asset-nav-next {
  /* Subtle highlight so the primary review action is easy to spot. */
  border-color: rgba(0,198,255,0.45);
  color: var(--electric-blue);
}
.asset-nav-next:hover {
  border-color: var(--electric-blue);
  background: rgba(0,198,255,0.08);
}
/* The source-record toggle swaps between "👁 Show source" and
 * "👁 Hide source" - same character count but the eye glyph + emoji
 * shaping nudge it a couple of px. Give it a wider fixed cell. */
.asset-nav-btn.is-on, .asset-nav-btn[onclick*="toggleAssetSourceView"] {
  min-width: 140px;
}
/* Back button. Sits on its own at the right of the toolbar; lock
 * its width too so the Show/Hide source flip doesn't shove it. */
.view-header .actions > .btn-ghost:not(.asset-nav-btn) {
  min-width: 84px;
  text-align: center;
}

.badge {
  display: inline-flex; align-items: center;
  padding: 3px 10px; border-radius: 100px;
  font-size: 11px; font-weight: 500; line-height: 1.4;
  white-space: nowrap;
}
.badge-blue { background: rgba(0,87,255,0.18); color: #6699FF; }
.badge-cyan { background: rgba(0,198,255,0.15); color: #38CFFF; }
.badge-violet { background: rgba(123,47,255,0.15); color: #B18BFF; }
.badge-success { background: rgba(29,158,117,0.18); color: #4DD9A7; }
.badge-warn { background: rgba(239,159,39,0.18); color: #F6BE6A; }
.badge-alert { background: rgba(226,75,74,0.18); color: #F38C8B; }
.badge-mute { background: var(--chip-soft-bg); color: var(--text-secondary); }

/* Source-kind badges on the asset detail provenance row.
   `register` = enriched-from-customer-register row (no photo).
   `photo`    = the original vision-based extraction. */
.badge-source-register {
  background: rgba(177,139,255,0.18);
  color: #C8B0FF;
  border: 0.5px solid rgba(177,139,255,0.35);
}
.badge-source-photo {
  background: rgba(56,207,255,0.15);
  color: #7DD9FF;
  border: 0.5px solid rgba(56,207,255,0.30);
}

/* Source-kind chip in the asset list, prefixed before the type chip.
   Tiny, just enough to scan the column at a glance. */
.src-chip {
  display: inline-block;
  font-size: 11px;
  margin-right: 4px;
  vertical-align: middle;
  opacity: 0.85;
}
.src-chip-register { color: #C8B0FF; }
.src-chip-photo    { color: #7DD9FF; }

/* ----- Cascading filter chips in sidebar ----- */
.cascade-row {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-md);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  margin-bottom: 4px;
}
.cascade-row .lvl {
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-tertiary); min-width: 64px;
}
.cascade-row .val {
  flex: 1; color: var(--text-primary); font-size: 13px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cascade-row .clear {
  font-size: 14px; color: var(--text-tertiary); padding: 0 4px;
  background: transparent; border: 0;
}
.cascade-row .clear:hover { color: var(--alert); }

/* ----- Generic side list rows ----- */
.row-card {
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3); border-radius: var(--r-md);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  cursor: pointer;
  transition: border-color 120ms ease, background 120ms ease;
}
.row-card:hover { background: var(--bg-surface-hover); border-color: var(--electric-blue); }
.row-card.selected {
  border-color: var(--electric-blue);
  background: var(--row-selected-bg);
}
.row-card.row-card-pivot {
  border-style: dashed;
  border-color: var(--border-1);
  background: transparent;
}
.row-card.row-card-pivot:hover {
  border-color: var(--electric-blue);
  background: var(--row-selected-bg);
}
.row-card.row-card-pivot .row-title { color: var(--link); font-weight: 500; }
.row-card.row-card-pivot .row-sub { color: var(--text-tertiary); }
.row-card .row-main {
  flex: 1; min-width: 0;
  display: flex; flex-direction: column; gap: 2px;
}
.row-card .row-title {
  font-size: 13px; font-weight: 500; color: var(--text-primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.row-card .row-sub {
  font-size: 11px; color: var(--text-secondary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.row-card .row-counts {
  display: flex; gap: 4px; flex-wrap: nowrap; flex-shrink: 0;
}

/* ----- Empty state ----- */
.empty-state {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center;
  height: 70vh;
  color: var(--text-secondary);
}
.empty-icon {
  font-size: 56px; margin-bottom: var(--sp-4); opacity: 0.6;
}
.empty-state h2 {
  font-size: 22px; font-weight: 500; color: var(--text-primary);
  margin: 0 0 var(--sp-2); letter-spacing: -0.3px;
}
/* VeraCalm branded landing lockup (theme-aware, matches the topbar logic). */
.empty-logo { width: 340px; max-width: 70vw; height: auto; margin-bottom: var(--sp-3); }
.empty-logo-light { display: none; }
.empty-logo-dark { display: block; }
[data-theme="ice"] .empty-logo-dark,
[data-theme="paper"] .empty-logo-dark { display: none; }
[data-theme="ice"] .empty-logo-light,
[data-theme="paper"] .empty-logo-light { display: block; }
.empty-tagline {
  font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase;
  font-weight: 600; color: var(--electric-blue);
  margin: 0 0 var(--sp-4);
}

/* ----- View headers ----- */
.view-header {
  display: flex; align-items: baseline; gap: var(--sp-4);
  margin-bottom: var(--sp-5);
  padding-bottom: var(--sp-4);
  border-bottom: 0.5px solid var(--border-2);
}
.view-header h1 {
  font-size: 26px; font-weight: 500;
  letter-spacing: -0.5px;
  margin: 0;
  color: var(--text-primary);
}
.view-header .meta {
  color: var(--text-secondary); font-size: 13px;
}
.view-header .actions { margin-left: auto; display: flex; gap: var(--sp-2); }

/* ----- Asset list (table-ish) ----- */
.asset-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-lg);
  overflow: hidden;
}
.asset-table th {
  text-align: left;
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600;
  color: var(--text-tertiary);
  padding: 10px 14px;
  background: var(--bg-surface-2);
  border-bottom: 0.5px solid var(--border-2);
  white-space: nowrap;
}
.asset-table td {
  padding: 10px 14px;
  border-bottom: 0.5px solid var(--border-3);
  vertical-align: top;
  font-size: 13px;
}
.asset-table tr { cursor: pointer; transition: background 100ms ease; }
.asset-table tr:hover td { background: var(--bg-surface-2); }
.asset-table tr:last-child td { border-bottom: 0; }
.asset-table .num { text-align: right; font-variant-numeric: tabular-nums; color: var(--text-secondary); }
.asset-table .mfr { color: var(--text-primary); font-weight: 500; }
.asset-table .mdl { color: var(--text-secondary); }
.asset-table .typ-chip {
  font-size: 11px;
  font-family: var(--font-mono);
  color: var(--electric-blue);
  background: rgba(0,198,255,0.10);
  padding: 2px 8px; border-radius: 4px;
  white-space: nowrap;
}

/* ----- Counts row (asset detail / view-header secondary) ----- */
.counts-row {
  display: flex; gap: var(--sp-3); flex-wrap: wrap;
  margin-top: var(--sp-3);
}
.count-pill {
  display: flex; flex-direction: column;
  padding: 10px 14px;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  min-width: 100px;
}
.count-pill .label {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-tertiary); margin-bottom: 2px;
}
.count-pill .value {
  font-size: 22px; font-weight: 500;
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}
.count-pill.small .value { font-size: 16px; }

/* ----- Asset detail (polished feel) ----- */
.asset-detail {
  display: grid; grid-template-columns: 1.2fr 1fr;
  gap: var(--sp-5);
}
@media (max-width: 1200px) {
  .asset-detail { grid-template-columns: 1fr; }
}

.asset-card {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-lg);
  padding: var(--sp-5);
}

.asset-header {
  display: flex; align-items: baseline; gap: var(--sp-3);
  flex-wrap: wrap;
  margin-bottom: var(--sp-4);
}
.asset-header h1 {
  font-size: 22px; font-weight: 500;
  letter-spacing: -0.4px;
  margin: 0;
  color: var(--text-primary);
}
.asset-header .id {
  font-family: var(--font-mono); font-size: 12px;
  color: var(--text-tertiary);
}

.crumb-line {
  display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
  font-size: 12px; color: var(--text-secondary);
  margin-bottom: var(--sp-3);
}
.crumb-line .sep { color: var(--text-tertiary); }
.crumb-line .key {
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-tertiary); margin-right: 4px;
}

.section {
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-4);
  margin-bottom: var(--sp-3);
}
.section h2 {
  font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600;
  color: var(--text-tertiary);
  margin: 0 0 var(--sp-3);
}

.attr-table { width: 100%; border-collapse: collapse; }
.attr-table th, .attr-table td {
  text-align: left; padding: 6px 0; font-size: 13px;
  border-bottom: 0.5px solid var(--border-3);
}
.attr-table th {
  color: var(--text-tertiary); font-weight: 400;
  width: 40%;
  text-transform: none; letter-spacing: 0;
  font-size: 12px;
}
.attr-table td { color: var(--text-primary); }
.attr-table tr:last-child th, .attr-table tr:last-child td { border-bottom: 0; }

.photo-strip {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  gap: var(--sp-2);
}
.thumb {
  position: relative;
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-sm);
  overflow: hidden;
  background: var(--bg-page);
  cursor: pointer;
  aspect-ratio: 4 / 3;
}
.thumb img {
  width: 100%; height: 100%; object-fit: cover; display: block;
  transition: transform 200ms ease;
}
.thumb:hover img { transform: scale(1.05); }
.thumb .imgref {
  position: absolute; left: 4px; bottom: 4px;
  font-family: var(--font-mono); font-size: 9px;
  padding: 2px 5px; border-radius: 3px;
  background: rgba(8,17,31,0.78); color: var(--text-secondary);
}

.tag-row { display: flex; flex-wrap: wrap; gap: 6px; }
.tag-chip {
  font-family: var(--font-mono); font-size: 11px;
  padding: 3px 8px;
  border-radius: 4px;
  background: rgba(123,47,255,0.10);
  color: #B18BFF;
}

.provenance {
  display: flex; flex-wrap: wrap; gap: var(--sp-3);
  margin-top: var(--sp-4);
  padding: var(--sp-3) var(--sp-4);
  border-radius: var(--r-md);
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  font-size: 12px; color: var(--text-secondary);
}
.provenance b { color: var(--text-primary); font-weight: 500; }

/* ----- Spatial tree (used for property view) ----- */
.spatial-tree { display: flex; flex-direction: column; gap: var(--sp-3); }
.spatial-flat { display: flex; flex-direction: column; gap: 4px; }
.spatial-flat-row {
  display: flex; align-items: center; gap: var(--sp-3);
  padding: 10px 14px;
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  cursor: pointer;
  transition: background 0.1s ease;
}
.spatial-flat-row:hover { background: var(--row-selected-bg); }
.spatial-flat-row .name { font-size: 14px; font-weight: 500; }
.spatial-flat-row .kind { font-size: 11px; }
.spatial-by-kind { display: flex; flex-direction: column; gap: var(--sp-3); }
.spatial-node-building {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-1);
  border-radius: var(--r-lg);
  overflow: hidden;
}
.spatial-node-building > .spatial-head {
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-4);
  background: var(--row-selected-bg);
  border-bottom: 0.5px solid var(--border-2);
}
.spatial-node-building > .spatial-head .name { font-size: 16px; font-weight: 500; }
.spatial-node-building > .spatial-head .kind {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--electric-blue);
}
.spatial-node-building > .spatial-body { padding: var(--sp-3); display: flex; flex-direction: column; gap: var(--sp-2); }

.spatial-node-floor {
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-3);
}
.spatial-node-floor .spatial-head {
  display: flex; align-items: center; gap: var(--sp-3);
  margin-bottom: var(--sp-2);
}
.spatial-node-floor .name { font-weight: 500; }
.spatial-node-floor .kind { font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-tertiary); }

.spatial-locations {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--sp-2);
  margin-top: var(--sp-2);
}
.spatial-location {
  padding: var(--sp-3);
  background: var(--bg-page);
  border: 0.5px solid var(--border-3);
  border-radius: var(--r-sm);
  cursor: pointer;
}
.spatial-location:hover { border-color: var(--electric-blue); }
.spatial-location .name { font-weight: 500; font-size: 13px; }
.spatial-location .sub { font-size: 11px; color: var(--text-secondary); margin-top: 2px; }

/* ----- Counts inside row-cards ----- */
.mini-pill {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 2px 7px; border-radius: 100px;
  font-size: 10.5px;
  background: var(--chip-soft-bg);
  color: var(--text-secondary);
  border: 0.5px solid var(--border-3);
}
.mini-pill .v { color: var(--text-primary); font-weight: 500; font-variant-numeric: tabular-nums; }

/* ----- JSON viewer (collapsible for the full extraction response) ----- */
.json-viewer {
  background: var(--bg-page);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-3);
  font-family: var(--font-mono); font-size: 11.5px;
  color: var(--text-secondary);
  max-height: 600px; overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
}

/* ----- Modal ----- */
.modal {
  position: fixed; inset: 0;
  background: var(--backdrop-overlay);
  display: flex; align-items: center; justify-content: center;
  z-index: 100;
  padding: var(--sp-5);
}
.modal.hidden { display: none; }
.modal img {
  max-width: 95vw; max-height: 95vh;
  border-radius: var(--r-md);
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
}
/* Modal chrome (v0.7.5): chevrons + close button + counter. Float over
 * the backdrop so the image itself still fills the viewport. Click-off
 * on the backdrop continues to close (handled in hideModal). */
.modal-btn {
  position: absolute;
  background: rgba(0,0,0,0.55);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.18);
  border-radius: 50%;
  width: 48px; height: 48px;
  display: flex; align-items: center; justify-content: center;
  font-size: 28px; line-height: 1;
  cursor: pointer;
  transition: background 0.15s ease, transform 0.1s ease;
  user-select: none;
}
.modal-btn:hover {
  background: rgba(0,198,255,0.35);
  border-color: rgba(0,198,255,0.6);
}
.modal-btn:active { transform: scale(0.95); }
.modal-close {
  top: 24px; right: 24px;
  font-size: 22px;
}
/* v0.7.6 (Tim 2026-06-20): chevrons sit immediately outside the image
 * border, not pinned to the screen edges. The .modal-row flex container
 * keeps the image centered with the chevrons flowing alongside it. */
.modal-row {
  display: inline-flex;
  align-items: center;
  gap: 16px;
}
.modal-chevron {
  position: static;
  flex-shrink: 0;
}
.modal-chevron:active { transform: scale(0.95); }
.modal-counter {
  position: absolute;
  bottom: 24px; left: 50%; transform: translateX(-50%);
  background: rgba(0,0,0,0.55);
  color: #fff;
  padding: 6px 14px;
  border-radius: 100px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.04em;
  border: 1px solid rgba(255,255,255,0.15);
  pointer-events: none;
}
.modal-counter:empty { display: none; }

/* ----- Helpers ----- */
.muted { color: var(--text-tertiary); }
.flex { display: flex; }
.flex-1 { flex: 1; }
.gap-2 { gap: var(--sp-2); }
.gap-3 { gap: var(--sp-3); }
.gap-4 { gap: var(--sp-4); }
.mb-2 { margin-bottom: var(--sp-2); }
.mb-3 { margin-bottom: var(--sp-3); }
.mb-4 { margin-bottom: var(--sp-4); }
.center { display: flex; align-items: center; justify-content: center; }

/* ==========================================================
 * Asset list - type filter strip + visual separation
 * ========================================================== */
.section-break {
  margin: var(--sp-4) 0 0;
  padding: var(--sp-3) 0 0;
  border-top: 0.5px solid var(--border-2);
}
.section-break-label {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  margin-bottom: var(--sp-2);
}
.type-filter-strip {
  display: flex; flex-wrap: wrap; gap: var(--sp-2);
  margin-bottom: var(--sp-3);
}
.type-filter-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px;
  border-radius: 100px;
  border: 1px solid var(--border-1);
  background: rgba(0,198,255,0.06);
  color: var(--text-secondary);
  font-size: 11.5px; font-family: var(--font-mono);
  cursor: pointer;
  transition: background 100ms ease, border-color 100ms ease, color 100ms ease;
}
.type-filter-chip:hover {
  border-color: var(--electric-blue);
  background: rgba(0,198,255,0.12);
  color: var(--text-primary);
}
.type-filter-chip .chip-count {
  font-family: var(--font-sans);
  font-size: 10px; font-weight: 600;
  padding: 1px 6px; border-radius: 100px;
  background: rgba(0,198,255,0.18); color: var(--electric-blue);
}
.type-filter-chip-active {
  border-color: var(--electric-blue);
  background: var(--gradient-primary);
  color: white;
}
.type-filter-chip-active:hover { background: var(--gradient-primary); color: white; }

/* Collapsible chip section header */
.chip-section-header {
  display: flex; align-items: center; gap: var(--sp-2);
  cursor: pointer;
  padding: 2px 0;
  user-select: none;
  transition: color 100ms ease;
}
.chip-section-header:hover { color: var(--text-primary); }
.chip-section-header .section-break-label { margin-bottom: 0; }
.chip-section-caret {
  display: inline-block;
  font-size: 10px;
  color: var(--text-tertiary);
  transition: transform 120ms ease;
  width: 10px; text-align: center;
}
.chip-section-open .chip-section-caret { transform: rotate(90deg); }
.chip-section-meta {
  font-size: 10px; letter-spacing: 0.02em;
  color: var(--text-tertiary);
  font-family: var(--font-mono);
  margin-left: auto;
}
.chip-section-active {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px;
  border-radius: 100px;
  background: var(--gradient-primary);
  color: white;
  font-size: 10.5px; font-family: var(--font-mono);
  margin-left: var(--sp-2);
  cursor: pointer;
  transition: opacity 100ms ease;
}
.chip-section-active:hover { opacity: 0.85; }
.chip-section-closed .type-filter-strip { display: none; }
.chip-section-open .type-filter-strip { margin-top: var(--sp-2); }

/* Clickable count pill on property overview */
.count-pill-clickable {
  cursor: pointer; position: relative;
  transition: border-color 120ms ease, background 120ms ease;
}
.count-pill-clickable:hover {
  border-color: var(--electric-blue);
  background: var(--row-selected-bg);
}
.count-pill-clickable .label-cta {
  font-size: 10px;
  color: var(--electric-blue);
  font-weight: 500;
  margin-top: 4px;
  opacity: 0; transition: opacity 120ms ease;
}
.count-pill-clickable:hover .label-cta { opacity: 1; }

/* ==========================================================
 * Asset detail - shared bits
 * ========================================================== */
.card-h {
  font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600;
  color: var(--text-tertiary);
  margin: 0 0 var(--sp-3);
  display: flex; align-items: center; gap: 8px;
}
.section-sub {
  text-transform: none; letter-spacing: 0; font-family: var(--font-mono);
  font-size: 11px; color: var(--text-tertiary); font-weight: 400;
  margin-left: 6px;
}
.section-count {
  font-family: var(--font-mono); font-size: 10.5px;
  background: rgba(0,198,255,0.10); color: var(--electric-blue);
  padding: 1px 7px; border-radius: 100px;
  font-weight: 600; letter-spacing: 0;
  text-transform: none;
}

/* TextSignal value + confidence pill */
.conf-pill {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 100px;
  font-family: var(--font-mono); font-size: 10px;
  font-weight: 500;
  background: rgba(29,158,117,0.15);
  color: #4DD9A7;
  margin-left: 6px;
  vertical-align: middle;
}

.asset-detail {
  display: grid; grid-template-columns: 1.2fr 1fr;
  gap: var(--sp-5);
  align-items: start;
}
.asset-detail-left,
.asset-detail-right {
  display: flex; flex-direction: column; gap: var(--sp-4);
}
@media (max-width: 1200px) {
  .asset-detail { grid-template-columns: 1fr; }
}

.gradient-text {
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* ==========================================================
 * Data cards (LCAM / Cost / Carbon / Licensing / Compliance)
 * Each gets a subtle colored top border for at-a-glance recognition.
 * ========================================================== */
.data-card {
  position: relative; overflow: hidden;
}
.data-card::before {
  content: "";
  position: absolute; left: 0; right: 0; top: 0;
  height: 2px;
  opacity: 0.85;
}
.data-card-blue::before   { background: var(--gradient-primary); }
.data-card-violet::before { background: linear-gradient(135deg, #B18BFF, #7B2FFF); }
.data-card-cyan::before   { background: linear-gradient(135deg, #38CFFF, #00C6FF); }
.data-card-green::before  { background: linear-gradient(135deg, #4DD9A7, #1D9E75); }
.data-card-amber::before  { background: linear-gradient(135deg, #F6BE6A, #EF9F27); }

.stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: var(--sp-2);
  margin-bottom: var(--sp-3);
}
.stat {
  padding: var(--sp-3);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-3);
  border-radius: var(--r-md);
}
.stat-highlight {
  background: linear-gradient(135deg, rgba(0,198,255,0.06), rgba(123,47,255,0.06));
  border-color: var(--border-1);
}
.stat-label {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  margin-bottom: 4px;
}
.stat-value {
  font-size: 18px; font-weight: 500;
  color: var(--text-primary);
  letter-spacing: -0.3px;
  line-height: 1.2;
}
.stat-value.gradient-text { font-size: 22px; }
.stat-sub {
  font-size: 10.5px;
  color: var(--text-tertiary);
  margin-top: 4px;
  line-height: 1.4;
}

.data-card-row {
  display: flex; justify-content: space-between; gap: var(--sp-3);
  padding: 6px 0;
  font-size: 12px;
  border-top: 0.5px solid var(--border-3);
}
.data-card-row > span:last-child { color: var(--text-primary); text-align: right; }

/* Block-layout variant for rows whose content is a multi-line list
 * (the sources list under Cost & depreciation needs the label on top
 * and the list flowing below, not right-aligned on one line). */
.data-card-row-block {
  flex-direction: column;
  align-items: stretch;
  gap: var(--sp-2);
}
.data-card-row-block > span:first-child { text-align: left; }
.data-card-row-block > span:last-child { text-align: left; }

/* Generic narrow data table inside a data-card body (v2.11 Market Lookup). */
.data-card-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12.5px;
  margin-top: var(--sp-2);
}
.data-card-table th,
.data-card-table td {
  padding: 6px 8px;
  text-align: left;
  border-bottom: 0.5px solid var(--border-2);
  vertical-align: top;
}
.data-card-table th {
  color: var(--text-tertiary);
  font-weight: 600;
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.data-card-table td.num { text-align: right; font-family: var(--font-mono); }
.data-card-table td.mono { font-family: var(--font-mono); font-size: 11.5px; color: var(--text-secondary); }

/* Plain bullet list inside a data-card row. */
.data-card-list {
  margin: 6px 0 0 0;
  padding-left: 20px;
  list-style: disc;
  font-size: 12.5px;
  color: var(--text-secondary);
}
.data-card-list li { padding: 2px 0; }
.data-card-list a { color: inherit; word-break: break-all; }

/* ----- v2.13.0 RCD-grouping ghost-asset + inferred-circuit affordances ----- */
.rollup-banner {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  margin-bottom: 12px;
  border-radius: 6px;
  background: rgba(177, 139, 255, 0.10);
  border: 0.5px solid rgba(177, 139, 255, 0.40);
  color: #C8B0FF;
  font-size: 13px;
}
.rollup-banner .rollup-icon { font-size: 16px; }
.rollup-banner a { color: inherit; text-decoration: underline; }
.rollup-banner a:hover { color: var(--text-primary); }

.row-inferred-register {
  background: rgba(177, 139, 255, 0.06) !important;
}
.row-inferred-register td:first-child { border-left: 2px solid rgba(177, 139, 255, 0.45); }

.inferred-chip {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 6px;
  border-radius: 3px;
  font-size: 10.5px;
  font-weight: 500;
  background: rgba(177, 139, 255, 0.18);
  color: #C8B0FF;
  vertical-align: middle;
  cursor: help;
}

/* 1-based source citation index marker. */
.src-idx {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-tertiary);
  margin-right: 4px;
  min-width: 22px;
}

/* Top-N replacement-cost sources list - mirrors the polished review UI */
.cost-source-count {
  font-family: var(--font-mono);
  font-size: 10.5px;
  color: var(--text-tertiary);
  margin-left: 4px;
}
.cost-source-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex; flex-direction: column;
  gap: 4px;
}
.cost-source-item {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: 6px 8px;
  border-radius: 6px;
  background: rgba(0,198,255,0.04);
  border: 1px solid var(--border-2);
  font-size: 11.5px;
  transition: background 100ms ease, border-color 100ms ease;
  min-width: 0;
}
.cost-source-item:hover {
  background: rgba(0,198,255,0.10);
  border-color: var(--electric-blue);
}
.cost-source-primary {
  background: rgba(0,198,255,0.10);
  border-color: rgba(0,198,255,0.35);
}
.cost-source-idx {
  flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px;
  border-radius: 100px;
  background: var(--border-2);
  color: var(--text-tertiary);
  font-family: var(--font-mono);
  font-size: 10px; font-weight: 600;
}
.cost-source-primary .cost-source-idx {
  background: var(--gradient-primary);
  color: white;
}
.cost-source-item a {
  display: inline-flex; align-items: center; gap: 8px;
  flex: 1 1 auto;
  min-width: 0;
  color: var(--text-primary);
  text-decoration: none;
  font-family: var(--font-mono);
}
.cost-source-item a:hover { color: var(--electric-blue); }
.cost-source-host {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cost-source-badge {
  flex: 0 0 auto;
  font-family: var(--font-sans);
  font-size: 9px; letter-spacing: 0.08em; text-transform: uppercase;
  font-weight: 700;
  color: var(--electric-blue);
  background: rgba(0,198,255,0.15);
  padding: 2px 6px;
  border-radius: 100px;
}
.cost-source-arrow {
  flex: 0 0 auto;
  color: var(--text-tertiary);
  font-size: 12px;
}
.cost-source-item:hover .cost-source-arrow { color: var(--electric-blue); }
.data-card-foot {
  margin-top: var(--sp-2);
  padding-top: var(--sp-2);
  border-top: 0.5px solid var(--border-3);
  font-size: 11px; color: var(--text-secondary);
}
.data-card-excerpt summary {
  font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  cursor: pointer; list-style: none;
  padding-top: var(--sp-2);
}
.data-card-excerpt summary::-webkit-details-marker { display: none; }
.data-card-excerpt p {
  margin: 8px 0 0;
  font-size: 12px;
  line-height: 1.6;
  color: var(--text-secondary);
}

/* ==========================================================
 * Sub-section labels (used in licensing/compliance cards)
 * ========================================================== */
.sub-section-label {
  font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  margin-bottom: var(--sp-2);
}

/* ==========================================================
 * Compliance / licensing card lists
 * ========================================================== */
.compliance-list {
  display: flex; flex-direction: column; gap: var(--sp-2);
}
.compliance-card {
  padding: var(--sp-3);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-3);
  border-left: 2px solid var(--border-1);
  border-radius: var(--r-sm);
  transition: border-left-color 120ms ease;
}
.compliance-card:hover { border-left-color: var(--electric-blue); }
.compliance-head {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin-bottom: 6px;
}
.compliance-cat {
  font-size: 10px; font-family: var(--font-mono);
  color: var(--text-tertiary);
  letter-spacing: 0.05em;
}
.compliance-title {
  font-size: 13px; font-weight: 500;
  color: var(--text-primary);
  margin-bottom: 2px;
  line-height: 1.4;
}
.compliance-sub {
  font-size: 11.5px; color: var(--text-secondary);
  margin-bottom: 6px; line-height: 1.5;
}
.compliance-scope {
  font-size: 12px; line-height: 1.55;
  color: var(--text-primary);
  padding: 6px 0 0;
}
.compliance-notes {
  font-size: 11px; line-height: 1.55;
  margin-top: 6px;
  padding-top: 6px;
  border-top: 0.5px dashed var(--border-3);
}
.compliance-link {
  display: inline-block;
  margin-top: 6px;
  font-size: 11px;
  color: var(--electric-blue);
}

/* ==========================================================
 * Observations list
 * ========================================================== */
.obs-list {
  list-style: none; padding: 0; margin: 0;
  display: flex; flex-direction: column; gap: var(--sp-2);
}
.obs-list li {
  display: grid;
  grid-template-columns: 64px 1fr;
  gap: var(--sp-3);
  align-items: start;
  padding: 8px 0;
  border-bottom: 0.5px dashed var(--border-3);
}
.obs-list li:last-child { border-bottom: 0; }
.obs-sev {
  font-size: 9.5px; letter-spacing: 0.10em; text-transform: uppercase;
  font-weight: 600;
  padding: 3px 8px; border-radius: 100px;
  text-align: center;
}
.obs-sev-info     { background: rgba(0,198,255,0.15);   color: #38CFFF; }
.obs-sev-warn,
.obs-sev-warning  { background: rgba(239,159,39,0.18);  color: #F6BE6A; }
.obs-sev-alert,
.obs-sev-critical { background: rgba(226,75,74,0.18);   color: #F38C8B; }
.obs-text {
  font-size: 12.5px; line-height: 1.55;
  color: var(--text-primary);
}

/* ==========================================================
 * Sub-components / parts cards
 * ========================================================== */
.sub-list {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--sp-2);
}
.sub-card {
  padding: var(--sp-3);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-3);
  border-left: 2px solid var(--electric-blue);
  border-radius: var(--r-sm);
  transition: border-left-color 120ms ease;
}
.sub-card:hover { border-left-color: var(--violet); }
.sub-head {
  display: flex; align-items: center; gap: 6px;
  margin-bottom: 6px;
}
.sub-role {
  font-size: 9.5px; letter-spacing: 0.10em; text-transform: uppercase;
  font-weight: 600;
  color: var(--electric-blue);
  background: rgba(0,198,255,0.10);
  padding: 2px 7px; border-radius: 4px;
}

/* Per Tim 2026-06-08 10:19: sub-component card titles needed colour and
 * bolder weight. Title now uses the signature gradient (Electric Blue ->
 * Cobalt -> Violet) as text colour, bumped to 15px / 700 weight, with a
 * tighter letter-spacing - same treatment as data-card headlines. Solid
 * fallback colour ensures it still pops on browsers without
 * background-clip support. */
.sub-title {
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.2px;
  line-height: 1.3;
  color: var(--link);
  background: var(--gradient-primary);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
[data-theme="paper"] .sub-title,
[data-theme="ice"] .sub-title {
  /* On light themes the gradient text can be too pale; lean cobalt-violet. */
  background: linear-gradient(135deg, #0057FF 0%, #4A1FCC 60%, #7B2FFF 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.sub-sub {
  font-size: 12px;
  color: var(--text-primary);
  font-weight: 500;
  margin-top: 4px;
  line-height: 1.45;
}
.sub-meta { font-size: 11px; color: var(--text-secondary); margin-top: 6px; }
.sub-notes {
  font-size: 11px; color: var(--text-secondary);
  margin-top: 8px; padding-top: 6px;
  border-top: 0.5px dashed var(--border-3);
  line-height: 1.5;
}

/* ==========================================================
 * Labels grid
 * ========================================================== */
.label-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--sp-2);
}
.label-card {
  padding: var(--sp-3);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-3);
  border-radius: var(--r-sm);
  border-left: 2px solid var(--violet);
}
.label-type {
  font-size: 9.5px; letter-spacing: 0.10em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  margin-bottom: 4px;
}
.label-value {
  font-size: 14px; color: var(--electric-blue);
  word-break: break-all;
  line-height: 1.3;
}
.label-issuer {
  font-size: 11px; color: var(--text-secondary); margin-top: 6px;
}
.label-evidence {
  font-size: 10.5px; line-height: 1.5;
  margin-top: 6px; padding-top: 6px;
  border-top: 0.5px dashed var(--border-3);
}

/* ==========================================================
 * Type-specific attributes toolbar (populated count + toggle)
 * ========================================================== */
.projection-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-3);
  padding: var(--sp-2) 0 var(--sp-3);
  margin-bottom: var(--sp-2);
  border-bottom: 0.5px dashed var(--border-3);
}
.projection-counter {
  font-size: 11.5px; color: var(--text-secondary);
}
.projection-counter-num {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 12px; font-weight: 600;
  color: var(--electric-blue);
  background: rgba(0,198,255,0.10);
  padding: 2px 8px;
  border-radius: 100px;
  margin-right: 4px;
}
.projection-toggle.is-on {
  border-color: var(--electric-blue);
  color: var(--electric-blue);
  background: rgba(0,198,255,0.10);
}

/* ==========================================================
 * Theme switcher (top bar)
 * ========================================================== */
.theme-switcher {
  display: inline-flex; align-items: center; gap: 6px;
  margin-right: var(--sp-3);
}
.theme-switcher-label {
  font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-tertiary); font-weight: 600;
}
.theme-select {
  appearance: none;
  font-family: var(--font-sans); font-size: 12px;
  padding: 5px 24px 5px 10px;
  border-radius: var(--r-sm);
  border: 0.5px solid var(--border-1);
  background: var(--bg-surface-2);
  color: var(--text-primary);
  cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, var(--electric-blue) 50%),
                    linear-gradient(135deg, var(--electric-blue) 50%, transparent 50%);
  background-position: calc(100% - 12px) 50%, calc(100% - 7px) 50%;
  background-size: 5px 5px;
  background-repeat: no-repeat;
}
.theme-select:focus {
  outline: none;
  border-color: var(--electric-blue);
  box-shadow: 0 0 0 3px rgba(0,198,255,0.18);
}

/* ==========================================================
 * Collapsible asset-detail sections with filled banner headers
 * ========================================================== */

/* Box used for every section: outer card has the border, inner
   <details> is what controls open/closed. */
.section.section-collapse {
  padding: 0;
  overflow: hidden;
}
.section.section-collapse > details > summary {
  list-style: none;
  cursor: pointer;
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4);
  background: var(--section-banner-bg);
  color: var(--section-banner-text);
  border-bottom: 0.5px solid var(--border-2);
  user-select: none;
  transition: filter 120ms ease;
}
.section.section-collapse > details > summary:hover { filter: brightness(1.08); }
.section.section-collapse > details > summary::-webkit-details-marker { display: none; }
.section.section-collapse > details:not([open]) > summary { border-bottom-color: transparent; }
.section.section-collapse > details > summary > .sec-icon {
  width: 14px; height: 14px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 11px; color: inherit;
  opacity: 0.7;
  transition: transform 180ms ease;
}
.section.section-collapse > details[open] > summary > .sec-icon {
  transform: rotate(90deg);
}
.section.section-collapse > details > summary > .sec-title {
  font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; flex: 1;
}
.section.section-collapse > details > summary > .sec-sub {
  font-size: 11px; opacity: 0.75; text-transform: none; letter-spacing: 0;
  font-family: var(--font-mono);
}
.section.section-collapse > details > summary > .sec-count {
  font-family: var(--font-mono); font-size: 10.5px;
  background: rgba(255,255,255,0.18);
  color: inherit;
  padding: 1px 7px; border-radius: 100px;
  font-weight: 600; letter-spacing: 0;
  text-transform: none;
}
[data-theme="ice"] .section.section-collapse > details > summary > .sec-count,
[data-theme="paper"] .section.section-collapse > details > summary > .sec-count {
  background: rgba(0,87,255,0.10);
}
.section.section-collapse > details > .sec-body {
  padding: var(--sp-4);
}

/* Data cards (LCAM/Cost/Carbon/Licensing/Compliance) follow the same
   collapsible pattern but keep their colored top stripe. */
.asset-card.collapsible {
  padding: 0;
}
.asset-card.collapsible > details > summary {
  list-style: none;
  cursor: pointer;
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4);
  background: var(--section-banner-bg);
  color: var(--section-banner-text);
  user-select: none;
  border-bottom: 0.5px solid var(--border-2);
  transition: filter 120ms ease;
}
.asset-card.collapsible > details > summary:hover { filter: brightness(1.08); }
.asset-card.collapsible > details > summary::-webkit-details-marker { display: none; }
.asset-card.collapsible > details:not([open]) > summary { border-bottom-color: transparent; }
.asset-card.collapsible > details > summary > .sec-icon {
  width: 14px; height: 14px;
  display: inline-flex; align-items: center; justify-content: center;
  opacity: 0.7;
  transition: transform 180ms ease;
}
.asset-card.collapsible > details[open] > summary > .sec-icon { transform: rotate(90deg); }
.asset-card.collapsible > details > summary > .sec-title {
  font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; flex: 1;
}
.asset-card.collapsible > details > summary > .sec-headline {
  font-family: var(--font-sans);
  font-size: 13px; font-weight: 500; letter-spacing: 0;
  text-transform: none;
  background: var(--gradient-primary);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
}
.asset-card.collapsible > details > .sec-body {
  padding: var(--sp-4);
}

/* ==========================================================
 * Asset record banner: BIM ref, FM tag, service provider tag
 * ========================================================== */
.record-banner {
  padding: var(--sp-4) var(--sp-4) var(--sp-3);
  border-bottom: 0.5px solid var(--border-2);
  background: linear-gradient(135deg, rgba(0,198,255,0.06), rgba(123,47,255,0.04));
}
[data-theme="ice"] .record-banner,
[data-theme="paper"] .record-banner {
  background: linear-gradient(135deg, rgba(0,87,255,0.08), rgba(0,198,255,0.06));
}

.banner-bim {
  display: inline-flex; align-items: baseline; gap: 6px;
  margin-left: var(--sp-3);
  padding: 3px 10px;
  border-radius: 6px;
  background: var(--gradient-primary);
  color: white;
  font-size: 13px;
}
.banner-bim-label {
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; opacity: 0.85;
}
.banner-bim-value {
  font-weight: 700;
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
}

.banner-tags {
  display: flex; flex-wrap: wrap; gap: var(--sp-2);
  margin: var(--sp-2) 0;
}
.banner-tag {
  display: inline-flex; align-items: baseline; gap: 4px;
  padding: 2px 8px;
  border-radius: 6px;
  font-size: 11.5px;
  border: 0.5px solid var(--border-1);
  background: var(--bg-surface-2);
}
.banner-tag-label {
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
}
.banner-tag-value { font-family: var(--font-mono); font-weight: 600; color: var(--text-primary); }
.banner-tag-issuer { color: var(--text-secondary); font-size: 11px; }
.banner-tag-fm { border-color: rgba(168, 85, 247, 0.40); }
.banner-tag-fm .banner-tag-label { color: #b18bff; }
[data-theme="ice"] .banner-tag-fm .banner-tag-label,
[data-theme="paper"] .banner-tag-fm .banner-tag-label { color: #7B2FFF; }
.banner-tag-service { border-color: rgba(29, 158, 117, 0.40); }
.banner-tag-service .banner-tag-label { color: #4dd9a7; }
[data-theme="ice"] .banner-tag-service .banner-tag-label,
[data-theme="paper"] .banner-tag-service .banner-tag-label { color: #0F6E56; }

/* ==========================================================
 * Circuit schedule table (distribution boards / control panels)
 * Row coloring matches polished review UI: emergency=yellow,
 * exit=green, essential=violet. Both em+exit gets striped.
 * ========================================================== */
.circuit-legend {
  display: flex; gap: var(--sp-4); flex-wrap: wrap;
  margin-bottom: var(--sp-3);
  font-size: 11px; color: var(--text-secondary);
}
.circuit-legend-item { display: inline-flex; align-items: center; gap: 6px; }
.circuit-legend-item .swatch {
  display: inline-block; width: 14px; height: 14px; border-radius: 3px;
  border: 0.5px solid var(--border-1);
}
.swatch-emergency { background: rgba(251, 191, 36, 0.40); }
.swatch-exit { background: rgba(74, 222, 128, 0.40); }
.swatch-essential { background: rgba(168, 85, 247, 0.40); }

table.circuit-table {
  width: 100%; border-collapse: collapse;
  font-size: 11.5px;
}
table.circuit-table th {
  text-align: left;
  padding: 6px 8px;
  font-size: 9.5px; letter-spacing: 0.10em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  border-bottom: 1px solid var(--border-1);
  background: var(--bg-surface-2);
  white-space: nowrap;
}
table.circuit-table td {
  padding: 6px 8px;
  border-bottom: 0.5px solid var(--border-3);
  vertical-align: top;
}
table.circuit-table td.col-num {
  font-family: var(--font-mono); font-weight: 600; color: var(--link);
  text-align: right;
}
table.circuit-table td.col-purposes,
table.circuit-table td.col-desc { white-space: normal; max-width: 200px; }
table.circuit-table td.col-make,
table.circuit-table td.col-model { font-family: var(--font-mono); font-size: 11.5px; max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Controlled-asset status chips (v0.7.6) */
.ca-status {
  display: inline-block; padding: 1px 7px; border-radius: 100px;
  font-size: 10.5px; font-family: var(--font-mono); letter-spacing: 0.02em;
}
.ca-status.status-normal   { background: rgba(29,158,117,0.18);  color: #4DD9A7; }
.ca-status.status-fault    { background: rgba(226,75,74,0.18);   color: #FF8080; }
.ca-status.status-isolated { background: rgba(251,191,36,0.18);  color: #FBBF24; }
.ca-status.status-alarm    { background: rgba(226,75,74,0.28);   color: #FFB0B0; }
.ca-status.status-unknown  { background: rgba(148,163,184,0.18); color: #CBD5E1; }

/* Spatial pane: asset-attribute group-by cards (v0.7.7) */
.group-by-sep {
  display: inline-block; width: 1px; height: 18px;
  background: rgba(255,255,255,0.15); margin: 0 6px; vertical-align: middle;
}
.spatial-attr-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 12px;
}
.spatial-attr-card {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px; border-radius: 10px; cursor: pointer;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.08);
  border-left: 4px solid #94A3B8;
  transition: background 0.12s, transform 0.08s;
}
.spatial-attr-card:hover { background: rgba(255,255,255,0.07); transform: translateY(-1px); }
.spatial-attr-card-name { font-weight: 600; font-size: 13.5px; }
.spatial-attr-card-count { font-size: 20px; font-weight: 700; font-family: var(--font-mono); }
.spatial-attr-card-hvac       { border-left-color: #00C6FF; background: linear-gradient(90deg, rgba(0,198,255,0.10), transparent 70%); }
.spatial-attr-card-electrical { border-left-color: #FFCE47; background: linear-gradient(90deg, rgba(255,206,71,0.10), transparent 70%); }
.spatial-attr-card-fire       { border-left-color: #FF5A5A; background: linear-gradient(90deg, rgba(255,90,90,0.10), transparent 70%); }
.spatial-attr-card-controls   { border-left-color: #A855F7; background: linear-gradient(90deg, rgba(168,85,247,0.10), transparent 70%); }
.spatial-attr-card-hydraulic  { border-left-color: #38BDF8; background: linear-gradient(90deg, rgba(56,189,248,0.10), transparent 70%); }
.spatial-attr-card-vertical   { border-left-color: #FB923C; background: linear-gradient(90deg, rgba(251,146,60,0.10), transparent 70%); }
.spatial-attr-card-security   { border-left-color: #F472B6; background: linear-gradient(90deg, rgba(244,114,182,0.10), transparent 70%); }
.spatial-attr-card-comms      { border-left-color: #2DD4BF; background: linear-gradient(90deg, rgba(45,212,191,0.10), transparent 70%); }
.spatial-attr-card-other      { border-left-color: #94A3B8; }

/* Facts ledger (v0.7.5) - resurrected from the original review UI per Tim. */
.facts-ledger-table-wrap { max-height: 480px; overflow-y: auto; }
table.facts-ledger-table { width: 100%; border-collapse: collapse; }
table.facts-ledger-table th {
  position: sticky; top: 0;
  background: var(--surface);
  color: var(--text-secondary);
  font-size: 11px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.04em;
  padding: 6px 10px;
  border-bottom: 1px solid var(--border-subtle);
  text-align: left;
}
table.facts-ledger-table td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--border-subtle);
  vertical-align: top;
  font-size: 12.5px;
}
table.facts-ledger-table td.facts-lbl { color: var(--text-secondary); font-family: var(--font-mono); font-size: 11.5px; white-space: nowrap; }
table.facts-ledger-table td.facts-unit { font-family: var(--font-mono); font-size: 11.5px; color: var(--text-tertiary); }
table.facts-ledger-table td.facts-conf { text-align: right; white-space: nowrap; }
table.facts-ledger-table td.facts-ev { white-space: nowrap; }
/* Asset filter bar (v0.7.5) - compact dropdown pickers replacing the
 * chip-wall strips. Each pill is a <details>/<summary> pair so it works
 * without extra JS. Click summary to open; click anywhere outside (or
 * the caret) to close. Native HTML5 behaviour. */
.asset-filter-bar {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin: 12px 0;
  padding: 10px 12px;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
}
.asset-filter-pill {
  position: relative;
  background: var(--bg-surface-2);
  border: 1px solid var(--border-2);
  border-radius: 8px;
  min-width: 180px;
}
.asset-filter-pill-on { border-color: var(--electric-blue); }
.asset-filter-pill > summary {
  list-style: none;
  display: flex; align-items: center; gap: 8px;
  padding: 8px 12px;
  cursor: pointer;
  font-size: 12.5px;
  user-select: none;
}
.asset-filter-pill > summary::-webkit-details-marker { display: none; }
.filter-pill-label {
  font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--text-tertiary);
  font-weight: 600;
}
.filter-pill-value {
  color: var(--text-primary);
  font-weight: 500;
  flex: 1;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.filter-pill-placeholder { color: var(--text-tertiary); flex: 1; }
.filter-pill-caret { color: var(--text-tertiary); font-size: 10px; margin-left: auto; }
.filter-pill-remove {
  background: transparent; border: 0; color: var(--text-tertiary);
  font-size: 12px; cursor: pointer; padding: 0 4px; margin-left: 4px;
}
.filter-pill-remove:hover { color: var(--alert); }
.asset-filter-pill[open] > summary { border-bottom: 1px solid var(--border-2); }
.asset-filter-pill[open] > summary > .filter-pill-caret { transform: rotate(180deg); }
.filter-pill-menu {
  position: absolute;
  top: 100%; left: 0;
  z-index: 50;
  min-width: 220px; max-width: 320px;
  background: var(--bg-surface);
  border: 1px solid var(--border-2);
  border-top: 0;
  border-radius: 0 0 8px 8px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.25);
}
.filter-search {
  width: 100%;
  padding: 8px 12px;
  background: transparent;
  color: var(--text-primary);
  border: 0; border-bottom: 1px solid var(--border-2);
  font-size: 12.5px;
  font-family: inherit;
  outline: none;
  box-sizing: border-box;
}
.filter-opt-list {
  max-height: 320px; overflow-y: auto;
  display: flex; flex-direction: column;
}
.filter-opt {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 12px;
  background: transparent;
  border: 0; cursor: pointer;
  color: var(--text-secondary);
  text-align: left;
  font-size: 12.5px;
  font-family: inherit;
  border-bottom: 0.5px solid var(--border-3);
}
.filter-opt:last-child { border-bottom: 0; }
.filter-opt:hover { background: var(--row-selected-bg); color: var(--text-primary); }
.filter-opt.is-on { color: var(--electric-blue); font-weight: 600; }
/* v0.7.6 - discipline-coloured filter options (used by the Discipline
 * dropdown so each option carries the discipline's brand colour). */
.filter-opt-hvac        { border-left: 3px solid #00C6FF; background: linear-gradient(90deg, rgba(0,198,255,0.10), transparent 80%); }
.filter-opt-electrical  { border-left: 3px solid #FFCE47; background: linear-gradient(90deg, rgba(255,206,71,0.10), transparent 80%); }
.filter-opt-fire        { border-left: 3px solid #FF5A5A; background: linear-gradient(90deg, rgba(255,90,90,0.10), transparent 80%); }
.filter-opt-controls    { border-left: 3px solid #A855F7; background: linear-gradient(90deg, rgba(168,85,247,0.10), transparent 80%); }
.filter-opt-hydraulic   { border-left: 3px solid #38BDF8; background: linear-gradient(90deg, rgba(56,189,248,0.10), transparent 80%); }
.filter-opt-vertical    { border-left: 3px solid #FB923C; background: linear-gradient(90deg, rgba(251,146,60,0.10), transparent 80%); }
.filter-opt-security    { border-left: 3px solid #F472B6; background: linear-gradient(90deg, rgba(244,114,182,0.10), transparent 80%); }
.filter-opt-comms       { border-left: 3px solid #2DD4BF; background: linear-gradient(90deg, rgba(45,212,191,0.10), transparent 80%); }
.filter-opt-other       { border-left: 3px solid #94A3B8; background: linear-gradient(90deg, rgba(148,163,184,0.10), transparent 80%); }
.filter-opt[class*="filter-opt-"]:hover {
  background: rgba(255,255,255,0.06);
}
/* Closed pill takes on the discipline colour when one is selected. */
.asset-filter-pill.filter-pill-hvac       { border-color: #00C6FF; background: linear-gradient(90deg, rgba(0,198,255,0.14), rgba(0,198,255,0.04) 80%); }
.asset-filter-pill.filter-pill-electrical { border-color: #FFCE47; background: linear-gradient(90deg, rgba(255,206,71,0.16), rgba(255,206,71,0.04) 80%); }
.asset-filter-pill.filter-pill-fire       { border-color: #FF5A5A; background: linear-gradient(90deg, rgba(255,90,90,0.16), rgba(255,90,90,0.04) 80%); }
.asset-filter-pill.filter-pill-controls   { border-color: #A855F7; background: linear-gradient(90deg, rgba(168,85,247,0.16), rgba(168,85,247,0.04) 80%); }
.asset-filter-pill.filter-pill-hydraulic  { border-color: #38BDF8; background: linear-gradient(90deg, rgba(56,189,248,0.16), rgba(56,189,248,0.04) 80%); }
.asset-filter-pill.filter-pill-vertical   { border-color: #FB923C; background: linear-gradient(90deg, rgba(251,146,60,0.16), rgba(251,146,60,0.04) 80%); }
.asset-filter-pill.filter-pill-security   { border-color: #F472B6; background: linear-gradient(90deg, rgba(244,114,182,0.16), rgba(244,114,182,0.04) 80%); }
.asset-filter-pill.filter-pill-comms      { border-color: #2DD4BF; background: linear-gradient(90deg, rgba(45,212,191,0.16), rgba(45,212,191,0.04) 80%); }
.filter-opt-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.filter-opt-count {
  font-family: var(--font-mono); font-size: 10.5px; color: var(--text-tertiary);
  font-variant-numeric: tabular-nums;
}
.filter-opt-clear { color: var(--alert); }
.filter-opt-clear:hover { background: rgba(239,68,68,0.10); }
.asset-filter-pill-add > summary { color: var(--electric-blue); }
.asset-filter-pill-add > summary .filter-pill-label { color: var(--electric-blue); }

/* Legacy chip strips - kept behind a collapsible so power users can
 * still see every option laid out. Closed by default. */
details.chip-strips-fallback { margin: 8px 0; }
details.chip-strips-fallback > summary {
  list-style: none;
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 12px;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: 100px;
  font-size: 11.5px;
  color: var(--text-secondary);
  cursor: pointer;
}
details.chip-strips-fallback > summary:hover { color: var(--text-primary); }
details.chip-strips-fallback > summary::-webkit-details-marker { display: none; }

table.facts-ledger-table .ev-chip {
  display: inline-block;
  padding: 2px 6px; border-radius: 4px;
  font-family: var(--font-mono); font-size: 10.5px;
  background: rgba(0,198,255,0.10);
  color: var(--electric-blue);
  border: 1px solid rgba(0,198,255,0.20);
}
.facts-captured-table { margin-top: 14px; }
.facts-captured-title {
  font-size: 12px; font-weight: 600;
  color: var(--text-secondary);
  margin-bottom: 6px;
  letter-spacing: 0.02em;
}
table.circuit-table td.col-bim {
  /* Per Tim 2026-06-08 09:42: BIM refs should display on ONE line - never wrap.
     The chips themselves are short identifiers; if there are many of them the
     cell scrolls horizontally rather than wrapping vertically. */
  white-space: nowrap;
  min-width: 140px;
  overflow-x: auto;
  max-width: 240px;
}
table.circuit-table td.col-flag { text-align: center; font-family: var(--font-mono); color: var(--text-secondary); }
table.circuit-table tr.row-emergency td { background: rgba(251, 191, 36, 0.10); }
table.circuit-table tr.row-exit td { background: rgba(74, 222, 128, 0.10); }
table.circuit-table tr.row-essential td { background: rgba(168, 85, 247, 0.10); }
table.circuit-table tr.row-emergency.row-exit td {
  background: repeating-linear-gradient(
    45deg,
    rgba(251, 191, 36, 0.16) 0px, rgba(251, 191, 36, 0.16) 8px,
    rgba(74, 222, 128, 0.16) 8px, rgba(74, 222, 128, 0.16) 16px
  );
}
[data-theme="ice"] table.circuit-table tr.row-emergency td,
[data-theme="paper"] table.circuit-table tr.row-emergency td { background: rgba(251, 191, 36, 0.22); }
[data-theme="ice"] table.circuit-table tr.row-exit td,
[data-theme="paper"] table.circuit-table tr.row-exit td { background: rgba(74, 222, 128, 0.18); }
[data-theme="ice"] table.circuit-table tr.row-essential td,
[data-theme="paper"] table.circuit-table tr.row-essential td { background: rgba(168, 85, 247, 0.14); }

.chip-purpose, .chip-bim {
  display: inline-block;
  padding: 1px 6px; border-radius: 4px;
  font-family: var(--font-mono); font-size: 10px;
  background: rgba(0,87,255,0.12);
  color: var(--link);
  margin-right: 3px;
  white-space: nowrap;
}
.chip-bim {
  background: var(--gradient-primary);
  color: white;
  font-weight: 600;
}

/* ==========================================================
 * Sub-component / part card - BIM ref pill in the head
 * ========================================================== */
.sub-bim {
  display: inline-flex; align-items: baseline; gap: 4px;
  margin-left: 6px;
  padding: 1px 8px;
  border-radius: 6px;
  background: var(--gradient-primary);
  color: white;
  font-size: 10px;
  vertical-align: middle;
}
.sub-bim-label {
  font-size: 8.5px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 600; opacity: 0.85;
}
.sub-bim-value { font-family: var(--font-mono); font-weight: 700; }

/* ==========================================================
 * Compliance / licensing - two-row stacked layout
 * Per Tim 2026-06-08 09:42: standard_id + jurisdiction on top row,
 * title/governs on a full-width second row underneath. Prevents
 * the title from being crushed into a narrow column and wrapping
 * forever down the page.
 * ========================================================== */
table.comp-table-stacked tr.comp-row-top td {
  border-bottom: none;
  padding-top: 10px;
  padding-bottom: 4px;
  vertical-align: middle;
}
table.comp-table-stacked tr.comp-row-detail td {
  padding-top: 0;
  padding-bottom: 12px;
  border-bottom: 0.5px solid var(--border-2);
}
table.comp-table-stacked tr.comp-row-detail:last-child td { border-bottom: none; }
table.comp-table-stacked .comp-jur-cell {
  text-align: right; white-space: nowrap;
}
.comp-detail-title {
  font-weight: 600;
  font-size: 12.5px;
  color: var(--text-primary);
  line-height: 1.4;
  margin-bottom: 4px;
}
.comp-detail-body {
  font-size: 11.5px;
  color: var(--text-secondary);
  line-height: 1.55;
  margin-top: 4px;
}
.comp-detail-sub {
  font-size: 11px;
  line-height: 1.5;
  margin-top: 4px;
}

/* Primary-row tint extends across both rows of the stacked layout */
table.comp-table-stacked tr.comp-row-top.comp-row-primary td,
table.comp-table-stacked tr.comp-row-detail.comp-row-primary td {
  background: rgba(168, 85, 247, 0.08);
}
[data-theme="ice"] table.comp-table-stacked tr.comp-row-top.comp-row-primary td,
[data-theme="ice"] table.comp-table-stacked tr.comp-row-detail.comp-row-primary td,
[data-theme="paper"] table.comp-table-stacked tr.comp-row-top.comp-row-primary td,
[data-theme="paper"] table.comp-table-stacked tr.comp-row-detail.comp-row-primary td {
  background: rgba(123, 47, 255, 0.06);
}

/* ==========================================================
 * Empty data card state (e.g. Cost & depreciation when no
 * lookup result is available). Per Tim 2026-06-08 09:42:
 * always render the section so users see it exists as a
 * feature, but make it obvious there's no data yet.
 * ========================================================== */
.data-card-empty {
  padding: var(--sp-4);
  border-radius: var(--r-md);
  background: var(--bg-surface-2);
  border: 0.5px dashed var(--border-1);
  text-align: center;
}
.data-card-empty-title {
  font-size: 12px; font-weight: 600;
  color: var(--text-tertiary);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: 6px;
}
.data-card-empty-body {
  font-size: 12px;
  color: var(--text-secondary);
  line-height: 1.55;
}
.data-card-empty-excerpt {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 0.5px dashed var(--border-3);
  font-size: 11px;
  text-align: left;
  font-style: italic;
}

/* ==========================================================
 * Compliance / Licensing - category groups
 * ========================================================== */
.comp-block { margin-bottom: var(--sp-3); }
.comp-block-summary {
  cursor: pointer; user-select: none;
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px;
  border-radius: var(--r-sm);
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  font-size: 12px; font-weight: 600;
  color: var(--text-primary);
  list-style: none;
}
.comp-block-summary::-webkit-details-marker { display: none; }

.comp-cat-disclose {
  display: inline-block; width: 8px; height: 8px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(-45deg);
  margin-right: 4px;
  opacity: 0.6;
  transition: transform 180ms ease;
}
details[open] > summary .comp-cat-disclose { transform: rotate(45deg); }

.comp-cat-groups { margin-top: var(--sp-2); padding-left: var(--sp-3); display: flex; flex-direction: column; gap: 6px; }

.comp-cat-group {
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-sm);
  background: var(--bg-surface);
}
.comp-cat-summary {
  cursor: pointer; user-select: none; list-style: none;
  display: flex; align-items: center; gap: 8px;
  padding: 6px 10px;
  font-size: 11.5px;
  border-bottom: 0.5px solid transparent;
}
.comp-cat-summary::-webkit-details-marker { display: none; }
details.comp-cat-group[open] > .comp-cat-summary { border-bottom-color: var(--border-2); }

.comp-cat-swatch {
  display: inline-block; width: 10px; height: 10px;
  border-radius: 2px;
  background: var(--border-1);
}
.comp-cat-name {
  flex: 1;
  font-weight: 600; color: var(--text-primary);
  text-transform: capitalize;
}
.comp-cat-count {
  font-family: var(--font-mono); font-size: 10.5px;
  background: rgba(0,198,255,0.12); color: var(--link);
  padding: 1px 7px; border-radius: 100px;
  font-weight: 600;
}

/* ===== v2.13: Group-by toggle + grouped asset list ===== */
.group-by-bar {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 10px;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  margin-left: auto;
}
.group-by-label {
  font-size: 10.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-tertiary);
  margin-right: 6px;
}
.group-by-btn {
  border: 0.5px solid var(--border-2);
  background: transparent;
  color: var(--text-secondary);
  padding: 4px 10px;
  font-size: 11.5px;
  border-radius: 4px;
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
}
.group-by-btn:hover {
  background: var(--chip-soft-bg);
  color: var(--text-primary);
}
.group-by-btn-active {
  background: rgba(0,198,255,0.18);
  color: var(--link);
  border-color: rgba(0,198,255,0.40);
  font-weight: 600;
}

.group-block {
  margin-top: 16px;
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  background: var(--bg-surface);
  overflow: hidden;
}
.group-block[open] > .group-header .group-caret {
  transform: rotate(90deg);
}
.group-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  cursor: pointer;
  user-select: none;
  background: rgba(0,198,255,0.04);
  border-bottom: 0.5px solid var(--border-2);
  border-left: 3px solid transparent;
}
/* v0.7.6 (Tim 2026-06-20): when a group-by mode produces discipline-
 * coloured group headers, paint a coloured left-stripe + tinted fill
 * for consistency with the property summary. */
.group-header-hvac        { border-left-color: #00C6FF; background: linear-gradient(90deg, rgba(0,198,255,0.16) 0%, rgba(0,198,255,0.04) 100%); }
.group-header-electrical  { border-left-color: #FFCE47; background: linear-gradient(90deg, rgba(255,206,71,0.18) 0%, rgba(255,206,71,0.04) 100%); }
.group-header-fire        { border-left-color: #FF5A5A; background: linear-gradient(90deg, rgba(255,90,90,0.18) 0%, rgba(255,90,90,0.04) 100%); }
.group-header-controls    { border-left-color: #A855F7; background: linear-gradient(90deg, rgba(168,85,247,0.18) 0%, rgba(168,85,247,0.04) 100%); }
.group-header-hydraulic   { border-left-color: #38BDF8; background: linear-gradient(90deg, rgba(56,189,248,0.18) 0%, rgba(56,189,248,0.04) 100%); }
.group-header-vertical    { border-left-color: #FB923C; background: linear-gradient(90deg, rgba(251,146,60,0.18) 0%, rgba(251,146,60,0.04) 100%); }
.group-header-security    { border-left-color: #F472B6; background: linear-gradient(90deg, rgba(244,114,182,0.18) 0%, rgba(244,114,182,0.04) 100%); }
.group-header-comms       { border-left-color: #2DD4BF; background: linear-gradient(90deg, rgba(45,212,191,0.18) 0%, rgba(45,212,191,0.04) 100%); }
.group-header-other       { border-left-color: #94A3B8; background: linear-gradient(90deg, rgba(148,163,184,0.14) 0%, rgba(148,163,184,0.04) 100%); }
.group-header::-webkit-details-marker { display: none; }
.group-header::marker { display: none; content: ""; }
.group-caret {
  display: inline-block;
  transition: transform 0.15s;
  color: var(--text-tertiary);
  font-size: 10px;
}
.group-title {
  font-weight: 600;
  color: var(--text-primary);
  font-size: 13px;
}
.group-subtitle {
  color: var(--text-tertiary);
  font-size: 11.5px;
}
.group-count {
  margin-left: auto;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-tertiary);
  background: var(--chip-soft-bg);
  padding: 1px 8px;
  border-radius: 100px;
}
.group-table {
  margin: 0;
  border-top: 0 !important;
}
.group-table thead th {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-tertiary);
  background: transparent;
}

/* Floor->Location nested view */
.group-block-outer {
  border-width: 0.5px;
  border-radius: var(--r-md);
}
.group-block-outer > .group-header-outer {
  background: rgba(123,47,255,0.07);
  border-bottom: 0.5px solid rgba(123,47,255,0.25);
}
.group-block-outer > .group-header-outer .group-title {
  font-size: 14px;
  color: #B18BFF;
}
.group-inner {
  padding: 0 14px 14px;
  display: flex;
  flex-direction: column;
  gap: 0;
}
.group-inner .group-block {
  margin-top: 12px;
  border: 0.5px solid var(--border-2);
  background: var(--bg-canvas);
}

.comp-bubble {
  font-size: 10px; font-weight: 600;
  padding: 2px 8px; border-radius: 100px;
  letter-spacing: 0.02em;
}
.comp-bubble-primary {
  background: rgba(168, 85, 247, 0.22);
  color: #b18bff;
  border: 0.5px solid rgba(168, 85, 247, 0.45);
}
[data-theme="ice"] .comp-bubble-primary,
[data-theme="paper"] .comp-bubble-primary { color: #7B2FFF; background: rgba(123, 47, 255, 0.10); }
.comp-bubble-mandatory {
  background: rgba(226, 75, 74, 0.20);
  color: #f38c8b;
  border: 0.5px solid rgba(226, 75, 74, 0.45);
}
[data-theme="ice"] .comp-bubble-mandatory,
[data-theme="paper"] .comp-bubble-mandatory { color: #b53b3a; }

/* Category swatches mirror polished review UI */
.comp-cat-safety                  { background: #f87171; }
.comp-cat-refrigerant_handling    { background: #38bdf8; }
.comp-cat-electrical              { background: #fbbf24; }
.comp-cat-pressure_vessel         { background: #fb7185; }
.comp-cat-fire                    { background: #ef4444; }
.comp-cat-energy_efficiency       { background: #4ade80; }
.comp-cat-indoor_air_quality      { background: #c084fc; }
.comp-cat-installation            { background: #94a3b8; }
.comp-cat-servicing_and_maintenance { background: #fb923c; }
.comp-cat-noise                   { background: #a78bfa; }
.comp-cat-other                   { background: #64748b; }
.comp-cat-gas_fitting             { background: #fdba74; }
.comp-cat-plumbing                { background: #60a5fa; }
.comp-cat-hazardous_area          { background: #e11d48; }
.comp-cat-building                { background: #84cc16; }

table.comp-table {
  width: 100%; border-collapse: collapse;
  font-size: 12px;
}
table.comp-table th {
  text-align: left;
  padding: 6px 10px;
  font-size: 9.5px; letter-spacing: 0.10em; text-transform: uppercase;
  font-weight: 600; color: var(--text-tertiary);
  background: var(--bg-surface-2);
  border-bottom: 0.5px solid var(--border-2);
}
table.comp-table td {
  padding: 8px 10px;
  border-bottom: 0.5px solid var(--border-3);
  vertical-align: top;
}
table.comp-table tr:last-child td { border-bottom: none; }
table.comp-table .comp-id-cell { white-space: nowrap; font-family: var(--font-mono); }
table.comp-table .comp-id-cell code {
  color: var(--link); font-weight: 600;
  background: rgba(0,87,255,0.06);
  padding: 1px 6px; border-radius: 4px;
}
table.comp-table .comp-sub { font-size: 11px; margin-top: 4px; line-height: 1.45; }
table.comp-table .comp-row-primary td { background: rgba(168, 85, 247, 0.08); }
[data-theme="ice"] table.comp-table .comp-row-primary td,
[data-theme="paper"] table.comp-table .comp-row-primary td { background: rgba(123, 47, 255, 0.06); }

/* Carbon card 'generic estimate' warning */
.data-card-warn {
  margin-top: var(--sp-3);
  padding: var(--sp-3);
  border-radius: var(--r-md);
  background: rgba(239, 159, 39, 0.10);
  border: 0.5px solid rgba(239, 159, 39, 0.30);
  font-size: 11.5px;
  color: var(--text-primary);
  line-height: 1.5;
}
.data-card-warn strong { color: var(--warning); }
[data-theme="ice"] .data-card-warn,
[data-theme="paper"] .data-card-warn {
  background: rgba(239, 159, 39, 0.12);
  border-color: rgba(239, 159, 39, 0.40);
}

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(0,198,255,0.15); border-radius: 100px; }
::-webkit-scrollbar-thumb:hover { background: rgba(0,198,255,0.30); }

/* =====================================================================
 * Top-bar menu (Browse / Review / Manage tenants / Manage users)
 * ===================================================================== */
.menu { position: relative; }
.menu-button {
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--bg-surface-2);
  color: var(--text-primary);
  border: 0.5px solid var(--border-1);
  border-radius: var(--r-md);
  padding: 6px 12px; cursor: pointer; font-size: 13px;
  transition: background 120ms ease, border-color 120ms ease;
}
.menu-button:hover { background: var(--bg-surface-hover); border-color: var(--electric-blue); }
.menu-icon { font-size: 14px; line-height: 1; opacity: 0.85; }
.menu-label { font-weight: 500; }
.menu-dropdown {
  position: absolute; right: 0; top: calc(100% + 8px);
  min-width: 220px; padding: 6px;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-1);
  border-radius: var(--r-md);
  box-shadow: 0 16px 40px rgba(0,0,0,0.45);
  z-index: 50;
  display: none;
}
.menu-dropdown.is-open { display: block; }
.menu-dropdown a {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 12px; border-radius: var(--r-sm);
  color: var(--text-primary); text-decoration: none;
  font-size: 13px;
}
.menu-dropdown a:hover { background: var(--bg-surface-hover); color: var(--text-primary); }
.menu-emoji { font-size: 15px; line-height: 1; width: 18px; text-align: center; }
.menu-divider { height: 1px; background: var(--border-3); margin: 6px 4px; }

/* =====================================================================
 * Manage tenants / users tables
 * ===================================================================== */
.mgmt-card { padding: var(--sp-4); }
.mgmt-create {
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
}
.mgmt-create h3 { margin: 0 0 var(--sp-2); font-size: 14px; color: var(--text-primary); }
.mgmt-create-grid {
  display: grid;
  grid-template-columns: 2fr 1.5fr 1fr auto;
  gap: var(--sp-2);
  align-items: center;
}
.mgmt-create-grid-wide {
  grid-template-columns: 1.4fr 1.6fr 1.4fr 1fr auto;
}
.mgmt-table { width: 100%; }
.mgmt-table th { font-weight: 600; }
.mgmt-input {
  width: 100%; padding: 4px 8px;
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-sm);
  background: var(--bg-surface);
  color: var(--text-primary);
  font-size: 12.5px;
}
.mgmt-counts { display: flex; flex-wrap: wrap; gap: 4px; }
.mgmt-save.is-saved { background: var(--verified); border-color: var(--verified); color: #fff; }

/* =====================================================================
 * Review walker
 * ===================================================================== */
.review-header { padding-bottom: var(--sp-2); }
.review-filters { padding: var(--sp-4); margin-bottom: var(--sp-4); }
.review-filters-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr) auto auto;
  gap: var(--sp-2);
  align-items: end;
}
.review-filters-grid label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: 12px; color: var(--text-secondary);
}
.review-filters-grid .input { font-size: 12.5px; padding: 5px 8px; }
.review-toggle { flex-direction: row !important; align-items: center; gap: 6px !important; }
.review-toggle input { margin: 0; }

.review-body { min-height: 60vh; }

.review-walker {
  display: flex; flex-direction: column;
  gap: var(--sp-3);
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-lg);
  padding: var(--sp-3);
}

.review-walker-toolbar {
  display: flex; align-items: center; gap: var(--sp-2);
  flex-wrap: wrap;
  padding-bottom: var(--sp-2);
  border-bottom: 0.5px solid var(--border-3);
}
.review-counter {
  font-weight: 600; font-variant-numeric: tabular-nums;
  padding: 4px 10px;
  background: var(--bg-surface-2);
  border-radius: 999px; font-size: 12.5px;
}
.review-asset-title { flex: 1 1 200px; font-size: 14px; color: var(--text-primary); }
.review-stat-pill {
  padding: 3px 9px; border-radius: 999px; font-size: 11.5px;
  font-variant-numeric: tabular-nums;
  background: var(--bg-surface-2); color: var(--text-secondary);
}
.review-stat-good { color: var(--verified); }
.review-stat-bad  { color: var(--alert); }
.review-stat-note { color: var(--warning); }

/* Grid: images on the left (1.1fr), data on the right (1fr). On wide
 * screens the images get a chunk so Tim can actually read nameplates. */
.review-walker-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
  gap: var(--sp-3);
  min-height: 70vh;
}
@media (max-width: 1100px) {
  .review-walker-grid { grid-template-columns: 1fr; }
}

.review-images { display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0; }
.review-focus {
  position: relative;
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  min-height: 360px;
  max-height: 70vh;
}
.review-focus img {
  width: 100%; height: 100%; max-height: 70vh;
  object-fit: contain; cursor: zoom-in;
  background: #000;
}
.review-focus-tag {
  position: absolute; top: 8px; left: 8px;
  background: rgba(0,198,255,0.85); color: #001; font-weight: 600;
  font-size: 11px; padding: 2px 8px; border-radius: 999px;
}
.review-reel {
  display: flex; gap: 6px; overflow-x: auto; padding-bottom: 4px;
}
.reel-thumb {
  flex: 0 0 84px; height: 84px;
  position: relative; cursor: pointer;
  border-radius: var(--r-sm); overflow: hidden;
  border: 2px solid transparent;
  background: var(--bg-surface-2);
}
.reel-thumb img { width: 100%; height: 100%; object-fit: cover; }
.reel-thumb.is-active { border-color: var(--electric-blue); }
.reel-thumb-rank {
  position: absolute; top: 2px; left: 2px;
  background: rgba(0,0,0,0.65); color: #fff; font-size: 10px;
  padding: 1px 5px; border-radius: 999px; font-weight: 600;
}
.reel-thumb-role {
  position: absolute; bottom: 0; left: 0; right: 0;
  background: rgba(0,198,255,0.85); color: #001;
  font-size: 9.5px; text-align: center;
  padding: 1px 0; font-weight: 600; letter-spacing: 0.4px;
  text-transform: uppercase;
}
.review-breadcrumb {
  font-size: 11.5px; color: var(--text-secondary);
  display: flex; gap: 6px; align-items: center; flex-wrap: wrap;
}
.review-breadcrumb .sep { opacity: 0.5; }

/* Data panel with tabs */
.review-data {
  display: flex; flex-direction: column;
  gap: var(--sp-2);
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2);
  min-width: 0; min-height: 0;
}
.review-tabs {
  display: flex; gap: 4px; overflow-x: auto;
  padding-bottom: 4px; border-bottom: 0.5px solid var(--border-3);
}
.review-tab {
  flex: 0 0 auto; cursor: pointer;
  background: transparent; border: 0;
  color: var(--text-secondary);
  padding: 6px 12px; border-radius: var(--r-sm);
  font-size: 12.5px; font-weight: 500;
  border-bottom: 2px solid transparent;
  display: inline-flex; align-items: center; gap: 6px;
}
.review-tab:hover { color: var(--text-primary); }
.review-tab.is-on {
  color: var(--text-primary); background: var(--bg-surface-2);
  border-bottom-color: var(--electric-blue);
}
.review-tab.is-empty { opacity: 0.5; }
.review-tab .tab-count {
  font-size: 10.5px; padding: 1px 6px; border-radius: 999px;
  background: var(--border-2); color: var(--text-primary);
  font-variant-numeric: tabular-nums;
}
.review-tabpanel {
  overflow: auto; max-height: 70vh;
  padding: var(--sp-2);
}

/* Attribute rows in the review tab */
.review-attr-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.review-attr-row { border-bottom: 0.5px solid var(--border-3); }
.review-attr-row:last-child { border-bottom: 0; }
.review-attr-row .review-attr-label {
  font-weight: 500; color: var(--text-secondary);
  padding: 6px 8px; width: 35%; min-width: 120px;
  vertical-align: top; text-align: left;
}
.review-attr-row .review-attr-value {
  padding: 6px 8px; color: var(--text-primary);
  vertical-align: top; word-break: break-word;
}
.review-attr-row.review-attr-dim .review-attr-value { color: var(--text-tertiary); }
.review-attr-row .review-attr-actions {
  padding: 4px 6px;
  width: 110px; min-width: 110px;
  white-space: nowrap; text-align: right;
}
.rev-btn {
  cursor: pointer; border: 0.5px solid var(--border-2);
  background: var(--bg-surface);
  color: var(--text-secondary);
  width: 28px; height: 26px;
  padding: 0; margin-left: 3px;
  border-radius: var(--r-sm);
  font-size: 14px; line-height: 1;
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
}
.rev-btn:hover { background: var(--bg-surface-hover); color: var(--text-primary); }
.rev-good.is-on { background: var(--verified); color: #fff; border-color: var(--verified); }
.rev-bad.is-on  { background: var(--alert);    color: #fff; border-color: var(--alert); }
.rev-note.has-note { color: var(--warning); border-color: var(--warning); }

.review-sub-card {
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2);
  margin-bottom: var(--sp-2);
}
.review-sub-card-head {
  display: flex; justify-content: space-between;
  font-size: 12px; margin-bottom: 4px;
}
.review-extras {
  margin-top: var(--sp-2); font-size: 12px; color: var(--text-secondary);
}
.review-extras ul { margin: 4px 0 0; padding-left: 18px; }
.review-label-list { margin: 4px 0 var(--sp-2); padding-left: 18px; font-size: 12px; }
.review-label-list li { margin-bottom: 2px; }
/* =====================================================================
 * Sidebar menu (relocated under the Captura logo)
 * ===================================================================== */
.side-menu-section {
  padding-bottom: var(--sp-2);
  border-bottom: 0.5px solid var(--border-3);
  margin-bottom: var(--sp-2);
}
.menu-side { width: 100%; }
.menu-button-side {
  width: 100%;
  justify-content: flex-start;
  font-size: 13.5px;
  font-weight: 600;
  padding: 8px 12px;
  letter-spacing: 0.15px;
  background: var(--gradient-soft);
  border: 0.5px solid var(--border-1);
}
.menu-button-side .menu-icon { font-size: 13px; }
.menu-button-side .menu-caret {
  margin-left: auto;
  font-size: 11px; opacity: 0.7;
  transition: transform 120ms ease;
}
.menu-side:has(.menu-dropdown.is-open) .menu-caret { transform: rotate(180deg); }
.menu-dropdown-side {
  position: absolute;
  left: 0; right: 0; top: calc(100% + 4px);
  min-width: 0;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-1);
  border-radius: var(--r-md);
  box-shadow: 0 12px 32px rgba(0,0,0,0.4);
}

/* =====================================================================
 * Reports / usage view
 * ===================================================================== */
.reports-filters { padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-4); }
.reports-filters-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--sp-2);
  align-items: end;
}
.reports-filters-grid label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: 11.5px; color: var(--text-secondary);
}
.reports-filters-grid .input { font-size: 12.5px; padding: 5px 8px; }
.reports-filter-actions {
  display: flex; gap: var(--sp-2); align-items: center;
  grid-column: span 2;
}

.reports-results { display: flex; flex-direction: column; gap: var(--sp-4); }

.reports-kpis {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: var(--sp-2);
}
.kpi {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.kpi-label {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  color: var(--text-secondary);
  margin-bottom: 4px;
}
.kpi-value {
  font-size: 22px;
  font-weight: 600;
  color: var(--text-primary);
  font-variant-numeric: tabular-nums;
}

.reports-source-mix {
  display: flex; align-items: center; gap: var(--sp-3);
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
}
.reports-source-mix-label {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  flex: 0 0 auto;
}
.reports-source-bar {
  display: flex; flex: 1 1 auto;
  height: 22px; border-radius: 4px; overflow: hidden;
  background: var(--bg-surface-2);
}
.reports-source-fill {
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; color: #001;
  white-space: nowrap; overflow: hidden;
}
.reports-source-register { background: #00C6FF; }
.reports-source-photo    { background: #7B2FFF; color: #fff; }

.reports-segments-card { padding: var(--sp-3) var(--sp-4); }
.reports-segments-card h3 { margin: 0 0 var(--sp-3); font-size: 13px; color: var(--text-primary); }
.segment-cards-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--sp-2);
}
.segment-card {
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
}
.segment-card-head {
  display: flex; justify-content: space-between; align-items: baseline;
  margin-bottom: 6px;
}
.segment-card-label {
  font-size: 12px; font-weight: 500;
  color: var(--text-primary);
}
.segment-card-count {
  font-size: 13px; font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--text-primary);
}
.segment-card-bar {
  height: 4px;
  background: var(--bg-surface);
  border-radius: 2px; overflow: hidden;
  margin-bottom: 4px;
}
.segment-card-fill {
  height: 100%;
  background: var(--gradient-primary);
}
.segment-card-foot {
  font-size: 10.5px;
  color: var(--text-secondary);
}

.reports-table-card { padding: var(--sp-3) var(--sp-4); }
.reports-table-head {
  display: flex; justify-content: space-between; align-items: center;
  gap: var(--sp-3);
  margin-bottom: var(--sp-2);
}
.reports-table-head h3 { margin: 0; font-size: 13px; color: var(--text-primary); }
.reports-view-toggle { display: flex; gap: 4px; }
.reports-view-toggle .btn-ghost { font-size: 11.5px; padding: 4px 10px; }
.reports-view-toggle .btn-ghost.is-on {
  background: var(--gradient-soft);
  border-color: var(--electric-blue);
  color: var(--text-primary);
}

.reports-table-wrap { overflow-x: auto; }
.reports-table {
  width: 100%; border-collapse: collapse;
  font-size: 12px;
}
.reports-table th, .reports-table td {
  padding: 6px 8px;
  border-bottom: 0.5px solid var(--border-3);
  white-space: nowrap;
}
.reports-table th {
  text-align: left;
  font-weight: 600;
  color: var(--text-secondary);
  position: sticky; top: 0;
  background: var(--bg-surface);
}
.reports-table th.num, .reports-table td.num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.reports-group-cell {
  color: var(--text-primary);
  font-weight: 500;
  position: sticky; left: 0;
  background: var(--bg-surface);
  z-index: 1;
}
.reports-table td.src { font-size: 11.5px; color: var(--text-secondary); }

.seg-cell {
  text-align: right;
  vertical-align: middle;
  min-width: 70px;
}
.seg-cell-bar {
  display: inline-block;
  width: 36px; height: 4px;
  background: var(--bg-surface-2);
  border-radius: 2px;
  margin-right: 5px;
  vertical-align: middle;
  overflow: hidden;
}
.seg-cell-fill {
  display: block; height: 100%;
  background: var(--gradient-primary);
}
.seg-cell-num {
  font-variant-numeric: tabular-nums;
  font-size: 11.5px;
  color: var(--text-primary);
}

.reports-notes {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
}
.reports-notes summary {
  cursor: pointer;
  font-size: 12px;
  color: var(--text-secondary);
}
.reports-notes ul {
  margin: var(--sp-2) 0 0;
  padding-left: 18px;
  font-size: 12px;
  color: var(--text-secondary);
}
.reports-notes ul li { margin-bottom: 4px; }
.reports-notes code {
  font-family: var(--font-mono);
  background: var(--bg-surface-2);
  padding: 1px 5px; border-radius: 3px;
  font-size: 11px;
}

@media (max-width: 1100px) {
  .reports-filters-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .reports-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.kpi-sub {
  font-size: 10.5px;
  color: var(--text-tertiary);
  margin-top: 2px;
  letter-spacing: 0.2px;
}
.kpi-tokens .kpi-value { color: var(--electric-blue); }

@media (max-width: 1100px) {
  .reports-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* =====================================================================
 * Framework inventory view
 * ===================================================================== */
.inv-section { margin-bottom: var(--sp-5); }
.inv-section > h2 {
  font-size: 15px; margin: 0 0 var(--sp-1); color: var(--text-primary);
}
.inv-section > .muted { margin: 0 0 var(--sp-3); font-size: 12.5px; }

.inv-card {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  margin-bottom: var(--sp-3);
}
.inv-card > summary {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: var(--sp-3) var(--sp-4);
  cursor: pointer; list-style: none;
}
.inv-card > summary::-webkit-details-marker { display: none; }
.inv-card-title { font-size: 14px; font-weight: 600; color: var(--text-primary); }
.inv-route-badge {
  margin-left: auto;
  background: var(--gradient-soft);
  border: 0.5px solid var(--border-1);
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 11.5px;
  color: var(--text-primary);
  font-variant-numeric: tabular-nums;
}
.inv-card-body { padding: 0 var(--sp-4) var(--sp-4); }
.inv-card-info { padding: var(--sp-3) var(--sp-4); }
.inv-card-info .inv-card-title { display: block; margin-bottom: var(--sp-2); }
.inv-blurb { font-size: 12px; color: var(--text-secondary); margin: var(--sp-2) 0 0; }

.inv-meta-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--sp-2);
  font-size: 12px;
  color: var(--text-secondary);
  padding: var(--sp-2) 0 var(--sp-3);
  border-bottom: 0.5px dashed var(--border-3);
  margin-bottom: var(--sp-2);
}
.inv-meta-row b { color: var(--text-primary); margin-right: 4px; }
.inv-meta-row code {
  font-family: var(--font-mono);
  background: var(--bg-surface-2);
  padding: 1px 5px; border-radius: 3px;
  color: var(--text-primary);
  font-size: 11px;
}
.inv-link {
  display: inline-block;
  background: var(--bg-surface-2);
  border: 0.5px solid var(--border-2);
  padding: 1px 8px; border-radius: 999px;
  font-size: 11px; margin-right: 4px;
  color: var(--text-primary); text-decoration: none;
}
.inv-link:hover { border-color: var(--electric-blue); color: var(--electric-blue); }

.inv-error {
  font-size: 12px; color: var(--alert);
  padding: 8px 10px;
  background: rgba(226,75,74,0.08);
  border-radius: var(--r-sm);
  margin-bottom: var(--sp-2);
}
.inv-note {
  font-size: 12px; color: var(--text-secondary);
  padding: 8px 10px;
  background: var(--bg-surface-2);
  border-left: 3px solid var(--warning);
  border-radius: var(--r-sm);
  margin-bottom: var(--sp-2);
}

.inv-route-table { font-size: 12px; }
.inv-route-table .mono {
  font-family: var(--font-mono);
  font-size: 11.5px;
  color: var(--text-primary);
}
.inv-method-cell { white-space: nowrap; }
.inv-method {
  display: inline-block;
  font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 3px;
  letter-spacing: 0.4px;
  margin-right: 2px;
}
.inv-method-get    { background: rgba(0,198,255,0.18); color: #00C6FF; }
.inv-method-post   { background: rgba(29,158,117,0.18); color: var(--verified); }
.inv-method-put    { background: rgba(239,159,39,0.18); color: var(--warning); }
.inv-method-patch  { background: rgba(123,47,255,0.20); color: #B59CFF; }
.inv-method-delete { background: rgba(226,75,74,0.18); color: var(--alert); }

.inv-audit-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: var(--sp-2);
}
.inv-audit-card {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.inv-audit-head {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: var(--sp-2);
  margin-bottom: var(--sp-1);
}
.inv-layer-pill {
  font-size: 10.5px;
  padding: 1px 8px; border-radius: 999px;
  background: var(--bg-surface-2);
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}
.inv-layer-billing { background: rgba(239,159,39,0.18); color: var(--warning); }
.inv-layer-data---provenance { background: rgba(0,198,255,0.18); color: var(--electric-blue); }
.inv-layer-observability { background: rgba(123,47,255,0.20); color: #B59CFF; }
.inv-layer-cost-saving { background: rgba(29,158,117,0.18); color: var(--verified); }
.inv-layer-diagnostics { background: rgba(226,75,74,0.18); color: var(--alert); }
.inv-audit-foot {
  display: flex; flex-direction: column; gap: 4px;
  font-size: 11.5px; color: var(--text-secondary);
  margin-top: var(--sp-2);
  padding-top: var(--sp-2);
  border-top: 0.5px dashed var(--border-3);
}
.inv-audit-foot b { color: var(--text-primary); margin-right: 4px; }
.inv-audit-foot code {
  font-family: var(--font-mono);
  background: var(--bg-surface-2);
  padding: 1px 5px; border-radius: 3px;
  font-size: 11px;
}

/* =====================================================================
 * "Estimated tokens" provenance banner on the Cost & margin tab
 * ===================================================================== */
.reports-est-banner {
  background: rgba(239,159,39,0.10);
  border: 0.5px solid var(--warning);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
  font-size: 12.5px;
  color: var(--text-primary);
  margin-bottom: var(--sp-3);
}
.reports-est-banner b { color: var(--warning); }

/* =====================================================================
 * Image-thumb role badge on the asset detail page (v0.6.1)
 *
 * Mirrors the review walker's reel-thumb-role pattern but sized for the
 * larger asset-detail thumbnails. Highlights nameplate / sub_component
 * images so they're spottable at a glance without opening the review
 * walker.
 * ===================================================================== */
.thumb.thumb-tagged { border: 1.5px solid rgba(0,198,255,0.55); }
.thumb .thumb-role {
  position: absolute; left: 0; right: 0; bottom: 0;
  background: rgba(0,198,255,0.92); color: #001;
  font-size: 10px; text-align: center;
  padding: 2px 4px; font-weight: 700;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  font-family: var(--font-sans);
}
.thumb .thumb-role-nameplate     { background: rgba(0,198,255,0.92); color: #001; }
.thumb .thumb-role-sub_component { background: rgba(123,47,255,0.85); color: #fff; }

/* =====================================================================
 * v0.6.3 - Per-attribute provenance chips + Source register card
 * Shown when the asset detail page's 'Show source' toggle is on.
 * ===================================================================== */
.src-chip {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  padding: 1px 6px 1px 5px;
  border-radius: 3px;
  margin-left: 6px;
  letter-spacing: 0.2px;
  vertical-align: 1px;
  white-space: nowrap;
  cursor: help;
}
.src-chip.src-register {
  background: rgba(29,158,117,0.16);
  color: var(--verified);
  border: 0.5px solid rgba(29,158,117,0.55);
}
.src-chip.src-captura {
  background: rgba(0,198,255,0.14);
  color: var(--electric-blue);
  border: 0.5px solid rgba(0,198,255,0.55);
}
.src-chip.src-mismatch {
  background: rgba(239,159,39,0.16);
  color: var(--warning);
  border: 0.5px solid rgba(239,159,39,0.6);
}
.src-key-hint {
  font-family: var(--font-mono);
  font-size: 9.5px;
  margin-left: 6px;
  letter-spacing: 0.3px;
  opacity: 0.6;
}

/* When the toggle is ACTIVE, give it a distinct on-state look so Tim can
 * see at a glance whether provenance annotation is on. */
.asset-nav-btn.is-on {
  background: var(--gradient-soft);
  border-color: var(--electric-blue);
  color: var(--text-primary);
}

/* =====================================================================
 * v0.7.0 - Property summary landing
 * ===================================================================== */
.prop-fin-kpis, .prop-lc-kpis {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: var(--sp-2);
}
@media (max-width: 1100px) {
  .prop-fin-kpis, .prop-lc-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.kpi-lc-bad { border-color: var(--alert); }
.kpi-lc-bad .kpi-value { color: var(--alert); }
.kpi-lc-warn { border-color: var(--warning); }
.kpi-lc-warn .kpi-value { color: var(--warning); }
.kpi-lc-good { border-color: var(--verified); }
.kpi-lc-good .kpi-value { color: var(--verified); }

/* Ecosystem grid */
.prop-eco-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--sp-2);
}
.prop-eco-disc {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
}
.prop-eco-disc-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: var(--sp-2);
}
.prop-eco-disc-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  text-transform: capitalize;
}
.prop-eco-disc-count {
  font-size: 14px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--electric-blue);
}
.prop-eco-systems {
  display: flex; flex-direction: column; gap: 3px;
}
.prop-eco-sys {
  display: flex;
  justify-content: space-between;
  font-size: 11.5px;
  padding: 2px 0;
  border-bottom: 0.5px dashed var(--border-3);
}
.prop-eco-sys:last-child { border-bottom: 0; }
.prop-eco-sys-name { color: var(--text-secondary); }
.prop-eco-sys-count { color: var(--text-primary); font-variant-numeric: tabular-nums; font-weight: 500; }

/* Asset-type heatgrid */
.prop-type-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: var(--sp-2);
}
.prop-type-cell {
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
  cursor: pointer;
  transition: transform 120ms ease, border-color 120ms ease;
}
.prop-type-cell:hover {
  transform: translateY(-1px);
  border-color: var(--electric-blue);
}
.prop-type-name {
  /* v0.7.5 (Tim 2026-06-20): humanised labels - drop the mono treatment
   * so the type names read as prose, not raw IDs. */
  font-family: var(--font-display, var(--font-sans));
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  letter-spacing: 0.01em;
}

/* v0.7.5 - Discipline colour palette.
 * Each tile / card carries a base colour driven by discipline; the
 * --tile-intensity custom property scales the alpha so heavier (larger)
 * tiles read denser. Keep these in sync with _disciplineColorKey() in
 * app.js. */
.prop-type-cell-hvac        { background: rgba(0,198,255,var(--tile-intensity,0.20));  border-color: rgba(0,198,255,0.40); }
.prop-type-cell-electrical  { background: rgba(255,206,71,var(--tile-intensity,0.20)); border-color: rgba(255,206,71,0.40); }
.prop-type-cell-fire        { background: rgba(255,90,90,var(--tile-intensity,0.20));  border-color: rgba(255,90,90,0.45); }
.prop-type-cell-controls    { background: rgba(168,85,247,var(--tile-intensity,0.20)); border-color: rgba(168,85,247,0.40); }
.prop-type-cell-hydraulic   { background: rgba(56,189,248,var(--tile-intensity,0.20)); border-color: rgba(56,189,248,0.40); }
.prop-type-cell-vertical    { background: rgba(251,146,60,var(--tile-intensity,0.20)); border-color: rgba(251,146,60,0.40); }
.prop-type-cell-security    { background: rgba(244,114,182,var(--tile-intensity,0.20)); border-color: rgba(244,114,182,0.40); }
.prop-type-cell-comms       { background: rgba(45,212,191,var(--tile-intensity,0.20)); border-color: rgba(45,212,191,0.40); }
.prop-type-cell-other       { background: rgba(148,163,184,var(--tile-intensity,0.18)); border-color: rgba(148,163,184,0.32); }
.prop-type-cell[class*="prop-type-cell-"]:hover { border-color: rgba(255,255,255,0.55); transform: translateY(-1px); }

/* Ecosystem cards adopt the same palette - left-edge stripe AND a subtle
 * tinted gradient fill so the grouping is obvious even when several
 * cards are stacked together. (v0.7.6 - Tim: the border alone was too
 * subtle, needed a fill colour as well.) */
.prop-eco-disc-hvac        { border-left: 3px solid #00C6FF; background: linear-gradient(180deg, rgba(0,198,255,0.16) 0%, rgba(0,198,255,0.04) 100%); }
.prop-eco-disc-electrical  { border-left: 3px solid #FFCE47; background: linear-gradient(180deg, rgba(255,206,71,0.18) 0%, rgba(255,206,71,0.04) 100%); }
.prop-eco-disc-fire        { border-left: 3px solid #FF5A5A; background: linear-gradient(180deg, rgba(255,90,90,0.18) 0%, rgba(255,90,90,0.04) 100%); }
.prop-eco-disc-controls    { border-left: 3px solid #A855F7; background: linear-gradient(180deg, rgba(168,85,247,0.18) 0%, rgba(168,85,247,0.04) 100%); }
.prop-eco-disc-hydraulic   { border-left: 3px solid #38BDF8; background: linear-gradient(180deg, rgba(56,189,248,0.18) 0%, rgba(56,189,248,0.04) 100%); }
.prop-eco-disc-vertical    { border-left: 3px solid #FB923C; background: linear-gradient(180deg, rgba(251,146,60,0.18) 0%, rgba(251,146,60,0.04) 100%); }
.prop-eco-disc-security    { border-left: 3px solid #F472B6; background: linear-gradient(180deg, rgba(244,114,182,0.18) 0%, rgba(244,114,182,0.04) 100%); }
.prop-eco-disc-comms       { border-left: 3px solid #2DD4BF; background: linear-gradient(180deg, rgba(45,212,191,0.18) 0%, rgba(45,212,191,0.04) 100%); }
.prop-eco-disc-other       { border-left: 3px solid #94A3B8; background: linear-gradient(180deg, rgba(148,163,184,0.14) 0%, rgba(148,163,184,0.04) 100%); }

/* Asset-type composition group headers (one per discipline). Wide chip
 * that spans the grid so the colour groups read as labelled bands. */
.prop-type-group-header {
  grid-column: 1 / -1;
  margin: 12px 0 4px 0;
  padding: 6px 12px;
  font-size: 11px; font-weight: 700;
  letter-spacing: 0.10em; text-transform: uppercase;
  border-radius: 4px;
  border-left: 3px solid var(--border-2);
}
.prop-type-group-header:first-child { margin-top: 0; }
.prop-type-group-header-hvac        { color: #38CFFF; border-left-color: #00C6FF; background: rgba(0,198,255,0.12); }
.prop-type-group-header-electrical  { color: #FFCE47; border-left-color: #FFCE47; background: rgba(255,206,71,0.12); }
.prop-type-group-header-fire        { color: #FF7A7A; border-left-color: #FF5A5A; background: rgba(255,90,90,0.14); }
.prop-type-group-header-controls    { color: #C39BFB; border-left-color: #A855F7; background: rgba(168,85,247,0.14); }
.prop-type-group-header-hydraulic   { color: #7DD3FC; border-left-color: #38BDF8; background: rgba(56,189,248,0.12); }
.prop-type-group-header-vertical    { color: #FDBA74; border-left-color: #FB923C; background: rgba(251,146,60,0.12); }
.prop-type-group-header-security    { color: #F9A8D4; border-left-color: #F472B6; background: rgba(244,114,182,0.12); }
.prop-type-group-header-comms       { color: #5EEAD4; border-left-color: #2DD4BF; background: rgba(45,212,191,0.12); }
.prop-type-group-header-other       { color: #CBD5E1; border-left-color: #94A3B8; background: rgba(148,163,184,0.10); }

/* Discipline filter bar (v0.7.5) */
.prop-disc-filter-bar {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 8px;
  padding: 10px 14px;
  margin: 12px 0;
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
}
.prop-disc-filter-label {
  font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--text-tertiary); margin-right: 4px;
}
.prop-disc-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px;
  font-size: 12px; font-weight: 500;
  background: var(--bg-surface-2);
  border: 1px solid var(--border-2);
  border-radius: 100px;
  cursor: pointer;
  color: var(--text-secondary);
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.prop-disc-chip:hover { color: var(--text-primary); border-color: var(--electric-blue); }
.prop-disc-chip.is-on { background: var(--row-selected-bg); color: var(--text-primary); border-color: var(--electric-blue); }
.prop-disc-chip-count { font-family: var(--font-mono); font-size: 10.5px; color: var(--text-tertiary); }
/* Tinted variants for each discipline chip - matches the cards. */
.prop-disc-chip-hvac.is-on        { border-color: #00C6FF; background: rgba(0,198,255,0.18); }
.prop-disc-chip-electrical.is-on  { border-color: #FFCE47; background: rgba(255,206,71,0.20); }
.prop-disc-chip-fire.is-on        { border-color: #FF5A5A; background: rgba(255,90,90,0.20); }
.prop-disc-chip-controls.is-on    { border-color: #A855F7; background: rgba(168,85,247,0.20); }
.prop-disc-chip-hydraulic.is-on   { border-color: #38BDF8; background: rgba(56,189,248,0.20); }
.prop-disc-chip-vertical.is-on    { border-color: #FB923C; background: rgba(251,146,60,0.20); }
.prop-disc-chip-security.is-on    { border-color: #F472B6; background: rgba(244,114,182,0.20); }
.prop-disc-chip-comms.is-on       { border-color: #2DD4BF; background: rgba(45,212,191,0.20); }
.prop-type-meta {
  margin-top: 4px;
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--text-primary);
}
.prop-type-meta span:nth-child(2) {
  color: var(--text-secondary);
  font-size: 10.5px;
}

/* Replacement forecast table */
.prop-forecast-table {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.prop-forecast-row {
  display: grid;
  grid-template-columns: 100px 1fr 110px 60px;
  align-items: center;
  gap: var(--sp-2);
  font-size: 12.5px;
  padding: 4px 0;
}
.prop-forecast-row.prop-forecast-head {
  font-weight: 600;
  font-size: 11px;
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.4px;
  border-bottom: 0.5px solid var(--border-2);
  padding-bottom: 6px;
  margin-bottom: 4px;
}
.prop-forecast-label {
  font-variant-numeric: tabular-nums;
  font-weight: 500;
  color: var(--text-primary);
}
.prop-forecast-bar {
  height: 10px;
  background: var(--bg-surface-2);
  border-radius: 2px;
  overflow: hidden;
}
.prop-forecast-fill {
  height: 100%;
  background: var(--gradient-primary);
}
.prop-forecast-fill-overdue {
  background: var(--alert);
}
/* Stacked-by-discipline forecast bar (v0.7.6) */
.prop-forecast-stack { height: 100%; display: flex; }
.prop-forecast-seg { height: 100%; display: block; transition: filter 0.15s ease; }
.prop-forecast-seg:hover { filter: brightness(1.25); }
.prop-forecast-seg-hvac        { background: #00C6FF; }
.prop-forecast-seg-electrical  { background: #FFCE47; }
.prop-forecast-seg-fire        { background: #FF5A5A; }
.prop-forecast-seg-controls    { background: #A855F7; }
.prop-forecast-seg-hydraulic   { background: #38BDF8; }
.prop-forecast-seg-vertical    { background: #FB923C; }
.prop-forecast-seg-security    { background: #F472B6; }
.prop-forecast-seg-comms       { background: #2DD4BF; }
.prop-forecast-seg-other       { background: #94A3B8; }
.prop-forecast-fill-hvac       { background: #00C6FF; }
.prop-forecast-fill-electrical { background: #FFCE47; }
.prop-forecast-fill-fire       { background: #FF5A5A; }
.prop-forecast-fill-controls   { background: #A855F7; }
.prop-forecast-fill-hydraulic  { background: #38BDF8; }
.prop-forecast-fill-vertical   { background: #FB923C; }
.prop-forecast-fill-security   { background: #F472B6; }
.prop-forecast-fill-comms      { background: #2DD4BF; }
.prop-forecast-fill-other      { background: #94A3B8; }
.prop-forecast-legend {
  display: flex; flex-wrap: wrap; gap: 12px;
  padding: 8px 16px;
  background: var(--bg-surface);
  border-radius: 4px;
  font-size: 11px;
  margin-bottom: 8px;
}
.prop-forecast-legend-item {
  display: inline-flex; align-items: center; gap: 5px;
  color: var(--text-secondary);
}
.prop-forecast-legend-swatch {
  width: 12px; height: 12px; border-radius: 2px;
  display: inline-block;
}
.forecast-stack-toggle {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11.5px; color: var(--text-secondary);
  cursor: pointer;
  user-select: none;
}
.forecast-stack-toggle input { cursor: pointer; }
.prop-forecast-row.prop-forecast-overdue {
  background: rgba(226,75,74,0.06);
  border-radius: 4px;
  padding: 4px 6px;
}
.prop-forecast-row.prop-forecast-overdue .prop-forecast-label {
  color: var(--alert);
  font-weight: 600;
}
.prop-forecast-spend {
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--text-primary);
}
.prop-forecast-count {
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--text-secondary);
  font-size: 11px;
}

/* Condition + environment */
.prop-cond-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--sp-3);
}
.prop-cond-block {
  background: var(--bg-surface);
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-md);
  padding: var(--sp-2) var(--sp-3);
}
.prop-cond-head {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.4px;
  margin-bottom: 6px;
}
.prop-cond-row {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  padding: 3px 0;
  border-bottom: 0.5px dashed var(--border-3);
}
.prop-cond-row:last-child { border-bottom: 0; }
.prop-cond-count {
  font-variant-numeric: tabular-nums;
  color: var(--electric-blue);
  font-weight: 500;
}

/* =====================================================================
 * v0.7.4 - Property summary drill-in (clickable tiles + drill banner)
 * ===================================================================== */
.kpi-clickable {
  cursor: pointer;
  transition: transform 120ms ease, border-color 120ms ease, background 120ms ease;
}
.kpi-clickable:hover {
  transform: translateY(-1px);
  border-color: var(--electric-blue);
  background: var(--bg-surface-hover);
}

/* Provenance KPI splits into three click-targets */
.prop-provenance-kpi { padding: var(--sp-2) var(--sp-3); }
.prop-provenance-split {
  display: flex;
  gap: 4px;
  margin-top: 4px;
  flex-wrap: wrap;
}
.prov-chip {
  cursor: pointer;
  border: 0.5px solid var(--border-2);
  border-radius: var(--r-sm);
  padding: 2px 8px;
  font-size: 11px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  background: var(--bg-surface-2);
  color: var(--text-primary);
  transition: background 120ms ease, border-color 120ms ease;
}
.prov-chip:hover { border-color: var(--electric-blue); }
.prov-chip-google   { color: var(--electric-blue); border-color: rgba(0,198,255,0.45); }
.prov-chip-customer { color: var(--warning);       border-color: rgba(239,159,39,0.55); }
.prov-chip-unq      { color: var(--text-tertiary); }

/* Ecosystem grid clickability */
.prop-eco-clickable { cursor: pointer; transition: background 120ms ease; }
.prop-eco-clickable:hover { background: var(--bg-surface-hover); }
.prop-eco-disc-head.prop-eco-clickable {
  margin: calc(-1 * var(--sp-2)) calc(-1 * var(--sp-3)) var(--sp-2);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-sm) var(--r-sm) 0 0;
}
.prop-eco-sys.prop-eco-clickable {
  margin: 0 calc(-1 * var(--sp-1));
  padding-left: var(--sp-1);
  padding-right: var(--sp-1);
  border-radius: 2px;
}

/* Forecast row clickability */
.prop-forecast-clickable {
  cursor: pointer;
  transition: background 120ms ease;
}
.prop-forecast-clickable:hover {
  background: var(--bg-surface-hover);
}

/* Drill-in banner on the asset list */
.drill-banner {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3);
  margin: var(--sp-2) 0;
  background: rgba(0,198,255,0.10);
  border: 0.5px solid var(--electric-blue);
  border-radius: var(--r-md);
  font-size: 12.5px;
}
.drill-banner-icon { font-size: 14px; color: var(--electric-blue); }
.drill-banner-prefix {
  font-weight: 600;
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.4px;
  font-size: 10.5px;
}
.drill-banner-label {
  color: var(--text-primary);
  font-weight: 500;
  flex: 1;
}
.drill-banner-clear {
  background: transparent;
  border: 0.5px solid var(--border-2);
  color: var(--text-secondary);
  width: 22px;
  height: 22px;
  line-height: 1;
  border-radius: 50%;
  cursor: pointer;
}
.drill-banner-clear:hover {
  border-color: var(--alert);
  color: var(--alert);
}

/* ===================================================================
   Take-on / Import view (v0.7.9)
   =================================================================== */
.import-upload { padding: 18px 20px; margin-bottom: 18px; }
.import-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 14px 18px;
  align-items: end;
}
.import-field { display: flex; flex-direction: column; gap: 6px; font-size: 0.85rem; }
.import-field > span { font-weight: 600; opacity: 0.85; }
.import-field em { font-weight: 400; opacity: 0.6; font-style: normal; }
.import-actions { justify-content: flex-end; }
.import-status { margin-top: 14px; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.import-mapping { margin-top: 4px; }
.import-dedup {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 4px 0 14px; border-bottom: 1px solid var(--border, #2a3344); margin-bottom: 12px;
}
.import-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; }
.import-table th {
  text-align: left; padding: 8px 10px; font-size: 0.78rem; text-transform: uppercase;
  letter-spacing: 0.04em; opacity: 0.65; border-bottom: 1px solid var(--border, #2a3344);
}
.import-table td { padding: 7px 10px; border-bottom: 1px solid var(--border-soft, #1d2533); vertical-align: top; }
.import-col { font-weight: 600; }
.import-type { font-size: 0.74rem; font-weight: 400; opacity: 0.55; margin-top: 2px; }
.import-target { min-width: 200px; }
.import-sug {
  display: inline-block; margin-left: 6px; font-size: 0.72rem; padding: 1px 6px;
  border-radius: 10px; background: rgba(0,198,255,0.16); color: #00C6FF; vertical-align: middle;
}
.import-idcell { text-align: center; }
.import-samples { font-size: 0.82rem; opacity: 0.8; max-width: 320px; }

/* Import wizard polish (D0): per-target type hints + role flags + summary */
.import-hints { margin-top: 4px; display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.import-role { font-size: 0.7rem; padding: 1px 6px; border-radius: 10px; font-weight: 600; }
.import-role-prop { background: rgba(0,198,255,0.16); color: #38CFFF; }
.import-role-id { background: rgba(123,47,255,0.18); color: #B69CFF; }
.import-typehint { font-size: 0.7rem; padding: 1px 6px; border-radius: 10px; }
.import-typehint.is-fit { background: rgba(46,204,113,0.14); color: #63D68C; }
.import-typehint.is-warn { background: rgba(255,206,71,0.18); color: #FFCE47; font-weight: 600; }
.import-mapsummary { display: flex; gap: 8px; flex-wrap: wrap; margin: 0 0 12px; }
.import-mapsummary:empty { display: none; }
.import-save-row { display: flex; gap: 12px; align-items: center; margin-top: 16px; }
.badge-warn { background: rgba(255,206,71,0.18); color: #FFCE47; }
.badge-mute { background: rgba(148,163,184,0.16); color: #94A3B8; }
.badge-danger { background: rgba(255,90,90,0.18); color: #FF5A5A; }

/* Take-on / Import - Chunk 3 (value mapping + enrich decision), v0.7.10 */
.import-step { font-size: 1rem; margin: 4px 0 12px; opacity: 0.9; }
.import-valblock { margin: 14px 0 18px; padding: 12px 14px; border: 1px solid var(--border-soft, #1d2533); border-radius: 8px; }
.import-valhead { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.import-policy { margin-left: auto; font-size: 0.8rem; opacity: 0.8; display: flex; gap: 6px; align-items: center; }
.import-policy .input { padding: 3px 6px; }
.import-valtable { margin-top: 4px; }
.import-valtable th { font-size: 0.72rem; }
.import-rawval { font-family: var(--mono, monospace); font-size: 0.84rem; }
.import-unmapped { background: rgba(255,206,71,0.08); }
.import-unmapped .import-rawval { color: #FFCE47; }
.import-bidi { display: flex; gap: 18px; flex-wrap: wrap; }
.import-bidi-side { flex: 1 1 300px; min-width: 260px; }
.import-bidi-title { font-size: 0.8rem; font-weight: 600; margin-bottom: 4px; }
.import-bidi-title .muted { font-weight: 400; }
.import-tofrom { width: 100%; padding: 3px 6px; }
.import-choices { display: flex; gap: 14px; flex-wrap: wrap; margin: 6px 0 4px; }
.import-choice {
  flex: 1 1 240px; text-align: left; cursor: pointer; padding: 14px 16px;
  border: 1px solid var(--border, #2a3344); border-radius: 10px; background: transparent;
  display: flex; flex-direction: column; gap: 4px; transition: border-color .12s, background .12s;
}
.import-choice:hover { border-color: #00C6FF; }
.import-choice-active { border-color: #00C6FF; background: rgba(0,198,255,0.10); }
.import-choice-title { font-weight: 600; font-size: 0.95rem; }
.import-choice-sub { font-size: 0.82rem; opacity: 0.7; }

/* Enrichment Config - Chunk 4, v0.8.0 */
.cfg-newset-row { display: flex; gap: 8px; align-items: center; }
.cfg-newset-row .input { flex: 1; }
.cfg-inline { font-size: 0.8rem; display: flex; gap: 4px; align-items: center; white-space: nowrap; }
.cfg-table th.cfg-cat { text-align: center; font-size: 0.68rem; width: 40px; text-transform: lowercase; }
.cfg-cell { text-align: center; cursor: pointer; font-weight: 700; user-select: none; width: 40px; }
.cfg-cell:hover { outline: 1px solid #00C6FF; }
.cfg-on { color: #34D399; }
.cfg-off { color: #FF5A5A; }
.cfg-unset { color: #54607a; }
.cfg-scope { font-family: var(--mono, monospace); font-size: 0.82rem; }
.cfg-spec { font-size: 0.7rem; opacity: 0.55; }
.cfg-addrow { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; }
.cfg-newcats { display: flex; gap: 14px; flex-wrap: wrap; margin: 10px 0; }
.cfg-newcat { font-size: 0.82rem; display: flex; gap: 5px; align-items: center; }
.btn-small { padding: 1px 8px; font-size: 0.95rem; line-height: 1.2; }
.cfg-del { color: #FF5A5A; }
.cfg-chips { display: flex; gap: 8px; flex-wrap: wrap; margin: 6px 0; }
.cfg-chip { padding: 3px 10px; border-radius: 12px; font-size: 0.78rem; border: 1px solid var(--border, #2a3344); }
.cfg-chip-on { background: rgba(52,211,153,0.14); border-color: #34D399; color: #34D399; }
.cfg-chip-off { opacity: 0.5; }
.cfg-conflict { color: #FFCE47; font-size: 0.85rem; }

/* Environment banner - v0.8.2 */
.env-banner {
  position: sticky; top: 0; z-index: 1000;
  display: flex; align-items: center; gap: 16px;
  padding: 6px 18px; font-size: 0.92rem;
  border-bottom: 2px solid currentColor;
}
.env-banner .env-label {
  font-weight: 900; font-size: 1.15rem; letter-spacing: 0.12em;
  color: #FF2A2A; text-transform: uppercase;
}
.env-banner .env-when { opacity: 0.85; font-size: 0.82rem; }
.env-banner .env-db { margin-left: auto; font-family: var(--mono, monospace); font-size: 0.8rem; opacity: 0.75; }
/* DEV - red text on a dark red tint */
.env-dev { background: rgba(255, 42, 42, 0.16); color: #FF6A6A; }
.env-dev .env-label { color: #FF2A2A; }
/* TEST - red text on an amber tint so it is visually distinct from DEV */
.env-test { background: rgba(255, 176, 32, 0.18); color: #FFB020; }
.env-test .env-label { color: #FF2A2A; }
/* LIVE - red on a darker band */
.env-live { background: rgba(180, 0, 0, 0.30); color: #FFD2D2; }
.env-live .env-label { color: #FF2A2A; }
.env-local { background: rgba(120,130,150,0.18); color: #9AA6BC; }
.env-local .env-label { color: #FF2A2A; }

/* ===================================================================
   Stream G - Add data (manual CRUD) view
   =================================================================== */
.ad-wrap { display: flex; flex-direction: column; gap: var(--sp-4); max-width: 860px; }
.ad-step { display: flex; flex-direction: column; gap: var(--sp-2); }
.ad-row { display: flex; gap: var(--sp-2); align-items: center; }
.ad-row > select.input { flex: 1; }
.ad-form { display: flex; flex-direction: column; gap: var(--sp-2);
  padding: var(--sp-3); border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface-2, rgba(127,127,127,0.05)); margin-top: var(--sp-1); }
.ad-form.hidden { display: none; }
.ad-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); }
.ad-grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--sp-2); }
.ad-scope-summary { min-height: 20px; font-size: 13px; display: flex; flex-wrap: wrap;
  gap: 6px; align-items: center; padding: var(--sp-2) 0; }
.ad-chip { display: inline-block; padding: 2px 10px; border-radius: 999px;
  background: var(--accent-soft, rgba(43,108,255,0.12)); color: var(--accent, #2b6cff);
  font-weight: 600; font-size: 12px; }
.ad-asset .ad-form, .ad-images .ad-form { background: var(--surface-2, rgba(127,127,127,0.05)); }
.ad-ai-choice { display: flex; flex-direction: column; gap: 4px; padding: var(--sp-2) 0; }
.ad-radio { display: flex; gap: 8px; align-items: center; font-size: 13px; cursor: pointer; }
.ad-msg { font-size: 12.5px; min-height: 16px; }
.ad-ok { color: var(--success, #1f9d55); }
.ad-err { color: var(--danger, #d64545); }
.ad-thumbs { display: flex; flex-wrap: wrap; gap: 8px; margin-top: var(--sp-2); }
.ad-thumb { width: 84px; height: 84px; object-fit: cover; border-radius: 6px;
  border: 1px solid var(--border); cursor: pointer; }
@media (max-width: 720px) {
  .ad-grid2, .ad-grid3 { grid-template-columns: 1fr; }
}

/* Stream G Part 1/2 - edit/archive controls in the Add-data view */
.ad-row .ad-edit, .ad-row .ad-archive {
  padding: 6px 9px; flex: 0 0 auto; line-height: 1;
}
.ad-row .ad-archive { color: var(--danger, #d64545); }
.ad-row button:disabled { opacity: 0.4; cursor: not-allowed; }
.ad-images .ad-form button.btn-secondary { margin-left: 8px; }

/* Stream C - Lifecycle & warranty edit card */
.lc-edit { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; }
.lc-field { display: flex; flex-direction: column; gap: 4px; font-size: 12px; }
.lc-field > span:first-child { color: var(--text-secondary); font-weight: 600; }
.lc-field-wide { grid-column: 1 / -1; }
.lc-actions { grid-column: 1 / -1; display: flex; align-items: center; gap: 10px; margin-top: 4px; }

/* Stream C - replaced-by asset picker (typeahead) */
.lc-picker { position: relative; display: flex; align-items: center; gap: 6px; }
.lc-picker > .input { flex: 1; }
.lc-picker-clear { background: none; border: none; cursor: pointer; color: var(--text-secondary); font-size: 14px; padding: 2px 6px; }
.lc-picker-clear:hover { color: var(--text-primary); }
.lc-picker-results { position: absolute; top: 100%; left: 0; right: 0; z-index: 40; background: var(--surface, #fff); border: 1px solid var(--border, #d0d0d8); border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,.12); max-height: 260px; overflow-y: auto; margin-top: 2px; }
.lc-picker-item { padding: 7px 10px; font-size: 12.5px; cursor: pointer; border-bottom: 1px solid var(--border, #eee); }
.lc-picker-item:last-child { border-bottom: none; }
.lc-picker-item:hover { background: var(--accent-soft, #eef2ff); }
.lc-picker-empty { padding: 8px 10px; font-size: 12px; color: var(--text-secondary); }
