/* ==========================================================================
   FINDING · COVERAGE STATES — the keystone of the score language. The system
   ships four bands (good / moderate / poor / none). The record also has to
   distinguish, with no colour and on a photocopy, the TWO honest absences D6
   names apart:

     • NO-DATA      — the factor was never assessed → single 45° diagonal hatch
                      + the words NOT ASSESSED. (the system's data-band="none")
     • SUPPRESSED   — assessed too thinly to publish an average (D6: <3 scored
                      or <50% of a category; overall <4 of 8 domains) → a denser
                      CROSS-hatch + the words INSUFFICIENT COVERAGE.

   The two reasons-to-have-no-number must never collapse into one grey. The hue
   is identical (bare paper, ash hatch); the SEPARATOR is hatch DENSITY — a
   genuinely non-hue, greyscale-survivable third channel — plus the label. This
   layers on top of any score surface via data-coverage="suppressed" alongside
   its data-band="none".
   ========================================================================== */

:root {
  /* the suppressed register: the no-data ash, crossed both ways and tighter,
     so it reads visibly "busier" than the open no-data hatch in pure ink */
  --hatch-image-dense:
    repeating-linear-gradient(45deg,
      var(--band-none-hatch) 0, var(--band-none-hatch) 1px, transparent 1px, transparent 5px),
    repeating-linear-gradient(-45deg,
      var(--band-none-hatch) 0, var(--band-none-hatch) 1px, transparent 1px, transparent 5px);
}

/* The shared hatch utility, upgraded to the dense register when suppressed */
.op-hatch[data-coverage="suppressed"],
[data-coverage="suppressed"] .op-hatch {
  background-color: var(--surface);
  background-image: var(--hatch-image-dense);
}

/* Per-surface overrides — each paints its own no-data hatch, so each needs the
   dense register named explicitly (and later in the cascade, so it wins). */
.op-map__tile[data-coverage="suppressed"] { background-image: var(--hatch-image-dense); }
.op-bar[data-coverage="suppressed"]       { background-image: var(--hatch-image-dense); }
.op-comparison td[data-coverage="suppressed"] { background-image: var(--hatch-image-dense); }
.op-medallion[data-coverage="suppressed"]::before { background-image: var(--hatch-image-dense); }
.op-ink-key__item[data-coverage="suppressed"] .op-ink-key__swatch { background-image: var(--hatch-image-dense); }
.op-leaderboard__row[data-coverage="suppressed"] .op-bar { background-image: var(--hatch-image-dense); }

/* The inline badge wears its absence in the vernier slot — the ticked rule
   gives way to a hatch swatch, so even the smallest score glyph shows the
   coverage state without colour (no-data = open hatch, suppressed = dense). */
.op-badge[data-band="none"] .op-badge__scale {
  background-color: var(--surface);
  background-image: var(--hatch-image);
  border: 1px solid var(--band-none-line);
  border-radius: var(--radius-xs);
}
.op-badge[data-band="none"] .op-badge__scale::before,
.op-badge[data-band="none"] .op-badge__scale::after { display: none; }
.op-badge[data-coverage="suppressed"] .op-badge__scale { background-image: var(--hatch-image-dense); }

/* ----------------------------------------------------------------------
   THE COVERAGE TAG — the words that escort every absence. NOT a bare grey,
   never blank, never a zero. A mono register set in the no-data ink, with a
   leading glyph that itself differs between the two states (a non-hue cue on
   the label too): an open ring for no-data, a slashed ring for suppressed.
   ---------------------------------------------------------------------- */
.op-coverage-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  font-family: var(--font-furniture);
  font-size: var(--text-2xs);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--band-none-ink);
  white-space: nowrap;
}
.op-coverage-tag::before {
  content: "";
  inline-size: 0.72em;
  block-size: 0.72em;
  border: 1.5px solid currentColor;
  border-radius: var(--radius-seal);
  flex: none;
}
/* suppressed slashes the ring — a printed "struck out" mark, no colour needed */
.op-coverage-tag--suppressed::before {
  background:
    linear-gradient(currentColor, currentColor) center / 1.5px 1.05em no-repeat;
  transform: rotate(45deg);
}

/* A reason note that may trail the tag, set quiet (the candour line) */
.op-coverage-tag__why {
  font-family: var(--font-furniture);
  font-weight: var(--weight-regular);
  letter-spacing: var(--tracking-wide);
  text-transform: none;
  color: var(--text-muted);
}
