/* =============================================================================
   ANLEITUNG — nur das, was Neonnacht noch nicht hat
   =============================================================================

   LADEREIHENFOLGE (aus dem Kopfkommentar von atelier-komponenten.css):
       fonts.css → atelier.css → atelier-komponenten.css → atelier-panel.css
       → anleitung.css
   Der <body> traegt class="atelier".

   HERKUNFT DER NACHBARDATEIEN
   atelier.css, atelier-komponenten.css, atelier-panel.css und js/atelier-panel.js
   sind WORTGLEICHE KOPIEN aus /Users/renekress/Desktop/app (Stand 27.07.2026).
   Sie werden hier nicht gepflegt und nicht veraendert — wer etwas am
   Designsystem aendern will, aendert es dort und kopiert erneut. Nur fonts.css
   traegt zwei dokumentierte Abweichungen (Pfade, Fraunces entfernt), und nur
   diese Datei hier ist unser Eigentum.

   Warum atelier.css und nicht atelier-nacht.css: atelier-nacht.css ist die
   aeltere Parallelfassung derselben Bildsprache mit dem Praefix n-/body.nacht
   und wird im Shop-Repo ausschliesslich von der Musterseite atelier-nacht.html
   geladen. Sie definiert NUR die Rohwerte --n-*; atelier-komponenten.css und
   atelier-panel.css sprechen aber durchgehend die Rollen-Tokens --c-*, --s-*,
   --t-*, --r-*, --z-* — mit atelier-nacht.css allein waeren beide Dateien ohne
   Farbe, ohne Abstaende und ohne Radien. atelier.css ist die gepflegte Fassung
   und liefert beide Ebenen.

   WAS HIER BEWUSST NICHT STEHT
   Knoepfe (.a-btn), Karten (.a-card), Felder (.a-field und die Element-
   Selektoren aus atelier-komponenten.css), Abzeichen (.a-mark, .badge),
   Leerzustand (.empty-state), Zeitstrahl (.tl-item/.tl-dot), Ladeplatzhalter
   (.a-skeleton), Bestaetigungsdialog (.confirm-dialog-*), Panels (.a-panel*),
   Fokusring, Filmkorn, Scheinwerfer. Alles vorhanden, alles benutzt.

   EIN FARBHINWEIS
   Der unsichere KI-Entwurf ist im Text "gelb". Umgesetzt ist er in Bernstein
   (--c-warn #E89B3C), NICHT im Neon-Gelb #FBCD0A: das Gelb ist im Designsystem
   ausschliesslich fuer Exklusives reserviert (atelier.css Abschnitt 1). Ein
   Warnzustand in derselben Farbe nimmt dem Gelb genau die Bedeutung, wegen der
   es reserviert wurde.
   ============================================================================= */

/* =============================================================================
   0  EINE KORREKTUR AM UEBERNOMMENEN SYSTEM
   -----------------------------------------------------------------------------
   Im Shop-Repo ist .a-btn (atelier.css) in freier Wildbahn nie auf einem
   <button> oder <a> INNERHALB von .atelier gelandet: die umgestellten Seiten
   benutzen die alten Klassen .btn-primary/.btn-secondary, die Musterseite
   benutzt .n-btn unter body.nacht. Diese Oberflaeche benutzt durchgehend
   .a-btn — und dabei faellt auf, dass zwei Regeln aus
   atelier-komponenten.css ihn ueberstimmen:

       .atelier button, .atelier input, .atelier select, .atelier textarea
           { font: inherit; color: inherit; }                     (0,1,1)
       .atelier a.a-btn, .atelier a.a-card, …
           { color: inherit; text-decoration: none; }             (0,2,1)

   .a-btn selbst hat nur (0,1,0) und verliert damit BEIDE Male. Nachgemessen im
   Browser: der Hauptknopf kam in 15px/400 in Fliesstextgrau statt in 13px/700
   in #08070A — heller Text auf dem Neonverlauf, also nicht nur falsch, sondern
   auch kontrastschwach.

   Repariert wird hier und nicht in der Kopie: atelier.css und
   atelier-komponenten.css bleiben wortgleich zum Shop-Repo, damit ein
   spaeteres Nachkopieren ein reines Ueberschreiben bleibt. Wird der Fehler
   dort behoben, kann dieser Abschnitt ersatzlos weg.
   ============================================================================= */

.atelier button.a-btn,
.atelier a.a-btn {
  color: var(--btn-fg);
  font-family: var(--font-ui);
  font-size: var(--t-sm);
  font-weight: 700;
  line-height: var(--lh-snug);
}
/* Gleiche Spezifitaet wie die Regel darueber — deshalb muss sie danach stehen. */
.atelier button.a-btn--sm,
.atelier a.a-btn--sm { font-size: var(--t-2xs); }

/* atelier.css kennt --sm, aber keine grosse Variante. Der Export-Knopf ist die
   einzige Stelle, an der eine gebraucht wird. */
.atelier .a-btn--gross {
  min-block-size: 3.5rem;
  padding-inline: var(--s-6);
  font-size: var(--t-base);
}

/* Aus demselben Grund: der Ablageplatz fuer Fotos ist ein <button>. */
.atelier .an-foto__knopf { color: var(--c-text-muted); font-size: var(--t-xs); }

/* =============================================================================
   1  SEITENGERUEST
   ============================================================================= */

.an-leiste {
  position: sticky;
  inset-block-start: 0;
  z-index: var(--z-header);
  display: flex;
  align-items: center;
  gap: var(--s-4);
  min-block-size: 4rem;
  padding: var(--s-3) var(--gutter);
  background: rgb(8 7 10 / .82);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-block-end: var(--line);
}
.an-leiste__marke {
  display: inline-flex;
  align-items: baseline;
  gap: var(--s-2);
  text-decoration: none;
  white-space: nowrap;
}
.an-leiste__marke b {
  font-family: var(--font-display);
  font-size: var(--t-lg);
  font-weight: 400;
  line-height: 1;
  text-transform: uppercase;
  color: var(--c-text);
}
.an-leiste__marke span {
  font-size: var(--t-2xs);
  font-weight: 700;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--c-text-muted);
}
.an-leiste__mitte { flex: 1 1 auto; min-inline-size: 0; }
.an-leiste__rechts { display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap; justify-content: flex-end; }

/* Der Titel der Anleitung in der Leiste — schneidet ab statt umzubrechen,
   damit die Leiste ihre Hoehe behaelt. */
.an-leiste__titel {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: var(--font-display);
  font-size: var(--t-lg);
  line-height: 1;
  text-transform: uppercase;
  color: var(--c-text);
}
.an-leiste__titel:empty::before { content: 'Ohne Titel'; color: var(--c-text-faint); }

@media (max-width: 720px) {
  .an-leiste { flex-wrap: wrap; }
  .an-leiste__mitte { order: 3; flex-basis: 100%; }
}

/* =============================================================================
   2  SPEICHERANZEIGE
   -----------------------------------------------------------------------------
   Sie ist eine aria-live-Region: die Anwendung spricht hier von sich aus, ohne
   dass jemand etwas ausgeloest haette. Deshalb "polite" und deshalb kurze,
   vollstaendige Saetze im Markup ("Gespeichert 14:32"), keine blossen Symbole.
   ============================================================================= */

.an-speicher {
  display: inline-flex;
  align-items: center;
  gap: var(--s-2);
  padding: var(--s-1) var(--s-3);
  font-size: var(--t-xs);
  color: var(--c-text-muted);
  border: 1px solid transparent;
  border-radius: var(--r-full);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.an-speicher__punkt {
  inline-size: 7px;
  block-size: 7px;
  flex: 0 0 auto;
  border-radius: var(--r-full);
  background: var(--c-line-strong);
}
.an-speicher[data-zustand='laeuft']    { color: var(--c-text-body); }
.an-speicher[data-zustand='laeuft']    .an-speicher__punkt { background: var(--c-accent-2); }
.an-speicher[data-zustand='fertig']    .an-speicher__punkt { background: var(--c-good); }
.an-speicher[data-zustand='offen']     .an-speicher__punkt { background: var(--c-warn); }
.an-speicher[data-zustand='fehler']    { color: var(--c-bad); border-color: rgb(255 71 87 / .4); }
.an-speicher[data-zustand='fehler']    .an-speicher__punkt { background: var(--c-bad); }

@media (prefers-reduced-motion: no-preference) {
  .an-speicher[data-zustand='laeuft'] .an-speicher__punkt {
    animation: an-pulsieren 1.1s var(--ease-inout) infinite;
  }
}
@keyframes an-pulsieren { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }

/* =============================================================================
   3  UEBERSICHT — Kachel je Anleitung
   -----------------------------------------------------------------------------
   Die Karte selbst ist .a-card--interactive aus atelier.css. Hier steht nur,
   was dort fehlt: das Bildfenster im Hochformat (Anleitungscover sind A4),
   die Fusszeile mit den vier Aktionen und der Platzhalter ohne Foto.
   ============================================================================= */

.an-raster {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(17rem, 100%), 1fr));
  gap: var(--s-5);
}

.an-kachel { display: flex; flex-direction: column; }
.an-kachel__bild {
  position: relative;
  aspect-ratio: 210 / 297;          /* A4 — die Kachel zeigt eine Titelseite */
  overflow: hidden;
  background: var(--c-bg-tief);
  border-block-end: var(--line);
}
.an-kachel__bild img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
.an-kachel__marken {
  position: absolute;
  inset-block-start: var(--s-3);
  inset-inline: var(--s-3);
  display: flex;
  justify-content: space-between;
  gap: var(--s-2);
  z-index: 2;
}
.an-kachel__leer {
  position: absolute;
  inset: 0;
  display: grid;
  place-content: center;
  gap: var(--s-2);
  justify-items: center;
  padding: var(--s-4);
  text-align: center;
  color: var(--c-text-faint);
  font-size: var(--t-xs);
}
.an-kachel__leer svg { inline-size: 2rem; block-size: 2rem; opacity: .55; }

.an-kachel__text { padding: var(--s-4); display: flex; flex-direction: column; gap: var(--s-1); flex: 1 1 auto; }
.an-kachel__name {
  font-family: var(--font-display);
  font-size: var(--t-lg);
  line-height: var(--lh-snug);
  text-transform: uppercase;
  color: var(--c-text);
  overflow-wrap: anywhere;
}
.an-kachel__zeile { font-size: var(--t-xs); color: var(--c-text-muted); font-variant-numeric: tabular-nums; }

.an-kachel__aktionen {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s-2);
  padding: var(--s-3) var(--s-4) var(--s-4);
  border-block-start: var(--line);
}
.an-kachel__aktionen .a-btn { flex: 1 1 auto; }

/* =============================================================================
   4  WIZARD — Fortschrittsleiste links, Inhalt rechts
   ============================================================================= */

.an-wizard {
  display: grid;
  /* Drei Spalten: Stationen, Bearbeiten, Vorschau.
     Die Vorschau bekommt eine feste Spanne statt eines Anteils: eine A4-Seite
     unter etwa 20rem wird unleserlich, ueber 26rem frisst sie den Platz zum
     Bearbeiten. Dazwischen darf sie atmen. */
  grid-template-columns: minmax(14rem, 17rem) minmax(0, 1fr) minmax(20rem, 26rem);
  gap: var(--s-6);
  align-items: start;
  padding-block: var(--s-6) var(--s-9);
}

/* ---------------------------------------------------------------------------
   Seitenvorschau
   ---------------------------------------------------------------------------
   Sie klebt mit, waehrend man im Formular scrollt — sonst waere sie genau dann
   aus dem Bild, wenn man den Baustein bearbeitet, den man sehen will.
   --------------------------------------------------------------------------- */

.an-vorschau {
  position: sticky;
  inset-block-start: 5rem;
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  /* Nie hoeher als der Bildschirm: sonst waechst die Spalte mit der Seitenzahl
     und schiebt das Ende des Dokuments unerreichbar weit nach unten. */
  max-block-size: calc(100vh - 6.5rem);
  min-inline-size: 0;
}

.an-vorschau__kopf {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s-3);
  font-size: var(--fs-0);
  color: var(--c-dim);
}

.an-vorschau__text {
  min-inline-size: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Die Seitenzahlen duerfen nie umbrechen oder gekuerzt werden — sie sind die
   Verbindung zwischen Vorschau und fertigem PDF. */
.an-vorschau__zahl {
  flex: none;
  font-variant-numeric: tabular-nums;
  color: var(--c-text);
}

.an-vorschau__buehne {
  overflow: auto;
  overscroll-behavior: contain;
  border-radius: var(--r-2);
  background: #e9e9ec;

  /* Der Platz fuer den senkrechten Rollbalken wird IMMER freigehalten, auch
     wenn gerade keiner da ist.

     Ohne das entsteht eine Rueckkopplung: eine Vorschau mit mehreren Seiten
     bekommt einen Rollbalken, der Rollbalken verschmaelert die Buehne um ~15 px,
     und die vorher berechnete Breite der Flaeche passt nicht mehr — es erscheint
     zusaetzlich ein Querbalken. Genau das trat bei der Station "Tabellen" mit
     drei Seiten auf, bei einer Seite dagegen nicht. */
  scrollbar-gutter: stable;
}

/* Der Rahmen bleibt INNEN immer 794 px breit (A4 bei 96 dpi) und wird nur
   skaliert — siehe js/vorschau.js. Wuerde er stattdessen schmaler gemacht,
   braechen die Zeilen woanders um und die Vorschau zeigte eine Seiteneinteilung,
   die es im PDF nicht gibt. */
/* Der Vergroessern-Knopf sitzt im Kopf, rechts neben den Seitenzahlen. */
.an-vorschau__gross {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  inline-size: 1.75rem;
  block-size: 1.75rem;
  margin-inline-start: var(--s-1);
  color: var(--c-dim);
  background: none;
  border: 0;
  border-radius: var(--r-1);
  cursor: pointer;
}
.an-vorschau__gross:hover:not(:disabled) { color: var(--c-text); background: var(--c-surface-2); }
.an-vorschau__gross:disabled { opacity: .35; cursor: default; }

/* ---------------------------------------------------------------------------
   Vollbild
   ---------------------------------------------------------------------------
   Ein eigener Rahmen in Originalgroesse statt einer Vergroesserung des kleinen:
   CSS-transform vergroessert das gerenderte Bild, nicht die Schrift — das
   Ergebnis waere weichgezeichnet. Begruendung steht bei vollbild() in
   js/vorschau.js.
   --------------------------------------------------------------------------- */

.an-gross__ueberlage {
  position: fixed;
  inset: 0;
  z-index: var(--z-panel-2);
  display: flex;
  padding: var(--s-4);
  background: rgb(3 2 5 / .82);
  backdrop-filter: blur(6px);
}

.an-gross {
  display: flex;
  flex-direction: column;
  gap: var(--s-3);
  inline-size: 100%;
  min-inline-size: 0;
  block-size: 100%;
}

.an-gross__kopf {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  flex: none;
}

.an-gross__titel {
  min-inline-size: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: var(--fs-1);
  color: var(--c-text);
}

.an-gross__zahl {
  flex: none;
  font-variant-numeric: tabular-nums;
  color: var(--c-dim);
}

/* Schiebt die Knoepfe nach rechts, egal wie lang der Titel ist. */
.an-gross__knoepfe {
  margin-inline-start: auto;
  display: flex;
  align-items: center;
  gap: var(--s-2);
  flex: none;
}

.an-gross__zu {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  inline-size: 2.25rem;
  block-size: 2.25rem;
  color: var(--c-dim);
  background: none;
  border: var(--line);
  border-radius: var(--r-full);
  cursor: pointer;
}
.an-gross__zu:hover { color: var(--c-text); background: var(--c-surface-2); }

.an-gross__buehne {
  flex: 1 1 auto;
  min-block-size: 0;
  overflow: auto;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
  border-radius: var(--r-2);
  background: #e9e9ec;
  /* Eine einzelne Seite steht mittig, ein Stapel beginnt oben links. */
  display: flex;
  justify-content: center;
}

.an-gross__flaeche { overflow: hidden; }

.an-gross__rahmen {
  display: block;
  border: 0;
  background: #e9e9ec;
}

/* Traeger mit den verkleinerten Massen — siehe einpassen() in js/vorschau.js.
   Ohne ihn belegte der Rahmen im Layout seine vollen 794 px und die Buehne
   bekaeme einen Querbalken. */
.an-vorschau__flaeche {
  overflow: hidden;
}

.an-vorschau__rahmen {
  display: block;
  border: 0;
  background: #e9e9ec;
}

.an-stationen { position: sticky; inset-block-start: 5rem; }
.an-stationen ol { display: block; list-style: none; margin: 0; padding: 0; }

/* Eine Station ist ein .tl-item aus atelier-komponenten.css (Punkt + Linie);
   der Knopf darin traegt nur Text — so bleibt die ganze Zeile klickbar UND
   der Punkt bleibt exakt auf der Linie. */
.an-station { position: relative; }
.an-station__knopf {
  display: block;
  inline-size: 100%;
  padding: 0 0 var(--s-1);
  text-align: start;
  background: none;
  border: 0;
  cursor: pointer;
  color: inherit;
  font: inherit;
}
.an-station__nr {
  display: block;
  font-size: var(--t-2xs);
  font-weight: 700;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--c-text-faint);
}
.an-station__name {
  display: block;
  font-family: var(--font-display);
  font-size: 1.15rem;
  line-height: var(--lh-snug);
  text-transform: uppercase;
  color: var(--c-text-muted);
  transition: color var(--dur-2) var(--ease-inout);
}
.an-station__hinweis { display: block; font-size: var(--t-xs); color: var(--c-text-faint); }
@media (hover: hover) { .an-station__knopf:hover .an-station__name { color: var(--c-text-body); } }
.tl-item.is-aktuell .an-station__name { color: var(--c-text); }
.tl-item.is-aktuell .an-station__nr { color: var(--c-accent-2); }
.tl-item.is-erledigt .an-station__name { color: var(--c-text-body); }

/* Zahl roter Punkte an der Station "Pruefen" */
.an-station__zahl {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-inline-size: 1.25rem;
  padding-inline: 4px;
  margin-inline-start: var(--s-2);
  font-family: var(--font-ui);
  font-size: 10px;
  font-weight: 800;
  color: var(--c-text-on-accent);
  background: var(--c-bad);
  border-radius: var(--r-full);
  vertical-align: 2px;
}
.an-station__zahl[data-art='warnung'] { background: var(--c-warn); }

/* Auf schmalen Geraeten wird aus der Leiste eine waagerechte Spur.
   Die Zeitstrahl-Linie aus atelier-komponenten.css wuerde dort quer stehen —
   deshalb wird sie hier abgeschaltet. */
@media (max-width: 900px) {
  .an-wizard { grid-template-columns: minmax(0, 1fr); gap: var(--s-5); }

  /* Auf schmalen Geraeten wandert die Vorschau unter das Formular und klebt
     nicht mehr: nebeneinander ist kein Platz, und uebereinander waere ein
     klebender Kasten nur im Weg. */
  .an-vorschau {
    position: static;
    max-block-size: none;
    order: 3;
  }

  /* Bewusst NICHT sticky: die Kopfleiste bricht auf schmalen Geraeten auf zwei
     Zeilen um und ist dann hoeher als die 4rem, an denen die Spur kleben
     wuerde — sie schoebe sich unter die Leiste. Von beiden ist die Leiste die
     wichtigere, sie traegt die Speicheranzeige. */
  .an-stationen {
    position: static;
    margin-inline: calc(var(--gutter) * -1);
    padding: var(--s-3) var(--gutter);
    border-block-end: var(--line);
  }
  .an-stationen ol { display: flex; gap: var(--s-2); overflow-x: auto; scrollbar-width: thin; }
  .an-stationen .tl-item { padding: 0; }
  /* Dieselbe Form wie die Ursprungsregel in atelier-komponenten.css
     (`.atelier .tl-item:not(:last-child)::after`) — ohne das :not() haette sie
     die hoehere Spezifitaet und die Zeitstrahl-Linie stuende quer zwischen den
     Pillen. Nachgemessen: genau das passierte. */
  .an-stationen .tl-item:not(:last-child)::after { content: none; }
  .an-stationen .tl-dot { display: none; }
  .an-station {
    flex: 0 0 auto;
    padding: var(--s-2) var(--s-4);
    border: var(--line);
    border-radius: var(--r-full);
  }
  .an-stationen .tl-item.is-aktuell .an-station { border-color: var(--c-accent-2); background: rgb(139 92 246 / .12); }
  .an-stationen .tl-item.is-erledigt .an-station { border-color: rgb(61 220 151 / .35); }
  /* Auf einer Pille ist zweizeilig zu viel: nur der Name bleibt stehen. */
  .an-station__hinweis, .an-station__nr { display: none; }
  .an-station__name { font-size: 1rem; white-space: nowrap; }
}

/* =============================================================================
   5  INHALTSFLAECHE
   ============================================================================= */

.an-blatt {
  background: var(--c-surface);
  border: var(--line);
  border-radius: var(--r-lg);
  padding: var(--s-5);
}
.an-blatt + .an-blatt { margin-block-start: var(--s-5); }
.an-blatt__kopf {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--s-4);
  flex-wrap: wrap;
  margin-block-end: var(--s-5);
}
.an-blatt__titel {
  font-family: var(--font-display);
  font-size: var(--t-xl);
  line-height: var(--lh-snug);
  text-transform: uppercase;
  color: var(--c-text);
}
.an-blatt__lede { font-size: var(--t-sm); color: var(--c-text-muted); max-inline-size: 60ch; margin-block-start: var(--s-1); }

.an-fuss {
  display: flex;
  gap: var(--s-3);
  justify-content: space-between;
  flex-wrap: wrap;
  margin-block-start: var(--s-5);
}

/* Auswahl aus Karten statt <select>, z. B. Anrede und Nummerierung.
   Die eigentlichen Radios liegen darin und bleiben bedienbar — nur unsichtbar. */
.an-wahl { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(11rem, 100%), 1fr)); gap: var(--s-3); }
.an-wahl__feld {
  position: relative;
  display: block;
  padding: var(--s-3) var(--s-4);
  background: var(--c-surface-sunk);
  border: 1px solid var(--c-line);
  border-radius: var(--r-md);
  cursor: pointer;
  transition: border-color var(--dur-2) var(--ease-inout), background var(--dur-2) var(--ease-inout);
}
.an-wahl__feld input { position: absolute; opacity: 0; inline-size: 1px; block-size: 1px; margin: 0; }
/* Die Auswahl steht in einer .form-group, damit sie eine Gruppenbeschriftung
   bekommt. Deren Regel `.atelier .form-group label` setzt aber JEDES label auf
   Versalien mit .16em Sperrung — das ist fuer eine Feldbeschriftung richtig und
   fuer einen Erklaersatz falsch. Hier zurueckgenommen. */
.atelier .form-group .an-wahl__feld {
  text-transform: none;
  letter-spacing: normal;
  font-size: var(--t-base);
  font-weight: 400;
  color: var(--c-text-body);
}
.an-wahl__feld b { display: block; color: var(--c-text); font-size: var(--t-base); }
.an-wahl__feld small { display: block; color: var(--c-text-muted); font-size: var(--t-xs); line-height: var(--lh-snug); margin-block-start: 2px; }
@media (hover: hover) { .an-wahl__feld:hover { border-color: var(--c-line-strong); } }
.an-wahl__feld:has(input:checked) { border-color: var(--c-accent-2); background: rgb(139 92 246 / .12); }
.an-wahl__feld:has(input:focus-visible) { outline: 2px solid var(--c-accent-3); outline-offset: 3px; }

/* =============================================================================
   6  FOTOS
   -----------------------------------------------------------------------------
   Fotos gehen SOFORT beim Auswaehlen hoch, nicht erst beim Absenden. Der
   Ablageplatz zeigt deshalb drei Zustaende: leer, laedt (mit Fortschritt),
   gefuellt.
   ============================================================================= */

.an-fotos { display: flex; flex-wrap: wrap; gap: var(--s-3); }

.an-foto {
  position: relative;
  inline-size: 9.5rem;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--c-bg-tief);
  border: 1px dashed var(--c-line-strong);
  border-radius: var(--r-md);
  color: var(--c-text-muted);
}
.an-foto--gross { inline-size: 100%; max-inline-size: 22rem; aspect-ratio: 3 / 4; }
.an-foto--breit { inline-size: 100%; max-inline-size: 32rem; aspect-ratio: 16 / 9; }
.an-foto img { display: block; inline-size: 100%; block-size: 100%; object-fit: contain; background: #0A090C; }
.an-foto.ist-gefuellt { border-style: solid; border-color: var(--c-line); }
.an-foto.ist-ziel { border-color: var(--c-accent-2); background: rgb(139 92 246 / .12); }

/* Der ganze Platz ist eine Schaltflaeche: Klick oeffnet den Dateidialog,
   Enter/Leertaste ebenso, Ziehen legt ab. */
.an-foto__knopf {
  position: absolute;
  inset: 0;
  display: grid;
  place-content: center;
  gap: var(--s-1);
  justify-items: center;
  padding: var(--s-3);
  text-align: center;
  font: inherit;
  font-size: var(--t-xs);
  color: var(--c-text-muted);
  background: none;
  border: 0;
  cursor: pointer;
}
.an-foto__knopf svg { inline-size: 1.5rem; block-size: 1.5rem; opacity: .7; }
.an-foto__werkzeuge {
  position: absolute;
  inset-block-end: var(--s-2);
  inset-inline: var(--s-2);
  display: flex;
  gap: var(--s-2);
  justify-content: flex-end;
  z-index: 3;
}
.an-foto__balken {
  position: absolute;
  inset-block-end: 0;
  inset-inline: 0;
  block-size: 3px;
  background: var(--c-line);
  z-index: 4;
}
.an-foto__balken i {
  display: block;
  block-size: 100%;
  inline-size: 0;
  background: var(--c-verlauf);
  transition: inline-size var(--dur-2) linear;
}

/* Nummern-Marker auf dem Schrittfoto: pinker Kreis mit weisser Ziffer,
   Position in Prozent der Bildflaeche — genau wie im Datensatz. */
.an-marker {
  position: absolute;
  z-index: 3;
  inline-size: 1.5rem;
  block-size: 1.5rem;
  margin: -0.75rem 0 0 -0.75rem;
  display: grid;
  place-items: center;
  font-size: 11px;
  font-weight: 800;
  color: #fff;
  background: var(--c-accent);
  border: 2px solid #fff;
  border-radius: var(--r-full);
  box-shadow: 0 1px 6px rgb(0 0 0 / .6);
  cursor: pointer;
}

/* =============================================================================
   7  BLOECKE
   ============================================================================= */

.an-bloecke { display: flex; flex-direction: column; gap: var(--s-4); }

.an-block {
  position: relative;
  background: var(--c-bg-tief);
  border: var(--line);
  border-radius: var(--r-lg);
}
.an-block__kopf {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  padding: var(--s-3) var(--s-4);
  border-block-end: var(--line);
}
.an-block__art {
  font-size: var(--t-2xs);
  font-weight: 700;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--c-text-muted);
}
.an-block__nr {
  display: inline-grid;
  place-items: center;
  min-inline-size: 1.75rem;
  block-size: 1.75rem;
  padding-inline: 5px;
  font-family: var(--font-display);
  font-size: 1.05rem;
  line-height: 1;
  color: var(--c-text-on-accent);
  background: var(--c-verlauf);
  border-radius: var(--r-full);
}
.an-block__werkzeuge { margin-inline-start: auto; display: flex; gap: var(--s-1); }
.an-block__koerper { padding: var(--s-4); display: flex; flex-direction: column; gap: var(--s-3); }

/* Beim Ziehen: die gezogene Karte wird blass, das Ziel bekommt eine Kante. */
.an-block.wird-gezogen, .an-kapitelzeile.wird-gezogen { opacity: .4; }
.an-block.ist-ziel, .an-kapitelzeile.ist-ziel { outline: 2px dashed var(--c-accent-2); outline-offset: 2px; }

/* Angesprungen aus der Pruefliste — leuchtet einmal auf. */
@media (prefers-reduced-motion: no-preference) {
  .an-block.ist-angesprungen, .an-kapitelzeile.ist-angesprungen {
    animation: an-aufleuchten 2s var(--ease-paper);
  }
}
@keyframes an-aufleuchten {
  from { box-shadow: 0 0 0 3px rgb(139 92 246 / .55); }
  to   { box-shadow: 0 0 0 3px rgb(139 92 246 / 0); }
}

/* Der Griff zum Ziehen. Er ist bewusst KEIN reines Ziehziel: dieselbe Sortierung
   geht ueber die beiden Pfeilknoepfe daneben, die mit der Tastatur bedienbar
   sind. Ziehen ist die Abkuerzung, nicht der einzige Weg. */
.an-griff { cursor: grab; touch-action: none; }
.an-griff:active { cursor: grabbing; }

/* =============================================================================
   8  KI-ZUSTAENDE
   -----------------------------------------------------------------------------
   Drei Zustaende, drei Farben:
     laeuft    — violetter Rand, Schimmer ueber dem Feld
     unsicher  — Bernstein, mit Rueckfrage darunter (siehe Farbhinweis im Kopf)
     entwurf   — der Text steht, ist aber noch nicht freigegeben
   ============================================================================= */

.an-ki { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); }
.an-ki__hinweis { font-size: var(--t-xs); color: var(--c-text-faint); }

.atelier textarea.an-laeuft,
.atelier input.an-laeuft {
  border-color: rgb(139 92 246 / .7);
  background:
    linear-gradient(100deg, rgb(139 92 246 / 0) 30%, rgb(139 92 246 / .18) 50%, rgb(139 92 246 / 0) 70%)
    var(--c-surface-sunk);
  background-size: 220% 100%;
}
@media (prefers-reduced-motion: no-preference) {
  .atelier textarea.an-laeuft, .atelier input.an-laeuft {
    animation: an-schimmer 1.6s var(--ease-inout) infinite;
  }
}
@keyframes an-schimmer { from { background-position: 180% 0; } to { background-position: -40% 0; } }

.atelier textarea.an-unsicher,
.atelier input.an-unsicher {
  border-color: var(--c-warn);
  background: rgb(232 155 60 / .1);
}
.atelier textarea.an-unsicher:focus,
.atelier input.an-unsicher:focus {
  border-color: var(--c-warn);
  box-shadow: 0 0 0 3px rgb(232 155 60 / .2);
}

.an-rueckfrage {
  display: flex;
  gap: var(--s-3);
  padding: var(--s-3) var(--s-4);
  font-size: var(--t-sm);
  color: var(--c-text);
  background: rgb(232 155 60 / .1);
  border: 1px solid rgb(232 155 60 / .45);
  border-inline-start: 3px solid var(--c-warn);
  border-radius: var(--r-md);
}
.an-rueckfrage b {
  display: block;
  font-size: var(--t-2xs);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--c-warn);
  margin-block-end: 2px;
}

/* =============================================================================
   9  TABELLEN
   -----------------------------------------------------------------------------
   atelier-komponenten.css sagt ausdruecklich, dass es bewusst KEINE
   Tabellenkomponente gibt — im ganzen Shop-Bestand steht kein <table>. Hier
   steht einer, und zwar zu Recht: eine Groessentabelle IST eine Tabelle, und
   der Screenreader braucht die Zeilen-Spalten-Beziehung. Deshalb echtes
   <table> mit <th scope>, aber im Stil des Systems.
   ============================================================================= */

.an-tabellenrahmen { overflow-x: auto; border: var(--line); border-radius: var(--r-md); }
.an-tabelle { border-collapse: collapse; inline-size: 100%; min-inline-size: max-content; }
.an-tabelle th, .an-tabelle td { border: 1px solid var(--c-line); padding: 0; vertical-align: middle; }
.an-tabelle thead th { background: rgb(255 0 255 / .12); }
.an-tabelle tbody tr:nth-child(even) td { background: rgb(255 255 255 / .025); }

/* Die Zellen sind Eingabefelder — ohne Rand, der Rand ist die Tabelle. */
.atelier .an-zelle {
  min-block-size: 2.5rem;
  inline-size: 100%;
  min-inline-size: 7rem;
  padding: var(--s-2) var(--s-3);
  font-size: var(--t-sm);
  background: none;
  border: 0;
  border-radius: 0;
  color: var(--c-text);
}
.atelier .an-zelle:focus { box-shadow: inset 0 0 0 2px var(--c-accent-3); }
.an-tabelle thead .an-zelle { font-weight: 700; color: var(--c-text); }
.an-tabelle__rand { inline-size: 2.5rem; min-inline-size: 2.5rem; text-align: center; }

/* =============================================================================
   10  KAPITELLISTE, NAMENSPILLEN, PUNKTLISTEN
   ============================================================================= */

.an-kapitelliste { display: flex; flex-direction: column; gap: var(--s-2); }
.an-kapitelzeile {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  padding: var(--s-2) var(--s-3);
  background: var(--c-bg-tief);
  border: var(--line);
  border-radius: var(--r-md);
}
.an-kapitelzeile__nr {
  font-family: var(--font-display);
  font-size: 1.25rem;
  line-height: 1;
  color: var(--c-accent-2);
  min-inline-size: 2.25rem;
  font-variant-numeric: tabular-nums;
}
.an-kapitelzeile__mitte { flex: 1 1 auto; min-inline-size: 0; display: flex; flex-direction: column; gap: 2px; }
.an-kapitelzeile__zahl { font-size: var(--t-xs); color: var(--c-text-faint); }
.an-kapitelzeile__werkzeuge { display: flex; gap: var(--s-1); }
.atelier .an-kapitelzeile input[type='text'] { min-block-size: 2.5rem; border-radius: var(--r-md); }

/* Namensliste: schwarze Pillen mit Umbruch — so rendert sie auch im PDF. */
.an-pillen { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.an-pille {
  display: inline-flex;
  align-items: center;
  gap: var(--s-2);
  padding: var(--s-1) var(--s-2) var(--s-1) var(--s-3);
  font-size: var(--t-sm);
  color: var(--c-text);
  background: #000;
  border: var(--line);
  border-radius: var(--r-full);
}
.an-pille button {
  display: grid;
  place-items: center;
  inline-size: 1.25rem;
  block-size: 1.25rem;
  padding: 0;
  color: var(--c-text-muted);
  background: none;
  border: 0;
  border-radius: var(--r-full);
  cursor: pointer;
  line-height: 1;
}
.an-pille button:hover { color: var(--c-bad); }

.an-punkte { display: flex; flex-direction: column; gap: var(--s-2); }
.an-punkt-zeile { display: flex; align-items: center; gap: var(--s-2); }
.an-punkt-zeile__nr {
  min-inline-size: 1.75rem;
  font-size: var(--t-sm);
  color: var(--c-text-faint);
  font-variant-numeric: tabular-nums;
  text-align: end;
}

/* =============================================================================
   11  PRUEFLISTE
   ============================================================================= */

.an-pruefliste { display: flex; flex-direction: column; gap: var(--s-2); }
.an-befund {
  display: flex;
  align-items: flex-start;
  gap: var(--s-3);
  padding: var(--s-3) var(--s-4);
  background: var(--c-bg-tief);
  border: var(--line);
  border-inline-start: 3px solid var(--c-line-strong);
  border-radius: var(--r-md);
  text-align: start;
  inline-size: 100%;
  font: inherit;
  color: inherit;
  cursor: pointer;
}
.an-befund--rot  { border-inline-start-color: var(--c-bad); }
.an-befund--gelb { border-inline-start-color: var(--c-warn); }
@media (hover: hover) { .an-befund:hover { background: var(--c-surface-up); } }
.an-befund__text { flex: 1 1 auto; min-inline-size: 0; }
.an-befund__ort { display: block; font-size: var(--t-xs); color: var(--c-text-muted); margin-block-start: 2px; }
.an-befund__code {
  font-size: 10px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--c-text-faint);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}

.an-ampel { display: flex; gap: var(--s-3); flex-wrap: wrap; margin-block-end: var(--s-4); }
.an-ampel__wert {
  display: flex;
  align-items: baseline;
  gap: var(--s-2);
  padding: var(--s-3) var(--s-4);
  background: var(--c-bg-tief);
  border: var(--line);
  border-radius: var(--r-md);
}
.an-ampel__zahl { font-family: var(--font-display); font-size: 1.75rem; line-height: 1; color: var(--c-text); }
.an-ampel__wert--rot  .an-ampel__zahl { color: var(--c-bad); }
.an-ampel__wert--gelb .an-ampel__zahl { color: var(--c-warn); }
.an-ampel__wert--gut  .an-ampel__zahl { color: var(--c-good); }

/* =============================================================================
   12  MELDUNGEN
   -----------------------------------------------------------------------------
   Der Toast-Behaelter der Shop-App kommt aus js/ui.js, die hier nicht laeuft.
   Deshalb ein eigener, sehr kleiner — die Optik dazu steht in
   atelier-komponenten.css Abschnitt 11 und wird nicht wiederholt.
   ============================================================================= */

.an-meldungen {
  position: fixed;
  inset-block-end: max(var(--s-5), env(safe-area-inset-bottom));
  inset-inline-start: 50%;
  translate: -50% 0;
  z-index: var(--z-toast);
  display: flex;
  flex-direction: column;
  gap: var(--s-2);
  align-items: center;
  pointer-events: none;
  inline-size: min(30rem, calc(100vw - 2rem));
}
.an-meldung {
  inline-size: 100%;
  padding: var(--s-3) var(--s-4);
  font-size: var(--t-sm);
  color: var(--c-text);
  background: var(--c-surface);
  border: var(--line-strong);
  border-inline-start: 3px solid var(--c-line-strong);
  border-radius: var(--r-lg);
  box-shadow: var(--d-3);
  pointer-events: auto;
}
.an-meldung--gut     { border-inline-start-color: var(--c-good); }
.an-meldung--schlecht{ border-inline-start-color: var(--c-bad); }
.an-meldung--info    { border-inline-start-color: var(--c-info); }
@media (prefers-reduced-motion: no-preference) {
  .an-meldung { animation: an-einfahren var(--dur-3) var(--ease-paper); }
  @keyframes an-einfahren { from { opacity: 0; transform: translateY(10px); } }
}

/* =============================================================================
   13  KLEINKRAM
   ============================================================================= */

.an-reihe { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3); }
.an-reihe--eng { gap: var(--s-2); }
.an-schieben { margin-inline-start: auto; }
.an-trenner { block-size: 1px; border: 0; background: var(--c-line); margin-block: var(--s-4); }

/* Der Startfehler: sichtbar nur, wenn die Anwendung nach vier Sekunden nicht
   gebootet hat. Erklaert genau die eine Ursache, die es dafuer gibt. */
.an-startfehler {
  margin: var(--s-6) auto;
  max-inline-size: 44rem;
  padding: var(--s-5);
  background: rgb(255 71 87 / .08);
  border: 1px solid rgb(255 71 87 / .4);
  border-radius: var(--r-lg);
  color: var(--c-text);
}
.an-startfehler code {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--t-sm);
  color: var(--c-accent-3);
}

/* Beim Drucken der Oberflaeche (nicht des PDFs) bleibt nur der Inhalt. */
@media print {
  .an-leiste, .an-stationen, .an-meldungen, .an-block__werkzeuge { display: none; }
}
