/* Harness node. Card/list geometry only: colour, type and chrome come from
 * shell-tokens.css and styles.css, and nothing here forks a --bar-* token or
 * owns a colour literal. Status colours are the shell's --status-* tokens with
 * the rule colour as the fallback, so an unknown state reads as neutral, never
 * as green. */
.hz-main { padding: 0 clamp(16px, 4vw, 48px) 48px; min-width: 0; }
.hz-lede { max-width: 68ch; color: var(--muted); }
.hz-h2 { font-size: 1.05rem; margin: 1.6rem 0 .4rem; }
.hz-note { max-width: 68ch; color: var(--muted); font-size: .82rem; margin: 0 0 .7rem; }
.hz-main code { overflow-wrap: anywhere; }

/* Provenance: one grid of facts, each with its own source. */
.hz-provenance {
  display: grid; gap: .6rem; margin: 1rem 0 0; min-width: 0;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 19rem), 1fr));
}
.hz-fact {
  padding: .55rem .75rem; border: 1px solid var(--line); border-radius: .3rem;
  background: var(--surface-subtle); min-width: 0; font-size: .8rem;
}
.hz-fact .hz-k { display: block; font-size: .66rem; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); margin-bottom: .2rem; }
.hz-fact .hz-v { display: block; overflow-wrap: anywhere; }
.hz-fact .hz-v b { font-variant-numeric: tabular-nums; }
.hz-fact.is-warn { border-color: var(--status-warning, var(--line)); }
.hz-fact.is-bad  { border-color: var(--status-error, var(--line)); }
.hz-flag { display: inline-block; margin-left: .35rem; padding: 0 .35rem; border-radius: .2rem; font-size: .64rem; letter-spacing: .06em; text-transform: uppercase; border: 1px solid currentColor; }
.hz-flag.is-warn { color: var(--status-warning, inherit); }
.hz-flag.is-bad  { color: var(--status-error, inherit); }
.hz-flag.is-ok   { color: var(--status-success, inherit); }

/* Totals: the four numbers side by side so 153 + 4 is visibly not 157 green. */
.hz-totals { display: flex; flex-wrap: wrap; gap: .6rem; min-width: 0; }
.hz-stat {
  padding: .45rem .7rem; border: 1px solid var(--line); border-radius: .3rem;
  background: var(--surface-subtle); font-size: .78rem; min-width: 0;
}
.hz-stat b { font-variant-numeric: tabular-nums; font-size: 1.05rem; }
.hz-stat.is-skip { border-color: var(--status-warning, var(--line)); }
.hz-stat.is-fail { border-color: var(--status-error, var(--line)); }
.hz-totals .hz-reconcile { flex-basis: 100%; margin: 0; color: var(--muted); font-size: .78rem; }

/* Phases */
.hz-phases { display: grid; gap: .6rem; min-width: 0; grid-template-columns: repeat(auto-fit, minmax(min(100%, 24rem), 1fr)); }
.hz-phase {
  display: grid; grid-template-columns: 2.4rem 1fr; gap: .3rem .7rem; align-items: start;
  padding: .7rem .8rem; min-width: 0; border: 1px solid var(--line); border-radius: .3rem; background: var(--surface-subtle);
}
.hz-phase.is-partial { border-color: var(--status-warning, var(--line)); }
.hz-phase.is-not-applied { border-color: var(--status-error, var(--line)); }
.hz-phase-n { font-variant-numeric: tabular-nums; font-weight: 700; color: var(--muted); grid-row: span 4; }
.hz-phase-name { margin: 0; font-weight: 600; overflow-wrap: anywhere; }
.hz-phase-name .hz-state { margin-left: .4rem; }
.hz-state { display: inline-block; padding: .05rem .4rem; border-radius: .2rem; border: 1px solid currentColor; font-size: .62rem; letter-spacing: .06em; text-transform: uppercase; vertical-align: middle; white-space: nowrap; }
.hz-state.is-applied { color: var(--status-success, inherit); }
.hz-state.is-partial { color: var(--status-warning, inherit); }
.hz-state.is-not-applied { color: var(--status-error, inherit); }
.hz-state.is-none { color: var(--status-warning, inherit); }
.hz-says { margin: 0; font-size: .8rem; overflow-wrap: anywhere; }
.hz-says .hz-who { color: var(--muted); font-size: .66rem; letter-spacing: .06em; text-transform: uppercase; margin-right: .3rem; }
.hz-says b { font-variant-numeric: tabular-nums; }
.hz-phase details { font-size: .78rem; min-width: 0; }
.hz-phase summary { cursor: pointer; color: var(--muted); }
.hz-phase details ul { margin: .3rem 0 0; padding-left: 1.1rem; }
.hz-phase details li { margin: .15rem 0; overflow-wrap: anywhere; }
.hz-phase .hz-test-skip { color: var(--status-warning, inherit); }

/* Skips, gaps, limits, other files */
.hz-skips, .hz-limits { margin: 0; padding-left: 1.1rem; font-size: .82rem; }
.hz-skips li, .hz-limits li, .hz-gaps li { margin: .35rem 0; overflow-wrap: anywhere; }
.hz-skips .hz-reason, .hz-skips .hz-file { display: block; color: var(--muted); font-size: .76rem; }
.hz-gaps { margin: 0 0 .8rem; padding-left: 1.4rem; font-size: .82rem; }
.hz-gaps .hz-state { margin-right: .35rem; }
.hz-gaps .is-closed { color: var(--status-success, inherit); }
.hz-gaps .is-open { color: var(--status-error, inherit); }
.hz-gaps .is-partly-closed { color: var(--status-warning, inherit); }
.hz-others { overflow-x: auto; min-width: 0; }
.hz-others table { border-collapse: collapse; font-size: .78rem; min-width: 26rem; }
.hz-others th, .hz-others td { text-align: left; padding: .3rem .6rem .3rem 0; border-bottom: 1px solid var(--line); font-variant-numeric: tabular-nums; }
.hz-others th { font-size: .66rem; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); font-weight: 600; }
.hz-generated { color: var(--muted); font-size: .74rem; margin-top: 1.4rem; overflow-wrap: anywhere; }
.hz-empty { color: var(--muted); }
@media (width <= 46rem) {
  .hz-phase { grid-template-columns: 2rem 1fr; }
}
