/**
 * idf-empty-state - zentraler Empty-/Error-State-Baustein (Audit H1/#198, Tranche L4)
 *
 * Konsolidiert die Modul-Kopien (.dl-empty-state, .pl-empty, .sf-editor-empty,
 * .sg-empty/.sgds-empty/.sg-adressen-empty, .sg-*-empty, .guide-dash-empty,
 * .nw-board-leer, .ds-tasks-empty, .gc-wrap.is-empty) zu EINEM Block.
 * Ziel-Markup und Konsumenten-Mapping: README.md in diesem Ordner.
 *
 * Klassen (Public-API):
 *   .idf-empty-state             Basis: zentrierte Flex-Spalte, Icon 32px
 *   + .is-compact                Modal-Tabs/Panels: Padding space-6/4, Icon 28px
 *   + .is-boxed                  Karten-Grid: dashed Box auf --bg, Icon 48px
 *   + .is-hint                   einzeilige dashed Hinweis-Row (Icon inline)
 *   + .is-good                   Positiv-Semantik: Icon bzw. Text in --confirm
 *   .idf-empty-state-hint        Sub-Element: kleinere Hinweiszeile (font-sm)
 *
 * Laden: $useEmptyState = true; vor dem page-styles-Include (CSS-only, kein JS).
 * Voraussetzung: idf-tokens.css (laedt via page-styles immer zuerst).
 *
 * Namenswahl: bewusst .idf-empty-state - das unpraefixierte .empty-state in
 * idf-core.css ist ein Legacy-Utility und bleibt unangetastet. Ebenso bleiben
 * .idf-list-empty/.idf-list-loading in idf-list-grid.css der Engine-Default
 * der list-engine; eine Angleichung ist ein spaeterer, eigener Schritt.
 *
 * Audit L5/#201 (L-E8): veralteter --font-mono-Fallback (Mono-Stack vor
 * #199/H6) auf den exakten Token-Wert normalisiert (Regel 17);
 * render-identisch, das Token laedt auf jeder Seite.
 */

/* === Basis ==================================================================
   Konsolidierte Ist-Regeln (Scout-Report L4, Abschnitte 1+4). Bewusste
   Normierungen laut Report-Empfehlung (sichtbare Mini-Abweichungen):
   - Textfarbe --soft (diagramme/protokolle/storyforge) -> --mid
   - font-size 14px (Variante A) -> var(--font-md) = 14px; var(--font-base)
     (ds-tasks) wird beim Umbau ebenfalls zu --font-md
   - gap 10px (Variante A) -> var(--space-2) = 8px (Token-Raster)
   - Icon-Opacity 0.4/0.5/0.6 -> 0.5; 40px-Icons -> 32px, 32px-Icons in
     is-compact-Kontexten -> 28px (Skala nur 28/32/48)
   Icon-Regeln treffen nur DIREKTE i-Kinder (>): Empty-States duerfen einen
   Aktions-Button (idf-btn) enthalten, dessen Button-Icon darf die grosse
   Icon-Regel nicht erben (Muster .sg-gbu-empty, safeguard.css). */
.idf-empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-12) var(--space-6);
  text-align: center;
  color: var(--mid);
  font-size: var(--font-md);
}

/* Icon-Groessen in px: Icons haben keine Font-Token-Skala; die Groesse kommt
   laut §7.16 aus dem Shared-Block (gleiches Muster wie .idf-list-empty i). */
.idf-empty-state > i {
  font-size: 32px;
  color: var(--soft);
  opacity: 0.5;
}

.idf-empty-state p { margin: 0; }

.idf-empty-state b,
.idf-empty-state strong { color: var(--ink); }

/* === .is-compact: Modal-Tabs, Dashboard-Panels, kleine Karten-Bereiche ==== */
.idf-empty-state.is-compact {
  padding: var(--space-6) var(--space-4);
}

.idf-empty-state.is-compact > i { font-size: 28px; }

/* === .is-boxed: dashed Box im Karten-Grid =================================
   1:1 aus den wortgleichen Drillingen .sg-empty / .sgds-empty /
   .sg-adressen-empty (inkl. gap space-3 und Icon-margin-bottom space-2,
   damit der heutige Vertikal-Rhythmus der Box exakt erhalten bleibt). */
.idf-empty-state.is-boxed {
  grid-column: 1 / -1;
  gap: var(--space-3);
  background: var(--bg);
  border: 1px dashed var(--line);
  border-radius: var(--radius-lg);
}

.idf-empty-state.is-boxed > i {
  font-size: 48px;
  opacity: 1; /* 48px-Variante ist Vollton --soft, keine Transparenz */
  margin-bottom: var(--space-2);
}

.idf-empty-state.is-boxed p {
  max-width: 520px;
  font-size: var(--font-md);
  line-height: var(--leading-base);
}

.idf-empty-state.is-boxed code {
  /* Token --font-mono (H6/#199, gleiche Tranche) statt neuem lokalen
     Mono-Stack; Superset-Abweichung (Cascadia Code vor Consolas)
     wie bei toni-panel/markdown akzeptiert. */
  font-family: var(--font-mono, ui-monospace, "SFMono-Regular", "Cascadia Code", Menlo, Consolas, monospace);
  font-size: var(--font-sm);
  background: var(--white);
  padding: 2px var(--space-2);
  border-radius: var(--radius-sm);
  border: 1px solid var(--line);
}

/* === .is-hint: einzeilige dashed Hinweis-Row ===============================
   Aus .guide-dash-empty (padding 16px) und .nw-board-leer (padding 12px);
   Aufloesung laut Report: padding space-3/space-4 (12px vertikal, 16px
   horizontal). grid-column 1/-1 fuer Karten-Grids (guide) - ausserhalb
   eines Grids wirkungslos. Schrift: guide erbte 16px, netzwerk font-sm -
   beides normiert auf die Basis var(--font-md). */
.idf-empty-state.is-hint {
  flex-direction: row;
  justify-content: flex-start;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-4);
  border: 1px dashed var(--line);
  border-radius: var(--radius-md);
  text-align: left;
  grid-column: 1 / -1;
}

.idf-empty-state.is-hint > i {
  font-size: inherit; /* Icon laeuft inline im Text mit (heutige guide/netzwerk-Optik) */
  color: inherit;
  opacity: 1;
}

/* === .is-good: Positiv-Semantik ("alles erledigt") =========================
   Nach .is-hint deklariert, damit der gruene Haken in der Hinweis-Row
   (netzwerk) gewinnt. --green (nw-board-leer) wird laut Report-Empfehlung
   auf --confirm normiert - deckt ds-tasks UND nw-board-leer ab. */
.idf-empty-state.is-good > i {
  color: var(--confirm);
  opacity: 0.9;
}

/* Textfall ohne Icon (sg-bgready-empty): ganzer Text in --confirm.
   :has() ist im Repo etabliert (akteure/unternehmen/list-insert/list-grid). */
.idf-empty-state.is-good:not(:has(> i)) {
  color: var(--confirm);
}

/* === Sub-Element: Hinweiszeile =============================================
   Ersetzt .sg-erklaerung-empty-hint / .sg-anweisungen-hint / .sg-aufgaben-hint
   (Report-Aufloesung: nur font-sm, modul-spezifische Extras entfallen). */
.idf-empty-state-hint {
  font-size: var(--font-sm);
}
