:root {
  color-scheme: light;
  --bg: #d8d2c8;
  --panel: #e8e2d8;
  --panel-soft: #ded8cd;
  --text: #17202c;
  --muted: #625f58;
  --line: #c5baaa;
  --line-strong: #b4a796;
  --accent: #0e7490;
  --accent-dark: #155e75;
  --danger: #b42318;
  --warning: #b45309;
  --success: #087443;
  --shadow: 0 1px 2px rgba(16, 24, 40, 0.06);
  /* Compatibility tokens used by older ASM modules. Keeping them mapped to
     the canonical palette prevents their dark fallback values leaking into
     the light theme. */
  --border: var(--line);
  --fg: var(--text);
  --bg2: var(--panel-soft);
  --bg-card: var(--panel);
  --card-bg: var(--panel);
  --input-bg: var(--panel);
  --text-muted: var(--muted);
}

:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #0b1220;
  --panel: #111827;
  --panel-soft: #172033;
  --text: #e5eef8;
  --muted: #9aa8bc;
  --line: #293449;
  --line-strong: #3a4860;
  --accent: #22a6c7;
  --accent-dark: #67d3ea;
  --danger: #f87171;
  --warning: #fbbf24;
  --success: #34d399;
  --shadow: 0 1px 2px rgba(0, 0, 0, 0.34);
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  min-height: 100vh;
  background:
    linear-gradient(180deg, #cec7bd 0, #ddd7cd 280px, var(--bg) 100%);
  color: var(--text);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

:root[data-theme="dark"] body {
  background:
    linear-gradient(180deg, #07111f 0, #0b1220 280px, var(--bg) 100%);
}

.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 18px clamp(16px, 4vw, 48px);
  background: #111827;
  color: #ffffff;
  border-bottom: 3px solid #0e7490;
}

.topbar-actions {
  display: flex;
  align-items: center;
  gap: 10px;
}

.topbar-actions span {
  color: #d7eef4;
  font-size: 0.9rem;
  font-weight: 800;
}

.theme-toggle {
  min-width: 112px;
}

.eyebrow {
  margin: 0 0 4px;
  color: #93c5fd;
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
}

h1,
h2 {
  margin: 0;
  letter-spacing: 0;
}

h1 {
  font-size: clamp(1.45rem, 2.4vw, 2rem);
}

h2 {
  font-size: 0.98rem;
}

.layout {
  width: 100%;
  margin: 0;
  padding: 14px clamp(14px, 3vw, 36px) 42px;
}

.app-shell {
  display: grid;
  grid-template-columns: 190px minmax(0, 1fr);
  width: min(1760px, 100%);
  margin: 0 auto;
  transition: grid-template-columns 0.22s ease;
}
.app-shell.sidebar-collapsed {
  grid-template-columns: 42px minmax(0, 1fr);
}

.sidebar {
  position: sticky;
  top: 0;
  align-self: start;
  height: calc(100vh - 0px);
  padding: 10px 8px;
  border-right: 1px solid var(--line);
  background: rgba(248, 250, 252, 0.86);
  overflow: hidden;
  transition: padding 0.22s ease;
}
.sidebar.sidebar-collapsed {
  padding: 10px 6px;
}
.sidebar.sidebar-collapsed nav {
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
  transition: opacity 0.15s ease, visibility 0.15s ease;
}
.sidebar nav {
  opacity: 1;
  transition: opacity 0.18s ease;
  overflow-y: auto;
  max-height: calc(100vh - 60px);
  scrollbar-width: thin;
  scrollbar-color: var(--line) transparent;
}

/* Sidebar toggle button */
.sidebar-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  margin: 0 0 8px auto;
  padding: 0;
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 5px;
  cursor: pointer;
  color: var(--muted, #64748b);
  font-size: 1rem;
  line-height: 1;
  transition: background 0.12s, color 0.12s;
  flex-shrink: 0;
}
.sidebar-toggle:hover {
  background: var(--panel-soft, #f3f4f6);
  color: var(--fg, #0f172a);
}
.sidebar.sidebar-collapsed .sidebar-toggle {
  margin: 0 auto;
}

/* Nav groups accordion */
.nav-group {
  margin-top: 2px;
  min-width: 0;
}
.nav-group-hdr {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .28rem .6rem;
  background: transparent;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  color: var(--muted, #64748b);
  font-size: .72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .05em;
  transition: background 0.12s, color 0.12s;
}
.nav-group-hdr:hover {
  background: var(--panel-soft, #f3f4f6);
  color: var(--fg, #0f172a);
}
.ngc {
  font-size: .6rem;
  transition: transform 0.18s ease;
  flex-shrink: 0;
}
.nav-group:not(.open) .ngc {
  transform: rotate(-90deg);
}
.nav-group-body {
  overflow: hidden;
  max-height: 760px;
  transition: max-height 0.22s ease;
}
.nav-group-body a {
  margin-left: 4px;
}
.nav-group:not(.open) .nav-group-body {
  max-height: 0;
}

.sidebar nav {
  display: grid;
  gap: 2px;
}

.sidebar a {
  display: flex;
  align-items: center;
  min-height: 34px;
  border: 1px solid transparent;
  border-radius: 5px;
  padding: 0 10px;
  color: #334155;
  font-size: 0.86rem;
  font-weight: 800;
  text-decoration: none;
}

.sidebar a:hover {
  border-color: var(--line);
  background: #ffffff;
  color: var(--accent-dark);
}

.upload-form {
  display: grid;
  grid-template-columns: minmax(180px, 260px) minmax(220px, 1fr) auto;
  align-items: center;
  gap: 8px;
  width: min(720px, 100%);
}

.upload-form input[type="file"] {
  min-height: 36px;
  padding: 6px 8px;
}

.url-import-form {
  grid-template-columns: minmax(260px, 1fr) auto;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
}

/* ── URL deduplication bar ──────────────────────────────────── */
.dedupe-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  background: var(--panel-soft);
}

.dedupe-bar-left {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.dedupe-label {
  font-size: 0.84rem;
  font-weight: 800;
  color: var(--muted);
  white-space: nowrap;
}

.dedupe-bar label {
  display: flex;
  align-items: center;
  gap: 5px;
  color: var(--muted);
  font-size: 0.8rem;
  font-weight: 700;
  white-space: nowrap;
}

.dedupe-bar select {
  width: auto;
  min-height: 30px;
  padding: 3px 7px;
  font-size: 0.82rem;
}

:root[data-theme="dark"] .dedupe-bar {
  background: var(--panel-soft);
}

.surface-forms {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  background: var(--panel);
}

.surface-form {
  display: grid;
  grid-template-columns: minmax(160px, 1fr) minmax(150px, 0.8fr) minmax(180px, 1fr) auto;
  gap: 8px;
  align-items: center;
}

.surface-form:last-child {
  grid-template-columns: minmax(180px, 1fr) minmax(180px, 1fr) auto auto;
}

.checkbox-inline {
  min-height: 36px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  white-space: nowrap;
  color: var(--muted);
  font-size: 0.9rem;
}

.indicio-form {
  display: grid;
  grid-template-columns: minmax(180px, 260px) 120px 130px minmax(260px, 1fr) minmax(260px, 1fr) auto;
  align-items: stretch;
  gap: 8px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  background: var(--panel);
}

.indicio-form textarea {
  min-height: 52px;
}

.subheader {
  border-top: 1px solid var(--line);
  background: var(--panel-soft);
}

.job-list {
  display: grid;
  gap: 8px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  background: var(--panel);
}

.job-row {
  display: grid;
  grid-template-columns: minmax(220px, 1.2fr) 110px minmax(130px, 0.8fr) 90px 90px minmax(120px, 0.8fr);
  align-items: center;
  gap: 10px;
  min-height: 54px;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 8px 12px;
  background: var(--panel-soft);
  transition: border-color .15s;
}
.job-row:hover {
  border-color: var(--accent);
}

.job-main {
  display: grid;
  gap: 3px;
  min-width: 0;
}

.job-main strong,
.job-main span,
.job-row small {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.job-main span,
.job-row small,
.job-meta span {
  color: var(--muted);
  font-size: 0.76rem;
  font-weight: 700;
}

.status-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 24px;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 0 8px;
  background: #ffffff;
  color: var(--muted);
  font-size: 0.72rem;
  font-weight: 900;
  text-transform: uppercase;
}

.status-queued,
.status-uploaded {
  background: #e0f2fe;
  border-color: #bae6fd;
  color: #075985;
}

.status-running {
  background: #fef3c7;
  border-color: #fde68a;
  color: #92400e;
}

.status-analyzed {
  background: #dcfce7;
  border-color: #86efac;
  color: var(--success);
}

.status-failed {
  background: #fee2e2;
  border-color: #fecaca;
  color: #991b1b;
}

.job-progress {
  position: relative;
  overflow: hidden;
  height: 8px;
  border-radius: 999px;
  background: #e2e8f0;
}

.job-progress span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--accent);
}

.job-meta {
  display: grid;
  gap: 1px;
}

.job-meta strong {
  font-size: 0.95rem;
  line-height: 1;
}

.global-filters {
  display: grid;
  grid-template-columns: minmax(260px, 420px) auto 1fr;
  align-items: end;
  gap: 10px;
  margin-bottom: 10px;
  padding: 10px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 6px;
  box-shadow: var(--shadow);
}

.button.secondary {
  border: 1px solid var(--line);
  background: var(--panel);
  color: var(--text);
}

.button.secondary:hover {
  background: var(--panel-soft);
  border-color: var(--accent);
}

.stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: .5rem;
  margin-bottom: .8rem;
}

.stats.stats-grouped {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.stat-group {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: 6px;
}

.stat-group-label {
  grid-column: 1 / -1;
  margin: 0;
  padding: 2px 6px;
  font-size: 0.68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--muted);
  border-bottom: 1px solid var(--line);
}

.stat-group[data-group="recon"] .stat-group-label { color: #2563eb; border-color: #2563eb33; }
.stat-group[data-group="scanners"] .stat-group-label { color: #dc2626; border-color: #dc262633; }
.stat-group[data-group="intelligence"] .stat-group-label { color: #d97706; border-color: #d9770633; }
.stat-group[data-group="findings"] .stat-group-label { color: #16a34a; border-color: #16a34a33; }
.stat-group[data-group="operations"] .stat-group-label { color: #8b5cf6; border-color: #8b5cf633; }
.stat-group[data-group="backlogs"] .stat-group-label { color: #e11d48; border-color: #e11d4833; }
.stat-group[data-group="vps"] .stat-group-label { color: #0891b2; border-color: #0891b233; }
.stat-group[data-group="now"] .stat-group-label { color: #f59e0b; border-color: #f59e0b55; }

/* Toggle de ceros: el dashboard crece con cada scanner nuevo; por defecto solo
   se ven las tarjetas con señal. ponytail: una clase, sin re-render. */
.stats-toolbar { display: flex; align-items: center; gap: 10px; }
.stats-toolbar-hint { font-size: .7rem; color: var(--muted); }
.stats-grouped.hide-zeros article.is-zero { display: none; }
/* En "Ahora" un cero también informa (cola vacía) → nunca se oculta. */
.stats-grouped.hide-zeros .stat-group-now article.is-zero { display: block; }
.stats-grouped.hide-zeros .stat-group:not([data-group="now"]):not(:has(article:not(.is-zero))) { display: none; }
.stat-group-now { padding: 4px; border: 1px solid #f59e0b44; border-radius: 10px; background: #f59e0b0a; }
.stat-group-now article span { font-size: 1.45rem; }

.stats article,
.tables,
.analysis-panel {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: var(--shadow);
}

.stats article {
  position: relative;
  overflow: hidden;
  padding: 10px 12px;
  border-left: 3px solid var(--stat-group-color, #94a3b8);
  border-radius: 8px;
  transition: border-color .15s, box-shadow .15s;
}
.stats article:hover {
  box-shadow: 0 2px 6px rgba(0,0,0,.04);
}

.stat-group[data-group="recon"]        { --stat-group-color: #2563eb; }
.stat-group[data-group="scanners"]     { --stat-group-color: #dc2626; }
.stat-group[data-group="intelligence"] { --stat-group-color: #d97706; }
.stat-group[data-group="findings"]     { --stat-group-color: #16a34a; }
.stat-group[data-group="operations"]   { --stat-group-color: #8b5cf6; }
.stat-group[data-group="backlogs"]    { --stat-group-color: #e11d48; }
.stat-group[data-group="vps"]         { --stat-group-color: #0891b2; }

.risk-stat-alert {
  border-color: #ef4444 !important;
  border-left-color: #ef4444 !important;
  background: color-mix(in srgb, #ef4444 12%, var(--panel)) !important;
  animation: pulse-alert 2s ease-in-out infinite;
}
.risk-stat-alert span { color: #ef4444 !important; }
.risk-stat-warn {
  border-color: #f59e0b !important;
  border-left-color: #f59e0b !important;
  background: color-mix(in srgb, #f59e0b 10%, var(--panel)) !important;
}
.risk-stat-warn span { color: #d97706 !important; }
@keyframes pulse-alert { 0%,100% { opacity: 1; } 50% { opacity: .8; } }

.stats span {
  display: block;
  font-size: 1.25rem;
  font-weight: 800;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  letter-spacing: -.01em;
}

.stats .scanner-total {
  display: inline;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--muted);
  opacity: .65;
}

.stats p {
  margin: 3px 0 0;
  color: var(--muted);
  font-size: 0.76rem;
  font-weight: 800;
  text-transform: uppercase;
}

.stats article[data-nav],
.stats article[data-alert-type],
.stats article[data-url-source] {
  cursor: pointer;
  transition: border-left-color .15s, box-shadow .15s, transform .1s;
}

.stats article[data-nav]:hover,
.stats article[data-alert-type]:hover,
.stats article[data-url-source]:hover {
  border-left-color: var(--stat-group-color, var(--accent, #6366f1));
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--stat-group-color, var(--accent, #6366f1)) 20%, transparent);
  transform: translateY(-1px);
}

.risk-stat {
  border-color: color-mix(in srgb, var(--stat-group-color, #f97316) 25%, transparent);
  border-left-color: var(--stat-group-color, #f97316) !important;
  background: color-mix(in srgb, var(--stat-group-color, #f97316) 8%, var(--panel)) !important;
}

.risk-stat[data-nav]:hover {
  border-left-color: var(--stat-group-color, #ea580c) !important;
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--stat-group-color, #f97316) 25%, transparent);
}

.risk-stat span {
  color: color-mix(in srgb, var(--stat-group-color, #f97316) 80%, #000);
}

/* ── Dashboard charts ─────────────────────────────────────── */
.dash-charts {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: .8rem;
  margin-bottom: 1rem;
}
@media (max-width: 1100px) { .dash-charts { grid-template-columns: 1fr 1fr; } .dash-card-wide { grid-column: 1 / -1; } }
@media (max-width: 720px)  { .dash-charts { grid-template-columns: 1fr; } }

/* Tabla de alertas plegable (el dashboard prioriza gráficas/cards sobre tablas) */
.dash-table-collapse { margin-top: 2px; }
.dash-table-collapse > summary {
  cursor: pointer;
  font-size: .76rem;
  font-weight: 600;
  color: var(--muted);
  padding: 4px 2px;
  list-style: none;
  user-select: none;
}
.dash-table-collapse > summary::-webkit-details-marker { display: none; }
.dash-table-collapse > summary::before { content: '▾ '; }
.dash-table-collapse:not([open]) > summary::before { content: '▸ '; }

.dash-card {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 12px;
  box-shadow: var(--shadow);
  padding: 14px 16px;
  min-height: 168px;
  max-height: 420px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  transition: box-shadow .15s, border-color .15s;
}
.dash-card:hover {
  box-shadow: 0 4px 12px rgba(0,0,0,.06);
  border-color: var(--line-strong);
}
.dash-card header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--line);
}
.dash-card h3 {
  margin: 0;
  font-size: .78rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .03em;
  color: var(--muted);
}
.dash-legend { font-size: .68rem; color: var(--muted); display: flex; align-items: center; gap: 12px; }
.dash-legend > span { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.dash-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; }
.dash-legend .is-unavailable { opacity: .48; }
.dash-legend i.lg-subs { background: #2563eb; }
.dash-legend i.lg-urls { background: #d97706; }
.dash-legend i.lg-httpx { background: #16a34a; }
.dash-chart-body { flex: 1; display: flex; flex-direction: column; justify-content: center; }

.dash-svg { width: 100%; height: 280px; display: block; }
.dash-discovery-svg {
  height: var(--discovery-chart-height, 300px);
  overflow: visible;
  shape-rendering: geometricPrecision;
  text-rendering: optimizeLegibility;
}
.discovery-grid-line {
  stroke: color-mix(in srgb, var(--line-strong) 60%, transparent);
  stroke-width: 1;
  stroke-dasharray: 3 5;
}
.discovery-axis-label {
  fill: var(--muted);
  font-family: inherit;
  font-size: 10.5px;
  font-weight: 650;
  font-variant-numeric: tabular-nums;
}
.discovery-axis-httpx { fill: #16a34a; }
.discovery-bar { transition: opacity .15s ease, filter .15s ease; }
.discovery-bar-subs { fill: #2563eb; opacity: .88; }
.discovery-bar-urls { fill: #d97706; opacity: .82; }
.discovery-scan-area { fill: color-mix(in srgb, #16a34a 12%, transparent); pointer-events: none; }
.discovery-scan-line {
  fill: none;
  stroke: #16a34a;
  stroke-width: 2.25;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}
.discovery-scan-point {
  fill: var(--panel);
  stroke: #16a34a;
  stroke-width: 1.75;
  pointer-events: none;
}
.discovery-hit-area { fill: transparent; cursor: crosshair; }
.dash-discovery-svg:hover .discovery-bar { opacity: .7; }
.dash-discovery-svg .discovery-bar:hover { opacity: 1; filter: brightness(1.08); }
.dash-axis { display: flex; justify-content: center; align-items: center; font-size: .72rem; color: var(--muted); margin-top: 8px; gap: 4px; }
.dash-peaks b { font-variant-numeric: tabular-nums; font-weight: 800; }
.dash-comparison { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 7px 12px; margin-top: 7px; font-size: .69rem; color: var(--muted); }
.dash-comparison-label { font-weight: 700; }
.discovery-delta { display: inline-flex; align-items: center; gap: 4px; font-variant-numeric: tabular-nums; }
.discovery-delta i { width: 6px; height: 6px; border-radius: 50%; }
.discovery-delta-up b { color: var(--ok, #16a34a); }
.discovery-delta-down b { color: var(--danger, #dc2626); }
.discovery-delta-flat b { color: var(--muted); }
.dash-partial-badge, .dash-scope-badge { border: 1px solid var(--line); border-radius: 999px; padding: 2px 7px; background: color-mix(in srgb, var(--panel) 78%, var(--muted) 6%); }
.dash-scope-badge { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-funnel-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.dash-funnel-lane { min-width: 0; }
.dash-funnel-lane h4 { margin: 0 0 8px; color: var(--muted); font-size: .7rem; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; }
.dash-funnel-steps { display: grid; grid-template-columns: repeat(var(--funnel-columns, 5), minmax(0, 1fr)); gap: 6px; }
.dash-funnel-lane:last-child .dash-funnel-steps { --funnel-columns: 3; }
.dash-funnel-step { position: relative; min-width: 0; overflow: hidden; border: 1px solid var(--line); border-radius: 9px; padding: 9px 8px 8px; background: color-mix(in srgb, var(--panel) 92%, var(--funnel-color) 8%); }
.dash-funnel-step::after { content: ''; position: absolute; left: 0; right: calc(100% - var(--funnel-ratio)); bottom: 0; height: 3px; background: var(--funnel-color); }
.dash-funnel-step span, .dash-funnel-step small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-funnel-step span { color: var(--muted); font-size: .65rem; font-weight: 700; }
.dash-funnel-step b { display: block; margin: 4px 0 2px; color: var(--text); font-size: 1.08rem; font-variant-numeric: tabular-nums; }
.dash-funnel-step small { color: var(--muted); font-size: .58rem; }
.dash-funnel-note { margin: 8px 0 0; color: var(--muted); font-size: .63rem; text-align: center; }
.dash-platform-results { display: flex; flex-wrap: wrap; justify-content: center; gap: 5px; margin-top: 7px; }
.dash-platform-result { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--line); border-left: 3px solid var(--platform-color); border-radius: 6px; padding: 3px 6px; color: var(--muted); font-size: .62rem; font-variant-numeric: tabular-nums; }
.dash-platform-result b { color: var(--text); }
@media (max-width: 820px) {
  .dash-funnel-grid { grid-template-columns: 1fr; }
}
@media (max-width: 520px) {
  .dash-funnel-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dash-funnel-lane:last-child .dash-funnel-steps { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.dash-svg rect:hover { opacity: 1 !important; filter: brightness(1.15); }
.dash-svg title { font-size: 11px; }

.dash-bars { display: flex; flex-direction: column; gap: 10px; }
.dash-bar-row { display: grid; grid-template-columns: 84px 1fr 50px; align-items: center; gap: 10px; }
.dash-bar-label { font-size: .76rem; color: var(--text); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-bar-track { background: color-mix(in srgb, var(--muted) 10%, transparent); border-radius: 8px; height: 20px; overflow: hidden; position: relative; }
.dash-bar-fill { display: block; height: 100%; border-radius: 8px; min-width: 2px; transition: width .5s cubic-bezier(.4,0,.2,1); }
.dash-bar-val { font-size: .8rem; font-weight: 800; text-align: right; font-variant-numeric: tabular-nums; }

.dash-donut-wrap { display: flex; align-items: center; gap: 16px; }
.dash-donut { width: 112px; height: 112px; flex-shrink: 0; }
.dash-donut-total { font-size: 20px; font-weight: 800; fill: var(--text); }
.dash-donut-sub { font-size: 9px; fill: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.dash-legend-list { display: flex; flex-direction: column; gap: 5px; font-size: .76rem; }
.dash-leg-row { display: flex; align-items: center; gap: 8px; color: var(--text); }
.dash-leg-row i { width: 10px; height: 10px; border-radius: 3px; flex-shrink: 0; }
.dash-leg-row b { margin-left: auto; font-variant-numeric: tabular-nums; font-weight: 800; }

.analysis-panel {
  margin-bottom: 10px;
  overflow: hidden;
}

.analysis-panel.muted-panel {
  opacity: 0.82;
}

.analysis-status {
  color: var(--muted);
  font-size: 0.78rem;
  font-weight: 800;
  text-transform: uppercase;
}

.analysis-body {
  display: grid;
  gap: 10px;
  padding: 10px;
}

.analysis-body h3 {
  margin: 0 0 6px;
  color: var(--muted);
  font-size: 0.75rem;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.analysis-metrics {
  display: grid;
  grid-template-columns: repeat(9, minmax(0, 1fr));
  gap: 8px;
}

.analysis-metrics article {
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 9px 10px;
  background: var(--panel-soft);
}

.analysis-metrics span {
  display: block;
  font-size: 1.08rem;
  font-weight: 800;
  line-height: 1.1;
}

.analysis-metrics p {
  margin: 3px 0 0;
  color: var(--muted);
  font-size: 0.74rem;
  font-weight: 800;
  text-transform: uppercase;
}

.analysis-columns {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.compact-list {
  display: grid;
  gap: 5px;
}

.compact-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 30px;
  border: 1px solid var(--line);
  border-radius: 5px;
  padding: 5px 9px;
  background: var(--panel);
  font-size: 0.86rem;
}

.compact-row span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.compact-row strong {
  flex: 0 0 auto;
}

.compact-table {
  max-height: 320px;
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
}

.compact-table table {
  min-width: 900px;
}

.url-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px 12px;
}

.url-list a {
  overflow: hidden;
  color: var(--accent-dark);
  font-size: 0.84rem;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.empty-inline {
  margin: 0;
  padding: 1.5rem 0;
  text-align: center;
  color: var(--muted);
  font-weight: 600;
  font-size: .88rem;
}

label {
  display: grid;
  gap: 6px;
  color: var(--muted);
  font-size: 0.87rem;
  font-weight: 700;
}

input,
select,
textarea {
  width: 100%;
  min-height: 36px;
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 7px 10px;
  color: var(--text);
  font: inherit;
  font-size: .88rem;
  background: var(--panel);
  transition: border-color 0.15s, box-shadow 0.15s;
}

textarea {
  resize: vertical;
}

input:focus,
select:focus,
textarea:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(14, 116, 144, 0.12);
}

input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 1px;
}

.split {
  display: grid;
  grid-template-columns: 1fr 110px;
  gap: 10px;
}

.checkbox {
  display: flex;
  align-items: center;
  gap: 8px;
}

.checkbox input {
  width: 16px;
  min-height: 16px;
}

.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 36px;
  border: 0;
  border-radius: 7px;
  padding: 0 14px;
  background: var(--accent);
  color: #ffffff;
  font-size: .84rem;
  font-weight: 700;
  cursor: pointer;
  text-decoration: none;
  transition: background-color 0.15s, transform 0.1s, box-shadow 0.15s;
}

.button:hover {
  background: var(--accent-dark);
  box-shadow: 0 2px 6px rgba(14, 116, 144, .15);
}

.button:active {
  transform: scale(0.97);
}

.button.ghost {
  border: 1px solid rgba(255, 255, 255, 0.3);
  background: transparent;
}

.tables {
  margin-top: 10px;
  overflow: hidden;
}

.table-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 14px;
  border-bottom: 1px solid var(--line);
  background: var(--panel-soft);
}
.table-header h2 {
  font-size: 1.05rem;
  font-weight: 800;
  margin: 0;
  letter-spacing: -.01em;
}

.table-tools {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  width: min(560px, 100%);
}

.table-tools input {
  min-width: 240px;
}

.table-tools select {
  width: 86px;
}

/* Inputs inside filter rows — sin contorno blanco sobre el header */
.table-tools input,
.table-tools select {
  background: var(--panel);
  border-color: var(--line);
  transition: border-color 0.15s, box-shadow 0.15s;
}

.table-tools input:focus,
.table-tools select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(14, 116, 144, 0.12);
}

.section-wrap { min-width: 0; overflow: hidden; }
.table-wrap {
  overflow-x: auto;
  max-height: 520px;
}
.ua-table td:nth-child(4) { max-width: 420px; overflow: hidden; text-overflow: ellipsis; word-break: break-word; }
.ua-table td:nth-child(4) small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 400px; }
.ua-table td:last-child { white-space: nowrap; }

.ua-filter-bar { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.ua-filter-row { display: flex; align-items: center; gap: 8px; }
.ua-filter-group { display: flex; flex-wrap: wrap; gap: 4px; }
.ua-row { transition: background .15s; }
.ua-row:hover { background: color-mix(in srgb, var(--accent) 6%, transparent); }
.ua-host { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: .75rem; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 350px; }
.ua-title { display: block; font-weight: 600; font-size: .84rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 420px; }
.ua-evidence { display: block; color: var(--muted); font-size: .72rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 400px; }

.alerts-workspace {
  display: grid;
  gap: 14px;
  overflow: visible;
}
.alerts-hero {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 18px;
  padding: 18px 20px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(14,116,144,.12), rgba(20,184,166,.07)),
    var(--card-bg);
  box-shadow: 0 14px 34px rgba(15,23,42,.08);
}
.alerts-hero h2 {
  margin: 2px 0 4px;
  font-size: clamp(1.35rem, 2vw, 2rem);
  line-height: 1.1;
}
.alerts-hero .section-subtitle {
  max-width: 720px;
  margin: 0;
  color: var(--muted);
}
.alerts-hero-status {
  flex: 0 0 auto;
  align-self: center;
  padding: 7px 12px;
  border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border));
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 10%, var(--card-bg));
  color: var(--accent-strong, var(--accent));
  font-size: .78rem;
  white-space: nowrap;
}
.alerts-summary-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
}
.alerts-summary-card {
  min-width: 0;
  padding: 12px 14px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--card-bg);
  box-shadow: 0 10px 24px rgba(15,23,42,.06);
}
.alerts-summary-card span,
.alerts-summary-card small {
  display: block;
  color: var(--muted);
  font-size: .72rem;
}
.alerts-summary-card span {
  font-weight: 800;
  text-transform: uppercase;
}
.alerts-summary-card strong {
  display: block;
  margin: 4px 0 2px;
  font-size: 1.32rem;
  line-height: 1.05;
  overflow-wrap: anywhere;
}
.alerts-filter-panel {
  padding: 12px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--panel-soft);
}
.alerts-filter-panel .toggle-label {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 36px;
  padding: 0 10px;
  font-size: .78rem;
  font-weight: 700;
  color: var(--muted);
  white-space: nowrap;
}
.alerts-filter-panel .toggle-label input {
  width: 16px;
  height: 16px;
  min-height: 16px;
  flex: 0 0 auto;
}
.alerts-table-wrap {
  max-height: calc(100vh - 360px);
  min-height: 260px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--card-bg);
}
.alerts-table-wrap .ua-table {
  min-width: 980px;
}
.alerts-table-wrap .ua-table thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--panel-soft);
}
.alerts-table-wrap .ua-row {
  border-left: 4px solid var(--ua-row-accent, var(--accent));
  cursor: pointer;
}
.ua-type-chip {
  display: inline-grid;
  gap: 1px;
  min-width: 72px;
  padding: 5px 7px;
  border: 1px solid var(--border);
  border-radius: 7px;
  background: var(--panel-soft);
  font-size: .68rem;
  line-height: 1.15;
  color: var(--muted);
}
.ua-type-chip b {
  color: var(--text);
  font-size: .76rem;
  letter-spacing: .04em;
}
.ua-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  white-space: normal;
}
.btn-xs {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  min-width: 34px;
  justify-content: center;
  padding: 3px 7px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--card-bg);
  color: var(--text);
  font-size: .72rem;
  font-weight: 600;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(15,23,42,.06);
  transition: border-color .15s, color .15s;
}
.btn-xs:hover { border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); color: var(--accent); }
.btn-xs.btn-success { color: var(--success); border-color: color-mix(in srgb, var(--success) 28%, var(--border)); }
.btn-xs.btn-success:hover { background: color-mix(in srgb, var(--success) 8%, var(--card-bg)); border-color: var(--success); }
.btn-xs.btn-warn { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 28%, var(--border)); }
.btn-xs.btn-warn:hover { background: color-mix(in srgb, var(--warning) 8%, var(--card-bg)); border-color: var(--warning); }
.btn-danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 30%, var(--border)); }
.btn-danger:hover { background: color-mix(in srgb, var(--danger) 8%, var(--card-bg)); border-color: var(--danger); }
.ua-detail-modal {
  z-index: 2400;
  padding: 18px;
}
.ua-detail-modal .ua-detail-dialog {
  width: min(1120px, calc(100vw - 36px));
  max-height: min(92dvh, 980px);
  border-radius: 8px;
}

@media (max-width: 920px) {
  .alerts-hero {
    display: grid;
  }
  .alerts-hero-status {
    justify-self: start;
  }
  .alerts-summary-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 560px) {
  .alerts-summary-grid {
    grid-template-columns: 1fr;
  }
  .alerts-filter-panel .ua-filter-row {
    align-items: stretch;
    flex-direction: column;
  }
  .alerts-table-wrap {
    overflow: visible;
    max-height: none;
    border: 0;
    background: transparent;
  }
  .alerts-table-wrap .ua-table {
    display: block;
    min-width: 0;
  }
  .alerts-table-wrap .ua-table thead {
    display: none;
  }
  .alerts-table-wrap .ua-table tbody {
    display: grid;
    gap: 10px;
  }
  .alerts-table-wrap .ua-table tr.ua-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 8px;
    width: 100%;
    padding: 12px;
    border: 1px solid var(--border);
    border-left: 4px solid var(--ua-row-accent, var(--accent));
    border-radius: 8px;
    background: var(--card-bg);
  }
  .alerts-table-wrap .ua-table td {
    display: grid;
    grid-template-columns: 78px minmax(0, 1fr);
    gap: 10px;
    width: 100%;
    padding: 0;
    border: 0;
  }
  .alerts-table-wrap .ua-table td::before {
    content: attr(data-label);
    color: var(--muted);
    font-size: .68rem;
    font-weight: 800;
    text-transform: uppercase;
  }
  .alerts-table-wrap .ua-table td[data-label="Detalle"] {
    grid-template-columns: 1fr;
  }
  .alerts-table-wrap .ua-table td[data-label="Detalle"]::before {
    display: none;
  }
  .alerts-table-wrap .ua-table td[data-label="Acciones"] {
    grid-template-columns: 1fr;
  }
  .alerts-table-wrap .ua-table td[data-label="Acciones"]::before {
    display: none;
  }
  .ua-host,
  .ua-title,
  .ua-evidence {
    max-width: 100%;
  }
}

table {
  width: 100%;
  border-collapse: collapse;
  min-width: 880px;
}

th,
td {
  padding: 8px 10px;
  border-bottom: 1px solid var(--line);
  text-align: left;
  vertical-align: middle;
}

th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--panel-soft);
  color: var(--muted);
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .03em;
  white-space: nowrap;
}

tr:hover td {
  background: rgba(14, 116, 144, 0.03);
}
tr:last-child td { border-bottom: none; }

.todo-prio { font-size:.78em;font-weight:600;padding:2px 8px;border-radius:4px }
.prio-urgente { background:#fef2f2;color:#dc2626 }
.prio-alta    { background:#fff7ed;color:#ea580c }
.prio-media   { background:#fefce8;color:#a16207 }
.prio-baja    { background:#f1f5f9;color:#64748b }
@media (prefers-color-scheme: dark) {
  .prio-urgente { background:#450a0a;color:#fca5a5 }
  .prio-alta    { background:#431407;color:#fdba74 }
  .prio-media   { background:#422006;color:#fcd34d }
  .prio-baja    { background:#1e293b;color:#94a3b8 }
}

.sort-button {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: 0;
  padding: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  font-weight: 800;
  text-transform: uppercase;
  cursor: pointer;
}

.sort-button::after {
  content: "";
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  opacity: 0.28;
}

.sort-button[data-dir="asc"]::after {
  border-bottom: 6px solid currentColor;
  opacity: 0.9;
}

.sort-button[data-dir="desc"]::after {
  border-top: 6px solid currentColor;
  opacity: 0.9;
}

.sort-button.active {
  color: var(--accent-dark);
}

td a {
  display: block;
  margin-top: 3px;
  color: var(--accent-dark);
  font-size: 0.8rem;
  font-weight: 700;
}

td small {
  display: block;
  max-width: 680px;
  margin-top: 4px;
  color: var(--muted);
  font-size: 0.76rem;
  line-height: 1.35;
  white-space: pre-wrap;
}

.badge {
  display: inline-flex;
  align-items: center;
  min-height: 22px;
  border-radius: 6px;
  padding: 2px 8px;
  background: var(--panel-soft);
  border: 1px solid var(--line);
  color: var(--muted);
  font-size: 0.73rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .02em;
}

.badge.alive {
  background: #dcfce7;
  color: var(--success);
}

.risk-alto {
  background: #fee2e2;
  color: #991b1b;
  border: 1px solid #fecaca;
}

.risk-count-button {
  cursor: pointer;
  font-family: inherit;
}

.risk-count-button:hover,
.risk-count-button:focus-visible {
  filter: brightness(0.97);
  text-decoration: underline;
}

.risk-medio {
  background: #ffedd5;
  color: #9a3412;
  border: 1px solid #fed7aa;
}

.risk-bajo {
  background: #e0f2fe;
  color: #075985;
  border: 1px solid #bae6fd;
}

.risk-table .table-header {
  border-bottom-color: #fed7aa;
  background: #fff7ed;
}

.risk-table {
  border-color: #fed7aa;
}

#risks,
#takeovers,
#indicios,
#info-leaks,
#surface,
#overview,
#burp,
#urls {
  scroll-margin-top: 14px;
}

/* ── Takeover section ────────────────────────────────────── */
#takeovers { margin-top: 10px; }

.takeover-section { border-color: var(--line-strong); }

tr.row-fp td {
  opacity: 0.45;
}

tr.row-confirmed td {
  background: rgba(8, 116, 67, 0.04);
}

:root[data-theme="dark"] tr.row-confirmed td {
  background: rgba(52, 211, 153, 0.06);
}

.muted-block {
  display: block;
  color: var(--muted);
  font-size: 0.76rem;
  font-weight: 700;
}

.monospace {
  font-family: ui-monospace, monospace;
  font-size: 0.78rem;
}

.indicio-text {
  max-width: 520px;
}

.indicio-state-activo {
  background: #e0f2fe;
  border-color: #bae6fd;
  color: #075985;
}

.indicio-state-revisando {
  background: #fef3c7;
  border-color: #fde68a;
  color: #92400e;
}

.indicio-state-validado {
  background: #dcfce7;
  border-color: #86efac;
  color: var(--success);
}

.indicio-state-descartado {
  background: #f1f5f9;
  color: #64748b;
}

.severity-info {
  background: #edf2f7;
  color: #475569;
}

.severity-bajo {
  background: #e0f2fe;
  color: #075985;
}

.severity-medio {
  background: #fef3c7;
  color: #92400e;
}

.severity-alto {
  background: #ffedd5;
  color: #9a3412;
}

.severity-critico {
  background: #fee2e2;
  color: #991b1b;
}

.link-button {
  border: 0;
  background: transparent;
  color: var(--danger);
  font: inherit;
  font-weight: 800;
  cursor: pointer;
}

.state-select {
  border: 1px solid var(--line);
  border-radius: 5px;
  background: #f8fafc;
  color: var(--muted);
  font-size: 0.74rem;
  font-weight: 700;
  padding: 2px 6px;
  cursor: pointer;
}

.state-select.state-confirmed {
  background: #dcfce7;
  color: var(--success);
  border-color: #86efac;
}

.state-select.state-false_positive {
  background: #edf2f7;
  color: #64748b;
  border-color: var(--line-strong);
}

.state-select.state-reviewed {
  background: #fef3c7;
  color: #92400e;
  border-color: #fde68a;
}

.state-select.indicio-state-activo {
  background: #e0f2fe;
  color: #075985;
  border-color: #bae6fd;
}

.state-select.indicio-state-revisando {
  background: #fef3c7;
  color: #92400e;
  border-color: #fde68a;
}

.state-select.indicio-state-validado {
  background: #dcfce7;
  color: var(--success);
  border-color: #86efac;
}

.state-select.indicio-state-descartado {
  background: #f1f5f9;
  color: #64748b;
  border-color: var(--line-strong);
}

.empty {
  color: var(--muted);
  text-align: center;
}

.pager {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 42px;
  padding: 8px 12px;
  color: var(--muted);
  font-size: 0.82rem;
  font-weight: 700;
  background: #fbfcfe;
}

.pager-actions {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ── Filter tag bar ──────────────────────────────────────── */
.filter-tag-bar {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 8px 10px;
  border-top: 1px solid var(--line);
}

.filter-tag-group {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}

.filter-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 10px;
  border: 1px solid var(--line);
  border-radius: 20px;
  background: var(--panel);
  color: var(--muted);
  font: inherit;
  font-size: 0.76rem;
  font-weight: 700;
  cursor: pointer;
  transition: background 0.12s, color 0.12s, border-color 0.12s;
  white-space: nowrap;
}

.filter-tag:hover {
  border-color: var(--accent);
  color: var(--accent);
}

.filter-tag.active {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}

.filter-tag.severity-critico.active { background: #991b1b; border-color: #991b1b; color: #fff; }
.filter-tag.severity-alto.active    { background: #9a3412; border-color: #9a3412; color: #fff; }
.filter-tag.severity-medio.active   { background: #92400e; border-color: #92400e; color: #fff; }
.filter-tag.severity-bajo.active    { background: #075985; border-color: #075985; color: #fff; }

:root[data-theme="dark"] .filter-tag {
  background: var(--panel);
  color: var(--muted);
  border-color: var(--line);
}

:root[data-theme="dark"] .filter-tag.active {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.filter-tag-label { font-size: .76rem; font-weight: 700; color: var(--muted); margin-right: 2px; }
.plat-chip-h1.active  { background: #494649; border-color: #494649; }
.plat-chip-bc.active  { background: #f26822; border-color: #f26822; }
.plat-chip-ig.active  { background: #1d71b8; border-color: #1d71b8; }
.plat-chip-ywh.active { background: #00c4b3; border-color: #00c4b3; }
.plat-chip-if.active  { background: #4c47f7; border-color: #4c47f7; }

.mini-button {
  min-height: 30px;
  border: 1px solid var(--line);
  border-radius: 5px;
  padding: 0 10px;
  background: #ffffff;
  color: var(--text);
  font: inherit;
  font-weight: 800;
  cursor: pointer;
}

.mini-button:disabled {
  cursor: not-allowed;
  opacity: 0.45;
}

.toast {
  position: fixed;
  right: 18px;
  bottom: 18px;
  z-index: 10;
  transform: translateY(16px);
  opacity: 0;
  pointer-events: none;
  border-radius: 6px;
  padding: 12px 14px;
  background: #13231f;
  color: #ffffff;
  box-shadow: var(--shadow);
  transition: opacity 160ms ease, transform 160ms ease;
}

.toast.visible {
  transform: translateY(0);
  opacity: 1;
}

.toast.error {
  background: var(--danger);
}

.login-page {
  display: grid;
  place-items: center;
  padding: 24px;
  background: #14213d;
}

.login-shell {
  width: min(420px, 100%);
}

.login-panel {
  display: grid;
  gap: 16px;
  padding: 24px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 8px;
  box-shadow: var(--shadow);
}

.login-panel .eyebrow {
  color: var(--accent-dark);
}

.login-panel h1 {
  color: var(--text);
  font-size: 1.8rem;
}

.alert {
  margin: 0;
  border: 1px solid #f2b8b5;
  border-radius: 6px;
  padding: 10px 12px;
  background: #fff1f0;
  color: var(--danger);
  font-weight: 800;
}

:root[data-theme="dark"] .topbar {
  background: #070d18;
  border-bottom-color: #22a6c7;
}

:root[data-theme="dark"] .topbar-actions span {
  color: #b8d7e6;
}

:root[data-theme="dark"] .eyebrow {
  color: #7dd3fc;
}

:root[data-theme="dark"] .sidebar {
  background: rgba(11, 18, 32, 0.9);
}

:root[data-theme="dark"] .sidebar a {
  color: #cbd5e1;
}

:root[data-theme="dark"] .sidebar a:hover,
:root[data-theme="dark"] .sidebar a:focus-visible {
  border-color: var(--line-strong);
  background: #172033;
  color: #67d3ea;
}

:root[data-theme="dark"] .sidebar-toggle {
  border-color: rgba(255,255,255,.15);
  color: #94a3b8;
}
:root[data-theme="dark"] .sidebar-toggle:hover {
  background: #172033;
  color: #67d3ea;
}
:root[data-theme="dark"] .nav-group-hdr {
  color: #64748b;
}
:root[data-theme="dark"] .nav-group-hdr:hover {
  background: #172033;
  color: #94a3b8;
}

:root[data-theme="dark"] .subheader,
:root[data-theme="dark"] .job-list,
:root[data-theme="dark"] .compact-row,
:root[data-theme="dark"] .surface-forms,
:root[data-theme="dark"] .indicio-form,
:root[data-theme="dark"] .button.secondary,
:root[data-theme="dark"] input,
:root[data-theme="dark"] select,
:root[data-theme="dark"] textarea,
:root[data-theme="dark"] .mini-button,
:root[data-theme="dark"] .sidebar a {
  background-color: #111827;
}

:root[data-theme="dark"] .button.secondary:hover,
:root[data-theme="dark"] .mini-button:hover {
  background: #172033;
}

:root[data-theme="dark"] .button.ghost:hover {
  background: rgba(255, 255, 255, 0.08);
}

:root[data-theme="dark"] input::placeholder,
:root[data-theme="dark"] textarea::placeholder {
  color: #78869a;
}

:root[data-theme="dark"] .table-header,
:root[data-theme="dark"] th {
  background: var(--panel-soft);
}

:root[data-theme="dark"] .table-tools input,
:root[data-theme="dark"] .table-tools select {
  background: var(--panel);
  border-color: var(--line-strong);
}

:root[data-theme="dark"] th {
  color: #b8c3d5;
}

:root[data-theme="dark"] tr:hover td {
  background: #142033;
}

:root[data-theme="dark"] .pager {
  background: #101724;
}

:root[data-theme="dark"] td a,
:root[data-theme="dark"] .url-list a,
:root[data-theme="dark"] .sort-button.active {
  color: #67d3ea;
}

:root[data-theme="dark"] .badge,
:root[data-theme="dark"] .severity-info {
  background: #253044;
  color: #b8c3d5;
}

:root[data-theme="dark"] .badge.alive,
:root[data-theme="dark"] .status-analyzed,
:root[data-theme="dark"] .state-select.state-confirmed {
  background: rgba(52, 211, 153, 0.14);
  border-color: rgba(52, 211, 153, 0.36);
  color: #6ee7b7;
}

:root[data-theme="dark"] .risk-stat {
  border-color: color-mix(in srgb, var(--stat-group-color, #fb923c) 36%, transparent);
  border-left-color: var(--stat-group-color, #fb923c) !important;
  background: color-mix(in srgb, var(--stat-group-color, #fb923c) 12%, var(--panel)) !important;
}

:root[data-theme="dark"] .risk-stat span {
  color: color-mix(in srgb, var(--stat-group-color, #fb923c) 70%, #fff);
}

:root[data-theme="dark"] .risk-medio,
:root[data-theme="dark"] .severity-alto {
  color: #fdba74;
}

:root[data-theme="dark"] .risk-table {
  border-color: rgba(251, 146, 60, 0.36);
}

:root[data-theme="dark"] .risk-table .table-header {
  border-bottom-color: rgba(251, 146, 60, 0.36);
  background: rgba(251, 146, 60, 0.1);
}

:root[data-theme="dark"] .status-pill {
  background: #172033;
  border-color: var(--line-strong);
  color: #b8c3d5;
}

:root[data-theme="dark"] .status-queued,
:root[data-theme="dark"] .status-uploaded,
:root[data-theme="dark"] .risk-bajo,
:root[data-theme="dark"] .severity-bajo {
  background: rgba(34, 166, 199, 0.15);
  border-color: rgba(34, 166, 199, 0.38);
  color: #7dd3fc;
}

:root[data-theme="dark"] .status-running,
:root[data-theme="dark"] .severity-medio,
:root[data-theme="dark"] .state-select.state-reviewed {
  background: rgba(251, 191, 36, 0.14);
  border-color: rgba(251, 191, 36, 0.36);
  color: #fcd34d;
}

:root[data-theme="dark"] .status-failed,
:root[data-theme="dark"] .risk-alto,
:root[data-theme="dark"] .severity-critico {
  background: rgba(248, 113, 113, 0.16);
  border-color: rgba(248, 113, 113, 0.36);
  color: #fca5a5;
}

:root[data-theme="dark"] .state-select,
:root[data-theme="dark"] .state-select.state-false_positive {
  background: #172033;
  border-color: var(--line-strong);
  color: #b8c3d5;
}

:root[data-theme="dark"] .job-progress {
  background: #293449;
}

:root[data-theme="dark"] .login-page {
  background: #070d18;
}

:root[data-theme="dark"] .login-panel .eyebrow {
  color: #67d3ea;
}

:root[data-theme="dark"] .alert {
  background: rgba(248, 113, 113, 0.14);
  border-color: rgba(248, 113, 113, 0.38);
}

/* ── Tech tags ─────────────────────────────────────────── */
.tech-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 3px;
  align-items: center;
}

.tech-tag {
  display: inline-flex;
  align-items: center;
  height: 20px;
  border-radius: 4px;
  padding: 0 6px;
  font-size: 0.7rem;
  font-weight: 800;
  white-space: nowrap;
  line-height: 1;
}

.tag-blue   { background: #dbeafe; color: #1e40af; }
.tag-green  { background: #dcfce7; color: #166534; }
.tag-orange { background: #ffedd5; color: #9a3412; }
.tag-purple { background: #ede9fe; color: #5b21b6; }
.tag-cyan   { background: #cffafe; color: #155e75; }
.tag-pink   { background: #fce7f3; color: #9d174d; }
.tag-yellow { background: #fef9c3; color: #854d0e; }
.tag-slate  { background: #f1f5f9; color: #334155; }

/* ── Status code badges ─────────────────────────────────── */
.sc-badge {
  display: inline-flex;
  align-items: center;
  height: 20px;
  border-radius: 4px;
  padding: 0 6px;
  font-size: 0.72rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.sc-2xx { background: #dcfce7; color: #166534; }
.sc-3xx { background: #dbeafe; color: #1e40af; }
.sc-4xx { background: #fef9c3; color: #854d0e; }
.sc-5xx { background: #fee2e2; color: #991b1b; }
.sc-0   { background: #f1f5f9; color: #64748b; }

/* ── Domain links – inline inside td ───────────────────── */
a.domain-link {
  display: inline;
  margin: 0;
  font-size: inherit;
  font-weight: 700;
  color: var(--accent-dark);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}

a.domain-link:hover {
  text-decoration-thickness: 2px;
}

@media (max-width: 980px) {
  .stats {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .stat-group {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .analysis-metrics {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .job-row {
    grid-template-columns: minmax(220px, 1fr) 110px minmax(130px, 0.8fr);
  }

}

/* ── Indicios workspace: decision-first data view ─────────────── */
.sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.indicios-workspace {
  overflow: visible;
  border-color: var(--line-strong);
  box-shadow: 0 12px 34px rgba(15, 23, 42, .06);
}

.indicios-workspace svg,
.confirm-action-dialog svg {
  width: 19px;
  height: 19px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.indicios-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 22px 24px;
  border-bottom: 1px solid var(--line);
  background:
    radial-gradient(circle at 90% 0, rgba(14, 116, 144, .13), transparent 36%),
    linear-gradient(135deg, var(--panel) 0, var(--panel-soft) 100%);
}

.indicios-header-copy { max-width: 700px; }
.indicios-header-copy h2 {
  font-size: clamp(1.35rem, 2vw, 1.8rem);
  letter-spacing: -.025em;
}
.indicios-header-copy > p:last-child,
.indicios-drawer-head > div > p:last-child {
  margin: 7px 0 0;
  color: var(--muted);
  line-height: 1.5;
}
.indicios-workspace .section-kicker,
.confirm-action-dialog .section-kicker {
  margin: 0 0 5px;
  color: var(--accent);
  font-size: .69rem;
  font-weight: 850;
  letter-spacing: .1em;
  text-transform: uppercase;
}

.indicios-header-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: 0 0 auto;
}
.indicios-header-actions .button {
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  white-space: nowrap;
}
.indicios-icon-button { width: 42px; padding: 0; }
.indicios-icon-button.is-loading svg { animation: indicios-spin .8s linear infinite; }
@keyframes indicios-spin { to { transform: rotate(360deg); } }

.indicios-summary {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1px;
  background: var(--line);
  border-bottom: 1px solid var(--line);
}
.indicios-summary article {
  min-width: 0;
  padding: 16px 18px;
  background: var(--panel);
}
.indicios-summary span,
.indicios-summary small {
  display: block;
  color: var(--muted);
}
.indicios-summary span {
  margin-bottom: 6px;
  font-size: .69rem;
  font-weight: 800;
  letter-spacing: .065em;
  text-transform: uppercase;
}
.indicios-summary strong {
  display: block;
  overflow: hidden;
  color: var(--text);
  font-size: 1.42rem;
  line-height: 1.05;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.indicios-summary small {
  margin-top: 5px;
  overflow: hidden;
  font-size: .72rem;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.indicios-workspace[data-load-state="loading"] .indicios-summary article:first-child strong { opacity: .45; }
.indicios-workspace[data-load-state="error"] .indicios-summary article:first-child { box-shadow: inset 3px 0 var(--danger); }
.indicios-workspace .pager { border-top: 1px solid var(--line); }

.indicios-toolbar {
  display: grid;
  grid-template-columns: minmax(260px, 1.35fr) minmax(520px, 2fr) auto;
  align-items: end;
  gap: 12px;
  padding: 15px 18px;
  border-bottom: 1px solid var(--line);
  background: var(--panel-soft);
}
.indicios-search {
  position: relative;
  display: block;
}
.indicios-search svg {
  position: absolute;
  top: 50%;
  left: 13px;
  width: 18px;
  height: 18px;
  color: var(--muted);
  pointer-events: none;
  transform: translateY(-50%);
}
.indicios-search input {
  width: 100%;
  min-height: 42px;
  padding-left: 40px;
  background: var(--panel);
}
.indicios-filter-grid {
  display: grid;
  grid-template-columns: 1fr .82fr 1.12fr .62fr;
  gap: 8px;
}
.indicios-filter-grid label,
.indicio-field {
  display: grid;
  gap: 5px;
  min-width: 0;
}
.indicios-filter-grid label > span,
.indicio-field > span {
  color: var(--muted);
  font-size: .67rem;
  font-weight: 800;
  letter-spacing: .045em;
  text-transform: uppercase;
}
.indicios-filter-grid select {
  width: 100%;
  min-width: 0;
  min-height: 42px;
  background: var(--panel);
}
.indicios-clear-button {
  min-height: 42px;
  padding: 0 2px;
  border: 0;
  background: transparent;
  color: var(--muted);
  font: inherit;
  font-size: .78rem;
  font-weight: 750;
  cursor: pointer;
  white-space: nowrap;
}
.indicios-clear-button:hover { color: var(--accent); }

.indicios-priority-panel {
  padding: 18px;
  border-bottom: 1px solid var(--line);
  background: var(--panel);
}
.indicios-priority-panel[hidden] { display: none; }
.indicios-panel-head,
.indicios-drawer-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}
.indicios-panel-head { margin-bottom: 12px; }
.indicios-panel-head h3,
.indicios-drawer-head h3 {
  margin: 0;
  font-size: 1.05rem;
}
.indicios-close-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 9px;
  background: var(--panel);
  color: var(--muted);
  cursor: pointer;
}
.indicios-close-button:hover { border-color: var(--line-strong); color: var(--text); }
.indicios-priority-list { display: grid; gap: 8px; }
.indicios-priority-card {
  display: grid;
  grid-template-columns: 66px minmax(0, 1fr);
  gap: 14px;
  padding: 13px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel-soft);
}
.indicios-priority-rank {
  display: grid;
  align-content: center;
  justify-items: center;
  border-right: 1px solid var(--line);
}
.indicios-priority-rank span,
.indicios-priority-rank small { color: var(--muted); font-size: .67rem; }
.indicios-priority-rank strong { font-size: 1.25rem; }
.indicios-priority-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.indicios-priority-meta > span {
  padding: 2px 6px;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--muted);
  font-size: .68rem;
  font-weight: 750;
}
.indicios-priority-copy p { margin: 6px 0 4px; font-size: .87rem; line-height: 1.4; }
.indicios-priority-copy small { color: var(--muted); line-height: 1.35; }
.indicios-panel-meta { display: block; margin-top: 10px; color: var(--muted); }

.indicios-data-view { max-height: min(64vh, 720px); }
.indicios-data-view table { min-width: 1160px; }
.indicios-row td { vertical-align: top; }
.indicios-cell-program { width: 140px; }
.indicios-cell-host { width: 180px; }
.indicios-cell-host small { display: block; margin-top: 4px; color: var(--muted); font-size: .66rem; }
.indicios-host { color: var(--accent-dark); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .75rem; font-weight: 750; }
.indicios-cell-score { width: 70px; text-align: center; }
.indicios-score {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 38px;
  min-height: 28px;
  border: 1px solid var(--line);
  border-radius: 999px;
  font-size: .77rem;
  font-weight: 850;
}
.indicios-score.is-high { border-color: rgba(8, 116, 67, .25); background: rgba(8, 116, 67, .09); color: var(--success); }
.indicios-score.is-medium { border-color: rgba(180, 83, 9, .25); background: rgba(180, 83, 9, .09); color: var(--warning); }
.indicios-score.is-low { color: var(--muted); background: var(--panel-soft); }
.indicios-cell-signal { width: 31%; min-width: 280px; }
.indicios-cell-signal > strong { display: block; font-size: .82rem; line-height: 1.45; }
.indicios-endpoint {
  display: block;
  max-width: 420px;
  margin-top: 6px;
  overflow: hidden;
  color: var(--accent-dark);
  font-size: .69rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.indicios-detail-tags,
.indicios-context-tags,
.indicios-row-actions { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; }
.indicios-detail-tags { margin-top: 7px; }
.indicios-detail-tag,
.indicios-context-tag {
  display: inline-flex;
  align-items: center;
  min-height: 21px;
  padding: 2px 6px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--panel-soft);
  color: var(--muted);
  font-size: .63rem;
  font-weight: 720;
  line-height: 1.2;
}
.indicios-row-note { display: block; margin-top: 6px; color: var(--muted); line-height: 1.35; }
.indicios-cell-impact { min-width: 210px; }
.indicios-cell-impact small { color: var(--muted); line-height: 1.45; }
.indicios-cell-context { width: 220px; }
.indicios-cell-state { width: 136px; }
.indicios-cell-state select { max-width: 132px; }
.indicios-cell-updated { width: 132px; color: var(--muted); font-size: .7rem; }
.indicios-cell-actions { width: 92px; }
.indicios-row-action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 7px;
  background: var(--panel);
  color: var(--muted);
  cursor: pointer;
}
.indicios-row-action:hover { border-color: var(--accent); color: var(--accent); }
.indicios-row-action.is-danger:hover { border-color: var(--danger); color: var(--danger); }
.indicios-row-action svg { width: 16px; height: 16px; }
.indicios-row-action span { display: none; }

.indicios-state-panel {
  display: grid;
  justify-items: center;
  gap: 7px;
  padding: 26px;
  border: 1px dashed var(--line-strong);
  border-radius: 10px;
  color: var(--muted);
  text-align: center;
}
.indicios-state-panel strong { color: var(--text); }
.indicios-state-spinner {
  width: 24px;
  height: 24px;
  border: 2px solid var(--line);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: indicios-spin .8s linear infinite;
}
.indicios-state-panel.is-error { border-color: rgba(180, 35, 24, .35); }

.indicios-drawer {
  position: fixed;
  inset: 0;
  z-index: 1300;
  overflow: hidden;
  visibility: hidden;
  pointer-events: none;
}
.indicios-drawer.is-open { visibility: visible; pointer-events: auto; }
.indicios-drawer-backdrop {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  padding: 0;
  border: 0;
  background: rgba(3, 10, 20, .52);
  opacity: 0;
  cursor: default;
  transition: opacity .2s ease;
}
.indicios-drawer.is-open .indicios-drawer-backdrop { opacity: 1; }
.indicios-drawer-panel {
  position: absolute;
  top: 0;
  right: 0;
  width: min(560px, 94vw);
  height: 100vh;
  height: 100dvh;
  overflow-y: auto;
  overscroll-behavior: contain;
  background: var(--panel);
  border-left: 1px solid var(--line);
  box-shadow: -18px 0 45px rgba(3, 10, 20, .22);
  transform: translateX(102%);
  transition: transform .24s ease;
}
.indicios-drawer.is-open .indicios-drawer-panel { transform: translateX(0); }
.indicios-drawer-head {
  position: sticky;
  top: 0;
  z-index: 2;
  padding: 20px 22px;
  border-bottom: 1px solid var(--line);
  background: rgba(255, 255, 255, .96);
  backdrop-filter: blur(12px);
}
.indicios-drawer-head > div { max-width: 430px; }
.indicio-form.indicio-drawer-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: start;
  gap: 16px 12px;
  padding: 20px 22px 28px;
  border: 0;
  background: var(--panel);
}
.indicio-field-wide { grid-column: 1 / -1; }
.indicio-field input,
.indicio-field select,
.indicio-field textarea {
  width: 100%;
  min-height: 42px;
  background: var(--panel-soft);
}
.indicio-field textarea { resize: vertical; }
.indicio-field > span b { color: var(--danger); }
.indicio-field > small { color: var(--muted); font-size: .7rem; line-height: 1.4; }
.indicios-drawer-actions {
  position: sticky;
  bottom: -28px;
  grid-column: 1 / -1;
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin: 4px -22px -28px;
  padding: 14px 22px;
  border-top: 1px solid var(--line);
  background: var(--panel);
}

:root[data-theme="dark"] .indicios-drawer-head { background: rgba(17, 24, 39, .96); }
:root[data-theme="dark"] .indicios-workspace { box-shadow: 0 12px 34px rgba(0, 0, 0, .24); }

/* Confirmación común para operaciones destructivas */
.confirm-action-dialog {
  width: min(460px, calc(100vw - 28px));
  padding: 0;
  border: 1px solid var(--line-strong);
  border-radius: 14px;
  background: var(--panel);
  color: var(--text);
  box-shadow: 0 24px 70px rgba(3, 10, 20, .28);
}
.confirm-action-dialog::backdrop { background: rgba(3, 10, 20, .58); backdrop-filter: blur(2px); }
.confirm-action-dialog form {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr);
  gap: 14px;
  padding: 22px;
}
.confirm-action-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 11px;
  background: rgba(180, 35, 24, .09);
  color: var(--danger);
}
.confirm-action-copy h2 { font-size: 1.08rem; }
.confirm-action-copy > p:last-child { margin: 7px 0 0; color: var(--muted); font-size: .86rem; line-height: 1.5; }
.confirm-action-buttons {
  grid-column: 1 / -1;
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 6px;
}
.confirm-action-primary { background: var(--danger); }
.confirm-action-primary:hover { background: #912018; }

@media (max-width: 1080px) {
  .indicios-toolbar { grid-template-columns: 1fr; align-items: stretch; }
  .indicios-clear-button { justify-self: start; }
}

@media (max-width: 760px) {
  .indicios-workspace { margin-top: 8px; border-radius: 12px; }
  .indicios-header { align-items: stretch; flex-direction: column; padding: 18px 16px; }
  .indicios-header-copy > p:last-child { font-size: .84rem; }
  .indicios-header-actions {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 44px minmax(0, 1fr);
  }
  .indicios-header-actions .button { min-height: 44px; padding-inline: 10px; font-size: .74rem; }
  .indicios-create-button svg { display: none; }
  .indicios-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .indicios-summary article { padding: 13px 14px; }
  .indicios-summary strong { font-size: 1.22rem; }
  .indicios-toolbar { padding: 14px; gap: 13px; }
  .indicios-search input { min-height: 46px; }
  .indicios-filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .indicios-filter-grid select { min-height: 44px; }
  .indicios-clear-button { min-height: 38px; }

  .indicios-priority-panel { padding: 15px 14px; }
  .indicios-priority-card { grid-template-columns: 52px minmax(0, 1fr); gap: 10px; padding: 11px; }
  .indicios-priority-rank strong { font-size: 1rem; }
  .indicios-priority-copy small { display: block; max-height: 2.7em; overflow: hidden; }

  .indicios-data-view { width: 100%; max-width: 100%; max-height: none; overflow: hidden; padding: 12px; background: var(--panel-soft); }
  .indicios-data-view table,
  .indicios-data-view tbody { display: block; width: 100%; min-width: 0; }
  .indicios-data-view thead { display: none; }
  #indicioRows { display: grid; gap: 10px; }
  #indicioRows > tr:not(.indicios-row) { display: block; }
  #indicioRows > tr:not(.indicios-row) td { display: block; width: 100%; padding: 24px 14px; border: 1px dashed var(--line); border-radius: 10px; }
  .indicios-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 9px 12px;
    padding: 14px;
    border: 1px solid var(--line);
    border-radius: 11px;
    background: var(--panel);
    box-shadow: var(--shadow);
    overflow: hidden;
  }
  .indicios-row:hover td { background: transparent; }
  .indicios-row td {
    display: block;
    width: auto;
    min-width: 0;
    max-width: none;
    padding: 0;
    border: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  .indicios-cell-program { grid-column: 1; grid-row: 1; align-self: center; }
  .indicios-cell-program strong { font-size: .9rem; }
  .indicios-cell-score { grid-column: 2; grid-row: 1; }
  .indicios-cell-host { grid-column: 1 / -1; grid-row: 2; }
  .indicios-cell-signal,
  .indicios-cell-impact,
  .indicios-cell-context { grid-column: 1 / -1; }
  .indicios-cell-signal { margin-top: 3px; padding-top: 11px !important; border-top: 1px solid var(--line) !important; }
  .indicios-endpoint { max-width: 100%; white-space: normal; word-break: break-all; }
  .indicios-context-tag,
  .indicios-detail-tag { max-width: 100%; overflow-wrap: anywhere; }
  .indicios-cell-impact::before,
  .indicios-cell-context::before,
  .indicios-cell-state::before,
  .indicios-cell-updated::before {
    content: attr(data-label);
    display: block;
    margin-bottom: 5px;
    color: var(--muted);
    font-size: .63rem;
    font-weight: 800;
    letter-spacing: .06em;
    text-transform: uppercase;
  }
  .indicios-cell-context { padding-bottom: 4px !important; }
  .indicios-cell-state { grid-column: 1; }
  .indicios-cell-state select { width: 100%; max-width: 180px; min-height: 40px; }
  .indicios-cell-updated { grid-column: 2; text-align: right; }
  .indicios-cell-updated::before { text-align: right; }
  .indicios-cell-actions { grid-column: 1 / -1; padding-top: 10px !important; border-top: 1px solid var(--line) !important; }
  .indicios-row-actions { justify-content: flex-end; }
  .indicios-row-action { width: auto; min-height: 40px; padding: 0 11px; gap: 6px; }
  .indicios-row-action span { display: inline; font-size: .72rem; font-weight: 750; }
  .indicios-workspace .pager { padding-inline: 14px; }

  .indicios-drawer-panel { width: 100%; border-left: 0; }
  .indicios-drawer-head { padding: 17px 16px; }
  .indicio-form.indicio-drawer-form { grid-template-columns: 1fr; padding: 18px 16px 26px; }
  .indicio-field-wide { grid-column: 1; }
  .indicio-field input,
  .indicio-field select { min-height: 46px; }
  .indicios-drawer-actions {
    bottom: -26px;
    grid-column: 1;
    margin: 2px -16px -26px;
    padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  }
  .indicios-drawer-actions .button { min-height: 44px; flex: 1; }

  .confirm-action-dialog form { grid-template-columns: 42px minmax(0, 1fr); padding: 18px; }
  .confirm-action-buttons { display: grid; grid-template-columns: 1fr; }
  .confirm-action-buttons .button { min-height: 44px; }
  .confirm-action-primary { grid-row: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .indicios-drawer-panel,
  .indicios-drawer-backdrop { transition: none; }
}

@media (max-width: 680px) {
  .table-header {
    align-items: stretch;
    flex-direction: column;
  }

  .stats,
  .stat-group,
  .analysis-metrics,
  .analysis-columns,
  .url-list,
  .upload-form,
  .surface-forms,
  .surface-form,
  .surface-form:last-child,
  .indicio-form,
  .global-filters,
  .split {
    grid-template-columns: 1fr;
  }

  .button.ghost,
  .table-tools,
  .table-tools input,
  .table-tools select {
    max-width: none;
    width: 100%;
  }

  .pager {
    align-items: stretch;
    flex-direction: column;
  }

  .pager-actions {
    justify-content: space-between;
  }

  .job-row {
    grid-template-columns: 1fr;
  }

  .status-pill {
    justify-content: flex-start;
    width: max-content;
  }
}

/* ── Dark mode: tech tags ───────────────────────────────── */
:root[data-theme="dark"] .tag-blue   { background: rgba(59, 130, 246, 0.18); color: #93c5fd; }
:root[data-theme="dark"] .tag-green  { background: rgba(52, 211, 153, 0.14); color: #6ee7b7; }
:root[data-theme="dark"] .tag-orange { background: rgba(251, 146, 60, 0.18); color: #fdba74; }
:root[data-theme="dark"] .tag-purple { background: rgba(167, 139, 250, 0.16); color: #c4b5fd; }
:root[data-theme="dark"] .tag-cyan   { background: rgba(34, 211, 238, 0.15); color: #67e8f9; }
:root[data-theme="dark"] .tag-pink   { background: rgba(244, 114, 182, 0.15); color: #f9a8d4; }
:root[data-theme="dark"] .tag-yellow { background: rgba(251, 191, 36, 0.14); color: #fcd34d; }
:root[data-theme="dark"] .tag-slate  { background: rgba(148, 163, 184, 0.14); color: #cbd5e1; }

/* ── Dark mode: status code badges ─────────────────────── */
:root[data-theme="dark"] .sc-2xx { background: rgba(52, 211, 153, 0.14); color: #6ee7b7; }
:root[data-theme="dark"] .sc-3xx { background: rgba(59, 130, 246, 0.16); color: #93c5fd; }
:root[data-theme="dark"] .sc-4xx { background: rgba(251, 191, 36, 0.14); color: #fcd34d; }
:root[data-theme="dark"] .sc-5xx { background: rgba(248, 113, 113, 0.16); color: #fca5a5; }
:root[data-theme="dark"] .sc-0   { background: rgba(148, 163, 184, 0.12); color: #94a3b8; }

/* ══════════════════════════════════════════════════════════
   H1 Knowledge section
   ══════════════════════════════════════════════════════════ */

#h1knowledge {
  scroll-margin-top: 14px;
  margin-top: 10px;
}

.h1k-header {
  flex-wrap: wrap;
  gap: 10px;
}

.h1k-title-row {
  display: flex;
  align-items: center;
  gap: 12px;
}

/* ── Stats row ──────────────────────────────────────────── */
.h1k-stats {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: .6rem;
  padding: .8rem 1rem;
}

.h1k-stat {
  padding: .7rem .8rem;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  text-align: center;
  transition: border-color .15s, box-shadow .15s;
}
.h1k-stat:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}

.h1k-stat span {
  display: block;
  font-size: 1.3rem;
  font-weight: 800;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}

.h1k-stat p {
  margin: 3px 0 0;
  color: var(--muted);
  font-size: 0.74rem;
  font-weight: 800;
  text-transform: uppercase;
}

.h1k-stat.is-critical span { color: #991b1b; }
.h1k-stat.is-high span     { color: #9a3412; }
.h1k-stat.is-bounty span   { color: var(--success); }

.h1k-bounty-sub {
  display: block;
  margin-top: 3px;
  color: var(--muted);
  font-size: 0.66rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  text-transform: none;
}

/* ── Detalle de corrida de agente (click en una fila de Agentes) ─────────── */
.ag-run-row:hover { background: var(--panel-soft); }
.ag-run-detail-inner {
  padding: 0.75rem 1rem 0.9rem;
  background: var(--panel-soft);
  border-top: 1px solid var(--line);
}
.ag-run-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin-bottom: 0.7rem;
}
.ag-run-stat {
  flex: 0 0 auto;
  min-width: 88px;
  padding: 6px 10px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  transition: border-color .15s;
}
.ag-run-stat:hover { border-color: var(--accent); }
.ag-run-stat span {
  display: block;
  font-size: 1rem;
  font-weight: 700;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.ag-run-stat p {
  margin: 2px 0 0;
  font-size: 0.66rem;
  font-weight: 700;
  text-transform: uppercase;
  color: var(--muted);
}
.ag-run-summary-head {
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 0.35rem;
}
.ag-run-summary-head small { color: var(--muted); font-weight: 500; }
.ag-run-summary {
  margin: 0;
  max-height: 420px;
  overflow: auto;
  padding: 0.6rem 0.8rem;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--text);
  font-size: 0.78rem;
  line-height: 1.45;
  white-space: pre-wrap;
  word-break: break-word;
}
.ag-run-meta {
  margin-top: 0.5rem;
  font-size: 0.7rem;
  color: var(--muted);
}

/* ── Two-column body ────────────────────────────────────── */
.h1k-body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
  gap: 0;
  border-bottom: 1px solid var(--line);
}

.h1k-col {
  padding: 12px 14px;
}

.h1k-col + .h1k-col {
  border-left: 1px solid var(--line);
}

.h1k-sub {
  margin: 0 0 10px;
  color: var(--muted);
  font-size: 0.74rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

/* ── Distribution bars ──────────────────────────────────── */
.h1k-bar-row {
  display: grid;
  grid-template-columns: 160px 1fr 36px;
  align-items: center;
  gap: 8px;
  margin-bottom: 5px;
  font-size: 0.8rem;
}

.h1k-bar-label {
  overflow: hidden;
  color: var(--text);
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.h1k-bar-track {
  height: 18px;
  border-radius: 8px;
  background: var(--line);
  overflow: hidden;
}

.h1k-bar-fill {
  height: 100%;
  border-radius: inherit;
  background: var(--accent);
  transition: width 0.4s ease;
}

.h1k-bar-count {
  color: var(--muted);
  font-size: 0.75rem;
  font-weight: 800;
  text-align: right;
}

/* ── Pattern cards ──────────────────────────────────────── */
.h1k-patterns {
  display: grid;
  gap: 6px;
}

.h1k-card {
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel-soft);
  overflow: hidden;
  transition: border-color .15s, box-shadow .15s;
}
.h1k-card:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}

.h1k-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 7px 10px;
  cursor: pointer;
  user-select: none;
}

.h1k-card-head:hover {
  background: rgba(14, 116, 144, 0.05);
}

.h1k-card-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  font-size: 0.83rem;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.h1k-chevron {
  flex: 0 0 auto;
  color: var(--muted);
  font-size: 0.7rem;
  transition: transform 0.18s ease;
}

.h1k-card.open .h1k-chevron {
  transform: rotate(180deg);
}

.h1k-card-body {
  display: none;
  padding: 0 10px 10px;
  border-top: 1px solid var(--line);
}

.h1k-card.open .h1k-card-body {
  display: block;
}

.h1k-card-body p {
  margin: 8px 0 4px;
  color: var(--muted);
  font-size: 0.73rem;
  font-weight: 800;
  text-transform: uppercase;
}

.h1k-card-body .h1k-test {
  margin: 0;
  font-size: 0.82rem;
  line-height: 1.45;
  color: var(--text);
}

.h1k-signals {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 4px;
}

.h1k-signal {
  display: inline-flex;
  align-items: center;
  height: 20px;
  border-radius: 4px;
  padding: 0 7px;
  background: #dbeafe;
  color: #1e40af;
  font-size: 0.72rem;
  font-weight: 800;
  font-family: ui-monospace, monospace;
}

/* ── Report rows ────────────────────────────────────────── */
#h1kRows tr { cursor: default; }

.h1k-bounty {
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  white-space: nowrap;
}

.h1k-summary {
  display: none;
  max-width: 800px;
}

.h1k-summary.open {
  display: block;
}

/* ── Severity badges for H1 ─────────────────────────────── */
.sev-critical { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; }
.sev-high     { background: #ffedd5; color: #9a3412; border: 1px solid #fed7aa; }
.sev-medium   { background: #fef3c7; color: #92400e; border: 1px solid #fde68a; }
.sev-low      { background: #e0f2fe; color: #075985; border: 1px solid #bae6fd; }
.sev-none     { background: #f1f5f9; color: #64748b; }

/* ── Dark mode overrides ─────────────────────────────────── */
:root[data-theme="dark"] .h1k-stat         { background: var(--panel); border-color: var(--line); }
:root[data-theme="dark"] .h1k-stat.is-critical span { color: #fca5a5; }
:root[data-theme="dark"] .h1k-stat.is-high span     { color: #fdba74; }
:root[data-theme="dark"] .h1k-stat.is-bounty span   { color: #6ee7b7; }
:root[data-theme="dark"] .h1k-card         { background: var(--panel-soft); }
:root[data-theme="dark"] .h1k-signal       { background: rgba(59,130,246,0.16); color: #93c5fd; }
:root[data-theme="dark"] .h1k-bar-fill     { background: var(--accent); }
:root[data-theme="dark"] .sev-critical { background: rgba(248,113,113,0.16); border-color: rgba(248,113,113,0.36); color: #fca5a5; }
:root[data-theme="dark"] .sev-high     { background: rgba(251,146,60,0.16);  border-color: rgba(251,146,60,0.36);  color: #fdba74; }
:root[data-theme="dark"] .sev-medium   { background: rgba(251,191,36,0.14);  border-color: rgba(251,191,36,0.36);  color: #fcd34d; }
:root[data-theme="dark"] .sev-low      { background: rgba(34,166,199,0.15);  border-color: rgba(34,166,199,0.38);  color: #7dd3fc; }

@media (max-width: 980px) {
  .h1k-stats { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); }
  .h1k-body  { grid-template-columns: 1fr; }
  .h1k-col + .h1k-col { border-left: 0; border-top: 1px solid var(--line); }
  .h1k-bar-row { grid-template-columns: 120px 1fr 28px; }
}

/* ══════════════════════════════════════════════════════════
   Secret Discovery section
   ══════════════════════════════════════════════════════════ */

#secrets { scroll-margin-top: 14px; margin-top: 10px; }

.sd-section { border-color: #fed7aa; }

.sd-header {
  flex-wrap: wrap;
  gap: 10px;
  border-bottom-color: #fed7aa;
  background: #fff7ed;
}

.sd-title-row {
  display: flex;
  align-items: center;
  gap: 12px;
}

.sd-stats {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: .5rem;
  padding: .7rem 1rem;
}

.sd-stat {
  padding: .6rem .7rem;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  text-align: center;
  transition: border-color .15s, box-shadow .15s;
}
.sd-stat:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}

.sd-stat span {
  display: block;
  font-size: 1.15rem;
  font-weight: 800;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}

.sd-stat p {
  margin: 3px 0 0;
  color: var(--muted);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

.sd-stat.critical span { color: #991b1b; }
.sd-stat.high span     { color: #9a3412; }
.sd-stat.medium span   { color: #92400e; }

/* Impact class badges */
.impact-confirmed  { background: #fee2e2; color: #991b1b; border-color: #fecaca; }
.impact-likely     { background: #ffedd5; color: #9a3412; border-color: #fed7aa; }
.impact-possible   { background: #fef3c7; color: #92400e; border-color: #fde68a; }
.impact-public     { background: #dcfce7; color: #166534; border-color: #86efac; }
.impact-analytics  { background: #f1f5f9; color: #64748b; border-color: #cbd5e1; }
.impact-ignored    { background: #f1f5f9; color: #94a3b8; border-color: #e2e8f0; }

/* Context expandible */
.sd-context {
  display: none;
  margin-top: 5px;
  padding: 6px 8px;
  border-radius: 4px;
  background: var(--panel-soft);
  font-family: ui-monospace, monospace;
  font-size: 0.74rem;
  line-height: 1.45;
  color: var(--muted);
  white-space: pre-wrap;
  word-break: break-all;
  max-width: 700px;
}

.sd-context.open { display: block; }

.sd-actions { display: flex; gap: 5px; flex-wrap: wrap; }

.sd-btn {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: 0 8px;
  background: var(--panel);
  color: var(--muted);
  font-size: 0.73rem;
  font-weight: 800;
  cursor: pointer;
}

.sd-btn:hover { background: var(--panel-soft); color: var(--text); }
.sd-btn.danger { color: var(--danger); border-color: #fecaca; }
.sd-btn.danger:hover { background: #fff1f0; }

/* JS scan progress bar */
.sd-js-progress {
  padding: .6rem 1rem .4rem;
  border-bottom: 1px solid var(--border);
}
.js-scan-header {
  display: flex;
  align-items: center;
  gap: .5rem;
  font-size: .8rem;
  margin-bottom: .3rem;
  color: var(--muted);
}
.js-scan-label  { font-weight: 600; color: var(--text); }
.js-scan-counts { font-family: var(--mono, monospace); font-size: .78rem; }
.js-scan-pct    { font-weight: 700; color: var(--text); min-width: 3rem; text-align: right; }
.js-scan-status { font-size: .72rem; }
.js-scan-bar-wrap {
  height: 6px;
  background: var(--border);
  border-radius: 3px;
  overflow: hidden;
}
.js-scan-bar-fill {
  height: 100%;
  border-radius: 3px;
  transition: width .6s ease;
}
.js-scan-dot {
  display: inline-block;
  width: 8px; height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}
.js-scan-dot.running {
  background: var(--green);
  box-shadow: 0 0 0 0 var(--green);
  animation: js-pulse 1.4s infinite;
}
.js-scan-dot.idle { background: var(--muted); }
@keyframes js-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(34,197,94,.6); }
  70%  { box-shadow: 0 0 0 5px rgba(34,197,94,0); }
  100% { box-shadow: 0 0 0 0 rgba(34,197,94,0); }
}

/* Dark mode */
:root[data-theme="dark"] .sd-section { border-color: rgba(251,146,60,0.36); }
:root[data-theme="dark"] .sd-header  { background: rgba(251,146,60,0.1); border-bottom-color: rgba(251,146,60,0.36); }
:root[data-theme="dark"] .sd-stat    { background: var(--panel); }
:root[data-theme="dark"] .impact-confirmed { background: rgba(248,113,113,0.16); border-color: rgba(248,113,113,0.36); color: #fca5a5; }
:root[data-theme="dark"] .impact-likely    { background: rgba(251,146,60,0.16);  border-color: rgba(251,146,60,0.36);  color: #fdba74; }
:root[data-theme="dark"] .impact-possible  { background: rgba(251,191,36,0.14);  border-color: rgba(251,191,36,0.36);  color: #fcd34d; }
:root[data-theme="dark"] .impact-public    { background: rgba(52,211,153,0.14);  border-color: rgba(52,211,153,0.36);  color: #6ee7b7; }
:root[data-theme="dark"] .impact-analytics,:root[data-theme="dark"] .impact-ignored { background: rgba(148,163,184,0.12); border-color: var(--line); color: #94a3b8; }

@media (max-width: 980px) {
  .sd-stats { grid-template-columns: repeat(3, minmax(0,1fr)); }
}

/* ══════════════════════════════════════════════════════════
   OOB DNS Callbacks
   ══════════════════════════════════════════════════════════ */

#oob { scroll-margin-top: 14px; margin-top: 10px; }

.oob-section { border-color: #a5b4fc; }

.oob-header {
  flex-wrap: wrap;
  gap: 10px;
  border-bottom-color: #a5b4fc;
  background: #eef2ff;
}

.oob-title-row {
  display: flex;
  align-items: center;
  gap: 10px;
}

.oob-live-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #22c55e;
  box-shadow: 0 0 0 2px rgba(34,197,94,.25);
  animation: oob-pulse 1.8s ease-in-out infinite;
  flex-shrink: 0;
}

.oob-live-dot.paused {
  background: #94a3b8;
  box-shadow: none;
  animation: none;
}

@keyframes oob-pulse {
  0%, 100% { box-shadow: 0 0 0 2px rgba(34,197,94,.25); }
  50%       { box-shadow: 0 0 0 5px rgba(34,197,94,.08); }
}

.oob-toggle-label {
  display: flex;
  align-items: center;
  gap: 5px;
  color: var(--muted);
  font-size: 0.84rem;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
}

.oob-toggle-label input { width: 16px; min-height: 16px; }

/* Stats */
.oob-stats {
  display: grid;
  grid-template-columns: repeat(5, minmax(0,1fr));
  gap: 1px;
  background: var(--line);
  border-bottom: 1px solid var(--line);
}

.oob-stat {
  padding: 9px 12px;
  background: var(--panel);
}

.oob-stat span {
  display: block;
  font-size: 1.2rem;
  font-weight: 800;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}

.oob-stat p {
  margin: 3px 0 0;
  color: var(--muted);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

/* Token bar */
.oob-token-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  background: var(--panel-soft);
}

.oob-token-label {
  font-size: 0.84rem;
  font-weight: 800;
  color: var(--muted);
  white-space: nowrap;
}

.oob-token-field {
  font-family: ui-monospace, monospace;
  font-size: 0.84rem;
  min-width: 200px;
  flex: 2;
}

/* Blacklist panel */
.oob-blacklist-panel {
  border-bottom: 1px solid var(--line);
  background: var(--panel);
}

.oob-blacklist-panel > summary {
  padding: 8px 12px;
  font-size: 0.84rem;
  font-weight: 800;
  color: var(--muted);
  cursor: pointer;
  user-select: none;
  list-style: none;
}

.oob-blacklist-panel > summary::before {
  content: '▶ ';
  font-size: 0.7rem;
}

.oob-blacklist-panel[open] > summary::before { content: '▼ '; }

.oob-blacklist-body { padding: 10px 12px; }

.oob-bl-form {
  display: flex;
  gap: 8px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}

.oob-bl-form input { flex: 1; min-width: 180px; }

.oob-bl-list { display: flex; flex-wrap: wrap; gap: 6px; }

.oob-bl-tag {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 26px;
  border: 1px solid var(--line);
  border-radius: 5px;
  padding: 0 8px;
  background: var(--panel-soft);
  font-size: 0.78rem;
  font-weight: 700;
  font-family: ui-monospace, monospace;
}

.oob-bl-tag button {
  border: 0;
  background: transparent;
  color: var(--danger);
  font-size: 0.8rem;
  cursor: pointer;
  padding: 0;
  line-height: 1;
}

/* Table */
.oob-table-wrap { max-height: 480px; border-bottom: 1px solid var(--line); }

.oob-row-new td { background: rgba(99,102,241,.07); }
.oob-row-new:hover td { background: rgba(99,102,241,.12); }
.oob-row-confirmed td { background: rgba(34,197,94,.07); }
.oob-row-confirmed:hover td { background: rgba(34,197,94,.12); }
.oob-confirmed-badge {
  background: #16a34a; color: #fff; font-size: .65rem;
  padding: 1px 5px; border-radius: 3px; font-weight: 700;
  vertical-align: middle; margin-right: 2px;
}

.oob-token-cell {
  font-family: ui-monospace, monospace;
  font-size: 0.82rem;
  font-weight: 700;
  color: #4f46e5;
}

.oob-copy-btn {
  border: 0;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
  font-size: 0.82rem;
  padding: 0 4px;
}
.oob-copy-btn:hover { color: var(--accent-dark); }

/* DNS type badges */
.dns-A     { background:#dbeafe; color:#1e40af; }
.dns-AAAA  { background:#ede9fe; color:#5b21b6; }
.dns-NS    { background:#fef3c7; color:#92400e; }
.dns-TXT   { background:#dcfce7; color:#166534; }
.dns-CNAME { background:#ffedd5; color:#9a3412; }
.dns-MX    { background:#fce7f3; color:#9d174d; }
.dns-HTTPS { background:#cffafe; color:#155e75; }
.dns-OTHER { background:#f1f5f9; color:#64748b; }

/* Dark mode */
:root[data-theme="dark"] .oob-section   { border-color: rgba(99,102,241,.4); }
:root[data-theme="dark"] .oob-header    { background: rgba(99,102,241,.1); border-bottom-color: rgba(99,102,241,.4); }
:root[data-theme="dark"] .oob-stat      { background: var(--panel); }
:root[data-theme="dark"] .oob-token-cell { color: #818cf8; }
:root[data-theme="dark"] .oob-row-new td { background: rgba(99,102,241,.1); }
:root[data-theme="dark"] .oob-row-confirmed td { background: rgba(34,197,94,.1); }
:root[data-theme="dark"] .oob-confirmed-badge { background: #15803d; }

/* OOB attempts fold */
#oobRows .oob-attempt-row { display: none; }
#oobRows.oob-attempts-open .oob-attempt-row { display: table-row; }
#oobRows.oob-attempts-open .oob-fold-arrow { transform: rotate(90deg); }

:root[data-theme="dark"] .dns-A     { background:rgba(59,130,246,.16);  color:#93c5fd; }
:root[data-theme="dark"] .dns-AAAA  { background:rgba(139,92,246,.16);  color:#c4b5fd; }
:root[data-theme="dark"] .dns-NS    { background:rgba(245,158,11,.14);   color:#fcd34d; }
:root[data-theme="dark"] .dns-TXT   { background:rgba(34,197,94,.14);   color:#6ee7b7; }
:root[data-theme="dark"] .dns-CNAME { background:rgba(249,115,22,.14);  color:#fdba74; }
:root[data-theme="dark"] .dns-MX    { background:rgba(244,114,182,.14); color:#f9a8d4; }
:root[data-theme="dark"] .dns-HTTPS { background:rgba(34,211,238,.14);  color:#67e8f9; }
:root[data-theme="dark"] .dns-OTHER { background:rgba(148,163,184,.12); color:#94a3b8; }

@media (max-width: 980px) {
  .oob-stats { grid-template-columns: repeat(3, minmax(0,1fr)); }
}

/* ══════════════════════════════════════════════════════════
   APK Analysis
   ══════════════════════════════════════════════════════════ */

#apk { scroll-margin-top: 14px; margin-top: 10px; }

.apk-section { border-color: #6ee7b7; }

.apk-header {
  border-bottom-color: #6ee7b7;
  background: rgba(16,185,129,.07);
}

.apk-title-row { display: flex; align-items: center; gap: 12px; }

.apk-mode-label {
  display: flex; align-items: center; gap: 5px;
  font-size: .83rem; font-weight: 700; color: var(--muted); cursor: pointer;
}

/* Drop zone */
.apk-upload-zone {
  border: 2px dashed var(--line-strong);
  border-radius: 8px;
  margin: 12px;
  background: var(--panel-soft);
  transition: border-color .2s, background .2s;
  cursor: pointer;
}

.apk-upload-zone.drag-over {
  border-color: #10b981;
  background: rgba(16,185,129,.08);
}

.apk-upload-inner {
  display: flex; flex-direction: column; align-items: center;
  gap: 8px; padding: 32px 20px; text-align: center;
}

.apk-upload-icon { font-size: 2.4rem; line-height: 1; }

.apk-upload-title {
  margin: 0; font-size: .95rem; font-weight: 700; color: var(--text);
}

.apk-upload-sub {
  margin: 0; font-size: .8rem; color: var(--muted);
}

/* Progress */
.apk-progress-bar {
  padding: 12px 14px;
  border-top: 1px solid var(--line);
  background: var(--panel);
}

.apk-progress-phases {
  display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px;
}

.apk-phase {
  font-size: .78rem; font-weight: 800; color: var(--muted);
  padding: 3px 10px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--panel-soft);
}

.apk-phase.active {
  border-color: #10b981; color: #065f46; background: rgba(16,185,129,.12);
}

.apk-progress-track {
  height: 8px; border-radius: 999px;
  background: var(--line); overflow: hidden; margin-bottom: 6px;
}

.apk-progress-fill {
  height: 100%; border-radius: inherit;
  background: linear-gradient(90deg, #10b981, #059669);
  transition: width .4s ease;
}

.apk-progress-info {
  display: flex; justify-content: space-between;
  font-size: .78rem; font-weight: 800; color: var(--muted);
  margin-bottom: 6px;
}

.apk-log {
  max-height: 160px; overflow-y: auto;
  font-family: ui-monospace, monospace; font-size: .73rem;
  line-height: 1.5; color: var(--muted);
  background: var(--panel-soft); border: 1px solid var(--line);
  border-radius: 5px; padding: 8px; margin: 0;
}

/* Details / collapsible sections */
.apk-details {
  border-top: 1px solid var(--line);
  background: var(--panel);
}

.apk-details-head {
  padding: 10px 14px;
  font-size: .9rem; font-weight: 800;
  cursor: pointer; list-style: none; user-select: none;
  display: flex; align-items: center; gap: 8px;
}

.apk-details-head::before { content: '▶ '; font-size: .7rem; color: var(--muted); }
details[open] > .apk-details-head::before { content: '▼ '; }

.apk-details-body { padding: 0 14px 14px; }

/* ── Checklist de APKs en scope ──────────────────────────────── */
.apk-checklist { border: 1px solid var(--line); border-radius: 8px; margin: 12px 0; background: var(--panel); }
.apk-checklist-head { padding: 11px 14px; cursor: pointer; list-style: none; user-select: none;
  display: flex; align-items: center; justify-content: space-between; gap: 10px; font-weight: 800; font-size: .92rem; }
.apk-checklist-head::-webkit-details-marker { display: none; }
.apk-checklist-head::before { content: '▶'; font-size: .7rem; color: var(--muted); margin-right: 4px; }
details[open] > .apk-checklist-head::before { content: '▼'; }
.apk-checklist-summary { font-weight: 600; font-size: .78rem; color: var(--muted); white-space: nowrap; }
.apk-checklist-body { padding: 4px 14px 14px; }
.apk-checklist-tools { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.apk-checklist-tools input[type="search"] { flex: 1; min-width: 220px; border: 1px solid var(--border);
  border-radius: 6px; padding: .4rem .6rem; font-size: .82rem; background: var(--bg); color: var(--fg); }
.apk-checklist-filters { display: flex; gap: 6px; flex-wrap: wrap; }
.apk-checklist-hint { font-size: .74rem; color: var(--muted); margin: 0 0 10px; line-height: 1.5; }
.apk-checklist-hint code { background: var(--bg); border: 1px solid var(--border); border-radius: 4px; padding: 0 4px; }
.apk-checklist-groups { display: flex; flex-direction: column; gap: 8px; }
.apk-checklist-empty { color: var(--muted); font-size: .85rem; padding: 1rem 0; text-align: center; }

.apk-chk-group { border: 1px solid var(--border); border-radius: 7px; overflow: hidden; }
.apk-chk-group-head { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 8px 12px; cursor: pointer; list-style: none; user-select: none; background: var(--bg); font-size: .84rem; }
.apk-chk-group-head::-webkit-details-marker { display: none; }
.apk-chk-group-head::before { content: '▸'; color: var(--muted); margin-right: 6px; }
details[open] > .apk-chk-group-head::before { content: '▾'; }
.apk-chk-group-name { font-weight: 700; }
.apk-chk-group-shown { font-weight: 600; color: var(--muted); font-size: .76rem; }
.apk-chk-group-count { font-size: .74rem; color: var(--muted); white-space: nowrap; }
.apk-chk-pager { display: flex; align-items: center; justify-content: center; gap: 12px; flex-wrap: wrap;
  margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--line, var(--border)); }
.apk-chk-pager-info { font-size: .76rem; color: var(--muted); font-variant-numeric: tabular-nums; }
.apk-chk-pager .button[disabled] { opacity: .45; cursor: default; pointer-events: none; }
.apk-chk-list { list-style: none; margin: 0; padding: 0; }
.apk-chk-item { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 6px 12px; border-top: 1px solid var(--line); }
.apk-chk-item.is-server { background: color-mix(in srgb, #22c55e 7%, transparent); }
.apk-chk-label { display: flex; align-items: center; gap: 8px; min-width: 0; flex: 1; cursor: pointer; }
.apk-chk-label input { flex-shrink: 0; width: 15px; height: 15px; cursor: pointer; }
.apk-chk-name { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .8rem;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.apk-chk-meta { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.apk-chk-kind { font-size: .68rem; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 6px; }
.apk-chk-sev { font-size: .68rem; color: var(--muted); text-transform: lowercase; }
.apk-chk-joblink { border: 1px solid var(--border); background: var(--bg); color: var(--fg); cursor: pointer;
  border-radius: 5px; font-size: .72rem; padding: 1px 6px; }
.apk-chk-joblink:hover { border-color: var(--accent); }
.apk-chk-note { font-size: .72rem; }
.apk-chk-badge { font-size: .7rem; font-weight: 600; border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.apk-chk-ok   { background: #dcfce7; color: #15803d; }
.apk-chk-warn { background: #fef9c3; color: #854d0e; }
.apk-chk-err  { background: #ffedd5; color: #c2410c; }
.apk-chk-miss { background: #fee2e2; color: #b91c1c; }
:root[data-theme="dark"] .apk-chk-ok   { background: #052e16; color: #86efac; }
:root[data-theme="dark"] .apk-chk-warn { background: #422006; color: #fde68a; }
:root[data-theme="dark"] .apk-chk-err  { background: #431407; color: #fdba74; }
:root[data-theme="dark"] .apk-chk-miss { background: #450a0a; color: #fca5a5; }

/* Finding cards */
.apk-finding {
  border: 1px solid var(--line);
  border-radius: 6px;
  margin-bottom: 8px;
  overflow: hidden;
  background: var(--panel-soft);
}

.apk-finding-head {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; cursor: pointer;
  flex-wrap: wrap;
}

.apk-finding-head:hover { background: rgba(0,0,0,.03); }

.apk-finding.critical { border-color: #fecaca; }
.apk-finding.high     { border-color: #fed7aa; }
.apk-finding.medium   { border-color: #fde68a; }
.apk-finding.low      { border-color: #bae6fd; }

.apk-finding-title {
  flex: 1; font-size: .88rem; font-weight: 700; min-width: 200px;
}

.apk-finding-component {
  font-family: ui-monospace, monospace; font-size: .74rem;
  color: var(--muted); max-width: 280px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.apk-finding-body {
  padding: 10px 12px; border-top: 1px solid var(--line);
  display: none; font-size: .85rem; line-height: 1.6;
}

.apk-finding.open .apk-finding-body { display: block; }

.apk-finding-body p { margin: 0 0 6px; }
.apk-finding-body strong { color: var(--text); }

.apk-finding-body .apk-poc {
  background: #0f172a; color: #e2e8f0;
  border-radius: 6px; padding: 10px 12px; margin: 8px 0;
  font-family: ui-monospace, monospace; font-size: .78rem;
  line-height: 1.5; overflow-x: auto; white-space: pre;
}

.apk-finding-body .apk-code-snippet {
  background: var(--panel-soft); border: 1px solid var(--line);
  border-radius: 5px; padding: 8px 10px; margin: 6px 0;
  font-family: ui-monospace, monospace; font-size: .75rem;
  line-height: 1.45; overflow-x: auto; white-space: pre;
  color: var(--text); max-height: 220px; overflow-y: auto;
}

/* Summary cards */
.apk-summary-grid {
  display: grid; grid-template-columns: repeat(4, minmax(0,1fr));
  gap: 8px; margin-bottom: 10px;
}

.apk-summary-card {
  border: 1px solid var(--line); border-radius: 6px;
  padding: 10px 12px; background: var(--panel);
}

.apk-summary-card span {
  display: block; font-size: 1.4rem; font-weight: 800; line-height: 1.1;
}

.apk-summary-card p { margin: 3px 0 0; color: var(--muted); font-size: .73rem; font-weight: 800; text-transform: uppercase; }

/* Global stats cards */
.apk-global-stats { margin-bottom: 12px; }
.apk-stats-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: .6rem; margin-bottom: 10px;
}
.apk-stat-card {
  border: 1px solid var(--line); border-radius: 10px;
  padding: .8rem 1rem; background: var(--panel);
  text-align: center;
  transition: border-color .15s, box-shadow .15s;
}
.apk-stat-card:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.apk-stat-value { font-size: 1.4rem; font-weight: 800; line-height: 1.2; font-variant-numeric: tabular-nums; }
.apk-stat-label { margin-top: 3px; color: var(--muted); font-size: .7rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
.apk-stat-sub { margin-top: 3px; color: var(--muted); font-size: .72rem; }
.apk-top-findings { padding: 6px 0; }
.apk-top-finding { display: flex; align-items: center; gap: 6px; padding: 3px 0; }
@media (max-width: 900px) { .apk-stats-grid { grid-template-columns: repeat(3, 1fr); } }

/* APK Lab (VPS5) */
.vps1-apk-section { overflow: hidden; }
.vps1-apk-kpis {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 10px;
  padding: 12px;
}
.vps1-apk-kpis article {
  --vps1-apk-accent: #0ea5e9;
  position: relative;
  display: grid;
  align-content: space-between;
  min-height: 106px;
  padding: 12px;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--vps1-apk-accent) 28%, var(--line));
  border-radius: 8px;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--vps1-apk-accent) 9%, var(--panel)), var(--panel));
  box-shadow: 0 7px 18px rgba(15, 23, 42, .045);
}
.vps1-apk-kpis article::before {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: 3px;
  background: var(--vps1-apk-accent);
}
.vps1-apk-kpis article[data-tone="inventory"] { --vps1-apk-accent: #0ea5e9; }
.vps1-apk-kpis article[data-tone="jobs"] { --vps1-apk-accent: #22c55e; }
.vps1-apk-kpis article[data-tone="findings"] { --vps1-apk-accent: #e11d48; }
.vps1-apk-kpis article[data-tone="secrets"] { --vps1-apk-accent: #f97316; }
.vps1-apk-kpis article[data-tone="endpoints"] { --vps1-apk-accent: #6366f1; }
.vps1-apk-kpis article[data-tone="components"] { --vps1-apk-accent: #14b8a6; }
.vps1-apk-kpis span {
  color: var(--muted);
  font-size: .58rem;
  font-weight: 830;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.vps1-apk-kpis strong {
  min-width: 0;
  color: var(--text);
  font-size: 1.38rem;
  font-weight: 850;
  line-height: 1.1;
  overflow-wrap: anywhere;
  font-variant-numeric: tabular-nums;
}
.vps1-apk-kpis small {
  color: var(--muted);
  font-size: .62rem;
  line-height: 1.25;
}
.vps1-apk-jobline { display: block; font-size: .68rem; line-height: 1.35; }
.vps1-apk-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: end;
  padding: 0 12px 12px;
}
.vps1-apk-toolbar label {
  display: grid;
  gap: 3px;
  margin: 0;
  color: var(--muted);
  font-size: .58rem;
  font-weight: 780;
  text-transform: uppercase;
}
.vps1-apk-toolbar select,
.vps1-apk-toolbar input {
  min-height: 36px;
}
.vps1-apk-search { flex: 1 1 230px; max-width: 360px; }
.vps1-apk-search input { width: 100%; }
.vps1-apk-row { cursor: pointer; }
.vps1-apk-row:hover { background: var(--hover); }
.vps1-apk-tags { padding: 4px 12px; }
.vps1-apk-subtitle {
  margin: 0;
  padding: 12px 12px 4px;
  color: var(--text);
  font-size: .86rem;
}
.vps1-apk-perms {
  padding: 0 12px 12px;
  column-count: 2;
  column-gap: 24px;
  font-size: .85em;
}
.vps1-apk-diff { padding: 12px; }
@media (max-width: 1280px) { .vps1-apk-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 720px) {
  .vps1-apk-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .vps1-apk-kpis article { min-height: 100px; padding: 10px; }
  .vps1-apk-kpis strong { font-size: 1.12rem; }
  .vps1-apk-perms { column-count: 1; }
}

/* Findings table (expandable rows) */
.apk-find-row { cursor: pointer; }
.apk-find-row:hover { background: var(--hover); }
.apk-find-detail { display: none; }
.apk-find-detail.open { display: table-row; }
.apk-find-detail-inner { padding: 8px 12px; font-size: .85rem; line-height: 1.6; background: var(--bg); border-left: 3px solid var(--accent); }
.apk-find-detail-inner pre { margin: 4px 0 8px; padding: 8px; font-size: .78rem; overflow-x: auto; background: var(--panel); border: 1px solid var(--line); border-radius: 4px; }
.apk-find-detail-inner p { margin: 4px 0; }

/* IPC component risk badges */
.risk-none     { color: var(--success); }
.risk-low      { color: var(--accent); }
.risk-medium   { color: var(--warning); }
.risk-high     { color: #9a3412; }
.risk-critical { color: var(--danger); }

/* Dark mode */
:root[data-theme="dark"] .apk-section   { border-color: rgba(52,211,153,.36); }
:root[data-theme="dark"] .apk-header    { background: rgba(52,211,153,.07); border-bottom-color: rgba(52,211,153,.36); }
:root[data-theme="dark"] .apk-upload-zone { border-color: var(--line-strong); }
:root[data-theme="dark"] .apk-upload-zone.drag-over { border-color: #34d399; background: rgba(52,211,153,.1); }
:root[data-theme="dark"] .apk-poc       { background: #020617; color: #94a3b8; }
:root[data-theme="dark"] .apk-finding.critical { border-color: rgba(248,113,113,.4); }
:root[data-theme="dark"] .apk-finding.high     { border-color: rgba(251,146,60,.4); }

@media (max-width:980px) {
  .apk-summary-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
}

/* ── System Monitor ──────────────────────────────────────────── */
.sysmon-section { border-left: none; }

/* Health workspace: the operational page has its own information hierarchy. */
.health-workspace {
  --health-critical: #dc2626;
  --health-warn: #d97706;
  --health-stale: #64748b;
  --health-ok: #059669;
  margin-top: 0;
  border: 1px solid color-mix(in srgb, var(--line) 78%, transparent);
  border-radius: 18px;
  background: color-mix(in srgb, var(--panel) 96%, #dff7fb 4%);
  box-shadow: 0 18px 55px rgba(15, 23, 42, .08);
  overflow: clip;
}
:root[data-theme="dark"] .health-workspace {
  --health-critical: #fb7185;
  --health-warn: #fbbf24;
  --health-stale: #94a3b8;
  --health-ok: #34d399;
  background: color-mix(in srgb, var(--panel) 94%, #0e7490 6%);
  box-shadow: 0 22px 60px rgba(0, 0, 0, .28);
}

.health-hero {
  position: relative;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 28px;
  min-height: 176px;
  padding: 30px 34px 50px;
  color: #f8fafc;
  background:
    radial-gradient(circle at 78% -35%, rgba(34, 211, 238, .25), transparent 43%),
    radial-gradient(circle at 12% 130%, rgba(16, 185, 129, .16), transparent 46%),
    linear-gradient(118deg, #091827 0%, #10283a 54%, #0c3442 100%);
  overflow: hidden;
}
.health-hero::after {
  position: absolute;
  right: 6%;
  bottom: -86px;
  width: 260px;
  height: 260px;
  border: 1px solid rgba(255, 255, 255, .08);
  border-radius: 50%;
  box-shadow: 0 0 0 34px rgba(255, 255, 255, .025), 0 0 0 74px rgba(255, 255, 255, .018);
  content: '';
  pointer-events: none;
}
.health-hero-copy,
.health-hero-actions { position: relative; z-index: 1; }
.health-hero-copy { max-width: 700px; }
.health-kicker,
.health-module-kicker,
.health-attention-eyebrow {
  display: block;
  color: #67e8f9;
  font-size: .7rem;
  font-weight: 800;
  letter-spacing: .13em;
  line-height: 1.2;
  text-transform: uppercase;
}
.health-hero h2 {
  margin-top: 7px;
  font-size: clamp(2rem, 4vw, 3.25rem);
  font-weight: 780;
  letter-spacing: -.055em;
  line-height: 1;
}
.health-hero p {
  max-width: 660px;
  margin: 13px 0 0;
  color: #bfd0dd;
  font-size: .92rem;
  line-height: 1.55;
}
.health-hero-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 9px;
  min-width: 190px;
}
.health-live-state {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 28px;
  padding: 5px 10px;
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 999px;
  background: rgba(4, 15, 25, .38);
  color: #dbeafe;
  font-size: .72rem;
  font-weight: 750;
  backdrop-filter: blur(8px);
}
.health-live-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #94a3b8;
  box-shadow: 0 0 0 4px rgba(148, 163, 184, .12);
}
.health-live-state[data-tone="ok"] .health-live-dot { background: #34d399; box-shadow: 0 0 0 4px rgba(52, 211, 153, .14); }
.health-live-state[data-tone="warn"] .health-live-dot,
.health-live-state[data-tone="stale"] .health-live-dot { background: #fbbf24; box-shadow: 0 0 0 4px rgba(251, 191, 36, .14); }
.health-live-state[data-tone="error"] .health-live-dot,
.health-live-state[data-tone="critical"] .health-live-dot { background: #fb7185; box-shadow: 0 0 0 4px rgba(251, 113, 133, .14); }
.health-hero .sysmon-refresh-label { color: #94a9b9; }
.health-refresh-button {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  border-color: rgba(255, 255, 255, .2) !important;
  background: rgba(255, 255, 255, .09) !important;
  color: #f8fafc !important;
  backdrop-filter: blur(8px);
}
.health-refresh-button:hover { background: rgba(255, 255, 255, .16) !important; }
.health-refresh-button svg {
  width: 15px;
  height: 15px;
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 1.8;
}
.health-refresh-button.is-loading svg { animation: health-spin .8s linear infinite; }
@keyframes health-spin { to { transform: rotate(360deg); } }

.health-kpi-ribbon {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: 1.05fr repeat(4, 1fr);
  margin: -26px 22px 0;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--panel);
  box-shadow: 0 12px 28px rgba(15, 23, 42, .12);
  overflow: hidden;
}
:root[data-theme="dark"] .health-kpi-ribbon { box-shadow: 0 14px 32px rgba(0, 0, 0, .3); }
.health-kpi {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 105px;
  padding: 20px 18px 17px;
  border-left: 1px solid var(--line);
}
.health-kpi:first-child { border-left: 0; }
.health-kpi-primary::before {
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  background: var(--accent);
  content: '';
}
.health-kpi .sysmon-stat-label { text-align: left; }
.health-kpi .sysmon-stat-value {
  margin-top: 7px;
  overflow: hidden;
  font-size: clamp(.92rem, 1.25vw, 1.18rem);
  line-height: 1.25;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.health-kpi small {
  margin-top: auto;
  padding-top: 7px;
  color: var(--muted);
  font-size: .68rem;
}

.health-tabs {
  display: flex;
  gap: 4px;
  margin: 22px 22px 0;
  padding: 5px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: color-mix(in srgb, var(--panel-soft) 88%, var(--panel));
  overflow-x: auto;
  scrollbar-width: none;
}
.health-tabs::-webkit-scrollbar { display: none; }
.health-tab {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-width: max-content;
  padding: 9px 17px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--muted);
  font: inherit;
  font-size: .78rem;
  font-weight: 750;
  cursor: pointer;
  transition: color .15s, background .15s, box-shadow .15s;
}
.health-tab:hover { color: var(--text); background: color-mix(in srgb, var(--panel) 70%, transparent); }
.health-tab.is-active {
  background: var(--panel);
  color: var(--text);
  box-shadow: 0 1px 4px rgba(15, 23, 42, .11);
}
.health-tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.health-tab-count {
  min-width: 19px;
  padding: 2px 5px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--danger) 13%, transparent);
  color: var(--danger);
  font-size: .65rem;
  line-height: 1.25;
}

.health-panels { padding: 18px 22px 24px; }
.health-tab-panel[hidden] { display: none !important; }
.health-tab-panel.is-active { animation: health-panel-in .18s ease-out; }
@keyframes health-panel-in { from { opacity: .2; transform: translateY(3px); } }
.health-module {
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--panel);
  overflow: hidden;
}
.health-module-spaced + .health-module-spaced { margin-top: 16px; }
.health-module-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 68px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--line);
  background: color-mix(in srgb, var(--panel-soft) 58%, var(--panel));
}
.health-module-head h3 {
  margin: 3px 0 0;
  font-size: .94rem;
  letter-spacing: -.015em;
}
.health-module-head p {
  margin: 4px 0 0;
  color: var(--muted);
  font-size: .73rem;
  line-height: 1.4;
}
.health-module-kicker { color: var(--accent); font-size: .61rem; }
.health-two-column {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
  gap: 16px;
  margin-top: 16px;
}

.health-attention-hero {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  min-height: 126px;
  padding: 22px 24px;
  border: 1px solid color-mix(in srgb, var(--health-stale) 30%, var(--line));
  border-radius: 14px;
  background:
    radial-gradient(circle at 88% 15%, color-mix(in srgb, var(--health-stale) 11%, transparent), transparent 36%),
    var(--panel);
}
.health-attention-hero[data-tone="ok"] { border-color: color-mix(in srgb, var(--health-ok) 42%, var(--line)); }
.health-attention-hero[data-tone="warn"],
.health-attention-hero[data-tone="stale"] { border-color: color-mix(in srgb, var(--health-warn) 48%, var(--line)); }
.health-attention-hero[data-tone="critical"],
.health-attention-hero[data-tone="error"] { border-color: color-mix(in srgb, var(--health-critical) 50%, var(--line)); }
.health-attention-eyebrow { color: var(--accent); }
.health-attention-hero h3 {
  margin: 7px 0 0;
  font-size: clamp(1.25rem, 2vw, 1.75rem);
  letter-spacing: -.035em;
}
.health-attention-hero p { margin: 7px 0 0; color: var(--muted); font-size: .8rem; }
.health-attention-score {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 86px;
  min-width: 86px;
  height: 86px;
  border: 1px solid color-mix(in srgb, currentColor 20%, var(--line));
  border-radius: 50%;
  color: var(--health-stale);
  background: color-mix(in srgb, currentColor 5%, var(--panel));
}
.health-attention-hero[data-tone="ok"] .health-attention-score { color: var(--health-ok); }
.health-attention-hero[data-tone="warn"] .health-attention-score,
.health-attention-hero[data-tone="stale"] .health-attention-score { color: var(--health-warn); }
.health-attention-hero[data-tone="critical"] .health-attention-score,
.health-attention-hero[data-tone="error"] .health-attention-score { color: var(--health-critical); }
.health-attention-score strong { font-size: 1.75rem; line-height: 1; }
.health-attention-score span { margin-top: 4px; font-size: .61rem; font-weight: 750; text-transform: uppercase; }

.health-attention-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin-top: 12px;
}
.health-attention-card {
  display: grid;
  grid-template-columns: 4px 1fr;
  min-width: 0;
  border: 1px solid var(--line);
  border-radius: 11px;
  background: var(--panel);
  overflow: hidden;
}
.health-attention-marker { background: var(--health-warn); }
.health-attention-card[data-tone="critical"] .health-attention-marker,
.health-attention-card[data-tone="error"] .health-attention-marker { background: var(--health-critical); }
.health-attention-card[data-tone="stale"] .health-attention-marker { background: var(--health-stale); }
.health-attention-card-body { min-width: 0; padding: 12px 13px; }
.health-attention-card-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.health-attention-card-top strong { font-size: .8rem; }
.health-tone-badge {
  flex: 0 0 auto;
  padding: 3px 7px;
  border-radius: 999px;
  color: var(--health-warn);
  background: color-mix(in srgb, var(--health-warn) 10%, transparent);
  font-size: .61rem;
  font-weight: 780;
}
.health-attention-card[data-tone="critical"] .health-tone-badge,
.health-attention-card[data-tone="error"] .health-tone-badge { color: var(--health-critical); background: color-mix(in srgb, var(--health-critical) 10%, transparent); }
.health-attention-card[data-tone="stale"] .health-tone-badge { color: var(--health-stale); background: color-mix(in srgb, var(--health-stale) 10%, transparent); }
.health-attention-card p { margin: 6px 0 0; color: var(--muted); font-size: .72rem; line-height: 1.45; }
.health-attention-link {
  margin-top: 8px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--accent);
  font: inherit;
  font-size: .7rem;
  font-weight: 750;
  cursor: pointer;
}
.health-attention-link:hover { text-decoration: underline; }
.health-attention-empty {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 76px;
  padding: 14px 16px;
  border: 1px solid color-mix(in srgb, var(--health-ok) 34%, var(--line));
  border-radius: 11px;
  background: color-mix(in srgb, var(--health-ok) 5%, var(--panel));
}
.health-attention-empty.is-loading { border-color: var(--line); background: var(--panel); }
.health-attention-empty-mark {
  display: block;
  width: 26px;
  min-width: 26px;
  height: 26px;
  border: 7px solid color-mix(in srgb, var(--health-ok) 16%, transparent);
  border-radius: 50%;
  background: var(--health-ok);
}
.health-attention-empty.is-loading .health-attention-empty-mark { background: var(--health-stale); border-color: color-mix(in srgb, var(--health-stale) 16%, transparent); }
.health-attention-empty strong { font-size: .8rem; }
.health-attention-empty p { margin: 3px 0 0; color: var(--muted); font-size: .72rem; }
.health-skeleton-card {
  height: 80px;
  border: 1px solid var(--line);
  border-radius: 11px;
  background: linear-gradient(100deg, var(--panel) 20%, var(--panel-soft) 45%, var(--panel) 70%);
  background-size: 240% 100%;
  animation: health-skeleton 1.2s linear infinite;
}
@keyframes health-skeleton { to { background-position: -200% 0; } }

.health-inline-controls { display: flex; align-items: center; gap: 7px; }
.health-inline-controls label { color: var(--muted); font-size: .7rem; font-weight: 700; }
.health-inline-controls select {
  min-height: 31px;
  padding: 4px 28px 4px 9px;
  border: 1px solid var(--line);
  border-radius: 7px;
  background: var(--panel);
  color: var(--text);
  font: inherit;
  font-size: .73rem;
}
.health-heatmap-wrap { position: relative; margin: 0; padding: 14px 14px 5px; overflow-x: auto; }
.health-heatmap-summary { min-height: 34px; padding: 4px 14px 13px; color: var(--muted); font-size: .75rem; }
.health-history-table { border: 0; border-radius: 0; }
.health-history-table table { min-width: 780px; }
.health-inline-error { color: var(--danger) !important; }

.health-vps-grid.sysmon-meta { margin: 0; padding: 14px; background: transparent; }
.health-vps-grid .sysmon-stat { text-align: left; }
.health-vps-grid .sysmon-stat-label,
.health-vps-grid .sysmon-stat-value { text-align: left; }
.health-vps-grid .sysmon-stat small { margin-top: 7px; color: var(--muted); font-size: .68rem; }

.health-portfolio-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  padding: 13px 14px 5px;
}
.health-portfolio-summary span {
  padding: 5px 9px;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--muted);
  background: var(--panel-soft);
  font-size: .7rem;
}
.health-portfolio-summary b { color: var(--text); }
.health-portfolio-summary .has-attention { border-color: color-mix(in srgb, var(--health-warn) 45%, var(--line)); color: var(--health-warn); }
.health-policy-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 9px; padding: 10px 14px 14px; }
.health-policy-card { padding: 11px 12px; border: 1px solid color-mix(in srgb, var(--health-warn) 35%, var(--line)); border-radius: 10px; background: var(--panel-soft); }
.health-policy-card[data-tone="critical"] { border-color: color-mix(in srgb, var(--health-critical) 42%, var(--line)); }
.health-policy-card-top { display: flex; justify-content: space-between; gap: 8px; }
.health-policy-card-top strong { min-width: 0; overflow: hidden; font-size: .75rem; text-overflow: ellipsis; white-space: nowrap; }
.health-policy-card-top span { flex: 0 0 auto; color: var(--health-warn); font-size: .62rem; font-weight: 800; text-transform: uppercase; }
.health-policy-card[data-tone="critical"] .health-policy-card-top span { color: var(--health-critical); }
.health-policy-card p { margin: 5px 0 0; color: var(--text); font-size: .68rem; }
.health-policy-card small { display: block; margin-top: 5px; color: var(--muted); font-size: .65rem; line-height: 1.4; }
.health-policy-ok,
.health-policy-drift { display: flex; align-items: center; gap: 11px; margin: 9px 14px 14px; padding: 12px; border-radius: 10px; }
.health-policy-ok { border: 1px solid color-mix(in srgb, var(--health-ok) 35%, var(--line)); background: color-mix(in srgb, var(--health-ok) 5%, var(--panel)); }
.health-policy-ok > span { width: 10px; height: 10px; border-radius: 50%; background: var(--health-ok); box-shadow: 0 0 0 5px color-mix(in srgb, var(--health-ok) 12%, transparent); }
.health-policy-ok strong,
.health-policy-drift strong { display: block; font-size: .76rem; }
.health-policy-ok p { margin: 3px 0 0; color: var(--muted); font-size: .68rem; }
.health-policy-drift { justify-content: space-between; border: 1px solid color-mix(in srgb, var(--health-critical) 42%, var(--line)); color: var(--health-critical); background: color-mix(in srgb, var(--health-critical) 6%, var(--panel)); font-size: .7rem; }

.health-workspace #sysmonAlerts,
.health-workspace #healthCheckRows { min-height: 110px; }
.health-workspace .sysmon-alert-row { padding: 10px 13px; }
.health-workspace .health-list { padding: 8px; }
.health-workspace .health-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: 10px 10px 0;
  border-radius: 8px;
}
.health-workspace .health-summary strong { font-size: .76rem; }
.health-workspace .health-summary span { color: inherit; font-size: .66rem; font-weight: 650; opacity: .78; }
.health-diagnostic-details { margin: 9px 10px 10px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel-soft); overflow: hidden; }
.health-diagnostic-details > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 52px;
  padding: 9px 11px;
  color: var(--text);
  cursor: pointer;
  list-style: none;
}
.health-diagnostic-details > summary::-webkit-details-marker { display: none; }
.health-diagnostic-details > summary > span:first-child { display: grid; gap: 2px; min-width: 0; }
.health-diagnostic-details > summary strong { font-size: .75rem; }
.health-diagnostic-details > summary small { color: var(--muted); font-size: .66rem; font-weight: 500; }
.health-details-action { flex: 0 0 auto; color: var(--accent); font-size: .68rem; font-weight: 760; }
.health-diagnostic-details[open] .health-details-action { font-size: 0; }
.health-diagnostic-details[open] .health-details-action::after { content: 'Ocultar detalle'; font-size: .68rem; }
.health-diagnostic-details .health-list { max-height: 420px; padding: 7px; border-top: 1px solid var(--line); overflow: auto; }
.health-failed-list { margin: 0 2px; }
.health-workspace .scanner-summary { margin-bottom: 0; }
.health-workspace .scanner-grid { border: 0; border-top: 1px solid var(--line); border-radius: 0; }
.health-workspace .sh-wrap { padding: 0 13px 13px; }
.health-workspace .sh-summary { margin: 12px 13px; }
.health-workspace .pipeline-container { padding: 15px; }
.health-workspace .pipeline-throughput { margin: 0 14px 14px; }
.health-workspace .pipeline-health-strip { margin: 0 14px 12px; }
.health-workspace .funnel-container { border: 0; border-radius: 0; }

@media (max-width: 980px) {
  .health-kpi-ribbon { grid-template-columns: repeat(3, 1fr); }
  .health-kpi:nth-child(4) { border-left: 0; border-top: 1px solid var(--line); }
  .health-kpi:nth-child(5) { border-top: 1px solid var(--line); }
  .health-two-column { grid-template-columns: 1fr; }
}

@media (max-width: 700px) {
  .health-workspace { margin-inline: -4px; border-radius: 13px; }
  .health-hero { align-items: flex-start; min-height: 0; padding: 23px 19px 48px; }
  .health-hero-copy p { font-size: .8rem; }
  .health-hero-actions { min-width: 0; }
  .health-live-state { padding: 5px 8px; }
  .health-live-state span:last-child { max-width: 85px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .health-hero .sysmon-refresh-label { display: none; }
  .health-refresh-button { padding: 8px; font-size: 0; }
  .health-refresh-button svg { width: 18px; height: 18px; }
  .health-kpi-ribbon { grid-template-columns: repeat(2, 1fr); margin: -25px 11px 0; }
  .health-kpi { min-height: 94px; padding: 16px 13px 13px; border-top: 1px solid var(--line); }
  .health-kpi:nth-child(-n+2) { border-top: 0; }
  .health-kpi:nth-child(odd) { border-left: 0; }
  .health-kpi:nth-child(4) { border-left: 1px solid var(--line); }
  .health-kpi:last-child { grid-column: 1 / -1; border-left: 0; }
  .health-tabs { margin: 14px 11px 0; }
  .health-tab { padding-inline: 13px; }
  .health-panels { padding: 12px 11px 16px; }
  .health-attention-hero { min-height: 110px; padding: 17px; }
  .health-attention-score { width: 68px; min-width: 68px; height: 68px; }
  .health-attention-score strong { font-size: 1.38rem; }
  .health-attention-grid { grid-template-columns: 1fr; }
  .health-module-head-wrap { align-items: flex-start; flex-direction: column; }
  .health-inline-controls { width: 100%; }
  .health-inline-controls .button { margin-left: auto; }
}

@media (max-width: 430px) {
  .health-hero { gap: 10px; }
  .health-kicker { font-size: .61rem; }
  .health-hero h2 { font-size: 1.9rem; }
  .health-hero p { max-width: 245px; }
  .health-attention-card-top { align-items: flex-start; flex-direction: column; gap: 5px; }
  .health-policy-drift { align-items: flex-start; flex-direction: column; }
}

.sysmon-controls {
  display: flex;
  align-items: center;
  gap: .75rem;
}
.sysmon-refresh-label {
  font-size: .78rem;
  color: var(--muted);
}

.sysmon-meta {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: .6rem;
  padding: .8rem 1rem;
  background: transparent;
  border-bottom: none;
  margin-bottom: .5rem;
}
.sysmon-stat {
  display: flex;
  flex-direction: column;
  text-align: center;
  padding: .7rem .5rem;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  transition: border-color .15s, box-shadow .15s;
}
.sysmon-stat:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.sysmon-stat-label {
  font-size: .7rem;
  font-weight: 700;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: .04em;
}
.sysmon-stat-value { font-size: 1.1rem; font-weight: 800; margin-top: 3px; font-variant-numeric: tabular-nums; }
.sysmon-warn       { color: var(--warning, #d97706); }

.sysmon-status-ok      { color: var(--success, #16a34a); }
.sysmon-status-alerta  { color: var(--warning, #d97706); }
.sysmon-status-critico { color: var(--danger,  #dc2626); }

/* Alert rows */
#sysmonAlerts { display: flex; flex-direction: column; }

.sysmon-alert-row {
  display: grid;
  grid-template-columns: 68px 24px 1fr auto;
  align-items: center;
  gap: .6rem;
  padding: .55rem 1rem;
  border-bottom: 1px solid var(--line);
  font-size: .84rem;
}
.sysmon-alert-row:last-child { border-bottom: none; }

.sysmon-alert-sev {
  font-size: .7rem;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 4px;
  text-align: center;
  white-space: nowrap;
  letter-spacing: .04em;
}
.sev-critico .sysmon-alert-sev { background: #fee2e2; color: #991b1b; }
.sev-alto    .sysmon-alert-sev { background: #ffedd5; color: #9a3412; }
.sev-medio   .sysmon-alert-sev { background: #fef9c3; color: #854d0e; }
.sev-bajo    .sysmon-alert-sev { background: #dcfce7; color: #166534; }
.sev-info    .sysmon-alert-sev { background: var(--line); color: var(--muted); }

.sev-critico { background: rgba(220,38,38,.04); }
.sev-alto    { background: rgba(234,88,12,.03); }

.sysmon-alert-icon {
  display: block;
  width: 10px;
  height: 10px;
  margin: auto;
  border-radius: 50%;
  background: var(--health-stale, #64748b);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--health-stale, #64748b) 13%, transparent);
}
.sev-critico .sysmon-alert-icon { background: var(--health-critical, #dc2626); box-shadow: 0 0 0 4px color-mix(in srgb, var(--health-critical, #dc2626) 13%, transparent); }
.sev-alto .sysmon-alert-icon,
.sev-medio .sysmon-alert-icon { background: var(--health-warn, #d97706); box-shadow: 0 0 0 4px color-mix(in srgb, var(--health-warn, #d97706) 13%, transparent); }
.sev-bajo .sysmon-alert-icon { background: var(--health-ok, #059669); box-shadow: 0 0 0 4px color-mix(in srgb, var(--health-ok, #059669) 13%, transparent); }
.sysmon-alert-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.sysmon-alert-title  { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sysmon-alert-detail { font-size: .76rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sysmon-alert-ts     { font-size: .76rem; color: var(--muted); white-space: nowrap; }

.sysmon-ok { color: var(--success, #16a34a); font-weight: 600; }

/* Dark mode */
:root[data-theme="dark"] .sev-critico .sysmon-alert-sev { background: rgba(248,113,113,.2); color: #fca5a5; }
:root[data-theme="dark"] .sev-alto    .sysmon-alert-sev { background: rgba(251,146,60,.2);  color: #fdba74; }
:root[data-theme="dark"] .sev-medio   .sysmon-alert-sev { background: rgba(250,204,21,.15); color: #fde047; }
:root[data-theme="dark"] .sev-critico { background: rgba(220,38,38,.07); }
:root[data-theme="dark"] .sev-alto    { background: rgba(234,88,12,.05); }

@media (max-width: 640px) {
  .sysmon-alert-row { grid-template-columns: 60px 20px 1fr; }
  .sysmon-alert-ts  { display: none; }
}

/* ── Pipeline Flow KPI ─────────────────────────────────────── */
.pipeline-container {
  display: flex;
  align-items: stretch;
  gap: 0;
  padding: 16px 12px;
  overflow-x: auto;
}
.pipeline-stage {
  flex: 1;
  min-width: 180px;
  display: flex;
  flex-direction: column;
  align-items: center;
  position: relative;
}
.pipeline-stage:not(:last-child)::after {
  content: '';
  position: absolute;
  right: -2px;
  top: 50%;
  width: 0; height: 0;
  border-top: 14px solid transparent;
  border-bottom: 14px solid transparent;
  border-left: 14px solid var(--line);
  transform: translateY(-50%);
  z-index: 1;
}
.pipeline-node {
  width: 100%;
  border: 2px solid var(--line);
  border-radius: 12px;
  padding: 12px 14px;
  background: var(--bg2, #1e1e1e);
  position: relative;
  transition: border-color .3s;
}
.pipeline-node.status-ok    { border-color: #16a34a; }
.pipeline-node.status-warn  { border-color: #d97706; }
.pipeline-node.status-crit  { border-color: #dc2626; }
.pipeline-node.node-accent  { border-color: #8b5cf6; background: color-mix(in srgb, #8b5cf6 5%, var(--bg2, #1e1e1e)); }
.pipeline-stage-secondary   { max-width: 280px; margin-top: 8px; }

.pipeline-dot {
  width: 12px; height: 12px;
  border-radius: 50%;
  display: inline-block;
  margin-right: 6px;
  vertical-align: middle;
  flex-shrink: 0;
}
.pipeline-dot.green  { background: #16a34a; box-shadow: 0 0 6px #16a34a88; }
.pipeline-dot.yellow { background: #d97706; box-shadow: 0 0 6px #d9770688; }
.pipeline-dot.red    { background: #dc2626; box-shadow: 0 0 6px #dc262688; }

.pipeline-title {
  font-weight: 700;
  font-size: .88rem;
  margin-bottom: 8px;
  display: flex;
  align-items: center;
}
.pipeline-bar-track {
  width: 100%;
  height: 14px;
  background: var(--line);
  border-radius: 8px;
  overflow: hidden;
  margin: 8px 0 6px;
}
.pipeline-bar-fill {
  height: 100%;
  border-radius: 4px;
  transition: width .6s ease;
}
.pipeline-bar-fill.green  { background: linear-gradient(90deg, #16a34a, #22c55e); }
.pipeline-bar-fill.yellow { background: linear-gradient(90deg, #d97706, #f59e0b); }
.pipeline-bar-fill.red    { background: linear-gradient(90deg, #dc2626, #ef4444); }

.pipeline-metrics {
  display: flex;
  flex-direction: column;
  gap: 3px;
  font-size: .76rem;
  color: var(--muted);
  width: 100%;
}
.pipeline-metric {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.pipeline-metric b {
  color: var(--text);
  font-weight: 600;
}
.pipeline-metric .val-ok   { color: #16a34a; }
.pipeline-metric .val-warn { color: #d97706; }
.pipeline-metric .val-crit { color: #dc2626; }
.pipeline-pct {
  font-size: 1.4rem;
  font-weight: 800;
  margin-top: 4px;
  text-align: center;
}
.pipeline-pct.green  { color: #22c55e; }
.pipeline-pct.yellow { color: #f59e0b; }
.pipeline-pct.red    { color: #ef4444; }

.pipeline-eta {
  font-size: .72rem;
  text-align: center;
  color: var(--muted);
  margin-top: 2px;
}
.pipeline-throughput {
  margin-top: 10px;
  padding: 8px 12px;
  background: var(--bg2, #1e1e1e);
  border: 1px solid var(--line);
  border-radius: 10px;
  font-size: .76rem;
  transition: border-color .15s;
}
.pipeline-throughput:hover { border-color: var(--line-strong); }
.pipeline-throughput-title {
  font-weight: 600;
  font-size: .78rem;
  margin-bottom: 6px;
}
.pipeline-tp-row {
  display: flex;
  justify-content: space-between;
  padding: 2px 0;
  border-bottom: 1px solid var(--line);
}
.pipeline-tp-row:last-child { border: none; }
.pipeline-tp-bar {
  height: 4px;
  background: #3b82f6;
  border-radius: 2px;
  margin-top: 3px;
  transition: width .4s;
}
.pipeline-health-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 8px;
  margin: 0 12px 10px;
}
.pipeline-health-chip {
  display: grid;
  gap: 2px;
  min-height: 58px;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--bg2, #1e1e1e);
}
.pipeline-health-chip span {
  overflow: hidden;
  color: var(--muted);
  font-size: .72rem;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pipeline-health-chip b {
  font-size: .82rem;
}
.pipeline-health-chip small {
  color: var(--muted);
  font-size: .69rem;
  white-space: nowrap;
}
.pipeline-health-ok { border-color: #16a34a; }
.pipeline-health-warn { border-color: #d97706; }
.pipeline-health-crit { border-color: #dc2626; }
.pipeline-coverage-panel {
  display: grid;
  gap: 10px;
  margin: 0 12px 10px;
  padding: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--bg2, #1e1e1e);
}
.pipeline-coverage-panel-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-width: 0;
}
.pipeline-coverage-panel-top strong {
  font-size: .86rem;
}
.pipeline-coverage-panel-top span {
  overflow: hidden;
  color: var(--muted);
  font-size: .74rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pipeline-coverage-summary,
.pipeline-blocker-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(145px, 1fr));
  gap: 8px;
}
.pipeline-coverage-summary div,
.pipeline-blocker-chip {
  display: grid;
  gap: 2px;
  min-width: 0;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(15, 23, 42, .35);
}
.pipeline-coverage-summary span,
.pipeline-blocker-chip span {
  overflow: hidden;
  color: var(--muted);
  font-size: .7rem;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pipeline-coverage-summary b,
.pipeline-blocker-chip b {
  font-size: .82rem;
}
.pipeline-blocker-chip small {
  color: var(--muted);
  font-size: .69rem;
  white-space: nowrap;
}

@media (max-width: 700px) {
  .pipeline-container {
    flex-direction: column;
    gap: 12px;
  }
  .pipeline-stage:not(:last-child)::after {
    right: 50%;
    top: auto;
    bottom: -10px;
    border-left: 14px solid transparent;
    border-right: 14px solid transparent;
    border-top: 14px solid var(--line);
    border-bottom: none;
    transform: translateX(50%);
  }
}

/* ── Finding Funnel KPI ──────────────────────── */
.funnel-container {
  display: flex;
  align-items: flex-end;
  gap: 2px;
  padding: 16px;
  background: var(--panel);
  border-radius: 10px;
  border: 1px solid var(--line);
  transition: box-shadow .15s;
}
.funnel-container:hover {
  box-shadow: 0 2px 8px rgba(0,0,0,.04);
}
.funnel-stage {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  position: relative;
}
.funnel-bar {
  width: 100%;
  border-radius: 6px 6px 0 0;
  min-height: 8px;
  transition: height .5s ease;
}
.funnel-bar.c-scan   { background: linear-gradient(180deg, #3b82f6, #1d4ed8); }
.funnel-bar.c-find   { background: linear-gradient(180deg, #8b5cf6, #6d28d9); }
.funnel-bar.c-indicio{ background: linear-gradient(180deg, #f59e0b, #d97706); }
.funnel-bar.c-inv    { background: linear-gradient(180deg, #10b981, #059669); }
.funnel-bar.c-report { background: linear-gradient(180deg, #ef4444, #dc2626); }
.funnel-bar.c-bounty { background: linear-gradient(180deg, #22c55e, #16a34a); }
.funnel-label {
  font-size: .7em;
  color: var(--muted);
  margin-top: 6px;
  text-align: center;
  line-height: 1.2;
}
.funnel-value {
  font-size: .85em;
  font-weight: 700;
  color: var(--text);
  margin-top: 2px;
}
.funnel-sub {
  font-size: .65em;
  color: var(--muted);
}
.funnel-arrow {
  font-size: 1.2em;
  color: var(--muted);
  align-self: center;
  margin-bottom: 28px;
}
.funnel-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
  padding: 0 16px;
}
.funnel-stat-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 10px;
  border-radius: 20px;
  font-size: .75em;
  background: var(--panel-soft);
  border: 1px solid var(--line);
  color: var(--text);
}
.funnel-stat-chip .dot {
  width: 8px; height: 8px; border-radius: 50%;
}
.funnel-stat-chip .dot.resolved  { background: #22c55e; }
.funnel-stat-chip .dot.triaged   { background: #3b82f6; }
.funnel-stat-chip .dot.pending   { background: #f59e0b; }
.funnel-stat-chip .dot.dup       { background: #a855f7; }
.funnel-stat-chip .dot.na        { background: #6b7280; }
.funnel-stat-chip .dot.info      { background: #94a3b8; }
.funnel-timeline {
  display: flex;
  gap: 3px;
  align-items: flex-end;
  height: 40px;
  padding: 0 16px;
  margin-top: 10px;
}
.funnel-tl-bar {
  flex: 1;
  background: #3b82f6;
  border-radius: 2px 2px 0 0;
  min-width: 10px;
  position: relative;
  transition: height .4s;
}
.funnel-tl-bar:hover::after {
  content: attr(data-label);
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%);
  font-size: .6em;
  background: var(--panel);
  border: 1px solid var(--line);
  padding: 2px 5px;
  border-radius: 3px;
  white-space: nowrap;
}

/* ── Scanner Health KPI ──────────────────────── */
.scanner-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 8px;
  padding: 12px;
  background: var(--panel);
  border-radius: 10px;
  border: 1px solid var(--line);
}
.scanner-card {
  display: flex;
  flex-direction: column;
  padding: 10px 12px;
  border-radius: 10px;
  border-left: 3px solid;
  background: var(--panel-soft);
  font-size: .78em;
  gap: 2px;
  transition: border-color .15s, box-shadow .15s;
}
.scanner-card:hover {
  box-shadow: 0 2px 6px rgba(14, 116, 144, .06);
}
.scanner-card.s-ok      { border-color: #22c55e; }
.scanner-card.s-warn    { border-color: #f59e0b; }
.scanner-card.s-stale   { border-color: #94a3b8; }
.scanner-card.s-failing { border-color: #ef4444; }
.scanner-card.s-suppressed { border-color: color-mix(in srgb, #94a3b8 40%, var(--line)); opacity: .72; }
.scanner-card .sc-name {
  font-weight: 600;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.scanner-card .sc-meta {
  color: var(--muted);
  font-size: .88em;
}
.scanner-card .sc-badge {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 8px;
  font-size: .8em;
  font-weight: 600;
  text-transform: uppercase;
}
.sc-badge.s-suppressed { color: #64748b; background: color-mix(in srgb, #94a3b8 14%, transparent); }
.sc-badge.s-ok      { background: #dcfce7; color: #166534; }
.sc-badge.s-warn    { background: #fef3c7; color: #92400e; }
.sc-badge.s-stale   { background: #f1f5f9; color: #475569; }
.sc-badge.s-failing { background: #fee2e2; color: #991b1b; }
:root[data-theme="dark"] .sc-badge.s-ok      { background: #14532d; color: #86efac; }
:root[data-theme="dark"] .sc-badge.s-warn    { background: #78350f; color: #fcd34d; }
:root[data-theme="dark"] .sc-badge.s-stale   { background: #1e293b; color: #94a3b8; }
:root[data-theme="dark"] .sc-badge.s-failing { background: #7f1d1d; color: #fca5a5; }
.scanner-summary {
  display: flex;
  gap: 10px;
  padding: 10px 12px;
  margin-bottom: 6px;
  flex-wrap: wrap;
}
.scanner-summary-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 12px;
  border-radius: 20px;
  font-size: .82em;
  font-weight: 600;
  background: var(--panel-soft);
  border: 1px solid var(--line);
}

/* ── Scanner portfolio / desired state ─────────────────── */
.scanner-portfolio-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
}
.scanner-portfolio-head h3 { margin-bottom: 2px; }
.scanner-portfolio-head small,
.scanner-portfolio-table small {
  display: block;
  color: var(--muted);
  margin-top: 2px;
}
.scanner-portfolio-summary {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.scanner-portfolio-manifest {
  margin: 8px 0;
  color: var(--muted);
  font-size: .78em;
}
.scanner-portfolio-unmanaged {
  margin: 10px 0;
  padding: 9px 11px;
  border: 1px solid color-mix(in srgb, var(--warning) 55%, var(--line));
  border-radius: 8px;
  background: color-mix(in srgb, var(--warning) 8%, transparent);
}
.scanner-portfolio-unmanaged > small {
  display: block;
  color: var(--muted);
  margin: 2px 0 7px;
}
.scanner-portfolio-unmanaged-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 4px 12px;
  font-size: .78em;
}
.scanner-portfolio-unmanaged-list span { overflow-wrap: anywhere; }
.sp-tier, .sp-status, .sp-attention {
  display: inline-block;
  border-radius: 999px;
  padding: 2px 7px;
  font-size: .75em;
  font-weight: 700;
  white-space: nowrap;
}
.sp-tier-core { background: #fee2e2; color: #991b1b; }
.sp-tier-conditional { background: #fef3c7; color: #92400e; }
.sp-tier-feeder { background: #dbeafe; color: #1e40af; }
.sp-tier-paused { background: #e2e8f0; color: #475569; }
.sp-attention { background: #dcfce7; color: #166534; }
.sp-attention.has-attention { background: #fee2e2; color: #991b1b; }
.sp-status-healthy, .sp-status-on_demand { background: #dcfce7; color: #166534; }
.sp-status-paused { background: #e2e8f0; color: #475569; }
.sp-status-attention, .sp-status-needs_review { background: #fef3c7; color: #92400e; }
.sp-status-disconnected, .sp-status-drift_active { background: #fee2e2; color: #991b1b; }
.scanner-portfolio-table td { vertical-align: top; }
.scanner-portfolio-table .sp-row-attention { background: color-mix(in srgb, var(--warning) 7%, transparent); }
:root[data-theme="dark"] .sp-tier-core,
:root[data-theme="dark"] .sp-attention.has-attention,
:root[data-theme="dark"] .sp-status-disconnected,
:root[data-theme="dark"] .sp-status-drift_active { background: #7f1d1d; color: #fca5a5; }
:root[data-theme="dark"] .sp-tier-conditional,
:root[data-theme="dark"] .sp-status-attention,
:root[data-theme="dark"] .sp-status-needs_review { background: #78350f; color: #fcd34d; }
:root[data-theme="dark"] .sp-tier-feeder { background: #1e3a8a; color: #bfdbfe; }
:root[data-theme="dark"] .sp-tier-paused,
:root[data-theme="dark"] .sp-status-paused { background: #1e293b; color: #cbd5e1; }
.scanner-filter-bar {
  display: flex;
  gap: 6px;
  padding: 0 12px 8px;
  flex-wrap: wrap;
}
.scanner-filter-btn {
  padding: 3px 10px;
  border-radius: 14px;
  border: 1px solid var(--line);
  background: var(--panel-soft);
  color: var(--text);
  font-size: .75em;
  cursor: pointer;
}
.scanner-filter-btn.active {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

/* ── Program Coverage KPI ────────────────────── */
.coverage-wrap {
  background: var(--panel);
  border-radius: 10px;
  border: 1px solid var(--line);
  padding: 12px;
  transition: box-shadow .15s;
}
.coverage-wrap:hover {
  box-shadow: 0 2px 8px rgba(0,0,0,.04);
}
.coverage-level-bar {
  display: flex;
  height: 28px;
  border-radius: 6px;
  overflow: hidden;
  margin-bottom: 10px;
}
.coverage-seg {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: .7em;
  font-weight: 600;
  color: #fff;
  transition: width .5s;
  min-width: 0;
  overflow: hidden;
}
.coverage-seg.l-blind    { background: #6b7280; }
.coverage-seg.l-enum     { background: #3b82f6; }
.coverage-seg.l-probed   { background: #8b5cf6; }
.coverage-seg.l-crawled  { background: #f59e0b; }
.coverage-seg.l-indicios { background: #ef4444; }
.coverage-seg.l-reported { background: #22c55e; }
.coverage-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 10px;
}
.coverage-leg-item {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: .72em;
  color: var(--muted);
}
.coverage-leg-dot {
  width: 10px; height: 10px; border-radius: 2px;
}
.coverage-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .78em;
}
.coverage-table th {
  text-align: left;
  padding: 4px 6px;
  border-bottom: 2px solid var(--line);
  color: var(--muted);
  font-weight: 600;
  font-size: .88em;
  position: sticky;
  top: 0;
  background: var(--panel);
}
.coverage-table td {
  padding: 3px 6px;
  border-bottom: 1px solid var(--line);
  white-space: nowrap;
}
.coverage-table tr:hover { background: var(--panel-soft); }
.coverage-table .cov-bar {
  display: inline-block;
  height: 6px;
  border-radius: 3px;
  min-width: 2px;
}
.coverage-scroll {
  max-height: 400px;
  overflow-y: auto;
}
.coverage-search {
  width: 200px;
  padding: 4px 10px;
  border-radius: 6px;
  border: 1px solid var(--line);
  background: var(--panel-soft);
  color: var(--text);
  font-size: .82em;
  margin-bottom: 8px;
}

.scov-grid {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 8px;
}
.scov-row {
  display: grid;
  grid-template-columns: 140px 1fr 48px 100px;
  align-items: center;
  gap: 8px;
  font-size: .82rem;
}
.scov-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 500;
}
.scov-bar-wrap {
  height: 14px;
  overflow: hidden;
  border-radius: 3px;
  background: var(--panel-soft);
}
.scov-bar {
  height: 100%;
  border-radius: 3px;
  transition: width .3s;
}
.scov-pct,
.scov-nums {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.scov-pct { font-weight: 600; }
.scov-nums { color: var(--muted); }

.kpi-truth-note {
  margin: 8px 0 10px;
  color: var(--muted);
  font-size: .76rem;
  line-height: 1.35;
}
.kpi-truth-note code {
  color: inherit;
  font-size: .95em;
}
.kpi-canonical-coverage .tgt-stage-list {
  margin-top: 8px;
}
.targeting-kpi-stack {
  margin: 0 12px 16px;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--panel);
  box-shadow: var(--shadow);
}
.targeting-kpi-stack > .coverage-wrap {
  border: 0;
  border-radius: 0;
  box-shadow: none;
}
.targeting-kpi-stack > .table-header:first-child {
  border-top: 0;
}
.targeting-kpi-stack .table-header h2 small {
  color: var(--muted);
  font-size: .7em;
  font-weight: 500;
}

@media (max-width: 700px) {
  .funnel-container { flex-direction: column; align-items: stretch; }
  .funnel-bar { height: 20px !important; width: 100%; border-radius: 4px; }
  .funnel-arrow { transform: rotate(90deg); }
  .scanner-grid { grid-template-columns: 1fr; }
}

/* Section stats bars */
.section-stats-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 6px;
  min-height: 32px;
  padding: 5px 12px;
  background: var(--panel-soft);
  border-bottom: 1px solid var(--line);
  font-size: .78rem;
}

/* Shared finding workspace: one visual grammar across every Web finding view. */
.finding-workspace {
  display: grid;
  gap: 12px;
  min-width: 0;
}

.finding-workspace__hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px 18px;
  align-items: end;
  padding: 16px 18px;
  border: 1px solid color-mix(in srgb, var(--line) 82%, var(--accent));
  border-radius: 14px;
  background:
    linear-gradient(135deg, color-mix(in srgb, var(--panel) 94%, var(--accent)) 0%, var(--panel) 72%),
    var(--panel);
  box-shadow: 0 8px 24px rgba(15, 23, 42, .05);
}

.finding-workspace__hero > h2 {
  grid-column: 1;
  grid-row: 2;
  margin: 0;
  font-size: clamp(1.15rem, 2vw, 1.45rem);
  font-weight: 650;
  letter-spacing: -.02em;
}

.finding-workspace__intro {
  grid-column: 1;
  min-width: 0;
}

.finding-workspace__intro p {
  max-width: 760px;
  margin: 4px 0 0;
  color: var(--muted);
  font-size: .82rem;
  line-height: 1.45;
}

.finding-workspace__eyebrow {
  color: var(--accent);
  font-size: .68rem;
  font-weight: 650;
  letter-spacing: .09em;
  text-transform: uppercase;
}

.finding-workspace__related {
  color: var(--muted);
  font-size: .65em;
  font-weight: 500;
}

.finding-workspace__hero > .analysis-status {
  grid-column: 1;
  justify-self: start;
}

.finding-workspace__tools,
.finding-workspace__hero > .table-tools {
  grid-column: 1 / -1;
  grid-row: 3;
  justify-content: flex-start;
  align-self: start;
  width: 100%;
  max-width: none;
}

.finding-workspace__stats {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)) !important;
  gap: 9px !important;
  margin: 0 !important;
  padding: 0 !important;
}

.finding-workspace__stats > * {
  min-width: 0;
  border-radius: 10px;
}
.finding-stat {
  position: relative;
  padding: 9px 11px;
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--panel);
  text-align: left;
}
.finding-stat::before { content:'';position:absolute;inset:0 auto 0 0;width:2px;background:var(--muted) }
.finding-stat[data-tone="critical"]::before { background:#a84f4a }
.finding-stat[data-tone="high"]::before { background:#a66c45 }
.finding-stat[data-tone="medium"]::before { background:#9a8249 }
.finding-stat[data-tone="confirmed"]::before { background:#52785f }
.finding-stat[data-tone="new"]::before { background:var(--accent) }
.finding-stat[data-tone="muted"]::before { background:#89909a }
.finding-stat__value { color:var(--text);font-size:1rem;font-weight:650;font-variant-numeric:tabular-nums }
.finding-stat__label { margin-top:2px;color:var(--muted);font-size:.68rem;font-weight:500 }

.finding-workspace__table {
  margin: 0;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--panel);
  box-shadow: 0 6px 18px rgba(15, 23, 42, .035);
}

.finding-workspace__table table { margin: 0; }
.finding-workspace__pager { margin-top: 0; }
.finding-workspace .table-tools input,
.finding-workspace .table-tools select,
.finding-workspace .table-tools button { min-height: 38px; }
.finding-workspace .table-tools input,
.finding-workspace .table-tools select {
  border-color: color-mix(in srgb, var(--line) 86%, var(--accent));
  border-radius: 8px;
  background: var(--panel);
}
.finding-workspace__table thead th {
  background: color-mix(in srgb, var(--panel-soft) 74%, var(--panel));
  color: var(--muted);
  font-size: .68rem;
  font-weight: 650;
  letter-spacing: .035em;
}
.finding-workspace__table tbody tr:nth-child(even) {
  background: color-mix(in srgb, var(--panel-soft) 38%, transparent);
}
.finding-workspace__table tbody tr:hover {
  background: color-mix(in srgb, var(--accent) 6%, var(--panel));
}
.finding-workspace .analysis-status {
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--panel-soft);
  color: var(--muted);
  font-weight: 550;
}

@media (max-width: 980px) {
  .finding-workspace__hero { grid-template-columns: 1fr; align-items: start; }
  .finding-workspace__hero > h2,
  .finding-workspace__intro,
  .finding-workspace__tools,
  .finding-workspace__hero > .table-tools,
  .finding-workspace__hero > .analysis-status {
    grid-column: 1;
    grid-row: auto;
    max-width: none;
    justify-self: stretch;
  }
  .finding-workspace__tools,
  .finding-workspace__hero > .table-tools { justify-content: flex-start; }
}
.stat-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 7px;
  border-radius: 4px;
  background: var(--line);
  border: 1px solid var(--line-strong);
  white-space: nowrap;
}
.stat-chip-label { color: var(--muted); font-weight: 600; }
.stat-chip-count { font-weight: 800; color: var(--text); }
.stat-chip.risk-critico { background: #fee2e2; border-color: #fca5a5; }
.stat-chip.risk-critico .stat-chip-count { color: #991b1b; }
.stat-chip.risk-alto    { background: #ffedd5; border-color: #fdba74; }
.stat-chip.risk-alto    .stat-chip-count { color: #9a3412; }
.stat-chip.risk-medio   { background: #fef9c3; border-color: #fde047; }
.stat-chip.risk-medio   .stat-chip-count { color: #854d0e; }
.stat-chip.risk-bajo    { background: #dcfce7; border-color: #86efac; }
.stat-chip.risk-bajo    .stat-chip-count { color: #166534; }
.stat-chip.stat-chip-alto      { background: #ffedd5; border-color: #fdba74; }
.stat-chip.stat-chip-alto      .stat-chip-count { color: #9a3412; }
.stat-chip.stat-chip-medio     { background: #fef9c3; border-color: #fde047; }
.stat-chip.stat-chip-medio     .stat-chip-count { color: #854d0e; }
.stat-chip.stat-chip-bajo      { background: #dcfce7; border-color: #86efac; }
.stat-chip.stat-chip-bajo      .stat-chip-count { color: #166534; }
.stat-chip.stat-chip-confirmed { background: #dcfce7; border-color: #86efac; }
.stat-chip.stat-chip-confirmed .stat-chip-count { color: #166534; font-weight: 900; }
.stat-chip.stat-chip-fp        { opacity: .55; }
.stat-chip.stat-chip-alive     { background: #dcfce7; border-color: #86efac; }
.stat-chip.stat-chip-alive     .stat-chip-count { color: #166534; }
.stat-chip.stat-chip-dead      { background: var(--line); }
.stat-chip.stat-chip-dead      .stat-chip-count { color: var(--muted); }
.stat-sep {
  width: 1px;
  height: 18px;
  background: var(--line-strong);
  margin: 0 3px;
  flex-shrink: 0;
}
.stat-empty { color: var(--muted); font-size: .78rem; }
.stat-chip-clickable {
  cursor: pointer;
  transition: opacity .12s, box-shadow .12s;
}
.stat-chip-clickable:hover {
  opacity: .8;
  box-shadow: 0 1px 4px rgba(0,0,0,.15);
}
.stat-chip-active {
  outline: 2px solid var(--accent);
  outline-offset: 1px;
}
.stat-chip-active .stat-chip-label,
.stat-chip-active .stat-chip-count { color: var(--accent-dark); }
:root[data-theme="dark"] .stat-chip-active .stat-chip-label,
:root[data-theme="dark"] .stat-chip-active .stat-chip-count { color: var(--accent); }
:root[data-theme="dark"] .stat-chip.risk-critico { background: rgba(153,27,27,.25); border-color: rgba(252,165,165,.3); }
:root[data-theme="dark"] .stat-chip.risk-critico .stat-chip-count { color: #fca5a5; }
:root[data-theme="dark"] .stat-chip.risk-alto    { background: rgba(154,52,18,.25); border-color: rgba(253,186,116,.3); }
:root[data-theme="dark"] .stat-chip.risk-alto    .stat-chip-count { color: #fdba74; }
:root[data-theme="dark"] .stat-chip.risk-medio   { background: rgba(133,77,14,.2);  border-color: rgba(253,224,71,.25); }
:root[data-theme="dark"] .stat-chip.risk-medio   .stat-chip-count { color: #fde047; }
:root[data-theme="dark"] .stat-chip.risk-bajo    { background: rgba(22,101,52,.2);  border-color: rgba(134,239,172,.25); }
:root[data-theme="dark"] .stat-chip.risk-bajo    .stat-chip-count { color: #86efac; }

/* Takeover PoC */
.poc-toggle-wrap { margin-top: 4px; }
.poc-toggle-btn {
  font-size: .72rem;
  padding: 2px 7px;
  border: 1px solid var(--accent);
  border-radius: 3px;
  background: transparent;
  color: var(--accent);
  cursor: pointer;
  line-height: 1.4;
}
.poc-toggle-btn:hover { background: var(--accent); color: #fff; }
.poc-steps {
  margin: 6px 0 0 0;
  padding: .6rem .8rem;
  background: var(--panel-soft);
  border: 1px solid var(--line);
  border-radius: 5px;
  font-size: .74rem;
  line-height: 1.5;
  white-space: pre-wrap;
  word-break: break-word;
  max-width: 520px;
  max-height: 320px;
  overflow-y: auto;
  color: var(--text);
}

/* Bitácora */
.bitacora-add-form {
  display: flex;
  flex-direction: column;
  gap: .5rem;
  padding: .75rem 1rem;
  background: var(--panel-soft);
  border: 1px solid var(--line);
  border-radius: 10px;
  margin-bottom: 1rem;
}
.bitacora-form-row {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
  align-items: flex-start;
}
.bitacora-title-input { flex: 2 1 200px; min-width: 150px; }
.bitacora-form-row input[type=url] { flex: 2 1 180px; min-width: 140px; }
.bitacora-form-row select { flex: 0 1 130px; }
.bitacora-form-row input[type=text] { flex: 1 1 140px; min-width: 120px; }
.bitacora-form-row textarea { flex: 3 1 260px; min-width: 180px; resize: vertical; }
.bitacora-file-label {
  display: flex;
  align-items: center;
  gap: .35rem;
  padding: .35rem .7rem;
  border: 1px dashed var(--line-strong);
  border-radius: 5px;
  cursor: pointer;
  font-size: .8rem;
  color: var(--muted);
  white-space: nowrap;
  transition: border-color .15s, color .15s;
}
.bitacora-file-label:hover { border-color: var(--accent); color: var(--accent); }
.bitacora-title-cell { max-width: 260px; word-break: break-word; }
.bitacora-title-cell a { color: var(--accent); text-decoration: none; }
.bitacora-title-cell a:hover { text-decoration: underline; }
.bitacora-tags-cell { max-width: 180px; }
.bitacora-notes-cell { max-width: 260px; font-size: .82rem; color: var(--muted); }
.bitacora-actions {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem;
}
.download-link { font-size: .8rem; color: var(--accent); text-decoration: none; white-space: nowrap; }
.download-link:hover { text-decoration: underline; }
.tag-pill {
  display: inline-block;
  background: var(--line);
  color: var(--muted);
  border-radius: 3px;
  padding: 1px 5px;
  font-size: .74rem;
  margin: 1px;
}
.bitacora-cat {
  display: inline-block;
  padding: 2px 7px;
  border-radius: 4px;
  font-size: .76rem;
  font-weight: 600;
  white-space: nowrap;
  background: var(--line);
  color: var(--muted);
}
.bitacora-cat-tecnica    { background: #dbeafe; color: #1e40af; }
.bitacora-cat-writeup    { background: #dcfce7; color: #166534; }
.bitacora-cat-cve        { background: #fee2e2; color: #991b1b; }
.bitacora-cat-herramienta{ background: #fef9c3; color: #854d0e; }
.bitacora-cat-payload    { background: #fae8ff; color: #7e22ce; }
.bitacora-cat-referencia { background: #e0f2fe; color: #075985; }
.bitacora-cat-documento  { background: #f1f5f9; color: #475569; }
.bitacora-cat-recon      { background: #ccfbf1; color: #115e59; }
.bitacora-cat-metodologia{ background: #ffedd5; color: #9a3412; }
:root[data-theme="dark"] .bitacora-cat-tecnica    { background: rgba(30,64,175,.3); color: #93c5fd; }
:root[data-theme="dark"] .bitacora-cat-writeup    { background: rgba(22,101,52,.3); color: #86efac; }
:root[data-theme="dark"] .bitacora-cat-cve        { background: rgba(153,27,27,.3); color: #fca5a5; }
:root[data-theme="dark"] .bitacora-cat-herramienta{ background: rgba(133,77,14,.3); color: #fde68a; }
:root[data-theme="dark"] .bitacora-cat-payload    { background: rgba(126,34,206,.3); color: #d8b4fe; }
:root[data-theme="dark"] .bitacora-cat-referencia { background: rgba(7,89,133,.3);  color: #7dd3fc; }
:root[data-theme="dark"] .bitacora-cat-recon      { background: rgba(17,94,89,.3);  color: #5eead4; }
:root[data-theme="dark"] .bitacora-cat-metodologia{ background: rgba(154,52,18,.3); color: #fdba74; }

.intel-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(320px, .8fr);
  gap: 14px;
}
.intel-grid h3,
.template-card h3,
.sd-dashboard h3 {
  margin: 0 0 8px;
  font-size: .92rem;
}
.score-pill {
  display: inline-flex;
  min-width: 38px;
  height: 26px;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  background: var(--accent-soft);
  color: var(--accent-strong);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
.pattern-code {
  display: block;
  max-width: 520px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: .78rem;
}
.template-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 12px;
}
.template-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  transition: border-color .15s, box-shadow .15s;
}
.template-card:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.template-card-header { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.template-card-header h3 { margin: 0; flex: 1; font-size: .95rem; }
.template-impact { margin: 0; color: var(--muted); font-size: .83rem; line-height: 1.45; }
.template-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.template-block { font-size: .8rem; }
.template-block strong { display: inline-block; margin-bottom: 3px; }
.template-kill { color: #9a3412; background: #fff7ed; border-radius: 4px; padding: 4px 8px; }
.template-donts ul { margin: 4px 0 0 16px; padding: 0; }
.template-donts li { margin-bottom: 2px; }
.template-steps { font-size: .82rem; }
.template-steps summary { cursor: pointer; color: var(--accent); font-weight: 600; margin-bottom: 6px; }
.template-steps ol { margin: 0 0 0 16px; padding: 0; }
.template-steps li { margin-bottom: 4px; line-height: 1.4; }
.template-actions { display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
.template-next { font-size: .8rem; color: var(--muted); flex: 1; font-style: italic; }
.template-card p {
  margin: 0 0 10px;
  color: var(--muted);
  font-size: .84rem;
  line-height: 1.45;
}
.sd-dashboard {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 12px;
  margin-bottom: 12px;
}
.sd-dashboard-col {
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  transition: border-color .15s, box-shadow .15s;
}
.sd-dashboard-col:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.health-summary {
  margin: 10px 0;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font-weight: 800;
}
.health-ok      { border-color: rgba(22, 163, 74, .22); color: var(--success, #16a34a); }
.health-alerta  { border-color: rgba(217, 119, 6, .32); color: var(--warning, #d97706); }
.health-critico { border-color: rgba(220, 38, 38, .38); color: var(--danger, #dc2626); }
.health-bad { border-color: rgba(220, 38, 38, .28); }
.health-list {
  display: grid;
  gap: 8px;
}
.health-row {
  display: grid;
  grid-template-columns: 58px minmax(160px, 1fr) minmax(220px, 1.3fr);
  gap: 10px;
  align-items: center;
  padding: 9px 10px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  transition: border-color .15s, box-shadow .15s;
}
.health-row:hover {
  border-color: var(--line-strong);
  box-shadow: 0 2px 6px rgba(0,0,0,.04);
}
.health-row span {
  font-weight: 800;
  color: var(--accent);
}
.health-bad span {
  color: var(--danger);
}
.health-row small {
  color: var(--muted);
}
.report-draft {
  width: min(900px, 82vw);
  max-height: 64vh;
  overflow: auto;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--code-bg, #0f172a);
  color: var(--code-fg, #e2e8f0);
  font-size: .82rem;
  white-space: pre-wrap;
}

@media (max-width: 900px) {
  .intel-grid,
  .health-row {
    grid-template-columns: 1fr;
  }
}
.danger-ghost { color: var(--danger) !important; }
.danger-ghost:hover { background: rgba(180,35,24,.08); }
.date-cell { white-space: nowrap; font-size: .82rem; color: var(--muted); }
.notes-snippet { display: block; }

/* Settings dialog */
#settingsDialog {
  border: 1px solid var(--line-strong);
  border-radius: 10px;
  background: var(--panel);
  color: var(--text);
  padding: 1.5rem;
  max-width: 440px;
  width: 90%;
  box-shadow: 0 12px 40px rgba(0, 0, 0, .2);
}
#settingsDialog::backdrop {
  background: rgba(0, 0, 0, .45);
}
.settings-dialog-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1.25rem;
}
.settings-dialog-header h2 {
  font-size: 1rem;
  font-weight: 600;
  margin: 0;
}
.settings-checks {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: .55rem .75rem;
  margin-bottom: 1.25rem;
}
.settings-check-item {
  display: flex;
  align-items: center;
  gap: .4rem;
  font-size: .875rem;
  cursor: pointer;
  user-select: none;
}
.settings-check-item input[type=checkbox] {
  width: 15px;
  height: 15px;
  accent-color: var(--accent);
  cursor: pointer;
  flex-shrink: 0;
}
.settings-footer {
  display: flex;
  gap: .5rem;
  justify-content: flex-end;
  padding-top: .75rem;
  border-top: 1px solid var(--line);
}

/* ── Export buttons ──────────────────────────────────────────── */
.export-btn {
  font-size: .78rem;
  padding: 4px 10px;
  white-space: nowrap;
}

/* ── Splash / loading overlay ────────────────────────────────── */
/* ── Table row spinner ───────────────────────────────────── */
.table-spinner {
  display: inline-block;
  width: 14px;
  height: 14px;
  border: 2px solid var(--line);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
  vertical-align: middle;
  margin-right: 6px;
}
@keyframes spin { to { transform: rotate(360deg); } }
.loading-cell { color: var(--muted) !important; }

/* ── Top loading bar ─────────────────────────────────────── */
#topLoader {
  position: fixed;
  top: 0; left: 0;
  height: 3px;
  width: 0;
  z-index: 10000;
  background: linear-gradient(90deg, var(--accent), #60a5fa, var(--accent));
  background-size: 200% 100%;
  transition: width 0.25s ease, opacity 0.3s ease;
  opacity: 0;
  pointer-events: none;
}
#topLoader.loading {
  opacity: 1;
  width: 85%;
  animation: topLoaderSlide 1.4s ease infinite;
}
#topLoader.done {
  width: 100%;
  opacity: 0;
  transition: width 0.15s ease, opacity 0.4s ease 0.1s;
}
@keyframes topLoaderSlide {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ponytail: splash overlay removed — topLoader bar handles all loading states */

/* ── JS Monitor ──────────────────────────────────────────────── */
.jsmon-section  { border-color: #bfdbfe; }
.jsmon-header   {
  background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);
  border-bottom: 1px solid #bfdbfe;
}
.jsmon-title-row {
  display: flex; align-items: center; gap: .75rem;
}

/* Stats bar */
.jsmon-stats {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
  padding: .75rem 1rem;
  border-bottom: 1px solid var(--border);
}
.jsmon-stat {
  display: flex; flex-direction: column; align-items: center;
  min-width: 80px; padding: .5rem .8rem;
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 10px; text-align: center;
  transition: border-color .15s, box-shadow .15s;
}
.jsmon-stat:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.jsmon-stat span { font-size: 1.3rem; font-weight: 700; line-height: 1; }
.jsmon-stat p    { font-size: .7rem; color: var(--muted); margin: .2rem 0 0; }
.jsmon-stat.ok        span { color: #15803d; }
.jsmon-stat.warn      span { color: #b45309; }
.jsmon-stat.err       span { color: #b91c1c; }
.jsmon-stat.findings  span { color: #7c3aed; }
.jsmon-stat.muted     span { color: var(--text); font-size: 1rem; }

/* Artifact-driven JS secrets pipeline */
.js-secret-pipeline {
  padding: .75rem 1rem;
  border-bottom: 1px solid var(--border);
  background: color-mix(in srgb, #06b6d4 5%, var(--panel));
}
.js-secret-pipeline-head {
  display: flex; align-items: center; justify-content: space-between; gap: .75rem;
  margin-bottom: .65rem; font-size: .82rem;
}
.js-secret-pipeline-head > div { display: flex; align-items: center; gap: .45rem; }
.js-secret-pipeline-head > small { color: var(--muted); }
.js-secret-health { padding: 2px 7px; border-radius: 999px; font-size: .68rem; font-weight: 700; }
.js-secret-health.ok { color: #166534; background: #dcfce7; }
.js-secret-health.warn { color: #92400e; background: #fef3c7; }
.js-secret-kpis { display: grid; grid-template-columns: repeat(8, minmax(90px, 1fr)); gap: .4rem; }
.js-secret-kpis > span {
  display: flex; flex-direction: column; gap: 2px; padding: .45rem .55rem;
  border: 1px solid var(--border); border-radius: 7px; background: var(--panel);
}
.js-secret-kpis strong { font-size: 1rem; font-variant-numeric: tabular-nums; }
.js-secret-kpis small { color: var(--muted); font-size: .65rem; }
.js-secret-runline { margin: .55rem 0 .4rem; color: var(--muted); font-size: .72rem; }
.js-secret-workers { display: flex; flex-wrap: wrap; gap: .35rem; }
.js-secret-worker {
  display: grid; grid-template-columns: auto auto; column-gap: .35rem; align-items: baseline;
  padding: 3px 7px; border: 1px solid var(--border); border-left-width: 3px;
  border-radius: 5px; background: var(--panel); font-size: .68rem;
}
.js-secret-worker.ok { border-left-color: #22c55e; }
.js-secret-worker.run { border-left-color: #3b82f6; }
.js-secret-worker.err { border-left-color: #ef4444; }
.js-secret-worker em { color: var(--muted); font-style: normal; }
.js-secret-worker small { grid-column: 1 / -1; color: var(--muted); }
.js-secret-empty { color: var(--muted); font-size: .75rem; margin: 0; }
@media (max-width: 1100px) { .js-secret-kpis { grid-template-columns: repeat(4, minmax(90px, 1fr)); } }
@media (max-width: 640px) {
  .js-secret-pipeline-head { align-items: flex-start; flex-direction: column; }
  .js-secret-kpis { grid-template-columns: repeat(2, minmax(90px, 1fr)); }
}

/* Progress bar */
.jsmon-progress-wrap {
  padding: .5rem 1rem .4rem;
  border-bottom: 1px solid var(--border);
}
.jsmon-prog-inner {
  display: flex; align-items: center; gap: .5rem;
  font-size: .78rem; color: var(--muted); margin-bottom: .25rem;
}
.jsmon-prog-label  { font-weight: 600; color: var(--text); }
.jsmon-prog-counts { font-family: var(--mono, monospace); font-size: .76rem; }
.jsmon-prog-pct    { font-weight: 700; color: var(--text); margin-left: auto; }
.jsmon-prog-bar-wrap {
  height: 10px; background: var(--border); border-radius: 6px; overflow: hidden;
}
.jsmon-prog-bar-fill {
  height: 100%; background: #3b82f6; border-radius: 6px;
  transition: width .5s ease;
}

/* Top programs strip */
.jsmon-top-programs {
  display: flex; flex-wrap: wrap; gap: .4rem;
  padding: .4rem 0 .1rem; font-size: .72rem;
}
.jsmon-prog-program {
  display: flex; gap: .3rem; align-items: center;
  background: var(--panel-soft, #f8f9fa);
  border: 1px solid var(--border); border-radius: 4px;
  padding: 1px 6px;
}
.jsmon-prog-program em { color: var(--accent); font-style: normal; }

/* Table cells */
#jsmonitor .url-cell { max-width: 420px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .78rem; }
#jsmonitor .num-cell { text-align: right; font-variant-numeric: tabular-nums; font-size: .8rem; white-space: nowrap; }

/* Badges */
.badge-green  { background: #dcfce7; color: #15803d; padding: 1px 6px; border-radius: 4px; font-size: .75rem; font-weight: 600; }
.badge-blue   { background: #dbeafe; color: #1d4ed8; padding: 1px 6px; border-radius: 4px; font-size: .75rem; font-weight: 600; }
.badge-orange { background: #ffedd5; color: #c2410c; padding: 1px 6px; border-radius: 4px; font-size: .75rem; font-weight: 600; }
.badge-red    { background: #fee2e2; color: #b91c1c; padding: 1px 6px; border-radius: 4px; font-size: .75rem; font-weight: 600; }
.badge-muted  { background: var(--border); color: var(--muted); padding: 1px 6px; border-radius: 4px; font-size: .75rem; }

:root[data-theme="dark"] .jsmon-section { border-color: rgba(59,130,246,.35); }
:root[data-theme="dark"] .jsmon-header  { background: rgba(59,130,246,.08); border-bottom-color: rgba(59,130,246,.35); }
:root[data-theme="dark"] .jsmon-stat    { background: var(--panel); }

/* JS Findings table */
.jsf-table td { vertical-align: top; padding: 6px 8px; }
.jsf-host-cell { display: flex; flex-direction: column; gap: 2px; }
.jsf-host-cell strong { font-size: .82rem; }
.jsf-url { font-size: .72rem; color: var(--muted); word-break: break-all; text-decoration: none; max-width: 350px; display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jsf-url:hover { color: var(--accent); text-decoration: underline; white-space: normal; }
.jsf-finding-cell { max-width: 450px; }
.jsf-title { font-weight: 600; font-size: .82rem; margin-bottom: 2px; }
.jsf-detail { font-size: .75rem; color: var(--muted); display: block; margin-bottom: 3px; word-break: break-all; }
.jsf-snippet { font-size: .72rem; font-family: 'SF Mono', 'Fira Code', monospace; background: var(--panel-soft); border: 1px solid var(--border); border-radius: 4px; padding: 4px 6px; margin: 3px 0 0; white-space: pre-wrap; word-break: break-all; max-height: 80px; overflow: auto; color: #c7254e; }
:root[data-theme="dark"] .jsf-snippet { background: rgba(0,0,0,.2); color: #f8d7da; }
.jsf-status-sel { font-size: .75rem; padding: 2px 4px; border-radius: 4px; border: 1px solid var(--border); background: var(--panel); }

/* ══════════════════════════════════════════════════════════
   Recon DB
   ══════════════════════════════════════════════════════════ */

.rdb-section { padding: 1.5rem; }

/* Tabs */
.rdb-tabs { display: flex; gap: .5rem; margin-bottom: 1.25rem; flex-wrap: wrap; }
.rdb-tab  { display: flex; align-items: center; gap: .35rem; padding: .45rem .9rem; border-radius: 6px;
            border: 1px solid var(--border); background: var(--panel); cursor: pointer;
            font-size: .82rem; font-weight: 500; color: var(--muted); transition: all .15s; }
.rdb-tab:hover  { border-color: var(--accent); color: var(--fg); }
.rdb-tab.active { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
.rdb-tab-icon   { font-size: .95rem; }
.rdb-tab-count  { background: rgba(255,255,255,.3); border-radius: 10px; padding: 0 6px; font-size: .72rem; }
.rdb-tab.active .rdb-tab-count { background: rgba(255,255,255,.25); }

/* Cards grid */
.rdb-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); gap: 1rem; }
.rdb-empty { color: var(--muted); font-size: .9rem; padding: 2rem 0; text-align: center; grid-column: 1/-1; }

/* Card */
.rdb-card { border-radius: 10px; border: 1px solid var(--line); background: var(--panel); overflow: hidden;
            transition: box-shadow .15s, border-color .15s; }
.rdb-card:hover { box-shadow: 0 2px 10px rgba(0,0,0,.06); border-color: var(--line-strong); }

.rdb-card-dead_ends       { border-left: 3px solid #ef4444; }
.rdb-card-meta_behaviors  { border-left: 3px solid #f97316; }
.rdb-card-noise_findings  { border-left: 3px solid #6b7280; }
.rdb-card-promising_paths { border-left: 3px solid #22c55e; }

.rdb-card-head { display: flex; align-items: center; gap: .5rem; padding: .65rem .85rem;
                 background: var(--panel-soft, #f8f9fa); cursor: pointer; list-style: none;
                 user-select: none; }
/* Ocultar el triángulo nativo de <summary>: usamos nuestro propio chevron. */
.rdb-card-head::-webkit-details-marker { display: none; }
.rdb-card-head::marker { content: ""; }
.rdb-chevron { flex-shrink: 0; color: var(--muted); font-size: .75rem; transition: transform .15s; }
.rdb-card[open] > .rdb-card-head { border-bottom: 1px solid var(--border); }
.rdb-card[open] > .rdb-card-head .rdb-chevron { transform: rotate(90deg); }
.rdb-card-name { flex: 1; font-size: .84rem; font-weight: 600; line-height: 1.3;
                 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rdb-card-actions { display: flex; align-items: center; gap: .4rem; margin-left: auto; flex-shrink: 0; }

.rdb-card-body { padding: .75rem .85rem; display: flex; flex-direction: column; gap: .55rem; }
.rdb-desc { font-size: .82rem; color: var(--fg); line-height: 1.5; margin: 0; }

/* Signals */
.rdb-signals { display: flex; flex-wrap: wrap; gap: .3rem; }
.rdb-signal  { background: #f1f5f9; color: #475569; border: 1px solid #e2e8f0;
               border-radius: 4px; padding: 2px 7px; font-size: .72rem; font-family: monospace; }

/* Actions list */
.rdb-actions-label { font-size: .75rem; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.rdb-action-list   { margin: .2rem 0 0 1rem; padding: 0; font-size: .8rem; line-height: 1.6; color: var(--fg); }

/* Revisit / bounty */
.rdb-revisit       { font-size: .78rem; color: var(--muted); }
.rdb-revisit-label { font-weight: 600; color: var(--fg); }

/* Examples */
.rdb-examples { display: flex; flex-wrap: wrap; gap: .3rem; }
.rdb-target   { background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0;
                border-radius: 4px; padding: 1px 6px; font-size: .72rem; }

/* Time cost badge */
.rdb-cost        { font-size: .7rem; padding: 2px 7px; border-radius: 10px; font-weight: 600; text-transform: uppercase; }
.rdb-cost-muy    { background: #fee2e2; color: #b91c1c; }
.rdb-cost-alto   { background: #ffedd5; color: #c2410c; }
.rdb-cost-medio  { background: #fef3c7; color: #92400e; }
.rdb-cost-bajo   { background: #dcfce7; color: #15803d; }

/* Modal */
.rdb-modal-box { max-width: 600px; width: 95%; }
.rdb-modal-box label { display: block; font-size: .78rem; font-weight: 600; color: var(--muted);
                       text-transform: uppercase; letter-spacing: .04em; margin: .8rem 0 .25rem; }
.rdb-modal-box .field-hint { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--muted); font-size: .72rem; }
.rdb-modal-box select,
.rdb-modal-box input[type="text"],
.rdb-modal-box textarea { width: 100%; box-sizing: border-box; border: 1px solid var(--border);
                           border-radius: 5px; padding: .45rem .6rem; font-size: .84rem;
                           background: var(--bg); color: var(--fg); }
.rdb-modal-box textarea { resize: vertical; font-family: monospace; }

/* Tag colors */
.tag-red    { background: #fee2e2; color: #b91c1c; }
.tag-orange { background: #ffedd5; color: #c2410c; }
.tag-gray   { background: #f3f4f6; color: #374151; }
.tag-green  { background: #dcfce7; color: #15803d; }

/* Dark mode */
:root[data-theme="dark"] .rdb-signal  { background: #1e293b; color: #94a3b8; border-color: #334155; }
:root[data-theme="dark"] .rdb-target  { background: #052e16; color: #4ade80; border-color: #14532d; }
:root[data-theme="dark"] .rdb-card-head { background: var(--panel); }
:root[data-theme="dark"] .rdb-modal-box select,
:root[data-theme="dark"] .rdb-modal-box input,
:root[data-theme="dark"] .rdb-modal-box textarea { background: var(--panel); }

/* ── Reportes (sección + modal) ──────────────────────────────── */
.report-modal-box { max-width: 880px; width: 96%; }
.report-modal-box label { display: block; font-size: .78rem; font-weight: 600; color: var(--muted);
                          text-transform: uppercase; letter-spacing: .04em; margin: .8rem 0 .25rem; }
.report-modal-box .field-hint { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--muted); font-size: .72rem; }
.report-modal-box select,
.report-modal-box input[type="text"],
.report-modal-box textarea { width: 100%; box-sizing: border-box; border: 1px solid var(--border);
                             border-radius: 5px; padding: .45rem .6rem; font-size: .84rem;
                             background: var(--bg); color: var(--fg); }
.report-modal-box .modal-body { max-height: 72vh; overflow: auto; }
.report-content-textarea { resize: vertical; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
                           font-size: .8rem; line-height: 1.45; }
.report-modal-grid { display: grid; grid-template-columns: 2fr 1fr; gap: .2rem 1rem; }
.report-modal-grid > div:nth-child(n+3) { grid-column: span 1; }
:root[data-theme="dark"] .report-modal-box select,
:root[data-theme="dark"] .report-modal-box input,
:root[data-theme="dark"] .report-modal-box textarea { background: var(--panel); }

/* Agrupación de reportes por programa: desplegable colapsado por defecto */
details.report-prog-group { margin-bottom: .6rem; border: 1px solid var(--border); border-radius: 10px;
                            overflow: hidden; transition: border-color .15s; }
details.report-prog-group:hover { border-color: var(--line-strong); }
details.report-prog-group > summary { list-style: none; cursor: pointer; display: flex;
                            align-items: center; gap: .5rem; padding: .45rem .65rem;
                            border-left: 3px solid var(--accent);
                            background: color-mix(in srgb, var(--accent) 9%, transparent);
                            font-size: .9rem; user-select: none; }
details.report-prog-group > summary::-webkit-details-marker { display: none; }
details.report-prog-group > summary > .rdb-chevron { transition: transform .15s; font-size: .7rem; color: var(--muted); }
details.report-prog-group[open] > summary > .rdb-chevron { transform: rotate(90deg); }
.sent-reports-collapsible > summary { list-style: none; }
.sent-reports-collapsible > summary::-webkit-details-marker { display: none; }
.sent-reports-collapsible > summary .rdb-chevron { transition: transform .15s; }
.sent-reports-collapsible[open] > summary .rdb-chevron { transform: rotate(90deg); }
.sent-summary-stats { display: inline-flex; gap: 12px; margin-left: 12px; font-size: .8rem; font-weight: 600; color: var(--muted); }
.sent-summary-stats span { white-space: nowrap; }
details.report-prog-group > summary:hover { background: color-mix(in srgb, var(--accent) 16%, transparent); }
.report-prog-name  { font-weight: 700; color: var(--accent-dark); letter-spacing: .01em; }
.report-prog-count { margin-left: auto; min-width: 1.5rem; text-align: center; padding: .05rem .45rem;
                     border-radius: 999px; background: var(--accent); color: #fff;
                     font-size: .72rem; font-weight: 700; }
details.report-prog-group > .rdb-card { border-radius: 0; border-left: none; border-right: none;
                            border-top: 1px solid var(--border); margin: 0; }
details.report-prog-group > .rdb-card:last-child { border-bottom: none; }
/* Tabla sent-reports dentro de un desplegable */
details.report-prog-group .sent-reports-table { width: 100%; border-collapse: collapse; font-size: .82rem; }
details.report-prog-group .sent-reports-table th { text-align: left; padding: .35rem .5rem;
                            background: var(--panel); border-bottom: 1px solid var(--border);
                            font-size: .72rem; text-transform: uppercase; letter-spacing: .04em;
                            color: var(--muted); font-weight: 600; }
details.report-prog-group .sent-reports-table td { padding: .35rem .5rem;
                            border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent); }
details.report-prog-group .sent-reports-table tr:last-child td { border-bottom: none; }

/* Tarjeta de reporte (reutiliza .rdb-card como contenedor) */
.report-card-meta { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center;
                    margin: 0 0 .6rem; font-size: .76rem; color: var(--muted); }
.report-card-meta .report-prog { font-weight: 600; color: var(--fg); }
.report-status-chip { display: inline-flex; align-items: center; gap: .25rem; padding: .1rem .5rem;
                      border-radius: 999px; font-size: .7rem; font-weight: 600; border: 1px solid var(--border); }
.report-status-pending        { background: #fef9c3; color: #854d0e; }
.report-status-draft          { background: #f3f4f6; color: #374151; }
.report-status-sent           { background: #dbeafe; color: #1e40af; }
.report-status-triaged        { background: #dbeafe; color: #1d4ed8; border: 1px solid #93c5fd; }
.report-status-resolved       { background: #dcfce7; color: #15803d; border: 1px solid #86efac; }
.report-status-accepted       { background: #dcfce7; color: #15803d; }
.report-status-informative    { background: #f1f5f9; color: #475569; }
.report-status-not_applicable { background: #fef3c7; color: #92400e; }
.report-status-needs_more_info{ background: #fff7ed; color: #c2410c; }
.report-status-rejected       { background: #fee2e2; color: #b91c1c; }
.report-status-duplicate      { background: #ede9fe; color: #6d28d9; }
.sev-critical { background: #fee2e2; color: #991b1b; }
.sev-high     { background: #ffedd5; color: #c2410c; }
.sev-medium   { background: #fef9c3; color: #854d0e; }
.sev-low      { background: #e0f2fe; color: #075985; }
.sev-info     { background: #f3f4f6; color: #374151; }

/* Platform badges & tabs */
.platform-badge { display: inline-flex; align-items: center; justify-content: center;
                  padding: .1rem .4rem; border-radius: 4px; font-size: .65rem; font-weight: 700;
                  letter-spacing: .03em; line-height: 1.3; white-space: nowrap; }
.plat-h1        { background: #494649; color: #fff; }
.plat-bugcrowd  { background: #f26822; color: #fff; }
.plat-intigriti { background: #1d71b8; color: #fff; }
.plat-yeswehack { background: #00c4b3; color: #fff; }
.plat-immunefi  { background: #4c47f7; color: #fff; }
.plat-import    { background: #e2e8f0; color: #475569; }
.plat-legacy    { background: #e2e8f0; color: #475569; }
.plat-other     { background: #e2e8f0; color: #475569; }
.report-prog-header .platform-badge { margin-right: .25rem; }

/* Platform stats row */
.platform-stats-row { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: .75rem; padding: 0 .5rem; }
.platform-stat-card {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .5rem .8rem;
  background: var(--panel);
  border-radius: 8px;
  border: 1px solid var(--line);
  transition: border-color .15s, box-shadow .15s;
}
.platform-stat-card:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 6px rgba(14, 116, 144, .06);
}
.platform-stat-count { font-size: 1.05rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.platform-stat-label { font-size: .73rem; font-weight: 600; color: var(--muted); }

/* Platform sections */
.platform-section {
  background: var(--panel);
  border-radius: 10px;
  border: 1px solid var(--line);
  padding: .8rem 1rem;
  margin-bottom: .75rem;
  transition: box-shadow .15s;
}
.platform-section:hover { box-shadow: 0 2px 8px rgba(0,0,0,.04); }
.platform-section-header {
  display: flex;
  align-items: center;
  gap: .5rem;
  margin-bottom: .5rem;
  padding-bottom: .4rem;
  border-bottom: 1px solid var(--line);
}
.platform-section-title { font-weight: 800; font-size: .92rem; }
.platform-section-count { font-size: .76rem; font-weight: 600; color: var(--muted); margin-left: auto; }

.report-md { white-space: pre-wrap; word-break: break-word; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
             font-size: .78rem; line-height: 1.5; background: var(--bg); border: 1px solid var(--border);
             border-radius: 6px; padding: .7rem .85rem; max-height: 460px; overflow: auto; margin: 0; }
.report-card-tools { display: flex; flex-wrap: wrap; gap: .4rem; margin-bottom: .55rem; }
.report-card-tools select { border: 1px solid var(--border); border-radius: 5px; padding: .25rem .45rem;
                            font-size: .76rem; background: var(--bg); color: var(--fg); }
/* Botones scoped: la sección reusa clases btn-* (que el resto de la app deja
   como botón por defecto); aquí les damos aspecto de pill compacta sin tocar
   el resto del ASM. */
.report-card-tools button,
.report-modal-box .modal-footer button {
  cursor: pointer; border-radius: 5px; border: 1px solid var(--border);
  padding: .3rem .6rem; font-size: .76rem; background: var(--panel); color: var(--fg);
}
.report-card-tools button:hover,
.report-modal-box .modal-footer button:hover { border-color: var(--accent); }
.report-card-tools .btn-danger,
.report-modal-box .btn-danger { background: #fee2e2; color: #b91c1c; border-color: #fecaca; }
.report-modal-box .btn-primary { background: var(--accent); color: #fff; border-color: transparent; padding: .35rem .9rem; }
.reports-section .rdb-cards { grid-template-columns: 1fr; }
:root[data-theme="dark"] .report-card-tools button,
:root[data-theme="dark"] .report-modal-box .modal-footer button { background: var(--panel); }
:root[data-theme="dark"] .report-card-tools .btn-danger,
:root[data-theme="dark"] .report-modal-box .btn-danger { background: #450a0a; color: #fca5a5; border-color: #7f1d1d; }
:root[data-theme="dark"] .report-md { background: var(--panel); }
:root[data-theme="dark"] .report-status-pending        { background: #422006; color: #fde68a; }
:root[data-theme="dark"] .report-status-draft          { background: #1f2937; color: #d1d5db; }
:root[data-theme="dark"] .report-status-sent           { background: #1e3a5f; color: #bfdbfe; }
:root[data-theme="dark"] .report-status-triaged        { background: #1e3a8a; color: #93c5fd; }
:root[data-theme="dark"] .report-status-resolved       { background: #052e16; color: #86efac; }
:root[data-theme="dark"] .report-status-accepted       { background: #052e16; color: #86efac; }
:root[data-theme="dark"] .report-status-informative    { background: #1e293b; color: #94a3b8; }
:root[data-theme="dark"] .report-status-not_applicable { background: #422006; color: #fbbf24; }
:root[data-theme="dark"] .report-status-needs_more_info{ background: #431407; color: #fb923c; }
:root[data-theme="dark"] .report-status-rejected       { background: #450a0a; color: #fca5a5; }
:root[data-theme="dark"] .report-status-duplicate      { background: #2e1065; color: #c4b5fd; }
:root[data-theme="dark"] .sev-critical { background: #450a0a; color: #fca5a5; }
:root[data-theme="dark"] .sev-high     { background: #431407; color: #fdba74; }
:root[data-theme="dark"] .sev-medium   { background: #422006; color: #fde68a; }
:root[data-theme="dark"] .sev-low      { background: #082f49; color: #7dd3fc; }
:root[data-theme="dark"] .sev-info     { background: #1f2937; color: #d1d5db; }

/* ── Sent reports table ─────────────────────────────────────── */
.sent-reports-tbl { width: 100%; border-collapse: collapse; font-size: .85rem; }
.sent-reports-tbl th { text-align: left; padding: .45rem .6rem; border-bottom: 2px solid var(--border);
  font-weight: 600; font-size: .78rem; text-transform: uppercase; letter-spacing: .03em; color: var(--muted); }
.sent-reports-tbl td { padding: .4rem .6rem; border-bottom: 1px solid var(--border); vertical-align: middle; }
.sent-reports-tbl tr:hover td { background: var(--row-hover, rgba(0,0,0,.03)); }
.sent-report-title { max-width: 360px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sent-report-title a { color: var(--accent); text-decoration: none; }
.sent-report-title a:hover { text-decoration: underline; }
.bounty-cell { font-weight: 700; color: #16a34a; }
:root[data-theme="dark"] .bounty-cell { color: #86efac; }
.sent-state-chip { display: inline-block; padding: .1rem .45rem; border-radius: 4px; font-size: .76rem; font-weight: 600; }
.st-new        { background: #dbeafe; color: #1e40af; }
.st-editing    { background: #e0e7ff; color: #3730a3; }
.st-triaged    { background: #cffafe; color: #155e75; }
.st-needs      { background: #ffedd5; color: #9a3412; }
.st-pending    { background: #fef3c7; color: #92400e; }
.st-retesting  { background: #e0e7ff; color: #3730a3; }
.st-resolved   { background: #dcfce7; color: #166534; }
.st-informative{ background: #f1f5f9; color: #475569; }
.st-na         { background: #fef3c7; color: #92400e; }
.st-duplicate  { background: #ede9fe; color: #5b21b6; }
.st-spam       { background: #fee2e2; color: #991b1b; }
:root[data-theme="dark"] .st-new        { background: #1e3a8a; color: #93c5fd; }
:root[data-theme="dark"] .st-editing    { background: #312e81; color: #c7d2fe; }
:root[data-theme="dark"] .st-triaged    { background: #164e63; color: #a5f3fc; }
:root[data-theme="dark"] .st-needs      { background: #431407; color: #fb923c; }
:root[data-theme="dark"] .st-pending    { background: #422006; color: #fde68a; }
:root[data-theme="dark"] .st-retesting  { background: #312e81; color: #c7d2fe; }
:root[data-theme="dark"] .st-resolved   { background: #052e16; color: #86efac; }
:root[data-theme="dark"] .st-informative{ background: #1e293b; color: #94a3b8; }
:root[data-theme="dark"] .st-na         { background: #422006; color: #fbbf24; }
:root[data-theme="dark"] .st-duplicate  { background: #2e1065; color: #c4b5fd; }
:root[data-theme="dark"] .st-spam       { background: #450a0a; color: #fca5a5; }
:root[data-theme="dark"] .sent-reports-tbl tr:hover td { background: rgba(255,255,255,.04); }

/* ── Reports KPI row ────────────────────────────────────────── */
.reports-kpi-row {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: .6rem;
  margin-bottom: 1.2rem;
}
.reports-kpi {
  text-align: center;
  padding: .8rem .6rem;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  transition: border-color .15s, box-shadow .15s;
}
.reports-kpi:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.reports-kpi-val {
  display: block;
  font-size: 1.4rem;
  font-weight: 800;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.reports-kpi-lbl {
  display: block;
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--muted);
  margin-top: .15rem;
}
.reports-kpi.kpi-green .reports-kpi-val { color: var(--success); }
.reports-kpi.kpi-warn  .reports-kpi-val { color: var(--warning); }

/* ── Report quick-view panel ────────────────────────────────── */
.report-quickview { position: fixed; top: 0; right: 0; width: 480px; max-width: 96vw; height: 100vh;
                    background: var(--panel); border-left: 1px solid var(--border); z-index: 900;
                    box-shadow: -4px 0 16px rgba(0,0,0,.1); overflow-y: auto; }
.report-quickview-head { display: flex; align-items: center; justify-content: space-between;
                         padding: .75rem 1rem; border-bottom: 1px solid var(--border); }
.report-quickview-head h3 { margin: 0; font-size: .95rem; }
.report-quickview-body { padding: 1rem; font-size: .84rem; line-height: 1.5; }
.report-quickview-body .qv-meta { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: .75rem; }
.report-quickview-body pre { white-space: pre-wrap; word-break: break-word; font-size: .78rem;
                             background: var(--bg); border: 1px solid var(--border); border-radius: 6px;
                             padding: .6rem; max-height: 60vh; overflow: auto; }
:root[data-theme="dark"] .report-quickview { box-shadow: -4px 0 16px rgba(0,0,0,.4); }

/* ── Lazy section states ─────────────────────────────────────── */
[data-lazy="pending"] { opacity: .97; }
[data-lazy="loading"] { opacity: .97; }

.lazy-pending {
  color: var(--muted) !important;
  font-style: italic;
  font-size: .78rem;
  letter-spacing: .02em;
}

/* Barra de progreso fina en la sección que está cargando */
[data-lazy="loading"]::before {
  content: '';
  display: block;
  height: 2px;
  background: linear-gradient(90deg, var(--accent) 0%, transparent 100%);
  animation: lazy-sweep 1.2s ease-in-out infinite;
  border-radius: 1px;
  margin-bottom: .25rem;
}
@keyframes lazy-sweep {
  0%   { transform: scaleX(0); transform-origin: left; opacity: 1; }
  60%  { transform: scaleX(1); transform-origin: left; opacity: 1; }
  100% { transform: scaleX(1); transform-origin: left; opacity: 0; }
}

/* ── CORS PoC link ───────────────────────────────────────────── */
a.poc-link {
  display: inline-flex;
  align-items: center;
  gap: .2rem;
  text-decoration: none;
  background: #eff6ff;
  color: #1d4ed8;
  border: 1px solid #bfdbfe;
  border-radius: 4px;
  padding: 2px 7px;
  font-size: .72rem;
  font-weight: 600;
  cursor: pointer;
  vertical-align: middle;
  margin-left: .25rem;
  transition: background .12s;
}
a.poc-link:hover { background: #dbeafe; }
:root[data-theme="dark"] a.poc-link {
  background: #1e3a5f;
  color: #93c5fd;
  border-color: #1d4ed8;
}
:root[data-theme="dark"] a.poc-link:hover { background: #1e40af; }

/* ── SPA Navigation ─────────────────────────────────────────── */
#sideNav a { display: block; padding: .32rem .65rem; border-radius: 5px;
             text-decoration: none; color: var(--muted); font-size: .8rem;
             transition: background .12s, color .12s; }
#sideNav a:hover { background: var(--panel-soft,#f3f4f6); color: var(--fg); }
#sideNav a.nav-active { background: var(--accent); color: #fff; font-weight: 600; }
.fresh-dot { float: right; width: 7px; height: 7px; border-radius: 50%; margin-top: .38rem; }
.nav-pending { float: right; margin: .1rem .3rem 0 0; padding: 0 .3rem; border-radius: 7px;
               font-size: .6rem; font-weight: 600; line-height: 1.35;
               background: var(--panel-soft, #e5e7eb); color: var(--muted); }
:root[data-theme="dark"] .nav-pending { background: rgba(255,255,255,.12); }
.fresh-ok   { background: #22c55e; }
.fresh-warn { background: #f59e0b; }
.fresh-dead { background: #ef4444; }
.fresh-idle { background: #87909c; }
/* Badge de frescura en la cabecera de sección: mismo semáforo que el punto */
.fresh-badge { font-size: .6rem; font-weight: 600; letter-spacing: .02em; padding: .1rem .4rem;
               border-radius: 999px; margin-left: .5rem; vertical-align: middle; color: #fff; }
.fresh-badge.fresh-ok   { background: #22c55e; }
.fresh-badge.fresh-warn { background: #f59e0b; }
.fresh-badge.fresh-dead { background: #ef4444; }
.fresh-badge.fresh-idle { background: color-mix(in srgb, var(--muted) 76%, var(--panel)); color: var(--panel); }
.nav-sep { border: none; border-top: 1px solid var(--border); margin: .4rem .5rem; }
/* items inside groups are slightly indented */
.nav-group-body a { padding-left: 1rem; font-size: .78rem; }

/* ── Unified Alerts table ────────────────────────────────────── */
.host-code { font-size: .72rem; background: var(--panel-soft,#f3f4f6);
             padding: 1px 5px; border-radius: 3px; font-family: monospace; }
.mini-link { font-size: .75rem; margin-left: .2rem; color: var(--accent); }
.ua-detail-overlay {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(15, 23, 42, .56);
}
.ua-detail-dialog {
  width: min(1180px, 96vw);
  max-height: 92vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--border, var(--line));
  border-radius: 12px;
  background: var(--card-bg, #fff);
  color: var(--text);
  box-shadow: 0 20px 60px rgba(15, 23, 42, .28);
}
.ua-detail-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--border, var(--line));
  background: var(--panel-soft, #f8fafc);
}
.ua-detail-head h3 {
  margin: 0;
  font-size: 1rem;
}
.ua-detail-head p {
  margin: 4px 0 0;
  color: var(--muted);
  font-size: .78rem;
  overflow-wrap: anywhere;
}
.ua-detail-body {
  overflow: auto;
  padding: 14px 16px 16px;
}
.ua-detail-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-bottom: 12px;
  color: var(--muted);
  font-size: .78rem;
}
.ua-raw-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}
.ua-raw-panel {
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: var(--panel-soft);
}
.ua-raw-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 8px 10px;
  border-bottom: 1px solid var(--line);
  color: var(--muted);
  font-size: .72rem;
  font-weight: 800;
  text-transform: uppercase;
}
.ua-raw-panel pre {
  margin: 0;
  max-height: 58vh;
  overflow: auto;
  padding: 12px;
  color: var(--text);
  font-size: .76rem;
  line-height: 1.45;
  white-space: pre;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}
:root[data-theme="dark"] #sideNav a:hover { background: rgba(255,255,255,.07); }
:root[data-theme="dark"] #sideNav a.nav-active { background: var(--accent); }
:root[data-theme="dark"] .host-code { background: #1e293b; }
:root[data-theme="dark"] .ua-detail-dialog { background: var(--panel); border-color: rgba(255,255,255,.14); }
:root[data-theme="dark"] .ua-detail-head { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
@media (max-width: 840px) {
  .ua-detail-overlay { align-items: stretch; padding: 10px; }
  .ua-detail-dialog { width: 100%; max-height: calc(100vh - 20px); }
  .ua-raw-grid { grid-template-columns: 1fr; }
  .ua-raw-panel pre { max-height: 42vh; }
}

/* Baseline para cualquier <pre> que no fije color/fondo propios (p.ej. .prompt-text
   o los <pre> crudos de callbacks). Especificidad 0,0,1: las clases con estilo
   propio (.fd-match-box pre, .ua-raw-panel pre, .poc-steps…) la sobrescriben. */
pre { color: var(--text); background: var(--panel-soft); }

/* ── Impact Graph — nuevas secciones ─────────────────────────────── */
.stat-chips { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1rem; }
.stat-chips .stat-chip { padding: .3rem .7rem; background: var(--card-bg, #f8fafc); border: 1px solid var(--border, #e2e8f0); border-radius: 6px; font-size: .82rem; color: #1e293b; }
/* El fondo de estos chips es claro y fijo en ambos temas (#f8fafc), así que el
   texto debe ser oscuro siempre — sin esto en tema oscuro hereda --text (casi
   blanco) y queda ilegible. Las variantes risk-*/stat-chip-* tienen mayor
   especificidad y conservan sus propios colores. */
.stat-chips .stat-chip-label { color: #475569; }
.stat-chips .stat-chip-count { color: #0f172a; }

.section-hint { color: var(--muted); font-size: .82rem; line-height: 1.5; margin: 0 0 1rem; padding: .5rem .8rem; background: var(--panel-soft); border-radius: 8px; border: 1px solid var(--line); }

.card-list { display: flex; flex-direction: column; gap: .75rem; margin-bottom: 1rem; }
.card {
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
  background: var(--panel);
  transition: box-shadow .15s;
}
.card:hover { box-shadow: 0 2px 8px rgba(0,0,0,.04); }
.card-header { display: flex; align-items: center; gap: .5rem; padding: .7rem 1rem; background: var(--panel-soft); flex-wrap: wrap; border-bottom: 1px solid var(--line); }
.card-header strong { font-size: .92rem; font-weight: 700; }
.card-actions { display: flex; gap: .3rem; margin-left: auto; }
.card-body { padding: .8rem 1rem; font-size: .84rem; }
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: .5rem; }
@media (max-width: 640px) { .two-col { grid-template-columns: 1fr; } }

/* Form panel */
.form-panel { background: var(--card-bg, #f8fafc); border: 1px solid var(--border, #e2e8f0); border-radius: 8px; padding: 1rem; margin-bottom: 1rem; }
.form-panel h3 { margin: 0 0 .75rem; font-size: 1rem; }
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: .6rem; margin-bottom: .75rem; }
.form-grid label, .form-panel label { display: flex; flex-direction: column; gap: .25rem; font-size: .82rem; font-weight: 600; color: var(--muted); }
.form-grid input, .form-grid select, .form-grid textarea,
.form-panel input, .form-panel select, .form-panel textarea { font-size: .88rem; padding: .3rem .5rem; border: 1px solid var(--border, #e2e8f0); border-radius: 4px; background: var(--input-bg, #fff); color: var(--text); }
.form-actions { display: flex; gap: .5rem; margin-top: .75rem; }

/* Table row highlight */
.row-highlight-info td { background: rgba(59,130,246,.05); }
:root[data-theme="dark"] .row-highlight-info td { background: rgba(59,130,246,.1); }

/* Dark mode adjustments for new components */
:root[data-theme="dark"] .card { border-color: rgba(255,255,255,.12); }
:root[data-theme="dark"] .card-header { background: rgba(255,255,255,.05); }
:root[data-theme="dark"] .form-panel { background: rgba(255,255,255,.03); border-color: rgba(255,255,255,.12); }
:root[data-theme="dark"] .form-grid input,
:root[data-theme="dark"] .form-grid select,
:root[data-theme="dark"] .form-grid textarea,
:root[data-theme="dark"] .form-panel input,
:root[data-theme="dark"] .form-panel select,
:root[data-theme="dark"] .form-panel textarea { background: #1e293b; border-color: rgba(255,255,255,.15); color: #e2e8f0; }

/* Prompt library */

.focus-panel {
  margin-bottom: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--line);
}
.focus-panel td small {
  display: block;
  color: var(--muted);
  font-size: .76rem;
  margin-top: 3px;
}

/* ── Finding detail view ──────────────────────────────────── */
.finding-detail-view {
  --fd-bg: #05070b;
  --fd-panel: #0d131c;
  --fd-panel-2: #090d13;
  --fd-line: #223047;
  --fd-line-2: #334155;
  --fd-text: #e7edf7;
  --fd-muted: #7d8da6;
  --fd-cyan: #67d8ff;
  --fd-green: #67f0b4;
  color: var(--fd-text);
}

.fd-shell {
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding: 2px 0 24px;
  font-size: .94rem;
}

.fd-hero,
.fd-panel,
.fd-glance {
  border: 1px solid var(--fd-line);
  border-radius: 12px;
  background: linear-gradient(180deg, rgba(13, 19, 28, .96), rgba(7, 10, 15, .96));
  box-shadow: 0 18px 55px rgba(0, 0, 0, .28);
  transition: border-color .2s, box-shadow .2s;
}
.fd-panel:hover,
.fd-glance:hover {
  border-color: rgba(56, 189, 248, .3);
  box-shadow: 0 18px 55px rgba(0, 0, 0, .35), 0 0 0 1px rgba(56, 189, 248, .08);
}

.fd-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 16px;
  padding: 20px;
}

.fd-hero-main p,
.fd-glance h3 {
  margin: 0 0 8px;
  color: var(--fd-cyan);
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .18em;
  text-transform: uppercase;
}

.fd-hero h2 {
  margin: 0;
  color: #f8fafc;
  font-size: clamp(1.5rem, 2.6vw, 2.15rem);
  letter-spacing: 0;
}

.fd-url-row {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  margin-top: 14px;
}

.fd-url {
  min-width: 0;
  max-width: 72ch;
  overflow: hidden;
  color: #bfdbfe;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.fd-url[data-expanded="1"] {
  max-width: 100%;
  white-space: normal;
  overflow-wrap: anywhere;
}

.fd-hero-badges {
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  gap: 8px;
  flex-wrap: wrap;
}

.fd-warning {
  grid-column: 1 / -1;
  padding: 12px 14px;
  border: 1px solid rgba(245, 158, 11, .35);
  border-radius: 6px;
  background: rgba(245, 158, 11, .12);
  color: #fde68a;
}

.fd-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 340px;
  gap: 18px;
}

.fd-main,
.fd-side {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.fd-side {
  position: sticky;
  top: 14px;
  align-self: start;
}

.fd-panel summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 13px 16px;
  border-bottom: 1px solid var(--fd-line);
  cursor: pointer;
  list-style: none;
}

.fd-panel summary::-webkit-details-marker {
  display: none;
}

.fd-panel-title {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: #f1f5f9;
  font-size: .75rem;
  font-weight: 900;
  letter-spacing: .16em;
  text-transform: uppercase;
}

.fd-dot {
  width: 8px;
  height: 8px;
  border-radius: 999px;
  background: #38bdf8;
  box-shadow: 0 0 16px rgba(56, 189, 248, .9);
}

.fd-panel-right {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--fd-muted);
}

.fd-chevron::before {
  content: "+";
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
}

.fd-panel[open] .fd-chevron::before {
  content: "-";
}

.fd-panel-body {
  padding: 16px;
}

.fd-badge {
  display: inline-flex;
  align-items: center;
  min-height: 26px;
  padding: 4px 12px;
  border: 1px solid var(--fd-line-2);
  border-radius: 999px;
  background: rgba(15, 23, 42, .85);
  color: #e2e8f0;
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.fd-sev-medium {
  border-color: rgba(56, 189, 248, .45);
  background: rgba(14, 165, 233, .16);
  color: #dff6ff;
}

.fd-sev-high {
  border-color: rgba(251, 191, 36, .45);
  background: rgba(251, 191, 36, .14);
  color: #fde68a;
}

.fd-sev-critical,
.fd-sensitive {
  border-color: rgba(251, 113, 133, .45);
  background: rgba(244, 63, 94, .15);
  color: #ffe4e6;
}

.fd-analyzer {
  border-color: rgba(96, 165, 250, .5);
  background: rgba(37, 99, 235, .2);
  color: #dbeafe;
}

.fd-http-ok,
.fd-valid {
  border-color: rgba(52, 211, 153, .45);
  background: rgba(16, 185, 129, .15);
  color: #bbf7d0;
}

.fd-http-redirect {
  border-color: rgba(251, 191, 36, .45);
  background: rgba(251, 191, 36, .14);
  color: #fde68a;
}

.fd-http-error {
  border-color: rgba(248, 113, 113, .45);
  background: rgba(239, 68, 68, .14);
  color: #fecaca;
}

.fd-muted {
  color: var(--fd-muted);
  font-size: .78rem;
}

.fd-kv-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}

.fd-kv,
.fd-analysis-list article,
.fd-remediation li,
.fd-evidence {
  border: 1px solid var(--fd-line);
  border-radius: 6px;
  background: rgba(0, 0, 0, .22);
}

.fd-kv {
  min-width: 0;
  padding: 12px;
}

.fd-kv-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
}

.fd-kv-head span {
  color: var(--fd-muted);
  font-size: .68rem;
  font-weight: 900;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.fd-kv-value {
  overflow: hidden;
  color: #f8fafc;
  font-weight: 650;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.fd-mono,
.fd-url,
.fd-terminal,
.fd-kv code,
.fd-evidence code,
.fd-match-box pre,
.fd-line code {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
}

.fd-copy,
.fd-mini,
.fd-danger-btn,
.fd-actions button {
  border: 1px solid var(--fd-line-2);
  border-radius: 6px;
  background: rgba(15, 23, 42, .9);
  color: #dbe4f0;
  font-weight: 800;
  cursor: pointer;
  transition: border-color .15s ease, background .15s ease, color .15s ease, transform .15s ease;
}

.fd-copy,
.fd-mini,
.fd-danger-btn {
  padding: 6px 10px;
  font-size: .76rem;
}

.fd-copy:hover,
.fd-mini:hover,
.fd-actions button:hover {
  border-color: rgba(56, 189, 248, .65);
  background: rgba(14, 165, 233, .12);
  color: #f0f9ff;
}

.fd-danger-btn,
.fd-actions .fd-danger {
  border-color: rgba(251, 113, 133, .45);
  background: rgba(244, 63, 94, .14);
  color: #ffe4e6;
}

.fd-danger-btn:hover,
.fd-actions .fd-danger:hover {
  background: rgba(244, 63, 94, .22);
}

.fd-match-box {
  padding: 14px;
  border: 1px solid rgba(251, 113, 133, .28);
  border-radius: 8px;
  background: rgba(76, 5, 25, .12);
}

.fd-match-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
  color: #cbd5e1;
}

.fd-match-head span:last-child {
  display: inline-flex;
  gap: 8px;
}

.fd-match-box pre,
.fd-body-excerpt pre {
  margin: 0;
  overflow: auto;
  white-space: pre-wrap;
}

.fd-match-box pre {
  padding: 14px;
  border: 1px solid var(--fd-line);
  border-radius: 6px;
  background: rgba(0, 0, 0, .48);
  color: #f8fafc;
}

.fd-terminal-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}

.fd-terminal {
  overflow: hidden;
  border: 1px solid var(--fd-line);
  border-radius: 8px;
  background: rgba(0, 0, 0, .42);
}

.fd-terminal-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border-bottom: 1px solid var(--fd-line);
  color: #94a3b8;
  font-size: .74rem;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.fd-terminal-head .fd-copy {
  margin-left: auto;
}

.fd-lights {
  display: inline-flex;
  gap: 7px;
}

.fd-lights i {
  width: 9px;
  height: 9px;
  border-radius: 999px;
}

.fd-lights i:nth-child(1) { background: #fb7185; }
.fd-lights i:nth-child(2) { background: #facc15; }
.fd-lights i:nth-child(3) { background: #34d399; }

.fd-terminal-body {
  padding: 14px;
}

.fd-line {
  display: grid;
  grid-template-columns: 128px minmax(0, 1fr);
  gap: 12px;
  padding: 5px 0;
}

.fd-line span,
.fd-body-excerpt > span {
  color: #64748b;
}

.fd-line code {
  overflow-wrap: anywhere;
  color: #e2e8f0;
}

.fd-body-excerpt {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--fd-line);
}

.fd-body-excerpt > span {
  display: block;
  margin-bottom: 8px;
  font-size: .68rem;
  font-weight: 900;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.fd-body-excerpt mark {
  padding: 1px 3px;
  border-radius: 3px;
  background: rgba(250, 204, 21, .22);
  color: #fde68a;
}

.fd-evidence-list,
.fd-analysis-list,
.fd-remediation,
.fd-actions {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.fd-evidence {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 10px 14px;
  padding: 12px;
}

.fd-evidence strong {
  display: block;
  color: #f8fafc;
}

.fd-evidence small {
  display: block;
  margin-top: 4px;
  color: var(--fd-muted);
}

.fd-evidence-actions {
  display: inline-flex;
  gap: 8px;
  align-items: start;
}

.fd-evidence code {
  grid-column: 1 / -1;
  overflow: hidden;
  padding: 10px;
  border: 1px solid var(--fd-line);
  border-radius: 5px;
  background: rgba(0, 0, 0, .45);
  color: #e2e8f0;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.fd-analysis-list article {
  padding: 13px;
}

.fd-analysis-list h3 {
  margin: 0 0 8px;
  color: var(--fd-cyan);
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.fd-analysis-list p {
  margin: 0;
  color: #dbe4f0;
  line-height: 1.55;
}

.fd-remediation {
  margin: 0;
  padding: 0;
  list-style: none;
}

.fd-remediation li {
  display: flex;
  gap: 12px;
  align-items: start;
  padding: 12px;
}

.fd-remediation span {
  display: inline-grid;
  place-items: center;
  width: 24px;
  height: 24px;
  flex: 0 0 24px;
  border-radius: 5px;
  background: rgba(14, 165, 233, .18);
  color: #bae6fd;
  font-weight: 900;
}

.fd-remediation p {
  margin: 1px 0 0;
}

.fd-glance {
  padding: 16px;
}

.fd-metrics {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.fd-metrics article {
  min-width: 0;
  padding: 12px;
  border: 1px solid rgba(56, 189, 248, .28);
  border-radius: 6px;
  background: rgba(14, 165, 233, .1);
}

.fd-metrics article.ok {
  border-color: rgba(52, 211, 153, .28);
  background: rgba(16, 185, 129, .1);
}

.fd-metrics article.warn {
  border-color: rgba(251, 191, 36, .28);
  background: rgba(251, 191, 36, .1);
}

.fd-metrics span {
  display: block;
  margin-bottom: 6px;
  color: #94a3b8;
  font-size: .68rem;
  font-weight: 900;
  letter-spacing: .12em;
  text-transform: uppercase;
}

.fd-metrics strong {
  display: block;
  overflow: hidden;
  color: #f8fafc;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  font-size: 1.1rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.fd-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}

.fd-tags span {
  padding: 5px 9px;
  border: 1px solid var(--fd-line-2);
  border-radius: 999px;
  background: rgba(15, 23, 42, .72);
  color: #cbd5e1;
  font-size: .78rem;
}

.fd-actions button {
  width: 100%;
  min-height: 38px;
  padding: 9px 12px;
  font-size: .88rem;
}

.fd-actions .fd-primary {
  border-color: rgba(56, 189, 248, .6);
  background: rgba(14, 165, 233, .18);
  color: #e0f2fe;
}

@media (max-width: 1180px) {
  .fd-layout,
  .fd-hero {
    grid-template-columns: 1fr;
  }

  .fd-side {
    position: static;
  }
}

@media (max-width: 820px) {
  .fd-kv-grid,
  .fd-terminal-grid,
  .fd-metrics {
    grid-template-columns: 1fr;
  }

  .fd-url-row,
  .fd-match-head,
  .fd-evidence {
    align-items: stretch;
    grid-template-columns: 1fr;
  }

  .fd-url-row {
    flex-wrap: wrap;
  }

  .fd-url {
    flex-basis: 100%;
  }
}

/* ── Script Health Grid ─────────────────────────────────────────────────── */
.sh-summary {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: .45rem 1rem;
  font-size: .8rem;
  font-weight: 700;
  border-bottom: 1px solid var(--line);
}
.sh-summary-ok    { color: var(--success, #087443); background: rgba(8, 116, 67, .06); }
.sh-summary-stale { color: var(--warning, #b45309); background: rgba(180, 83, 9, .06); }
.sh-summary-err   { color: var(--danger,  #b42318); background: rgba(180, 35, 24, .06); }
.sh-summary-ts    { font-weight: 400; color: var(--muted); font-size: .72rem; }

.sh-wrap {
  display: flex;
  flex-direction: column;
  gap: .2rem;
  padding: .75rem 1rem .9rem;
}

.sh-group { margin-bottom: .55rem; }

.sh-group-label {
  font-size: .67rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--muted);
  margin-bottom: .4rem;
}

.sh-cards {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem;
}

.sh-card {
  display: flex;
  align-items: flex-start;
  gap: .4rem;
  padding: .32rem .65rem .32rem .48rem;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: var(--panel);
  cursor: default;
  max-width: 220px;
  transition: border-color .15s, box-shadow .15s;
}
.sh-card:hover { border-color: var(--line-strong); box-shadow: 0 1px 4px rgba(0,0,0,.05); }

.sh-card-error   { border-color: rgba(180, 35, 24, .4);  background: rgba(180, 35, 24, .05); }
.sh-card-stale   { border-color: rgba(180, 83,  9, .4);  background: rgba(180, 83,  9, .05); }
.sh-card-running { border-color: rgba(14, 165, 233, .4); background: rgba(14, 165, 233, .05); }
.sh-card-disabled { opacity: .68; }

.sh-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
  margin-top: 4px;
}
.sh-dot-ok      { background: var(--success, #087443); }
.sh-dot-error   { background: var(--danger,  #b42318); }
.sh-dot-stale   { background: var(--warning, #b45309); }
.sh-dot-unknown { background: #94a3b8; }
.sh-dot-disabled { background: #94a3b8; }
.sh-dot-running {
  background: #0ea5e9;
  animation: sh-pulse 1.5s ease-in-out infinite;
}
@keyframes sh-pulse {
  0%, 100% { opacity: 1;  transform: scale(1); }
  50%       { opacity: .5; transform: scale(.8); }
}

.sh-body {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.sh-name {
  font-size: .78rem;
  font-weight: 600;
  color: var(--text);
  white-space: nowrap;
  line-height: 1.3;
}

.sh-age {
  font-size: .66rem;
  color: var(--muted);
  line-height: 1.2;
}
.sh-policy {
  color: var(--muted);
  font-size: .62rem;
  line-height: 1.2;
  white-space: nowrap;
}

.sh-snippet {
  font-size: .62rem;
  color: var(--danger, #b42318);
  margin-top: 2px;
  max-width: 190px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  line-height: 1.3;
  opacity: .85;
}
.sh-card-stale .sh-snippet { color: var(--warning, #b45309); }

/* ── Scope por plataforma (tarjeta del dashboard) ───────────────────── */
.platform-stats-table { width: 100%; border-collapse: collapse; font-size: .82rem; }
.platform-stats-table thead th {
  text-align: left; padding: .4rem .5rem; border-bottom: 1.5px solid var(--line);
  color: var(--muted); font-size: .7rem; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; white-space: nowrap;
}
.platform-stats-table th.num, .platform-stats-table td.num {
  text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap;
}
.platform-stats-table tbody td { padding: .4rem .5rem; border-bottom: 1px solid var(--line); }
.platform-stats-table tbody tr:last-child td { border-bottom: none; }
.platform-stats-table tbody tr:hover td { background: rgba(14, 116, 144, 0.03); }

/* ── Superficie de ataque: barras superpuestas (vivos/total) + KPIs ───── */
.dash-bar-track { position: relative; }
.dash-bar-fill  { position: absolute; left: 0; top: 0; }
.dash-bar-val-tot { color: var(--muted); font-weight: 600; font-size: .72rem; }
.dash-kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: .6rem; width: 100%; }
.dash-kpi {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: .8rem .6rem;
  border-radius: 10px;
  border: 1px solid var(--line);
  background: var(--panel);
  transition: border-color .15s, box-shadow .15s;
}
.dash-kpi:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.dash-kpi-val { font-size: 1.4rem; font-weight: 800; line-height: 1.2; font-variant-numeric: tabular-nums; }
.dash-kpi-lbl { font-size: .7rem; font-weight: 700; color: var(--muted); margin-top: 4px; text-align: center; text-transform: uppercase; letter-spacing: .04em; }

/* ── Anti-desborde de texto en cards del dashboard ───────────────────── */
.dash-bar-label { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-bars-dual .dash-bar-row { grid-template-columns: 84px 1fr 74px; }
.dash-bars-dual .dash-bar-val { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-kpi { min-width: 0; overflow: hidden; }
.dash-kpi-val { white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.dash-kpi-lbl { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.dash-legend-list { min-width: 0; }
.dash-leg-row { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#platformStats { overflow-x: auto; }

/* ── BXSS Pipeline ─────────────────────────────── */
.bxss-hit-card { border:1px solid var(--border); border-radius:10px; margin:8px 12px; overflow:hidden; transition: border-color .15s, box-shadow .15s; }
.bxss-hit-card:hover { border-color: var(--accent); box-shadow: 0 2px 8px rgba(14, 116, 144, .08); }
.bxss-hit-header { display:flex; align-items:center; gap:8px; padding:8px 12px; background:rgba(220,38,38,.06); flex-wrap:wrap; }
.bxss-hit-body { padding:8px 12px; font-size:.82rem; }
.bxss-hit-detail { margin-bottom:4px; }
.bxss-hit-detail strong { color:var(--fg); margin-right:4px; }
.row-hit { background:rgba(220,38,38,.05) !important; }
.row-hit td { border-bottom-color:rgba(220,38,38,.15); }

/* ── Markdown Viewer ──────────────────────────── */
.md-rendered { line-height:1.6; word-wrap:break-word; }
.md-rendered h1,.md-rendered h2,.md-rendered h3 { margin:1em 0 .3em; border-bottom:1px solid var(--border); padding-bottom:.2em; }
.md-rendered pre { background:var(--bg); padding:.8em; border-radius:4px; overflow-x:auto; font-size:.85rem; }
.md-rendered code { background:var(--bg); padding:.1em .3em; border-radius:3px; font-size:.9em; }
.md-rendered pre code { background:none; padding:0; }
.md-rendered table { border-collapse:collapse; width:100%; margin:.5em 0; }
.md-rendered th,.md-rendered td { border:1px solid var(--border); padding:.4em .6em; text-align:left; }
.md-rendered blockquote { border-left:3px solid var(--accent,#3b82f6); margin:.5em 0; padding:.3em .8em; color:var(--muted); }
.md-rendered img { max-width:100%; }
.md-rendered h1 { font-size:1.5rem; } .md-rendered h2 { font-size:1.2rem; } .md-rendered h3 { font-size:1.02rem; }
.md-rendered h4,.md-rendered h5,.md-rendered h6 { margin:1em 0 .3em; font-size:.92rem; color:var(--muted); }
.md-rendered > *:first-child { margin-top:0; }
.md-rendered p,.md-rendered ul,.md-rendered ol { margin:.6em 0; }
.md-rendered li { margin:.2em 0; }
.md-rendered li input[type=checkbox] { margin-right:.4em; }
.md-rendered tbody tr:nth-child(even) { background:rgba(255,255,255,.02); }
.md-rendered th { background:rgba(255,255,255,.04); font-size:.85em; text-transform:uppercase; letter-spacing:.04em; }
.md-rendered hr { border:none; border-top:1px solid var(--border); margin:1.4em 0; }
.md-rendered a { color:var(--accent,#3b82f6); }
.md-rendered code { color:#f0abfc; }
.md-rendered pre { border:1px solid var(--border); line-height:1.5; }
.md-rendered pre code { color:inherit; }

.md-seg { display:inline-flex; border:1px solid var(--border); border-radius:7px; overflow:hidden; }
.md-seg button { padding:4px 11px; background:transparent; border:none; border-right:1px solid var(--border); color:var(--text-muted,#94a3b8); font-size:.8em; cursor:pointer; }
.md-seg button:last-child { border-right:none; }
.md-seg button:hover { color:var(--fg); background:rgba(255,255,255,.04); }
.md-seg button.active { background:rgba(59,130,246,.16); color:#93c5fd; }
.md-wrap { display:grid; gap:14px; grid-template-columns:1fr 1fr; align-items:stretch; margin-top:12px; }
.md-wrap.mode-edit { grid-template-columns:1fr; } .md-wrap.mode-edit .md-pane-view { display:none; }
.md-wrap.mode-view { grid-template-columns:1fr; } .md-wrap.mode-view .md-pane-edit { display:none; }
.md-wrap.dragover { outline:2px dashed var(--accent,#3b82f6); outline-offset:6px; border-radius:10px; }
@media (max-width:900px) { .md-wrap { grid-template-columns:1fr; } }
.md-pane { display:flex; flex-direction:column; border:1px solid var(--border); border-radius:10px; overflow:hidden; background:var(--bg-card); min-height:60vh; }
.md-pane-head { padding:8px 13px; font-size:.72em; text-transform:uppercase; letter-spacing:.07em; color:var(--text-muted,#94a3b8); border-bottom:1px solid var(--border); background:rgba(255,255,255,.02); display:flex; justify-content:space-between; gap:10px; }
.md-dim { text-transform:none; letter-spacing:0; opacity:.8; font-variant-numeric:tabular-nums; }
#mdInput { flex:1; width:100%; border:none; resize:none; padding:14px; background:transparent; color:var(--fg); font-family:ui-monospace,monospace; font-size:.85rem; line-height:1.6; box-sizing:border-box; }
#mdInput:focus { outline:none; }
#mdOutput { flex:1; padding:16px 18px; overflow:auto; }
#mdOutput:empty::after { content:'La vista previa aparece aquí'; color:var(--text-muted,#94a3b8); font-size:.85em; }

/* ── Scanner Observatory ─────────────────────── */
.sc-kpi {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: .6rem;
  margin-bottom: 1.2rem;
}
.sc-kpi-card {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: .8rem 1rem;
  text-align: center;
  transition: border-color .15s, box-shadow .15s;
}
.sc-kpi-card:hover {
  border-color: var(--accent);
  box-shadow: 0 2px 8px rgba(14, 116, 144, .08);
}
.sc-kpi-value {
  font-size: 1.4rem;
  font-weight: 800;
  line-height: 1.2;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.sc-kpi-label {
  font-size: .72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--muted);
  margin-top: .15rem;
}
.sc-kpi-sub {
  font-size: .68rem;
  color: var(--muted);
  margin-top: .1rem;
  opacity: .8;
}
.sc-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(520px, 1fr));
  gap: 1rem;
}
.sc-card {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 1rem 1.2rem;
  overflow: hidden;
}
.sc-card h3 {
  margin: 0 0 .6rem;
  font-size: .92rem;
  font-weight: 700;
  color: var(--text);
}
.sc-card--wide { grid-column: 1 / -1; }
.sc-card .table {
  width: 100%;
  border-collapse: collapse;
  font-size: .82rem;
}
.sc-card .table th {
  text-align: left;
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .03em;
  color: var(--muted);
  padding: .4rem .5rem;
  border-bottom: 1.5px solid var(--line);
}
.sc-card .table td {
  padding: .35rem .5rem;
  border-bottom: 1px solid var(--line);
  vertical-align: middle;
}
.sc-card .table tr:last-child td { border-bottom: none; }
.sc-card .table tr:hover td { background: var(--panel-soft); }
.sc-bar {
  height: 6px;
  border-radius: 3px;
  background: var(--line);
  overflow: hidden;
}
.sc-bar-fill { height: 100%; border-radius: 3px; transition: width .3s ease; }
.sc-alert-box {
  background: var(--panel);
  border: 1px solid var(--line);
  border-left: 3px solid var(--danger);
  border-radius: 8px;
  padding: .7rem 1rem;
  margin-bottom: 1rem;
  font-size: .84rem;
}
.sc-alert-box-error {
  background: rgba(220, 38, 38, .08);
  border-color: rgba(220, 38, 38, .35);
}
.sc-alert-box ul { margin: .4rem 0 0; padding-left: 1.4rem; }
.sc-alert-box li { margin-bottom: .2rem; }
.sc-chart-legend {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem .8rem;
  margin-top: .4rem;
  line-height: 1.8;
}
.sc-chart-legend span {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: .73rem;
  white-space: nowrap;
}
.sc-chart-legend .sc-dot {
  width: 10px;
  height: 3px;
  border-radius: 1px;
  display: inline-block;
}
.sc-spark-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: .8rem;
  margin-top: .5rem;
}
.sc-sparkcard {
  background: var(--panel-soft);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: .6rem .8rem;
}
.sc-sparkcard svg { display: block; }
@media (max-width: 640px) {
  .sc-grid { grid-template-columns: 1fr; }
  .sc-kpi { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); }
  .sc-spark-row { grid-template-columns: 1fr; }
}

/* ── Platform Tokens ─────────────────────────────────────────── */
.platform-tokens-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(340px,1fr)); gap:1rem; margin-top:.8rem }
.platform-token-card { background:var(--panel-soft,#1a1a2e); border:1px solid var(--line,#333); border-radius:8px; padding:1rem }
.ptc-header { font-size:1.05rem; margin-bottom:.3rem }
.ptc-help { font-size:.78rem; color:var(--text-dim,#888); margin-bottom:.5rem }
.ptc-stats { display:flex; gap:.8rem; font-size:.75rem; color:var(--text-dim,#aaa); margin-bottom:.7rem; padding:.4rem .6rem; background:rgba(255,255,255,.03); border-radius:4px; border:1px solid var(--line,#222) }
.ptc-stats span { white-space:nowrap }
.ptc-field { margin-bottom:.6rem }
.ptc-field label { display:flex; align-items:center; gap:.5rem; font-size:.75rem; font-weight:600; color:var(--text-dim,#aaa); margin-bottom:.2rem; font-family:monospace }
.ptc-status { font-size:.8rem; margin-bottom:.3rem }
.ptc-ok { color:#16a34a }
.ptc-missing { color:#dc2626 }
.ptc-public { color:#94a3b8; font-style:italic }
.ptc-input-row { display:flex; gap:.4rem; align-items:center }
.ptc-input { flex:1; padding:.35rem .5rem; font-size:.82rem; font-family:monospace; background:var(--bg2,#0d1117); color:var(--text,#ccc); border:1px solid var(--line,#333); border-radius:4px }
.ptc-toggle { background:none; border:none; cursor:pointer; font-size:1rem; padding:0 .3rem }
.ptc-delete { background:none; border:none; cursor:pointer; color:#dc2626; font-size:.72rem; padding:.15rem .3rem; margin-top:.2rem; opacity:.7 }
.ptc-delete:hover { opacity:1; text-decoration:underline }
.ptc-actions { display:flex; gap:.5rem; margin-top:.7rem; padding-top:.5rem; border-top:1px solid var(--line,#222); flex-wrap:wrap }
.ptc-optional { font-size:.72rem; color:var(--text-dim,#888); font-weight:400 }
.ptc-optional-status { color:#94a3b8 }
.ptc-jwt { font-size:.68rem; font-weight:400; padding:.1rem .4rem; border-radius:3px; font-family:system-ui,sans-serif }
.ptc-jwt-ok { background:rgba(22,163,74,.15); color:#16a34a }
.ptc-jwt-warn { background:rgba(217,119,6,.15); color:#d97706 }
.ptc-jwt-expired { background:rgba(220,38,38,.15); color:#dc2626 }

/* ── Browser Secrets evidence ── */
.bs-evidence { cursor: pointer; }
.bs-evidence > summary { font-family: monospace; font-size: .75rem; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bs-evidence[open] > summary { white-space: normal; word-break: break-all; }
.bs-evidence-body { margin-top: .4rem; padding: .4rem; background: var(--panel); border: 1px solid var(--line); border-radius: 4px; }
.bs-claims { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: .3rem; }
.bs-claim { font-size: .7rem; background: color-mix(in srgb, var(--accent) 12%, transparent); padding: 1px 6px; border-radius: 3px; }
.bs-claim strong { color: var(--accent); }
.bs-raw { font-size: .7rem; margin: 0; white-space: pre-wrap; word-break: break-all; max-height: 120px; overflow-y: auto; }
.bs-status { font-size: .7rem; font-weight: 700; padding: 1px 8px; border-radius: 10px; }
.bs-live { background: rgba(22,163,74,.15); color: #16a34a; }
.bs-stale { background: rgba(220,38,38,.15); color: #dc2626; }
.bs-unknown { background: rgba(100,116,139,.15); color: #64748b; }

/* ── Scanner Findings expandable evidence ── */
.sf-ev { cursor: pointer; }
.sf-ev > summary { font-size: .72rem; max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; list-style: none; }
.sf-ev > summary::-webkit-details-marker { display: none; }
.sf-ev > summary::before { content: '▸ '; color: var(--muted); font-size: .65rem; }
.sf-ev[open] > summary::before { content: '▾ '; }
.sf-ev[open] > summary { white-space: normal; }
.sf-ev-full { font-size: .7rem; margin: .3rem 0 0; padding: .4rem; background: var(--panel); border: 1px solid var(--line); border-radius: 4px; white-space: pre-wrap; word-break: break-all; max-height: 200px; overflow-y: auto; }

/* ── Targeting analysis progress ─────────────────────────────── */
.tgt-progress-panel {
  margin: 0 12px 16px;
  padding: 12px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 8px;
  box-shadow: var(--shadow);
}
.tgt-progress-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
}
.tgt-progress-head h3,
.tgt-progress-grid h4 {
  margin: 0;
  letter-spacing: 0;
}
.tgt-progress-head h3 {
  font-size: 1rem;
}
.tgt-progress-head small,
.tgt-progress-card small,
.tgt-stage-main small,
.tgt-pending-table small {
  color: var(--muted);
}
.tgt-progress-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(145px, 1fr));
  gap: 8px;
}
.tgt-progress-card {
  min-width: 0;
  padding: 9px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--panel-soft);
}
.tgt-progress-card span {
  display: block;
  color: var(--muted);
  font-size: .72rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .04em;
}
.tgt-progress-card b {
  display: block;
  margin: 3px 0 2px;
  color: var(--text);
  font-size: 1.15rem;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.tgt-progress-card small {
  display: block;
  font-size: .75rem;
  line-height: 1.25;
}
.tgt-progress-card.ok { border-color: color-mix(in srgb, var(--success) 45%, var(--line)); }
.tgt-progress-card.warn { border-color: color-mix(in srgb, var(--warning) 50%, var(--line)); }
.tgt-blocker-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: 8px;
  margin-top: 10px;
}
.tgt-blocker-card {
  min-width: 0;
  padding: 9px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--panel-soft);
}
.tgt-blocker-card.crit { border-color: color-mix(in srgb, var(--danger) 50%, var(--line)); }
.tgt-blocker-card.warn { border-color: color-mix(in srgb, var(--warning) 50%, var(--line)); }
.tgt-blocker-card.ok { border-color: color-mix(in srgb, var(--success) 35%, var(--line)); }
.tgt-blocker-card strong,
.tgt-blocker-card span,
.tgt-blocker-card small {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tgt-blocker-card strong { font-size: .82rem; }
.tgt-blocker-card span { margin-top: 3px; font-size: .74rem; color: var(--text); }
.tgt-blocker-card small { margin-top: 2px; color: var(--muted); font-size: .68rem; }
.tgt-progress-grid {
  display: grid;
  grid-template-columns: minmax(280px, .9fr) minmax(360px, 1.1fr);
  gap: 12px;
  margin-top: 12px;
}
.tgt-progress-grid section {
  min-width: 0;
}
.tgt-progress-grid h4 {
  margin-bottom: 8px;
  font-size: .86rem;
}
.tgt-progress-subhead {
  display: block;
  margin: -4px 0 8px;
  color: var(--muted);
  font-size: .72rem;
}
.tgt-stage-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.tgt-stage-row {
  display: grid;
  grid-template-columns: minmax(150px, 1fr) minmax(110px, 190px) 56px;
  align-items: center;
  gap: 9px;
  min-height: 42px;
  padding: 7px 8px;
  border: 1px solid var(--line);
  border-radius: 7px;
  background: var(--panel-soft);
}
.tgt-stage-main {
  min-width: 0;
}
.tgt-stage-main b,
.tgt-stage-main small {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tgt-stage-main b {
  font-size: .82rem;
}
.tgt-stage-main small {
  font-size: .72rem;
}
.tgt-stage-meter {
  height: 9px;
  overflow: hidden;
  border-radius: 999px;
  background: color-mix(in srgb, var(--muted) 15%, transparent);
}
.tgt-stage-meter span {
  display: block;
  height: 100%;
  border-radius: 999px;
  transition: width .25s ease;
}
.tgt-stage-meter span.ok { background: var(--success); }
.tgt-stage-meter span.warn { background: var(--warning); }
.tgt-stage-meter span.crit { background: var(--danger); }
.tgt-stage-meter span.empty { width: 0 !important; background: transparent; }
.tgt-stage-pct {
  font-size: .76rem;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.tgt-stage-pct.ok { color: var(--success); }
.tgt-stage-pct.warn { color: var(--warning); }
.tgt-stage-pct.crit { color: var(--danger); }
.tgt-stage-pct.empty { color: var(--muted); }
.tgt-pending-wrap {
  max-height: 360px;
  overflow: auto;
  border: 1px solid var(--line);
  border-radius: 8px;
}
.tgt-pending-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .78rem;
}
.tgt-pending-table th,
.tgt-pending-table td {
  padding: 7px 8px;
  border-bottom: 1px solid var(--line);
  text-align: right;
  white-space: nowrap;
}
.tgt-pending-table th:first-child,
.tgt-pending-table td:first-child {
  text-align: left;
  min-width: 160px;
  max-width: 260px;
}
.tgt-pending-table td:first-child b,
.tgt-pending-table td:first-child small {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tgt-pending-table .tgt-pending-analysis {
  min-width: 86px;
}
.tgt-pending-table .tgt-pending-takeover {
  min-width: 88px;
}
.tgt-pending-table .tgt-pending-blocker {
  min-width: 118px;
}
.tgt-pending-table .tgt-pending-share {
  min-width: 82px;
}
.tgt-pending-analysis strong {
  display: block;
  margin-bottom: 3px;
  font-size: .76rem;
  font-variant-numeric: tabular-nums;
}
.tgt-pending-analysis strong.ok { color: var(--success); }
.tgt-pending-analysis strong.warn { color: var(--warning); }
.tgt-pending-analysis strong.crit { color: var(--danger); }
.tgt-pending-analysis strong.empty { color: var(--muted); }
.tgt-pending-takeover strong {
  display: block;
  font-size: .74rem;
  font-variant-numeric: tabular-nums;
}
.tgt-pending-takeover strong.ok { color: var(--success); }
.tgt-pending-takeover strong.warn { color: var(--warning); }
.tgt-pending-takeover strong.crit { color: var(--danger); }
.tgt-pending-takeover strong.empty { color: var(--muted); }
.tgt-pending-takeover small {
  display: block;
  color: var(--muted);
  font-size: .68rem;
}
.tgt-pending-blocker strong,
.tgt-pending-share strong {
  display: block;
  font-size: .74rem;
  font-variant-numeric: tabular-nums;
}
.tgt-pending-blocker small {
  display: block;
  color: var(--muted);
  font-size: .66rem;
}
.tgt-pending-share strong.ok { color: var(--success); }
.tgt-pending-share strong.warn { color: var(--warning); }
.tgt-pending-share strong.crit { color: var(--danger); }
.tgt-pending-meter {
  display: block;
  width: 72px;
  height: 6px;
  margin-left: auto;
  overflow: hidden;
  border-radius: 999px;
  background: color-mix(in srgb, var(--muted) 15%, transparent);
}
.tgt-pending-meter i {
  display: block;
  height: 100%;
  border-radius: 999px;
}
.tgt-pending-meter i.ok { background: var(--success); }
.tgt-pending-meter i.warn { background: var(--warning); }
.tgt-pending-meter i.crit { background: var(--danger); }
.tgt-pending-meter i.empty { width: 0 !important; background: transparent; }
.tgt-pending-table th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--panel-soft);
  color: var(--muted);
  font-size: .7rem;
  text-transform: uppercase;
  letter-spacing: .04em;
}
.tgt-pending-table tr:last-child td {
  border-bottom: 0;
}
.tgt-pending-table .empty {
  padding: 18px 8px;
  color: var(--muted);
  text-align: center;
}
.tgt-progress-warning,
.tgt-progress-error,
.tgt-progress-empty,
.tgt-progress-loading {
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--panel-soft);
  color: var(--muted);
  font-size: .84rem;
}
.tgt-progress-warning {
  margin: 8px 0;
  border-color: color-mix(in srgb, var(--warning) 45%, var(--line));
  color: var(--warning);
}
.tgt-progress-error {
  border-color: color-mix(in srgb, var(--danger) 55%, var(--line));
  color: var(--danger);
}
.tgt-progress-empty b,
.tgt-progress-empty span {
  display: block;
}
@media (max-width: 900px) {
  .tgt-progress-grid {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 640px) {
  .tgt-progress-panel {
    margin-left: 8px;
    margin-right: 8px;
  }
  .tgt-progress-head {
    align-items: stretch;
    flex-direction: column;
  }
  .tgt-progress-head .button {
    align-self: flex-start;
  }
  .tgt-stage-row {
    grid-template-columns: 1fr 54px;
  }
  .tgt-stage-meter {
    grid-column: 1 / -1;
    grid-row: 2;
  }
  .tgt-stage-pct {
    grid-column: 2;
    grid-row: 1;
  }
}

/* Buscador único de conocimiento */
.muted { color: var(--muted); font-size: .82rem; }
.ks-list { list-style: none; margin: .4rem 0 1rem; padding: 0; }
.ks-list li { padding: .5rem .7rem; border-left: 2px solid var(--line); margin-bottom: .35rem; background: var(--panel-soft); border-radius: 0 6px 6px 0; font-size: .85rem; }
#ksResults details > summary { cursor: pointer; padding: .4rem 0; }

/* N3 — buscador global de secciones (palette.js) */
.sec-palette { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 9999;
  display: flex; align-items: flex-start; justify-content: center; padding-top: 12vh; }
.sec-palette-box { width: min(560px, 92vw); background: var(--card, #fff);
  border-radius: 10px; box-shadow: 0 12px 40px rgba(0,0,0,.35); overflow: hidden; }
.sec-palette-input { width: 100%; box-sizing: border-box; padding: 14px 16px; border: 0;
  border-bottom: 1px solid var(--border, #e5e7eb); font-size: 15px; outline: none;
  background: transparent; color: inherit; }
.sec-palette-list { list-style: none; margin: 0; padding: 6px; max-height: 52vh; overflow-y: auto; }
.sec-palette-list li { display: flex; justify-content: space-between; align-items: center;
  gap: 12px; padding: 8px 10px; border-radius: 6px; cursor: pointer; }
.sec-palette-list li.sel { background: var(--accent-soft, #eef2ff); }
.sec-palette-list li small { opacity: .6; font-size: 11px; white-space: nowrap; }
.sec-palette-list li.vacio { opacity: .6; cursor: default; justify-content: center; }

/* ── Terminal tabs ───────────────────────────────────────── */
.term-tab {
  padding: 7px 10px; background: none; border: none; border-bottom: 2px solid transparent;
  color: var(--text-muted, #888); cursor: pointer; font-size: .82em; white-space: nowrap;
  display: inline-flex; align-items: center; gap: 6px; transition: color .15s, border-color .15s;
  -webkit-tap-highlight-color: transparent;
}
.term-tab:hover { color: var(--text, #eee); }
.term-tab.term-tab-dragging { opacity: .4; }
.term-tab.active { border-bottom-color: var(--accent, #4fc3f7); color: var(--text, #eee); }
.term-tab-close {
  cursor: pointer; opacity: 0; font-size: 1.1em; line-height: 1; padding: 0 2px;
  transition: opacity .15s;
}
.term-tab:hover .term-tab-close, .term-tab.active .term-tab-close { opacity: .5; }
.term-tab-close:hover { opacity: 1 !important; color: var(--red, #f44336); }
.term-tab-rename {
  background: var(--bg, #1e1e1e); color: var(--text, #eee); border: 1px solid var(--accent, #4fc3f7);
  border-radius: 3px; padding: 1px 4px; font-size: .85em; width: 80px; outline: none;
}
.term-layout-toggle {
  flex: 0 0 auto; min-height: 29px; margin: 0 3px; padding: 4px 9px;
  border: 1px solid var(--border, #444); border-radius: 5px;
  background: transparent; color: var(--text-muted, #aaa); cursor: pointer;
  font-size: .76em; font-weight: 700; white-space: nowrap;
}
.term-layout-toggle:hover { border-color: var(--accent, #4fc3f7); color: var(--text, #eee); }
.term-layout-toggle[aria-pressed="true"] {
  border-color: color-mix(in srgb, var(--accent, #4fc3f7) 60%, transparent);
  background: color-mix(in srgb, var(--accent, #4fc3f7) 14%, transparent);
  color: var(--accent, #4fc3f7);
}
.term-grid-controls {
  flex: 0 0 auto; display: flex; align-items: center; gap: 5px; margin: 0 3px;
  padding: 2px 5px; border: 1px solid var(--border, #444); border-radius: 5px;
  background: color-mix(in srgb, var(--accent, #4fc3f7) 7%, transparent);
}
.term-grid-controls[hidden] { display: none; }
.term-grid-control { display: flex; align-items: center; gap: 3px; color: var(--text-muted, #aaa); font-size: .64rem; font-weight: 700; white-space: nowrap; }
.term-grid-control select {
  min-height: 24px; padding: 1px 19px 1px 5px; border: 1px solid var(--border, #444);
  border-radius: 4px; background: var(--bg, #151515); color: var(--text, #eee);
  font: 700 .68rem/1 system-ui, sans-serif; cursor: pointer;
}
.term-grid-control select:focus-visible { outline: 2px solid var(--accent, #4fc3f7); outline-offset: 1px; }
.term-toolbar { position: relative; }
.term-server-menu {
  position: absolute; z-index: 40; top: calc(100% + 4px); right: 8px;
  width: min(390px, calc(100vw - 24px)); max-height: min(65vh, 560px); overflow-y: auto;
  padding: 7px; border: 1px solid var(--border, #444); border-radius: 8px;
  background: #111722; box-shadow: 0 12px 34px #000b;
}
.term-server-menu[hidden] { display: none; }
.term-server-menu-head { padding: 5px 7px 8px; color: #cbd5e1; font-size: .76rem; font-weight: 800; }
.term-server-import {
  margin-top: 7px; padding: 5px 8px; border: 1px solid #4fc3f766; border-radius: 5px;
  background: #4fc3f714; color: #7dd3fc; cursor: pointer; font-size: .65rem; font-weight: 850;
}
.term-server-import:hover { background: #4fc3f726; }
.term-server-menu-note { display: block; margin-top: 3px; color: #7f8b9d; font-size: .66rem; font-weight: 500; }
.term-server-session {
  width: 100%; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3px 9px;
  padding: 8px; border: 0; border-radius: 6px; background: transparent;
  color: #d9e1eb; cursor: pointer; text-align: left;
}
.term-server-session:hover, .term-server-session:focus-visible { background: #263244; outline: none; }
.term-server-session.open { background: #1d2a39; }
.term-server-session-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .78rem; font-weight: 750; }
.term-server-session-action { grid-row: 1 / span 2; grid-column: 2; align-self: center; color: var(--accent, #4fc3f7); font-size: .68rem; font-weight: 800; }
.term-server-session-meta { color: #8290a3; font: .66rem/1.3 monospace; }
.term-server-session-live { color: #6ee7b7; }
.term-frame-connect {
  position: absolute; inset: 0; z-index: 3; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 5px; border: 0;
  background: #111722; color: #cbd5e1; cursor: pointer;
}
.term-frame-connect strong { color: #7dd3fc; font-size: .8rem; }
.term-frame-connect span { color: #7f8b9d; font-size: .68rem; }
#termFrames.term-layout-grid .term-frame-connect { top: 30px; }
.term-frame-pane {
  position: absolute; inset: 0; min-width: 0; min-height: 0;
  background: #1e1e1e; overflow: hidden; overscroll-behavior: contain;
}
.term-frame-pane > iframe {
  display: block; width: 100%; height: 100%; min-width: 0; min-height: 0;
  border: 0; background: #1e1e1e; overscroll-behavior: contain;
}
.term-frame-head { display: none; }
#termFrames.term-layout-grid {
  --term-grid-min-width: 440px; --term-grid-min-height: 300px; --term-grid-gap: 7px; --term-grid-head: 30px;
  display: grid; grid-template-columns: repeat(auto-fit, minmax(min(var(--term-grid-min-width), 100%), 1fr));
  grid-auto-rows: minmax(var(--term-grid-min-height), 1fr); align-items: stretch;
  gap: var(--term-grid-gap); padding: var(--term-grid-gap); box-sizing: border-box; overflow: auto;
}
#termFrames.term-layout-grid[data-grid-size="small"] { --term-grid-min-width: 300px; --term-grid-min-height: 220px; --term-grid-gap: 4px; --term-grid-head: 26px; }
#termFrames.term-layout-grid[data-grid-size="large"] { --term-grid-min-width: 620px; --term-grid-min-height: 420px; --term-grid-gap: 10px; --term-grid-head: 34px; }
#termFrames.term-layout-grid[data-grid-columns="1"] { grid-template-columns: repeat(1, minmax(var(--term-grid-min-width), 1fr)); }
#termFrames.term-layout-grid[data-grid-columns="2"] { grid-template-columns: repeat(2, minmax(var(--term-grid-min-width), 1fr)); }
#termFrames.term-layout-grid[data-grid-columns="3"] { grid-template-columns: repeat(3, minmax(var(--term-grid-min-width), 1fr)); }
#termFrames.term-layout-grid[data-grid-columns="4"] { grid-template-columns: repeat(4, minmax(var(--term-grid-min-width), 1fr)); }
#termFrames.term-layout-grid .term-frame-pane {
  position: relative; inset: auto; display: flex !important; flex-direction: column;
  border: 1px solid #ffffff1f; border-radius: 7px; box-shadow: 0 2px 10px #0005;
}
#termFrames.term-layout-grid .term-frame-pane.term-frame-active {
  border-color: var(--accent, #4fc3f7); box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent, #4fc3f7) 35%, transparent), 0 2px 12px #0007;
}
#termFrames.term-layout-grid .term-frame-head {
  flex: 0 0 var(--term-grid-head); display: flex; align-items: center; gap: 7px;
  padding: 0 9px; border: 0; border-bottom: 1px solid #ffffff18;
  background: #151922; color: #b8c0cc; cursor: pointer; text-align: left;
  font: 700 .76rem/1 system-ui, sans-serif;
}
#termFrames.term-layout-grid .term-frame-head:hover { color: #fff; background: #1b2230; }
#termFrames.term-layout-grid .term-frame-head::before {
  content: ''; width: 7px; height: 7px; border-radius: 50%; background: #64748b;
}
#termFrames.term-layout-grid .term-frame-active .term-frame-head::before { background: var(--accent, #4fc3f7); box-shadow: 0 0 7px var(--accent, #4fc3f7); }
#termFrames.term-layout-grid .term-frame-head-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#termFrames.term-layout-grid .term-frame-active .term-frame-head::after {
  content: 'ACTIVA'; margin-left: 0; color: var(--accent, #4fc3f7); font-size: .62rem; letter-spacing: .05em;
}
#termFrames.term-layout-grid .term-frame-pane > iframe { flex: 1 1 auto; height: auto; }
.term-frame-copy {
  margin-left: auto; min-width: 28px; min-height: 22px; padding: 1px 5px;
  border: 1px solid #ffffff24; border-radius: 4px; background: #ffffff0b;
  color: inherit; cursor: pointer; line-height: 1;
}
.term-frame-copy:hover, .term-frame-copy:focus-visible { border-color: var(--accent, #4fc3f7); outline: none; background: #4fc3f71c; }
.term-capture-modal {
  position: fixed; inset: 0; z-index: 11000; display: flex; align-items: center; justify-content: center;
  padding: 12px; box-sizing: border-box; background: #020617d9; backdrop-filter: blur(3px);
}
.term-capture-modal[hidden] { display: none; }
.term-capture-dialog {
  width: min(1100px, calc(100vw - 24px)); height: min(84vh, 860px); min-height: 320px;
  display: flex; flex-direction: column; overflow: hidden;
  border: 1px solid #ffffff2b; border-radius: 10px; background: #0b1019; box-shadow: 0 20px 70px #000d;
}
.term-capture-head {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 8px 10px; border-bottom: 1px solid #ffffff1c; color: #e5e7eb;
}
.term-capture-head > div:first-child { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.term-capture-head strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .82rem; }
.term-capture-status { color: #8492a6; font: .66rem/1.2 monospace; }
.term-capture-status.is-error { color: #fca5a5; }
.term-capture-tools { display: flex; align-items: center; justify-content: flex-end; gap: 5px; flex-wrap: wrap; }
.term-capture-tools label { display: flex; align-items: center; gap: 4px; color: #94a3b8; font-size: .67rem; font-weight: 700; }
.term-capture-tools select, .term-capture-tools button {
  min-height: 29px; padding: 4px 7px; border: 1px solid #ffffff2b; border-radius: 5px;
  background: #131b28; color: #dbe5f1; font: 700 .69rem/1 system-ui, sans-serif; cursor: pointer;
}
.term-capture-tools button:hover, .term-capture-tools button:focus-visible, .term-capture-tools select:focus-visible { border-color: var(--accent, #4fc3f7); outline: none; }
.term-capture-tools button.primary { border-color: #38bdf866; background: #0c4a6e80; color: #bae6fd; }
.term-capture-tools button.close { min-width: 30px; padding: 3px; font-size: 1rem; }
.term-capture-tools button:disabled { opacity: .45; cursor: wait; }
.term-capture-text {
  flex: 1 1 auto; min-height: 0; margin: 0; padding: 12px; overflow: auto;
  background: #060a10; color: #d7e0eb; white-space: pre; tab-size: 4;
  font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  user-select: text; -webkit-user-select: text; touch-action: pan-x pan-y;
}
.term-capture-text.wrap { white-space: pre-wrap; overflow-wrap: anywhere; }
.term-capture-text.is-loading { color: #94a3b8; }
.term-capture-text.is-error { color: #fecaca; white-space: pre-wrap; }
.term-capture-foot { flex: 0 0 auto; padding: 5px 10px; border-top: 1px solid #ffffff12; color: #64748b; font-size: .62rem; }
.term-keybar {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: flex-start; gap: 5px;
  min-height: 38px; padding: 3px 8px; box-sizing: border-box;
  background: var(--bg-card, #1e1e1e); border-bottom: 1px solid var(--border, #333);
}
.term-keybar-spacer { flex: 1 1 auto; min-width: 8px; }
.term-usage { display: flex; align-items: center; gap: 5px; min-width: 0; }
.term-usage-placeholder { color: var(--text-muted, #888); font-size: .72em; white-space: nowrap; }
.term-usage-chip {
  max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  padding: 4px 7px; border: 1px solid var(--border, #444); border-radius: 999px;
  background: var(--bg, #151515); color: var(--text-muted, #aaa); font-size: .7em;
}
.term-usage-chip.ok { border-color: #34d39955; color: #6ee7b7; }
.term-usage-chip.warn { border-color: #f59e0b77; color: #fbbf24; }
.term-usage-chip.critical { border-color: #ef444477; color: #f87171; }
.term-usage-chip.unavailable { opacity: .7; }
/* Muestra caducada: el borde discontinuo evita leerla como consumo actual. */
.term-usage-chip.stale { border-style: dashed; opacity: .85; }
.term-usage-refresh {
  width: 27px; height: 27px; padding: 0; border: 0; background: transparent;
  color: var(--text-muted, #888); cursor: pointer; border-radius: 4px;
}
.term-usage-refresh:hover { background: var(--accent-soft, #26384a); color: var(--accent, #4fc3f7); }
.term-usage-refresh:disabled { cursor: wait; opacity: .5; }
.term-keybar-label {
  margin-right: 4px; color: var(--text-muted, #888); font-size: .75em; white-space: nowrap;
}
.term-key {
  min-width: 34px; min-height: 30px; padding: 3px 8px; border: 1px solid var(--border, #444);
  border-radius: 5px; background: var(--bg, #151515); color: var(--text, #eee);
  font: 600 .9em/1 monospace; cursor: pointer; touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}
.term-key:hover { border-color: var(--accent, #4fc3f7); color: var(--accent, #4fc3f7); }
.term-key:active { transform: translateY(1px); background: var(--accent-soft, #26384a); }
.term-key:focus-visible { outline: 2px solid var(--accent, #4fc3f7); outline-offset: 1px; }
.term-key-wide { min-width: 48px; font-size: .78em; white-space: nowrap; }
.term-key-enter { min-width: 76px; }
@media (max-width: 600px) {
  .term-toolbar { flex-wrap: wrap; align-content: flex-start; }
  #termTabs {
    order: 0; flex: 1 1 calc(100% - 46px) !important;
    max-width: calc(100% - 46px); min-height: 38px;
  }
  #termNewTab { order: 0; }
  #termLayoutToggle, #termGridControls, #termServerSessions, #termCaptureOpen, #termFullscreen, .term-toolbar > span { order: 1; }
  #termPresets {
    order: 2; flex: 1 1 100%; overflow-x: auto;
    padding: 2px 6px 4px; scrollbar-width: thin;
  }
  #termServerSessionsMenu { order: 3; }
  .term-tab { padding: 8px 10px; font-size: .9em; min-height: 38px; }
  .term-layout-toggle { min-height: 34px; padding: 4px 8px; }
  #termFrames.term-layout-grid[data-grid-columns] { grid-template-columns: 1fr; }
  .term-grid-control > span { display: none; }
  .term-keybar { justify-content: flex-end; min-height: 42px; flex-wrap: wrap; }
  .term-usage { flex: 1 1 100%; overflow-x: auto; padding: 2px 0; }
  .term-usage-chip { flex: 0 0 auto; }
  .term-keybar-spacer { display: none; }
  .term-keybar-label { display: none; }
  .term-key { min-width: 40px; min-height: 34px; }
  .term-key-wide { min-width: 48px; }
  .term-key-enter { min-width: 82px; }
  .term-capture-modal { padding: 5px; align-items: stretch; }
  .term-capture-dialog { width: 100%; height: 100%; max-height: none; border-radius: 7px; }
  .term-capture-head { align-items: flex-start; flex-direction: column; padding: 7px; }
  .term-capture-tools { width: 100%; justify-content: flex-start; }
  .term-capture-tools label { flex: 1 1 145px; }
  .term-capture-tools select { flex: 1 1 auto; }
  .term-capture-text { padding: 9px; font-size: 11px; }
}

/* ── Account quick-add cards ─────────────────────────────── */
.acct-quick-card {
  display: flex; flex-direction: column; gap: 6px; padding: 10px 12px;
  border: 1px solid var(--border, #333); border-radius: 8px;
  background: var(--bg-card, #1e1e2e); width: 240px; flex-shrink: 0;
}
.acct-quick-card .aqc-head {
  display: flex; justify-content: space-between; align-items: center;
  font-size: .85em; color: var(--accent, #4fc3f7); min-height: 1.2em;
}
.acct-quick-card .aqc-close { cursor: pointer; opacity: .4; font-size: 1.2em; }
.acct-quick-card .aqc-close:hover { opacity: 1; color: var(--red, #f44336); }
.acct-quick-card input {
  padding: 5px 8px; font-size: .82em; border: 1px solid var(--border, #444);
  border-radius: 4px; background: var(--bg, #181825); color: var(--text, #eee);
  outline: none; width: 100%; box-sizing: border-box;
}
.acct-quick-card input:focus { border-color: var(--accent, #4fc3f7); }

/* ══════════════════════════════════════════════════════════
   Móvil estrecho — iPhone 14 Pro = 393px CSS (430px cubre
   también 15/16 Pro Max y el resto de la gama)
   ══════════════════════════════════════════════════════════ */
@media (max-width: 430px) {
  /* iOS Safari hace zoom automático al enfocar un campo con
     font-size < 16px. Los 3 selectores extra son los únicos que
     pisan la regla base por especificidad. */
  input, select, textarea,
  .form-panel input, .form-panel select, .form-panel textarea,
  .ptc-input, #mdInput {
    font-size: 16px;
  }

  /* Apple HIG: 44px mínimo táctil (base del proyecto = 34-36px) */
  input, select, .button { min-height: 44px; }

  /* El scroll horizontal de tabla vive en el contenedor, no en el body */
  .section-wrap { overflow-x: auto; }
  table, .compact-table table { min-width: 620px; }
  th, td { padding: 8px 8px; }

  /* 100vh incluye la barra de URL de Safari → el pie queda cortado */
  .report-quickview { width: 100vw; max-width: 100vw; height: 100dvh; }
  .ua-detail-dialog { max-height: calc(100dvh - 20px); }

  /* ponytail: sin safe-area/env() — el viewport no es viewport-fit=cover,
     así que iOS ya aparta la Dynamic Island. Añadir si se hace PWA. */
}

/* VPS Workers */
.vps-worker-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, 300px);
  grid-auto-rows: 320px;
  gap: 12px;
  padding: 12px;
  align-items: stretch;
  justify-content: start;
}

.vps-worker-card {
  --vps-accent: #0ea5e9;
  --vps-accent-soft: rgba(14, 165, 233, 0.1);
  display: flex;
  position: relative;
  flex-direction: column;
  gap: 10px;
  height: 100%;
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: 8px;
  background:
    linear-gradient(180deg, var(--vps-accent-soft) 0, rgba(255, 255, 255, 0) 58px),
    var(--panel);
  padding: 12px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
}

.vps-worker-card::before {
  content: "";
  position: absolute;
  inset: 0 0 auto;
  height: 4px;
  background: var(--vps-accent);
}

.vps-worker-card[data-vps-node="vps1"] { --vps-accent: #0ea5e9; --vps-accent-soft: rgba(14, 165, 233, 0.12); }
.vps-worker-card[data-vps-node="vps2"] { --vps-accent: #14b8a6; --vps-accent-soft: rgba(20, 184, 166, 0.12); }
.vps-worker-card[data-vps-node="vps3"] { --vps-accent: #a855f7; --vps-accent-soft: rgba(168, 85, 247, 0.12); }
.vps-worker-card[data-vps-node="vps4"] { --vps-accent: #eab308; --vps-accent-soft: rgba(234, 179, 8, 0.13); }
.vps-worker-card[data-vps-node="vps5"] { --vps-accent: #f97316; --vps-accent-soft: rgba(249, 115, 22, 0.12); }
.vps-worker-card[data-vps-node="vps6"] { --vps-accent: #22c55e; --vps-accent-soft: rgba(34, 197, 94, 0.12); }
.vps-worker-card[data-vps-node="vps7"] { --vps-accent: #ef4444; --vps-accent-soft: rgba(239, 68, 68, 0.11); }
.vps-worker-card[data-vps-node="vps8"] { --vps-accent: #64748b; --vps-accent-soft: rgba(100, 116, 139, 0.12); }

.vps-worker-card[data-vps-state="online"] {
  border-color: rgba(34, 197, 94, 0.28);
}

.vps-worker-card[data-vps-state="offline"] {
  border-color: rgba(225, 29, 72, 0.32);
}

.vps-worker-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  min-height: 58px;
}

.vps-worker-head > div {
  min-width: 0;
}

.vps-worker-kicker {
  display: block;
  margin-bottom: 2px;
  color: var(--vps-accent);
  font-size: 0.66rem;
  font-weight: 800;
  text-transform: uppercase;
}

.vps-worker-head h3 {
  margin: 0;
  font-size: 0.98rem;
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.vps-worker-head p {
  display: -webkit-box;
  margin: 3px 0 0;
  overflow: hidden;
  color: var(--muted);
  font-size: 0.74rem;
  line-height: 1.35;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}

.vps-worker-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: 0 0 auto;
  min-height: 24px;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 0 9px;
  color: var(--muted);
  background: var(--panel-soft);
  font-size: 0.72rem;
  font-weight: 800;
  white-space: nowrap;
}

.vps-worker-status::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
}

.vps-worker-card[data-vps-state="online"] .vps-worker-status {
  border-color: rgba(34, 197, 94, 0.28);
  color: #16a34a;
  background: rgba(34, 197, 94, 0.08);
}

.vps-worker-card[data-vps-state="offline"] .vps-worker-status {
  border-color: rgba(225, 29, 72, 0.28);
  color: #e11d48;
  background: rgba(225, 29, 72, 0.08);
}

.vps-worker-metrics {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}

.vps-worker-metric {
  min-width: 0;
  border: 1px solid var(--line);
  border-radius: 7px;
  background: var(--panel-soft);
  padding: 8px;
  box-shadow: inset 0 2px 0 var(--vps-accent-soft);
}

.vps-worker-metric span {
  display: block;
  color: var(--vps-accent);
  font-size: 0.64rem;
  font-weight: 800;
  text-transform: uppercase;
}

.vps-worker-metric strong {
  display: block;
  margin-top: 3px;
  font-size: 0.9rem;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.vps-worker-metric small {
  color: var(--muted);
  font-size: 0.66rem;
  font-weight: 600;
}

.vps-worker-chips,
.vps-worker-service-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  min-height: 0;
  align-content: flex-start;
}

.vps-worker-chips {
  min-height: 52px;
  max-height: 56px;
  overflow-y: auto;
  padding-right: 2px;
}

.vps-chip,
.vps-service {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 3px 8px;
  color: var(--muted);
  background: transparent;
  font-size: 0.72rem;
  line-height: 1.2;
}

.vps-chip::before,
.vps-service::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
  flex: 0 0 auto;
}

.vps-chip b {
  color: var(--fg);
  font-weight: 800;
}

.vps-chip.is-active,
.vps-service.is-active {
  border-color: rgba(34, 197, 94, 0.25);
  color: #16a34a;
  background: rgba(34, 197, 94, 0.07);
}

.vps-chip.is-muted,
.vps-service.is-muted {
  color: var(--muted);
  background: var(--panel-soft);
}

.vps-service.is-error {
  border-color: rgba(225, 29, 72, 0.25);
  color: #e11d48;
  background: rgba(225, 29, 72, 0.07);
}

.vps-worker-details {
  display: grid;
  gap: 6px;
  flex: 1 1 auto;
  min-height: 0;
  margin-top: auto;
  overflow-y: auto;
  padding-right: 2px;
}

.vps-worker-details details {
  border-top: 1px solid var(--line);
  padding-top: 7px;
}

.vps-worker-details summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  color: var(--muted);
  font-size: 0.74rem;
  font-weight: 800;
  cursor: pointer;
  list-style: none;
}

.vps-worker-details summary::-webkit-details-marker {
  display: none;
}

.vps-worker-details summary::after {
  content: "▾";
  color: var(--muted);
  font-size: 0.72rem;
  transition: transform 0.15s ease;
}

.vps-worker-details details[open] summary::after {
  transform: rotate(180deg);
}

.vps-worker-details summary b {
  margin-left: auto;
  color: var(--fg);
  font-size: 0.72rem;
}

.vps-worker-log {
  display: grid;
  gap: 5px;
  max-height: 88px;
  margin-top: 8px;
  overflow-y: auto;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  font-size: 0.7rem;
}

.vps-worker-log div {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr);
  gap: 7px;
  align-items: baseline;
}

.vps-worker-log b {
  color: var(--fg);
}

.vps-worker-log span {
  overflow: hidden;
  color: var(--muted);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.vps-worker-traces {
  display: grid;
  gap: 5px;
  max-height: 150px;
  margin-top: 8px;
  overflow-y: auto;
}

.vps-trace {
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr);
  gap: 7px;
  padding: 5px 6px;
  border-left: 2px solid var(--line);
  border-radius: 4px;
  background: var(--panel-soft);
}

.vps-trace-state {
  align-self: start;
  color: var(--muted);
  font-size: .58rem;
  font-weight: 900;
  letter-spacing: .025em;
}

.vps-trace-body { min-width: 0; display: grid; gap: 1px; }
.vps-trace-body b { overflow: hidden; color: var(--fg); font: 750 .7rem/1.2 ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }
.vps-trace-body small { color: var(--muted); font-size: .62rem; }
.vps-trace-body em { overflow: hidden; color: var(--muted); font-size: .64rem; font-style: normal; text-overflow: ellipsis; white-space: nowrap; }
.vps-trace.is-success { border-left-color: #22c55e; }
.vps-trace.is-failed, .vps-trace.is-stuck { border-left-color: #e11d48; }
.vps-trace.is-failed .vps-trace-state, .vps-trace.is-stuck .vps-trace-state { color: #e11d48; }
.vps-trace.is-partial, .vps-trace.is-skipped { border-left-color: #f59e0b; }
.vps-trace.is-partial .vps-trace-state, .vps-trace.is-skipped .vps-trace-state { color: #d97706; }
.vps-trace.is-running { border-left-color: #0ea5e9; }
.vps-trace.is-running .vps-trace-state { color: #0284c7; }

.vps-muted {
  color: var(--muted);
  font-size: 0.72rem;
}

@media (max-width: 760px) {
  .vps-worker-grid {
    grid-template-columns: 1fr;
    grid-auto-rows: auto;
    padding: 10px;
  }

  .vps-worker-card {
    min-height: 300px;
  }
}

/* ── R2: TODO progress bar ─────────────────────────────── */
.todo-progress-wrap { padding:8px 14px;border-bottom:1px solid var(--line) }
.todo-progress-label { display:flex;justify-content:space-between;font-size:.78em;color:var(--muted);margin-bottom:4px }
.todo-progress-track { height:8px;background:var(--line);border-radius:4px;overflow:hidden;display:flex }
.todo-progress-fill.done { background:#16a34a;transition:width .3s }
.todo-progress-fill.prog { background:#3b82f6;transition:width .3s }

/* ── R4: TODO stat cards ──────────────────────────────── */
.todo-stat-cards { display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;padding:12px 14px;border-bottom:1px solid var(--line) }
.todo-stat-card { background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;text-align:center }
.todo-stat-card .todo-stat-val { font-size:1.4em;font-weight:800 }
.todo-stat-card .todo-stat-lbl { font-size:.7em;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-top:2px }
.todo-stat-card.stat-total .todo-stat-val { color:var(--text) }
.todo-stat-card.stat-pending .todo-stat-val { color:#f59e0b }
.todo-stat-card.stat-progress .todo-stat-val { color:#3b82f6 }
.todo-stat-card.stat-done .todo-stat-val { color:#16a34a }
.todo-stat-card.stat-skipped .todo-stat-val { color:#64748b }

/* ── R4: TODO card list layout ────────────────────────── */
.todo-create-row { padding:10px 14px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;border-bottom:1px solid var(--line) }
.todo-create-row #todoNewProgram { min-width:220px;max-width:320px }
.todo-card-list { padding:14px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start }
.todo-scope-section { min-width:0;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--panel) 94%,var(--bg));overflow:hidden }
.todo-scope-section > header { display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--panel) 82%,var(--accent) 3%) }
.todo-scope-section > header h3 { margin:2px 0 3px;font-size:1rem }
.todo-scope-section > header p { margin:0;color:var(--muted);font-size:.78em;line-height:1.4 }
.todo-scope-section > header > strong { min-width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:var(--panel);border:1px solid var(--line);font-variant-numeric:tabular-nums }
.todo-scope-kicker { color:var(--accent);font-size:.65em;font-weight:800;letter-spacing:.09em }
.todo-scope-items { padding:10px;display:flex;flex-direction:column;gap:8px }
.todo-program-group + .todo-program-group { border-top:1px solid var(--line) }
.todo-program-group > h4 { display:flex;justify-content:space-between;gap:10px;margin:0;padding:10px 12px 0;color:var(--text);font-size:.82em }
.todo-program-group > h4 span { color:var(--muted);font-variant-numeric:tabular-nums }
.todo-scope-section > .empty-inline { margin:16px }
.todo-item-card { display:grid;grid-template-columns:28px 1fr auto;gap:8px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:8px;border-left:4px solid var(--line);background:var(--panel);transition:border-color .15s,opacity .2s }
.todo-item-card:hover { border-color:var(--line-strong) }
.todo-item-card.prio-border-urgente { border-left-color:#dc2626 }
.todo-item-card.prio-border-alta { border-left-color:#ea580c }
.todo-item-card.prio-border-media { border-left-color:#eab308 }
.todo-item-card.prio-border-baja { border-left-color:#94a3b8 }
.todo-item-card.is-done { opacity:.5 }
.todo-item-card .todo-item-body { min-width:0 }
.todo-item-card .todo-item-title { font-weight:500;line-height:1.3 }
.todo-item-card .todo-item-title.is-struck { text-decoration:line-through }
.todo-item-card .todo-item-meta { display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;font-size:.78em;color:var(--muted) }
.todo-item-card .todo-item-actions { display:flex;gap:4px;align-items:center }
.todo-item-card .todo-item-actions select { font-size:.82em;max-width:110px }
.todo-item-card .todo-item-actions button { background:none;border:none;cursor:pointer;padding:2px;font-size:.9em;opacity:.6 }
.todo-item-card .todo-item-actions button:hover { opacity:1 }
@media (max-width: 980px) {
  .todo-card-list { grid-template-columns:minmax(0,1fr) }
}
@media (max-width: 640px) {
  .todo-create-row > * { width:100%!important;max-width:none!important }
  .todo-item-card { grid-template-columns:24px minmax(0,1fr) }
  .todo-item-card .todo-item-actions { grid-column:2;justify-content:flex-start;flex-wrap:wrap }
}

/* ── R4: VPS ranking bar ──────────────────────────────── */
.vps-ranking-bar { display:flex;gap:8px;padding:12px;overflow-x:auto;border-bottom:1px solid var(--line) }
.vps-rank-chip { display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;border:1px solid var(--line);background:var(--panel);font-size:.82em;white-space:nowrap;min-width:0 }
.vps-rank-chip .vps-rank-pos { font-weight:800;font-size:1.1em;width:18px;text-align:center }
.vps-rank-chip .vps-rank-name { font-weight:600 }
.vps-rank-chip .vps-rank-score { font-weight:700 }
.vps-rank-chip.rank-healthy { border-color:#86efac } .vps-rank-chip.rank-healthy .vps-rank-score { color:#16a34a }
.vps-rank-chip.rank-warn { border-color:#fde68a } .vps-rank-chip.rank-warn .vps-rank-score { color:#d97706 }
.vps-rank-chip.rank-danger { border-color:#fca5a5 } .vps-rank-chip.rank-danger .vps-rank-score { color:#dc2626 }
.vps-rank-chip.rank-offline { opacity:.45 }

/* ── R2: Blacklist row accents ────────────────────────── */
.bl-row-active { border-left:3px solid #ef4444 }
.bl-row-inactive { opacity:.5;border-left:3px solid transparent }
.bl-row-active:hover { background:rgba(239,68,68,.04) }
.bl-toggle-btn { font-size:.78em!important;white-space:nowrap }

/* ── R2: Account health rows ─────────────────────────── */
tr.acct-health-ok    { border-left:3px solid #22c55e }
tr.acct-health-warn  { border-left:3px solid #f59e0b }
tr.acct-health-bad   { border-left:3px solid #ef4444 }
tr.acct-health-muted { border-left:3px solid var(--line);opacity:.6 }

/* ── R2: Alert summary cards (shared by system-alerts + accounts) ── */
.alert-summary-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px;margin-bottom:6px;width:100% }
.alert-summary-card { background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;text-align:center;transition:border-color .15s }
.alert-summary-card:hover { border-color:var(--line-strong) }
.alert-summary-val { font-size:1.35em;font-weight:800;color:var(--text) }
.alert-summary-lbl { font-size:.72em;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted) }
.alert-card-danger { border-color:#fca5a5;background:#fef2f2 }
.alert-card-danger .alert-summary-val { color:#dc2626 }
.alert-card-warn   { border-color:#fde68a;background:#fffbeb }
.alert-card-warn   .alert-summary-val { color:#d97706 }
.alert-card-ok     { border-color:#86efac;background:#f0fdf4 }
.alert-card-ok     .alert-summary-val { color:#16a34a }
.alert-card-muted  { opacity:.6 }

/* ── R2: Selfstats group cards ───────────────────────── */
.selfstats-group-card { flex:1 1 280px;min-width:258px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.6rem .8rem;transition:border-color .15s,box-shadow .15s }
.selfstats-group-card:hover { border-color:var(--line-strong);box-shadow:0 2px 8px rgba(0,0,0,.05) }

/* ── R2: VPS metric mini bar charts ─────────────────── */
.vps-metric-bar { height:4px;background:var(--line);border-radius:2px;margin:4px 0 2px;overflow:hidden }
.vps-metric-bar > div { height:100%;border-radius:2px;transition:width .4s ease }

@media (prefers-color-scheme: dark) {
  .alert-card-danger { background:rgba(220,38,38,.08);border-color:rgba(220,38,38,.3) }
  .alert-card-warn   { background:rgba(217,119,6,.08);border-color:rgba(217,119,6,.3) }
  .alert-card-ok     { background:rgba(22,163,74,.08);border-color:rgba(22,163,74,.3) }
}

/* ── Program Ranking table ──────────────────────────── */
.intel-score-chip { display:inline-block;padding:2px 8px;border-radius:4px;color:#fff;font-weight:700;font-size:.82em }
.prk-score-bar { height:6px;border-radius:3px;background:var(--line);overflow:hidden;margin-top:4px }
.prk-score-bar > div { height:100%;border-radius:3px;transition:width .3s }
.intel-factor-cell { max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
.intel-program-link { color:var(--accent);text-decoration:none;font-weight:600 }
.intel-program-link:hover { text-decoration:underline }
.intel-program-handle { font-size:.72em;color:var(--muted);font-family:ui-monospace,monospace;margin-top:1px }
.intel-program-cell { max-width:220px }
.intel-type-chip { display:inline-block;padding:1px 7px;border-radius:4px;font-size:.72em;font-weight:600;background:var(--line);color:var(--text) }
.intel-signal-chip { display:inline-block;padding:1px 7px;border-radius:4px;font-size:.75em;font-weight:700 }
.intel-signal-chip[data-tone="hot"] { background:rgba(239,68,68,.15);color:#ef4444 }
.intel-signal-chip[data-tone="finding"] { background:rgba(59,130,246,.15);color:#3b82f6 }
.intel-signal-chip[data-tone="untouched"] { background:rgba(168,85,247,.15);color:#a855f7 }
.status-positive { color:var(--success) }
.status-negative { color:var(--danger) }
:root[data-theme="dark"] .intel-signal-chip[data-tone="hot"] { background:rgba(239,68,68,.2);color:#fca5a5 }
:root[data-theme="dark"] .intel-signal-chip[data-tone="finding"] { background:rgba(59,130,246,.2);color:#93c5fd }
:root[data-theme="dark"] .intel-signal-chip[data-tone="untouched"] { background:rgba(168,85,247,.2);color:#c4b5fd }

.intel-sync-stat { font-size:.78em }

/* ── section-desc ──────────────────────────────────── */
.section-desc { font-size:.85rem;color:var(--muted);margin:0 0 1rem;line-height:1.5 }

/* ── Delete host button ────────────────────────────── */
.sq-host-del { background:none;border:none;color:var(--muted);cursor:pointer;padding:2px 4px;font-size:.75em;opacity:.6 }
.sq-host-del:hover { opacity:1;color:var(--danger) }

/* ── Buscadores (sq-*) ─────────────────────────────── */
.sq-input { width:100%;padding:15px 18px 15px 44px;border:1px solid var(--line);border-radius:12px;background:var(--panel) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2'><circle cx='11' cy='11' r='7'/><path d='M20 20l-3.5-3.5'/></svg>") no-repeat 14px center/18px;color:var(--text);font-size:1.05rem;box-sizing:border-box;transition:border-color .15s,box-shadow .15s }
.sq-input::placeholder { color:var(--muted);opacity:.75 }
.sq-input:focus { outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(14,116,144,.18) }
.sq-chips { display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 4px }
.sq-chip { padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:.78em;cursor:pointer }
.sq-chip:hover { border-color:var(--accent);color:var(--text) }
.sq-chip.active { background:rgba(14,116,144,.12);border-color:var(--accent);color:var(--accent) }
.sq-chip b { color:var(--text);font-variant-numeric:tabular-nums }
.sq-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px;margin-top:14px }
.sq-card { border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column }
.sq-card h3 { margin:0;padding:10px 14px;font-size:.8em;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-bottom:1px solid var(--line);background:var(--panel-soft) }
.sq-count { float:right;font-variant-numeric:tabular-nums;color:var(--text) }
.sq-body { max-height:460px;overflow-y:auto }
.sq-row { padding:9px 14px;border-bottom:1px solid var(--line);cursor:pointer;display:flex;gap:10px;align-items:baseline;justify-content:space-between;border-left:2px solid transparent }
.sq-row:hover { background:rgba(14,116,144,.06);border-left-color:var(--accent) }
.sq-row-static { cursor:default;border-bottom:none }
.sq-row-static:hover { background:transparent;border-left-color:transparent }
.sq-item { border-bottom:1px solid var(--line) }
.sq-item:hover { background:rgba(14,116,144,.04) }
.sq-go { opacity:0;margin-left:6px;color:var(--accent) }
.sq-row:hover .sq-go { opacity:1 }
.sq-hl { background:rgba(14,116,144,.2);color:inherit;border-radius:3px;padding:0 1px }
.sq-dim { color:var(--muted);font-size:.9em }
.sq-skel { height:34px;margin:6px 14px;border-radius:6px;background:linear-gradient(90deg,var(--panel-soft),var(--line),var(--panel-soft));background-size:200% 100%;animation:sqShimmer 1.1s linear infinite }
@keyframes sqShimmer { from { background-position:200% 0 } to { background-position:-200% 0 } }
.sq-name { font-family:ui-monospace,monospace;font-size:.86em;word-break:break-all }
a.sq-prog-link { color:inherit;text-decoration:none;cursor:pointer }
a.sq-prog-link:hover { color:var(--accent);text-decoration:underline }
.sq-meta { font-size:.72em;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums }
.sq-plat { padding:1px 7px;border-radius:4px;font-size:.68em;text-transform:uppercase;letter-spacing:.04em;color:#fff }
.sq-roots { display:flex;flex-wrap:wrap;gap:4px;padding:0 14px 9px;border-bottom:1px solid var(--line) }
.sq-root { padding:2px 7px;border-radius:4px;border:1px solid var(--line);background:transparent;color:var(--muted);font-size:.72em;font-family:ui-monospace,monospace;cursor:pointer }
.sq-root:hover { border-color:var(--accent);color:var(--accent) }
.sq-empty { padding:22px 14px;text-align:center;color:var(--muted);font-size:.85em;line-height:1.7 }
.sq-cockpit-link { color:var(--muted);text-decoration:none;font-size:.9em;opacity:.6;margin-right:4px }
.sq-cockpit-link:hover { color:var(--accent);opacity:1 }
.sq-page-btn { padding:4px 12px;border:1px solid var(--line);border-radius:6px;background:var(--bg-card,#fff);color:var(--text);font-size:.82em;cursor:pointer }
.sq-page-btn:hover:not(:disabled) { border-color:var(--accent);color:var(--accent) }
.sq-page-btn:disabled { opacity:.35;cursor:default }
.ck-search-fold { margin:0 0 8px;border:1px solid var(--line);border-radius:10px;overflow:hidden }
.ck-search-fold summary { padding:10px 16px;cursor:pointer;font-size:.88rem;font-weight:600;color:var(--muted);list-style:none }
.ck-search-fold summary::-webkit-details-marker { display:none }
.ck-search-fold[open] summary { border-bottom:1px solid var(--line) }
.ck-search-body { padding:12px 16px 16px }

/* ── Calendar (bcal-*) ─────────────────────────────── */
.bcal-shell { max-width:100%; --bcal-positive:#52785f; --bcal-negative:#a5574d; --bcal-money:#8b673e }
.bcal-topbar { display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:1rem;padding:16px 18px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(135deg,color-mix(in srgb,var(--panel) 94%,#9a7652),var(--panel)) }
.bcal-topbar h2 { margin:0;font-size:clamp(1.05rem,2vw,1.32rem);font-weight:650;letter-spacing:-.02em }
.bcal-title-context { display:block;margin-top:3px;color:var(--muted);font-size:.68rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase }
.bcal-tools { display:flex;gap:8px;align-items:center }
.bcal-tools select { min-height:38px;padding:6px 10px;border-radius:9px;border:1px solid var(--line);background:var(--panel);color:var(--text);font-size:.86rem }
.bcal-legend { display:flex;gap:8px 13px;flex-wrap:wrap;margin:0 0 1rem;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--panel) 86%,transparent);font-size:.76rem;color:var(--muted) }
.bcal-legend span { display:inline-flex;align-items:center;gap:5px }
.bcal-legend i { width:12px;height:12px;border-radius:50%;display:inline-block }
.bcal-legend-divider { margin-left:7px;padding-left:12px;border-left:1px solid var(--line);font-weight:600 }
.bcal-level-zero { background:color-mix(in srgb,var(--muted) 18%,var(--panel));border:1px solid var(--line) }
.bcal-level-low { background:color-mix(in srgb,#998064 22%,var(--panel));border:1px solid color-mix(in srgb,#998064 34%,var(--line)) }
.bcal-level-medium { background:color-mix(in srgb,#8a704f 38%,var(--panel));border:1px solid color-mix(in srgb,#8a704f 48%,var(--line)) }
.bcal-level-high { background:color-mix(in srgb,#766044 58%,var(--panel));border:1px solid color-mix(in srgb,#766044 62%,var(--line)) }
.bcal-level-top { background:linear-gradient(135deg,#70563d,#9a754a);border:1px solid #816344 }
.bcal-l-new { background:#8E44AD }
.bcal-l-pending { background:#0038BB }
.bcal-l-nmi { background:#559CF5 }
.bcal-l-triaged { background:#E67E22 }
.bcal-l-retesting { background:#F3B234 }
.bcal-l-resolved { background:#609828 }
.bcal-l-informative { background:#CCCCCC }
.bcal-l-duplicate { background:#A78260 }
.bcal-l-na { background:#CE3F4B }
.bcal-l-spam { background:#555555 }
.bcal-l-today { background:#60a5fa }
.bcal-grid { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;width:100% }
@media (max-width:1400px) { .bcal-grid { grid-template-columns:repeat(3,minmax(0,1fr)) } }
@media (max-width:1024px) { .bcal-grid { grid-template-columns:repeat(2,minmax(0,1fr)) } }
@media (max-width:768px)  { .bcal-grid { grid-template-columns:1fr } }
.bcal-mes { border:1px solid var(--line);border-radius:12px;background:var(--panel);padding:11px;box-shadow:0 4px 13px rgba(40,30,22,.035) }
.bcal-mes-title { font-size:.9rem;font-weight:650;text-align:left;margin:0 2px 9px;color:var(--text) }
.bcal-weekrow,.bcal-dayrow { display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px }
.bcal-weekrow div { text-align:center;font-size:.66rem;color:var(--muted);font-weight:550 }
.bcal-day { min-height:38px;border-radius:7px;border:1px solid var(--line);background:var(--panel-soft);color:var(--text);font-size:.78rem;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:all .15s;padding:2px;position:relative }
.bcal-day:hover { border-color:rgba(14,116,144,.45);background:rgba(14,116,144,.08);transform:translateY(-1px) }
.bcal-day.empty { visibility:hidden;cursor:default }
.bcal-day.today { border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent) }
.bcal-day.bcal-selected { outline:2px solid var(--accent);outline-offset:-2px }
.bcal-day.has-reports { font-weight:650 }
.bcal-day.b0 { background:rgba(100,116,139,.20);border-color:rgba(100,116,139,.30) }
.bcal-day.b1 { background:color-mix(in srgb,#998064 17%,var(--panel));border-color:color-mix(in srgb,#998064 30%,var(--line)) }
.bcal-day.b2 { background:color-mix(in srgb,#8a704f 30%,var(--panel));border-color:color-mix(in srgb,#8a704f 43%,var(--line)) }
.bcal-day.b3 { background:color-mix(in srgb,#766044 52%,var(--panel));border-color:color-mix(in srgb,#766044 58%,var(--line));color:var(--text) }
.bcal-day.b4 { background:linear-gradient(135deg,#70563d,#9a754a);border-color:#816344;color:#fff }
.bcal-day-num { font-weight:600;line-height:1 }
.bcal-day-bounty { font-size:.61rem;color:var(--accent);font-weight:650;margin-top:2px }
.bcal-dots { display:flex;gap:2px;justify-content:center;margin-top:1px }
.bcal-dot { width:5px;height:5px;border-radius:50% }
.bcal-dot-new { background:#8E44AD }
.bcal-dot-pending_program_review { background:#0038BB }
.bcal-dot-needs_more_info { background:#559CF5 }
.bcal-dot-triaged { background:#E67E22 }
.bcal-dot-retesting { background:#F3B234 }
.bcal-dot-resolved { background:#609828 }
.bcal-dot-informative { background:#CCCCCC }
.bcal-dot-duplicate { background:#A78260 }
.bcal-dot-na { background:#CE3F4B }
.bcal-dot-spam { background:#555555 }
.bcal-dot-editing { background:#8E44AD }
.bcal-summary { margin-top:1rem;padding:10px 14px;border-radius:10px;background:color-mix(in srgb,var(--panel) 82%,var(--accent) 4%);font-size:.84rem;color:var(--muted);text-align:left }
.bcal-monthly-chart,.bcal-table-panel,.bcal-programs-bar { margin-top:1rem;border:1px solid var(--line);border-radius:14px;background:var(--panel);padding:16px 18px;box-shadow:0 7px 22px rgba(40,30,22,.04) }
.bcal-panel-head { display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:13px }
.bcal-panel-head h3 { margin:2px 0 0;font-size:1rem;font-weight:650;letter-spacing:-.01em }
.bcal-kicker { color:var(--accent);font-size:.64rem;font-weight:650;letter-spacing:.09em;text-transform:uppercase }
.bcal-chart-legend { display:flex;gap:13px;color:var(--muted);font-size:.74rem }
.bcal-chart-legend span::before { content:'';display:inline-block;width:9px;height:9px;margin-right:5px;border-radius:3px;background:var(--accent) }
.bcal-chart-legend [data-series="previous"]::before { background:color-mix(in srgb,var(--muted) 45%,transparent) }
.bcal-chart-svg { display:block;overflow:visible }
.bcal-chart-value { fill:var(--accent);font-weight:600 }
.bcal-stats-grid { display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:9px;margin-top:1rem }
.bcal-stat { position:relative;min-height:82px;padding:12px 13px;border:1px solid var(--line);border-radius:11px;background:linear-gradient(160deg,color-mix(in srgb,var(--panel) 96%,#97734f),var(--panel));overflow:hidden }
.bcal-stats-heading { grid-column:1/-1;padding:10px 0 2px;color:var(--muted);font-size:.64rem;font-weight:750;letter-spacing:.09em;text-transform:uppercase;border-bottom:1px solid var(--line) }
.bcal-stats-heading:first-child { padding-top:0 }
.bcal-stat::before { content:'';position:absolute;inset:0 auto 0 0;width:2px;background:color-mix(in srgb,var(--muted) 34%,transparent) }
.bcal-stat--accent::before { background:var(--_accent) }
.bcal-stat--accent .bcal-stat-value { color:var(--_accent) }
.bcal-stat[data-tone="primary"]::before { background:var(--accent) }
.bcal-stat[data-tone="positive"]::before { background:var(--bcal-positive) }
.bcal-stat[data-tone="negative"]::before { background:var(--bcal-negative) }
.bcal-stat[data-tone="money"]::before { background:var(--bcal-money) }
.bcal-stat-label { color:var(--muted);font-weight:550;font-size:.72rem;line-height:1.25;margin-bottom:7px }
.bcal-stat-value { color:var(--text);font-weight:650;font-size:1.04rem;line-height:1.2;font-variant-numeric:tabular-nums }
.bcal-stat-sub { margin-top:3px;color:var(--muted);font-size:.7rem }
.bcal-detail { margin-top:1.2rem;border:1px solid var(--line);border-radius:12px;background:var(--panel);padding:14px;display:none }
.bcal-detail h3 { margin:0 0 10px;font-size:1rem;font-weight:650 }
.bcal-report-card { border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--panel-soft) }
.bcal-report-card:last-child { margin-bottom:0 }
.bcal-rpt-title { font-weight:700;font-size:.88rem;color:var(--text);word-break:break-word }
.bcal-rpt-meta { font-size:.78rem;color:var(--muted);margin-top:4px;display:flex;gap:8px;flex-wrap:wrap }
.bcal-badge { padding:2px 8px;border-radius:999px;font-size:.72rem;font-weight:700;color:#fff;display:inline-block }
.bcal-badge-resolved { background:#16a34a }
.bcal-badge-triaged { background:#2563eb }
.bcal-badge-new { background:#7c3aed }
.bcal-badge-informative { background:#475569 }
.bcal-badge-duplicate { background:#d97706 }
.bcal-badge-not-applicable { background:#dc2626 }
.bcal-badge-editing { background:#6d28d9 }
.bcal-badge-spam { background:#b91c1c }
.bcal-badge-needs-more-info { background:#0891b2 }
.bcal-badge-critical { background:#dc2626 }
.bcal-badge-high { background:#ea580c }
.bcal-badge-medium { background:#d97706 }
.bcal-badge-low { background:#2563eb }
.bcal-badge-none { background:#64748b }
.bcal-program-total { color:var(--muted);font-size:.72rem }
.bcal-program-list { display:grid;gap:2px;max-height:min(62vh,620px);padding-right:5px;overflow:auto;scrollbar-gutter:stable }
.bcal-prog-row { display:grid;grid-template-columns:minmax(150px,1.2fr) minmax(130px,2fr) 92px 62px;align-items:center;gap:12px;min-height:38px;padding:5px 8px;border-radius:8px;font-size:.8rem }
.bcal-prog-row:nth-child(odd) { background:color-mix(in srgb,var(--panel-soft) 62%,transparent) }
.bcal-prog-row:hover { background:color-mix(in srgb,var(--accent) 7%,var(--panel)) }
.bcal-prog-track { height:6px;border-radius:999px;background:color-mix(in srgb,var(--line) 72%,transparent);overflow:hidden }
.bcal-prog-bar { height:100%;border-radius:inherit;background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 65%,#806141),var(--accent)) }
.bcal-prog-label { min-width:0;overflow:hidden;color:var(--text);font-weight:550;text-overflow:ellipsis;white-space:nowrap }
.bcal-prog-bounty,.bcal-prog-count { color:var(--muted);font-weight:550;text-align:right;font-variant-numeric:tabular-nums }
.bcal-prog-bounty { color:var(--text) }
.bcal-table-scroll { overflow-x:auto;border:1px solid var(--line);border-radius:10px }
.bcal-monthly-tbl { width:100%;min-width:720px;border-collapse:separate;border-spacing:0;font-size:.79rem }
.bcal-monthly-tbl th { padding:9px 11px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--panel-soft) 72%,var(--panel));color:var(--muted);font-size:.66rem;font-weight:600;letter-spacing:.055em;text-align:right;text-transform:uppercase;white-space:nowrap }
.bcal-monthly-tbl th:first-child { text-align:left }
.bcal-monthly-tbl td { padding:9px 11px;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent);font-variant-numeric:tabular-nums;text-align:right }
.bcal-monthly-tbl td:first-child { text-align:left }
.bcal-monthly-tbl tbody tr:last-child td { border-bottom:0 }
.bcal-monthly-tbl tbody tr:not(.bcal-total-row):hover { background:color-mix(in srgb,var(--accent) 6%,var(--panel)) }
.bcal-month { color:var(--text);font-weight:600 }
.bcal-money { color:var(--bcal-money);font-weight:650 }
.bcal-previous { color:var(--muted) }
.bcal-delta[data-tone="positive"] { color:var(--bcal-positive) }
.bcal-delta[data-tone="negative"] { color:var(--bcal-negative) }
.bcal-cumulative { font-weight:600 }
.bcal-total-row td { border-top:1px solid var(--line);background:color-mix(in srgb,var(--panel-soft) 72%,var(--panel));font-weight:650 }
@media (max-width:1280px) { .bcal-stats-grid { grid-template-columns:repeat(4,minmax(0,1fr)) } }
@media (max-width:760px) {
  .bcal-topbar,.bcal-monthly-chart,.bcal-table-panel,.bcal-programs-bar { padding:13px }
  .bcal-stats-grid { grid-template-columns:repeat(2,minmax(0,1fr)) }
  .bcal-stat { min-height:76px;padding:10px }
  .bcal-prog-row { grid-template-columns:minmax(0,1fr) 74px 54px;gap:8px }
  .bcal-prog-track { grid-column:1 / -1;grid-row:2 }
  .bcal-panel-head { align-items:flex-start }
  .bcal-program-list { max-height:480px }
}

/* El shell responsive (topbar, app-shell y sidebar) vive exclusivamente en
   assets/navigation-shell.css. No añadir aquí media queries para ese marco. */
.scanner-policy-note {
  margin: .25rem 0 .8rem;
  padding: .7rem .9rem;
  border: 1px solid color-mix(in srgb, var(--warning, #f59e0b) 42%, var(--border, #334155));
  border-radius: .65rem;
  background: color-mix(in srgb, var(--warning, #f59e0b) 9%, var(--surface, #111827));
  color: var(--text-muted, #94a3b8);
  font-size: .82rem;
}

.scanner-policy-note summary {
  cursor: pointer;
  color: var(--text, #e5e7eb);
  font-weight: 650;
}

.scanner-policy-note p {
  margin: .55rem 0 0;
  line-height: 1.45;
}
