/*
 * Hadron Carbon - architecture-estate plugins (views_plugin_estate.js on the shared estate frame, network.css).
 * Only what the frame does not already draw: the Findings lens colors each card by its worst finding (the shared
 * severity scale, tokens.css), a card's finding count, and the not-available page's frame.
 */

/* The Findings lens: a card's accent is its most severe finding; cards with none recede. */
.nx-root[data-lens="severity"] .nx-card { --k: var(--hx-gray-60); }
.nx-root[data-lens="severity"] .nx-card[data-sev="critical"] { --k: var(--hx-sev-critical); }
.nx-root[data-lens="severity"] .nx-card[data-sev="high"] { --k: var(--hx-sev-high); }
.nx-root[data-lens="severity"] .nx-card[data-sev="medium"] { --k: var(--hx-sev-medium); }
.nx-root[data-lens="severity"] .nx-card[data-sev="low"] { --k: var(--hx-sev-low); }
.nx-root[data-lens="severity"] .nx-card[data-sev="info"] { --k: var(--hx-sev-info); }

.pe-card-findings {
  color: var(--cds-text-secondary);
  white-space: nowrap;
}
.pe-card-findings::before { content: "·"; margin: 0 var(--cds-spacing-02); }

/* The not-available, loading and unreachable states keep the page frame (DESIGN_SYSTEM.md section 6). */
.pe-page { display: flex; flex-direction: column; gap: var(--hadron-section-gap, 24px); }
.pe-page .hd-state { max-width: 640px; }
.pe-page .carbon-page-header__title:focus { outline: none; }

/* A caption read by screen readers only (the table's purpose is the panel's visible heading). */
.pe-sr {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/*
 * Plugin Insights (plugin_insights.js): the scorecard band and the question-grouped panels. Color comes from the
 * shared Carbon and severity tokens only, so both themes follow; every state also has a shape or a word.
 */
.pe-ins { max-width: 1584px; }
.pe-ins-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; }
.pe-ins-btn {
  display: inline-block; padding: 8px 16px; background: var(--cds-layer-01); color: var(--cds-link-primary);
  border: 1px solid var(--cds-border-strong-01); text-decoration: none; font-size: var(--cds-body-compact-01, 14px);
}
.pe-ins-btn:hover { background: var(--cds-layer-hover-01); }
.pe-ins a:focus-visible, .pe-ins select:focus-visible, .pe-ins [tabindex]:focus-visible, .pe-ins summary:focus-visible,
a.pe-kpi-insights:focus-visible { outline: 2px solid var(--cds-focus); outline-offset: 1px; }
/* Headings are focused by script (never a control): no ring, as the other estates do. Controls keep theirs. */
.pe-page :is(h1, h2, h3)[tabindex="-1"]:is(:focus, :focus-visible) { outline: none !important; box-shadow: none !important; }
.pe-ins-repo { display: inline-flex; align-items: center; gap: 8px; color: var(--cds-text-secondary); }
.pe-ins-repo select { background: var(--cds-layer-01); color: var(--cds-text-primary); border: 1px solid var(--cds-border-strong-01); padding: 6px 8px; max-width: 320px; }
.pe-ins-jump { display: flex; flex-wrap: wrap; gap: 4px 16px; list-style: none; margin: 0; padding: 0; }
.pe-ins-jump a, .pe-ins-link, .pe-ins-doc, .pe-ins-anchor { color: var(--cds-link-primary); }
a.pe-kpi-insights { text-decoration: none; color: inherit; }
a.pe-kpi-insights:hover { background: var(--cds-layer-hover-01); }

/* The scorecard band */
.pe-sc { display: flex; flex-wrap: wrap; gap: 16px; align-items: stretch; }
.pe-sc-overall {
  display: flex; flex-direction: column; justify-content: center; gap: 4px; min-width: 140px; padding: 16px;
  background: var(--cds-layer-01); border: 1px solid var(--cds-border-subtle-01);
}
.pe-sc-overall b, .pe-sc-score b { font-size: 2rem; font-weight: 300; line-height: 1.1; color: var(--cds-text-primary); }
.pe-sc-overall small, .pe-sc-score small { color: var(--cds-text-secondary); margin-left: 4px; }
.pe-sc-k { color: var(--cds-text-secondary); font-size: var(--cds-label-01, 12px); }
.pe-sc-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap: 16px; list-style: none; margin: 0; padding: 0; flex: 1 1 480px; }
.pe-sc-tile { padding: 16px; background: var(--cds-layer-01); border: 1px solid var(--cds-border-subtle-01); min-width: 0; }
.pe-sc-top { display: flex; align-items: center; gap: 8px; }
.pe-sc-label { font-weight: 600; color: var(--cds-text-primary); overflow-wrap: anywhere; }
.pe-sc-find, .pe-sc-sum, .pe-sc-doc { margin: 4px 0 0; color: var(--cds-text-secondary); font-size: var(--cds-label-01, 12px); }

/* Groups and panels */
.pe-ins-group > header { margin-bottom: 12px; }
.pe-ins-group h2 { margin: 0; font-size: 1.25rem; font-weight: 400; color: var(--cds-text-primary); }
.pe-ins-ask { margin: 4px 0 0; color: var(--cds-text-secondary); }
.pe-ins-rollup-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr)); gap: 16px; padding: 0 16px 16px; }
.pe-ins-panels { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 520px), 1fr)); gap: 16px; }
.pe-ins-panel { background: var(--cds-layer-01); border: 1px solid var(--cds-border-subtle-01); padding: 16px; min-width: 0; scroll-margin-top: 16px; }
.pe-ins-panel.is-target { box-shadow: 0 0 0 2px var(--cds-focus); }
.pe-ins-panel[data-kind="matrix"], .pe-ins-panel[data-kind="graph"], .pe-ins-panel[data-kind="treemap"], .pe-ins-panel[data-kind="tree"] { grid-column: 1 / -1; }
.pe-ins-panel-head { display: flex; align-items: baseline; gap: 8px; }
.pe-ins-panel-head h3 { margin: 0; font-size: 1rem; font-weight: 600; color: var(--cds-text-primary); }
.pe-ins-anchor { text-decoration: none; opacity: 0.6; }
.pe-ins-anchor:hover, .pe-ins-anchor:focus-visible { opacity: 1; }
.pe-ins-why { margin: 6px 0 12px; color: var(--cds-text-secondary); font-size: var(--cds-body-compact-01, 14px); }
.pe-ins-why-k { color: var(--cds-text-helper); font-size: var(--cds-label-01, 12px); margin-right: 6px; }
.pe-ins-empty, .pe-ins-truncated, .pe-ins-tally, .pe-ins-muted { color: var(--cds-text-secondary); }
.pe-ins-truncated { margin: 8px 0 0; font-size: var(--cds-label-01, 12px); }
.pe-ins-notes { list-style: none; margin: 0 0 16px; padding: 0; display: grid; gap: 8px; }
.pe-ins-note { background: var(--cds-layer-01); border-left: 3px solid var(--cds-support-warning, var(--cds-border-strong-01)); padding: 8px 12px; color: var(--cds-text-primary); font-size: var(--cds-body-compact-01, 14px); overflow-wrap: anywhere; }
.pe-ins-scroll { position: relative; overflow-x: auto; max-width: 100%; } /* positioned: absolute descendants (the sr-only caption) stay inside the scroller instead of widening the page */
.pe-ins-legend { display: flex; flex-wrap: wrap; gap: 4px 16px; list-style: none; margin: 8px 0 0; padding: 0; color: var(--cds-text-secondary); font-size: var(--cds-label-01, 12px); }
.pe-ins-legend li { display: inline-flex; align-items: center; gap: 4px; }
.pe-ins-evidence { color: var(--cds-text-secondary); font-size: var(--cds-label-01, 12px); }

/* Tones: text and shape carry the meaning too */
.pe-tone-ok { --t: var(--cds-support-success); }
.pe-tone-info { --t: var(--cds-support-info); }
.pe-tone-warn { --t: var(--cds-support-warning); }
.pe-tone-danger { --t: var(--cds-support-error); }
.pe-tone-neutral { --t: var(--cds-border-strong-01); }
.pe-glyph { flex: none; vertical-align: middle; }
.pe-g-fill { fill: var(--t); stroke: none; }
.pe-g-ring { fill: none; stroke: var(--t); stroke-width: 1.5; }
.pe-g-mark { fill: none; stroke: var(--cds-background); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.pe-glyph.pe-tone-neutral .pe-g-mark { stroke: var(--cds-text-secondary); }
.pe-delta .pe-g-mark { stroke: var(--t); }
.pe-badge { display: inline-block; padding: 0 8px; font-size: var(--cds-label-01, 12px); line-height: 18px; color: var(--cds-text-primary); border: 1px solid var(--t, var(--cds-border-strong-01)); background: var(--cds-layer-02); }
.pe-badges { display: inline-flex; gap: 4px; flex-wrap: wrap; }

/* matrix */
.pe-mx { border-collapse: collapse; font-size: var(--cds-label-01, 12px); }
.pe-mx th, .pe-mx td { border: 1px solid var(--cds-border-subtle-02); padding: 4px 8px; text-align: center; }
.pe-mx .pe-mx-row { text-align: left; font-weight: 400; white-space: nowrap; max-width: 280px; overflow: hidden; text-overflow: ellipsis; }
.pe-mx-col { font-weight: 400; color: var(--cds-text-secondary); vertical-align: bottom; }
.pe-mx .pe-mx-corner { border: 0; }
.pe-mx-cell { min-width: 40px; }

/* tree */
.pe-tree, .pe-tree ul { list-style: none; margin: 0; padding-left: 20px; }
.pe-tree { padding-left: 0; }
.pe-tree summary { cursor: pointer; padding: 2px 0; }
.pe-tree-leaf { padding: 2px 0 2px 16px; }
.pe-tree-row { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* svg kinds */
.pe-graph, .pe-treemap, .pe-bars { display: block; max-width: 100%; height: auto; }
.pe-treemap { width: 100%; max-width: 960px; max-height: 340px; }
.pe-box { fill: var(--cds-layer-02); stroke: var(--t, var(--cds-border-strong-01)); stroke-width: 1.5; }
.pe-g-label, .pe-g-sub, .pe-g-layer, .pe-g-edge { font: 12px var(--cds-font-family, system-ui, sans-serif); fill: var(--cds-text-primary); }
.pe-g-sub, .pe-g-edge { fill: var(--cds-text-secondary); font-size: var(--f-sm); }
.pe-g-layer { fill: var(--cds-text-secondary); font-weight: 600; }
.pe-edge path { fill: none; stroke: var(--t, var(--cds-border-strong-01)); stroke-width: 1.5; }
.pe-g-arrow { fill: var(--cds-text-secondary); }
.pe-g-plate { fill: var(--cds-layer-01); stroke: var(--t, var(--cds-border-subtle-01)); stroke-width: 1; }
a.pe-g-node:focus-visible { outline: none; }
a.pe-g-node:hover .pe-box, a.pe-g-node:focus-visible .pe-box { stroke-width: 3; fill: var(--cds-layer-hover-02); }
a.pe-g-node:focus-visible .pe-box { stroke: var(--cds-focus); }
.pe-bar-track { fill: var(--cds-layer-accent-01); }
.pe-bar { fill: var(--t, var(--cds-interactive)); }

/* ranked */
.pe-rank, .pe-checks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.pe-rank-item { display: flex; gap: 12px; }
.pe-rank-n { flex: none; width: 24px; height: 24px; display: grid; place-items: center; background: var(--cds-layer-accent-01); color: var(--cds-text-primary); font-size: var(--cds-label-01, 12px); }
.pe-rank-main { flex: 1; min-width: 0; }
.pe-rank-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.pe-rank-label { font-weight: 600; overflow-wrap: anywhere; }
.pe-rank-val { margin-left: auto; font-weight: 600; }
.pe-rank-val small { color: var(--cds-text-secondary); font-weight: 400; }
.pe-rank-bar { display: block; width: 100%; height: 6px; margin-top: 4px; }
.pe-rank-detail, .pe-check-detail { margin: 4px 0 0; color: var(--cds-text-secondary); }
.pe-rank-meta, .pe-check-meta { margin: 4px 0 0; display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: var(--cds-label-01, 12px); }
.pe-rank-meta:empty, .pe-check-meta:empty { display: none; }

/* checklist */
.pe-check { display: flex; gap: 8px; align-items: flex-start; }
.pe-check .pe-glyph { margin-top: 2px; }
.pe-check-label { font-weight: 600; overflow-wrap: anywhere; }

/* delta */
.pe-delta-table { width: 100%; border-collapse: collapse; }
.pe-delta-table th, .pe-delta-table td { text-align: left; padding: 8px; border-bottom: 1px solid var(--cds-border-subtle-02); font-weight: 400; }
.pe-delta-table thead th { color: var(--cds-text-secondary); font-size: var(--cds-label-01, 12px); }
.pe-delta-table .pe-num { text-align: right; font-variant-numeric: tabular-nums; }
.pe-delta { display: inline-flex; align-items: center; gap: 4px; }

@media (max-width: 1055px) {
  .pe-ins-panels { grid-template-columns: minmax(0, 1fr); }
  .pe-sc-tiles { flex-basis: 100%; }
}
@media (prefers-reduced-motion: no-preference) {
  .pe-ins-panel { transition: box-shadow 0.2s; }
}

/* Across frameworks: the cross-framework page and the way into it from a portfolio */
.pe-cross-kpis { flex-wrap: wrap; margin: 16px 0; border: 1px solid var(--cds-border-subtle-01); }
.pe-cross-kpis .nx-kpi { flex: 1 1 160px; }
.pe-cross-notes { margin-top: 0; }
.pe-cross-grid { padding: 0; }
.pe-cross-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 24px; padding: 16px; }
.pe-cross-cta h2 { margin: 0 0 4px; font-size: 1rem; font-weight: 600; }
.pe-cross-cta p { margin: 0; }
.pe-cross-cta a:focus-visible, .pe-cross button:focus-visible { outline: 2px solid var(--cds-focus); outline-offset: 1px; }
.pe-cross button.pe-ins-btn { font: inherit; cursor: pointer; color: var(--cds-link-primary); }
.pe-cross button.pe-ins-btn:disabled { cursor: not-allowed; color: var(--cds-text-disabled); }
