/* ============================================================
   lumafy Editor – Gestaltung
   Fassung 91 · Redesign nach `design_handoff_lumafy_ui/`
   ------------------------------------------------------------
   Eine Marke, zwei Farbmodi. Alles, was zweimal vorkommt, steht
   als Variable oben: Farben, Abstandsstufen, Rundungen, Tempo.
   Wer hier unten einen Einzelwert einträgt, macht es kaputt –
   die Abstandsstufen --a1 bis --a7 sind der ganze Trick.

   DIE REGELN, die den Entwurf tragen:

   1. VIERER-RASTER. Abstände kommen ausschließlich aus --a1..--a7
      = 4 8 12 16 24 32 48. Keine 14, keine 22, keine 26.
   2. EINE SCHRIFTSKALA, --s1..--s6 = 12 13 14 16 20 26. Wer eine
      siebte Größe braucht, braucht in Wahrheit eine andere Stufe.
   3. DER AKZENT HAT GENAU EINE BEDEUTUNG: „hier ist die Handlung".
      Nicht Werbung, nicht Verzierung, nicht Hervorhebung.
      --akzent trägt NIE Fließtext. Als Fläche nur mit --auf-akzent
      darauf, als Schrift nur über --akzent-text.
   4. EIN HAUPTKNOPF JE SEITE. Alles andere ist Umriss-Knopf.
      Zerstörende Aktionen sind Umriss-Knöpfe in --rot; nur der
      Notfall-Auslöser ist eine rote Fläche.
   5. NUR EINE KARTENSORTE: --flaeche, 1px --linie, --r2,
      --schatten-1. Keine zweite Variante erfinden.
   6. KÖPFE VON LISTEN UND ABSCHNITTEN setzen mono, 13px,
      letter-spacing .1em, Großbuchstaben, Farbe --beschriftung.
   7. ZAHLEN SETZEN MONO: Preise, Uhrzeiten, Speicherwerte,
      Zähler, Kopplungscodes.
   8. SCHWARZE FLÄCHEN BLEIBEN SCHWARZ (--dunkel). Das sind
      Bildschirmvorschauen; sie sehen in beiden Modi gleich aus.

   NACHGERECHNET am 23.08.2026 (nicht geschätzt – jede Zahl unten
   ist mit der WCAG-Formel gegen den angegebenen Grund gerechnet).
   Zwei Dinge, die der Entwurf nicht nennt und die deshalb hier
   festgehalten sind:

   a) --beschriftung hält AA auf --creme (4,97 hell / 5,13 dunkel)
      und auf --flaeche (5,18 / 4,85). Auf --flaeche-3 fällt es auf
      4,20 bzw. 3,97 und ist damit UNTER AA. Beschriftungstext
      gehört deshalb nie auf --flaeche-3; dort steht --gedaempft
      (5,81 hell). Heute betrifft das keine Regel, es ist eine
      Grenze für künftige.
   b) --schatten-2 ist im Entwurf ein sehr flacher Schatten für
      leicht abgehobene Flächen. Schwebende Ebenen – Menüs, Hinweise,
      Dialoge – brauchen mehr und nehmen --schatten-3. Der Entwurf
      beschreibt sie nicht, die Leiter bleibt: 1 = Karte,
      2 = leicht abgehoben, 3 = schwebend.
   ============================================================ */
:root{
  /* Das Schloss in gesperrten Feldern (KV5, Fassung 321). Ein Bild im
     Feld, weil ein Eingabefeld keinen ::after trägt; ein mittleres Grau,
     das auf beiden Grundflächen steht. */
  --schloss-bild:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238A847A' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='11' width='14' height='10' rx='2'/%3E%3Cpath d='M8 11V7a4 4 0 0 1 8 0v4'/%3E%3C/svg%3E");
  /* ---- Flächen und Text ---- */
  --creme:#FBFAF8;          /* Papier – Seitenhintergrund */
  --flaeche:#FFFFFF;        /* Karten, Dialoge */
  --flaeche-2:#F4F2EE;      /* leicht abgesetzt */
  --flaeche-3:#EAE7E1;      /* Etiketten, Chips */
  --flaeche-4:#E6E2DB;      /* Platzhalter, leere Bildflächen */
  --tinte:#17150F;          /* 17,5:1 auf Papier, 18,3:1 auf Weiß */
  --auf-tinte:#FBFAF8;
  --gedaempft:#5C574E;      /* 6,87:1 auf Papier, 7,17:1 auf Weiß */
  --gedaempft-weich:#8C857A;/* 3,50:1 – NUR für Dinge ohne Textbedeutung */
  --beschriftung:#736C63;   /* 4,97:1 auf Papier – siehe Anmerkung (a) oben */
  --linie:#E4E0D9;
  --linie-stark:#CFC9BF;
  --dunkel:#0C0C0C;         /* Bildschirmflächen – bleibt in beiden Modi schwarz */
  /* Das Band, solange der Betreiber in einem Kundenkonto steht
     (Fassung 149). Ein Ton unter --dunkel, in BEIDEN Modi gleich:
     Es ist der einzige Balken dieser Art in der Anwendung und soll
     auffallen, auch nach der hundertsten Verwendung. Deshalb hier
     als Token und nicht als nackte Hexzahl im Rumpf. */
  --kk-grund:#2B2214; --auf-kk:#FDFBF7;   /* 14,8:1 */
  --gewaehlt:#17150F; --auf-gewaehlt:#FBFAF8;   /* 17,50:1 */
  /* Fassung 424 (Plan 420): das Tagesband in „Was läuft hier?“ — Ruhezeit
     als Spur. Und das Rechteck der Miniatur in der Bildschirmliste
     (Prüfung von 421: dunkel lag es mit --flaeche-3 bei 1,35:1 auf --dunkel). */
  --band-aus:#EAE7E1;
  --zeilen-bild:#EAE7E1;
  --punkt-aus:#C6C0B6;      /* Zustandspunkt: kein Lebenszeichen */

  /* ---- Signalfarben ---- */
  --akzent:#F5A623;
  /* Der Fokusring (Fassung 406, L-609, ADR-082). Bernstein selbst steht
     auf Papier bei 1,94:1 und auf --flaeche-3 bei 1,64:1 — zu schwach für
     den Ring, an dem ein Tastaturbediener sieht, wo er ist (WCAG 1.4.11:
     3:1). Dieses dunklere Bernstein: 3,88:1 auf Papier, 4,05:1 auf Weiß,
     3,62:1 auf --flaeche-2, 3,28:1 auf --flaeche-3, 3,13:1 auf --flaeche-4,
     3,59:1 auf --akzent-weich. Im Dunkelmodus ist er wieder Bernstein. */
  --fokus:#B36F00;
  /* Die Bühne der freien Folie (Fassung 202): Markierungen auf dem
     Bild des Kunden, in beiden Modi gleich — sie liegen auf seinem
     Bild, nicht auf unserem Papier. */
  --buehne-wahl:#F5A623;
  --buehne-ueber:#E5484D;
  --auf-akzent:#1A1206;     /* 9,14:1 – auf dem Akzent steht DUNKLER Text, nie weißer */
  --akzent-weich:#FCF0DC;
  --feld-rand:#857E73;      /* Rand von Eingabefeldern (Stück 02), 4,02:1 auf Weiß */
  --blauBg:#E6EEF5;         /* „Wird gesendet" (Stück 02), --blau darauf 6,72:1 */
  /* Hinter Dialogen, Einführung, Seitenblatt und der Handy-Schublade, eine
     Stelle für alle vier (Fassung 406, F12). Bis 405 trug jede ihren eigenen
     Wert, und dieses Token benutzte keine. */
  --abdeckung:rgba(23,21,15,.38);
  --marke-bild:rgba(14,11,6,.84);    /* Marke „Foto 10:21" auf der Miniatur (Stück 03) */
  --marke-bild-text:#F6F2EA;         /* darauf ≥ 15:1, auf jedem Bild */
  --ruhe-schleier:rgba(10,8,5,.62);  /* Ruhezeit über der Miniatur; Text darauf ≥ 6,34:1 */
  --ruhe-flaeche:#0E0B06;            /* Ruhezeit statt Titelbild (D1); Text darauf ≥ 17:1, in beiden Modi */
  --ruhe-mond:#F5A623;               /* der Mond darauf, Bernstein (nur Zeichen) */
  /* Anmelden (Fassung 331, Vorschlag 1a): im Look der Startseite, in BEIDEN
     Farbmodi gleich — dunkle Fläche, helle Karte. Deshalb eigene Werte,
     die der Dunkelmodus nicht umstellt. */
  --anm-grund:#0E0B06; --anm-text:#F6F2EA; --anm-leise:#C9C1B3; --anm-rahmen:#1C1812;
  --anm-karte:#FBFAF8; --anm-tinte:#17150F; --anm-gedaempft:#5C574E; --anm-feld:#FFFFFF;
  --anm-feldrand:#8C857A;   /* 3,4:1 auf Weiß — der Entwurf nimmt #D6D0C4 (1,4:1), zu schwach für ein Eingabefeld */
  --anm-trenner:#E4E0D9; --anm-akzent-text:#8A5200; --anm-knopf-text:#1A1206;
  --anm-fokus:#B36F00;     /* Fokusring in der hellen Karte, beide Modi: 3,88:1 (Fassung 406) */
  --anm-rot:#A8321F; --anm-rot-grund:#FBE9E5; --anm-rot-text:#7A2415;
  --anm-gruen:#1F6B34; --anm-gruen-grund:#E7F1E7; --anm-grau:#F0EDE8; --anm-bernstein-weich:#FCF0DC;
  --anm-praxis-grund:#F7FAF9; --anm-praxis-text:#10302E; --anm-praxis-akzent:#0F6E6A;
  --anm-empfang-grund:#1D3A33; --anm-empfang-text:#F4EFE6; --anm-empfang-akzent:#C9A96A;
  --geraet-rahmen:#2A2319;           /* Rahmen ums Bildschirmfoto (D1), damit es nicht wie das Titelbild aussieht */
  --vk-dunkel:#141210;               /* Logo-Vorschau (D13): dunkle Vorlage, in beiden Modi */
  --vk-hell:#F6F1E7;                 /* Logo-Vorschau (D13): helle Vorlage */
  --vk-balken-dunkel:#5E574C;        /* Textbalken darauf (nur Fläche) */
  --vk-balken-hell:#C9C0B0;
  --kachel-leer-hell:#5C574E;        /* „Noch keins hinterlegt." auf heller Logokachel: ≥ 5,97:1 (F-27) */
  --kachel-leer-dunkel:#ADA69A;      /* dasselbe auf der schwarzen Kachel: 8,1:1 */
  --akzent-text:#8A5200;    /* 6,12:1 auf Papier, 5,67:1 auf --akzent-weich */
  --gruen:#2F6B3A; --gruenBg:#E7F1E7;   /* 6,13:1 auf Papier */
  --gelb:#8A5200;  --gelbBg:#FCF0DC;    /* 5,67:1 */
  --rot:#A8321F;   --rotBg:#FBE9E5; --rot-text:#8F2A19;  /* 6,41:1 bzw. 7,12:1 */
  --blau:#21557E;                       /* 7,55:1 */
  --neutral:#5C574E; --neutralBg:#EFEDE8;               /* 6,13:1 */

  /* ---- Abstandsstufen: die einzige erlaubte Quelle für Abstände ---- */
  --a1:4px; --a2:8px; --a3:12px; --a4:16px; --a5:24px; --a6:32px; --a7:48px;
  /* Breite der Hilfslinien auf der Bühne (Fassung 213). Der Editor setzt
     sie beim Skalieren auf 2/Maßstab; dieser Wert ist der Rückfall. */
  --lay-linie:2px;

  /* ---- Rundungen ---- */
  --r1:8px; --r2:12px; --r3:16px; --r4:20px; --r-voll:999px;

  /* ---- Schatten und Tempo ---- */
  --schatten-1:0 1px 2px rgba(26,20,11,.06);   /* Karte */
  --schatten-2:0 2px 8px rgba(26,20,11,.07);   /* leicht abgehoben */
  --schatten-3:0 16px 44px rgba(26,20,11,.18); /* schwebend: Menü, Dialog, Hinweis */
  --takt:.12s;

  /* ---- Schriftskala: sechs Stufen, mehr gibt es nicht ----
     --s4 (16px) ist zugleich die Untergrenze für Eingabefelder:
     darunter zoomt iOS beim Antippen in die Seite hinein. */
  --s1:12px;   /* Meta, Zähler, Zeitangaben */
  --s2:13px;   /* Hinweise, Unterzeilen, Textknöpfe, mono-Köpfe */
  --s3:14px;   /* Knöpfe, Beschriftungen, Reiter */
  --s4:16px;   /* Fließtext und alle Eingabefelder */
  --s5:20px;   /* Kartentitel, Dialogtitel */
  --s6:26px;   /* Seitentitel in Karten und Dialogen */
  /* Die alten Namen zeigen auf die Skala – so bleibt jede Regel
     weiter unten gültig, ohne dass irgendwo ein Einzelwert steht. */
  --s-klein:var(--s1); --s-knopf:var(--s3);
  --s-normal:var(--s4); --s-gross:var(--s5);

  /* Eine Stelle für die Schreibmaschinenschrift. Gebraucht überall
     dort, wo ZAHLEN untereinander stehen sollen, und für die
     Abschnittsköpfe. */
  --mono:"IBM Plex Mono",ui-monospace,'SF Mono',Consolas,'Liberation Mono',monospace;

  --seitenleiste:296px;
  --kopf-hoehe:0px;
  --leiste-hoehe:0px;       /* Handy: Höhe der unteren Handlungsleiste */
}

/* Dunkelmodus – KEINE Umkehr der hellen Fassung, sondern dieselbe
   Ordnung noch einmal gedacht. Das Bernstein bleibt in beiden
   Fassungen dieselbe Farbe mit derselben Bedeutung. */
[data-thema="dunkel"]{
  --creme:#131210;
  --feld-rand:#756E63;      /* 3,52:1 auf --flaeche */
  --blauBg:#17222C;         /* --blau darauf 8,02:1 */
  --abdeckung:rgba(0,0,0,.55);
  --flaeche:#1A1815;
  --flaeche-2:#22201C;
  --flaeche-3:#2C2924;
  --flaeche-4:#26231F;
  --tinte:#F4F1EA;          /* 16,60:1 auf Papier */
  --auf-tinte:#131210;
  --gedaempft:#ADA69A;      /* 7,75:1 auf Papier, 7,34:1 auf --flaeche */
  --gedaempft-weich:#7E776C;
  --beschriftung:#938C82;   /* 4,89:1 auf --flaeche-2, 5,33:1 auf --flaeche (K-34, Fassung 307) – siehe Anmerkung (a) oben */
  --linie:#2E2B26;
  --linie-stark:#3E3A33;
  --gewaehlt:#2C2924; --auf-gewaehlt:#F4F1EA;   /* 12,84:1 */
  --band-aus:#0C0C0C;       /* Zeitblock darauf 3,17:1, --akzent 9,7:1 */
  --zeilen-bild:#A79E90;    /* 7,39:1 auf --dunkel (bis 423: 1,35:1) */
  --punkt-aus:#4A453D;
  --akzent-weich:#2A2013;
  --fokus:#F5A623;          /* Bernstein: ≥ 7,15:1 auf jeder dunklen Fläche (Fassung 406) */
  --akzent-text:#F0B14B;    /* 9,36:1 auf --flaeche, 9,89:1 auf Papier */
  --gruen:#7FC08A; --gruenBg:#1B2A1E;   /* 7,02:1 */
  --gelb:#F0B14B;  --gelbBg:#2A2013;    /* 8,44:1 */
  --rot:#F0907C;   --rotBg:#2E1A16; --rot-text:#F4A895;  /* 7,04:1 bzw. 8,53:1 */
  --blau:#8FBCE0;                       /* 9,31:1 */
  --neutral:#ADA69A; --neutralBg:#22201C;               /* 6,74:1 */
  --schatten-1:0 1px 2px rgba(0,0,0,.4);
  --schatten-2:0 2px 10px rgba(0,0,0,.45);
  --schatten-3:0 16px 46px rgba(0,0,0,.6);
}

/* ---- Die dunkle Seitenleiste: die Markenfläche des Entwurfs ----
   MODUSUNABHÄNGIG. Sie ist in beiden Farbmodi dieselbe dunkle
   Fläche; im Dunkelmodus trennt sie nicht mehr die Helligkeit vom
   Arbeitsbereich, sondern die Linie und der wärmere Ton. Das ist
   eine bewusste Änderung gegenüber Fassung 90, wo sie im
   Dunkelmodus zusätzlich abgedunkelt wurde. */
:root,[data-thema="dunkel"]{
  --seite-oben:#1A140B; --seite-unten:#0E0B06;
  --seite-text:#F6F2EA;                 /* 16,37:1 auf --seite-oben */
  --seite-gedaempft:#A79E90;            /*  6,91:1 – reicht für Fließtext */
  --seite-linie:rgba(255,255,255,.10);
  --seite-flaeche:rgba(255,255,255,.06);
  /* Dieselbe Fläche, aber UNDURCHSICHTIG. Sie ist für die nativen
     Bedienelemente in der Seitenleiste (Kundenauswahl, Suchfeld)
     gedacht: Ein Browser malt unter ein <select> seine eigene
     Feldfarbe. Ist die hell, liegen unsere 6 % Weiß auf Weiß, und in
     der dunklen Leiste steht ein weißer Kasten mit beigem Text. */
  --seite-flaeche-fest:#231B10;
  /* Der Zähler „braucht dich“ an „Bildschirme“ (Fassung 416, ADR-090):
     Werte aus dem Entwurf Bedienlogik (README §2). Schrift auf Fläche
     nachgerechnet 8,70:1 (der Entwurf nennt 8,9:1). Die Fläche selbst hebt
     sich von der Leiste kaum ab (1,41:1 auf --seite-oben) — die Auskunft
     tragen Zeichen, Zahl und der vorgelesene Satz, nicht die Farbe. */
  --braucht:#5A1D18;        --auf-braucht:#F8C9C3;
  /* Zeitblöcke im Tagesband (Fassung 424, Plan 420, Entwurf „#8A5600“):
     ein eigenes Token, weil --akzent-text dunkel mit 1,07:1 auf --akzent
     läge (Bauplan 420). Gegen --akzent 3,04:1 in beiden Modi. */
  --zeitblock:#8A5600;
  /* Text auf dem Zeitblock im Wochenraster (Fassung 436): 6,16:1 in beiden Modi. */
  --auf-zeitblock:#FFFFFF;

  /* ---- Zustandsfarben auf dunklem Grund ----
     Die Zustandspunkte der Seitenleiste stehen in BEIDEN Farbmodi
     auf der fast schwarzen Fläche. --gruen und --rot sind für
     helles Papier gerechnet und dort kaum zu erkennen; deshalb
     eigene, hellere Töne.

     Bis Fassung 90 standen genau diese Werte als nackte Hexzahlen
     an elf Stellen im Blatt verteilt — dasselbe Grün einmal als
     #4ADE80 und einmal als #22A45D, dasselbe Rot an drei Stellen.
     Das ist die Art Abweichung, die niemand sucht und jeder sieht.
     Jetzt stehen sie einmal hier.

     Nachgerechnet gegen --seite-oben: 10,49 · 6,24 · 7,13 · 7,55.
     Rot und Bernstein liegen bewusst weit auseinander — „meldet
     sich nicht" darf nicht wie „hier ist die Handlung" aussehen. */
  --punkt-an:#4ADE80;          /* läuft */
  --punkt-still:#F0705A;       /* meldet sich nicht */
  --punkt-feierabend:#94A3B8;  /* dunkel, so geplant */
  --punkt-an-fest:#166534;     /* läuft, auf dem gewählten Eintrag */
  --seite-rot:#F08B78;         /* Notfallzeichen in der Navigation */

  /* ---- Der Notfall ----
     Die EINZIGE rote Fläche der Anwendung (Regel 4). Sie sieht in
     beiden Farbmodi gleich aus — wie die Bildschirmvorschauen und
     aus demselben Grund: Wer sie sieht, soll nicht erst überlegen,
     welchen Modus er eingestellt hat. Weiß darauf: 8,91:1.

     Die drei Stufen einer Meldung gehören zusammen und sind aus
     demselben Grund modusunabhängig. Sie sind KEINE Signalfarben
     im Sinne von --rot/--gelb/--blau: Die stehen für „etwas ist
     kaputt", diese hier für „so dringend ist die Ansage". Wer sie
     zusammenlegt, hat eine Farbe mit zwei Bedeutungen.

     ACHTUNG, hier stand ein Kommentarende zu viel — und das war kein
     Schönheitsfehler, sondern der Grund, warum der Knopf „Meldung
     jetzt anzeigen" auf der Notfallseite weiß auf weiß stand und
     niemand ihn drücken konnte. Ein zusätzliches Kommentarende
     beendet den Kommentar an der falschen Stelle; der Rest des
     Textes wird dann als Deklaration gelesen und verschluckt alles
     bis zum nächsten Semikolon — hier genau `--notfall`. Der
     Browser fand danach keine Farbe mehr, `background:var(--notfall)`
     blieb durchsichtig, und `--auf-notfall` (Weiß) stand auf dem
     hellen Grund der Seite. Betroffen waren außerdem das
     Störungsband oben, der Hinweisstreifen und die Stufe „Notfall"
     im Segmentschalter. Nachgemessen am 23.08.2026 im laufenden
     System: `--notfall` war leer, `--auf-notfall` weiß.

     BEFUND beim Nachrechnen für Fassung 91: Auf der Stufe
     „Wichtig" stand weißer Text — 3,63:1, also UNTER AA. Dasselbe
     Versehen wie beim Bernstein, und dieselbe Lösung: Ein warmer
     Gelbton trägt dunklen Text, keinen hellen. Dunkel darauf:
     5,11:1. Deshalb trägt jede Stufe ihre Textfarbe selbst mit
     sich und nicht der Knopf pauschal Weiß. */
  --notfall:#8E1F14;         --auf-notfall:#FFFFFF;   /*  8,91:1 */
  /* Ab Fassung 102 dieselbe Farbe, die der Bildschirm wirklich
     zeigt: #7E4E08 aus `templates/allgemein/notfall-16-9`. Bis
     Fassung 101 stand hier #F5A623 — Zeichen für Zeichen der
     Bernstein der Handlung. Zwei Fehler auf einmal: Die Oberfläche
     zeigte dem Betreiber eine Farbe, die auf keinem Bildschirm je
     erscheint, und die eine Farbe, die „hier ist die Handlung"
     bedeutet, stand auf einem Schalter, der nichts auslöst.
     Weiß darauf: 7,05:1, im Bestand der Vorlage nachgerechnet. */
  --stufe-warnung:#7E4E08;   --auf-warnung:#FFFFFF;   /*  7,05:1 */
  --stufe-info:#123A5E;      --auf-info:#FFFFFF;      /* 11,72:1 */

  /* Rot auf einer DUNKLEN Leiste (Fassung 177). `--rot` wechselt
     mit dem Farbmodus und ist im hellen ein dunkles Ziegelrot
     (#A8321F); auf der Auswahlleiste steht es damit bei 2,73:1 und
     ist unter jeder Schwelle. Die Leisten sind in BEIDEN Modi
     dunkel, also braucht die Farbe darauf auch in beiden denselben
     Wert — deshalb steht sie hier bei den modusunabhängigen Tokens
     und nicht oben bei den Paaren.

     Nachgerechnet mit der WCAG-Formel am 12.09.2026, auf beiden
     Leistengründen: 9,46:1 auf `--gewaehlt` im hellen Modus
     (#17150F), 7,51:1 im dunklen (#2C2924). `--rot` läge dort bei
     2,73:1 bzw. 2,17:1. */
  --rot-auf-dunkel:#F4A895;  --rot-auf-dunkel-flaeche:rgba(244,168,149,.16);
  --rot-auf-dunkel-linie:rgba(244,168,149,.55);

  /* Größere Bewegungen — eine Schublade über 340px, ein Blatt, das
     hochfährt. --takt (.12s) ist für Farbe und Rand gedacht; eine
     Fläche, die den halben Bildschirm quert, wirkt damit gehetzt.
     Zwei Werte, nicht fünf: bis Fassung 90 standen hier .14, .18,
     .2 und .22 nebeneinander. */
  --takt-weit:.2s;
}

/* ---------- Schrift ----------
   IBM Plex Sans 400/600 und IBM Plex Mono 400, beide SIL OFL 1.1,
   selbst gehostet unter public/editor/schriften/. Keine Ressource
   von außen: die CSP des Editors erlaubt `font-src 'self'` und
   sonst nichts.

   FEHLT EINE DATEI, fällt der Browser auf system-ui bzw.
   ui-monospace zurück. Das Layout hält das aus, weil keine Breite
   an einer Textlänge hängt – es sieht nur weniger nach uns aus.
   `font-display:swap` sorgt dafür, dass in dieser Zeit Text steht
   und keine leere Fläche. */
@font-face{
  font-family:"IBM Plex Sans";
  src:url("/schriften/IBMPlexSans-Regular.woff2") format("woff2");
  font-weight:400;font-style:normal;font-display:swap;
}
@font-face{
  font-family:"IBM Plex Sans";
  src:url("/schriften/IBMPlexSans-SemiBold.woff2") format("woff2");
  font-weight:600;font-style:normal;font-display:swap;
}
@font-face{
  font-family:"IBM Plex Mono";
  src:url("/schriften/IBMPlexMono-Regular.woff2") format("woff2");
  font-weight:400;font-style:normal;font-display:swap;
}

*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--creme);color:var(--tinte);
  font-family:"IBM Plex Sans",system-ui,-apple-system,'Segoe UI',Helvetica,Arial,sans-serif;
  font-size:var(--s-normal);line-height:1.5;
  -webkit-font-smoothing:antialiased;
  transition:background var(--takt) linear,color var(--takt) linear}
.versteckt{display:none !important}

/* Ein Symbol schrumpft nie und fängt nie den Zeiger. Ohne `flex:none`
   drückt eine enge Zeile es zu einem Strich zusammen; ohne
   `pointer-events:none` landet ein Klick auf dem SVG statt auf dem
   Knopf darum, und `event.target` ist dann das Pfad-Element. */
svg{flex:none;pointer-events:none}

/* Abschnitts- und Listenköpfe: die eine Stelle für Regel 6.
   Wer einen Kopf über eine Liste oder einen Formularabschnitt
   setzt, nimmt diese Klasse und erfindet keine zweite. */
.mono-kopf{font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);font-weight:400}
/* Zahlen. Tabellenziffern, damit Spalten untereinander stehen. */
.zahl{font-family:var(--mono);font-variant-numeric:tabular-nums}

/* Tastaturbedienung: ein Fokusring, überall derselbe, nur wenn er
   gebraucht wird. Ohne das ist die Oberfläche für die Tastatur blind. */
/* ---------- Welchem Farbschema folgen die Bedienelemente? ----------
   Ohne diese Angabe malt der Browser Rollbalken, Datums- und
   Zeitwähler, das Ausklappmenü eines <select> und die Ausfüllhilfe
   IMMER hell – auch im Dunkelmodus. Es ist eine Zeile, und ohne sie
   hilft kein einziger Farbwert weiter oben: Native Bedienelemente
   fragen nicht das Stylesheet, sondern das Farbschema. */
:root{color-scheme:light}
:root[data-thema="dunkel"]{color-scheme:dark}
/* Die Seitenleiste ist in BEIDEN Modi dunkel. Also gilt für alles
   darin auch in der hellen Fassung das dunkle Schema – sonst sitzt
   ein hell gemaltes Bedienelement auf dunklem Grund. */
.seite{color-scheme:dark}

:focus{outline:none}
:focus-visible{outline:2px solid var(--fokus);outline-offset:2px;border-radius:3px}
input:focus-visible,select:focus-visible,textarea:focus-visible{outline-offset:-1px}
/* Fassung 406 (L-609): Der Ring liegt 2 px NEBEN dem Element, auf der
   Fläche darum herum. Gegen die muss er stehen, nicht gegen den Knopf.
   Bis 405 bekam hier jeder Hauptknopf die dunkle Schrift des Bernsteins
   als Ringfarbe: im hellen Modus gut sichtbar, im Dunkelmodus 1,01:1 auf
   Papier, also unsichtbar, und auf den dunklen Leisten in beiden Modi.
   --fokus steht neben dem Bernsteinknopf wie neben jedem anderen bei
   mindestens 3:1. Die Klasse für Bernsteinflächen, die hier mit genannt
   war, benutzte kein Skript; sie ist mit weg. */

/* ---------- Zum Inhalt springen (WCAG 2.4.1, Stufe A) ----------
   Sie steht als erstes Element im Rumpf, ist unsichtbar und kommt
   beim ersten Tabdruck hervor. Nicht `display:none` und nicht
   `visibility:hidden` – beides nimmt dem Element auch den Fokus,
   und dann gibt es die Marke für genau die Leute nicht, für die
   sie gebaut ist. Sie steht deshalb außerhalb des Bildes und
   kommt beim Fokus hinein.

   Der Farbwechsel ist Absicht: Bernstein trägt DUNKLEN Text
   (--auf-akzent, 9,14:1), nie weißen. Regel 3 der Gestaltung. */
.sprungmarke{
  position:fixed;top:var(--a3);left:var(--a3);z-index:9999;
  transform:translateY(-200%);
  background:var(--akzent);color:var(--auf-akzent);
  padding:var(--a3) var(--a5);border-radius:var(--r1);
  font-size:var(--s3);font-weight:600;text-decoration:none;
  box-shadow:var(--schatten-3);
  transition:transform var(--takt) ease-out
}
.sprungmarke:focus{transform:translateY(0)}
/* Das Sprungziel selbst bekommt `tabindex="-1"`, damit der Fokus
   dort BLEIBT. Einen Ring braucht es dafür nicht – der Inhalt ist
   keine Bedienung, und ein Rahmen um die halbe Seite verwirrt mehr,
   als er hilft. */
main.haupt:focus{outline:none}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;transition-duration:.001ms !important}
}

/* ---------- Knöpfe ---------- */
/* 44 × 44 px ist die Grenze, unter der Fehlgriffe anfangen — und
   zwar nicht erst auf dem Handy. Ein Berührungsbildschirm am
   Schreibtisch ist heute der Normalfall; bis Fassung 91 galt die
   Grenze nur unter 860px Fensterbreite. Ausgenommen bleiben
   Textknöpfe: die stehen in einem Satz und dürfen ihn nicht
   auseinanderziehen.
   --r1 statt --r2: Knöpfe sitzen in Karten, und die haben --r2.
   Gleiche Rundung innen wie außen sieht aus wie ein Fehler. */
button{font-family:inherit;cursor:pointer;border:0;border-radius:var(--r1);
  padding:var(--a3) var(--a4);font-size:var(--s3);font-weight:600;
  display:inline-flex;align-items:center;justify-content:center;gap:var(--a2);
  background:var(--akzent);color:var(--auf-akzent);
  transition:filter var(--takt) ease,background var(--takt) ease,
             border-color var(--takt) ease,color var(--takt) ease}
button:not(.text-knopf){min-height:44px}
/* Hover und Aktiv gehen ABWÄRTS, nicht aufwärts. Ein Knopf, der
   beim Zeigen heller wird, sieht aus, als würde er sich zurückziehen;
   ein dunklerer sieht gedrückt aus. Werte aus dem Zustandsblatt. */
button:hover{filter:brightness(.94)}
button:active{filter:brightness(.88)}
/* Umriss-Knopf: transparent, EIN Strich in --linie-stark. Das ist
   alles, was neben dem einen Hauptknopf einer Seite stehen darf. */
/* Fassung 406 (F11): Der Strich nimmt --feld-rand wie ein Eingabefeld,
   4,02:1 auf Weiß. --linie-stark stand bei 1,65:1, und ein Knopf, dessen
   Umriss man nicht sieht, ist für viele kein Knopf. */
button.sek{background:transparent;border:1px solid var(--feld-rand);color:var(--tinte)}
button.sek:hover{background:var(--flaeche-2);filter:none}
button.sek:active{background:var(--flaeche-3);filter:none}
/* ============================================================
   Knöpfe auf DUNKLEM Grund — eine Stelle für alle (Fassung 177)
   ------------------------------------------------------------
   `button.sek` trägt `color: var(--tinte)`, also die Schriftfarbe
   der hellen Fläche. Auf einer dunklen Leiste ist das dunkel auf
   dunkel: Der Knopf ist da, tut auch etwas, und man sieht ihn erst,
   wenn der Zeiger darüberfährt. Gemeldet am 12.09.2026 an der
   Auswahlleiste der Mediathek („Auswahl aufheben" war ein leeres
   Rechteck), `ops/referenz/lumafy-medien-auswahlleiste-unsichtbarer-knopf-2026-09-12.png`.

   Derselbe Fehler war vorher schon zweimal einzeln behoben worden —
   an der Großansicht und am Betreuungsband. Beim dritten Mal gehört
   er an EINE Stelle, und diese Liste ist sie.

   **Wer eine neue dunkle Fläche baut, trägt sie hier ein.** Die
   Regel nimmt Schrift und Rand aus `currentColor`, also aus der
   Farbe, die die Fläche ohnehin für ihren Text setzt — damit stimmt
   sie in jedem Farbmodus, ohne dass hier ein zweiter Farbwert
   gepflegt wird. Die feineren Werte der beiden älteren Flächen
   stehen weiter unten und gewinnen dort; diese Regel ist der
   Rückfall, der keine Fläche mehr vergisst. */
.gross-leiste button.sek,
.kk-band button.sek,
.wahlleiste button.sek{background:transparent;color:inherit;
  border:1px solid currentColor}
.gross-leiste button.sek:hover,
.kk-band button.sek:hover,
.wahlleiste button.sek:hover{background:rgba(255,255,255,.14);
  color:inherit;border-color:currentColor;filter:none}
.gross-leiste button.sek:active,
.kk-band button.sek:active,
.wahlleiste button.sek:active{background:rgba(255,255,255,.22);filter:none}
.wahlleiste .text-knopf{color:inherit;text-decoration:underline}
/* Der Fokusring auf diesen Leisten bleibt Bernstein (Fassung 406): 7,72:1
   auf --kk-grund, 9,01:1 auf --gewaehlt. --fokus ist im hellen Modus das
   dunklere Bernstein für helles Papier und stünde hier nur bei 3,87:1.
   Hauptknöpfe hatten bis 405 sogar die dunkle Bernsteinschrift als Ring,
   1,02 bis 1,18:1 auf diesen Flächen. */
.kk-band :focus-visible,.wahlleiste :focus-visible,.kk-hinweis :focus-visible,
.dialog.vorfuehr .dialog-kopf :focus-visible{outline-color:var(--akzent)}

/* Ein ZERSTÖRENDER Knopf auf dunklem Grund bleibt rot — aber nicht
   in `--rot`: Das wechselt mit dem Farbmodus und ist im hellen ein
   dunkles Ziegelrot, das auf der fast schwarzen Leiste bei 2,4:1
   steht. Dafür gibt es `--rot-auf-dunkel` im Tokenblock: EIN Wert
   für beide Modi, weil die Leiste in beiden dunkel ist.
   Die Bedeutung bleibt: Rot heißt „das nimmt etwas weg". */
.wahlleiste button.gefahr,
.kk-band button.gefahr{background:transparent;color:var(--rot-auf-dunkel);
  border:1px solid var(--rot-auf-dunkel-linie)}
.wahlleiste button.gefahr:hover,
.kk-band button.gefahr:hover{background:var(--rot-auf-dunkel-flaeche);
  border-color:var(--rot-auf-dunkel);color:var(--rot-auf-dunkel);filter:none}

/* Auch ein AUSWAHLFELD steht auf der dunklen Leiste (seit die
   Auswahl in einen Ordner wandern kann). Ohne diese Regel erbt es
   die helle Fläche der Formulare und sitzt als weißer Block in
   einer schwarzen Leiste. Die Einträge der Klappliste zeichnet das
   Betriebssystem — dort hilft `color-scheme`. */
.wahlleiste select{background:transparent;color:inherit;
  border:1px solid currentColor;border-radius:8px;
  padding:8px var(--a3);width:auto;color-scheme:dark}
.wahlleiste select:hover{background:rgba(255,255,255,.14)}

/* Zerstörend: Umriss in Rot. Eine rote FLÄCHE trägt in der ganzen
   Anwendung nur der Notfall-Auslöser. */
button.gefahr,button.knopf-loeschen{background:transparent;
  border:1px solid var(--linie-stark);color:var(--rot)}
button.gefahr:hover,button.knopf-loeschen:hover{background:var(--rotBg);
  border-color:var(--rot);filter:none}
/* ---------- Der Notfall-Auslöser ----------
   Die EINZIGE rote Fläche der Anwendung. 56px hoch, weil er im
   Ernstfall in Eile getroffen wird.

   BEFUND gegen BAUTEILE.md: Dort steht `background: var(--rot);
   color: #fff` mit der Angabe 5,4:1. Im HELLEN Modus stimmt das
   ungefähr (gerechnet 6,69:1). Im DUNKELMODUS ist --rot aber
   #F0907C — ein heller Lachston —, und weißer Text darauf erreicht
   2,34:1. Der wichtigste Knopf der Anwendung wäre dort unlesbar.
   Deshalb die modusunabhängige Fläche --notfall (8,91:1 in beiden
   Modi), dieselbe wie beim Banner. */
button.knopf-notfall{background:var(--notfall);color:var(--auf-notfall);
  border:0;min-height:56px;font-weight:600}
/* Fassung 406: Hier stand ein weißer Ring. Er liegt NEBEN dem Knopf, auf
   hellem Grund (1,17:1 auf --rotBg, 1,00:1 auf Weiß) — im hellen Modus war
   er unsichtbar. Jetzt gilt der Ring der Grundregel. */
/* `--s3` und nicht `--s5`: Ein kleiner Knopf trug die Schriftgröße
   von Kartentiteln — 20 px, während jeder andere Knopf der
   Anwendung 14 px trägt. Auf der Live-Steuerung standen „Inhalt"
   und „Bearbeiten" dadurch größer als „Szene anlegen" daneben, und
   der unwichtigere Knopf war der lautere. Einzelne ZEICHEN (×, ↑, ↓)
   brauchen die Größe wirklich — die tragen sie jetzt selbst. */
button.mini{padding:var(--a1) var(--a2);font-size:var(--s3);line-height:1;
  background:transparent;color:var(--gedaempft)}
button.mini.zeichen-knopf{font-size:var(--s5)}
button.mini:hover{color:var(--tinte);background:var(--flaeche-3);filter:none}
button:disabled{opacity:.45;cursor:not-allowed}
/* Ladend: die Beschriftung BLEIBT STEHEN und der Ring tritt davor.
   Bis Fassung 90 wurde der Text durchsichtig geschaltet – der Knopf
   war dann für einen Moment leer und niemand wusste mehr, was er
   gerade angestoßen hatte. */
button.laedt{position:relative;pointer-events:none}
button.laedt::before{content:"";display:inline-block;vertical-align:-2px;
  width:14px;height:14px;margin-right:var(--a2);
  border:2px solid currentColor;border-right-color:transparent;
  border-radius:50%;animation:kreisel .7s linear infinite}
@keyframes kreisel{to{transform:rotate(360deg)}}
.text-knopf{background:none;padding:2px 0;font-size:var(--s2);font-weight:400;
  color:var(--gedaempft);text-decoration:underline;text-underline-offset:2px}
.text-knopf:hover{color:var(--tinte);background:none;filter:none}

/* ---------- Eingaben ----------
   font-size:var(--s4) ist 16px und darf NIE kleiner werden: unter
   16px zoomt iOS beim Antippen automatisch in die Seite hinein, und
   der Bediener steht danach in einer verschobenen Ansicht. */
/* Ein Strich, nicht anderthalb, und der kräftigere der beiden Töne:
   Ein Feld muss als Feld zu erkennen sein, bevor man hineinklickt.
   --linie ist für Trennungen INNERHALB einer Fläche gedacht und war
   auf Weiß kaum zu sehen. 48px Mindesthöhe, weil 44 die Grenze ist,
   unter der Fehlgriffe anfangen — und ein Feld trifft man schlechter
   als einen Knopf, weil es keinen Rand hat, der einlädt. */
input,select,textarea{width:100%;padding:var(--a3) var(--a4);
  border:1px solid var(--linie-stark);
  border-radius:var(--r1);font-size:var(--s4);font-family:inherit;min-height:48px;
  background:var(--flaeche);color:var(--tinte);
  transition:border-color var(--takt) ease,background var(--takt) ease}
input:hover,select:hover,textarea:hover{border-color:var(--tinte)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--fokus);outline-offset:-1px;
  border-color:transparent}
/* Gesperrt sieht anders aus als leer. Ohne die abgesetzte Fläche
   klickt man dreimal hinein, bevor man es merkt. */
input[disabled],select[disabled],textarea[disabled]{background:var(--flaeche-2);
  color:var(--gedaempft);border-color:var(--linie);cursor:not-allowed}
/* Fehlerhaft: Rahmen UND ein Satz darunter. Ein roter Rahmen allein
   sagt nur „irgendwas stimmt nicht" und für Farbenblinde gar nichts. */
input[aria-invalid="true"],select[aria-invalid="true"],textarea[aria-invalid="true"]{
  border-color:var(--rot)}
.feld-fehler{font-size:var(--s2);color:var(--rot);margin-top:var(--a1);
  display:flex;align-items:center;gap:var(--a2)}
/* Preise, Uhrzeiten, Kopplungscodes (Regel 7). */
.eingabe-zahl,input[type=time],input[type=date],input[type=number]{
  font-family:var(--mono);font-variant-numeric:tabular-nums}
textarea{resize:vertical;min-height:72px;line-height:1.45}
/* ============================================================
   Häkchen tragen NICHT die Akzentfarbe (Fassung 132)
   ------------------------------------------------------------
   Hier stand `accent-color:var(--akzent)`. Am 26.08.2026 im Editor
   nachgezählt: In einer Playlist mit drei Meldungen stehen FÜNF
   angehakte Kästchen „Hervorheben" — fünf 16-px-Bernsteinquadrate,
   dazu der eine bernsteinfarbene Speicherknopf oben rechts. Damit
   sagt Bernstein auf dieser Seite nicht mehr „hier handeln", sondern
   „hier ist irgendwas".

   Die Regel dahinter ist mit dieser Fassung präzisiert (R3): Gezählt
   werden HANDLUNGSflächen, nicht Zustandsmarken. Ein Häkchen ist ein
   Zustand — es zählt nicht als zweiter Akzent, und es trägt ihn auch
   nicht (Entscheidung Cedric, 26.08.2026).
   ============================================================ */
/* Größe und Polster müssen mit zurück (Fassung 212): Die Regel oben
   gibt JEDEM `input` 48 px Mindesthöhe und ein Polster — ein Kästchen
   oder ein Punkt wurde dadurch zu einem schmalen, 48 px hohen Balken.
   Am Bildschirmfoto der Anfrage-Karten (15.09.2026) sah man es als
   orangen Strich statt eines Punktes. 18 px ist dieselbe Größe wie bei
   `.pl-wahl`, dem einzigen Kästchen, das bisher richtig aussah. */
input[type=checkbox],input[type=radio]{width:18px;height:18px;min-height:0;padding:0;
  flex:none;accent-color:var(--tinte)}
/* Beschriftungen in normaler Schreibweise. Versalien sind ein
   Betonungsmittel – wenn ALLES betont ist, ist nichts betont, und
   Großbuchstaben liest man rund 15 % langsamer. Versalien bleiben
   den Bereichstiteln vorbehalten (.seite-bereich, .seite-titel,
   .vorschau-kopf) und sonst nirgends. */
label{display:block;font-size:var(--s2);letter-spacing:0;text-transform:none;
  color:var(--beschriftung);margin:0 0 var(--a1);font-weight:600}
.leise{font-size:var(--s1);color:var(--gedaempft)}
.einzeilig{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- Anmeldung ----------
   Ab Fassung 331 nach Vorschlag 1a (design_handoff_lumafy_ui/anmelden/),
   Block „Anmelden · Vorschlag 1a“ weiter unten. */

/* ---------- Filterchips der Mediathek (Fassung 99) ----------
   Sie filtern und zählen zugleich. „Ungenutzt · 0" sagt ohne einen
   Klick, dass aufgeräumt ist. */
.med-chips{display:flex;gap:var(--a2);flex-wrap:wrap;min-width:0}
.med-chip-zahl{color:var(--gedaempft)}
.med-chip.an .med-chip-zahl{color:var(--auf-gewaehlt);opacity:.7}

/* Das Etikett im Kopf einer Live-Gruppe. Es steht dort, wo man beim
   Öffnen der Seite zuerst hinsieht, und nicht erst in der Zeile
   darunter. */
.sz-aktiv{margin-left:auto}
/* Nur das Logo auf der Anmeldekarte wird umgedreht. Die Seitenleiste
   trägt in BEIDEN Farbmodi die helle Fassung (logo-hell.png) – sie
   ist in beiden Modi eine dunkle Fläche, ein Umdrehen hätte dort ein
   dunkles Logo auf dunklem Grund ergeben. */
/* Die Fehlerzeile hält sich Platz frei, auch wenn nichts darin
   steht: Springt der Knopf beim Fehler nach unten, steht er nicht
   mehr da, wo der Zeiger hinzielt. Auf der Anmeldung gilt das nur,
   wenn wirklich etwas darin steht — dort steht der Knopf unter dem
   Feld und nicht in einer Kette von Feldern (`.anmelde-form
   .fehler:empty`). */
.fehler{color:var(--rot);font-size:var(--s-knopf);margin-top:var(--a4);min-height:20px;line-height:1.45}

/* ---------- Gerüst ----------
   Die Seitenleiste ist die Markenfläche des Entwurfs: eine dunkle,
   warme Fläche neben hellem Papier. Alles darin rechnet mit
   --seite-* und nicht mit --flaeche/--tinte – sonst kippt der
   Kontrast, sobald jemand den Farbmodus wechselt. */
#app{display:grid;grid-template-columns:var(--seitenleiste) 1fr;min-height:100vh}
.seite{background:linear-gradient(180deg,var(--seite-oben),var(--seite-unten));
  color:var(--seite-text);border-right:1px solid var(--seite-linie);
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
  box-sizing:border-box}
/* Die Wortmarke steht auf derselben senkrechten Linie wie die
   Symbole der Navigation darunter (Leistenpolster 12 px plus
   Knopfpolster 12 px). Vorher standen sie 8 px auseinander, und
   die Leiste hatte zwei linke Kanten. */
.marke{padding:var(--a5) var(--a5) var(--a4);display:flex;align-items:center;
  justify-content:space-between;gap:var(--a2)}
.marke img{height:24px;display:block}

.kundenwahl{padding:0 var(--a4) var(--a4);border-bottom:1px solid var(--seite-linie);
  margin-bottom:var(--a2)}
.kundenwahl label{margin-bottom:var(--a1);color:var(--seite-gedaempft)}
.kundenwahl select{padding:var(--a2) var(--a3);font-size:var(--s4);font-weight:600;
  background:var(--seite-flaeche-fest);border-color:var(--seite-linie);color:var(--seite-text)}
.kundenwahl .text-knopf{margin-top:var(--a2);color:var(--seite-gedaempft)}
.kundenwahl .text-knopf:hover{color:var(--seite-text)}

/* Bereichsüberschrift in der Seitenleiste – hier sind Versalien
   richtig: sie sortieren, sie beschriften nicht. */
.seite-bereich{padding:var(--a3) var(--a4) var(--a1);font-family:var(--mono);
  font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--seite-gedaempft);font-weight:400}
.seite-titel{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);
  padding:var(--a3) var(--a4) var(--a1);font-family:var(--mono);
  font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--seite-gedaempft);font-weight:400}
.seite-titel .anzahl{font-weight:600;letter-spacing:.04em;text-transform:none;font-size:var(--s1)}
.seite-titel .mini{color:var(--seite-gedaempft)}
.seite-titel .mini:hover{color:var(--seite-text);background:var(--seite-flaeche)}
.bs-suche{padding:0 var(--a3) var(--a2)}
.bs-suche input{padding:var(--a2) var(--a3) var(--a2) var(--a6);font-size:var(--s4);
  border-radius:var(--r2);background:var(--seite-flaeche-fest);border:1px solid var(--seite-linie);
  color:var(--seite-text);
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A79A88' stroke-width='2'><circle cx='11' cy='11' r='7'/><path d='M20 20l-3.5-3.5'/></svg>");
  background-repeat:no-repeat;background-position:var(--a3) center;background-size:14px}
.bs-suche input::placeholder{color:var(--seite-gedaempft)}
.liste{flex:1;overflow:auto;padding:var(--a1) var(--a3) var(--a3);scrollbar-width:thin}
.eintrag{padding:var(--a3);border-radius:var(--r2);cursor:pointer;display:flex;
  align-items:center;gap:var(--a3);margin-bottom:var(--a1);min-height:44px;
  transition:background var(--takt) ease,color var(--takt) ease}
.eintrag:hover{background:var(--seite-flaeche)}
/* Der ausgewählte Bildschirm trägt den Akzent: die Auswahl IST die
   Handlung, um die sich der ganze Arbeitsbereich dreht. */
.eintrag.aktiv{background:var(--akzent);color:var(--auf-akzent)}
.eintrag .punkt{width:8px;height:8px;border-radius:50%;background:var(--punkt-aus);flex:none}
/* Die Zustandspunkte stehen IMMER auf der dunklen Seitenleiste –
   in beiden Farbmodi. Deshalb feste helle Töne und keine Token, die
   im hellen Modus für helle Flächen gerechnet sind. Rot und Bernstein
   liegen bewusst weit auseinander: „meldet sich nicht" darf nicht wie
   der Akzent aussehen. */
.eintrag .punkt.an{background:var(--punkt-an)}
.eintrag .punkt.pause{background:var(--akzent)}
.eintrag .punkt.feierabend{background:var(--punkt-feierabend)}
.eintrag .punkt.still{background:var(--punkt-still)}
.eintrag.aktiv .punkt.an{background:var(--punkt-an-fest)}
.eintrag .n{flex:1;min-width:0}
.eintrag .n>div:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-weight:600;font-size:var(--s3)}
/* Der Zustand steht als WORT da, nicht nur als Punkt: ein grauer
   Punkt sagt einem Farbenblinden nichts und einem Eiligen auch
   nicht. Und er darf nie abbrechen – „NOCH NI…" ist keine Auskunft.
   Deshalb bekommt .zustand kein ellipsis, sondern flex:none. */
.eintrag .v{font-size:var(--s1);color:var(--seite-gedaempft);
  display:flex;gap:var(--a1);margin-top:2px;min-width:0}
.eintrag.aktiv .v{color:rgba(26,20,11,.72)}
.eintrag .v .zustand{flex:none;font-weight:600;white-space:nowrap}
.eintrag .v .wann{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* `.liste-leer` war für die dunkle Seitenleiste gedacht und trug
   deren Schriftfarben — stand aber in zwölf Listen auf der hellen
   Fläche (Bildschirme, Kunden, Zugänge, Ordner, Szenen): dort war
   „Noch kein Bildschirm gekoppelt." hellgrau auf hellgrau, praktisch
   unsichtbar (Fassung 188, Durchsicht). Jetzt: Fläche = Flächenfarben,
   Seitenleiste = Leistenfarben. */
.liste-leer{padding:var(--a4) var(--a3);font-size:var(--s2);color:var(--gedaempft);
  line-height:1.55}
.liste-leer b{display:block;color:var(--tinte);font-size:var(--s3);margin-bottom:var(--a1)}
#seitenleiste .liste-leer{color:var(--seite-gedaempft)}
#seitenleiste .liste-leer b{color:var(--seite-text)}

/* `margin-top:auto` schiebt den Fuß an den unteren Rand der Leiste.
   Bis Fassung 67 erledigte das die Bildschirmliste, die zwischen
   Navigation und Fuß stand und mit `flex:1` wuchs. Mit der
   Umstellung auf Seiten ist diese Liste weggefallen — seitdem wuchs
   nichts mehr, und Einstellungen, Support und die Nutzerzeile
   klebten direkt unter der Navigation statt unten in der Ecke.
   Ohne diese eine Zeile sitzt das Seltene an der auffälligsten
   Stelle der Leiste. */
.seite-fuss{margin-top:auto;
  padding:var(--a4) var(--a3) var(--a3);
  display:flex;flex-direction:column;gap:2px}
/* Die Nutzerzeile ist EIN Eintrag mit einem Menü dahinter – vorher
   lagen hier ein rot umrandeter Knopf, zwei Links, zwei große
   Sprachknöpfe und eine Namenszeile: fünf selten gebrauchte Dinge
   an der auffälligsten Stelle nach dem Logo. */
.nutzer-knopf{display:flex;justify-content:flex-start;align-items:center;gap:var(--a3);width:100%;text-align:left;
  background:transparent;border:1px solid transparent;border-radius:var(--r2);
  padding:var(--a2) var(--a3);min-height:44px;color:var(--seite-text)}
.nutzer-knopf:hover{background:var(--seite-flaeche);filter:none}
.nutzer-knopf .kuerzel-kreis{width:32px;height:32px;border-radius:var(--r-voll);flex:none;
  background:var(--seite-flaeche-fest);color:var(--seite-text);display:flex;
  align-items:center;justify-content:center;font-family:var(--mono);
  font-size:var(--s1);font-weight:400}
.nutzer-knopf .wer{flex:1;min-width:0}
.nutzer-knopf .wer b{display:block;font-size:var(--s2);font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nutzer-knopf .wer span{display:block;font-size:var(--s1);color:var(--seite-gedaempft);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nutzer-knopf .pfeil{color:var(--seite-gedaempft);font-size:var(--s1);flex:none}
/* Das Menü hinter der Nutzerzeile: Protokoll, Anfragen, Eigenes
   Team, Abmelden. Es klappt nach OBEN auf – die Zeile steht am
   unteren Rand.

   Der Doppelselektor ist Absicht und kein Schmuck. Die allgemeine
   Regel „.menue" steht siebenhundert Zeilen weiter unten und setzt
   top:64px; bei gleicher Spezifität gewinnt die spätere Regel.
   Das Menü klappte deshalb nach UNTEN auf, aus dem Fenster hinaus:
   sichtbar war nur noch der obere Rand von „Protokoll".
   Nachgemessen bei 1440×900 – Menüoberkante 882 px, Fensterhöhe
   900 px. Mit dem vierten Eintrag („Eigenes Team") wäre das
   endgültig unbenutzbar geworden, deshalb hier gerade gezogen. */
/* Die Linie sitzt ab Fassung 101 hier statt über dem ganzen Fuß:
   Getrennt wird die Person vom Rest der Leiste, nicht der Fuß vom
   Alltag — genau so steht es im Entwurf. */
.nutzer-huelle{position:relative;border-top:1px solid var(--seite-linie);
  margin-top:var(--a2);padding-top:var(--a2)}
.menue.nutzer-menue{left:0;right:auto;width:100%;top:auto;
  bottom:calc(100% + var(--a2));min-width:0}

/* Symbolknopf – überall gleich, immer mit aria-label */
.sym{background:transparent;border:1px solid var(--linie);color:var(--gedaempft);
  border-radius:var(--r1);padding:var(--a2);font-size:var(--s2);line-height:1;flex:none;
  min-width:32px}
.sym:hover{color:var(--tinte);border-color:var(--linie-stark);background:var(--flaeche-2);filter:none}
.seite .sym{border-color:var(--seite-linie);color:var(--seite-gedaempft)}
.seite .sym:hover{color:var(--seite-text);background:var(--seite-flaeche);
  border-color:var(--seite-text)}
/* Mond und Fragezeichen neben der Wortmarke sind Werkzeuge und
   keine zweite Marke. Mit der pauschalen Mindesthöhe von 44 px
   standen sie höher als das Logo daneben (24 px) und zogen den
   Blick als Erstes auf sich — ausgerechnet die zwei Knöpfe, die am
   seltensten gebraucht werden. Auf dem Handy gilt die 44 weiter,
   dort wird mit dem Daumen getroffen (siehe Handy-Abschnitt). */
/* KEIN `display` in dieser Regel. Sie stand hier einen Nachmittag
   lang mit `display:inline-flex` — und weil `.marke .sym` zwei
   Klassen zählt und `.nur-handy{display:none}` nur eine, war damit
   das Schließkreuz der Handy-Schublade auch am Rechner sichtbar:
   drei Knöpfe neben der Marke statt zwei. Die Ausrichtung kommt
   ohnehin aus der Grundregel für <button>. */
.marke .sym{min-height:32px;min-width:32px;padding:0}

/* ---------- Hauptbereich ---------- */
.haupt{min-width:0}
.leer{min-height:100vh;display:flex;align-items:center;justify-content:center;text-align:center;
  color:var(--gedaempft);padding:var(--a5)}
.leer-text{margin-bottom:var(--a5);line-height:1.6}


/* Kopfbereich der Bearbeitung */
.kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a5);
  padding:var(--a4) var(--a6);border-bottom:1px solid var(--linie);background:var(--flaeche);
  position:sticky;top:0;z-index:5}
.kopf-links{min-width:0;flex:1}
.name-eingabe{border:0;background:transparent;font-size:var(--s6);font-weight:600;
  padding:var(--a1) var(--a2);margin-left:calc(-1 * var(--a2));
  letter-spacing:-.02em;width:100%;max-width:520px;border-radius:var(--r1)}
.name-eingabe:hover{background:var(--flaeche-2)}
.name-eingabe:focus{outline:0;box-shadow:inset 0 -2px 0 var(--fokus)}
.kopf-unter{margin-top:var(--a2);display:flex;gap:var(--a2);flex-wrap:wrap;align-items:center}
/* Zustand als Pille mit Wort und Farbe – nicht als Alarm. „Noch nie
   gesehen" ist bei einem frisch angelegten Bildschirm der Normalfall
   und war vorher rot. Der Text bricht nie ab (kein ellipsis): ein
   halber Zustand ist keine Auskunft. */
.etikett{font-family:var(--mono);font-size:var(--s1);letter-spacing:.04em;
  text-transform:none;font-weight:400;
  background:var(--neutralBg);color:var(--neutral);
  padding:var(--a1) var(--a2);border-radius:var(--r-voll);
  display:inline-flex;align-items:center;gap:var(--a2);white-space:nowrap;
  /* Ein Etikett darf NIE zusammengedrückt werden. Ohne das schrumpft
     es in einer engen Zeile auf die Hälfte, und „still" wird zu „st". */
  flex:none}
.etikett i{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none;display:block}
.etikett.an{background:var(--gruenBg);color:var(--gruen)}
.etikett.aus{background:var(--rotBg);color:var(--rot)}
.etikett.warn{background:var(--gelbBg);color:var(--gelb)}
.etikett.ruhe{background:var(--flaeche-3);color:var(--gedaempft)}
/* Dieselben vier Zustände unter den Namen aus `BAUTEILE.md`. Zwei
   Namen für dieselbe Regel ist kein Wildwuchs, sondern die Brücke:
   Der Bestand schreibt `.an`, neuer Code schreibt `.etikett-laeuft`,
   und beide landen auf EINER Regel statt auf zwei, die auseinander
   laufen. Die alten Namen fallen weg, wenn die letzte Ansicht
   umgestellt ist. */
.etikett.etikett-laeuft{background:var(--gruenBg);color:var(--gruen)}
.etikett.etikett-still{background:var(--rotBg);color:var(--rot)}
.etikett.etikett-dunkel{background:var(--neutralBg);color:var(--gedaempft)}
.etikett.etikett-offen{background:var(--akzent-weich);color:var(--akzent-text)}

/* ---------- Zustandspunkte, freistehend ----------
   Bis Fassung 91 gab es den Punkt nur eingebettet (`.eintrag .punkt`,
   `.gr-kopf .punkt`) — dreimal dieselbe Regel unter drei Eltern. Ab
   hier steht er für sich und die Eltern setzen nur noch, was wirklich
   anders ist.

   REGEL: Jeder Punkt hat Text daneben. Ein Punkt allein ist keine
   Aussage — für jeden, der Rot und Grün nicht unterscheidet, ist er
   derselbe Fleck. */
.punkt{width:8px;height:8px;border-radius:50%;flex:none;
  background:var(--punkt-aus);box-sizing:border-box}
.punkt-laeuft{background:var(--gruen)}
.punkt-still{background:var(--rot)}
.punkt-offen{background:var(--akzent)}
/* ---------- Die fünf Zustände eines Geräts (Fassung 118) --------
   Verbindlich aus Anweisung S11, Abschnitt 1.1. Der Unterschied
   zwischen den beiden grauen ist FORM und nicht Farbe:

     Ruhezeit          grau, GEFÜLLT   — planmäßig aus, kommt wieder
     Nicht zugewiesen  grau, KONTUR    — hat nichts zu zeigen
     Wartet …          grau, KONTUR    — hat sich noch nie gemeldet

   Ruhezeit ist ausdrücklich KEIN grüner Zustand. Bis Fassung 117
   trug sie den offenen Ring (`.punkt-dunkel`) — also die Form, die
   „hier ist nichts" bedeutet, für ein Gerät, das planmäßig läuft
   und morgen früh wieder angeht.

   `.punkt-dunkel` bleibt für den Bestand stehen und zeigt auf
   dieselbe Darstellung wie `.punkt-unzugewiesen`. */
.punkt-ruhezeit{background:var(--neutral)}
.punkt-unzugewiesen,
.punkt-dunkel{background:transparent;border:2px solid var(--neutral)}

/* ---------- Gerätechips ----------
   Eine Playlist kann auf mehreren Bildschirmen laufen. Der Chip
   beantwortet „wo läuft das eigentlich" an Ort und Stelle, statt es
   in ein Menü zu verstecken. Ab fünf Geräten wird abgekürzt: vier
   Chips, dann „+n weitere" — eine Zeile mit dreißig Chips beantwortet
   nichts mehr. */
.geraete-chips{display:flex;gap:var(--a2);flex-wrap:wrap;min-width:0}
.geraete-chip{display:inline-flex;align-items:center;gap:var(--a2);
  font-size:var(--s2);color:var(--tinte);background:var(--flaeche-2);
  border:1px solid var(--linie);padding:var(--a1) var(--a2);
  border-radius:var(--r-voll);white-space:nowrap;max-width:100%}
.geraete-chip:hover{background:var(--flaeche-3);border-color:var(--linie-stark);filter:none}
.geraete-chip-still{color:var(--rot);background:var(--rotBg);border-color:var(--rot)}
.geraete-chip-mehr{color:var(--gedaempft);background:transparent}
/* Y3 (Fassung 182): ein Chip, dessen Bildschirm den Stand noch nicht
   geholt hat, trägt einen gestrichelten Rand — kein Rot, es ist kein
   Fehler, sondern ein Zwischenstand. Das ✓ und das „wartet" stehen
   als leiser Zusatz hinter dem Namen. */
.geraete-chip-wartet{border-style:dashed}
/* Y1 (Fassung 182): die Bildschirmliste im Dialog „Direkt zeigen". */
.direkt-vorschau{max-width:320px;margin-bottom:var(--a3)}
.direkt-vorschau .med-bild{aspect-ratio:16/9}
.direkt-liste{display:flex;flex-direction:column;gap:var(--a1);margin:var(--a3) 0 var(--a4)}
.direkt-zeile{display:flex;align-items:center;gap:var(--a2);padding:var(--a2) var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);cursor:pointer}
.direkt-zeile:hover{background:var(--flaeche-2)}
.direkt-zeile input{margin:0}
.direkt-name{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gr-zeile .gr-wahl,.gr-offen .gr-wahl{margin:4px var(--a2) 0 0;flex:none}
/* Etiketten (Fassung 183, L-298): kleine Pillen unter der Metazeile,
   anklickbar als Filter. Sie sehen aus wie Etiketten, nicht wie
   Zustände — keine Farbe, nur Rand. */
.gr-etiketten{display:flex;flex-wrap:wrap;gap:var(--a1);margin-top:var(--a1)}
.gr-etikett{font:inherit;font-family:var(--mono);font-size:var(--s1);letter-spacing:.02em;
  border:1px solid var(--linie);border-radius:var(--r-voll);padding:0 var(--a2);
  background:transparent;color:var(--gedaempft);cursor:pointer;line-height:1.6}
.gr-etikett:hover{border-color:var(--linie-stark);color:var(--tinte)}
/* Y4 (Fassung 182): der Satz unter der Playlistliste, der zu den
   Geräten ohne Playlist führt. Ein Verweis, kein Kasten. */
.pl-ohne-hinweis{display:inline-flex;align-items:center;gap:var(--a2);margin-top:var(--a4);
  color:var(--akzent-text);font-weight:600;font-size:var(--s2)}
.pl-ohne-hinweis:hover{text-decoration:underline}
.geraete-chip-stand{color:var(--gedaempft);font-family:var(--mono);font-size:var(--s1)}
/* Ein Etikett, das zugleich ein Weg ist – „Auf 2 Bildschirmen" im
   Kopf der Playlist führt zu ihnen. Es sieht bewusst aus wie ein
   Etikett und nicht wie ein Knopf: Die Auskunft ist das Erste, der
   Weg das Zweite. Der Zeiger und der Fokusrahmen verraten den Rest. */
.etikett-knopf{cursor:pointer}
.etikett-knopf:hover{filter:brightness(.94)}
.etikett-knopf:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
/* Die Knöpfe dürfen umbrechen, aber der Text in einem Knopf nicht –
   sonst steht da "Bildschirm" und der Rest ist abgeschnitten. */
.kopf-knoepfe{display:flex;gap:var(--a2);flex:none;align-items:center;justify-content:flex-end}
.kopf-knoepfe button{white-space:nowrap;flex:none}
.speicher-block{display:flex;align-items:center;gap:var(--a3);flex:none}
/* „Nicht gespeichert" war von Fassung 96 bis 262 ein Etikett
   (`.schmutz-punkt`), das nur bei Änderungen erschien. Seit 263 ist
   es ein Zustand der einen Pille im Kopf (`.zustand-pille`, unten im
   Block „Stück 02a"). */
#btn-speichern{min-width:120px}
/* Fassung 438 (L-597 c, Bauplan Plan 432, Entwurf §7): „Speichern" und ▾
   als ein geteilter Knopf; das ▾ hat ein Menü mit „Speichern und auf
   Bildschirm zeigen …". Ein Strich in --abdeckung trennt die Hälften.
   Am Handy fehlt das ▾ (unten, Block „Fassung 438 · Handy"). */
.speicher-block.mit-zeigen{gap:0}
.speicher-block.mit-zeigen #btn-speichern{border-top-right-radius:0;border-bottom-right-radius:0}
/* Über die Kennung: `.kopf .kopf-knoepfe button` (Fassung 418) setzt Rand
   und Innenabstand für jeden Kopfknopf und ginge sonst vor. */
#btn-sp-zeigen{flex:none;width:40px;padding:0;border-top-left-radius:0;border-bottom-left-radius:0;
  box-shadow:inset 1px 0 0 var(--abdeckung)}
button.sp-zeigen[hidden]{display:none}
/* Ab hier wird der Kopf eng: die Nebenknöpfe wandern ins Menü. */
@media (max-width:1379px){
  .kopf{padding:var(--a3) var(--a5)}
  .name-eingabe{font-size:var(--s5)}
  .kopf-knoepfe .eng-weg{display:none}
}

.spalten{display:grid;grid-template-columns:1fr 470px;align-items:start}
/* Querformat braucht mehr Breite, sonst ist die Vorschau ein Briefmarken-Bild */
.spalten.quer{grid-template-columns:1fr minmax(432px, 42vw)}
/* Die freie Folie (Fassung 213): Hier ist die Bühne links das
   Arbeitsgerät — sie bekommt den Platz, die Vorschau nur so viel, dass
   man das Ergebnis erkennt. Gilt über `.quer` hinaus, deshalb danach. */
.spalten.mit-buehne,.spalten.mit-buehne.quer{grid-template-columns:1fr minmax(300px, 24vw)}
/* minmax(0,1fr) und min-width:0 (Fassung 355, Cowork C-06): Mit 1fr
   wuchs die Spalte am Handy auf die Mindestbreite des längsten Felds,
   und die ganze Seite wurde 426 statt 390 px breit. */
@media (max-width:1180px){.spalten,.spalten.quer{grid-template-columns:minmax(0,1fr)}
  .spalten > section.formular{min-width:0}}
.formular{padding:var(--a6) var(--a6) var(--a7)}
/* Reiter als unterstrichene Zeile (ab Fassung 92, nach BAUTEILE.md).
   Vorher waren es gefüllte Pillen. Der Unterschied ist nicht Geschmack:
   Eine gefüllte Pille sieht aus wie ein Knopf, und ein Knopf verspricht,
   dass etwas PASSIERT. Ein Reiter sagt nur, wo man gerade ist.

   Sie bricht nie um, sondern rollt seitlich. Zwei Reiter, die in der
   zweiten Zeile weiterlaufen, liest niemand als zusammengehörig —
   und auf 390px passen „Im Einsatz · 12" und „Nicht zugewiesen · 3"
   nun einmal nicht nebeneinander. */
.reiter{display:flex;gap:var(--a5);padding:var(--a3) var(--a4) 0;
  margin-bottom:var(--a5);border-bottom:1px solid var(--linie);
  overflow-x:auto;white-space:nowrap;scrollbar-width:thin}
/* ---- „Hier geht es weiter" (Prüflauf 12.09.2026, C-16) --------
   Eine Reiterzeile, die breiter ist als das Fenster, endete mitten
   im Wort und sah aus wie das Ende — der Rollbalken ist auf dem
   Telefon bewusst ausgeblendet. Die Klassen setzt
   `reiterRaenderWachen()` in `app.js`, und zwar nur dann, wenn
   wirklich etwas außerhalb liegt. Ein Verlauf, der immer da ist,
   wäre dieselbe Unwahrheit mit umgekehrtem Vorzeichen. */
.reiter.mehr-rechts{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);
  mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%)}
.reiter.mehr-links{-webkit-mask-image:linear-gradient(to left,#000 calc(100% - 28px),transparent 100%);
  mask-image:linear-gradient(to left,#000 calc(100% - 28px),transparent 100%)}
.reiter.mehr-links.mehr-rechts{
  -webkit-mask-image:linear-gradient(to right,transparent 0,#000 28px,#000 calc(100% - 28px),transparent 100%);
  mask-image:linear-gradient(to right,transparent 0,#000 28px,#000 calc(100% - 28px),transparent 100%)}
.reiter-knopf{background:transparent;border:0;border-radius:0;
  color:var(--gedaempft);padding:var(--a3) 2px;font-size:var(--s4);
  font-weight:400;min-height:44px;flex:none}
.reiter-knopf:hover{background:transparent;color:var(--tinte);filter:none}
/* Beide Schreibweisen treffen dieselbe Regel: der Bestand setzt
   `.aktiv`, neuer Code das ARIA-Attribut, das ein Vorleseprogramm
   auch wirklich vorliest. */
.reiter-knopf.aktiv,.reiter-knopf[aria-selected="true"]{
  background:transparent;color:var(--tinte);font-weight:600;
  box-shadow:inset 0 -2px 0 var(--akzent)}
/* ---------- Kopf und Körper einer Karte ----------
   Der Kopf ist ein Abschnittskopf wie jeder andere (Regel 6): mono,
   Versalien, --beschriftung. Er sitzt IN der Karte und trennt sich
   mit einer Linie, nicht mit einem Farbton — eine getönte Kopfleiste
   wäre die zweite Kartensorte. */
.karte-kopf{padding:var(--a3) var(--a4);border-bottom:1px solid var(--linie);
  font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);font-weight:400;
  display:flex;align-items:center;justify-content:space-between;gap:var(--a3)}
.karte-koerper{padding:var(--a4)}
/* Ein Platz, der gefüllt werden soll — ein gekoppelter Bildschirm
   ohne Playlist, eine Seite ohne Inhalt. Gestrichelt, weil das die
   einzige Randart ist, die „hier fehlt etwas" sagt, ohne zu mahnen. */
.karte-offen{background:var(--flaeche);border:1px dashed var(--linie-stark);
  border-radius:var(--r2);padding:var(--a4)}
/* Eine Karte mit Bezug zu einer Störung bekommt einen Balken links,
   KEINE getönte Fläche. Eine rot getönte Karte in einer Liste von
   zwölf sieht aus wie ein Fehler in der Liste, nicht wie ein Hinweis
   auf einen Bildschirm. */
.karte-warnung{border-left:3px solid var(--rot)}
.karte-offen-bezug{border-left:3px solid var(--akzent)}

.feld{margin-bottom:var(--a5);max-width:720px}
/* Ein Wert, den man LIEST und nicht ändert – etwa die eigene
   Anmeldeadresse. Bewusst kein Eingabefeld: ein Feld, das aussieht
   wie eine Eingabe, aber keine ist, ist die schlimmere Auskunft. */
.wert-zeile{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--a3);
  padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche-2)}
.wert-zeile b{font-size:var(--s3);font-weight:600;word-break:break-all}
/* Erklärtext unter einem Feld. Muss VOR der Toast-Regel stehen und
   darf nicht mehr .hinweis heißen wie diese – genau daran ist es lange
   gescheitert: der Toast setzt position:fixed und opacity:0, und weil
   ".feld .hinweis" das nicht zurücksetzt, waren sämtliche Feldhinweise
   unsichtbar. Der Toast heißt jetzt #hinweis. */
.hinweis{font-size:var(--s2);color:var(--gedaempft);margin-top:var(--a1);line-height:1.5}
/* ---------- Hinweisstreifen ----------
   `BAUTEILE.md` nennt dieses Bauteil `.hinweis`. Der Name ist im
   Blatt aber seit Fassung 66 vergeben — und zwar 132-mal im
   Programmtext, für den Erklärsatz UNTER einem Feld. Zwei Dinge
   unter einem Namen wären genau der Fehler, an dem der Toast schon
   einmal gescheitert ist (siehe drei Absätze weiter oben: er hieß
   auch `.hinweis`, setzte `position:fixed; opacity:0`, und damit
   waren sämtliche Feldhinweise unsichtbar).

   Deshalb heißt der Streifen hier `.streifen`. Das ist die einzige
   bewusste Abweichung vom Namensvorschlag der Mappe, und sie
   verhindert einen Fehler, den es in diesem Blatt schon gegeben hat.

   Er trägt `role="status"`: ein laufender Upload, eine Meldung, die
   gerade greift. Ein Vorleseprogramm sagt sie dann von selbst an,
   ohne den Fokus zu stehlen. */
.streifen{display:flex;gap:var(--a3);align-items:center;flex-wrap:wrap;
  padding:var(--a3) var(--a4);background:var(--flaeche);
  border:1px solid var(--linie);border-radius:var(--r2)}
/* Balken links statt getönter Fläche — aus demselben Grund wie bei
   der Karte: eine rot getönte Fläche liest sich als kaputt, ein
   Balken als Verweis. */
.streifen-stoerung{border-left:3px solid var(--rot)}
.streifen-offen{border-left:3px solid var(--akzent);background:var(--gelbBg)}

/* ---------- Leere Liste ----------
   Nie „keine Daten". Eine leere Liste ist immer ein Ort, an dem
   etwas fehlt — also steht dort ein Weg, nicht eine Feststellung.
   `.leer` ist im Blatt schon vergeben (die ganzseitige Fassung mit
   min-height:100vh), deshalb der eigene Name. */
.leer-liste{background:var(--flaeche);border:1px dashed var(--linie-stark);
  border-radius:var(--r2);padding:var(--a5);
  display:flex;flex-direction:column;gap:var(--a2);align-items:flex-start}

/* ---------- Listenzeile, die auf 390px umbricht ----------
   Der Textteil bekommt eine echte Mindestbreite und NICHT min-width:0.
   Mit 0 fällt er auf schmalen Fenstern auf wenige Pixel zusammen und
   die Aktionen daneben überlappen ihn — das sieht nicht nach eng
   aus, sondern nach kaputt. */
.zeile{display:flex;flex-wrap:wrap;gap:var(--a4);align-items:center;padding:var(--a4)}
.zeile-text{flex:1 1 190px;min-width:190px}
.zeile-aktionen{display:flex;gap:var(--a2);flex:1 0 auto;flex-wrap:wrap;
  justify-content:flex-end}

/* Angenommen, aber anzumerken: 10 Bit oder HDR an einem Video.
   Kein Fehler (das wäre rot), auch keine Nebenbemerkung in Grau —
   die Zeile soll stehen bleiben und gelesen werden. */
.warnzeile{font-size:var(--s2);color:var(--gelb);background:var(--gelbBg);
  border-radius:var(--r2);padding:var(--a2) var(--a3);margin-top:var(--a2);line-height:1.5}
.feld .hinweis{font-size:var(--s2);color:var(--gedaempft);margin-top:var(--a1);line-height:1.5}
/* Der Zeichenzähler tritt zurück, bis es eng wird. „12/40" ist
   Information, die erst kurz vor der Grenze zählt – dauerhaft
   sichtbar kostet sie nur Aufmerksamkeit. Ab 80 % der Höchstlänge
   (Klasse .nah) blendet er auf, ab 95 % (.voll) wird er farbig.
   Wer im Feld steht, sieht ihn ohnehin immer. */
.zaehler{float:right;font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:var(--s1);color:var(--gedaempft);letter-spacing:0;
  text-transform:none;font-weight:400;opacity:0;
  transition:opacity var(--takt) ease,color var(--takt) ease}
.zaehler.nah{opacity:1}
.zaehler.voll{opacity:1;color:var(--rot);font-weight:600}
.feld:focus-within .zaehler{opacity:1}

/* Aufklappbare Abschnitte im Formular */
.abschnitt{border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche);
  margin-bottom:var(--a4);max-width:720px;overflow:hidden}
.abschnitt-kopf{display:flex;justify-content:flex-start;align-items:center;gap:var(--a3);padding:var(--a3) var(--a4);
  cursor:pointer;user-select:none;background:var(--flaeche-2);width:100%;text-align:left;
  border:0;border-radius:0;font-size:var(--s-knopf);color:var(--tinte);font-weight:600}
.abschnitt-kopf:hover{background:var(--flaeche-3);filter:none}
.abschnitt-kopf .pfeil{color:var(--gedaempft);width:16px;height:16px;flex:none;
  display:flex;align-items:center;justify-content:center;
  transition:transform var(--takt) ease}
.abschnitt.zu .abschnitt-kopf .pfeil{transform:rotate(-90deg)}
.abschnitt-kopf .zusatz{margin-left:auto;font-size:var(--s1);color:var(--gedaempft);font-weight:600;
  letter-spacing:.04em}
.abschnitt-inhalt{padding:var(--a5) var(--a4) var(--a3)}
.abschnitt.zu .abschnitt-inhalt{display:none}
.abschnitt .feld{max-width:none}
.abschnitt .lfeld,.abschnitt .plan{max-width:none}

/* Liste im Formular */
.lfeld{border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche);
  overflow:hidden;max-width:720px}
.lkopf{display:flex;align-items:center;justify-content:space-between;padding:12px var(--a3);
  border-bottom:1px solid var(--linie);background:var(--flaeche-2);
  font-size:var(--s1);color:var(--gedaempft);font-weight:600}
.lzeile{padding:var(--a3);border-bottom:1px solid var(--linie);display:flex;gap:var(--a3);
  align-items:flex-start;user-select:text}
.lzeile:last-of-type{border-bottom:0}
.lzeile.aus{opacity:.45}
.lgriff{cursor:grab;color:var(--linie-stark);line-height:1;padding:var(--a2) var(--a1) 0;
  display:flex;align-items:center;
  user-select:none;border-radius:var(--r1);flex:none}
.lgriff:hover{background:var(--flaeche-3);color:var(--tinte)}
.lgriff:active{cursor:grabbing}
.lfelder{flex:1;display:grid;grid-template-columns:1fr 1fr;gap:var(--a3);min-width:0}
.lfelder .breit{grid-column:1 / -1}
.lzeile .lfeld{background:var(--flaeche-2);max-width:none}
.lzeile .lzeile{padding:var(--a3)}
.lzeile .lkopf,.lzeile .lfuss{padding:var(--a2) var(--a3)}
.lzeile .lzeile .lfelder{grid-template-columns:1fr}
.lweg{background:none;color:var(--gedaempft);padding:var(--a2);font-size:var(--s4);
  min-width:44px;min-height:44px}
.lweg:hover{color:var(--rot);background:none;filter:none}
.lfuss{padding:var(--a3);background:var(--flaeche-2)}

.bildfeld{display:flex;gap:var(--a3);align-items:center;flex-wrap:wrap}
.bildfeld .vorschaubild{width:72px;height:72px;border-radius:var(--r2);object-fit:cover;
  background:var(--flaeche-4);flex:none;border:1px solid var(--linie)}

/* Zeitpläne */
.plan{border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche);
  padding:var(--a4);margin-bottom:var(--a4);max-width:720px}
.plan-kopf{display:flex;gap:var(--a3);align-items:center;margin-bottom:var(--a4)}
.tage{display:flex;gap:var(--a2);flex-wrap:wrap;margin-bottom:var(--a4)}
.tag{padding:var(--a2) var(--a3);border-radius:var(--r1);border:1px solid var(--linie);
  background:var(--flaeche);font-size:var(--s2);color:var(--gedaempft);font-weight:600;
  min-height:44px;min-width:44px}
.tag.an{background:var(--gewaehlt);color:var(--auf-gewaehlt);border-color:var(--gewaehlt)}
.zeitfelder{display:grid;grid-template-columns:1fr 1fr;gap:var(--a3);margin-bottom:var(--a4)}

/* Vorschau ----------------------------------------------------
   Das Wertvollste auf dem Bild – was der Kunde später wirklich
   sieht – hatte vorher die kleinste Beschriftung und keinen
   Rahmen. Jetzt: eigene Fläche, Rahmen um das Gerät, Format und
   Stand als Angabe. */
/* ---------- Bildschirmfläche als Bauteil ----------
   Schwarz in beiden Farbmodi — das ist ein Bildschirm, kein Kasten
   der Oberfläche. Zwei Seitenverhältnisse, mehr gibt es nicht.

   FALLE aus dem Entwurf: Wird die Höhe über `aspect-ratio` erzwungen,
   darf der Inhalt darin NICHT mit `margin-top:auto` nach unten
   geschoben werden — dann steht oben ein schwarzes Loch. Entweder
   der Inhalt füllt die Fläche (`flex:1` plus `space-evenly`), oder
   das Seitenverhältnis entfällt und die Höhe kommt vom Raster. */
.bildflaeche{background:var(--dunkel);border:1px solid var(--linie);
  border-radius:var(--r2);overflow:hidden}
.vorschau-quer{aspect-ratio:16/9}
.vorschau-hoch{aspect-ratio:9/16}

.vorschau{position:sticky;top:88px;padding:var(--a5) var(--a6) var(--a6) 0}
@media (max-width:1180px){.vorschau{position:static;padding:0 var(--a6) var(--a7)}}
.vorschau-innen{background:var(--flaeche-2);border:1px solid var(--linie);
  border-radius:var(--r4);padding:var(--a4)}
.vorschau-kopf{display:flex;justify-content:space-between;align-items:center;gap:var(--a3);
  font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);
  font-weight:600;margin-bottom:var(--a3)}
.vorschau-kopf .stand{display:flex;align-items:center;gap:var(--a2);
  letter-spacing:0;text-transform:none;font-weight:600;font-size:var(--s1)}
.vorschau-kopf .format{font-variant-numeric:tabular-nums;letter-spacing:.04em}
.rahmen{background:var(--dunkel);border-radius:var(--r3);overflow:hidden;
  border:1px solid var(--linie-stark);box-shadow:var(--schatten-1);position:relative}
.rahmen iframe{width:100%;border:0;display:block;background:var(--dunkel)}
/* Band über der Vorschau, solange ungespeicherte Änderungen darin
   stehen. Es muss auffallen, ohne den Inhalt zu verdecken – deshalb
   oben, schmal, und mit pointer-events:none, damit es nichts
   blockiert. */
.entwurf-marke{position:absolute;left:0;right:0;top:0;pointer-events:none;
  background:rgba(245,166,35,.94);color:var(--auf-akzent);font-weight:600;
  font-size:var(--s1);letter-spacing:.04em;text-align:center;padding:var(--a1) var(--a2)}
.vorschau-hinweis{font-size:var(--s2);color:var(--gedaempft);margin-top:var(--a3);
  line-height:1.5}

/* ---------- Ladeskelette ---------- */
.skelett{background:linear-gradient(90deg,var(--flaeche-3) 25%,var(--flaeche-2) 37%,var(--flaeche-3) 63%);
  background-size:400% 100%;animation:schimmer 1.3s ease infinite;border-radius:var(--r1)}
@keyframes schimmer{0%{background-position:100% 0}100%{background-position:0 0}}
.skelett-zeile{height:12px;margin-bottom:8px}
.skelett-eintrag{height:44px;margin:0 0 8px;border-radius:var(--r2)}
.skelett-feld{height:76px;margin-bottom:var(--a5);border-radius:var(--r2);max-width:720px}

/* ---------- Dialog ---------- */
.dialog-huelle{position:fixed;inset:0;background:var(--abdeckung);display:flex;
  align-items:center;justify-content:center;padding:var(--a5);z-index:50;
  animation:einblenden .12s ease}
/* Solange ein Dialog offen ist, steht die Seite dahinter still.
   Vorher rollten zwei Balken nebeneinander: der des Dialogs und der
   der Seite. Wer im Dialog nach unten wollte und knapp danebentraf,
   verschob die Seite dahinter — und fand sie hinterher woanders
   wieder. */
body.ueber-allem{overflow:hidden}
@keyframes einblenden{from{opacity:0}to{opacity:1}}
/* 80vh, nicht 88 (Fassung 132, Anweisung 3.3). Der Wert steht dort
   ausdrücklich für den Fall, dass ein Dialog viel Inhalt trägt:
   höchstens 80vh, innen rollen, stehende Fußzeile. Die Fußzeile
   steht seit Fassung 108 (`#dialog-inhalt > .reihe:last-child`). */
.dialog{background:var(--flaeche);border-radius:var(--r4);width:100%;max-width:560px;
  max-height:80vh;display:flex;flex-direction:column;box-shadow:var(--schatten-3)}
.dialog.breit{max-width:840px}
.dialog.sehr-breit{max-width:1220px;height:80vh}
.dialog-kopf{display:flex;justify-content:space-between;align-items:center;gap:var(--a3);
  padding:var(--a4) var(--a5);border-bottom:1px solid var(--linie);font-weight:600;font-size:var(--s5);
  background:var(--flaeche);border-radius:var(--r4) var(--r4) 0 0;flex:none}
#dialog-inhalt{padding:var(--a5);overflow:auto;flex:1;min-height:0}
#dialog-inhalt.ohne-polster{padding:0;display:flex;flex-direction:column;overflow:hidden}
/* Die Knopfreihe klebt am unteren Rand des Dialogs.
   Grund: lange Dialoge (Schnellmeldung, Vorlage anfragen) sind höher
   als das Fenster. Der Inhalt rollt zwar, aber der Knopf, der die
   Sache erledigt, stand dann unter dem sichtbaren Bereich – genau
   der Fehler, wegen dem der Löschknopf im Kundendialog schon einmal
   für „nicht vorhanden" gehalten wurde. Sichtbar bleiben ist hier
   wichtiger als eine Zeile Rahmen zu sparen. */
#dialog-inhalt > .reihe:last-child{
  /* bottom kompensiert das untere Polster des Rollbereichs – mit
     bottom:0 bliebe darunter ein Streifen frei, durch den der
     gerollte Text hindurchläuft. */
  position:sticky;bottom:calc(-1 * var(--a5));z-index:2;
  margin:var(--a5) calc(-1 * var(--a5)) calc(-1 * var(--a5));
  padding:var(--a4) var(--a5);background:var(--flaeche);
  border-top:1px solid var(--linie);border-radius:0 0 var(--r4) var(--r4)}
#dialog-inhalt.ohne-polster > .reihe:last-child{position:static;margin:0;border:0}

/* ============================================================
   Die Einstellungen als SEITE (Fassung 120, Anweisung 2.2)
   ------------------------------------------------------------
   Hier stand bis Fassung 119 die Reiterleiste IM Dialog
   (`.bereiche`, `.bereich-nav`, `.bereich-buehne`). Der Dialog war
   höher als das Fenster, hatte zwei Rollbalken und stand je Reiter
   unterschiedlich weit vom Rand.

   Jetzt: links die Bereichsleiste, 220 px, klebt oben. Rechts der
   Inhalt, höchstens 720 px. EIN Rollbalken — die Seite. Nichts
   rollt in sich, deshalb steht hier auch kein `overflow` mehr.
   ============================================================ */
.est-seite{display:grid;grid-template-columns:220px minmax(0,1fr);
  gap:var(--a6);align-items:start}
.est-einzeln{grid-template-columns:minmax(0,1fr)}
/* Nur Beschriftungen, keine Symbole (Anweisung 2.2). Der aktive
   Bereich bekommt eine FLÄCHE und keinen Bernstein — der eine
   bernsteinfarbene Knopf der Seite steht oben rechts. */
.est-nav{position:sticky;top:var(--a5);display:flex;flex-direction:column;gap:2px}
.est-nav-knopf{display:flex;justify-content:flex-start;align-items:center;width:100%;
  text-align:left;background:transparent;border:1px solid transparent;
  border-radius:var(--r2);padding:8px 12px;font-size:var(--s2);font-weight:600;
  color:var(--gedaempft)}
.est-nav-knopf:hover{background:var(--flaeche-2);color:var(--tinte);filter:none}
.est-nav-knopf.an{background:var(--flaeche);border-color:var(--linie);color:var(--tinte);
  box-shadow:var(--schatten-1)}
/* Die Lesebreite. Formularfelder gehen NICHT über die volle Breite:
   Ein Feld für „Ort fürs Wetter" war 730 px breit für acht Zeichen. */
.est-inhalt{min-width:0;max-width:720px}
.est-bereich{min-width:0}
.est-kopf{font-size:var(--s5);font-weight:600;margin:0 0 var(--a3)}
.est-titel{font-size:var(--s4);font-weight:600;margin:var(--a6) 0 var(--a2)}
/* Feldbreiten nach INHALT (Anweisung 2.2): kurze Werte 240 px,
   Namen 360 px, URLs die vollen 720 px (also die Grundbreite). */
.est-kurz{max-width:240px}
.est-name{max-width:360px}
/* Die Zeitzonenwahl ist seit Fassung 176 zwei Felder: ein Suchfeld
   über der Auswahl (Prüflauf 12.09.2026, C-15). Beide sollen die
   Breite bekommen, die der Aufrufer der Hülle gibt. */
.zonenwahl{display:flex;flex-direction:column;gap:var(--a2)}
.zonenwahl>input,.zonenwahl>select{width:100%}
.est-voll{max-width:100%}
/* Zahlenfelder 96 px, nicht 160: zwei Ziffern brauchen keine
   Handbreit. */
.zahl-schmal{width:96px;flex:none}
/* Der Leerzustand eines Logos ist nicht „nichts" und auch nicht
   unser eigenes Logo — er sagt, dass keins hinterlegt ist. */
.est-logo-zeile{display:flex;align-items:center;gap:var(--a4);flex-wrap:wrap;
  margin-top:var(--a2)}
.est-logo-buehne{border-radius:var(--r2);padding:var(--a4);display:flex;align-items:center;
  justify-content:center;min-width:180px;min-height:76px}
/* `--beschriftung` erreicht auf `--flaeche-2` nur 3,78 (gemessen am
   26.08.2026, unter AA). Eine Stufe dunkler: `--gedaempft` steht auf
   Papier bei 6,8 und auf der getönten Fläche darunter immer noch
   deutlich über 4,5. */
.est-logo-leer{font-size:var(--s2);color:var(--gedaempft)}
.est-logo-tun{display:flex;gap:var(--a2);align-items:center;flex-wrap:wrap}
/* Bis zu drei Bildschirme stehen als Zeilen ohne Tabellenrahmen:
   Eine Tabelle mit Kopfzeile war bei EINER Zeile ein Möbelstück für
   eine einzige Angabe (Anweisung 2.5). */
.est-zeilen{display:flex;flex-direction:column;margin-top:var(--a2)}
.est-zeile{display:flex;align-items:center;justify-content:space-between;gap:var(--a4);
  padding:var(--a3) 0;border-bottom:1px solid var(--linie);min-width:0}
.est-zeile:last-child{border-bottom:0}
/* Eigene Schriften (Fassung 199): eine Zeile je Datei — die Probe in
   der Schrift selbst, dann Name und Größe, dann der Löschknopf. */
.schrift-liste{display:flex;flex-direction:column;margin-top:var(--a3)}
.schrift-zeile{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--a4);
  align-items:center;padding:var(--a3) 0;border-bottom:1px solid var(--linie);min-width:0}
.schrift-zeile:last-child{border-bottom:0}
.schrift-probe{font-size:var(--s6);line-height:1.2;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;min-width:0}
.schrift-name{font-size:var(--s2);white-space:nowrap}
@media (max-width:600px){
  .schrift-zeile{grid-template-columns:minmax(0,1fr) auto}
  .schrift-name{grid-column:1 / -1;white-space:normal}
}
/* Eine Lage in einem Satz statt eines Balkens ohne Nenner. */
.est-lage{font-size:var(--s4);font-weight:600;margin-top:var(--a3)}
@media (max-width:900px){
  .est-seite{grid-template-columns:minmax(0,1fr)}
  .est-nav{position:static;flex-direction:row;flex-wrap:wrap;gap:8px}
  .est-nav-knopf{width:auto;white-space:nowrap;flex:none}
}
.adresse{background:var(--dunkel);color:#F7F6F3;border-radius:var(--r3);padding:var(--a4);
  font-family:var(--mono);font-size:var(--s2);word-break:break-all;line-height:1.6}
.reihe{display:flex;gap:8px;margin-top:var(--a3);flex-wrap:wrap}
.reihe.rechts{justify-content:flex-end}
/* Merkkasten: ein Hinweis, keine Handlung. Er trug vorher den Akzent
   – damit bedeutete Bernstein „das hier tun" UND „das hier lesen".
   Jetzt eine ruhige Fläche mit kräftiger Kante. */
.merke{background:var(--flaeche-3);border-left:4px solid var(--linie-stark);
  padding:var(--a3) var(--a4);
  margin:var(--a4) 0 var(--a5);border-radius:0 var(--r2) var(--r2) 0;font-size:var(--s2);
  line-height:1.6;color:var(--tinte)}
.merke.rot{background:var(--rotBg);border-color:var(--rot);color:var(--rot-text)}
.merke.gelb{background:var(--gelbBg);border-color:var(--gelb);color:var(--gelb)}
.merke code{font-family:var(--mono);font-size:var(--s1)}
.tabelle{width:100%;border-collapse:collapse;font-size:var(--s2)}
.tabelle td,.tabelle th{padding:8px 8px;border-bottom:1px solid var(--linie);vertical-align:top;
  text-align:left}
.tabelle th{font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);font-weight:400}
.tabelle td.rechts{text-align:right;white-space:nowrap}
.tabelle tr:last-child td{border-bottom:0}
.tabelle .unterzeile{font-size:var(--s1);color:var(--gedaempft);margin-top:4px}
.qr{width:190px;height:190px;border:1px solid var(--linie);border-radius:var(--r3);
  background:#fff;display:block}
.zugangskarte{background:var(--dunkel);color:#F7F6F3;border-radius:var(--r2);padding:var(--a5);
  font-family:var(--mono);font-size:var(--s-knopf);line-height:1.9;
  word-break:break-all}
.zugangskarte b{color:var(--akzent);font-weight:600}
.trennlinie{border-top:1px solid var(--linie);margin-top:var(--a6);padding-top:var(--a5)}

/* Kundenliste */
.kunde{display:flex;align-items:center;gap:var(--a3);padding:var(--a3);border:1px solid var(--linie);
  border-radius:var(--r3);margin-bottom:8px;background:var(--flaeche)}
.kunde .k-name{flex:1;min-width:0}
.kunde .k-name b{display:block;font-size:var(--s-normal)}
.kunde .k-name span{font-size:var(--s-klein);color:var(--gedaempft)}
.kunde .k-zahl{text-align:center;flex:none;min-width:58px}
.kunde .k-zahl b{display:block;font-size:var(--s5)}
.kunde .k-zahl span{font-size:var(--s1);color:var(--gedaempft);letter-spacing:.08em;text-transform:uppercase}

/* Freigabe-Kacheln */
.vorlagen{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media (max-width:620px){.vorlagen{grid-template-columns:1fr}}
/* Freigabe: Werkzeugleiste, Gruppen nach Branche, Warnhinweis.
   Vorher stand hier eine flache Liste aus 31 Ankreuzfeldern – bei
   fünf gewünschten Vorlagen musste man 26 einzeln abwählen. */
.werkzeugleiste{display:flex;gap:var(--a2);flex-wrap:wrap;align-items:center;
  margin-bottom:var(--a2)}
.werkzeugleiste input,.werkzeugleiste select{width:auto;flex:1;min-width:150px;
  padding:var(--a2) var(--a3);font-size:var(--s4);margin:0}
.werkzeugleiste input[type=search]{flex:2;min-width:190px}
.gruppenkopf{display:flex;align-items:baseline;gap:var(--a3);
  margin:var(--a4) 0 var(--a2);padding-bottom:4px;border-bottom:1px solid var(--linie)}
.gruppenkopf:first-child{margin-top:var(--a2)}
.gruppenkopf b{font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);font-weight:400}
.gruppenkopf span{margin-left:auto;display:flex;gap:var(--a3)}
/* Freigegeben-Entzug bei einer Vorlage, die ein Bildschirm benutzt */
.vorlage.warnt{border-color:var(--gelb);background:var(--gelbBg)}
/* Zuklappbarer Abschnitt. Der Freigabeblock ist der laengste im
   Kundendialog; zugeklappt bleibt der Rest des Dialogs erreichbar,
   ohne an 33 Kacheln vorbeizurollen. */
.klappe{border:1px solid var(--linie);border-radius:var(--r3);
  background:var(--flaeche-2);padding:0 var(--a4);margin-top:var(--a6)}
.klappe > summary{display:flex;align-items:baseline;gap:var(--a3);
  padding:var(--a4) 0;cursor:pointer;list-style:none}
.klappe > summary::-webkit-details-marker{display:none}
.klappe > summary::before{content:'\25B8';color:var(--gedaempft);font-size:var(--s1);
  transition:transform var(--takt) ease;flex:none}
.klappe[open] > summary::before{transform:rotate(90deg)}
.klappe > summary b{font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);font-weight:400}
.klappe > summary .summe{margin-left:auto;font-size:var(--s1);color:var(--gedaempft);
  font-variant-numeric:tabular-nums}
.klappe[open]{padding-bottom:var(--a4)}
.klappe > summary:hover b{color:var(--akzent-text)}

/* Etikett in der Anfragenliste: Interessent oder Vorlagenwunsch.
   Ohne die Unterscheidung sieht ein Vorlagenwunsch aus wie ein
   Neukunde, und jemand legt das Konto zum zweiten Mal an. */
.art-etikett{display:inline-block;font-size:var(--s1);letter-spacing:.09em;text-transform:uppercase;
  font-weight:600;padding:2px 8px;border-radius:999px;margin-right:var(--a3);
  background:var(--flaeche-2);color:var(--gedaempft);border:1px solid var(--linie);
  vertical-align:2px}
.art-etikett.ist-vorlage{background:var(--akzent-weich);color:var(--akzent-text);
  border-color:transparent}
/* Der fertige Auftragstext: vorformatiert, aber umbrechend – sonst
   rollt die halbe Anfragenliste waagerecht. */
pre.brief{white-space:pre-wrap;word-break:break-word;font-family:var(--mono);
  font-size:var(--s1);line-height:1.55;background:var(--flaeche);border:1px solid var(--linie);
  border-radius:var(--r2);padding:var(--a3);margin:0;max-height:340px;overflow:auto;
  color:var(--tinte)}
.vorlage{border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a3);cursor:pointer;
  background:var(--flaeche);display:flex;gap:8px;align-items:flex-start;
  /* .vorlage ist selbst ein <label> – die Grundregel für Beschriftungen
     würde den Text sonst in Versalien setzen. */
  text-transform:none;letter-spacing:0;font-size:var(--s-knopf);color:var(--tinte);
  font-weight:400;margin:0}
.vorlage.an{border-color:var(--akzent);background:var(--akzent-weich)}
.vorlage input{margin-top:4px;flex:none}
.vorlage b{display:block;font-size:var(--s-knopf)}
.vorlage span{font-size:var(--s1);color:var(--gedaempft)}

/* Übersteuerung. In der dunklen Seitenleiste als ruhige Zeile wie
   die übrige Navigation – ein rot umrandeter Kasten an der
   auffälligsten Stelle nach dem Logo war ein Daueralarm für etwas,
   das im Normalbetrieb nie gebraucht wird. */
.notfall-knopf{width:100%;display:flex;justify-content:flex-start;align-items:center;gap:var(--a3);text-align:left;
  background:transparent;border:1px solid transparent;color:var(--seite-text);
  font-size:var(--s3);font-weight:600;padding:var(--a2) var(--a3);min-height:44px;
  border-radius:var(--r2)}
/* Eigener Rotton: --rot ist für helle Flächen gerechnet und wäre auf
   der fast schwarzen Seitenleiste nicht zu erkennen. */
.notfall-knopf .zeichen{color:var(--seite-rot);width:20px;height:20px;flex:none;
  display:flex;align-items:center;justify-content:center;
  font-size:var(--s3)}
.notfall-knopf:hover{background:var(--seite-flaeche);filter:none}
.banner{position:fixed;top:0;left:0;right:0;z-index:60;background:var(--notfall);color:#fff;
  padding:12px var(--a5);display:flex;align-items:center;justify-content:space-between;
  gap:var(--a5);font-size:var(--s-knopf);font-weight:600}
.banner button{background:#fff;color:var(--notfall);padding:8px var(--a4);font-size:var(--s2)}
.banner .b-text{display:flex;align-items:center;gap:var(--a3);min-width:0}
.banner .b-punkt{width:10px;height:10px;border-radius:50%;background:#fff;flex:none;
  animation:b-blinken 1.6s ease-in-out infinite}
@keyframes b-blinken{0%,100%{opacity:1}50%{opacity:.25}}
body.uebersteuert #app{margin-top:48px}
body.uebersteuert .kopf,body.uebersteuert .seite{top:48px}
body.uebersteuert .seite{height:calc(100vh - 48px)}
/* ---------- Die Vorschau der Durchsage ----------
   Seit Fassung 109 steht neben dem Formular, was man sonst erst an
   der Wand sieht; seit Fassung 293 (D3) auf der einen Oberfläche unter
   „Durchsagen & Tasten". Die eigene Seite mit `.nf-zwei` und den
   Stufenknöpfen `.stufe-knopf` ist entfallen. */
/* Dieselben Token, die auch die Vorlage `allgemein/notfall-16-9`
   benutzt — ein Haken im Selbsttest rechnet beide gegeneinander. */
.nf-vs-bild{aspect-ratio:16/9;border-radius:var(--r2);padding:var(--a4);
  display:flex;flex-direction:column;gap:var(--a2);overflow:hidden;
  background:var(--notfall);color:var(--auf-notfall)}
.nf-vs-bild[data-stufe="warnung"]{background:var(--stufe-warnung);color:var(--auf-warnung)}
.nf-vs-bild[data-stufe="info"]{background:var(--stufe-info);color:var(--auf-info)}
.nf-vs-mitte{flex:1;display:flex;flex-direction:column;justify-content:center;
  gap:var(--a2);min-height:0;overflow:hidden}
.nf-vs-kicker{font-family:var(--mono);font-size:var(--s1);letter-spacing:.12em;opacity:.85}
.nf-vs-titel{font-size:var(--s6);font-weight:600;line-height:1.05;letter-spacing:-.02em}
.nf-vs-titel.blass{opacity:.45}
.nf-vs-text{font-size:var(--s3);line-height:1.35;opacity:.92;overflow:hidden}
.nf-vs-kontakt{font-size:var(--s1);opacity:.8;flex:none}

/* Kleiner Knopf für Werkzeugleisten (Schnellmeldungs-Vorlagen,
   Mehrfachauswahl). Sekundär im Aussehen, damit er nicht mit dem
   Knopf konkurriert, der die Meldung wirklich schaltet. */
button.klein{padding:8px 12px;font-size:var(--s1);border:1px solid var(--linie);
  background:var(--flaeche);color:var(--tinte);border-radius:var(--r2)}
button.klein:hover{border-color:var(--akzent);color:var(--akzent)}

/* Ankreuzliste (Bildschirmauswahl). Höhe begrenzt: bei fünfzig
   Bildschirmen wäre der Dialog sonst so lang, dass der Knopf zum
   Absenden aus dem Bild fällt – genau der Fehler, den der
   Freigabe-Dialog schon einmal hatte. */
.bs-wahl{max-height:220px;overflow:auto;border:1px solid var(--linie);
  border-radius:var(--r2);padding:var(--a2) var(--a3);margin-top:8px;background:var(--flaeche)}
label.haken{display:flex;align-items:center;gap:var(--a3);padding:4px 0;
  font-size:var(--s2);cursor:pointer;font-weight:400;color:var(--tinte);margin:0}
label.haken input{flex:none;margin:0}
label.haken span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- Meldungen (eine Stelle, ein Aussehen) ---------- */
#hinweis{position:fixed;left:50%;bottom:var(--a6);transform:translate(-50%,80px);
  background:var(--tinte);color:var(--auf-tinte);padding:var(--a3) var(--a5);
  border-radius:var(--r3);font-size:var(--s-knopf);margin:0;opacity:0;
  transition:transform var(--takt) ease,opacity var(--takt) ease;z-index:80;pointer-events:none;max-width:90vw;
  text-align:center;line-height:1.45;box-shadow:var(--schatten-3)}
#hinweis.da{transform:translate(-50%,0);opacity:1}
#hinweis.schlecht{background:var(--notfall);color:#fff;cursor:pointer;pointer-events:auto}
#hinweis.gut{background:var(--gruen);color:#fff}
/* Der Knopf an einer Tarifsperre (Fassung 124). Die Fläche selbst
   ist `pointer-events:none` — sie soll nichts verdecken. Eine
   SCHLECHTE Meldung bleibt aber stehen, bis man sie wegklickt, und
   seit Fassung 124 kann ein Knopf darin stehen; beides braucht
   Zeiger-Ereignisse, deshalb stehen sie oben an `.schlecht`. */
#hinweis .hinweis-knopf{background:rgba(255,255,255,.16);color:#fff;
  border:1px solid rgba(255,255,255,.5);padding:4px 12px;border-radius:var(--r2);
  font-size:var(--s-klein);font-weight:600;cursor:pointer;margin-left:4px;
  white-space:nowrap;vertical-align:baseline}
#hinweis .hinweis-knopf:hover{background:rgba(255,255,255,.3)}
/* „Rückgängig“ in einer GUTEN Meldung (Fassung 409). Die Fläche ist
   hell auf dunkel und im Dunkelmodus dunkel auf hell; der Knopf nimmt
   deshalb die Schriftfarbe der Meldung, auch für seinen Fokusring.
   Ist die Meldung weg, ist er es auch für die Tab-Taste. */
#hinweis.mit-knopf{pointer-events:auto}
#hinweis .hinweis-zurueck{background:none;color:inherit;border:1px solid currentColor;
  padding:4px 12px;border-radius:var(--r1);font-size:var(--s2);font-weight:600;margin-left:4px;
  white-space:nowrap;vertical-align:baseline}
#hinweis .hinweis-zurueck:hover{filter:none;text-decoration:underline}
#hinweis .hinweis-zurueck:focus-visible{outline:2px solid currentColor;outline-offset:2px}
#hinweis:not(.da) .hinweis-zurueck{visibility:hidden}

/* ---------- Lizenzlage (Fassung 124) ----------
   Die Summenzeile beantwortet die Frage in einem Blick; die Liste
   darunter ist die Begründung. Deshalb steht sie oben und trägt
   die einzigen großen Zahlen des Dialogs. */
.lz-summe{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:var(--a3)}
@media (max-width:760px){.lz-summe{grid-template-columns:repeat(2,1fr)}}
.lz-kachel{border:1px solid var(--linie);border-radius:var(--r3);padding:var(--a3);
  background:var(--flaeche);text-align:center}
.lz-kachel b{display:block;font-size:var(--s5);line-height:1.15}
.lz-kachel span{display:block;font-size:var(--s1);color:var(--gedaempft);
  letter-spacing:.06em;text-transform:uppercase;margin-top:2px}
/* Wer zu wenig bezahlt, bekommt eine Kante — nicht die ganze
   Zeile rot. Eine Liste, in der die Hälfte rot leuchtet, liest
   niemand mehr; eine Kante findet das Auge trotzdem. */
.kunde.lz-eng{border-left:3px solid var(--rot)}

/* ---------- Große Vorschau ---------- */
.gross-huelle{position:fixed;inset:0;background:rgba(12,12,12,.94);z-index:70;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:var(--a4);padding:var(--a5)}
.gross-rahmen{background:var(--dunkel);border-radius:10px;overflow:hidden;
  box-shadow:0 20px 60px rgba(0,0,0,.5)}
.gross-rahmen iframe{border:0;display:block;background:var(--dunkel)}
.gross-leiste{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:center}
.gross-leiste .titel{color:#F7F6F3;font-weight:600;margin-right:var(--a2)}
.gross-leiste .masse{color:rgba(247,246,243,.5);font-size:var(--s2);
  font-family:var(--mono)}
/* Die beiden Nebenknöpfe standen SCHWARZ auf schwarzem Grund und
   wurden erst beim Überfahren lesbar (gemeldet 02.09.2026, Bild
   `ops/referenz/lumafy-vorschau-knoepfe-unlesbar-2026-09-02.png`).
   Grund: `button.sek` ist für helle Flächen gebaut — durchsichtig,
   Rahmen `--linie-stark`, Text `--tinte`. Die große Vorschau ist die
   EINZIGE dauerhaft dunkle Fläche im Programm; dort trägt dieselbe
   Regel den Text in Papierfarbe des Grundes.
   Erst der Zeiger gab ihnen eine helle Fläche — deshalb sah es aus
   wie ein Zeichenfehler und nicht wie eine fehlende Regel.
   Hell auf rgba(12,12,12,.94): 15,3:1. */
.gross-leiste button.sek{color:#F7F6F3;border-color:rgba(247,246,243,.42);
  background:transparent}
.gross-leiste button.sek:hover{background:rgba(247,246,243,.14);
  border-color:rgba(247,246,243,.7);color:#F7F6F3;filter:none}
.gross-leiste button.sek:active{background:rgba(247,246,243,.22);filter:none}
.gross-leiste button:focus-visible{outline:2px solid #F7F6F3;outline-offset:2px}

/* ---------- Sprachwahl ---------- */
.sprachwahl{display:flex;gap:var(--a2);margin:var(--a2) 0 var(--a3)}
.sprach-knopf{flex:1;background:var(--flaeche);border:1px solid var(--linie);
  color:var(--gedaempft);font-size:var(--s3);font-weight:600;letter-spacing:.02em;
  padding:var(--a2) var(--a3);border-radius:var(--r2);min-height:44px}
.sprach-knopf:hover{border-color:var(--tinte);color:var(--tinte);filter:none}
.sprach-knopf.an{background:var(--gewaehlt);border-color:var(--gewaehlt);color:var(--auf-gewaehlt)}

/* ============================================================
   Vorlagen-Katalog
   ------------------------------------------------------------
   Eigener Scrollbereich mit klarer Höhe. Die Filterleiste steht
   oben fest, sonst sucht man bei 200 Vorlagen den Suchschlitz.
   ============================================================ */
/* Die Sammlungen („Eigene Vorlagen" / „Allgemein" / „Alle").
   Bewusst Reiter und keine weitere Auswahlliste: Es ist die Frage,
   die man ZUERST beantwortet, und sie gehört über die Filter, nicht
   zwischen sie. Wer keine eigenen Vorlagen hat, sieht die Zeile gar
   nicht — dann gibt es nichts zu wählen. */
/* ---- Bereichsleiste (ab Fassung 76) --------------------------
   Sie hat die Reiterzeile `.kat-sammlung` abgelöst. Absichtlich
   KEINE Reiter mehr, sondern Knöpfe mit Rahmen: Reiter sehen nach
   „Ansicht wechseln" aus, Knöpfe nach „hier greifst du zu". Der
   Bereich ist die erste Entscheidung im Katalog und soll auch die
   erste sein, die man sieht. */
.kat-bereiche{display:flex;gap:var(--a2);flex:none;flex-wrap:wrap;
  padding:var(--a4) var(--a5) var(--a3);border-bottom:1px solid var(--linie);
  background:var(--flaeche)}
.kat-bereich{background:var(--flaeche-2);color:var(--gedaempft);
  border:1px solid var(--linie);border-radius:var(--r2);
  padding:var(--a2) var(--a4);font-size:var(--s3);font-weight:600;
  display:flex;align-items:center;gap:8px}
.kat-bereich:hover{color:var(--tinte);border-color:var(--linie-stark);filter:none}
/* ============================================================
   Das gewählte Segment ist nicht mehr schwarz (Fassung 132)
   ------------------------------------------------------------
   Es stand auf `--gewaehlt` (#17150F) mit heller Schrift — eine
   schwarze Fläche mitten in einer Zeile aus hellen. Regelkonform war
   das (R3: Auswahl über Fläche und Schnitt, nicht über Bernstein),
   aber es war die LAUTESTE Auswahl der ganzen Anwendung, lauter als
   der eine Handlungsknopf daneben.

   Lautstärke soll die Handlung tragen (Entscheidung Cedric,
   26.08.2026): Fläche `--flaeche-2` wie die anderen Segmente,
   Unterschied über Textfarbe und Schnitt.
   ============================================================ */
.kat-bereich.an{color:var(--tinte);background:var(--flaeche-2);
  border-color:var(--linie-stark);font-weight:600}
.kat-bereich-zahl{font-size:var(--s1);font-weight:600;color:var(--gedaempft);
  background:var(--flaeche-3);border-radius:var(--r-voll);padding:2px 8px;
  font-variant-numeric:tabular-nums}
.kat-bereich.an .kat-bereich-zahl{background:var(--flaeche-4);color:var(--tinte)}

/* ---- Ordnerzeile: die Schubladen des Kunden ---- */
/* Der Satz in einer leeren Gruppe ist mit Fassung 141 entfallen:
   Eine Branche ohne Vorlage erscheint gar nicht erst in der
   Spalte, und `Für Sie gebaut` steht nur da, wenn es solche
   Vorlagen gibt. Damit ist die leere Gruppe nicht behoben,
   sondern unmöglich. `.kat-leer` weiter unten bleibt — das ist
   der Leerzustand der SUCHE, und den gibt es weiterhin. */
.kat-ordnerzeile{display:flex;gap:var(--a2);flex:none;flex-wrap:wrap;
  align-items:center;padding:0 var(--a5) var(--a3);background:var(--flaeche)}
.kat-ordnerzeile:empty{display:none}
/* In der Filterzeile bringt sie ihr eigenes Polster nicht mit — dort
   setzt die Zeile die Abstände. */
.kat-leiste .kat-ordnerzeile{padding:0;background:transparent}
.kat-ordnerzeile.schmal{padding:var(--a2) 0}
.kat-ordnerchip{background:transparent;color:var(--gedaempft);
  border:1px solid var(--linie);border-radius:var(--r-voll);
  padding:4px var(--a3);font-size:var(--s1);font-weight:600;
  display:flex;align-items:center;gap:8px}
.kat-ordnerchip:hover{color:var(--tinte);border-color:var(--linie-stark);filter:none}
.kat-ordnerchip.an{background:var(--akzent-weich);color:var(--akzent-text);
  border-color:var(--akzent)}
.kat-ordnerchip.neu{border-style:dashed}
.kat-ordnerchip.still{border-color:transparent;text-decoration:underline}
.kat-ordnerchip-zahl{font-variant-numeric:tabular-nums;opacity:.7}
.kat-ordnerknopf{flex:none;white-space:nowrap;max-width:150px;overflow:hidden;
  text-overflow:ellipsis}

/* ---- Der Dialog „In Ordner legen" ---- */
.kat-ablage{display:flex;flex-direction:column;gap:4px;margin:var(--a3) 0;
  max-height:46vh;overflow:auto}
.kat-ablage-zeile{display:flex;justify-content:space-between;align-items:center;
  background:var(--flaeche-2);color:var(--tinte);border:1px solid var(--linie);
  border-radius:var(--r1);padding:var(--a2) var(--a3);font-size:var(--s3);
  text-align:left;width:100%}
.kat-ablage-zeile.an{border-color:var(--akzent);background:var(--akzent-weich);
  color:var(--akzent-text)}
.kat-ablage-verwalten{display:flex;gap:var(--a2);align-items:center}
.kat-ablage-verwalten input{flex:1;min-width:0}
.kat-leiste{display:flex;gap:var(--a2);flex-wrap:wrap;align-items:center;
  padding:var(--a3) var(--a5);border-bottom:1px solid var(--linie);
  background:var(--flaeche);position:sticky;top:0;z-index:3;flex:none}
.kat-leiste select,.kat-leiste input{width:auto;min-width:140px;max-width:200px;
  padding:var(--a2) var(--a3);font-size:var(--s4)}
.kat-leiste input.suche{min-width:210px;max-width:260px}
.kat-leiste .zahl{margin-left:auto;font-size:var(--s-klein);color:var(--gedaempft);
  white-space:nowrap;font-variant-numeric:tabular-nums}
.kat-ansicht{display:flex;gap:2px;border:1px solid var(--linie);border-radius:var(--r1);
  padding:2px;flex:none}
.kat-ansicht button{background:transparent;color:var(--gedaempft);padding:4px 8px;
  font-size:var(--s1);border-radius:6px}
.kat-ansicht button.an{background:var(--gewaehlt);color:var(--auf-gewaehlt)}
/* KEIN eigener Rollbereich mehr (Fassung 107). Der Katalog war bis
   Fassung 106 ein Kasten mit eigenem Rollbalken — das gehörte zu der
   Zeit, als über ihm eine feste Filterleiste klebte, die stehen
   bleiben musste. Die Leiste ist weg, und der Kasten hat den
   Rollbalken der Seite gefressen: `overscroll-behavior:contain`
   gibt eine Radbewegung NICHT an die Seite weiter, und ob der Kasten
   selbst noch einen Bruchteil eines Pixels zu rollen hat, entscheidet
   die Rundung des Bildschirms. Auf einem Gerät rollte die Seite, auf
   dem nächsten stand sie still. Jetzt rollt die Seite, wie überall
   sonst in dieser Anwendung. */
/* ---------- Was mit Fassung 141 ENTFALLEN ist ----------
   `.kat-rollen`, `.kat-raster`, `.kat-abschnitt*`, `.kat-karte`,
   `.kat-werben*`, `.kat-text`, `.kat-treffer`, `.kat-fuss*`,
   `.kat-bild-marke` und `.kat-marke*` gehörten zum Katalog aus
   Karten mit Vollvorschau und drei Abschnitten. Den gibt es nicht
   mehr (Anweisung S14); an seiner Stelle steht das Gitter aus
   Blättern weiter unten (`.vk*`). Eine Regel, die auf keinen
   Baustein mehr zeigt, ist kein Stil, sondern ein Grabstein.

   GEBLIEBEN sind `.kat-bild`, `.kat-platz`, `.kat-format` und
   `.kat-klick`: Sie tragen die echte Vorschau, und die läuft
   weiter — im Vorlagenblatt und im Vorlagenwähler des
   Seitendialogs. */
.kat-suchzeile{display:flex;align-items:center;gap:var(--a2);min-width:0}
.kat-suchzeile .suche{min-width:200px;max-width:280px}
/* Der Rahmen bekommt eine feste Höhe, der Bildschirm wird hineinskaliert.
   So bleibt das Raster ruhig, egal ob quer oder hoch – und die Kachel
   springt nicht, wenn die Vorschau nachgeladen wird. */
.kat-bild{position:relative;background:var(--flaeche-4);height:186px;overflow:hidden;
  cursor:zoom-in}
.kat-bild.hoch{height:296px}
.kat-klick{position:absolute;inset:0}
.kat-bild iframe{border:0;display:block;background:var(--dunkel);
  opacity:0;transition:opacity var(--takt) ease}
.kat-bild iframe.da{opacity:1}
/* Platzhalter, solange die Vorschau nicht geladen ist: ruhig, mit Titel
   und Formatabzeichen – keine graue Fläche, die nach Fehler aussieht. */
.kat-platz{position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:8px;padding:var(--a4);text-align:center;
  color:var(--gedaempft);font-size:var(--s1);line-height:1.45}
.kat-platz .rahmenchen{width:52px;height:30px;border:2px solid var(--linie-stark);
  border-radius:5px;opacity:.7}
.kat-platz.hoch .rahmenchen{width:30px;height:52px}
.kat-platz.laedt .rahmenchen{animation:pulsen 1.2s ease-in-out infinite}
@keyframes pulsen{0%,100%{opacity:.35}50%{opacity:.9}}
.kat-format{position:absolute;top:var(--a2);right:var(--a2);background:rgba(12,12,12,.78);
  color:#fff;font-size:var(--s1);letter-spacing:.09em;font-weight:600;padding:4px 8px;
  border-radius:6px;z-index:2}
.kat-leer{padding:var(--a7) 0;text-align:center;color:var(--gedaempft);line-height:1.6}
.kat-leer b{display:block;color:var(--tinte);font-size:var(--s-normal);margin-bottom:var(--a2)}

/* ============================================================
   Der Vorlagenkatalog ab Fassung 141 (Anweisung S14)
   ------------------------------------------------------------
   Zwei Spalten: links die Branche, rechts das Gitter. Die linke
   Spalte ist 220 px breit und bleibt es — sie ist eine Liste von
   Wörtern, keine Fläche, die mitwachsen müsste.

   AUSWAHL WIRD ÜBER FLÄCHE GEZEIGT, NICHT ÜBER BERNSTEIN. Auf der
   Seite gibt es genau eine Akzentfläche, und das ist „Vorlage
   anfragen" oben rechts (Regel R3). Eine gewählte Branche bekommt
   deshalb `--flaeche-2` und halbfette Schrift.
   ============================================================ */
.vk{display:grid;grid-template-columns:220px minmax(0,1fr);gap:var(--a6);
  padding:var(--a5);align-items:start}
.vk-spalte{display:flex;flex-direction:column;gap:var(--a3);position:sticky;
  top:var(--a5)}
.vk-spalte .mono-kopf{margin-top:var(--a3)}
.vk-spalte .mono-kopf:first-child{margin-top:0}
.vk-branchen{display:flex;flex-direction:column;gap:2px}
.vk-branche{display:flex;align-items:center;justify-content:space-between;
  gap:var(--a2);width:100%;text-align:left;background:transparent;border:0;
  color:var(--gedaempft);font-size:var(--s3);font-weight:400;
  padding:var(--a3);border-radius:var(--r1);cursor:pointer;
  transition:background var(--takt) ease,color var(--takt) ease}
.vk-branche:hover{background:var(--flaeche-2);color:var(--tinte);filter:none}
.vk-branche.an{background:var(--flaeche-2);color:var(--tinte);font-weight:600}
.vk-branche-wort{min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.vk-branche-zahl{flex:none;font-family:var(--mono);font-size:var(--s1);
  font-variant-numeric:tabular-nums;color:var(--beschriftung)}
.vk-branche.an .vk-branche-zahl{color:var(--tinte)}
/* Der Formatschalter: dieselbe Sprache wie die Branchen — die
   gewählte Stufe steht auf Fläche, nicht in Farbe. */
.vk-format{display:flex;border:1px solid var(--linie);border-radius:var(--r1);
  overflow:hidden;background:var(--flaeche)}
.vk-format-knopf{flex:1;background:transparent;border:0;border-radius:0;
  color:var(--gedaempft);font-size:var(--s2);font-weight:400;
  padding:var(--a3) var(--a1);cursor:pointer}
.vk-format-knopf+.vk-format-knopf{border-left:1px solid var(--linie)}
.vk-format-knopf:hover{background:var(--flaeche-2);color:var(--tinte);filter:none}
.vk-format-knopf.an{background:var(--flaeche-2);color:var(--tinte);font-weight:600}

.vk-haupt{min-width:0;display:flex;flex-direction:column;gap:var(--a4)}
.vk-haupt-kopf{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--a4);flex-wrap:wrap}
.vk-hinweis{font-size:var(--s2);color:var(--gedaempft)}
/* Die Sortierung (Fassung 216). Sie steht rechts in der Kopfzeile —
   dort, wo man sie sucht, wenn das Gitter darunter nicht in der
   erwarteten Reihenfolge steht. */
.kat-sort-feld{display:flex;align-items:center;gap:var(--a2);margin-left:auto}
.kat-sort-feld .mono-kopf{margin:0}
select.kat-sort{width:auto;min-width:160px;min-height:36px;padding:var(--a1) var(--a3)}
/* Die Marke „NEU" liegt IM Rahmen, oben links: Über dem Namen
   darunter stünde sie in der Zeile, die schon der Titel füllt. */
.vk-neu{position:absolute;left:var(--a2);top:var(--a2);z-index:2;
  background:var(--akzent);color:var(--auf-akzent);font-family:var(--mono);font-size:var(--s1);
  font-weight:600;letter-spacing:.12em;line-height:1;padding:var(--a1) var(--a2);border-radius:var(--r1)}

/* Das Gitter. `auto-fill` und nicht `auto-fit`: Bei drei Vorlagen
   sollen drei Blätter in Normalgröße stehen und nicht drei
   auseinandergezogene. */
.vk-gitter{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:20px 16px;align-items:start}
.vk-blatt{display:flex;flex-direction:column;gap:var(--a1);align-items:stretch;
  background:transparent;border:0;padding:0;text-align:left;cursor:pointer;
  color:var(--tinte);font-size:var(--s2);min-width:0}
.vk-blatt:hover{filter:none}
/* Der Rahmen ist bei ALLEN Blättern gleich groß (4:3). Deshalb
   bleibt das Gitter ruhig, obwohl 16:9 und 9:16 gemischt sind. */
.vk-rahmen{display:flex;align-items:center;justify-content:center;
  position:relative;
  aspect-ratio:4/3;background:var(--flaeche-2);border:1px solid var(--linie);
  border-radius:var(--r1);overflow:hidden;
  transition:border-color var(--takt) ease}
.vk-blatt:hover .vk-rahmen,.vk-blatt:focus-visible .vk-rahmen{
  border-color:var(--linie-stark)}
/* Das angedeutete Blatt im echten Seitenverhältnis: hochkant 84 %
   der Rahmenhöhe, quer 84 % der Rahmenbreite. Keine verkleinerte
   Vollvorlage — bei 150 px ist die unlesbar und wirkt schmutzig. */
.vk-seite{display:flex;flex-direction:column;justify-content:flex-end;
  gap:2px;padding:var(--a2);box-shadow:var(--schatten-2);overflow:hidden}
.vk-seite.hoch{height:84%;aspect-ratio:9/16}
.vk-seite.quer{width:84%;aspect-ratio:16/9}
/* Die Farben des Blattes folgen NICHT dem Farbmodus des Editors.
   Das Blatt bildet die Vorlage ab, und die ist hell oder dunkel,
   egal ob der Bediener gerade im Dunkelmodus sitzt. `--creme` und
   `--tinte` tauschen im Dunkelmodus die Rollen — eine helle
   Vorlage wäre dort plötzlich schwarz. */
.vk-seite-hell{background:#F7F6F3}
.vk-seite-dunkel{background:var(--dunkel)}
/* Zwei Hälften nebeneinander — `raumschild-16-9` und
   `sicherheit-16-9` sind weder hell noch dunkel, und eine der
   beiden Antworten wäre eine Behauptung. */
.vk-seite-geteilt{background:linear-gradient(90deg,var(--dunkel) 0 45%,
  #F7F6F3 45% 100%)}
.vk-z{display:block;border-radius:1px;flex:none}
.vk-z-kicker{width:46%;height:3px}
.vk-z-titel{width:78%;height:7px}
.vk-seite-hell .vk-z-kicker{background:rgba(23,21,15,.35)}
.vk-seite-dunkel .vk-z-kicker,.vk-seite-geteilt .vk-z-kicker{
  background:rgba(247,246,243,.45)}
.vk-seite-hell .vk-z-titel{background:#000}
.vk-seite-dunkel .vk-z-titel,.vk-seite-geteilt .vk-z-titel{background:#F7F6F3}
.vk-z-akzent{width:30%;height:4px;background:var(--akzent)}

/* ---------- Die echte Miniatur (ab Fassung 147) ----------
   Dieselbe Fläche wie das angedeutete Blatt — gleiche Größe,
   gleicher Schatten, gleiche Ecke. Nur der Inhalt ist die Vorlage
   selbst statt dreier Balken. Die Balken bleiben darunter liegen
   und tragen die Fläche, solange die Vorschau lädt oder gar nicht
   kommt; dadurch springt im Gitter nichts. */
.vk-echt{position:relative;overflow:hidden}
/* Das Vorschaubild vom Server (Fassung 381) liegt über den Balken des
   Blattes und erscheint, wenn es geladen ist. Im Katalograster füllt es
   die Bildfläche, ohne beschnitten zu werden. */
.vk-still{position:relative}
.vk-still > img.vk-bild,.kat-bild-still > img.vk-bild{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;opacity:0;transition:opacity var(--takt) ease}
.kat-bild-still > img.vk-bild{object-fit:contain}
.vk-still.mit-bild > img.vk-bild,.kat-bild-still.mit-bild > img.vk-bild{opacity:1}
/* Folie mit Video (Fassung 384): Standbild als Hintergrund, Abspielzeichen
   in der Mitte, die Balken des Blattes weichen, sobald das Bild da ist. */
.vk-video{position:relative}
.vk-video.hat-standbild > .vk-z{visibility:hidden}
.vk-video-zeichen{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;display:inline-flex;
  align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;pointer-events:none}
.vk-echt > iframe{position:absolute;left:50%;top:50%;border:0;
  transform-origin:center center;pointer-events:none;
  opacity:0;transition:opacity var(--takt) ease}
.vk-echt.fertig > iframe{opacity:1}
/* `visibility` und nicht `display`: Die Balken halten die Fläche
   der Vorlage weiter auf, auch wenn man sie nicht mehr sieht. */
.vk-echt.fertig > .vk-z{visibility:hidden}

/* ---------- Das Zeichen des fremden Programms ----------
   Nur bei den Vorlagen, die ihren Inhalt NICHT in lumafy haben:
   Canva, Google Präsentationen, YouTube. Es sitzt in der unteren
   rechten Ecke des Rahmens — nicht über der Vorschau wie das alte
   Formatabzeichen, sondern auf der Fläche daneben. */
/* Das Blatt einer Anbindungsvorlage trägt statt der Balken die
   gezeichnete Bühne des Programms (Fassung 186, `katProgrammBuehne`):
   ein SVG im Maß der Vorlage, das die Fläche ganz füllt. */
.vk-programmblatt{align-items:stretch;justify-content:stretch;padding:0;overflow:hidden}
.vk-buehne-huelle{display:block;width:100%;height:100%;line-height:0}
.vk-buehne{display:block;width:100%;height:100%}
/* Die Farben stehen im SVG selbst (katalog.js): Die Bühne bildet
   einen Bildschirm ab und folgt nicht dem Farbmodus des Editors —
   wie die Blätter darüber. Hier nur Schrift und Maß. */
.vk-buehne text{font-family:"IBM Plex Sans",system-ui,sans-serif}
.vk-buehne .vk-b-kicker{font-family:"IBM Plex Mono",ui-monospace,monospace;
  font-size:30px;letter-spacing:.32em}
.vk-buehne .vk-b-name{font-size:96px;font-weight:600;letter-spacing:-.01em}
.vk-buehne .vk-b-satz{font-size:34px}
/* Dieselbe Bühne in der großen Bildfläche (Vorlagenseite, Vollbild,
   Namensdialog): mittig, im Seitenverhältnis der Vorlage. */
.kat-bild.kat-bild-buehne{display:flex;align-items:center;justify-content:center;background:var(--dunkel)}
.kat-bild.kat-bild-buehne .vk-buehne-huelle{position:absolute;inset:0}
/* Text, der nur für Vorlesegeräte da ist. Ein Zeichen ohne Wort
   ist für sie stumm; `display:none` wäre es ebenfalls. */
.nur-vorlesen{position:absolute;width:1px;height:1px;overflow:hidden;
  clip-path:inset(50%);white-space:nowrap}
.vk-name{font-size:var(--s2);font-weight:600;line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 12 px und nicht 11: Die Schriftskala hat sechs Stufen, und
   darunter wird keine erfunden (Anweisung, Randbedingungen). */
.vk-mass{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft);
  font-variant-numeric:tabular-nums}

@media (max-width:900px){
  .vk{grid-template-columns:minmax(0,1fr);gap:var(--a5)}
  .vk-spalte{position:static}
  .vk-branchen{flex-direction:row;flex-wrap:wrap}
  .vk-branche{width:auto}
}

/* ---------- Reste des Vorlagenblatts (bis Fassung 146) ----------
   Der Dialog ist mit Fassung 147 durch die Vorlagenseite ersetzt
   (`.vs` weiter unten). Was hier stehen bleibt, sind die vier
   Bausteine, die die neue Seite weiterbenutzt: die Bildfläche, der
   Kicker, der Beschreibungstext und die Beschreibungsliste. Alles
   Dialogspezifische — Breite 820 px, versteckte Titelleiste,
   stehende Fußzeile, `Schließen`-Verweis — ist entfallen, weil es
   ohne Dialog nichts mehr trägt. */
/* `align-self:stretch` statt `height:100%`: Die Vorschau füllt ihre
   Spalte, ohne nach der Höhe zu fragen, die erst aus ihr folgt. */
.vb-bild{width:100%;align-self:stretch;min-height:240px;
  background:transparent;cursor:default}
.vb-kicker{font-family:var(--mono);font-size:var(--s1);letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung)}
.vb-text{margin:0;font-size:var(--s3);line-height:1.55;color:var(--gedaempft);
  max-width:46ch}
.vb-liste{display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:var(--a2) var(--a4);margin:0;font-size:var(--s3)}
.vb-liste dt{color:var(--gedaempft)}
.vb-liste dd{margin:0;color:var(--tinte)}

/* ---------- Die Vorlagenseite (Design-Übergabe 1.4) ----------
   Zwei Spalten: links die Vorschau auf `--flaeche-2`, rechts eine
   330 px breite Textspalte. Die Vorschaufläche nimmt den Rest — sie
   ist der Grund, aus dem die Seite überhaupt existiert.

   Die Höhe der Bühne ist `600px`, aber nicht starr: `min()` nimmt,
   was das Fenster hergibt. Auf einem Laptop mit 768 px Höhe stünden
   sonst 600 px Bild plus Kopf plus Fuß, und die Vorschau reichte
   unter den Rand. */
.vs{display:grid;grid-template-columns:minmax(0,1fr) 330px;
  align-items:stretch;gap:0;border:1px solid var(--linie);
  border-radius:var(--r3);overflow:hidden;background:var(--flaeche)}
.vs-links{background:var(--flaeche-2);display:flex;align-items:center;
  justify-content:center;padding:var(--a6);border-right:1px solid var(--linie)}
.vs-rechts{padding:var(--a6);display:flex;flex-direction:column;gap:var(--a4)}
/* Breite und Höhe der Bühne stehen im Stil NICHT — sie werden
   gerechnet (`katBuehneStellen`). Ein Kasten mit `height:min(600px,…)`
   und `aspect-ratio:9/16` kommt in einem Flex-Elternteil auf die
   Breite 0; am 29.08.2026 im Browser gemessen. Hier bleibt nur, was
   nicht von der Fläche abhängt. */
.vs-buehne{border-radius:10px;overflow:hidden;flex:none;
  box-shadow:0 10px 30px rgba(26,18,6,.22)}
/* Die Klasse muss gegen `.kat-bild.hoch{height:296px}` ankommen —
   deshalb zwei Klassen im Wähler und nicht eine. */
.vs-buehne .vb-bild.kat-bild,.vs-buehne .vb-bild.kat-bild.hoch{
  width:100%;height:100%;min-height:0;cursor:default}
.vs-linie{height:1px;background:var(--linie)}
.vs-aehnlich{display:flex;flex-direction:column;gap:var(--a2)}
.vs-verweis{font-size:var(--s3);color:var(--akzent-text);font-weight:600}
.vs-beruhigung{margin:0;font-size:var(--s1);color:var(--gedaempft);line-height:1.5}
/* Die Brotkrumen stehen dort, wo sonst die Bereichsmarke steht —
   über der Überschrift. Sie sind der Rückweg; einen Zurück-Knopf
   gibt es auf dieser Seite ausdrücklich nicht. */
.vs-krumen{display:inline-flex;align-items:center;gap:var(--a2)}
.vs-krumen a{color:var(--akzent-text);text-decoration:underline;
  text-underline-offset:2px}
.vs-krume-trenner{color:var(--gedaempft)}

@media (max-width:900px){
  .vs{grid-template-columns:minmax(0,1fr)}
  .vs-links{border-right:0;border-bottom:1px solid var(--linie);padding:var(--a5)}
  .vs-rechts{padding:var(--a5)}
  /* Auf dem Handy entscheidet die Breite. Die Rechnung nimmt sie
     ohnehin mit (`Math.min(b / breite, h / hoehe)`), hier bleibt
     nur die Sicherung gegen einen Kasten, der aus der Spalte läuft. */
  .vs-buehne{max-width:100%}
}

/* ---------- Vollbild einer Vorlage (Design-Übergabe 1.4b) ----------
   Ganze Fläche auf `--dunkel`, keine Navigation. Es ist KEINE
   Wiedergabe: eine Seite, still, so groß wie möglich. */
.vv{position:fixed;inset:0;z-index:120;background:var(--dunkel);
  display:flex;flex-direction:column;color:#F7F6F3}
.vv-kopf{display:flex;align-items:center;justify-content:space-between;
  gap:var(--a4);padding:var(--a4) var(--a6);flex:none}
.vv-kicker{font-family:var(--mono);font-size:var(--s1);letter-spacing:.1em;
  text-transform:uppercase;color:rgba(247,246,243,.62)}
/* 600, nicht 700: Geladen sind IBM Plex Sans 400 und 600. Jedes
   andere Gewicht malt der Browser rechnerisch fett, und das sieht
   auf einem guten Bildschirm schmierig aus. */
.vv-name{font-size:var(--s4);font-weight:600;margin-top:2px}
.vv-kopf-rechts{display:flex;align-items:center;gap:var(--a4)}
.vv-kopf-rechts .text-knopf{color:#F7F6F3}
.vv-flaeche{flex:1;min-height:0;display:flex;align-items:center;
  justify-content:center;padding:0 var(--a6) var(--a6)}
/* Wie auf der Vorlagenseite: Die Maße rechnet `katBuehneStellen`,
   hier steht nur, was nicht von der Fläche abhängt. */
.vv-buehne{flex:none;border-radius:10px;overflow:hidden;max-width:100%;
  box-shadow:0 16px 48px rgba(0,0,0,.5)}
.vv-bild.kat-bild,.vv-bild.kat-bild.hoch{height:100%;width:100%;
  background:transparent;cursor:default}

/* Kompakte Listenansicht */
.kat-liste{display:flex;flex-direction:column;gap:2px}
.kat-zeile{display:flex;align-items:center;gap:var(--a3);padding:8px var(--a3);
  border-radius:var(--r2);cursor:pointer;border:1px solid transparent}
.kat-zeile:hover{background:var(--flaeche-2);border-color:var(--linie)}
/* Feste Spaltenbreite, das Abzeichen darin zentriert – sonst tanzen die
   Titel je nach Format nach links und rechts. */
.kat-zeile .mini-bild{width:52px;height:38px;flex:none;display:flex;
  align-items:center;justify-content:center}
.kat-zeile .mini-bild::after{content:'';display:block;width:44px;height:25px;
  border:1px solid var(--linie-stark);border-radius:3px;background:var(--flaeche-4)}
.kat-zeile .mini-bild.hoch::after{width:21px;height:37px}
.kat-zeile .zt{flex:1;min-width:0}
.kat-zeile .zt b{display:block;font-size:var(--s2);font-weight:600}
.kat-zeile .zt span{font-size:var(--s1);color:var(--gedaempft);
  font-family:var(--mono)}
.kat-zeile .zform{font-size:var(--s1);letter-spacing:.08em;font-weight:600;color:var(--gedaempft);
  background:var(--flaeche-3);padding:4px 8px;border-radius:5px;flex:none}
.kat-zeile .zknopf{flex:none}

/* ============================================================
   Ordner: Baum zum Verschieben, Mehrfachauswahl, Ablegen
   ============================================================ */
.ordner{margin-bottom:8px}
.ordner-kopf{display:flex;align-items:center;gap:8px;padding:8px 8px;border-radius:var(--r2);
  cursor:pointer;user-select:none}
.ordner-kopf:hover{background:var(--flaeche-2)}
.ordner-kopf .pfeil{width:14px;color:var(--gedaempft);font-size:var(--s1)}
.ordner-kopf .name{font-weight:600;font-size:var(--s2)}
.ordner-kopf .zahl{margin-left:auto;font-size:var(--s1);color:var(--gedaempft)}
.ordner-inhalt{margin-left:var(--a4);padding-left:var(--a3);border-left:1px solid var(--linie)}
.ordner.zu > .ordner-inhalt{display:none}
.ordner-kopf.ablageziel{background:var(--akzent-weich);
  box-shadow:inset 0 0 0 2px var(--akzent);color:var(--akzent-text)}
.ankreuz{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:var(--s2);
  color:var(--gedaempft);cursor:pointer;text-transform:none;letter-spacing:0;font-weight:400}
.ankreuz input{margin:0}

/* Zielbaum im Verschiebe-Dialog */
.zielbaum{border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche-2);
  max-height:290px;overflow:auto;padding:8px;scrollbar-width:thin}
.zielzeile{display:flex;align-items:center;gap:8px;padding:8px 8px;border-radius:var(--r1);
  cursor:pointer;font-size:var(--s2);user-select:none}
.zielzeile:hover{background:var(--flaeche-3)}
.zielzeile.an{background:var(--gewaehlt);color:var(--auf-gewaehlt)}
.zielzeile.an .pf,.zielzeile.an .jetzt{color:var(--auf-gewaehlt);opacity:.72}
.zielzeile .sym-ordner{color:var(--akzent);flex:none;font-size:var(--s2)}
.zielzeile .pf{margin-left:auto;font-size:var(--s1);color:var(--gedaempft);
  font-family:var(--mono);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;max-width:44%}
.zielzeile .jetzt{font-size:var(--s1);letter-spacing:.1em;text-transform:uppercase;font-weight:600;
  color:var(--gruen);flex:none}
.zielzeile.tief1{padding-left:24px}
.zielzeile.tief2{padding-left:44px}
.zielzeile.tief3{padding-left:64px}
.zielzeile.tief4{padding-left:80px}
.zielzeile.tief5{padding-left:96px}
.neuer-ordner{border:1px dashed var(--linie-stark);border-radius:var(--r2);padding:var(--a3);
  margin-top:8px;background:var(--flaeche-2)}
.kennung-vorschau{font-family:var(--mono);font-size:var(--s1);
  background:var(--dunkel);color:#F7F6F3;border-radius:var(--r1);padding:8px var(--a3);
  margin-top:var(--a2);word-break:break-all;line-height:1.5}
.kennung-vorschau .neu{color:var(--akzent)}
.verschieb-liste{max-height:150px;overflow:auto;border:1px solid var(--linie);
  border-radius:var(--r2);padding:var(--a2);background:var(--flaeche-2);font-size:var(--s2)}
.verschieb-liste div{padding:4px 0;display:flex;gap:var(--a2);align-items:center}
.verschieb-liste .pfad{color:var(--gedaempft);font-family:var(--mono);
  font-size:var(--s1)}
.fortschritt{height:6px;border-radius:3px;background:var(--flaeche-3);overflow:hidden;
  margin-top:8px}
.fortschritt i{display:block;height:100%;background:var(--akzent);width:0;
  transition:width var(--takt-weit) ease}
.vz-zeile{display:flex;align-items:flex-start;gap:8px}
.vz-zeile input[type=checkbox]{margin-top:4px}
.vz-griff{cursor:grab;color:var(--linie-stark);font-size:var(--s4);line-height:1;padding-top:2px}
.vz-griff:active{cursor:grabbing}
.tabelle tr.gezogen{opacity:.45}
.wahlleiste{position:sticky;bottom:0;background:var(--gewaehlt);color:var(--auf-gewaehlt);
  border-radius:var(--r3);padding:var(--a3) var(--a4);display:flex;align-items:center;
  gap:var(--a3);margin-top:var(--a3);box-shadow:var(--schatten-3);z-index:4}
.wahlleiste{flex-wrap:wrap}
.wahlleiste b{font-size:var(--s2);flex:1 1 auto}
.wahlleiste button{padding:8px var(--a3);font-size:var(--s2)}

/* Ziehen in der Mediathek. Die Kachel selbst bekommt KEIN
   `cursor:grab`: Auf ihr liegen vier Knöpfe, und ein Greifzeiger
   über einem Knopf verspricht das Falsche. Der Greifzeiger sitzt
   deshalb nur auf dem Namen. */
.med-karte.zieht{opacity:.45}
.med-karte[draggable=true] .med-name{cursor:grab}
.med-ordnerleiste{border-bottom:0;padding-left:0;padding-right:0}

/* ============================================================
   Vorlagenverwaltung (Fassung 43)
   ------------------------------------------------------------
   Vorher eine Tabelle mit 33 Zeilen und 132 gleich lauten Knöpfen.
   Jetzt Karten mit Vorschau: Eine Vorlage IST ein Bild, und wer sie
   verwaltet, sucht sie am Aussehen, nicht an der Kennung.
   ============================================================ */
.vw-leiste{display:flex;flex-wrap:wrap;gap:var(--a2);align-items:center;
  margin-bottom:var(--a4);padding-bottom:var(--a3);border-bottom:1px solid var(--linie)}
.vw-leiste input[type=search]{flex:1;min-width:180px;max-width:320px;padding:8px var(--a3);
  font-size:var(--s4)}
.vw-leiste select{width:auto;min-width:140px;padding:8px var(--a3);font-size:var(--s4)}
.vw-zahl{margin-left:auto;font-size:var(--s2);color:var(--gedaempft);white-space:nowrap}

.vw-gruppe{margin-bottom:var(--a5)}
.vw-gruppe-kopf{display:flex;align-items:center;gap:8px;padding:8px;margin-bottom:var(--a3);
  border-radius:var(--r2);background:var(--flaeche-2)}
.vw-gruppe-kopf .name{font-weight:600;font-size:var(--s2)}
.vw-gruppe-kopf .zahl{margin-left:auto;font-size:var(--s1);color:var(--gedaempft)}
.vw-gruppe-kopf.ablageziel{background:var(--akzent-weich);
  box-shadow:inset 0 0 0 2px var(--akzent);color:var(--akzent-text)}

.vw-raster{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));
  gap:var(--a3)}
.vw-karte{position:relative;border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche);box-shadow:var(--schatten-1);overflow:hidden;display:flex;flex-direction:column;
  transition:border-color var(--takt) ease,box-shadow var(--takt) ease}
.vw-karte:hover{border-color:var(--linie-stark);box-shadow:var(--schatten-1)}
/* Ausgewählt und frisch gespeichert sind ZWEI Zustände und dürfen
   nicht gleich aussehen – sonst hält man das eine für das andere. */
.vw-karte.gewaehlt{border-color:var(--akzent);box-shadow:inset 0 0 0 1px var(--akzent)}
.vw-karte.frisch{border-color:var(--gruen);box-shadow:inset 0 0 0 1px var(--gruen)}
.vw-karte.gezogen{opacity:.45}
.vw-haken{position:absolute;top:var(--a2);left:var(--a2);z-index:3;margin:0;
  background:rgba(12,12,12,.72);border-radius:6px;padding:4px;line-height:0}
.vw-haken input{margin:0}
.vw-griff{position:absolute;top:var(--a2);left:40px;z-index:3;cursor:grab;color:#fff;
  background:rgba(12,12,12,.72);border-radius:6px;padding:2px 8px;font-size:var(--s3);
  line-height:1.4}
.vw-griff:active{cursor:grabbing}
/* Die Vorschau bekommt eine feste Höhe: ein Raster, in dem quer und
   hoch verschieden hohe Kacheln ergäben, springt beim Filtern. */
.vw-bild{position:relative;height:150px;background:var(--flaeche-4);overflow:hidden}
.vw-bild .kat-bild,.vw-bild .kat-bild.hoch{height:150px;cursor:default}
/* Das Formatabzeichen aus dem Katalog bleibt hier weg: Es steht
   zwei Zeilen tiefer noch einmal als Marke, und über der kleinen
   Vorschau verdeckt es genau die Ecke, die man sehen will. */
.vw-bild .kat-format{display:none}
.vw-text{padding:var(--a3) var(--a3) 0;display:flex;flex-direction:column;gap:8px;flex:1}
.vw-titel{font-weight:600;font-size:var(--s3);line-height:1.3}
.vw-marken{display:flex;flex-wrap:wrap;gap:4px}
.vw-marken .etikett{font-size:var(--s1);padding:2px 8px}
.etikett.ist-eigen{background:var(--akzent-weich);color:var(--akzent-text)}
.etikett.ist-benutzt{background:var(--gruenBg);color:var(--gruen)}
.vw-tun{display:flex;gap:8px;padding:var(--a3);align-items:center}
.vw-tun button{padding:8px var(--a3);font-size:var(--s2)}
.vw-tun .mehr-knopf{margin-left:auto;flex:none;min-width:44px}

/* Der Handlungsdialog. Jede Zeile trägt einen Satz – und eine
   gesperrte Zeile trägt den GRUND, statt zu fehlen. */
.vw-kopfzeile{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:var(--a2)}
.vw-handlungen{display:flex;flex-direction:column;gap:8px;margin:var(--a4) 0}
.vw-handlung{display:block;width:100%;text-align:left;background:var(--flaeche);
  border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a3) var(--a4);
  color:var(--tinte);font-weight:400}
.vw-handlung:hover{border-color:var(--linie-stark);background:var(--flaeche-2)}
.vw-handlung b{display:block;font-size:var(--s3);margin-bottom:2px}
.vw-handlung span{display:block;font-size:var(--s2);color:var(--gedaempft);line-height:1.45}
.vw-handlung.gesperrt{opacity:1;background:var(--flaeche-2);border-style:dashed;cursor:not-allowed}
.vw-handlung.gesperrt b{color:var(--gedaempft)}
.vw-handlung.gesperrt span{color:var(--rot-text)}

@media (max-width:860px){
  .vw-raster{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--a2)}
  .vw-bild{height:110px}
  .vw-bild .kat-bild,.vw-bild .kat-bild.hoch{height:110px}
  .vw-leiste input[type=search]{max-width:none}
  .vw-zahl{margin-left:0;width:100%}
}

/* ============================================================
   Geräte
   ------------------------------------------------------------
   Dieselbe Rasterlogik wie bei den Vorlagen (.vw-raster), aber
   ohne Vorschaubild: An einem Gerät gibt es nichts zu sehen, nur
   etwas zu wissen. Deshalb Zeilen statt Kachel – und die wichtigste
   Angabe (läuft es?) ganz oben, nicht unten.
   ============================================================ */
/* Ein eigenes Raster, breiter als das der Vorlagen.

   Eine Gerätekarte trägt bis zu zwölf Zeilen und DREI Knöpfe; die
   230 px der Vorlagenkacheln reichen dafür nicht. Vor Fassung 53
   waren es zwei Knöpfe und es ging gerade so — mit „Fernwartung"
   lief die Reihe aus der Karte heraus und `overflow:hidden` schnitt
   sie ab. Ein Knopf, den man nicht sieht, ist kein Knopf. */
.gr-raster{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.gr-karte{border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche);
  box-shadow:var(--schatten-1);display:flex;flex-direction:column;overflow:hidden}
/* Und die Knopfreihe darf umbrechen. Ohne das entscheidet die
   Fensterbreite darüber, ob der letzte Knopf existiert. */
.gr-karte .vw-tun{flex-wrap:wrap}
.gr-karte .vw-tun button{flex:0 1 auto;min-width:0;white-space:nowrap}
.gr-karte:hover{border-color:var(--linie-stark)}
/* Ein entkoppeltes Gerät ist nicht kaputt, sondern erledigt. Es
   verschwindet nicht (sonst weiß niemand, warum es weg ist), tritt
   aber zurück. */
.gr-karte.ruht{opacity:.6;border-style:dashed}
.gr-kopf{display:flex;align-items:center;gap:8px;padding:var(--a3);
  border-bottom:1px solid var(--linie)}
/* Der Zustandspunkt war bisher auf `.eintrag` beschränkt – in der
   Gerätekarte blieb er dadurch unsichtbar (kein Hintergrund, keine
   Größe). Dieselben Farben, damit „grün" hier nicht etwas anderes
   heißt als in der Bildschirmliste. */
.gr-kopf .punkt{width:8px;height:8px;border-radius:50%;flex:none;
  background:var(--punkt-aus)}
.gr-kopf .punkt.an{background:var(--punkt-an)}
.gr-kopf .punkt.pause{background:var(--akzent)}
.gr-kopf .punkt.still{background:var(--punkt-still)}
.gr-name{font-weight:600;font-size:var(--s3);flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gr-zeilen{padding:var(--a3);display:flex;flex-direction:column;gap:4px;flex:1}
.gr-zeile{display:flex;gap:8px;font-size:var(--s2);line-height:1.45}
.gr-was{color:var(--gedaempft);min-width:96px;flex:none}
.gr-wert{color:var(--tinte);word-break:break-word}
.gr-fehler{display:flex;flex-wrap:wrap;gap:4px;padding:0 var(--a3) var(--a3)}

/* ---------- Fernwartung ----------
   Das Bildschirmfoto steht auf schwarzem Grund, nicht auf weißem:
   Der Bildschirm, den es zeigt, ist selbst dunkel, und ein weißer
   Rahmen darum lässt jede Vorlage falsch aussehen. Die feste
   Höhe verhindert, dass der Dialog beim Eintreffen des Bildes
   springt – ein Hochkantfoto ist dreimal so hoch wie ein quer. */
.gr-foto{margin-bottom:var(--a4)}
.gr-foto-bild{display:block;width:100%;max-height:46vh;object-fit:contain;
  background:#000;border:1px solid var(--linie);border-radius:var(--r2)}

.gr-standorte{display:flex;flex-direction:column;gap:8px;margin-bottom:var(--a4)}
.gr-standort{display:flex;align-items:center;gap:var(--a3);padding:var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche-2)}
.gr-standort>div:first-child{flex:1;min-width:0}
.gr-standort b{display:block;font-size:var(--s3)}
.gr-standort span{display:block;font-size:var(--s2);color:var(--gedaempft)}

@media (max-width:860px){
  .gr-was{min-width:80px}
  /* Auf schmalen Fenstern lieber eine Karte je Zeile als drei
     abgeschnittene Knöpfe nebeneinander. */
  .gr-raster{grid-template-columns:1fr}
}

/* ============================================================
   Live-Daten
   ============================================================ */
.quellen-zeile{border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche);
  padding:var(--a3) var(--a4);margin-bottom:8px}
.qz-kopf{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.qz-name{font-weight:600;font-size:var(--s-knopf);display:flex;align-items:center;gap:8px}
.qz-punkt{width:9px;height:9px;border-radius:50%;background:var(--gedaempft);flex:none;
  box-shadow:0 0 0 3px transparent;transition:background var(--takt) ease}
.qz-punkt.gruen{background:var(--gruen)}
.qz-punkt.gelb{background:var(--gelb)}
.qz-punkt.rot{background:var(--rot)}
.qz-stand{font-size:var(--s1);color:var(--gedaempft);margin-left:auto;text-align:right;
  line-height:1.4}
.qz-stand.schlecht{color:var(--rot)}
.qz-stand.gut{color:var(--gruen)}
.qz-knopf{flex:none;padding:8px var(--a3);font-size:var(--s1)}
.qz-koerper{margin-top:var(--a3)}
.qz-koerper .feld{margin-bottom:var(--a3)}
.qz-koerper .feld:last-child{margin-bottom:0}
.qz-kategorie{border-top:1px dashed var(--linie);margin-top:var(--a3);padding-top:var(--a3)}
.qz-kategorie:first-child{border-top:0;margin-top:0;padding-top:0}
.qz-kat-name{font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;text-transform:uppercase;font-weight:400;
  color:var(--gedaempft);margin-bottom:var(--a2)}
.qz-probe{font-size:var(--s1);color:var(--gedaempft);margin-top:var(--a2);line-height:1.5;
  background:var(--flaeche-2);border-radius:var(--r1);padding:8px 8px}

/* Symbolwähler für Aktien und Krypto */
.symbolwahl{border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a3);
  background:var(--flaeche-2)}
.symbol-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.symbol-chip{display:inline-flex;align-items:center;gap:8px;background:var(--gewaehlt);
  color:var(--auf-gewaehlt);border-radius:var(--r-voll);padding:4px 8px 4px 12px;font-size:var(--s1)}
.symbol-chip button{background:transparent;color:inherit;padding:0 4px;font-size:var(--s3);
  line-height:1;opacity:.65}
.symbol-chip button:hover{opacity:1;filter:none}
/* Die letzte Zeile läuft absichtlich weich aus – so sieht man, dass
   unten noch mehr steht, statt eine halb abgeschnittene Reihe. */
.symbol-angebot{display:flex;flex-wrap:wrap;gap:4px;max-height:140px;overflow:auto;
  margin-bottom:8px;scrollbar-width:thin;
  -webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 18px),transparent);
  mask-image:linear-gradient(to bottom,#000 calc(100% - 18px),transparent)}
.symbol-angebot:hover{-webkit-mask-image:none;mask-image:none}
.symbol-angebot button{background:var(--flaeche);border:1px solid var(--linie);
  color:var(--tinte);font-size:var(--s1);font-weight:600;padding:4px 8px;border-radius:var(--r-voll)}
.symbol-angebot button:hover{border-color:var(--akzent);background:var(--akzent-weich);filter:none}
.symbol-angebot button .lang{color:var(--gedaempft);font-weight:400;margin-left:4px}
.symbol-frei{display:flex;gap:var(--a2)}
.symbol-frei input{flex:1}
.symbol-gruppe{font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;text-transform:uppercase;font-weight:400;
  color:var(--gedaempft);width:100%;margin:8px 0 2px}

/* Kurszugang */
.kurs-block{border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a4);
  background:var(--flaeche);box-shadow:var(--schatten-1)}
.kurs-zustand{display:inline-flex;align-items:center;gap:8px;font-size:var(--s1);font-weight:600;
  padding:4px 12px;border-radius:var(--r-voll);background:var(--flaeche-3);color:var(--gedaempft)}
.kurs-zustand.gesetzt{background:var(--gruenBg);color:var(--gruen)}
.kurs-zustand.fehlt{background:var(--gelbBg);color:var(--gelb)}
.pruef-ergebnis{background:var(--flaeche-2);border-radius:var(--r2);padding:var(--a3);
  margin-top:var(--a3);font-size:var(--s2);line-height:1.6}
.sso-block .pruef-ergebnis{margin-bottom:var(--a3)}
.pruef-ergebnis .wert{font-family:var(--mono);font-size:var(--s-normal);
  font-weight:600;color:var(--tinte)}
.pruef-ergebnis.schlecht{background:var(--rotBg);color:var(--rot-text)}

/* ============================================================
   Sicherheit, Token, Webhooks, Protokoll
   ============================================================ */
.abo-liste{display:flex;flex-wrap:wrap;gap:var(--a2);margin-top:8px}
.abo-liste label{display:inline-flex;align-items:center;gap:8px;font-size:var(--s1);
  text-transform:none;letter-spacing:0;color:var(--tinte);font-weight:400;margin:0;
  border:1px solid var(--linie);border-radius:var(--r-voll);padding:8px 12px;cursor:pointer;
  background:var(--flaeche)}
.abo-liste label:hover{border-color:var(--linie-stark)}
.abo-liste input{margin:0}

/* Empfängerliste der Störungsmeldungen. Bewusst UNTEREINANDER und
   nicht als Chip-Reihe wie .abo-liste: Hier stehen E-Mail-Adressen,
   und wer entscheidet, ob ein Kollege nachts eine Mail bekommt,
   muss die Adresse ganz lesen können. Nebeneinander umbrechende
   Adressen liest niemand nach. */
/* Zwei Ziffern brauchen kein Feld über die ganze Dialogbreite.
   `flex:none` ist nötig, weil .wert-zeile ein Flexbehälter ist und
   die Eingabe sonst trotz Breitenangabe mitwächst. */


.empf-liste{display:flex;flex-direction:column;gap:8px;margin-top:8px}
/* Zwei Dinge, an denen diese Regel schon zweimal danebengriff, und
   deshalb steht beides jetzt im Wähler:

   1. KEIN `label` davor. Eine Empfängerzeile mit zwei Schaltern ist
      ein `div` — ein `label` mit zwei Kästchen darin wäre
      mehrdeutig, ein Klick auf den Namen träfe irgendeines davon.
   2. KEIN `.empf-liste` davor. Dieselbe Zeilenform wird auch
      außerhalb der Liste gebraucht: für den Hauptschalter und für
      „Auch lumafy mitbenachrichtigen". Mit dem Elternteil im Wähler
      standen dort Kästchen und Beschriftung untereinander statt
      nebeneinander. */
.empf-zeile{display:flex;align-items:center;gap:12px;font-size:var(--s3);
  text-transform:none;letter-spacing:0;color:var(--tinte);font-weight:400;margin:0;
  border:1px solid var(--linie);border-radius:var(--r2);padding:12px;cursor:pointer;
  background:var(--flaeche)}
.empf-zeile:hover{border-color:var(--linie-stark)}
.empf-zeile input{margin:0;flex:none}
.empf-zeile>span{display:flex;flex-direction:column;gap:2px;min-width:0}

/* Zwei Schalter je Empfänger (Störung / Entwarnung). Der Name links,
   die Schalter rechts — und bei schmalem Fenster untereinander,
   damit die Adresse nicht gequetscht wird. */
.empf-zwei{justify-content:space-between;flex-wrap:wrap;gap:12px;cursor:default}
.empf-zwei .empf-wer{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 200px}
.empf-schalter{display:flex;gap:16px;flex:none}
.empf-schalter label{display:inline-flex;align-items:center;gap:8px;margin:0;
  font-size:var(--s2);text-transform:none;letter-spacing:0;font-weight:400;
  color:var(--tinte);cursor:pointer}
.empf-schalter input:disabled+span{color:var(--gedaempft)}
.empf-name{font-weight:600}
.empf-mail{font-size:var(--s2);color:var(--gedaempft);word-break:break-all}

.geheim-karte{background:var(--dunkel);color:#F7F6F3;border-radius:var(--r2);padding:var(--a4);
  font-family:var(--mono);font-size:var(--s2);word-break:break-all;line-height:1.6;
  display:flex;align-items:center;gap:var(--a3)}
.geheim-karte span{flex:1}
.geheim-karte button{flex:none;padding:8px var(--a3);font-size:var(--s1)}
.pro-filter{display:flex;gap:var(--a2);flex-wrap:wrap;align-items:flex-end;margin-bottom:var(--a4)}
.pro-filter > div{flex:1;min-width:130px}
.pro-filter label{margin-bottom:4px}
.pro-filter input,.pro-filter select{padding:var(--a2) var(--a3);font-size:var(--s4)}
.pro-filter .knoepfe{flex:none;display:flex;gap:var(--a2)}
.pro-tabelle-huelle{max-height:52vh;overflow:auto;border:1px solid var(--linie);
  border-radius:var(--r3);scrollbar-width:thin}
.pro-tabelle-huelle .tabelle td,.pro-tabelle-huelle .tabelle th{padding:8px var(--a3)}
.pro-tabelle-huelle thead th{position:sticky;top:0;background:var(--flaeche-2);z-index:1}

/* ---------- Einführung beim ersten Anmelden ---------- */
.tour-huelle{position:fixed;inset:0;background:var(--abdeckung);z-index:90;
  display:flex;align-items:center;justify-content:center;padding:var(--a5)}
.tour{background:var(--flaeche);border-radius:var(--r4);max-width:490px;width:100%;
  padding:var(--a6);box-shadow:var(--schatten-3)}
.tour .schritt-nr{font-size:var(--s1);letter-spacing:.16em;text-transform:uppercase;
  color:var(--gedaempft);font-weight:600;margin-bottom:var(--a3)}
.tour h3{margin:0 0 var(--a3);font-size:var(--s5);letter-spacing:-.01em}
.tour p{margin:0;line-height:1.65;color:var(--gedaempft);font-size:var(--s-knopf)}
.tour-punkte{display:flex;gap:8px;margin:var(--a5) 0 0}
.tour-punkte i{width:22px;height:4px;border-radius:2px;background:var(--flaeche-3);display:block}
.tour-punkte i.an{background:var(--akzent)}
.tour-fuss{display:flex;align-items:center;gap:8px;margin-top:var(--a5)}
.tour-fuss .text-knopf{margin-right:auto}

/* ---------- Tastaturkürzel ---------- */
.kuerzel{display:grid;grid-template-columns:auto 1fr;gap:8px var(--a4);align-items:center;
  font-size:var(--s2)}
kbd{font-family:var(--mono);font-size:var(--s1);background:var(--flaeche-3);
  border:1px solid var(--linie);border-bottom-width:2px;border-radius:6px;padding:4px 8px;
  white-space:nowrap;color:var(--tinte)}

/* ---------- Menü am Bildschirm ---------- */
.mehr-knopf{display:inline-flex;align-items:center;gap:8px}
.mehr-knopf .pfeil{font-size:var(--s1);color:var(--gedaempft);line-height:1}
.menue{position:absolute;right:var(--a6);top:64px;z-index:40;background:var(--flaeche);
  border:1px solid var(--linie);border-radius:var(--r3);box-shadow:var(--schatten-3);
  min-width:262px;padding:8px;overflow:hidden}
.menue button{display:block;width:100%;text-align:left;background:transparent;border:0;
  padding:8px var(--a3);border-radius:var(--r1);font-size:var(--s2);color:var(--tinte)}
.menue button:hover{background:var(--flaeche-3);filter:none}
.menue button.an{background:var(--akzent-weich);color:var(--akzent-text);font-weight:600}
.menue button.gefahr-eintrag{color:var(--rot)}
.menue button.gefahr-eintrag:hover{background:var(--rotBg)}
.menue .trenner{height:1px;background:var(--linie);margin:8px 4px}
.menue .kopfzeile{padding:var(--a2) var(--a3) var(--a1);font-family:var(--mono);
  font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;font-weight:400;color:var(--beschriftung)}
.menue .fusszeile{padding:4px var(--a3) 8px;font-size:var(--s1);color:var(--gedaempft);
  line-height:1.45}

/* ---------- Hauptnavigation in der Seitenleiste ---------- */
.haupt-nav{padding:0 var(--a3) var(--a1);display:flex;flex-direction:column;gap:2px}
/* `justify-content:flex-start` ist hier keine Zierde, sondern die
   Behebung des Fehlers, der die ganze Leiste schief aussehen ließ.
   Die Grundregel für <button> (weiter oben in dieser Datei) setzt
   `justify-content:center`; `.nav-knopf` hat sie nie überschrieben.
   Jede Zeile zentrierte deshalb ihren Inhalt, und weil jede
   Beschriftung anders lang ist, rückte jede Zeile anders weit ein:
   „Medien" am weitesten, „Live-Steuerung" am wenigsten. Das sah aus
   wie eine Verschachtelung unter „Playlists", die es im Aufbau nie
   gegeben hat. Zeilen MIT Zähler standen zufällig richtig, weil
   `margin-left:auto` am Zähler den Rest nach links drückt — daher
   wirkte die Einrückung zusätzlich unregelmäßig.

   Ruhefarbe ist ab Fassung 101 `--seite-gedaempft`, nicht
   `--seite-text`: In der Leiste stehen neun Zeilen, von denen genau
   eine gilt. Wenn alle neun in voller Helligkeit und in Halbfett
   stehen, trägt die aktive Zeile ihre Auszeichnung allein über die
   Fläche — im Entwurf trägt sie beides. */
.nav-knopf{width:100%;display:flex;justify-content:flex-start;align-items:center;
  gap:var(--a3);background:transparent;
  border:1px solid transparent;border-radius:var(--r1);padding:var(--a3);
  font-size:var(--s3);font-weight:400;color:var(--seite-gedaempft);
  text-align:left;min-height:44px}
.nav-knopf:hover{background:var(--seite-flaeche);color:var(--seite-text);filter:none}
/* Ab Fassung 94 steckt in .zeichen ein Inline-SVG statt eines
   Textzeichens. `font-size` regelt es nicht mehr — die Größe steht
   am SVG selbst —, aber die Fläche muss weiter dieselbe bleiben,
   sonst rückt bei jedem Symbolwechsel die Beschriftung daneben. */
.nav-knopf .zeichen{display:flex;align-items:center;justify-content:center;
  color:inherit;width:20px;height:20px;
  text-align:center;flex:none}
/* Die drei Einträge im Fuß sind dem Alltag nachgeordnet und stehen
   deshalb eine Stufe kleiner — so steht es im Entwurf. */
.seite-fuss .nav-knopf{font-size:var(--s2);padding:var(--a2) var(--a3)}
/* Eine Linie zwischen dem Notfall und dem Seltenen darunter. Ohne
   sie stehen vier Zeilen ohne Gliederung untereinander, und der
   Notfall sieht aus wie der erste Punkt einer Liste. */
.fuss-trenner{height:1px;background:var(--seite-linie);margin:var(--a2) var(--a1)}

/* ---------- Seiten eines Bildschirms ---------- */
.seitenleiste{display:flex;gap:var(--a2);flex-wrap:wrap;align-items:center;
  padding:0 0 var(--a4);border-bottom:1px solid var(--linie);margin-bottom:var(--a4)}
.seitenleiste:empty{display:none}
.seiten-chip{display:inline-flex;align-items:center;gap:8px;background:var(--flaeche);
  border:1px solid var(--linie);border-radius:var(--r-voll);padding:8px 8px 8px var(--a3);
  font-size:var(--s2);cursor:pointer;color:var(--tinte)}
.seiten-chip:hover{border-color:var(--linie-stark)}
.seiten-chip.an{background:var(--gewaehlt);border-color:var(--gewaehlt);color:var(--auf-gewaehlt)}
.seiten-chip .zeit{font-size:var(--s1);letter-spacing:.06em;color:var(--gedaempft);
  font-family:var(--mono)}
.seiten-chip.an .zeit{color:var(--auf-gewaehlt);opacity:.65}
.seiten-chip .punkt{width:7px;height:7px;border-radius:50%;background:var(--linie-stark);flex:none}
.seiten-chip .punkt.live{background:var(--gruen)}
.seiten-chip .stift{opacity:.5;padding:0 2px;display:inline-flex;align-items:center}
.seiten-chip:hover .stift{opacity:1}
.seiten-neu{background:transparent;border:1px dashed var(--linie-stark);border-radius:var(--r-voll);
  padding:8px var(--a3);font-size:var(--s2);color:var(--gedaempft)}
.seiten-neu:hover{border-color:var(--tinte);color:var(--tinte);filter:none}
.seiten-hinweis{width:100%;font-size:var(--s-klein);color:var(--gedaempft);margin-top:var(--a1);
  line-height:1.5}
/* Eine Seite ist jetzt ein Block mit Kopfzeile, Feldern und einer
   Vorschau der gewählten Vorlage – nicht mehr eine Zeile aus fünf
   Feldern nebeneinander. Die neue Seite bekommt einen Rahmen in der
   Akzentfarbe, damit niemand mehr aus Versehen die bestehende
   bearbeitet. */
.seiten-zeile{padding:var(--a4);border:1px solid var(--linie);border-radius:var(--r3);
  background:var(--flaeche);margin-bottom:var(--a4)}
.seiten-zeile.neu{border-color:var(--akzent);box-shadow:0 0 0 3px var(--akzent-weich)}
.seiten-zeile-kopf{display:flex;align-items:center;gap:var(--a3);margin-bottom:var(--a3);
  font-family:var(--mono);font-size:var(--s2);letter-spacing:.1em;
  text-transform:uppercase;font-weight:400;color:var(--beschriftung)}
.seiten-zeile-kopf .text-knopf{margin-left:auto;text-transform:none;letter-spacing:0}
.seiten-gitter{display:grid;grid-template-columns:1.6fr .8fr .8fr .8fr;gap:8px;
  align-items:end}
.seiten-zeile label{font-size:var(--s1)}
.seiten-zeile input,.seiten-zeile select{margin:0}

/* ---------- Die Frage mit drei Antworten (Fassung 127) ----------
   Ersetzt `confirm()` dort, wo Arbeit verlorengehen kann. Die
   Knöpfe stehen untereinander und nicht nebeneinander: Sie tragen
   ganze Sätze („Speichern und weiter"), und drei davon in einer
   Reihe brechen auf einem schmalen Fenster unschön um. */
/* `pre-line`, damit eine Rückfrage aufzählen kann, WORAUF sie sich
   bezieht — bei „8 Playlists löschen?" sind das die acht Namen.
   Ohne das stünden sie in einer Wurst hintereinander, und genau
   dann liest sie niemand. Umgebrochen wird weiterhin automatisch;
   `pre-line` behält nur die Zeilenumbrüche, die im Text stehen. */
/* `--seite-text` stand hier bis Fassung 211 — das ist die Schrift der
   DUNKLEN Seitenleiste (#F6F2EA). Auf dem weißen Dialoggrund waren das
   1,07:1, also praktisch unsichtbar; gemeldet am 15.09.2026 mit
   Bildschirmfoto. Der Text einer Rückfrage ist die Hauptinformation des
   Dialogs und gehört auf `--tinte`. */
.dialog-frage-text{margin:0 0 var(--a4);line-height:1.55;color:var(--tinte);
  white-space:pre-line}
.reihe-frage{display:flex;flex-direction:column;align-items:stretch;gap:8px}
.reihe-frage button{width:100%;justify-content:center}
/* Drei Wege: gleich breite Knöpfe in einer Reihe, und der Dialog
   dafür etwas breiter. Sonst bricht die Reihe um und die Frage sieht
   unfertig aus (Fassung 212). */
.dialog.frage-drei{max-width:660px}
@media (min-width:560px){
  .reihe-frage{flex-direction:row;justify-content:flex-end;align-items:center}
  .reihe-frage button{width:auto}
  .reihe-frage-drei{flex-wrap:nowrap}
  .reihe-frage-drei button{flex:1 1 0;min-width:0}
  /* „Zurück zum Bearbeiten" ist der Rückweg und gehört nach links,
     weg von den beiden Wegen, die etwas tun. */
  .reihe-frage button:last-child{margin-right:auto;order:-1}
}

/* ---------- Feldhilfe auf Abruf (Fassung 127) ----------
   Die Erklärung zu einem Feld steht eingeklappt hinter einem
   dezenten Wort. Sie ist da, wenn jemand sie braucht, und sie
   nimmt keine Fläche, wenn nicht. Gemeldet am 26.08.2026: die
   Dauerhinweise „wirken unprofessionell".

   Bewusst ein `<details>` aus HTML-Bordmitteln: kein JavaScript,
   mit Tastatur bedienbar, und Vorleseprogramme kennen es. */
.feld-hilfe{margin-top:4px}
.feld-hilfe>summary{display:inline-flex;align-items:center;gap:8px;
  font-size:var(--s1);color:var(--gedaempft);cursor:pointer;
  list-style:none;user-select:none;padding:2px 0;width:max-content}
.feld-hilfe>summary::-webkit-details-marker{display:none}
.feld-hilfe>summary::before{content:"?";display:inline-flex;
  align-items:center;justify-content:center;width:16px;height:16px;
  border:1px solid var(--linie);border-radius:50%;
  font-size:11px;font-weight:600;line-height:1}
.feld-hilfe>summary:hover{color:var(--seite-text)}
.feld-hilfe>summary:focus-visible{outline:2px solid var(--fokus);outline-offset:2px;border-radius:4px}
.feld-hilfe[open]>summary{margin-bottom:2px}
.feld-hilfe .hinweis{margin-top:0}

/* ---------- Zeitraum im Kalender (Fassung 126) ----------
   Eigene Zeile unter Wochentagen und Uhrzeit, mit Trennlinie: Ein
   Zeitraum ist etwas anderes als ein Zeitfenster. Wochentag und
   Uhrzeit sagen „gerade nicht dran", ein Zeitraum sagt „vorbei" —
   und danach kommt die Seite auch nicht mehr als Ersatz. */
.seiten-datum{display:grid;grid-template-columns:.8fr .8fr 1.6fr;gap:8px;
  align-items:end;margin-top:var(--a2);padding-top:var(--a3);
  border-top:1px dashed var(--linie)}
@media (max-width:620px){.seiten-datum{grid-template-columns:1fr 1fr}
  .seiten-datum-text{grid-column:1/-1}}
.seiten-datum-lage{display:block;margin-top:4px;font-size:var(--s1);color:var(--gedaempft)}
.seiten-datum-lage.rot{color:var(--rot);font-weight:600}

/* ---------- „Neue Seite" gehört nach oben (Fassung 126) ----------
   Gemeldet am 25.08.2026: Der Knopf stand nur in der Fußzeile,
   unter allen Seiten. Bei acht Seiten heißt das erst scrollen,
   dann finden. Er steht jetzt zusätzlich oben — als voller Knopf
   und nicht als Nebensache, weil das Anlegen einer Seite der
   häufigste Grund ist, diesen Dialog überhaupt zu öffnen. */
.seiten-neu-oben{display:flex;align-items:center;gap:var(--a3);
  margin:var(--a4) 0;padding-bottom:var(--a3);border-bottom:1px solid var(--linie)}
.seiten-neu-oben button{font-size:var(--s-knopf);padding:12px 20px}
.seiten-anzahl{font-family:var(--mono);font-size:var(--s1);letter-spacing:.1em;
  text-transform:uppercase;color:var(--gedaempft);margin-left:auto}
.seiten-vorlage{display:flex;gap:var(--a4);align-items:center;margin-top:var(--a4);
  padding-top:var(--a4);border-top:1px solid var(--linie)}
.seiten-vorlage-name{font-weight:600;margin-bottom:8px}
.schaufenster{width:150px;flex:none}
.schaufenster .kat-bild{height:96px;border-radius:var(--r2);cursor:default}
.schaufenster .kat-bild.hoch{height:150px}

@media (max-width:900px){.seiten-gitter{grid-template-columns:1fr 1fr}}

/* ---------- Vorlagenwähler ---------- */
.waehler{border:1px solid var(--linie);border-radius:var(--r3);overflow:hidden;
  background:var(--flaeche-2);display:flex;flex-direction:column}
.waehler-kopf{display:flex;gap:var(--a3);align-items:center;padding:var(--a3);
  border-bottom:1px solid var(--linie);background:var(--flaeche)}
.waehler-kopf .suche{margin:0;flex:1}
.waehler-kopf .zahl{font-size:var(--s-klein);color:var(--gedaempft);white-space:nowrap;
  font-variant-numeric:tabular-nums}
/* ============================================================
   EIN Rollbereich, und das ist der Dialog (Fassung 132)
   ------------------------------------------------------------
   Hier stand `overflow:auto;max-height:46vh`. Damit rollte der
   Vorlagenwähler INNERHALB des Dialogs, der selbst schon rollt — am
   26.08.2026 gemessen: der Dialogrumpf 840/1164, der Wähler darin
   479/3016. Ein Rollbereich im Rollbereich ist genau der Fehler, an
   dem Fassung 107 hängengeblieben ist, und der Grund, warum die
   Einstellungen von einem Dialog auf eine Seite umgebaut wurden
   (Anweisung 2.1).

   Jetzt wächst der Wähler mit, und es rollt nur der Dialog. Der
   trägt dafür `max-height:80vh` und eine stehende Fußzeile, damit
   „Anlegen" nie unter dem sichtbaren Rand verschwindet.
   ============================================================ */
.waehler-rollen{padding:var(--a3)}
.waehler-raster{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  gap:var(--a3);align-items:start}
.waehler-raster.klein{grid-template-columns:repeat(auto-fill,minmax(168px,1fr))}
.waehler-karte{border:1px solid var(--linie);border-radius:var(--r2);overflow:hidden;
  background:var(--flaeche);box-shadow:var(--schatten-1);cursor:pointer;text-align:left;
  transition:border-color var(--takt) ease,box-shadow var(--takt) ease}
.waehler-karte:hover{border-color:var(--linie-stark)}
.waehler-karte:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.waehler-karte.an{border-color:var(--akzent);box-shadow:0 0 0 2px var(--akzent-weich)}
/* Alle Kacheln gleich hoch – sonst reißt eine Hochformat-Vorlage in
   der Reihe eine Lücke unter die Querformat-Kacheln daneben. Die
   Vorschau skaliert sich ohnehin selbst in die Fläche hinein. */
.waehler-karte .kat-bild,.waehler-karte .kat-bild.hoch{height:134px;cursor:pointer}
/* Das Formatabzeichen aus dem Katalog liegt hier über dem Bild und
   sagt dasselbe wie die Zeile darunter. Einmal reicht. */
.waehler-karte .kat-format,.schaufenster .kat-format{display:none}
.waehler-name{padding:8px var(--a3) 0;font-size:var(--s1);font-weight:600;line-height:1.3}
.waehler-format{padding:2px var(--a3) 8px;font-size:var(--s1);color:var(--gedaempft);
  font-variant-numeric:tabular-nums}
.reihe-eng{display:flex;align-items:center;gap:var(--a3);margin-bottom:8px}
.reihe-eng label{margin:0}
.reihe-eng select{margin:0;margin-left:auto;width:auto}

/* ---------- Dateien ablegen ---------- */
.ablage{border:2px dashed var(--linie);border-radius:var(--r3);padding:var(--a6) var(--a5);
  text-align:center;font-size:var(--s2);color:var(--gedaempft);cursor:pointer;background:var(--flaeche)}
.ablage:hover,.ablage.drueber{border-color:var(--akzent);color:var(--tinte);
  background:var(--akzent-weich)}
.tabelle tr.frisch td{background:var(--akzent-weich)}
.tabelle tr.frisch td:first-child{box-shadow:inset 3px 0 0 var(--akzent)}

/* ============================================================
   Auf dem Handy
   ------------------------------------------------------------
   Ein Handy ist kein schmaler Bildschirm, sondern ein anderes
   Gerät: eine Hand, ein Daumen, unterwegs. Vorher wurde die
   Seitenleiste einfach über den Editor gestapelt – man scrollte an
   fünf Bildschirmen, dem Werbekasten, zwei Sprachknöpfen und der
   Nutzerzeile vorbei, bevor die Arbeit anfing.

   Acht Regeln tragen diesen Block:
   1. Ein Bildschirm, eine Aufgabe: Liste ODER bearbeiten ODER
      Vorschau – nicht alles untereinander.
   2. Die Handlung gehört nach unten, in Daumenreichweite.
   3. Nichts unter 44 × 44 px zum Antippen.
   4. Eingabefelder mit mindestens 16 px (steht global bei `input`).
   5. Kein Text, der abbricht, wo es weh tut: der Bildschirmname
      darf gekürzt werden, ein Zustand nie.
   6. Zustand als Wort UND Farbe.
   7. Der untere Rand ist heilig: env(safe-area-inset-bottom).
   8. Dieselben Bausteine wie am Rechner – Karten, Pillen, Felder,
      Farben. Eigene Handy-Bauteile verdoppeln nur die Pflege.
   ============================================================ */
.nur-handy{display:none}
.schublade-abdeckung{display:none}

@media (max-width:860px){
  .nur-handy{display:flex}
  #app{grid-template-columns:1fr}

  /* ---- Die Schublade: alles Seltene wandert hierher ----
     Vorlagen, Einstellungen, Konto, Abmelden. Auf dem
     Arbeitsbildschirm bleibt nur, was zum Arbeiten gehört. */
  .seite{position:fixed;top:0;bottom:0;left:0;z-index:70;
    width:min(86vw,340px);height:100%;
    transform:translateX(-100%);visibility:hidden;
    transition:transform var(--takt-weit) ease,visibility var(--takt-weit) step-end;
    box-shadow:var(--schatten-3);
    padding-bottom:env(safe-area-inset-bottom)}
  #app.schublade-auf .seite{transform:none;visibility:visible;
    transition:transform var(--takt-weit) ease,visibility 0s}
  .schublade-abdeckung{display:block;position:fixed;inset:0;z-index:65;
    background:var(--abdeckung)}
  .marke{padding:calc(var(--a4) + env(safe-area-inset-top)) var(--a4) var(--a3)}

  /* ---- Kopfzeile ----
     Der Aufbau steht weiter unten bei „Handybreite" (Fassung 151);
     hier bleibt nur, dass sie oben klebt.

     `.waehler-knopf` ist mit Fassung 151 ENTFALLEN: Der
     Bildschirmname war bis dahin der Umschalter, und das galt,
     solange der Editor die Anwendung war. Eine Regel, die auf
     keinen Baustein mehr zeigt, ist kein Stil, sondern ein
     Grabstein. Die LAMPE bleibt — sie steht jetzt vor dem Namen in
     der Kopfzeile und sagt beim Bearbeiten einer Playlist deren
     Zustand. */
  .handy-kopf{position:sticky;top:0;z-index:6}
  .handy-titel .lampe{width:8px;height:8px;border-radius:50%;flex:none;
    background:var(--punkt-aus)}
  .handy-titel .lampe.versteckt{display:none}
  .handy-titel .lampe.an{background:var(--punkt-an)}
  .handy-titel .lampe.pause{background:var(--akzent)}
  .handy-titel .lampe.feierabend{background:var(--punkt-feierabend)}
  .handy-titel .lampe.still{background:var(--punkt-still)}

  /* ---- Der alte Kopf wird zum Zustandsstreifen ----
     Der Name steht jetzt oben im Umschalter; das Eingabefeld hier
     hat auf 390 px mitten im Wort abgebrochen. Umbenannt wird über
     „Bildschirm ▾ → Umbenennen" – derselbe Weg wie am Rechner. */
  .kopf{padding:var(--a2) var(--a3);gap:var(--a2);position:static;align-items:center}
  .kopf-links .name-eingabe{display:none}
  /* Ein Streifen, nicht drei Zeilen: die Pillen rollen waagerecht,
     brechen aber nie mitten im Wort ab. */
  /* `min-width:0` ist hier die tragende Zeile, nicht Feinschliff.
     Ein Flex-Kind darf von sich aus nie schmaler werden als sein
     Inhalt (`min-width:auto`). Der Streifen rollte deshalb nicht in
     sich, sondern schob die ganze Seite auf: auf 390 px war das
     Dokument 793 px breit, und im Playlist-Editor ließ sich alles
     waagerecht wegschieben — Formular, Vorschau, Handlungsleiste.
     Beide Ebenen brauchen es, der Streifen und sein Kasten.
     (Am 29.08.2026 auf 390 px nachgemessen, L-218.) */
  .kopf-links{min-width:0}
  .kopf-unter{margin-top:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
    min-width:0;max-width:100%;
    padding-bottom:2px;
    /* Der weiche Rand sagt: hier geht es weiter. Ohne ihn sieht die
       abgeschnittene Pille nach einem Fehler aus. */
    -webkit-mask-image:linear-gradient(90deg,#000 86%,transparent);
    mask-image:linear-gradient(90deg,#000 86%,transparent)}
  .kopf-unter::-webkit-scrollbar{display:none}
  .kopf-unter .etikett{flex:none}
  /* Die Geräte-Chips (`#b-status`) sind kein `.etikett`, sondern ein
     Flex-Kasten mit `min-width:0`. Im Streifen wurden sie deshalb auf
     0 px zusammengedrückt: Die Knöpfe standen 17 px breit
     untereinander, und „Screen Gang" ragte links aus dem Bild
     (auf 390 px nachgemessen, 13.09.2026). Im Streifen gilt für sie
     dasselbe wie für jede Pille: eigene Breite, kein Umbruch. */
  .kopf-unter .geraete-chips{flex:none;flex-wrap:nowrap;margin-top:0}
  /* Der Streifen bekommt die volle Breite: das Bildschirmmenü sitzt
     auf dem Handy unten in der Handlungsleiste, nicht mehr daneben. */
  .kopf-knoepfe:empty{display:none}
  .nur-rechner{display:none}
  #handy-aktionen #btn-bs-mehr{flex:none;min-height:44px;min-width:44px}
  .menue{right:var(--a3);top:56px;min-width:auto;left:var(--a3)}

  .leer{min-height:auto;padding:var(--a7) var(--a4)}
  .lfelder{grid-template-columns:1fr}
  .vk{padding-left:var(--a4);padding-right:var(--a4)}

  /* ---- Reiter als waagerecht rollbare Segmente ----
     Der Rollbalken ist ausgeblendet — sonst liegt auf dem Telefon
     ein grauer Strich unter jeder Reiterzeile. Damit war aber auch
     jeder Hinweis weg, DASS es weitergeht: Auf dem Vorlagenreiter
     endete die Zeile bei „Gas…" und sah aus wie das Ende (Prüflauf
     12.09.2026, C-16). Ein weicher Verlauf am rechten Rand sagt es
     wieder — er steht am Elternknoten, damit er beim Rollen liegen
     bleibt, und verschwindet, sobald das Ende erreicht ist
     (`scroll-driven`, wo der Browser es kann; sonst steht er
     dauerhaft und ist immer noch besser als nichts). */
  .reiter{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;
    margin-left:calc(-1 * var(--a4));margin-right:calc(-1 * var(--a4));
    padding:0 var(--a4) var(--a1)}
  .reiter::-webkit-scrollbar{display:none}
  .reiter-knopf{flex:none;min-height:44px}

  /* ---- Arbeitsfläche. Unten bleibt Platz für die Handlungsleiste,
     sonst liegt der letzte Knopf des Formulars darunter. ---- */
  .formular{padding:var(--a4) var(--a4)
    calc(var(--a7) + 56px + env(safe-area-inset-bottom))}
  .seitenleiste{padding-bottom:var(--a3);margin-bottom:var(--a3)}

  /* ---- Die Vorschau wird zum hochziehbaren Blatt ----
     visibility:hidden im geschlossenen Zustand ist kein Beiwerk:
     ohne das bleibt der Inhalt des Blattes mit Tab erreichbar,
     obwohl niemand ihn sieht. */
  .vorschau{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:75;
    max-height:88vh;overflow:auto;overscroll-behavior:contain;
    background:var(--flaeche);border-top:1px solid var(--linie);
    border-radius:var(--r4) var(--r4) 0 0;box-shadow:var(--schatten-3);
    padding:var(--a2) var(--a3) calc(var(--a4) + env(safe-area-inset-bottom));
    transform:translateY(101%);visibility:hidden;
    transition:transform var(--takt-weit) ease,visibility var(--takt-weit) step-end}
  #app.blatt-auf .vorschau{transform:none;visibility:visible;
    transition:transform var(--takt-weit) ease,visibility 0s}
  .blatt-griff{display:block;width:40px;height:4px;border-radius:var(--r-voll);
    background:var(--linie-stark);margin:0 auto var(--a3)}
  .vorschau-innen{background:transparent;border:0;padding:0}
  .rahmen{margin:0 auto}
  .blatt-zu{width:100%;margin-top:var(--a3);min-height:48px}

  /* ---- Handlungsleiste unten. Der untere Rand ist heilig: ohne
     env(safe-area-inset-bottom) liegt „Speichern" unter dem Balken
     des iPhones. ---- */
  .handy-leiste{position:fixed;left:0;right:0;bottom:0;z-index:40;
    display:flex;align-items:center;gap:var(--a2);
    background:var(--flaeche);border-top:1px solid var(--linie);
    padding:var(--a2) var(--a3) calc(var(--a2) + env(safe-area-inset-bottom))}
  .handy-leiste.versteckt{display:none !important}
  .blatt-knopf{flex:none;width:48px;min-height:48px;padding:0;font-size:var(--s5)}
  .handy-aktionen{flex:1;display:flex}
  .handy-aktionen .speicher-block{flex:1;flex-direction:row-reverse;
    justify-content:flex-end;gap:var(--a3)}
  .handy-aktionen #btn-speichern{flex:1;min-height:48px}

  /* ---- 44 × 44 px ist die Grenze, unter der Fehlgriffe anfangen.
     Deshalb pauschal für jeden Knopf und nicht als Liste einzelner
     Klassen: eine Liste vergisst immer den, der als nächstes
     dazukommt. Ausgenommen sind nur Textlinks im Fließtext – die
     sind Teil eines Satzes und dürfen ihn nicht auseinanderziehen. ---- */
  #app button:not(.text-knopf),.dialog button:not(.text-knopf),
  .tour button:not(.text-knopf),.gross-leiste button{min-height:44px}
  .sym,.mini,.lweg{min-width:44px}
  .marke .sym{min-width:44px;min-height:44px}
  .seiten-chip,.seiten-neu,.tag,.sprach-knopf,.bereich-knopf,.klein{min-height:44px}
  .lgriff{min-height:44px;display:flex;align-items:center}
  /* Dialoge gehen auf dem Handy über die ganze Fläche. Ein
     gerahmtes Kästchen mit 20 px Luft ringsum verschenkt auf 390 px
     ein Fünftel der Breite. */
  .dialog-huelle{padding:0}
  .dialog,.dialog.breit,.dialog.sehr-breit,.dialog.bereich-dialog{
    max-height:100vh;height:100%;border-radius:0;max-width:none}
  /* Solange ein Dialog oder die große Vorschau offen ist, hat die
     untere Handlungsleiste nichts zu suchen: sie schimmert sonst
     durch die Abdeckung und sieht aus, als gehöre ihr „Speichern"
     zum Dialog. */
  body.ueber-allem .handy-leiste{display:none}

  .dialog-kopf{border-radius:0;padding-top:calc(var(--a4) + env(safe-area-inset-top))}
  #dialog-inhalt{padding:var(--a4)}
  #dialog-inhalt > .reihe:last-child{bottom:calc(-1 * var(--a4));
    margin:var(--a4) calc(-1 * var(--a4)) calc(-1 * var(--a4));
    padding:var(--a3) var(--a4) calc(var(--a3) + env(safe-area-inset-bottom))}
  #dialog-inhalt > .reihe:last-child button{flex:1;min-height:48px}

  /* ---- Nichts darf die Seite waagerecht aufschieben ----
     Ein Suchfeld mit fester Breite (360 px im Wissen) ist auf
     390 px breiter als die Fläche; `max-width:100%` allein half
     nicht, weil sein Kasten selbst ein Flex-Kind mit
     `min-width:auto` ist und deshalb mitwächst. Gemessen am
     29.08.2026: Dokumentbreite 376 px bei 371 px Fläche — wenig,
     aber es reicht, damit die ganze Seite unter dem Finger
     verrutscht. */
  .seiten-tun{min-width:0;max-width:100%}
  .hi-suche,.seiten-tun .bs-suche{width:100%;max-width:100%;min-width:0}
}

/* Am Rechner gibt es weder Schublade noch untere Leiste – die
   Zustandsklassen dürfen dort nichts bewirken, sonst hängt nach dem
   Verkleinern und Vergrößern des Fensters ein halb offenes Blatt
   in der Ecke. */
@media (min-width:861px){
  #app.schublade-auf .seite,#app.blatt-auf .vorschau{transform:none;visibility:visible}
}

/* ---------- Szenen, Gruppen, Pulte ----------
   Die Karte ist dieselbe Form wie bei den Geräten. Neu ist die
   Szenenzeile: Sie sieht im Editor aus wie später am Pult, damit
   niemand hinfahren muss, um zu sehen, was eine Taste tut. Eine
   laufende Szene färbt die ganze Karte – der Zustand soll aus drei
   Metern Entfernung erkennbar sein, nicht erst beim Lesen. */
.sz-huelle{display:flex;flex-direction:column}
.sz-kopf{display:flex;align-items:center;justify-content:space-between;
  margin:var(--a5) 0 var(--a3);gap:var(--a3)}
.sz-kopf h3{margin:0;font-size:16px}
.sz-leer{padding:var(--a3) var(--a4);border:1px dashed var(--linie-stark);
  border-radius:12px;color:var(--gedaempft);font-size:14px;margin-bottom:var(--a3)}

.sz-karte{border:1px solid var(--linie);border-radius:12px;padding:var(--a4);
  margin-bottom:var(--a3);background:var(--flaeche)}
.sz-karte.laeuft{border-color:var(--akzent);box-shadow:inset 4px 0 0 0 var(--akzent)}
.sz-karte-kopf{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--a3);margin-bottom:var(--a1)}
.sz-zahl{font-size:13px;color:var(--gedaempft)}
.sz-klein{font-size:13px;color:var(--gedaempft)}
/* Ohne Auswahl heisst: da fehlt noch etwas. Es soll auffallen, ohne
   wie eine Stoerung auszusehen - deshalb die ruhige Warnfarbe und
   kein Rot. */
.sz-offen{font-size:13px;color:var(--gelb);font-weight:600}
.sz-lage{font-size:14px;color:var(--gedaempft);margin-bottom:var(--a3)}
.sz-lage.an{color:var(--akzent-text);font-weight:600}

.sz-szene{border:1px solid var(--linie);border-radius:10px;padding:var(--a3);
  margin-bottom:var(--a2);background:var(--flaeche-2)}
/* Die Zeile der laufenden Szene: ruhige Fläche, grüner Rand. Der
   Akzent lag hier zusätzlich zur Taste darin — zwei Bernsteintöne
   ineinander für einen Zustand, der keine Handlung ist. */
.sz-szene.an{background:var(--flaeche-3);border-color:var(--gruen)}
.sz-szene-reihe{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap}
.sz-unter{display:flex;gap:var(--a3);flex-wrap:wrap;margin-top:var(--a2)}
.sz-fuellen{flex:1 1 auto}
.sz-fuss{display:flex;gap:var(--a2);flex-wrap:wrap;align-items:center;margin-top:var(--a3)}
/* Der Überlauf: unscheinbarer Knopf, das Seltene dahinter. Das Menü
   klappt nach UNTEN auf und rechtsbündig — es hängt am rechten Ende
   einer Fußzeile, und nach links hätte es die Karte verlassen. */
.sz-ueberlauf{position:relative;flex:none}
.menue.sz-menue{left:auto;right:0;top:calc(100% + var(--a1));min-width:180px}
.menue button.gefahr{color:var(--rot)}
.menue button.gefahr:hover{background:var(--rotBg)}
.sz-zeile{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap;margin-bottom:var(--a2)}

/* Die Taste sieht aus wie am Pult: gross genug fuer einen Daumen.

   Ab Fassung 102 trägt sie im Ruhezustand eine KONTUR. Vorher hatte
   sie gar keine eigene Fläche angegeben und bekam damit die
   Grundfarbe für <button> — Bernstein. Auf einer Live-Seite mit
   zwei Szenen standen dadurch drei bernsteinfarbene Flächen
   nebeneinander: „Gruppe anlegen" oben rechts und beide Tasten.
   Bernstein bedeutet in dieser Oberfläche „hier ist die Handlung";
   steht es an drei Stellen, zeigt es auf keine.

   Die LAUFENDE Szene trägt Grün — dieselbe Farbe, mit der überall
   sonst „läuft" gemeint ist. Das ist ein Zustand, keine Handlung,
   und die Farbe sagt jetzt dasselbe wie die Etiketten daneben. */
.sz-taste{min-width:160px;min-height:44px;border-radius:10px;font-weight:600;font-size:15px;
  background:transparent;border:1px solid var(--linie-stark);color:var(--tinte)}
.sz-taste:hover{background:var(--flaeche-2);filter:none}
.sz-taste.an{background:var(--gruenBg);color:var(--gruen);border-color:var(--gruen)}
.sz-stopp{min-height:44px;border-radius:10px;font-weight:600;
  background:var(--rotBg);color:var(--rot);border:1px solid var(--rotBg)}

.sz-liste{max-height:50vh;overflow:auto;display:grid;gap:var(--a1);margin:var(--a3) 0}
.sz-wahl{display:flex;align-items:center;gap:var(--a2);padding:var(--a2);border-radius:8px}
.sz-wahl.aus{opacity:.55}
/* 480 px statt der vollen Breite (Fassung 132). Das Feld stand auf
   `flex:1` und wurde damit bei 1920 px Fenster 1442 px breit — für
   eine Adresse von rund 45 Zeichen. 720 wäre die Obergrenze aus
   Anweisung 2.2; hier reicht die Hälfte. */
.sz-adresse{flex:0 1 480px;max-width:480px;font-family:var(--mono);font-size:13px}

/* Eine Zeile je Bildschirm: Name, was er zeigt, und der Weg zum
   Inhalt. Der dritte Knopf ist der wichtigste - ohne ihn war nicht
   zu sehen, wo der Inhalt einer Szene ueberhaupt herkommt. */
.sz-zuord{display:grid;gap:var(--a2);margin:var(--a3) 0;max-height:52vh;overflow:auto}
.sz-zuord-zeile{display:grid;grid-template-columns:minmax(120px,1fr) minmax(220px,2fr) auto;
  gap:var(--a2);align-items:center}
.sz-zuord-name{font-weight:600;font-size:14px;overflow:hidden;text-overflow:ellipsis}
@media (max-width:640px){.sz-zuord-zeile{grid-template-columns:1fr;gap:var(--a1)}}

.sz-taste-kopf{display:flex;gap:var(--a2);align-items:center;flex-wrap:wrap;margin-bottom:var(--a2)}
.sz-taste-kopf input{flex:1 1 160px}
.sz-paare{display:grid;gap:var(--a2);margin-bottom:var(--a2)}
.sz-paar{display:flex;gap:var(--a2);align-items:center;flex-wrap:wrap}

/* Was beim Drücken passiert — direkt an der Szene, nicht erst im
   Dialog. „Gerät Eingang → Werbung quer · 3 Seiten · 25 s" */
.sz-ziele{display:grid;gap:var(--a1);margin-top:var(--a2)}
.sz-ziel{display:flex;align-items:baseline;gap:var(--a2);flex-wrap:wrap;font-size:14px}
.sz-ziel.aus{opacity:.8}
.sz-ziel-von{min-width:140px;color:var(--gedaempft)}
.sz-pfeil{color:var(--gedaempft-weich)}
.sz-ziel-nach{font-weight:600}

/* Tastendialog: jede Auswahlliste trägt ihre Beschriftung, und
   unter jeder Taste steht in Worten, was sie tut. Ohne beides
   stehen bei zehn Tasten zwanzig namenlose Listen untereinander. */
.sz-marke{font-size:13px;color:var(--beschriftung);min-width:72px}
.sz-feldreihe{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap;
  margin-bottom:var(--a1)}
.sz-feldreihe input[type=text]{flex:1 1 160px}
.sz-feldreihe input[type=color]{width:44px;height:32px;padding:0;border-radius:8px}
.sz-taste-felder{flex:1 1 260px}
.sz-taste-tun{display:flex;gap:var(--a1);align-items:flex-start}
.sz-tut{font-size:14px;color:var(--akzent-text);margin:var(--a1) 0 var(--a2)}
.sz-layout{display:grid;gap:var(--a2);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}

/* Betriebszeiten am Gerät: Wochentage als Kästchenreihe, davor
   und dahinter je eine Uhrzeit. Auf dem Handy bricht die Zeile um. */
.gr-bz{display:grid;gap:var(--a2);margin-bottom:var(--a2)}
.gr-bz-zeile{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap}
.gr-bz-tage{display:flex;gap:var(--a1);flex-wrap:wrap}
.gr-bz-tag{display:flex;align-items:center;gap:2px;font-size:13px}

/* Feiertage (227): die Liste der nächsten zwölf Monate mit Häkchen.
   Ein abgewählter Tag bleibt sichtbar, nur blasser — man soll sehen,
   was man weggenommen hat. */
.gr-feiertage-eigen{display:grid;gap:var(--a2)}
.gr-feiertage-liste{display:grid;gap:2px;max-height:280px;overflow:auto;padding:var(--a1) 0}
.gr-feiertag{display:flex;align-items:center;gap:var(--a2);font-size:13px;cursor:pointer}
.gr-feiertag.aus{opacity:.5}
.gr-feiertag-datum{font-variant-numeric:tabular-nums;min-width:12ch;color:var(--gedaempft)}

/* Das Band auf der Gerätekarte. Es sitzt direkt unter dem Namen und
   nicht in der Zeilenliste: Ob ein Schirm überhaupt leuchtet, ist
   keine Angabe wie Seriennummer oder Vorrat, sondern die Frage, die
   man an einem Bildschirm zuerst stellt. Der weiche Hintergrund
   trennt es von den Zeilen, ohne eine zweite Karte zu bauen. */
/* Ist der Schirm gerade dunkel, tritt das Band zurück statt zu
   warnen — Feierabend ist keine Störung. */
/* Der Knopf rückt nach rechts, damit die Zeile eine Kante hat und
   nicht bei jeder Karte woanders endet. Klein gehalten: Er steht
   neben einer Überschrift, nicht in einer Knopfreihe. */

/* Ordner: eine Leiste über der Liste. Kein Baum mit Klappdreiecken —
   bei höchstens vier Ebenen zeigt die Einrückung genug, und ein
   Baum mit Klappwerk hätte mehr Bedienelemente als Inhalt.

   Seit Fassung 177 liegen die Schubladen NEBENEINANDER und nicht
   mehr untereinander: Die Liste steht längst auf einer eigenen,
   breiten Seite und nicht mehr in der 280px-Spalte, für die die
   Spalte gedacht war. Untereinander schob sie die Playlists bei
   sechs Ordnern um eine halbe Bildschirmhöhe nach unten. */
.ordner-leiste{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2);
  padding:var(--a2);border-bottom:1px solid var(--linie)}
.ord-knopf{text-align:left;background:none;border:1px solid transparent;
  padding:var(--a1) var(--a2);
  border-radius:8px;font-size:14px;color:var(--tinte);cursor:pointer}
.ord-knopf:hover{background:var(--flaeche-2)}
.ord-knopf.an{background:var(--gewaehlt);color:var(--auf-gewaehlt);font-weight:600}
.ord-tun{color:var(--gedaempft);font-size:13px;margin-left:auto}
.ord-hinweis{font-size:13px;color:var(--gedaempft)}

/* Ziehen und Fallenlassen. Wichtig ist nicht die Bewegung, sondern
   dass man SIEHT, wo etwas landet: Solange etwas am Zeiger hängt,
   bekommen alle Schubladen einen gestrichelten Rand, und die unter
   dem Zeiger wird ausgefüllt. Ohne das rät man. */
.ord-zielt .ord-knopf:not(.ord-tun){border-color:var(--linie);border-style:dashed}
.ord-knopf.ord-ueber{background:var(--gewaehlt);color:var(--auf-gewaehlt);
  border-color:var(--gewaehlt);border-style:solid}
.pl-zeile[draggable=true] .pl-sp-mini{cursor:grab}
.ord-zeile{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap;
  padding:var(--a2) 0;border-bottom:1px solid var(--linie)}
.ord-zeile input[type=text]{flex:1 1 160px}

/* ---------- Dashboard ----------
   Vier Kacheln, dann eine Liste dessen, was Aufmerksamkeit braucht.
   Grün bekommt keine Farbe: Was in Ordnung ist, soll ruhig bleiben.
   Rot gibt es genau einmal — für Stille. */
.db{display:grid;gap:var(--a4)}
.db-reihe{display:grid;gap:var(--a3);grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
.db-kachel{border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a4);
  background:var(--flaeche);text-align:left;cursor:pointer}
.db-kachel:hover{border-color:var(--linie-stark)}
.db-zahl{font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:32px;font-weight:400;line-height:1.1}
.db-wort{font-size:var(--s2);color:var(--gedaempft);margin-top:var(--a1)}
.db-kachel.gut .db-zahl{color:var(--gruen)}
.db-kachel.schlecht{border-color:var(--rot);background:var(--rotBg)}
.db-kachel.schlecht .db-zahl{color:var(--rot)}
.db-kachel.akzent{border-color:var(--akzent);background:var(--akzent-weich)}
.db-kachel.akzent .db-zahl{color:var(--akzent-text)}
.db-titel{margin:0;font-size:var(--s4)}
.db-zeile{display:flex;justify-content:flex-start;align-items:center;gap:var(--a2);width:100%;text-align:left;
  border:1px solid var(--linie);border-radius:var(--r1);padding:var(--a2) var(--a3);
  background:var(--flaeche);cursor:pointer;margin-bottom:var(--a1)}
.db-punkt{width:8px;height:8px;border-radius:50%;background:var(--gedaempft);flex:0 0 auto}
.db-zeile.schlecht .db-punkt{background:var(--rot)}
.db-zeile.warn .db-punkt{background:var(--akzent)}
.db-zeile.akzent .db-punkt{background:var(--akzent)}
.db-was{flex:1 1 auto;font-size:var(--s3)}
.db-dazu{font-size:var(--s2);color:var(--gedaempft)}
.db-ruhe{border:1px dashed var(--linie);border-radius:var(--r1);padding:var(--a4);
  color:var(--gedaempft);font-size:var(--s3);text-align:center}
.db-fuss{display:flex;gap:var(--a2);flex-wrap:wrap}

/* ============================================================
   Die Bildschirmkarten (Fassung 93)
   ------------------------------------------------------------
   Sie ersetzen die Bühne aus Fassung 79 — EIN laufender Player,
   umschaltbar. Der Grund für den Wechsel steht in ADR-036 und ist
   keine Geschmacksfrage: Neun gleichzeitige Renderings bringen
   jeden Filial-Rechner und jedes Handy an die Grenze, und die
   Aufgabe des Dashboards ist der ZUSTAND der Geräte, nicht der
   Inhalt. Wer den Inhalt sehen will, klickt auf die Karte.

   In keiner dieser Karten steckt ein `<iframe>`. Das ist die
   eigentliche Zusicherung dieser Fassung, und ein Haken im
   Selbsttest hält sie fest.
   ============================================================ */
/* Der Kopf über der Bildschirmwand trägt links die Marke MIT DER
   ZAHL (`BILDSCHIRME · 6`) und rechts auf derselben Linie den Weg
   zur vollständigen Liste — deshalb eine Zeile und kein Wort.

   Der Verweis stand bis Fassung 127 UNTER dem Gitter. Er steht
   jetzt oben rechts (Anweisung 1.5, Sollbild
   `ansichten/18-dashboard-sechs-geraete.png`): Wer die Wand
   überfliegt und merkt, dass sie gedeckelt ist, sucht den Weg zur
   Liste dort, wo die Zahl steht — nicht unter sechs Karten.

   Er erbt die Mono-Großbuchstaben der Marke NICHT: Ein Verweis ist
   Fließtext und keine Bereichsmarke. */
.db-wand-kopf{margin-top:var(--a2);display:flex;align-items:baseline;
  justify-content:space-between;gap:var(--a3)}
.db-wand-alle{font-family:inherit;text-transform:none;letter-spacing:0;
  font-size:var(--s2);color:var(--tinte)}

/* ============================================================
   Die Playlistliste (Fassung 141, Anweisung S15)
   ------------------------------------------------------------
   Aus dem Satz werden Spalten. Bis Fassung 140 stand hier eine
   200 px hohe Karte je Playlist, in der Format, Seitenzahl und
   Änderungsdatum als Fließtext in EINEM Satz standen — bei
   fünfzehn Playlists eine Wand aus Sätzen, in der man nichts
   vergleichen kann.

   Das Rastermaß steht NICHT hier, sondern in `PL_SPALTEN`
   (`app.js`) und wird von Kopf und Zeile aus derselben Stelle
   gesetzt. Zwei Angaben an zwei Stellen fluchten genau bis zur
   ersten Änderung.

   KEIN BERNSTEIN IN DER LISTE. Der einzige Akzent der Seite ist
   „Playlist anlegen" oben rechts, dazu die 2 px Reiterlinie —
   die einzige erlaubte Bernstein-LINIE, keine Fläche.
   ============================================================ */
.pl-reiterzeile{display:flex;align-items:flex-end;justify-content:space-between;
  gap:var(--a4)}
.pl-reiterzeile .reiter{flex:1;min-width:0}
/* Der Sortierumschalter: ein Wort, kein Knopf. Er steht auf
   derselben Linie wie die Reiter und darf sie optisch nicht
   überbieten. */
.pl-sortknopf{background:transparent;border:0;padding:var(--a3) 0;
  margin-bottom:var(--a5);font-family:var(--mono);font-size:var(--s1);
  color:var(--gedaempft);white-space:nowrap;flex:none}
.pl-sortknopf:hover{background:transparent;color:var(--tinte);filter:none}

/* Spaltenköpfe AUSSERHALB der Karte, im selben Raster wie die
   Zeilen. 12 px statt der im Entwurf genannten 11: Die Schriftskala
   hat sechs Stufen, und darunter wird keine erfunden. */
/* Das `+ 1px` ist die Kartenlinie: Die Zeilen stehen INNEN in einer
   Karte mit 1 px Rand, der Kopf steht daneben im freien Feld. Ohne
   den Ausgleich fluchtet jede Spaltenüberschrift um genau diese eine
   Linie neben ihrer Spalte — und das sieht man. */
.pl-kopfzeile{display:grid;gap:var(--a3);align-items:center;
  padding:0 calc(var(--a4) + 1px) var(--a2);font-family:var(--mono);
  font-size:var(--s1);
  letter-spacing:.1em;text-transform:uppercase;color:var(--beschriftung)}
.pl-kopfzeile>span{min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}

.pl-karte{padding:0;overflow:hidden}
/* Alle Zeilen in EINER Karte, Trennlinie zwischen ihnen — keine
   über der ersten. */
.pl-zeile{display:grid;gap:var(--a3);align-items:center;
  padding:var(--a3) var(--a4);border-top:1px solid var(--linie);
  color:var(--tinte);text-decoration:none;
  transition:background var(--takt) ease}
.pl-zeile:first-child{border-top:0}
/* Seit Fassung 178 ist die Zeile ein `<div>` und kein `<a>` mehr —
   der Verweis sitzt am Namen, damit Kästchen und Löschknopf gültig
   darin stehen können. Der Zeigefinger muss deshalb hier stehen. */
.pl-zeile{cursor:pointer}
.pl-zeile:hover{background:var(--flaeche-2);text-decoration:none}
.pl-sp{min-width:0;display:flex;align-items:center;gap:var(--a2)}
/* Die Miniatur steht MITTIG in ihrer Spalte. Linksbündig ließ eine
   hochkante (19 px) zwanzig Pixel Loch neben sich stehen, eine quere
   (39 px) nicht — die Zeilen fingen dadurch verschieden an. */
.pl-sp-mini{justify-content:center}
.pl-rechts{justify-content:flex-end;text-align:right}
/* Der Name IST der Verweis (ab Fassung 178). Er sieht aus wie
   vorher — die Zeile war bis dahin selbst ein `<a>`, und ein
   blauer unterstrichener Name in jeder Zeile wäre Lärm. Die
   Unterstreichung kommt beim Überfahren, wie bei jedem Verweis. */
.pl-name{font-size:var(--s4);font-weight:600;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  color:inherit;text-decoration:none}
.pl-zeile:hover .pl-name{text-decoration:underline}

/* Auswahl in der Playlistliste. Das Kästchen steht in derselben
   Spalte wie die Miniatur — so bleiben alle Regeln, die unter
   1200 px Spalten nach ihrer Nummer ausblenden, unverändert
   gültig. */
.pl-wahl{width:18px;height:18px;flex:none;accent-color:var(--tinte);cursor:pointer}
/* F-49 (Fassung 311): die Tippfläche um ein Kästchen, s. `tippFlaeche()`. */
.tipp-flaeche{display:inline-flex;align-items:center;justify-content:center;flex:none;
  width:40px;height:40px;margin:-11px;cursor:pointer;font-size:0}
.pl-zeile.gewaehlt{background:var(--akzent-weich)}
.pl-zeile.gewaehlt:hover{background:var(--akzent-weich)}
.pl-zeile.zieht{opacity:.45}
/* Löschen steht rechts, wo bis Fassung 177 „Bearbeiten" stand. Es
   trägt KEINE rote Fläche — eine rote Fläche in jeder Zeile einer
   Liste liest sich als Warnung vor der Liste. */
.pl-loeschen{color:var(--rot-text);text-decoration:none;font-weight:600}
.pl-loeschen:hover{color:var(--rot-text);text-decoration:underline;background:none}
.pl-sp-vorlage{font-size:var(--s2);color:var(--gedaempft);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
/* „Bearbeiten" ist der sichtbare Anker der Zeile, kein zweites
   Ziel: Die ganze Zeile ist der Verweis. */
.pl-tun{font-size:var(--s2);font-weight:600;color:var(--akzent-text)}
.pl-zuweisen{font-size:var(--s2);font-weight:600;color:var(--akzent-text)}

/* Die Miniatur: 19 × 34 px bei 9:16, 39 × 22 px bei 16:9 — im
   Seitenverhältnis des Formats. Sie ersetzt nicht die
   Formatspalte, sie zeigt auf einen Blick, was hochkant ist. */
.pl-mini{display:flex;flex-direction:column;justify-content:flex-end;
  gap:2px;padding:2px;background:var(--dunkel);
  border:1px solid var(--linie-stark);border-radius:2px;flex:none;
  box-sizing:border-box;overflow:hidden}
.pl-mini.hoch{width:19px;height:34px}
.pl-mini.quer{width:39px;height:22px}
.pl-mini-z{display:block;height:2px;width:80%;
  background:rgba(247,246,243,.5);border-radius:1px}
.pl-mini-akzent{display:block;height:3px;width:50%;background:var(--akzent);
  border-radius:1px}

.pl-wo{display:flex;align-items:center;gap:var(--a2);min-width:0}
.pl-wo-chip{background:var(--flaeche-3);color:var(--gedaempft);
  font-size:var(--s2);padding:var(--a1) var(--a2);border-radius:var(--r-voll);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-wo-mehr{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft);
  flex:none}
/* Fassung 410 (L-597 b, Bauplan Plan 407): höchstens zwei Chips, `+n`
   und „+". Wer zuweisen darf, bekommt sie als Knöpfe; sie öffnen „Auf
   Bildschirm zeigen". 32 px hoch wie das Menü „…" daneben (am Handy 44,
   s. die Regel für alle Knöpfe). Die Chips dürfen umbrechen: In der
   Spalte (rund 200 px bei 1440) blieben von zwei Namen nebeneinander
   „Emp…" und „S…" übrig — gesehen bei der Browserprüfung. Umbrechen
   kann nur der ganze Chip; ein Name, der breiter ist als die Spalte,
   wird weiter mit „…" gekürzt (ganz steht er in `title` und im
   Vorlesetext). Mehr Platz bringt erst die Chipzeile unter dem Namen
   (L-626, Plan 427). */
.pl-wo{flex-wrap:wrap;row-gap:var(--a1)}
button.pl-wo-chip{flex:0 1 auto;min-width:0;max-width:100%;min-height:32px;gap:var(--a1);justify-content:flex-start;
  padding:var(--a1) var(--a3) var(--a1) var(--a2);font-size:var(--s2);font-weight:400;
  background:var(--flaeche-3);color:var(--tinte);border-radius:var(--r-voll)}
button.pl-wo-chip svg{flex:none}
.pl-wo-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
button.pl-wo-mehr{min-height:32px;padding:0 var(--a2);background:transparent;color:var(--gedaempft);
  font-weight:400;border-radius:var(--r-voll)}
button.pl-wo-plus{flex:none;width:32px;min-height:32px;height:32px;padding:0;background:transparent;
  color:var(--tinte);border:1px dashed var(--feld-rand);border-radius:var(--r-voll)}
/* „Nur ansehen": Das Schloss aus `gesperrt()` steht im Knopf vor dem „+". */
button.pl-wo-plus.gesperrt{width:auto;gap:var(--a1);padding:0 var(--a2)}
button.pl-wo-chip:hover,button.pl-wo-mehr:hover,button.pl-wo-plus:hover{filter:none;
  background:var(--flaeche-2);color:var(--tinte)}
button.pl-zuweisen{min-height:32px;gap:var(--a1);padding:var(--a1) var(--a3);white-space:nowrap;
  background:transparent;color:var(--akzent-text);border:1px dashed var(--feld-rand);border-radius:var(--r-voll)}
button.pl-zuweisen:hover{filter:none;background:var(--flaeche-2);color:var(--akzent-text)}
button.pl-zuweisen svg{flex:none}
.pl-wo .laedt,.pl-zuweisen.laedt{opacity:.7}
/* „Weitere 12 anzeigen" — ein Textverweis, keine Seitenzahlen und
   kein anderes Layout (2.7). */
.pl-mehr{display:block;margin:var(--a4) auto 0;background:transparent;border:0;
  font-size:var(--s3);font-weight:600;color:var(--akzent-text)}
.pl-mehr:hover{background:transparent;filter:none;text-decoration:underline}

.pl-kopf{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;min-width:0}
.pl-meta{font-size:var(--s2);color:var(--gedaempft);margin:var(--a1) 0 var(--a2)}
.pl-offen-kopf{margin:var(--a5) 0 var(--a3)}
/* Unter 1200 px fallen die drei schmalen Zahlenspalten weg: Bei
   sieben Spalten auf 390 px bliebe von jeder ein Buchstabe. Die
   Angaben stehen dann in der Playlist selbst — abgeschnittener
   Text ist keine Auskunft.

   BIS FASSUNG 175 STAND HIER 900 px, und das war zu spät. Am
   12.09.2026 bei 1036 px Fenster nachgemessen (`main` = 740 px):
   vom Vorlagennamen „Willkommensfolie TCL CSOT, Hochformat" waren
   47 von 240 gebrauchten Pixeln zu sehen, von „Screen Gang" 42 von
   90 — und sogar die SPALTENKÖPFE waren abgeschnitten („LÄUFT AUF"
   50 von 76 px). Das ist keine Randlage: Es trifft jeden Laptop und
   jedes halbierte Fenster. Auf dem Telefon stand der Name
   vollständig da, weil die Tabelle dort zu Karten wird — wer am
   Laptop arbeitete, sah WENIGER als am Telefon (Prüflauf
   12.09.2026, B-4). */
@media (max-width:1200px){
  .pl-kopfzeile,.pl-zeile{grid-template-columns:44px minmax(0,2fr)
    minmax(0,1.4fr) minmax(0,1.4fr) 88px !important}
  .pl-kopfzeile>span:nth-child(4),.pl-kopfzeile>span:nth-child(5),
  .pl-kopfzeile>span:nth-child(6),
  .pl-zeile>.pl-sp:nth-child(4),.pl-zeile>.pl-sp:nth-child(5),
  .pl-zeile>.pl-sp:nth-child(6){display:none}
}
/* Unter 1000 px reicht der Platz auch für die Vorlagenspalte nicht
   mehr: Bei 900 px stand der Playlistname in rund 100 px („Hinweisbil…",
   Rundgang 13.09.2026). Die Vorlage steht ohnehin im Editor; der Name
   ist das, wonach man sucht. */
@media (max-width:1000px){
  .pl-kopfzeile,.pl-zeile{grid-template-columns:44px minmax(0,2fr)
    minmax(0,1.2fr) 88px !important}
  .pl-kopfzeile>span:nth-child(3),.pl-zeile>.pl-sp:nth-child(3){display:none}
}
/* Dieselbe Regel traf bis Fassung 181 AUCH die Tastenliste der
   Live-Steuerung und die Kundenliste des Betreibers: beide bauen auf
   `.pl-zeile`, haben aber andere Spalten — die erste ist dort der
   NAME, und der stand ab 1200 px in 44 px als „M…" (Rundgang
   13.09.2026, 1100 und 900 px). Deshalb bekommen sie hier ihre eigene
   Aufteilung: der Name behält den Platz, Dauer und „Bearbeiten"
   fallen weg (die Zeile ist ohnehin der Weg), bei den Kunden Online
   und Zuletzt. */
@media (max-width:1200px){
  .ts-kopfzeile,.pl-zeile.ts-zeile{grid-template-columns:minmax(0,2fr) 104px
    minmax(0,1.4fr) 112px !important}
  .ts-kopfzeile>span:nth-child(4),.pl-zeile.ts-zeile>.pl-sp:nth-child(4){display:block}
}

/* Die Gerätechips im Kopf des Editors (Fassung 96). Sie stehen dort,
   wo bis Fassung 95 EIN Etikett mit einer Zahl stand. Sie dürfen
   umbrechen — eine Playlist auf zwölf Bildschirmen sprengt sonst
   den Kopf —, aber der Kopf selbst darf davon nicht wachsen, bis
   er die halbe Seite füllt. Deshalb der Deckel und die Kürzung auf
   vier Chips im Programm. */
.kopf-chips{margin-top:var(--a2);max-width:100%}
.kopf-chips .geraete-chip{font-size:var(--s2)}

/* Der Seitenkopf über dem Formular (Fassung 96). Er ist ein
   Kartenkopf wie jeder andere — mono, Versalien, --beschriftung —
   nur mit einem Namen darin, der es NICHT ist. */
.seiten-kopf-zeile{margin-bottom:var(--a5);border:1px solid var(--linie);
  border-radius:var(--r2);background:var(--flaeche);flex-wrap:wrap}
.seiten-kopf-nr{display:flex;align-items:baseline;gap:var(--a3);min-width:0}
.seiten-kopf-name{font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:var(--s4);font-weight:600;letter-spacing:0;text-transform:none;
  color:var(--tinte);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.seiten-kopf-zeit{flex:none;letter-spacing:.04em}

/* ---------- Die Bildschirmliste (Fassung 97, Stufe 6) ----------
   Karten statt Tabelle, stille Geräte oben. Ein stilles Gerät
   bekommt den Rahmen in --rot — hier ausnahmsweise rundherum und
   nicht nur als Balken links: Diese Liste hat genau eine Aufgabe,
   nämlich das eine Gerät zu zeigen, das nicht tut, was es soll.
   Ein Balken unter zwanzig Zeilen wäre zu leise. */
.gr-gruppenkopf{margin:var(--a5) 0 var(--a3)}
.gr-gruppenkopf:first-child{margin-top:0}
/* Die Lagezeile über der Liste (Fassung 181, L-288) ist seit Fassung 421
   weg (Bauplan F45): Oben steht „Braucht dich“, darunter die Standorte. */
.gr-karte-liste{padding:0}
.gr-zeile{border-bottom:1px solid var(--linie);cursor:pointer;align-items:flex-start;
  transition:background var(--takt) ease}
.gr-zeile:last-child{border-bottom:0}
.gr-zeile:hover{background:var(--flaeche-2)}
.gr-zeile .punkt{margin-top:var(--a2)}
.gr-zeile.still{border-left:3px solid var(--rot)}
.gr-zeile.ruht{opacity:.6}
.gr-name{font-size:var(--s4);font-weight:600;display:block;min-width:0;
  overflow:hidden;text-overflow:ellipsis}
.gr-meta{font-size:var(--s2);color:var(--gedaempft);margin-top:2px;line-height:1.45}
/* Die Playlist ist ein Weg und kein Text. Seit Fassung 409 öffnet der
   Knopf die Schnellwahl (`grSchnellwahl`, L-597 a) statt ins Detail zu
   springen; ohne Recht steht der Name mit Schloss da. */
.gr-schnell-platz{display:flex;align-items:center;flex-wrap:wrap;gap:var(--a1) var(--a2);min-width:0}
button.gr-schnell{max-width:240px;min-width:0;justify-content:flex-start;text-align:left;
  padding:var(--a2) var(--a3)}
button.gr-schnell svg{flex:none}
.gr-schnell-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
button.sek.gr-schnell-leer{border-style:dashed}
.gr-pl-wert{display:inline-flex;align-items:center;gap:var(--a2);max-width:240px;min-width:0;
  min-height:44px;font-size:var(--s3);color:var(--gedaempft)}
.gr-pl-wert svg{flex:none}
.gr-pl-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gr-pl-schloss{display:inline-flex;flex:none}
.gr-schloss-satz{display:flex;align-items:center;gap:var(--a2);margin:0 0 var(--a3);
  font-size:var(--s2);color:var(--gedaempft)}
.gr-schloss-satz svg{flex:none}
.gr-ankunft{font-family:var(--mono);font-size:var(--s1);color:var(--beschriftung);white-space:nowrap}
.gr-ankunft.da{color:var(--gruen)}
.gr-ankunft:empty{display:none}
.gr-schnell-platz .gr-rueck{min-height:44px}
/* Die Wahl selbst hängt am Dokument (wie das Menü „⋯“), nicht an der
   Zeile: Die Zeile öffnet auf Klick und Enter das Detail. */
.gr-schnell-flaeche{position:fixed;z-index:1000;display:flex;flex-direction:column;
  padding:var(--a1);background:var(--flaeche);border:1px solid var(--linie);
  border-radius:var(--r2);box-shadow:var(--schatten-3);overflow:auto;overscroll-behavior:contain}
.gr-schnell-kopf{padding:var(--a2) var(--a3) var(--a1);font-size:var(--s1);font-weight:600;
  letter-spacing:.06em;text-transform:uppercase;color:var(--beschriftung);overflow-wrap:anywhere}
.gr-schnell-satz{margin:0;padding:0 var(--a3) var(--a2);font-size:var(--s2);color:var(--gedaempft)}
.gr-schnell-liste{display:flex;flex-direction:column}
button.gr-schnell-eintrag,button.gr-schnell-plan{width:100%;justify-content:flex-start;text-align:left;
  gap:var(--a2);padding:var(--a1) var(--a2);background:none;color:var(--tinte);font-weight:400;
  font-size:var(--s3);border-radius:var(--r1)}
button.gr-schnell-eintrag:hover,button.gr-schnell-plan:hover{background:var(--flaeche-2);filter:none}
button.gr-schnell-eintrag:focus-visible,button.gr-schnell-plan:focus-visible{background:var(--flaeche-2);
  outline:2px solid var(--fokus);outline-offset:-2px}
button.gr-schnell-eintrag[aria-selected="true"]{font-weight:600}
button.gr-schnell-keine,button.gr-schnell-plan{margin-top:var(--a1);border-top:1px solid var(--linie);
  border-radius:0 0 var(--r1) var(--r1);color:var(--gedaempft)}
button.gr-schnell-plan:hover{color:var(--tinte)}
.gr-schnell-haken{display:inline-flex;width:18px;flex:none;color:var(--akzent-text)}
.gr-schnell-text{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.gr-schnell-eintrag-name{overflow-wrap:anywhere}
.gr-schnell-warn{display:inline-flex;align-items:center;gap:var(--a1);font-size:var(--s1);color:var(--akzent-text)}
.gr-schnell-format{display:inline-flex;align-items:center;gap:var(--a1);flex:none;
  font-size:var(--s1);color:var(--gedaempft)}
.gr-schnell-format.passt-nicht{color:var(--akzent-text);font-weight:600}
.gr-schnell-zahl{flex:none;min-width:16px;text-align:right;font-family:var(--mono);
  font-size:var(--s1);color:var(--beschriftung)}
.gr-offen{align-items:center;margin-bottom:var(--a3)}
@media (max-width:760px){
  button.gr-schnell,.gr-pl-wert{max-width:100%}
  .zeile-aktionen{justify-content:flex-start}
  /* Fassung 350: Am Handy war die Aktionsleiste so breit wie ihr Inhalt
     (flex:1 0 auto) und ragte rechts aus der Zeile — „Ruhezeit" und die
     Playlist wurden abgeschnitten. Jetzt eine eigene, umbrechende Zeile. */
  .gr-zeile .zeile-aktionen{flex:1 1 100%;min-width:0}
  .gr-zeile .zeile-aktionen .etikett{max-width:100%;overflow:hidden;text-overflow:ellipsis}
}

/* ---------- „Wohin?" im Anlegen-Dialog (Fassung 95) ----------
   Eine Liste aus <label> mit Kontrollkästchen. Jede Zeile ist ein
   Bedienelement und muss deshalb 44px hoch sein — auch die, die
   nur aus einem Häkchen und zwei Wörtern besteht. */
.ziel-liste{border:1px solid var(--linie);border-radius:var(--r1);overflow:hidden;
  max-height:280px;overflow-y:auto;scrollbar-width:thin}
.ziel-zeile{display:flex;align-items:center;gap:var(--a3);min-height:44px;
  padding:var(--a2) var(--a3);margin:0;border-bottom:1px solid var(--linie);
  cursor:pointer;font-size:var(--s3);font-weight:400;color:var(--tinte)}
.ziel-zeile:last-child{border-bottom:0}
.ziel-zeile:hover{background:var(--flaeche-2)}
.ziel-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
/* Was dort BISHER läuft. Es darf nie schrumpfen — genau diese
   Angabe entscheidet, ob jemand den Haken setzt. */
.ziel-jetzt{flex:none;font-size:var(--s2)}
/* „Erstmal keinen" ist eine bewusste Wahl und keine Restzeile.
   Deshalb abgesetzt, nicht kleiner. */
.ziel-entwurf{background:var(--flaeche-2);border-top:1px solid var(--linie-stark)}
@media (max-width:520px){
  .ziel-zeile{flex-wrap:wrap}
  .ziel-jetzt{flex:1 0 100%;padding-left:calc(var(--a3) + 20px)}
}
/* Der Zähler am Reiter setzt mono, damit „· 6" und „· 18" gleich
   breit stehen und die Reiter beim Umschalten nicht springen. */
.reiter-zahl{color:var(--gedaempft);font-size:var(--s2)}
.reiter-knopf.aktiv .reiter-zahl,.reiter-knopf[aria-selected="true"] .reiter-zahl{
  color:var(--akzent-text)}

/* Der Zähler am aktiven Reiter der Playlistseite steht in --tinte
   und nicht in Bernstein (Anweisung S15, 2.8: „Bernstein auf der
   Seite: `Playlist anlegen` und die Reiterlinie. Sonst nichts.").
   Die Regel gilt für DIESE Seite; andere Reiterzeilen im Bestand
   bleiben, wie sie sind. */
.pl-reiterzeile .reiter-knopf.aktiv .reiter-zahl,
.pl-reiterzeile .reiter-knopf[aria-selected="true"] .reiter-zahl{
  color:var(--tinte)}

@media (max-width:760px){
  /* Die Regeln für die alte Kartenzeile (Fassung 95) sind mit
     Fassung 141 entfallen: `.pl-zeile` ist ein Raster, kein
     Flexkasten, und die Vorschau ist eine 44-px-Spalte. Was auf
     schmalen Fenstern wegfällt, steht bei `.pl-zeile` selbst. */
  .zeile-aktionen{justify-content:flex-start}
}
/* ============================================================
   Das Gitter der Wand (Fassung 128, Anweisung 1.5)
   ------------------------------------------------------------
   `auto-fill` und nicht `auto-fit`. Der Unterschied ist genau der
   Fehler C4 aus `REPARATUR.md`: `auto-fit` legt leere Spuren
   ZUSAMMEN, und die eine verbliebene Spur dehnt sich dann über die
   ganze Breite — bei einem Bildschirm eine Karte quer über den
   halben Bildschirm.

   `auto-fill` lässt die leeren Spuren stehen. Bei einem Gerät
   steht damit eine Karte in der ERSTEN SPALTE des Gitters, in
   derselben Form und Größe wie bei sechs, und der Leerraum rechts
   daneben ist richtig und bleibt leer (Sollbild
   `ansichten/19-dashboard-ein-geraet.png`).

   Nachgemessen an den Sollbildern: Die Inhaltsspalte ist bei
   1442 px Fensterbreite 754 px breit, daraus werden mit
   `minmax(260px,1fr)` und 16 px Abstand zwei Spuren zu je 369 px —
   und genau 367 px ist die Karte in Bild 18 und Bild 19 breit.

   KEIN RAHMEN UM DIE WAND. Die Wand IST das Gitter, sonst nichts.
   Keine Großdarstellung, keine besondere Karte, keine
   Platzhalterkarten.
   ============================================================ */
.db-wand{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
  justify-content:start;gap:var(--a4)}
@media (max-width:760px){.db-wand{grid-template-columns:minmax(0,1fr)}}

/* ============================================================
   Eine Bildschirmkarte OHNE Vorschaufläche (Fassung 128)
   ------------------------------------------------------------
   Bis Fassung 127 trug jede Karte oben eine schwarze Fläche im
   Seitenverhältnis des Geräts. Sie ist gestrichen (Anweisung 1.5
   in der Fassung vom 26.08.2026, Begründung in 1.5b): Es gibt
   keine Quelle für ein Abbild des Bildschirminhalts, und eine
   dunkle Fläche mit einem Playlistnamen darin sieht aus wie ein
   Gerät, das nichts anzeigt.

   `min-width:0` und `overflow:hidden` sind hier nicht Zierrat: Ohne
   sie zieht ein langer Gerätename die Spalte auseinander, und aus
   drei Spalten werden zwei.

   KEINE feste Höhe, KEIN `margin-top:auto` an einem Kind. Beides
   war im ersten Anlauf drin und hat die Karten aufgeblasen. Alle
   Karten einer Reihe sind gleich hoch, und das ergibt sich aus dem
   Gitter von selbst, solange nichts davon gesetzt wird.
   ============================================================ */
.db-bs{display:flex;flex-direction:column;gap:var(--a2);text-align:left;
  padding:var(--a4);background:var(--flaeche);
  border:1px solid var(--linie);border-radius:var(--r2);
  box-shadow:var(--schatten-1);color:var(--tinte);text-decoration:none;
  overflow:hidden;min-width:0}
.db-bs:hover{border-color:var(--linie-stark);background:var(--flaeche-2)}
/* DIE ZUSTANDSFARBE IST EIN 3-PX-STRICH AN DER OBERKANTE
   (Anweisung 1.5). Kein farbiger Kartenhintergrund, keine farbige
   Umrandung ringsum — eine getönte Fläche über die ganze Karte
   liest sich als „die Anwendung ist kaputt", ein Strich als „hier
   ist etwas zu tun".

   Die grauen Zustände tragen ihn AUCH, in `--linie-stark`. Am
   Sollbild `18-dashboard-sechs-geraete.png` nachgemessen: rot
   #A8321F bei „Meldet sich nicht", grün #2F6B3A bei „Läuft",
   #CFC9BF bei Ruhezeit, Nicht zugewiesen und Wartet. Ohne ihn
   säßen die Karten unterschiedlich hoch, weil der obere Rand mal
   1 px und mal 3 px wäre. */
.db-bs{border-top:3px solid var(--linie-stark)}
.db-bs.zu-still{border-top-color:var(--rot)}
.db-bs.zu-laeuft{border-top-color:var(--gruen)}

/* Die Kopfzeile: links das Abzeichen, rechts das Seitenverhältnis.
   Sie behält 12 px Abstand zum Namen, damit sie sich vom Textblock
   absetzt — die drei Textzeilen darunter stehen mit 8 px enger
   beieinander (Entscheidung Cedric, 26.08.2026). */
.db-bs-kopf{display:flex;align-items:center;justify-content:space-between;
  gap:var(--a3);margin-bottom:var(--a1);min-width:0}
/* Das Zustandsabzeichen. GEFÜLLT heißt: das Gerät ist in Betrieb,
   die Farbe sagt wie. KONTUR heißt: es ist noch nicht in Betrieb —
   dann sagt das Wort, was fehlt (Anweisung 1.1). Der Unterschied
   ist also Form und nicht nur Farbe.

   `white-space:nowrap` ist die Zusicherung, an der die gleichen
   Kartenhöhen hängen: Ein umbrechendes Abzeichen macht seine Karte
   höher als die Nachbarn in derselben Reihe. Deshalb trägt das
   Abzeichen bei „Wartet auf den ersten Kontakt" die Kurzform. */
.db-bs-abz{font-family:var(--mono);font-size:var(--s1);letter-spacing:.1em;
  text-transform:uppercase;white-space:nowrap;flex:none;
  padding:2px var(--a2);border-radius:var(--r-voll);
  border:1px solid transparent}
.db-bs-abz.abz-still{background:var(--rotBg);color:var(--rot)}
.db-bs-abz.abz-laeuft{background:var(--gruenBg);color:var(--gruen)}
.db-bs-abz.abz-ruhezeit{background:var(--neutralBg);color:var(--gedaempft)}
.db-bs-abz.abz-unzugewiesen,
.db-bs-abz.abz-wartet{background:transparent;color:var(--gedaempft);
  border-color:var(--linie-stark)}
/* Das Seitenverhältnis als Text, nicht als gezeichnetes Rechteck:
   Der Text genügt, bricht nie und stimmt auch bei 32:9. */
.db-bs-format{font-family:var(--mono);font-size:var(--s1);
  color:var(--gedaempft);flex:none;letter-spacing:.04em}

/* Die drei Textzeilen. Jede Angabe steht GENAU EINMAL, jede in
   einer Zeile, bei Überlänge mit Auslassung (Anweisung 1.6). */
.db-bs-name{font-size:var(--s4);font-weight:600;line-height:1.3;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.db-bs-pl{font-size:var(--s3);color:var(--gedaempft);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.db-bs-ohne{font-style:italic}
.db-bs-zeit{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* „Playlist zuweisen" steht an der Stelle der Zeitangabe. KEIN
   Knopf und KEINE bernsteinfarbene Fläche: Bernstein bleibt der
   einen Handlung der Seite vorbehalten (Anweisung 1.5, 1.12
   Punkt 6). Bernstein als SCHRIFT ist erlaubt — dafür gibt es
   `--akzent-text` (README, Farbregel). */
.db-bs-tun{font-size:var(--s2);font-weight:600;color:var(--akzent-text);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.db-bs:hover .db-bs-tun{text-decoration:underline}

/* ---------- rechte Spalte ----------
   Nur noch „Heute" und die Speicherzeile. Die Karte „Zu tun" und
   alles, was zu ihr gehörte (`.db-tun`, `.db-tun-eintrag`,
   `.db-tun-text`), ist mit Fassung 128 entfallen — Entscheidung
   Cedric, 26.08.2026, Sollbild
   `ansichten/18-dashboard-sechs-geraete.png`. Die Begründung steht
   im Kopf von `dashboardDialog()`. */
.db-spalte{display:flex;flex-direction:column;gap:var(--a4);min-width:0}

/* „Heute": Uhrzeit links, Vorgang rechts. Die Uhrzeit steht mono und
   darf nie schrumpfen — eine halbe Uhrzeit ist keine Uhrzeit. */
.db-heute{display:flex;flex-direction:column}
/* Der nächste anstehende Vorgang — der einzige, der jetzt zählt. */

/* ---------- Medien ---------- */
/* Die Ablagefläche. Gestrichelter Rand, weil er das eine Zeichen
   ist, das jeder ohne Beschriftung als „hier hinein" liest. Sie
   steht dauerhaft da und erscheint nicht erst beim Ziehen: Eine
   Fläche, die man nur sieht, wenn man schon weiß, dass es sie gibt,
   hilft genau denen nicht, für die sie gebaut ist. */
.med-ablage{border:2px dashed var(--linie-stark);border-radius:var(--r3);
  padding:var(--a5);margin-top:var(--a3);text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:var(--a2);
  background:var(--flaeche-2);transition:border-color var(--takt) ease,
  background var(--takt) ease}
.med-ablage b{font-size:var(--s4)}
.med-ablage .sz-klein{max-width:52ch;line-height:1.5}
/* Der Streifen: dieselbe Fläche, dieselbe Funktion, ein Viertel der
   Höhe. Die lange Aufzählung der erlaubten Formate steht dann nicht
   mehr da — sie gehört zu „womit fange ich an" und nicht zu „hier
   ist noch eine Datei". Wer sie braucht, findet sie im Wissen und
   in der Fehlermeldung beim Hochladen. */
.med-ablage.schmal{flex-direction:row;justify-content:center;gap:var(--a3);
  padding:var(--a3) var(--a4);text-align:left}
.med-ablage.schmal b{font-size:var(--s3)}
.med-ablage.schmal .sz-klein{display:none}
.med-ablage.drueber{border-color:var(--akzent);background:var(--akzent-weich)}
/* Beim Ziehen darf kein Kindelement das drop-Ereignis abfangen –
   sonst zählt der Tiefenzähler falsch und die Fläche flackert. */
.med-ablage.drueber *{pointer-events:none}
.med-raster{display:grid;gap:var(--a3);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  margin-top:var(--a3)}
.med-karte{border:1px solid var(--linie);border-radius:12px;overflow:hidden;
  background:var(--flaeche)}
/* Was nirgends benutzt wird, ist genau das, was man aufräumen will —
   also darf man es sehen, ohne zu lesen. */
.med-karte.frei{border-style:dashed}
.med-bild{height:120px;background-size:cover;background-position:center;
  background-color:var(--flaeche-4)}
.med-name{padding:var(--a2) var(--a2) 0;font-size:13px;font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.med-zeile{display:flex;gap:var(--a2);align-items:center;justify-content:space-between;
  padding:var(--a1) var(--a2) var(--a2);flex-wrap:wrap}
/* Die beiden Knöpfe an einer Medienkarte brachen bei „Adresse
   kopieren" mitten im Wort um und wurden dadurch doppelt so hoch wie
   die Karte daneben — bei zwölf Bildern ein unruhiges Raster. Sie
   teilen sich jetzt die Zeile und behalten ihre Zeilenhöhe. */
.med-zeile button.mini{flex:1;min-width:0;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;padding:var(--a2);font-size:var(--s1)}
/* Vier Knöpfe, nicht zwei (Fassung 230, L-370). Die Regel darüber
   stammt aus der Zeit von „Adresse" und „Löschen"; seit „Zeigen" (182)
   und „Umbenennen" (227) sind es vier, und je ein Viertel von 180 px
   ist kein Platz für ein Wort — auf der Wand stand „benen", „dress",
   „ösche" (Cedric, 18.09.2026, Bildschirmfoto). Ein abgeschnittenes
   Wort ist keine Beschriftung. Deshalb ein Gitter zwei mal zwei, jedes
   Wort ganz, und die Karte ein Stück breiter. Alle Karten tragen
   dieselben Knöpfe, also bleibt das Raster gleich hoch. */
/* Seit Fassung 248 (L-410) steht dort die gemeinsame Knopfzeile
   `.kachel-tun` — zwei Knöpfe und „⋯" statt vier im Gitter. */

/* ============================================================
   Der Notfallknopf
   ------------------------------------------------------------
   Bis Fassung 66 war er nur rot beschriftet — auf dem dunklen
   Grund der Leiste ein dunkles Rot auf dunklem Braun. Der
   Betreiber am 19. August: „Notfall kann man sehr schwer
   erkennen." Nachgemessen: 2,6:1, weit unter den 4,5:1, die
   lesbarer Text braucht.

   Jetzt trägt er eine FLÄCHE: gefüllter Grund, heller Text, ein
   kräftiger linker Balken. Er schreit nicht (kein Vollrot über die
   ganze Breite), ist aber im Augenwinkel zu finden — und genau
   dafür ist er da.
   ============================================================ */
.nav-knopf.notfall{background:rgba(240,112,90,.16);border-color:rgba(240,112,90,.42);
  color:#FFD9D0;box-shadow:inset 3px 0 0 var(--punkt-still)}
.nav-knopf.notfall .zeichen{color:#FF8E78}
.nav-knopf.notfall:hover{background:rgba(240,112,90,.28);border-color:var(--punkt-still);color:#FFF}
/* Ab Fassung 101: Auch der offene Notfall bleibt ein Konturzustand.
   Vorher war die Zeile vollflächig korallenrot gefüllt — ein roter
   Block in Zeilengröße, der auf der Notfallseite alles andere
   überstrahlte, auch den einen Knopf oben rechts, der dort die
   Handlung ist. Die Fläche wird jetzt kräftiger und der Rand
   voll, mehr nicht. Vollflächig bleibt allein `.laeuft` — dann
   läuft wirklich eine Meldung auf den Bildschirmen. */
.nav-knopf.notfall.an{background:rgba(240,112,90,.30);border-color:var(--punkt-still);
  color:#FFF;box-shadow:inset 3px 0 0 var(--punkt-still)}
.nav-knopf.notfall.an .zeichen{color:#FFF}
/* Läuft gerade eine Meldung, pulst der Knopf ruhig – dann ist die
   Frage nicht mehr „wo ist der Notfall", sondern „was läuft da". */
.nav-knopf.notfall.laeuft{background:var(--punkt-still);color:#2A0E08;animation:notfall-puls 2.4s ease-in-out infinite}
@keyframes notfall-puls{0%,100%{opacity:1}50%{opacity:.72}}
@media (prefers-reduced-motion:reduce){.nav-knopf.notfall.laeuft{animation:none}}

/* ============================================================
   SEITEN (Fassung 67)
   ------------------------------------------------------------
   Ein Aufbau für alle Bereiche: Kopf mit Titel und Aktionen,
   darunter der Körper. Was hier steht, gilt für Dashboard,
   Playlists, Vorlagen, Medien, Bildschirme, Live-Steuerung und
   Notfall gleichermaßen — deshalb muss es nur einmal stimmen.

   Der Kopf klebt oben. Bei einer Tabelle mit vierzig Zeilen ist
   „wo bin ich, und wie komme ich zurück" sonst nach dem ersten
   Rollen verschwunden.
   ============================================================ */
.ansicht{display:flex;flex-direction:column;min-height:100vh;min-width:0}
.seiten-kopf{position:sticky;top:0;z-index:5;background:var(--creme);
  border-bottom:1px solid var(--linie);
  padding:var(--a5) clamp(var(--a4),3vw,var(--a6)) var(--a4);
  display:flex;align-items:center;justify-content:space-between;gap:var(--a4);flex-wrap:wrap}
.seiten-kopf-links{display:flex;align-items:center;gap:var(--a3);min-width:0}
/* Der Titel darf seit Fassung 77 umbrechen. Vorher stand hier ein
   Name („Vorlagen"), der immer in eine Zeile passte; jetzt steht
   dort ein Satz („37 Vorlagen. Vier für Medien."), und der wäre auf
   einem schmalen Fenster nach drei Wörtern abgeschnitten. Zwei
   Zeilen sind besser als drei Punkte.

   Seit Fassung 91 trägt er 30px statt 26. Der Entwurf setzt ihn
   bewusst über die Schriftskala hinaus: Er ist die einzige Stelle
   der Anwendung, an der eine Überschrift wirklich groß sein soll,
   und mit --s6 (26px) stand er zu nah an den Kartentiteln (20px).
   Die Skala bleibt für alles andere unangetastet — deshalb steht
   der Wert HIER und nicht als siebte Stufe oben. */
.seiten-titel{font-size:30px;font-weight:600;letter-spacing:-.01em;margin:0;
  overflow-wrap:anywhere;line-height:1.2}
.seiten-unter{font-size:var(--s2);color:var(--gedaempft);margin-top:2px}

/* ============================================================
   Die Handschrift von www.lumafy.de (ab Fassung 77)
   ------------------------------------------------------------
   Zwei Dinge machen die Website wiedererkennbar, und beide kosten
   hier keine Zeile Logik:

   1. Die BEREICHSMARKE — „03 · Vorlagen". Auf der Website steht
      über jedem Abschnitt „01 · Editor", „02 · Multi-Site". Die
      Nummer in Versalziffern, gedämpft, klein.
   2. Der ZWEITEILIGE TITEL — erster Satz aufrecht, zweiter kursiv:
      „Drei Bausteine. *Ein System.*"

   Die Regel dabei ist dieselbe wie beim Akzent: Der kursive Teil
   hat GENAU EINE Bedeutung — er trägt die Pointe. Wer ihn für
   Zierrat benutzt, hat nach drei Seiten eine Oberfläche, in der
   alles kursiv ist und nichts mehr auffällt.
   ============================================================ */
/* Der Kicker über dem Titel setzt seit Fassung 91 mono. Damit ist
   er dasselbe Element wie jeder Listen- und Abschnittskopf (Regel 6
   ganz oben) — eine Schrift, eine Bedeutung: „das hier ist eine
   Beschriftung, kein Inhalt". */
.seiten-marke{display:flex;align-items:center;gap:8px;margin-bottom:var(--a1);
  font-family:var(--mono);font-size:var(--s1);font-weight:400;letter-spacing:.12em;
  text-transform:uppercase;color:var(--beschriftung)}
.sm-nr{font-family:var(--mono);
  color:var(--akzent-text);font-variant-numeric:tabular-nums;letter-spacing:.08em}
.sm-punkt{color:var(--linie-stark)}
.titel-zwei{display:inline}
.tz-eins{font-weight:600}
/* Kursiv UND gedämpft: Der zweite Teil ist die Pointe, nicht der
   Schrei. Auf der Website steht er in derselben Größe daneben —
   das Kursive allein trägt den Unterschied. */
.tz-zwei{font-style:italic;font-weight:600;color:var(--gedaempft)}

/* Ein Maß, wie es auf der Website neben jedem Schritt steht
   („≈ 5 Sekunden", „Auto-Sync · 2s"). Kleine Zahl, Monospace,
   umrandet — sie soll gelesen werden können, ohne den Satz
   daneben zu stören. */
.mass{display:inline-flex;align-items:center;gap:8px;
  font-family:var(--mono);
  font-size:var(--s1);font-variant-numeric:tabular-nums;
  color:var(--gedaempft);border:1px solid var(--linie);border-radius:var(--r-voll);
  padding:2px var(--a2);white-space:nowrap}
.seiten-tun{display:flex;gap:var(--a2);align-items:center;flex-wrap:wrap}
/* Der Inhalt atmet zu den Seiten hin mit der Fensterbreite: eng
   auf dem Handy, ruhig am Schreibtisch. Unten mehr als oben, damit
   der letzte Eintrag nicht am Rand klebt. */
.seiten-koerper{padding:var(--a5) clamp(var(--a4),3vw,var(--a6)) var(--a6);
  display:flex;flex-direction:column;gap:var(--a4);min-width:0;flex:1}
/* Der Zurück-Weg nennt sein Ziel, nicht nur eine Richtung. */
.zurueck-knopf{display:flex;align-items:center;gap:var(--a2);background:transparent;
  border:1px solid transparent;color:var(--gedaempft);font-weight:600;font-size:var(--s2);
  padding:var(--a2) var(--a3);border-radius:var(--r2);white-space:nowrap}
.zurueck-knopf:hover{background:var(--flaeche-2);color:var(--tinte);filter:none}
.zurueck-knopf .zk-pfeil{font-size:var(--s5);line-height:1}
.seiten-fuss-tun{display:flex;gap:var(--a2);justify-content:flex-end}

/* Leiste über einer Liste: Suche, Filter, Zahl. */
.listen-leiste{display:flex;gap:var(--a3);align-items:center;flex-wrap:wrap}
.listen-leiste input[type=search]{flex:1;min-width:220px;max-width:420px}
/* Dieselbe Form wie ein Maß auf der Website („≈ 5 Sekunden"):
   Zahlen in Schreibmaschinenschrift, umrandet, klein. Sie stehen
   in jeder Liste an derselben Stelle und sollen sich als dieselbe
   Sache lesen. */
.listen-zahl{color:var(--gedaempft);font-size:var(--s1);white-space:nowrap;
  font-family:var(--mono);font-variant-numeric:tabular-nums;
  border:1px solid var(--linie);border-radius:var(--r-voll);padding:2px var(--a2)}

/* ---------- Tabellen ----------
   Kein <table>: Die Zeile muss als Ganzes anklickbar und mit der
   Tastatur erreichbar sein, und sie muss auf dem Handy umbrechen
   dürfen. Ein Raster kann beides, eine Tabelle keins von beidem. */
.tab{border:1px solid var(--linie);border-radius:var(--r3);overflow:hidden;background:var(--flaeche)}
.tab-kopf,.tab-zeile{display:grid;
  grid-template-columns:minmax(180px,2.2fr) minmax(120px,1fr) minmax(120px,1.2fr) minmax(140px,1.2fr) minmax(90px,.8fr) 44px;
  align-items:center;gap:var(--a3)}
.tab-kopf{background:var(--flaeche-2);border-bottom:1px solid var(--linie);
  padding:0 var(--a4)}
.tab-kopf-zelle{background:transparent;border:0;padding:var(--a3) 0;text-align:left;
  font-family:var(--mono);font-size:var(--s2);font-weight:400;letter-spacing:.1em;
  text-transform:uppercase;color:var(--beschriftung);display:flex;justify-content:flex-start;align-items:center;gap:4px;min-height:0}
.tab-kopf-zelle:hover{color:var(--tinte);filter:none;background:transparent}
.tab-kopf-zelle.statisch{cursor:default}
.tab-kopf-zelle.sortiert{color:var(--tinte)}
.tab-pfeil{font-size:10px}
.tab-zeile{padding:var(--a3) var(--a4);border-bottom:1px solid var(--linie);cursor:pointer;
  transition:background var(--takt) ease}
.tab-zeile:last-child{border-bottom:0}
.tab-zeile:hover{background:var(--flaeche-2)}
.tab-zeile:focus-visible{outline:2px solid var(--fokus);outline-offset:-2px}
.tab-zeile.aktiv{background:var(--akzent-weich)}
.tab-zeile.ruht{opacity:.55}
.tab-zelle{min-width:0;display:flex;flex-direction:column;gap:2px;font-size:var(--s2)}
.tab-zelle.gedaempft{color:var(--gedaempft)}
.tab-name{flex-direction:row;align-items:center;gap:var(--a2)}
.tab-titel{font-weight:600;font-size:var(--s3);color:var(--tinte);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
.tab-unter{font-size:var(--s1);color:var(--gedaempft)}
.tab-dazu{font-size:var(--s1);color:var(--gedaempft)}
/* Fünf Spalten statt sechs: die Playlistliste, seit „Zustand" und
   „Bildschirme" zu einer Spalte zusammengelegt sind. */
.tab-fuenf .tab-kopf,.tab-fuenf .tab-zeile{
  grid-template-columns:minmax(180px,2.2fr) minmax(120px,1fr) minmax(160px,1.6fr) minmax(90px,.8fr) 44px}
/* Wo die Playlist läuft — der Gerätename, nicht eine Zählung. Er
   steht in normaler Tinte, das Etikett darunter nur im Ausnahmefall. */
.tab-wo{font-size:var(--s2);color:var(--tinte);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tab-verweis{color:var(--akzent-text);font-weight:600}
.tab-offen{color:var(--gedaempft);font-style:italic}
.tab-zeile .punkt{width:8px;height:8px;border-radius:50%;background:var(--punkt-aus);flex:none}
.tab-zeile .punkt.an{background:var(--gruen)}
.tab-zeile .punkt.pause{background:var(--akzent)}
.tab-zeile .punkt.feierabend{background:var(--punkt-aus)}
.tab-zeile .punkt.still{background:var(--rot)}
.tab-tun-spalte{align-items:flex-end}
.tab-tun{color:var(--gedaempft);font-size:var(--s5);line-height:1;padding:2px var(--a2)}
@media (max-width:900px){
  /* Auf dem Handy bleiben Name und Zustand — der Rest wäre eine
     Spalte, die nur noch zwei Zeichen breit ist. Auch der
     Punkte-Knopf fällt weg: Die ganze Zeile ist ohnehin anklickbar,
     und übrig blieb sonst eine dritte Zeile mit drei Punkten. */
  .tab-kopf,.tab-zeile,
  .tab-fuenf .tab-kopf,.tab-fuenf .tab-zeile{grid-template-columns:1fr auto}
  .weg-schmal,.tab-tun-spalte{display:none}
  .tab-kopf{min-height:40px}
}

/* ============================================================
   Die Bühne — ein Fenster, in dem das Produkt läuft (ab Fassung 79)
   ------------------------------------------------------------
   Fassung 77 hatte sie als breites, dunkles Band über die ganze
   Seite gelegt, mit vier Zahlen darin. Gemeldet am selben Abend:
   „ein riesen Block, der da gar nicht reinpasst".

   Der Fehler war nicht die Farbe, sondern die Form. Eine Fläche
   von 1600 Pixeln Breite braucht etwas zu zeigen; vier Ziffern
   füllen sie nicht, sie verlieren sich darin.

   Jetzt steht sie rechts, hoch statt breit, und zeigt einen
   ECHTEN Bildschirm — so wie im Held von www.lumafy.de. Die
   Fensterleiste oben (drei Punkte, „LIVE") ist von dort
   übernommen: Sie sagt in einem Blick, dass das darin kein Bild
   ist, sondern läuft.

   Farben wie die Seitenleiste — sie ist seit Fassung 37 die
   Markenfläche des Produkts.
   ============================================================ */

/* Die Seite, die nicht rollt. Ein Überblick, für den man rollen
   muss, ist keiner: Was unter der Kante liegt, sieht niemand.

   Fassung 79 hatte hier nur `overflow:hidden` stehen — und das hat
   nichts bewirkt. `.ansicht` steht auf `min-height:100vh` und darf
   mit ihrem Inhalt weiterwachsen; ein `hidden` auf einem Kasten
   ohne Deckel schneidet nichts ab, weil es nichts abzuschneiden
   gibt. Die Höhe muss deshalb eine Ebene höher festgehalten
   werden. `100dvh` und nicht `100vh`: Auf Tablets ist `vh` die
   Höhe OHNE eingeblendete Browserleisten, und die Seite stünde
   dauerhaft ein Stück zu hoch. */
.ansicht.ansicht-fest{height:100vh;height:100dvh;min-height:0;overflow:hidden}
.ansicht.ansicht-fest .seiten-kopf{flex:none;position:static}
.koerper-fest{overflow:hidden;min-height:0;flex:1}
/* Ab Fassung 93 ist die Hauptspalte links und die schmale rechts —
   umgekehrt zu Fassung 79 bis 92. Damals stand rechts die Bühne mit
   einem laufenden Player und brauchte die Breite. Jetzt stehen links
   die Bildschirmkarten, und die sind der Inhalt der Seite. */
/* ============================================================
   Die Seite ist so hoch wie ihr Inhalt (Fassung 118)
   ------------------------------------------------------------
   Fehler 1.9 der Anweisung: Unter der Bildschirmwand standen rund
   600 px nichts. Drei Ursachen, alle hier:

   1. `flex:1` auf `.db-zwei` — das Raster spannte die volle Höhe
      auf, egal wie wenig darin stand.
   2. `overflow:auto` auf `.db-links` — ein zweiter Rollbereich in
      einem Rollbereich. Genau dieselbe Bauart ist uns in Fassung
      107 auf die Füße gefallen: Ob so ein Kasten die Radbewegung
      weitergibt, entscheidet die Pixelrundung des Bildschirms.
   3. `min-height` auf den Spalten unter 1100 px.

   Jetzt: `align-items:start`, keine Höhe, keine Mindesthöhe, kein
   Rollbereich in der Spalte. Es rollt die SEITE, wenn überhaupt.
   Die rechte Spalte klebt nicht (kein `sticky`) — bei sechs
   Kacheln ist sie kürzer als die linke, und der Platz darunter
   bleibt leer. Das ist richtig so.
   ============================================================ */
.db-zwei{display:grid;grid-template-columns:minmax(0,1fr) 336px;
  gap:var(--a5);align-items:start}
.db-links{display:flex;flex-direction:column;gap:var(--a3);min-width:0}
.db-rechts{display:flex;min-width:0}
@media (max-width:1100px){
  /* Unter 1100 px passen zwei Spalten nicht mehr nebeneinander.
     Eine Spalte, und die Reihenfolge bleibt: erst der Zustand,
     dann das Beiwerk. */
  .db-zwei{grid-template-columns:1fr}
  /* Diese drei Zeilen gelten NICHT dem Dashboard — es setzt
     `ansicht-fest` seit Fassung 118 nicht mehr —, sondern den
     Ansichten, die den Deckel wirklich brauchen (Editor, Live).
     Auch dort darf unter 1100 px gerollt werden, sonst wäre die
     Seite abgeschnitten statt rollbar. */
  .ansicht.ansicht-fest{height:auto;min-height:100vh;overflow:visible}
  .ansicht.ansicht-fest .seiten-kopf{position:sticky}
  .koerper-fest{overflow:visible}
}

.buehne{position:relative;overflow:hidden;border-radius:var(--r3);
  background:linear-gradient(160deg,var(--seite-oben),var(--seite-unten));
  color:var(--seite-text);border:1px solid var(--seite-linie);
  display:flex;flex-direction:column;flex:1;min-width:0;min-height:0}
/* Ein warmer Schimmer in der oberen rechten Ecke — dieselbe Geste
   wie im Held der Website. Bewusst sehr schwach: Er soll die
   Fläche beleben, nicht zur Grafik werden. */
.buehne::after{content:'';position:absolute;top:-30%;right:-15%;width:70%;height:120%;
  background:radial-gradient(closest-side,rgba(245,166,35,.16),rgba(245,166,35,0));
  pointer-events:none;z-index:0}
.buehne > *{position:relative;z-index:1}

/* Die Fensterleiste. Drei Punkte links, Titel, „LIVE" rechts. */

/* Die Rail hat jetzt ein festes Maß statt eines Anteils. Als
   `.42fr` wuchs sie mit dem Fenster mit — auf einem breiten
   Bildschirm stand neben drei kurzen Namen eine handbreite leere
   Fläche, und der Player daneben wurde dafür kleiner. Im Vorbild
   auf der Website ist sie schmal und bleibt es. */
/* Die Liste der Bildschirme — dieselbe Rolle wie „Main location ·
   North branch · South branch" im Held der Website. */

/* Die Fläche, auf der der Bildschirm läuft. Schwarz und nicht
   dunkelbraun: Was darin steht, IST ein Bildschirm.

   Der schwarze Kasten hat KEINE Maße mehr im Stil — sie werden in
   `anpassen()` gerechnet, weil nur dort das Format der Vorlage
   bekannt ist. Bis Fassung 79 stand hier `width:100%;height:100%`,
   und ein hochformatiger Bildschirm lag als schmaler Streifen in
   einer breiten schwarzen Fläche. Ein leerer schwarzer Balken ist
   das Erste, was auf dem Dashboard auffällt — und das Letzte, was
   dort auffallen sollte. */


/* Ohne Gerät: die Einladung statt eines leeren Fensters. */
.buehne-leer{flex:1;display:flex;flex-direction:column;justify-content:center;
  gap:var(--a3);padding:var(--a5);align-items:flex-start}
.buehne-leer .seiten-marke{color:var(--seite-gedaempft);margin:0}
.buehne-leer .sm-nr{color:var(--akzent)}
.buehne-leer .sm-punkt{color:var(--seite-linie)}
.buehne-titel{margin:0;font-size:var(--s6);font-weight:600;letter-spacing:-.015em;
  line-height:1.2}
.buehne-titel .tz-zwei{color:var(--seite-gedaempft)}
.buehne-satz{margin:0;color:var(--seite-gedaempft);font-size:var(--s3);max-width:42ch}

/* ---------- Dashboard ---------- */
/* Die Lage in EINER Zeile. Hier standen bis Fassung 79 vier
   Zahlenfelder — erst als Kacheln (77), dann als Zeile (79) —, und
   sie sind in Fassung 80 ersatzlos entfallen. Vier Ziffern
   beantworten die Frage „läuft alles?" schlechter als ein Satz,
   und sie verbrauchen dafür die Breite der ganzen Spalte.

   Der farbige Punkt trägt die Aussage doppelt: Wer den Satz nicht
   liest, sieht trotzdem, ob etwas los ist. Grün ist bewusst
   zurückhaltend — ein Dashboard, auf dem jeden Morgen etwas
   leuchtet, hat nach einer Woche niemandes Aufmerksamkeit mehr. */
.db-lage{display:flex;justify-content:flex-start;align-items:center;gap:var(--a3);flex:none;width:100%;
  text-align:left;background:var(--flaeche);border:1px solid var(--linie);
  border-radius:var(--r3);color:var(--tinte);text-decoration:none;
  padding:var(--a3) var(--a4)}
.db-lage:hover{background:var(--flaeche-2);border-color:var(--linie-stark);filter:none}
/* DER PUNKT KOMMT AUS DEMSELBEN ZUSTAND WIE DER SATZ (Fassung 118,
   Anweisung 1.1). Bis Fassung 117 stand die Farbe des Punktes in
   drei eigenen Regeln hier unten (`.gut`, `.warn`, `.schlecht`) und
   der Satz wurde eine Etage höher gerechnet — so kam ein GRÜNER
   Punkt neben „Der Bildschirm läuft nicht." zustande. Der Punkt
   trägt jetzt dieselbe `.punkt-*`-Klasse wie jede Kachel und jede
   Liste; hier steht nur noch die Größe. */
.db-lage-punkt{width:9px;height:9px;flex:none}
.db-lage-satz{flex:1;min-width:0;font-size:var(--s4);letter-spacing:-.01em;
  line-height:1.3}
/* ============================================================
   Rechts innen steht die HANDLUNG, nicht ein Pfeil (Fassung 128)
   ------------------------------------------------------------
   Bis Fassung 127 stand hier `.db-lage-pfeil` — ein Pfeilsymbol —
   und DANEBEN, außerhalb des Bandes, ein eigener Knopf „Zu Filiale
   Pasing". Beide sind entfallen (Entscheidung Cedric, 26.08.2026,
   Sollbild `ansichten/18-dashboard-sechs-geraete.png`):

   Ein Pfeil sagt „irgendwohin"; „Prüfen" sagt, was man dort tut.
   Und der Knopf daneben führte auf dasselbe Ziel wie das Band
   selbst — aus einer Zeile wurden zwei Entscheidungen.

   Kein Knopf und KEINE bernsteinfarbene Fläche: Bernstein als
   Fläche bleibt der einen Handlung der Seite vorbehalten
   („Playlist anlegen"). Bernstein als SCHRIFT ist erlaubt, dafür
   gibt es `--akzent-text` (README, Farbregel). */
.db-lage-tun{font-size:var(--s3);font-weight:600;color:var(--akzent-text);
  flex:none;white-space:nowrap}
.db-lage:hover .db-lage-tun{text-decoration:underline}
/* Strich links, KEINE getönte Fläche — dieselbe Regel wie bei jeder
   anderen Karte (BAUTEILE.md §3). Bis Fassung 93 war die Zeile rot
   hinterlegt; im Sollbild ist sie eine gewöhnliche weiße Karte mit
   einem roten Strich an der Kante. Der Unterschied ist nicht
   Geschmack: Eine rot getönte Fläche über der ganzen Breite liest
   sich als „die Anwendung ist kaputt", ein Strich als „hier ist
   etwas zu tun".

   ROT BEI STÖRUNG, `--linie-stark` BEI ALLEN RUHIGEN ZUSTÄNDEN
   (Entscheidung Cedric, 26.08.2026). Bis Fassung 127 trugen
   „Nicht zugewiesen" und „Wartet" hier den BERNSTEINFARBENEN
   Strich — ein zweiter Akzent auf einer Seite, die genau einen
   haben darf, und dazu das Signal „hier ist etwas zu tun" an
   einem Zustand, bei dem man warten muss. Der Strich steht am
   Band immer, damit das Band nicht je nach Zustand um 2 px
   springt. */
.db-lage{border-left:3px solid var(--linie-stark)}
.db-lage.still{border-color:var(--linie);background:var(--flaeche);
  border-left-color:var(--rot)}
/* Gelb nur am Lizenzband: Laufzeit endet binnen 14 Tagen (Fassung 188).
   Ein Hinweis, keine Störung — deshalb kein Rot. */
.db-lage.bald{border-left-color:var(--gelb)}
.punkt-bald{background:var(--gelb)}

/* ---------- Die Zeile, in der das Band steht ----------
   Die Segmentzeile aus Fassung 91 stand hier daneben: ein
   farbiger Strich je Bildschirm. Sie ist mit Fassung 128 entfallen
   (Entscheidung Cedric, 26.08.2026) — sie sagte dasselbe wie die
   Kartenwand darunter, nur unlesbar: ein Strich je Gerät, ohne
   Namen. Seit die Karten den Zustand ausgeschrieben tragen, ist
   sie die dritte Ausgabe derselben Auskunft. */
.db-lage-zeile{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;flex:none}
.db-lage-zeile .db-lage{flex:1 1 320px;width:auto}

/* ============================================================
   Speicher: eine Zeile am Fuß, keine Karte (Anweisung 1.4)
   ------------------------------------------------------------
   `.db-inhaltzeile` und `.db-inhaltfeld` — die drei Zählerkacheln
   für Playlists, Vorlagen und Medien — sind mit Fassung 118
   entfallen. Sie standen in einer Karte mit der Überschrift
   „SPEICHER" und hatten mit Speicher nichts zu tun.

   Was bleibt: Text, darunter die Spur, 4 px hoch. Kein Rahmen,
   keine Überschrift. Die Spur wird nur GEZEICHNET, wenn wirklich
   etwas belegt ist (ab 1 %) — eine leere Spur über die volle
   Breite sieht aus wie ein Fehler und nicht wie ein leerer
   Speicher.
   ============================================================ */
.db-speicher{display:flex;flex-direction:column;gap:var(--a2);min-width:0}
.db-speicher-text{font-size:var(--s2);color:var(--gedaempft);
  font-variant-numeric:tabular-nums}
.db-speicher-spur{height:4px;border-radius:var(--r-voll);
  background:var(--flaeche-3);overflow:hidden}
.db-speicher-spur i{display:block;height:100%;background:var(--gruen)}
.db-speicher-spur.gelb i{background:var(--gelb)}
.db-speicher-spur.rot i{background:var(--rot)}
/* „Alles läuft" ist eine Zeile, keine Karte. Bestätigung verdient
   es, Platz nicht. */
.db-ruhe-zeile{border:1px dashed var(--linie);border-radius:var(--r2);flex:none}

.db-raster{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:var(--a4)}
.db-karte{border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche);
  box-shadow:var(--schatten-1);padding:var(--a4);display:flex;flex-direction:column;gap:var(--a2);min-width:0}
.db-karte.db-breit{grid-column:span 2}
@media (max-width:900px){.db-karte.db-breit{grid-column:span 1}}
.db-karte-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3)}
.db-karte-kopf h3{margin:0;font-size:var(--s4);font-weight:600}
.db-kacheln{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--a3)}
.db-kachel{border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche-2);
  color:var(--tinte);padding:var(--a3);text-align:left;display:flex;flex-direction:column;gap:2px}
.db-kachel:hover{border-color:var(--linie-stark);background:var(--flaeche-3);filter:none}
.db-zahl{font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:32px;font-weight:400;line-height:1.05}
.db-wort{font-size:var(--s2);color:var(--gedaempft);font-weight:600}
.db-kachel.gut .db-zahl{color:var(--gruen)}
.db-kachel.schlecht{background:var(--rotBg);border-color:rgba(214,69,43,.35)}
.db-kachel.schlecht .db-zahl{color:var(--rot)}
.db-kachel.warn{background:var(--gelbBg);border-color:rgba(180,120,0,.3)}
.db-kachel.warn .db-zahl{color:var(--gelb)}
.db-zeile{display:flex;justify-content:flex-start;align-items:center;gap:var(--a3);width:100%;text-align:left;
  padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche);color:var(--tinte);font-size:var(--s2)}
.db-zeile:hover{background:var(--flaeche-2);filter:none}
.db-punkt{width:8px;height:8px;border-radius:50%;background:var(--gedaempft);flex:none}
.db-zeile.schlecht .db-punkt{background:var(--rot)}
.db-zeile.warn .db-punkt{background:var(--gelb)}
.db-zeile.akzent .db-punkt{background:var(--akzent)}
.db-was{font-weight:600;flex:1;min-width:0}
.db-dazu{color:var(--gedaempft);font-size:var(--s1);text-align:right}
.db-ruhe{display:flex;align-items:center;gap:var(--a2);color:var(--gedaempft);
  padding:var(--a3);font-size:var(--s2)}
.db-haken{color:var(--gruen);font-weight:600}
.db-schritte{display:grid;gap:var(--a2)}
.db-schritt{display:grid;grid-template-columns:24px 1fr;gap:var(--a1) var(--a3);
  text-align:left;padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche);color:var(--tinte)}
.db-schritt:hover{background:var(--flaeche-2);filter:none}
.db-schritt .nr{grid-row:span 2;width:24px;height:24px;border-radius:50%;
  background:var(--flaeche-3);color:var(--gedaempft);display:flex;align-items:center;
  justify-content:center;font-size:var(--s1);font-weight:600}
.db-schritt b{font-size:var(--s3)}
.db-schritt span:last-child{color:var(--gedaempft);font-size:var(--s2)}

/* ---------- Detailseite (Bildschirm) ---------- */
.karte{border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche);
  box-shadow:var(--schatten-1);padding:var(--a4);min-width:0}
.karte-formular{max-width:720px}
.detail-spalten{display:grid;grid-template-columns:320px 1fr;gap:var(--a4);align-items:start}
@media (max-width:1000px){.detail-spalten{grid-template-columns:1fr}}
.gr-seite-karte{display:flex;flex-direction:column;gap:var(--a3)}
.gr-foto-platz{background:var(--dunkel);border-radius:var(--r2);aspect-ratio:16/9;
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.gr-foto-platz{position:relative}
.gr-foto-platz img{width:100%;height:100%;object-fit:contain}
.gr-foto-leer{color:var(--gedaempft-weich);font-size:var(--s2)}
/* Das Alter des Fotos, unten auf dem Bild (Fassung 180). Ein Foto
   ohne Zeitangabe wäre eine Behauptung über JETZT. */
.gr-foto-alter{position:absolute;left:0;right:0;bottom:0;padding:var(--a1) var(--a2);
  font-family:var(--mono);font-size:var(--s1);color:var(--seite-text);
  background:linear-gradient(0deg,rgba(0,0,0,.65),rgba(0,0,0,0))}
.gr-zustand-zeile{display:flex;align-items:center;gap:var(--a2)}
.gr-zustand-zeile .punkt{width:10px;height:10px;border-radius:50%;background:var(--punkt-aus)}
.gr-zustand-zeile .punkt.an{background:var(--gruen)}
.gr-zustand-zeile .punkt.still{background:var(--rot)}
.gr-zustand-zeile .punkt.pause{background:var(--akzent)}
.gr-daten{display:grid;grid-template-columns:auto 1fr;gap:var(--a1) var(--a3);margin:0;
  font-size:var(--s2)}
.gr-daten dt{color:var(--gedaempft)}
.gr-daten dd{margin:0;color:var(--tinte);word-break:break-word}
/* Woher die Diagnosewerte stammen (Fassung 129). Ein Satz statt
   fünf Wiederholungen hinter jedem Wert, und nur dann, wenn das
   Gerät gerade nicht meldet — meldet es, ist alles von eben.
   Gedämpft und klein: Es ist eine Fußnote zur Liste darüber, keine
   Warnung. */
.gr-stand{font-size:var(--s1);color:var(--gedaempft);line-height:1.4}
/* Bildausschnitt (Fassung 144). Vier kurze Zahlenfelder
   nebeneinander: Sie gehören zusammen und werden zusammen
   abgelesen — untereinander sähen sie aus wie vier Einstellungen
   statt wie ein Rechteck. Unter 520 px bricht das Raster auf zwei
   Spalten, damit die Zahlen nicht abgeschnitten werden. */
.gr-ausschnitt-felder{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--a2)}
.gr-ausschnitt-felder .feld{margin:0}
.gr-ausschnitt-knoepfe{display:flex;flex-wrap:wrap;gap:var(--a2);margin-top:var(--a2)}
@media (max-width:520px){.gr-ausschnitt-felder{grid-template-columns:repeat(2,1fr)}}
.gr-seite-tun{display:flex;flex-wrap:wrap;gap:var(--a2)}
.gr-seite-tun button{flex:1 1 auto}
.reiter-inhalt{padding-top:var(--a4);display:flex;flex-direction:column;gap:var(--a4)}

/* Das Suchfeld der Playlists stand bis Fassung 66 in der dunklen
   Seitenleiste und trägt deren Farben. Auf der Seite steht es auf
   Papier — dort wäre heller Text auf hellem Grund unsichtbar.

   Seit Fassung 141 steht es in der KOPFZEILE (`.seiten-tun`) und
   nicht mehr im Körper darunter. Beide Orte müssen hier stehen:
   `.seiten-tun` ist ein Geschwister von `.seiten-koerper`, kein
   Kind — ohne die zweite Zeile trüge das Feld dort wieder die
   Farben der dunklen Leiste. */
.seiten-koerper .bs-suche{padding:0;flex:1;min-width:220px;max-width:420px}
/* In der Kopfzeile ist das Feld schmaler: Daneben steht die eine
   Handlung, und bei 340 px Feld plus Knopf brach die Zeile um — der
   Knopf rutschte unter das Suchfeld (am 28.08.2026 im Browser
   gesehen). 280 px ist dasselbe Maß wie im Vorlagenkatalog. */
.seiten-tun .bs-suche{padding:0;flex:1;min-width:0;max-width:280px}
.seiten-koerper .bs-suche input,.seiten-tun .bs-suche input{
  background-color:var(--flaeche);border-color:var(--linie);color:var(--tinte)}
.seiten-koerper .bs-suche input::placeholder,
.seiten-tun .bs-suche input::placeholder{color:var(--gedaempft)}
/* Die Leiste, die das Feld trägt, darf in der Kopfzeile nicht die
   ganze Breite fressen — dort steht daneben die eine Handlung. */
/* Der Knopf bricht NIE um; wird es eng, schrumpft das Feld. Eine
   Kopfzeile, in der die eine Handlung unter das Suchfeld rutscht,
   sieht aus, als hätte jemand vergessen aufzuräumen (am 28.08.2026
   im Browser gesehen). */
.seiten-tun .listen-leiste{flex:1 1 180px;min-width:0;max-width:280px}
.seiten-tun>button{flex:none}

/* Etiketten in Tabellenzellen behalten ihre Breite: Eine Zelle ist
   eine Spalte, kein Balken. */
.tab-zelle{align-items:flex-start}
.tab-zelle .etikett{align-self:flex-start}
.tab-name{align-items:center}

/* Wo bin ich? Fläche, hellere Schrift, halbfett — und als einziges
   Bernstein der schmale Balken an der Kante, genau wie im Entwurf.
   Bis Fassung 100 trug zusätzlich das Symbol den Akzent: damit gab
   es auf jeder Ansicht zwei bernsteinfarbene Stellen, den Knopf
   oben rechts und die Navigationszeile. Eine Akzentfarbe, die an
   zwei Stellen steht, zeigt auf keine. */
.nav-knopf.an{background:var(--seite-flaeche-fest);color:var(--seite-text);
  font-weight:600;border-color:transparent;box-shadow:inset 3px 0 0 var(--akzent)}
/* Der Zähler ist eine Angabe am Rand und kein Abzeichen: Zahl in
   Schreibmaschinenschrift, gedämpft, ohne Pille. Die Pille sah aus
   wie ein Zustand („3 ungelesen"), und das ist sie nicht. */
.nav-zahl{margin-left:auto;flex:none;font-family:var(--mono);
  font-variant-numeric:tabular-nums;
  font-size:var(--s1);font-weight:400;color:var(--seite-gedaempft)}
.nav-knopf.an .nav-zahl{color:var(--seite-text)}
/* Fassung 416 (L-613, ADR-090, F36): Der Zähler „braucht dich“ ist mit
   Absicht eine FLÄCHE — die Ausnahme zur Regel darüber (Fassung 101) und
   zu „Rot nur bei Durchsage“ (ADR-049), weil er keine Angabe am Rand ist,
   sondern sagt, dass jemand etwas tun muss. Eigene Klasse, nicht
   `.nav-zahl`: Die bleibt ohne Fläche. Zeichen und Zahl sind sichtbar, der
   Satz („3 brauchen dich“) wird vorgelesen und steht im Titel. */
.nav-braucht{margin-left:auto;flex:none;display:inline-flex;align-items:center;
  padding:1px var(--a2);border-radius:var(--r-voll);
  background:var(--braucht);color:var(--auf-braucht);
  font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-size:var(--s1);font-weight:600;line-height:1.5}
.nav-braucht[hidden]{display:none}
.nav-braucht-sichtbar{display:inline-flex;align-items:center;gap:var(--a1)}

/* Der Rückweg im Playlist-Kopf steht über dem Namen, nicht daneben:
   Der Name ist ein Eingabefeld und darf die volle Breite haben. */
.kopf-links{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0}
.kopf-links .zurueck-knopf{margin-left:calc(var(--a3) * -1)}
.listen-leiste select{max-width:260px}

/* ---------- Betriebszeiten auf der Detailseite ----------
   Auf der breiten Seite liefen die Uhrzeitfelder über die ganze
   Spalte, und „von"/„bis"/„×" standen jeweils in einer eigenen
   Zeile. Ein Fenster ist EINE Zeile: Tage, von, bis, weg. */
.gr-bz-zeile{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap;
  padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche-2)}
.gr-bz-zeile input[type=time]{width:auto;min-width:120px;flex:none}
.gr-bz-zeile .sz-marke{color:var(--gedaempft);font-size:var(--s2)}
.gr-bz-zeile > button{margin-left:auto}
.gr-bz-tage{gap:var(--a2)}
.gr-bz-tag{gap:4px}

/* Der Name auf der Bildschirm-Detailseite ist ein Feld wie jedes
   andere — die große randlose Schrift gehört dem Playlist-Editor,
   wo der Name die Überschrift IST. */
.reiter-inhalt .name-eingabe{font-size:var(--s4);font-weight:600;
  border:1px solid var(--linie);border-radius:var(--r2);
  padding:var(--a2) var(--a3);background:var(--flaeche);width:100%}

/* Eine leere Zahl ist keine Zahl: Die Pille verschwindet, statt als
   grauer Strich dazustehen. */
.nav-zahl:empty{display:none}

/* ============================================================
   Knöpfe, die keine Knöpfe sind
   ------------------------------------------------------------
   Tabellenzeilen, Kacheln und Listenzeilen sind <button>, weil sie
   anklickbar und mit der Tastatur erreichbar sein müssen. Die
   Grundregel für Knöpfe setzt aber `color: var(--auf-akzent)` —
   die Schriftfarbe FÜR DEN AKZENT. Im hellen Modus ist das
   zufällig fast schwarz und fiel nicht auf; im dunklen Modus stand
   dunkler Text auf dunkler Fläche und das halbe Dashboard war
   unlesbar. Am 19. August im Bildschirmfoto gesehen.

   Deshalb hier ausdrücklich: Wer wie Papier aussieht, trägt auch
   die Schriftfarbe von Papier.
   ============================================================ */
.tab-zeile,.tab-kopf-zelle,.tab-tun,.db-kachel,.db-zeile,.db-schritt,.zurueck-knopf{
  color:var(--tinte)}
.tab-kopf-zelle,.tab-tun,.zurueck-knopf{color:var(--gedaempft)}
.tab-zeile:hover,.db-kachel:hover,.db-zeile:hover,.db-schritt:hover{color:var(--tinte)}

/* ============================================================
   Wissen — die Selbsthilfe im Programm
   ------------------------------------------------------------
   Aufgebaut wie der Katalog: eigene Rollfläche, Suchleiste oben,
   Fuß mit dem Weg zum Menschen. Ein zweites Aussehen für dieselbe
   Aufgabe wäre eine zweite Sprache im selben Programm.
   ============================================================ */
/* Kein eigener Rollbereich — dieselbe Lehre wie beim Katalog in
   Fassung 107: Ein Kasten, der rollt, obwohl über ihm nichts stehen
   bleiben muss, nimmt der Seite den Rollbalken weg. Die Breite bleibt
   begrenzt, aber großzügiger: Über tausend Pixel wird eine Zeile
   Fließtext unlesbar lang, und die Beiträge sind Fließtext. */
/* ============================================================
   Die Hilfeseite (Fassung 121, S13)
   ------------------------------------------------------------
   Hier standen bis Fassung 120 zwei Spalten: die Beiträge links,
   die Einstellungskarte rechts. Die Karte ist entfallen (ihre
   Angaben stehen seit Fassung 120 in „Mein Zugang"), und die
   Beiträge sind keine Karten mehr, sondern VERWEISZEILEN in zwei
   Spalten — so steht es im Sollbild
   `ansichten/15-hilfe-support.png`.

   Zwanzig aufklappbare Karten untereinander waren wieder das
   Handbuch, vor dem man geflohen ist (Fehler K1). Eine Zeile je
   Antwort passt in zwei Spalten und lässt sich überfliegen.
   ============================================================ */
.hi{display:flex;flex-direction:column;gap:var(--a3)}
/* 360 px, wie in Anweisung 3.1 — und `flex:none`, weil die
   Knopfreihe der Kopfzeile ein Flexbehälter ist und das Feld sonst
   auf seine Mindestbreite zusammengedrückt wird. Am laufenden
   System gemessen: 220 statt 360. */
.hi-suche{width:360px;max-width:100%;flex:none}
.hi-zahl{margin:0;font-variant-numeric:tabular-nums}
/* ============================================================
   ZWEI Spalten, fest — und eine gedeckelte Breite (Fassung 132)
   ------------------------------------------------------------
   Hier stand `repeat(auto-fit,minmax(300px,1fr))`. Bei 1624 px
   Inhaltsbreite ergibt das VIER Spuren zu 366 px, und am 26.08.2026
   standen darin 1, 4, 1 und 14 Einträge. Das ist keine Gliederung
   mehr, sondern ein Raster, das mit dem Fenster mitwächst und die
   Gruppen zufällig verteilt — Fehler K1 aus `REPARATUR.md` ist damit
   von „eine lange Spalte" auf „vier ungleiche" gekippt.

   Sollbild `ansichten/15-hilfe-support.png` zeigt ZWEI Spalten,
   2 × 2, in einem begrenzten Textmaß. Genau das steht jetzt hier:
   feste zwei Spuren, Inhalt auf 920 px gedeckelt. Eine Gruppe mit
   vierzehn Einträgen wird dadurch lang — das ist richtig so
   (Anweisung, Abschnitt 0: mehr Inhalt heißt mehr Zeilen, nicht
   anderer Aufbau).
   ============================================================ */
.hi{max-width:920px}
/* Das Raster trägt seit Fassung 189 genau ZWEI Kinder: die beiden
   Spalten. Vorher war jede GRUPPE eine Zelle — und ein Raster
   koppelt die Höhe einer Zeile, also stand unter der kurzen Gruppe
   so lange nichts, wie die lange daneben brauchte. Die Verteilung
   auf die Spalten rechnet `hilfeSeite()`; hier steht nur noch, dass
   es zwei sind und wie weit sie auseinanderstehen. */

.hi-gruppe{min-width:0;display:flex;flex-direction:column;gap:var(--a1)}
.hi-gruppe .mono-kopf{margin-bottom:var(--a2)}
/* Die Zeile sieht aus wie ein Verweis und ist einer: Sie führt zur
   Antwort. Bernstein als SCHRIFT (`--akzent-text`), nicht als
   Fläche — der eine bernsteinfarbene Knopf der Seite ist
   „Anfrage senden". */
.hi-link{display:block;width:100%;text-align:left;background:transparent;border:0;
  padding:var(--a1) 0;font-size:var(--s3);line-height:1.5;color:var(--akzent-text);
  text-decoration:underline;text-underline-offset:3px}
.hi-link:hover{color:var(--tinte);filter:none}
.hi-kurz{font-size:var(--s2);color:var(--gedaempft);line-height:1.6;
  margin-bottom:var(--a3)}
.hi-trenner{border:0;border-top:1px solid var(--linie);margin:var(--a6) 0 var(--a5)}
/* Der Anfrageabschnitt. Feldbreiten nach Inhalt (Anweisung 3.2):
   ein Satz 480 px, das Textfeld die vollen 720, Auswahlfelder 360. */
.hi-anfrage{max-width:720px}
.hi-anfrage-titel{font-size:var(--s5);font-weight:600;margin:0 0 var(--a1)}
.hi-satz{max-width:480px}
/* Vier Zeilen als Einstieg, danach wächst es mit der Eingabe. Ein
   leeres Textfeld war das größte Element im Bild. */
.hi-wachs{min-height:calc(4lh + var(--a4));resize:vertical;overflow:hidden}
.hi-zwei{display:flex;gap:var(--a4);flex-wrap:wrap}
.hi-zwei > .feld{flex:1 1 300px;min-width:0}
/* „Was wir mitschicken" ist eingeklappt: Der Text ist wichtig, aber
   nicht das, was der Kunde beim Schreiben braucht. */
.hi-mit{border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche);margin-top:var(--a4)}
.hi-mit > summary{cursor:pointer;padding:var(--a3) var(--a4);font-size:var(--s3);
  font-weight:600;list-style:none}
.hi-mit > summary::-webkit-details-marker{display:none}
.hi-mit > summary::before{content:"";display:inline-block;width:0;height:0;
  border-left:6px solid currentColor;border-top:4px solid transparent;
  border-bottom:4px solid transparent;margin-right:var(--a2);
  transition:transform var(--takt) ease}
.hi-mit[open] > summary::before{transform:rotate(90deg)}
.hi-mit-koerper{padding:0 var(--a4) var(--a4)}
/* Ein Umschalter aus zwei oder drei Wörtern. Dieselbe Form wie die
   Sprachwahl auf der Anmeldung — es ist dieselbe Sorte Wahl. */
.pillenwahl{display:inline-flex;border:1px solid var(--linie-stark);
  border-radius:var(--r-voll);overflow:hidden;align-self:flex-start;max-width:100%}
.pillen-knopf{flex:0 0 auto;border:0;border-radius:0;min-height:36px;
  padding:var(--a1) var(--a3);font-size:var(--s2);font-weight:600;
  background:transparent;color:var(--gedaempft)}
.pillen-knopf:hover{color:var(--tinte);background:var(--flaeche-2);filter:none}
.pillen-knopf.an{background:var(--gewaehlt);color:var(--auf-gewaehlt)}
/* Nummerierte Handgriffe. Die Zahl ist die halbe Auskunft: „Schritt
   drei von vier" beruhigt, eine Aufzählung mit Punkten nicht. */
.wi-schritte{margin:0 0 var(--a3);padding-left:1.4em;display:flex;flex-direction:column;
  gap:var(--a2)}
.wi-schritte li{font-size:var(--s-knopf);line-height:1.6;color:var(--tinte)}
.wi-schritte li::marker{color:var(--gedaempft);font-weight:600;font-size:var(--s2)}

/* ============================================================
   Aufklappbare Abschnitte in den Einstellungen (Fassung 69)
   ------------------------------------------------------------
   Der Reiter „Schnittstellen" war eine Rolle aus vier Aufgaben, die
   man nie am selben Tag erledigt. Jetzt vier Zeilen, jede mit einer
   Kopfzeile, die schon zugeklappt sagt, ob etwas eingerichtet ist —
   ohne diese Zusatzzeile wäre das Zuklappen eine Verschlechterung:
   Man müsste jeden Abschnitt einmal öffnen, um zu sehen, dass nichts
   drin ist.

   `<details>` statt Eigenbau: mit Tastatur bedienbar, wird von
   Vorleseprogrammen als „zugeklappt" angesagt, und Strg+F öffnet den
   Abschnitt mit dem Treffer von allein.
   ============================================================ */
.falt{border:1px solid var(--linie);border-radius:var(--r3);
  background:var(--flaeche);margin-bottom:var(--a3);overflow:hidden}
.falt[open]{border-color:var(--linie-stark)}
.falt > summary{list-style:none;cursor:pointer;padding:var(--a3) var(--a4);
  display:flex;align-items:center;gap:var(--a3);min-height:44px;
  font-size:var(--s3);font-weight:600;color:var(--tinte)}
.falt > summary::-webkit-details-marker{display:none}
.falt > summary:hover{background:var(--flaeche-2)}
.falt > summary:focus-visible{outline:2px solid var(--fokus);outline-offset:-2px}
/* Der Pfeil wird selbst gezeichnet: Der eingebaute sieht in jedem
   Browser anders aus, und einer davon zeichnet ihn gar nicht. */
.falt > summary::before{content:'›';flex:none;width:14px;text-align:center;
  color:var(--gedaempft);font-size:var(--s5);line-height:1;
  transition:transform var(--takt) ease}
.falt[open] > summary::before{transform:rotate(90deg)}
.falt-titel{flex:1;min-width:0}
/* Sagt zugeklappt, was dahinter liegt: „3 eingerichtet",
   „nicht eingerichtet", „nach 30 Minuten". */
.falt-unter{flex:none;font-size:var(--s1);font-weight:600;color:var(--gedaempft);
  background:var(--flaeche-3);border-radius:var(--r-voll);padding:2px 8px;
  white-space:nowrap}
.falt-koerper{padding:0 var(--a4) var(--a4);border-top:1px solid var(--linie)}
.falt-koerper > *:first-child{margin-top:var(--a4)}

/* Auswahl in der Mediathek — Grundlage der Diashow (Fassung 69) */
.med-karte{position:relative}
.med-wahl{position:absolute;top:8px;left:8px;z-index:2;width:20px;height:20px;
  accent-color:var(--tinte);cursor:pointer;border-radius:4px;background:#fff;
  /* Ein heller Ring darunter. Das Kästchen liegt auf dem Bild, und
     auf einem hellen Foto war es bis Fassung 176 kaum zu finden —
     seit es an JEDER Kachel sitzt (Löschen, Einsortieren) fällt das
     auf. */
  box-shadow:0 0 0 3px rgba(255,255,255,.92),0 1px 3px rgba(0,0,0,.35)}
/* Der Rahmen liegt auf der KARTE und nicht auf dem Bild: Sonst
   verschiebt sich beim Auswählen das Raster um zwei Pixel, und bei
   zwölf Bildern sieht man nur noch das Zucken. */
.med-karte.gewaehlt{border-color:var(--akzent);box-shadow:inset 0 0 0 1px var(--akzent)}

/* ============================================================
   Video und Speicherkontingent (Fassung 72)
   ============================================================ */
/* Die Vorschau im Videofeld ist bewusst so groß wie das
   Vorschaubild daneben: Zwei Felder derselben Art dürfen nicht
   verschieden hoch sein, sonst springt das Formular. */
.bildfeld .vorschauvideo{width:160px;height:90px;border-radius:var(--r2);
  object-fit:cover;background:#000;flex:none;border:1px solid var(--linie)}

/* Ein Video hat kein Vorschaubild vom Server, und sechzig
   <video>-Elemente im Raster wären auf einem schwachen Rechner das
   Ende. Deshalb eine Kachel mit Zeichen und Länge. */
.med-bild.med-video{position:relative;display:flex;align-items:center;
  justify-content:center;background-color:var(--flaeche-4)}
.med-videozeichen{display:flex;align-items:center;justify-content:center;
  color:var(--gedaempft)}
.med-laenge{position:absolute;right:6px;bottom:6px;font-size:11px;font-weight:600;
  background:rgba(0,0,0,.62);color:#fff;border-radius:var(--r-voll);padding:2px 8px;
  font-variant-numeric:tabular-nums}

/* ------------------------------------------------------------
   Ansehen und auswählen (Fassung 73)
   ------------------------------------------------------------
   Die Kachel ist jetzt ein Knopf. Ein <button> bringt eigene
   Vorgaben mit (Rahmen, Innenabstand, eigene Schrift), die das
   Raster sofort verziehen — deshalb werden sie hier abgeräumt und
   nur der Zeiger bleibt. */
.med-schaltbild{width:100%;border:0;padding:0;margin:0;display:block;
  font:inherit;color:inherit;cursor:pointer;background-color:var(--flaeche-4)}
.med-schaltbild.med-video{display:flex}
.med-schaltbild:hover{filter:brightness(.94)}
.med-schaltbild:focus-visible{outline:2px solid var(--fokus);outline-offset:-2px}

/* Dieselbe Karte, aber ohne Knöpfe darin: Im Wähler ist die ganze
   Karte die Auswahl. */
.med-wahl-karte{display:block;width:100%;padding:0;text-align:left;font:inherit;
  color:inherit;cursor:pointer;background:var(--flaeche);
  border:1px solid var(--linie);border-radius:12px;overflow:hidden}
.med-wahl-karte:hover{border-color:var(--akzent)}
.med-wahl-karte:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.med-wahl-karte .med-bild{pointer-events:none}

/* Die große Ansicht. Höhe gedeckelt, damit ein hochkantes Video
   nicht über den Bildschirmrand hinauswächst und die Bedienleiste
   des Players unerreichbar wird. */
.med-schau-rahmen{background:#000;border-radius:var(--r2);overflow:hidden;
  display:flex;align-items:center;justify-content:center;margin-bottom:var(--a3)}
.med-schau{max-width:100%;max-height:min(62vh,560px);display:block}

/* Der Speicherbalken. Er steht über der Mediathek und in derselben
   Form auf dem Dashboard — eine Form, eine Wahrheit. Gelb ab 80 %,
   rot ab 95 %: Wer bei 95 % noch nichts gemerkt hat, hat die Farbe
   davor nicht gesehen. */
.sp-balken{margin-bottom:var(--a3);max-width:520px}
.sp-text{font-size:13px;font-weight:600;color:var(--gedaempft);margin-bottom:8px}
.sp-spur{height:8px;border-radius:var(--r-voll);background:var(--flaeche-4);overflow:hidden}
/* DER BALKEN IST EINE ANZEIGE, KEINE HANDLUNG (Fassung 132).
   Er stand in `--akzent` und war damit die zweite bernsteinfarbene
   Fläche auf der Lizenzseite, neben dem Speicherknopf. Bernstein
   heißt „hier handeln" — an einem Balken gibt es nichts zu handeln.
   Die WARNfarben bleiben: gelb ab 80 %, rot ab 95 % sagen sehr wohl
   etwas, das man tun muss (Entscheidung Cedric, 26.08.2026). */
.sp-spur i{display:block;height:100%;background:var(--linie-stark);border-radius:var(--r-voll);
  transition:width var(--takt) ease}
.sp-balken.gelb .sp-spur i{background:var(--gelb)}
.sp-balken.rot .sp-spur i{background:var(--rot)}
.sp-balken.rot .sp-text{color:var(--rot)}

/* Ein Hinweis, der wirklich einer ist: Über der Vorratsgrenze eines
   Geräts hat die Zahl eine Folge, die man sonst erst am dunklen
   Bildschirm bemerkt. */
.hinweis.warn{color:var(--gelb);font-weight:600}

/* ============================================================
   Kunden verwalten (Fassung 149, S16)
   ------------------------------------------------------------
   Zwei Seiten statt zweier Dialoge: `/kunden` und
   `/kunden/<kennung>`. Beide benutzen die Bauteile, die es schon
   gibt — die Listenzeile der Playlist-Seite (`.pl-kopfzeile`,
   `.pl-karte`, `.pl-zeile`, S15) und das Gerüst der
   Einstellungsseite (`.est-seite`, S12). Eine zweite Kopie mit
   eigenem Präfix wäre eine zweite Wahrheit für dieselbe Form; hier
   steht nur, was diese Seiten darüber hinaus brauchen.
   ============================================================ */

/* Das Band über der Liste. Gleiche Bauart wie `.streifen`, nur mit
   dem Strich links: rot, wenn etwas klemmt — sonst `--linie-stark`,
   damit auch der ruhige Zustand denselben Platz hat und die Seite
   beim Aufräumen nicht springt (Anweisung 3.2). */
.streifen-ruhig{border-left:3px solid var(--linie-stark)}
.kd-band-satz{flex:1 1 auto;min-width:0;font-size:var(--s3)}
.kd-band-dazu{color:var(--gedaempft)}

/* Die Zahlenspalten. 13 px Mono mit Tabellenziffern, damit „4 von 5"
   und „12 von 12" untereinander fluchten — verglichen wird
   untereinander, und das geht nur bei gleicher Ziffernbreite. */
.kd-mono{font-family:var(--mono);font-size:var(--s2);
  font-variant-numeric:tabular-nums}
.kd-fehlt{color:var(--rot);font-weight:600}
.kd-tarif{color:var(--gedaempft)}
/* `Öffnen` ist der sichtbare Anker der Zeile, kein Knopf: Fünf
   gerahmte Knöpfe untereinander waren die halbe Unruhe im alten
   Dialog (Anweisung 3.3). */
.kd-oeffnen{color:var(--akzent-text);font-weight:600;font-size:var(--s2)}
.pl-zeile:hover .kd-oeffnen{text-decoration:underline}
/* Die Nachbarseiten stehen UNTER der Liste, als Text. Sie sind
   Nachbarn, keine Handlungen auf dieser Seite. */
.kd-nachbarn{display:flex;gap:var(--a5);flex-wrap:wrap;margin-top:var(--a5)}

/* ---------- Die Kundenseite ---------- */
/* Für die Brotkrumen der Kundenseite gibt es hier NICHTS: Sie
   benutzt `.vs-krumen` von der Vorlagenseite. Ein zweiter Bauteil
   mit eigenem Präfix wäre eine zweite Wahrheit für dieselbe Form. */
/* Was geändert wurde, links neben dem einen bernsteinfarbenen
   Knopf. Ohne diese Zeile weiß niemand, was „speichern" mitnimmt. */
.kd-schmutz{font-size:var(--s1);color:var(--gedaempft);white-space:nowrap}

.kd-kacheln{display:grid;gap:var(--a3);
  grid-template-columns:repeat(auto-fill,minmax(160px,1fr));margin-bottom:var(--a4)}
.kd-kachel{border:1px solid var(--linie);border-radius:var(--r2);
  padding:var(--a4);background:var(--flaeche);box-shadow:var(--schatten-1)}
.kd-kachel .kd-kicker{font-family:var(--mono);font-size:var(--s1);
  letter-spacing:.1em;text-transform:uppercase;color:var(--beschriftung)}
.kd-kachel .kd-wert{font-size:var(--s5);font-weight:600;margin-top:var(--a2)}
.kd-kachel .kd-dazu{font-size:var(--s1);color:var(--gedaempft);margin-top:var(--a1)}

/* Zugänge: Zeilen in einer Karte, nicht ein Formular je Person.
   Die Rolle steht als TEXT und nicht als Auswahlfeld — ein
   Auswahlfeld je Zeile heißt, dass jede Zeile jederzeit änderbar
   ist, und genau daher kamen die abgeschnittenen Rollennamen
   (Anweisung 4.5). */
.kd-zg-zeile{display:grid;gap:var(--a3);align-items:center;
  grid-template-columns:minmax(0,1fr) 168px 92px;
  padding:var(--a3) var(--a4);border-top:1px solid var(--linie)}
.kd-zg-zeile:first-child{border-top:0}
.kd-zg-name{font-size:15px;font-weight:600}
.kd-zg-mail{font-size:var(--s1);color:var(--gedaempft);
  overflow:hidden;text-overflow:ellipsis}
.kd-zg-rolle{font-size:var(--s3);color:var(--gedaempft)}
@media (max-width:760px){
  .kd-zg-zeile{grid-template-columns:minmax(0,1fr) auto}
  .kd-zg-rolle{grid-column:1}
}

/* ---------- Im Kundenkonto: das Band über allem ---------- */
/* Grund einen Ton unter `--dunkel`, Unterkante 2 px `--akzent`. Es
   zählt NICHT als bernsteinfarbene Fläche im Sinne von R3 — es ist
   eine Zustandsmarke, keine Handlung (Anweisung 4b.3). */
.kk-band{position:sticky;top:0;z-index:60;background:var(--kk-grund);color:var(--auf-kk);
  border-bottom:2px solid var(--akzent);
  display:flex;align-items:center;gap:var(--a4);flex-wrap:wrap;
  padding:var(--a3) var(--a5)}
.kk-band .kk-marke{display:flex;align-items:center;gap:var(--a2);flex:none;
  font-family:var(--mono);font-size:var(--s2);letter-spacing:.14em;
  text-transform:uppercase;color:var(--akzent)}
.kk-band.kk-frei .kk-marke{color:var(--rot)}
.kk-band .kk-satz{flex:1 1 240px;min-width:0;font-size:var(--s3)}
.kk-band .kk-tun{display:flex;align-items:center;gap:var(--a4);flex:none}
.kk-band button.sek{border-color:rgba(253,251,247,.45);color:var(--auf-kk)}
.kk-band button.sek:hover{background:rgba(253,251,247,.1)}
.kk-band .text-knopf{color:var(--auf-kk);text-decoration:underline}
/* Der Rest der Seite rückt nach unten — dieselbe Rechnung wie beim
   Notfallbanner, nur mit der Höhe dieses Bandes. Ohne sie ragt die
   Seitenleiste (sticky, 100vh) unten aus dem Fenster. */
body.betreut .seite{top:var(--kk-hoehe);height:calc(100vh - var(--kk-hoehe))}
body.betreut .kopf{top:var(--kk-hoehe)}
:root{--kk-hoehe:56px}

/* ---------- Gesperrte Handlungen (Anweisung 4b.4) ----------
   Knöpfe bleiben SICHTBAR, aber als gestrichelter Umriss in
   `--gedaempft` mit einem Schloss davor — nicht ausgegraut und
   nicht versteckt. Der Betreiber soll sehen, was der Kunde hätte,
   ohne es auszulösen. `disabled` wäre der falsche Weg: Ein
   ausgegrauter Knopf sagt „geht hier nicht", gemeint ist „geht,
   sobald du freischaltest". */
button.gesperrt,.gesperrt>button{background:transparent;
  border:1px dashed var(--linie-stark);color:var(--gedaempft);
  font-weight:400}
button.gesperrt:hover{background:transparent;filter:none;color:var(--gedaempft)}
button.gesperrt .kk-schloss{width:14px;height:14px;flex:none;margin-right:var(--a2);
  vertical-align:-2px}
.nav-knopf.gesperrt{border:1px dashed var(--seite-linie);opacity:.7}

/* ============================================================
   Live-Steuerung: Tasten und Pulte (Fassung 150, S17/S18)
   ------------------------------------------------------------
   Die Liste benutzt dieselbe Bauart wie die Playlist- und die
   Kundenliste (`.pl-kopfzeile`, `.pl-karte`, `.pl-zeile`). Hier
   steht nur, was darüber hinaus nötig ist.
   ============================================================ */

/* Das Band über der Liste: 3 px grüner Strich links, wie das rote
   auf der Kundenliste. Läuft nichts, entfällt es ganz. */
.streifen-laeuft{border-left:3px solid var(--gruen)}

/* Gefüllt heißt „läuft", Kontur heißt „bereit". Ein Abzeichen
   BEREIT in jeder Zeile wäre Lärm und kostete die Namensbreite. */
.ts-punkt{width:9px;height:9px;border-radius:50%;flex:0 0 auto;
  border:1.5px solid var(--linie-stark);background:transparent}
.ts-punkt.an{background:var(--gruen);border-color:var(--gruen)}
.pl-zeile.ts-zeile.laeuft{background:var(--gruenBg)}
.pl-zeile.ts-zeile.laeuft:hover{background:var(--gruenBg)}
.ts-ziel{font-size:var(--s2);color:var(--gedaempft);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ts-plan{font-size:var(--s2);color:var(--gedaempft)}
.ts-dauer{font-size:var(--s2);color:var(--gedaempft)}

/* ---------- Die Tastenseite ---------- */
/* Links die Fragen auf höchstens 720 px, rechts die Vorschau in
   300 px, die oben klebt. Auf schmalen Fenstern rutscht sie unter
   den Inhalt — sie ist eine Bestätigung, keine Bedienung. */
.ts-seite{display:grid;gap:var(--a6);align-items:start;
  grid-template-columns:minmax(0,720px) 300px;justify-content:start}
@media (max-width:1120px){.ts-seite{grid-template-columns:minmax(0,1fr)}}
.ts-links{min-width:0}
.ts-rechts{position:sticky;top:var(--a5);min-width:0}
.ts-frage{padding-bottom:var(--a6);margin-bottom:var(--a6);
  border-bottom:1px solid var(--linie)}
.ts-frage:last-child{border-bottom:0;margin-bottom:0}
.ts-frage-kopf{display:flex;align-items:baseline;gap:var(--a3);
  font-size:var(--s5);font-weight:600;margin:0 0 var(--a4)}
/* Die Ziffer ist eine Nummerierung, keine Überschrift: mono,
   kleiner, in --akzent-text. */
.ts-nr{font-family:var(--mono);font-size:var(--s2);color:var(--akzent-text);
  flex:none}
.ts-namensfeld{width:360px;max-width:100%}

/* Auswahlzeilen — Bildschirme und Dauer benutzen dieselbe Form. */
.ts-wahlliste{display:flex;flex-direction:column;gap:var(--a2)}
.ts-wahl{display:flex;align-items:center;gap:var(--a3);min-height:48px;
  padding:var(--a3) var(--a4);border:1px solid var(--linie);
  border-radius:var(--r2);background:var(--flaeche);cursor:pointer}
.ts-wahl.an{background:var(--flaeche-2);border-color:var(--linie-stark)}
.ts-wahl.an .ts-wahl-name{font-weight:600}
.ts-wahl-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}
.ts-wahl-format{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft);flex:none}
.ts-dauerzeile{margin-bottom:var(--a2)}
.ts-zahlfeld{width:64px;flex:none}
.ts-einheit{width:auto;flex:none}

/* Was soll laufen: eine Zeile je Bildschirm, nach Format gruppiert. */
.ts-ziele-kopf{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--a4);flex-wrap:wrap;margin-bottom:var(--a3);
  font-size:var(--s2);color:var(--gedaempft)}
.ts-ziele{padding:0;overflow:hidden}
.ts-gruppenkopf{display:flex;align-items:center;justify-content:space-between;
  gap:var(--a4);padding:var(--a3) var(--a4);background:var(--flaeche-2);
  border-bottom:1px solid var(--linie)}
.ts-gruppenname{font-family:var(--mono);font-size:var(--s1);letter-spacing:.1em;
  color:var(--beschriftung)}
.ts-gruppen-rechts{display:flex;align-items:center;gap:var(--a3)}
.ts-gruppe-stand{font-size:var(--s2);color:var(--gedaempft)}
.ts-zielzeile{display:grid;grid-template-columns:210px minmax(0,1fr);
  gap:var(--a3);align-items:center;padding:var(--a2) var(--a3);
  border-top:1px solid var(--linie)}
.ts-gruppenkopf + .ts-zielzeile{border-top:0}
.ts-zielgeraet{display:flex;align-items:center;gap:var(--a3);min-width:0}
/* Ein leeres Rechteck im Seitenverhältnis des Bildschirms. */
.ts-mini{flex:none;border:1px solid var(--linie-stark);border-radius:2px;
  background:var(--flaeche-2)}
.ts-mini.quer{width:26px;height:15px}
.ts-mini.hoch{width:15px;height:26px}
.ts-zielname{font-size:var(--s3);font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.ts-zielformat{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft)}
.ts-zielwahl{min-width:0;display:flex;flex-direction:column;gap:var(--a2)}
.ts-playlistwahl{width:100%;min-height:40px}
/* Eine leere Zeile blockiert das Speichern — und sagt es dort, wo
   sie leer ist, statt in einer Meldung am Rand. */
.ts-fehlt{color:var(--rot);font-size:var(--s3);font-weight:600}

/* ---------- Die Vorschau „So liest es der Kunde" ---------- */
.ts-vorschau{padding:var(--a4);margin-top:var(--a2)}
.ts-vorschau-taste{border:1px solid var(--linie-stark);border-radius:var(--r2);
  background:var(--flaeche-2);padding:var(--a5) var(--a4);text-align:center;
  font-size:17px;font-weight:600}
.ts-vorschau-satz{margin:var(--a4) 0 0;font-size:var(--s3);line-height:1.55}
.ts-punktreihe{margin-top:var(--a4);display:flex;flex-direction:column;gap:var(--a2)}
.ts-punktzeile{display:flex;align-items:baseline;gap:var(--a2);font-size:var(--s2)}
.ts-punkt-von{color:var(--gedaempft);flex:0 1 auto;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ts-punkt-linie{flex:1 1 auto;border-bottom:1px dotted var(--linie-stark);
  min-width:12px;transform:translateY(-3px)}
.ts-punkt-nach{font-weight:600;flex:0 1 auto;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- Die Pultliste ---------- */
.ts-pulte{margin-top:var(--a7);padding-top:var(--a5);border-top:1px solid var(--linie)}
.ts-pulte-kopf{display:flex;align-items:flex-start;justify-content:space-between;
  gap:var(--a4);margin-bottom:var(--a4)}
.ts-h2{margin:0;font-size:var(--s5)}
.ts-pultraster{display:grid;gap:var(--a4);
  grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.ts-pult{padding:var(--a4);display:flex;flex-direction:column;gap:var(--a3)}
.ts-pult-kopf{display:flex;align-items:baseline;justify-content:space-between;gap:var(--a3)}
.ts-pult-name{font-size:var(--s4);min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.ts-pult-art{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft);flex:none}
.ts-pult-zeile{display:flex;align-items:center;gap:var(--a3)}
.ts-pult-tasten{font-size:var(--s2);color:var(--gedaempft);min-width:0;
  overflow:hidden;text-overflow:ellipsis}
/* Die Miniatur: drei Balken untereinander (hochkant) oder vier in
   zwei Spalten (quer), in der Farbe des gewählten Erscheinungsbilds.
   Damit sieht man den Unterschied, ohne zu lesen. */
.ts-pult-mini{flex:none;width:38px;display:grid;gap:2px;padding:var(--a1);
  border-radius:3px;background:var(--dunkel)}
.ts-pult-mini.hell{background:var(--flaeche-2);border:1px solid var(--linie)}
.ts-pult-mini i{display:block;height:6px;border-radius:1px;
  background:var(--seite-gedaempft)}
.ts-pult-mini.hell i{background:var(--linie-stark)}
.ts-pult-mini.quer{grid-template-columns:1fr 1fr}
.ts-pult-fuss{display:flex;gap:var(--a4);flex-wrap:wrap;margin-top:auto;
  padding-top:var(--a2)}
.ts-pultwahl{display:flex;flex-direction:column;gap:var(--a2);
  max-height:260px;overflow-y:auto}

/* ============================================================
   Handybreite: 390 px (Fassung 151, S19)
   ------------------------------------------------------------
   Es ist KEINE eigene Anwendung und kein eigenes Design. Dieselben
   Tokens, dieselbe Schriftskala, dieselben Farben, dieselben
   Zustandswörter, dieselben Texte. Fünf Dinge ändern sich:

     A  Spaltenlisten werden Karten.
     B  Bereichsleisten werden eine scrollende Reiterzeile.
     C  Gitter werden ein- oder zweispaltig.
     D  Vorschauen wandern unter oder über den Inhalt.
     E  Der eine Hauptknopf wandert in eine feste Leiste unten.

   Alles andere bleibt. Wenn etwas auf 390 px nicht passt, ist die
   FORM falsch, nicht der Inhalt.

   Die Muster stehen hier als Klassen und nicht je Ansicht: Solange
   jede Ansicht ihre eigene Kopfzeile mitbringt, holt jede Korrektur
   die nächste Abweichung ein (S19, 7).
   ============================================================ */
@media (max-width:860px){
  /* ---------- 4 · Die Kopfzeile ---------- */
  .handy-kopf{gap:var(--a3);padding:var(--a3) var(--a4);
    padding-top:calc(var(--a3) + env(safe-area-inset-top));
    background:var(--flaeche);color:var(--tinte);
    border-bottom:1px solid var(--linie)}
  .handy-sym{width:44px;height:44px;min-width:44px;min-height:44px;flex:none;
    background:transparent;border:0;color:var(--tinte)}
  .handy-sym:hover{background:var(--flaeche-2);filter:none}
  .handy-wo{min-width:0;flex:1 1 auto}
  .handy-kicker{font-family:var(--mono);font-size:11px;letter-spacing:.14em;
    text-transform:uppercase;color:var(--beschriftung);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .handy-kicker:empty{display:none}
  /* 17 px, nicht 26: Die große Überschrift von 1440 px frisst auf
     dem Telefon eine Bildschirmhöhe. */
  .handy-titel{display:flex;align-items:center;gap:var(--a2);
    font-size:17px;font-weight:600;min-width:0}
  .handy-titel .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

  /* Der Seitenkopf trägt auf 390 px nur noch seine Handlungen: Name
     und Kicker stehen oben in der Kopfzeile, und zweimal dasselbe
     ist einmal zu viel. */
  #ansicht-marke,#ansicht-titel,#ansicht-unter,#ansicht-zurueck{display:none}
  /* Fassung 449 (L-663, ADR-106 (11), Cedric: „sollte natürlich auch dort
     nur einmal stehen, warum doppelt?“): Der Name der Playlist steht oben
     in der Kopfzeile (`#handy-name`, folgt dem Tippen seit 421). Die
     Überschrift im Kopf des Editors bleibt für Vorlesegeräte da — wie
     `.nur-vorlesen`, nicht `display:none` —, ist aber nicht mehr zu sehen. */
  #b-titel{position:absolute;width:1px;height:1px;overflow:hidden;
    clip-path:inset(50%);white-space:nowrap}
  .seiten-kopf{padding:var(--a3) var(--a4);gap:var(--a3);position:static}
  /* Hat eine Seite oben nichts zu tun, steht dort auch keine leere
     Zeile. Die Klasse setzt `seiteKopf()`; `:has()` wäre der
     kürzere Weg, aber es ist der einzige Selektor dieses Blatts,
     den ein älteres Gerät nicht kennt. */
  .seiten-kopf.ohne-tun{display:none}
  .seiten-kopf-links{display:none}
  .seiten-tun{flex:1 1 100%;justify-content:stretch}
  /* Suchfelder gehen über die volle Breite. Sie wandern damit
     faktisch an den Anfang des Inhalts (S19, 4). */
  .seiten-tun input[type="search"]{width:100%;max-width:100%;min-width:0}
  /* min-width:0 seit dem Nachtrag zu Fassung 464: `.listen-leiste input[type=search]`
     verlangt 220 px; bei 360 px (Playlists) lief das Feld damit unter
     „Playlist anlegen“. */

  /* ---------- 3 · Die Schublade ---------- */
  /* Volle Breite und volle Höhe. Ein halbbreites Blatt mit einem
     Rest der Seite daneben ist auf 390 px zu eng für beides. */
  .seite{width:100%;max-width:none}
  .haupt-nav{padding:0 var(--a4)}
  .nav-knopf{min-height:52px;font-size:17px;border-radius:var(--r2)}
  .nav-knopf.an{background:var(--kk-grund);font-weight:600}
  .seite-fuss{padding:var(--a4) var(--a4) calc(var(--a4) + env(safe-area-inset-bottom))}
  .seite-fuss .nav-knopf{min-height:52px}

  /* ---------- Muster E · Der Hauptknopf unten ---------- */
  .handy-tun{flex:1;display:flex;gap:var(--a2)}
  .handy-tun button{flex:1;min-height:48px;width:auto}
  /* Steht die Leiste für die Handlung EINER SEITE da, gehören der
     Vorschauknopf und der Speicher-Block des Playlist-Editors nicht
     hinein: Ein Vorschauknopf auf der Kundenliste öffnet ein Blatt
     über eine Playlist, die gar nicht offen ist. */
  .handy-leiste.nur-seite .blatt-knopf,
  .handy-leiste.nur-seite #handy-aktionen{display:none}
  /* Ein Polster in Höhe der Leiste, damit das letzte Element des
     Inhalts nicht darunter verschwindet (Selbsttest 6). */
  body.mit-leiste .seiten-koerper{padding-bottom:calc(var(--a7) + 56px +
    env(safe-area-inset-bottom))}

  /* ---------- Muster B · Bereichsleiste wird Reiterzeile ----------
     Sie rollt seitlich und bricht NIE um: Umbrechende Reiter
     erzeugen eine zweite Zeile, die aussieht wie eine zweite Ebene. */
  .est-seite{grid-template-columns:minmax(0,1fr);gap:0}
  .est-nav{flex-direction:row;position:static;gap:var(--a4);padding:0 var(--a4);
    border-bottom:1px solid var(--linie);overflow-x:auto;
    scrollbar-width:none;flex-wrap:nowrap}
  .est-nav::-webkit-scrollbar{display:none}
  .est-nav-knopf{flex:none;white-space:nowrap;padding:var(--a2) 2px;
    background:transparent;border-radius:0;min-height:44px}
  .est-nav-knopf.an{background:transparent;font-weight:600;
    box-shadow:inset 0 -2px 0 var(--akzent);margin-bottom:-1px}
  .est-inhalt{padding:var(--a5) var(--a4)}

  /* ---------- Die Reiterzeile und ihr Sortierknopf ----------
     `.pl-reiterzeile` stellt beide in EINE Zeile und drückt sie mit
     `space-between` auseinander. Auf 390 px reicht die Breite für
     keines von beidem: Die Reiter rollen unter dem Sortierknopf
     durch, und „Nicht zugewiesen" lag unter „Sortiert nach
     Änderung" (gemeldet am 29.08.2026,
     `ops/referenz/lumafy-handy-playlists-reiter-ueberlappt-2026-08-29.png`).

     Zwei Zeilen statt einer: oben die Reiter, die seitlich rollen
     (Muster B), darunter der Sortierknopf. Er ist ein Wort und
     keine Handlung — er darf die zweite Zeile haben. */
  .pl-reiterzeile{flex-direction:column;align-items:stretch;gap:0}
  .pl-reiterzeile .reiter{margin-bottom:0}
  .pl-sortknopf{align-self:flex-start;margin-bottom:var(--a4);padding-top:var(--a2)}

  /* ---------- Muster A · Spaltenliste wird Karte ----------
     Die Spaltenköpfe fallen weg; aus einer Zeile wird eine Karte
     mit drei bis vier Zeilen. Der Handlungsverweis („Öffnen",
     „Bearbeiten") fällt mit weg — die ganze Karte ist der Anker,
     und ein Verweis in einer Karte, die man antippt, ist doppelt. */
  .pl-kopfzeile{display:none}
  .pl-karte{background:transparent;border:0;box-shadow:none;overflow:visible}
  .pl-zeile{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--a2);
    grid-template-columns:none !important;
    border:1px solid var(--linie);border-radius:var(--r2);
    background:var(--flaeche);box-shadow:var(--schatten-1);
    padding:var(--a4);margin-bottom:var(--a3)}
  .pl-zeile:first-child{border-top:1px solid var(--linie)}
  .pl-zeile .pl-sp{flex:1 1 100%}
  /* Die Ordnung der Karte steht an der Zeile selbst und nicht an
     ihrer Stelle im Raster: Name links, die wichtigste Zahl oder
     das Abzeichen rechts daneben, darunter die zweitwichtigste
     Angabe, darunter die früheren Spalten als Mono-Reihe. Die
     Klassen vergeben die Listen selbst — eine Liste ohne sie fällt
     auf „jede Spalte eine Zeile" zurück, was auch geht. */
  .pl-zeile .li-name{order:1;flex:1 1 auto;min-width:0}
  .pl-zeile .li-wichtig{order:2;flex:none;margin-left:auto}
  .pl-zeile .li-zweit{order:3;flex:1 1 100%}
  .pl-zeile .li-mono{order:4;flex:0 0 auto}
  /* Der Handlungsverweis fällt weg: Die ganze Karte ist der Anker,
     und ein „Öffnen" in einer Karte, die man antippt, ist doppelt. */
  .pl-zeile .li-tun{display:none}
  .kd-nachbarn{flex-direction:column;gap:var(--a3)}

  /* ---------- Muster C · Gitter ---------- */
  .kd-kacheln{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ts-pultraster{grid-template-columns:minmax(0,1fr)}

  /* ---------- Muster D · Die Vorschau wandert ----------
     Auf der Tastenseite steht der Satz „So liest es der Kunde"
     UNTEN, nach der vierten Frage: Er ist eine Bestätigung, also
     kommt er nach der Eingabe. `position:sticky` frisst auf 390 px
     ein Drittel der Höhe und wird deshalb nicht verwendet. */
  .ts-seite{grid-template-columns:minmax(0,1fr);gap:var(--a5)}
  .ts-rechts{position:static}
  .ts-namensfeld{width:100%}
  .ts-zielzeile{grid-template-columns:minmax(0,1fr);gap:var(--a2)}
  .ts-frage-kopf{font-size:var(--s4)}
  .ts-pulte-kopf{flex-direction:column;gap:var(--a2)}

  /* ---------- Tippflächen an den Pulten (Prüflauf 12.09.2026, B-13)
     `.text-knopf` ist ein Textverweis mit 2 px Polster — auf dem
     Schreibtisch richtig, auf dem Telefon 21 px hoch und „Öffnen"
     ganze 40 px breit. Ausgerechnet hier: Ein Pult ist laut eigenem
     Text „eine Seite mit Tasten, zum Öffnen am Telefon oder
     Tablet". Empfohlen sind 44 px, und genau die stehen hier — für
     die vier Verweise an den Pulten, nicht für jeden Textverweis
     der Anwendung. */
  .ts-pulte-kopf .text-knopf,
  .ts-pult-fuss .text-knopf{min-height:44px;display:inline-flex;
    align-items:center;padding:var(--a2) var(--a3);margin:0 calc(-1 * var(--a3))}
  .ts-pult-fuss{gap:var(--a2);row-gap:0}

  /* ---------- Die Kundenseite ---------- */
  .kd-zg-zeile{grid-template-columns:minmax(0,1fr) auto}

  /* ---------- Die Zugangstabelle der Einstellungen ----------
     Auf 390 px standen hier drei Spalten nebeneinander: Person,
     Rollenwahl, zwei Knöpfe. Für die Rolle blieben rund vierzig
     Pixel — im Auswahlfeld stand „Ac" und „Re", und die
     Rollenerklärung daneben brach auf ein Wort je Zeile um
     (gemeldet am 29.08.2026,
     `ops/referenz/lumafy-handy-zugaenge-rolle-unlesbar-2026-08-29.png`).

     Eine Tabelle ist auf 390 px die falsche Form (S19, 5: „Keine
     Tabellen"). Die Zeile wird deshalb zur Karte: Jede Zelle nimmt
     die volle Breite, das Auswahlfeld auch. Dieselben Angaben,
     dieselbe Reihenfolge — nur untereinander. */
  .tabelle,.tabelle tbody,.tabelle tr,.tabelle td{display:block;width:100%}
  .tabelle tr{border:1px solid var(--linie);border-radius:var(--r2);
    background:var(--flaeche);padding:var(--a3);margin-bottom:var(--a3)}
  .tabelle td{border-bottom:0;padding:var(--a2) 0}
  .tabelle td.rechts{text-align:left;white-space:normal}
  .tabelle select,.tabelle input{width:100%;max-width:100%}
  /* Die Knöpfe der Zeile nebeneinander, aber mit Platz für ihre
     Beschriftung — `Neues Passwort` ist zwei Wörter lang. */
  .tabelle td.rechts button{margin:var(--a1) var(--a2) var(--a1) 0}

  /* ---------- Muster B · Der Vorlagenkatalog ----------
     Die Branchenspalte links wird zur rollenden Reiterzeile, das
     Suchfeld geht über die volle Breite und steht als erstes
     Element im Inhalt (S19, 4). Das Gitter bleibt zweispaltig:
     Ein Vorlagenblatt trägt zwei Textzeilen und verträgt die halbe
     Breite — daran wird nicht gedreht (S19, Muster C). */
  .vk{grid-template-columns:minmax(0,1fr);gap:var(--a4);padding:0}
  .vk-spalte{position:static;flex-direction:row;align-items:center;gap:var(--a4);
    padding:0 var(--a4);border-bottom:1px solid var(--linie);
    overflow-x:auto;scrollbar-width:none;flex-wrap:nowrap}
  .vk-spalte::-webkit-scrollbar{display:none}
  .vk-spalte .mono-kopf{display:none}
  .vk-branchen{flex-direction:row;gap:var(--a4);flex-wrap:nowrap}
  .vk-branche{flex:none;white-space:nowrap;padding:var(--a2) 2px;
    background:transparent;border-radius:0;min-height:44px}
  .vk-branche.an{background:transparent;font-weight:600;
    box-shadow:inset 0 -2px 0 var(--akzent);margin-bottom:-1px}
  .vk-branche-zahl{display:none}
  .vk-format{flex:none}
  .vk-haupt{padding:0 var(--a4) var(--a5)}
  .vk-gitter{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kat-suchzeile{width:100%}
  .kat-suchzeile .suche{min-width:0;max-width:none;width:100%}

  /* ---------- Muster D · Die Vorlagenseite ----------
     Die Vorschau steht OBEN, direkt unter der Kopfzeile: Sie ist
     der Grund, aus dem die Seite besucht wird. Darunter die
     Seitenminiaturen, darunter der Text. */
  /* Die Höhe der Bühne rechnet `katBuehneStellen()` aus der
     Fläche; eine feste Höhe im Blatt würde dagegen arbeiten. Hier
     steht nur der Grund darunter, wie im Sollbild 38. */
  .vs-links{background:var(--flaeche-2);padding:var(--a4)}

  /* ---------- Das Band „Nur ansehen" ----------
     Es bleibt auch bei offener Schublade sichtbar und wird
     zweizeilig; der Knopf rutscht in die zweite Zeile und
     verschwindet nicht (S19, 3). */
  .kk-band{padding:var(--a3) var(--a4);gap:var(--a2);z-index:80}
  .kk-band .kk-satz{flex:1 1 100%}
  .kk-band .kk-tun{flex:1 1 100%;justify-content:flex-start}
}

/* 360 px ist das kleinste Gerät, das wir bedienen. Was hier noch
   umbricht, bricht auf jedem Telefon um. */
@media (max-width:400px){
  .kd-kacheln{grid-template-columns:minmax(0,1fr)}
  .ts-wahl{padding:var(--a3)}
}

/* ============================================================
   Zu prüfen — das Vier-Augen-Prinzip (Fassung 156, L-225)
   ------------------------------------------------------------
   Eine Karte je Vorschlag, und in dieser Reihenfolge: WAS
   (Bildschirm und Seite), WER und WANN, dann der Grund, dann die
   Handlungen. Wer freigibt, liest die erste Zeile und entscheidet
   an der letzten; alles dazwischen ist Beleg.

   Der Vergleich darunter ist bewusst kein farbiges Diff: Drei
   Spalten — Feld, Bisher, Vorgeschlagen — sind auf einem Blick
   zu lesen und brauchen keine Legende. Rot und Grün wären hier
   zudem eine Farbaussage ohne Textentsprechung (WCAG 1.4.1).
   ============================================================ */
.pr-zeile{padding:var(--a5);margin-bottom:var(--a4);
  display:flex;flex-direction:column;gap:var(--a2);align-items:flex-start}
.pr-kopf{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a3)}
.pr-titel{font-size:var(--s5);font-weight:600;color:var(--tinte)}
.pr-meta{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft)}
.pr-notiz{color:var(--gedaempft);line-height:1.6}
.pr-tun{margin-top:var(--a2);gap:var(--a2);flex-wrap:wrap}

/* Der Vergleich. Die Spaltenbreiten stehen an BEIDEN Stellen gleich
   — Kopfzeile und Raster —, sonst fluchtet die Überschrift neben
   ihrer Spalte. Derselbe Fehler wie bei den Kundenzeilen (S16 3.3). */
.pr-diff-kopf,.pr-diff{display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) minmax(0,1.6fr);
  gap:var(--a2) var(--a4)}
.pr-diff-kopf{font-family:var(--mono);font-size:var(--s2);
  letter-spacing:.1em;text-transform:uppercase;color:var(--beschriftung);
  padding-bottom:var(--a2);border-bottom:1px solid var(--linie);margin-bottom:var(--a3)}
.pr-diff-feld{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft);
  align-self:center;word-break:break-word}
.pr-diff-alt{color:var(--gedaempft);text-decoration:line-through;
  text-decoration-thickness:1px;word-break:break-word}
.pr-diff-neu{color:var(--tinte);font-weight:600;word-break:break-word}

/* Auf dem Telefon untereinander: Drei Spalten zu je 110 px sind
   kein Vergleich mehr, sondern drei Wortsalate nebeneinander. */
@media (max-width:700px){
  .pr-diff-kopf{display:none}
  .pr-diff{grid-template-columns:minmax(0,1fr);gap:var(--a1)}
  .pr-diff-feld{margin-top:var(--a3)}
}

/* ============================================================
   Vorführkonto — der Dialog, den ein Interessent als Erstes sieht
   (Fassung 167)
   ------------------------------------------------------------
   Bis Fassung 166 war das ein weißer Kasten mit Überschrift und
   sechs untereinanderstehenden Feldern. Cedric am 01.09.2026 dazu:
   „gefällt mir aktuell noch nicht". Der Befund dahinter ist nicht
   Geschmack, sondern Reihenfolge: Der einzige Dialog, den jemand
   sieht, BEVOR er Kunde ist, trug als einziger nichts von der Marke.

   Drei Dinge, mehr nicht:
   * ein dunkles Kopfband mit Zeichen und Wortmarke — dieselbe
     Bauart wie auf der Anmeldeseite, nicht eine zweite Erfindung;
   * die Felder als Raster aus Paaren statt als Liste;
   * der Hinweis in Bernstein statt in Grau, direkt über dem Knopf,
     weil er die Sorge beantwortet, die den Klick sonst verhindert
     („kostet mich das etwas?").
   ============================================================ */
.dialog.vorfuehr{max-width:680px}
.dialog.vorfuehr .dialog-kopf{background:var(--kk-grund);color:var(--auf-kk);
  border-bottom:0;font-size:var(--s5)}
.dialog.vorfuehr .dialog-kopf button{color:var(--auf-kk)}
.dialog.vorfuehr .dialog-kopf button:hover{background:rgba(255,255,255,.12);filter:none}
.vf-kopf{background:var(--kk-grund);color:var(--auf-kk);
  margin:calc(var(--a5) * -1) calc(var(--a5) * -1) var(--a5);
  padding:0 var(--a5) var(--a5)}
.vf-marke{display:flex;align-items:center;gap:var(--a2)}
.vf-wort{font-size:var(--s5);font-weight:600;letter-spacing:-.01em}
/* Der Satz trägt Text, also nicht --gedaempft-weich: auf dem dunklen
   Band braucht er einen Wert, der auch bei 13 px noch liest. */
.vf-lead{margin:var(--a3) 0 0;font-size:var(--s4);line-height:1.55;
  color:rgba(253,251,247,.82);max-width:46ch}
.vf-gitter{display:grid;grid-template-columns:1fr 1fr;gap:0 var(--a4)}
.vf-gitter .feld{max-width:none}
.vf-merke{background:var(--akzent-weich);border-left:4px solid var(--akzent);
  color:var(--akzent-text)}
.vf-reihe button{width:100%;justify-content:center;padding:var(--a3) var(--a4);
  font-size:var(--s4)}
/* Unter 620 px ist ein zweispaltiges Formular kein Formular mehr,
   sondern zwei halbe. Dann untereinander. */
@media (max-width:620px){
  .vf-gitter{grid-template-columns:minmax(0,1fr)}
}

/* ============================================================
   Die Bibliothek — Ansicht „Inhalte" (Fassung 184, L-300)
   ------------------------------------------------------------
   Kacheln wie im Katalog (`.vk-blatt`, `.vk-rahmen`), damit eine
   Folie und eine Vorlage gleich aussehen — die Folie IST eine
   gefüllte Vorlage. Neu sind nur: das Menü unter der Kachel, der
   Hinweis „nur 9:16", die eingebettete Bibliothek im Playlist-
   Editor (`.pl-bib`) und der Folien-Modus des Editors.
   ============================================================ */
.bib-wirt{margin-top:var(--a4)}
.bib-reiter{padding-left:0;padding-right:0}
/* Ordner in der Bibliothek (Fassung 217): dieselbe Leiste wie bei
   Playlists und Mediathek, nur ohne den Strich nach unten — darunter
   folgt nicht eine Tabelle, sondern das Gitter der Folien. */
.bib-ord-leiste{border-bottom:0;padding-left:0;padding-right:0}
.bib-leiste{margin:var(--a4) 0;display:flex;align-items:center;gap:var(--a4);flex-wrap:wrap}
.bib-leiste .suche{max-width:320px}
.bib-gitter{margin-top:var(--a4)}
.bib-kachel{position:relative}
.bib-kachel:focus-visible{outline:2px solid var(--fokus);outline-offset:2px;border-radius:var(--r1)}
.bib-hinweis{font-size:var(--s1);color:var(--akzent-text);background:var(--akzent-weich);
  border-radius:var(--r-voll);padding:0 var(--a2);align-self:flex-start}
.bib-passt-nicht .vk-rahmen{opacity:.55}
/* Schon in dieser Playlist (Fassung 228, L-359).

   Bis 227 stand hier eine ruhige Marke: --gedaempft auf --flaeche-3,
   unter den Maßen, und die Kachel war zusätzlich auf 72 %
   abgedunkelt. Der Gedanke war, dass man beim Überfliegen sieht, was
   NEU wäre. In der Praxis sah man die Auskunft gar nicht (Befund vom
   18.09.2026: nur klein grau unten) — und sie ist die wichtigere von
   beiden, denn wer sie übersieht, hängt die Folie ein zweites Mal
   ein.

   Deshalb umgedreht: grün mit Haken, oben links AUF dem
   Vorschaubild, und der Rahmen der Kachel bekommt denselben Grünton.
   Keine Abdunklung mehr. Die Kachel trägt bereits
   position:relative (.bib-kachel), die Marke hängt daran. */
.bib-hinweis-reihe{position:absolute;left:var(--a2);top:var(--a2);z-index:2;
  display:inline-flex;align-items:center;gap:4px;font-weight:600;
  color:var(--gruen);background:var(--gruenBg);border:1px solid var(--gruen);
  padding:1px var(--a2) 1px var(--a1);border-radius:var(--r-voll);align-self:auto}
.bib-hinweis-reihe svg{flex:none}
.bib-in-reihe .vk-rahmen{opacity:1;border-color:var(--gruen);
  box-shadow:inset 0 0 0 1px var(--gruen)}
.bib-liste{display:flex;flex-direction:column;gap:var(--a1);margin:var(--a3) 0}
.zeile-knopf{display:block;width:100%;text-align:left;background:var(--flaeche-2);
  border:1px solid var(--linie);border-radius:var(--r1);padding:var(--a2) var(--a3);
  color:var(--tinte);font-size:var(--s3)}
.zeile-knopf:hover{border-color:var(--linie-stark);filter:none}
.bib-merke{margin-bottom:var(--a4)}
.bib-medium-bild{background:var(--flaeche-4)}
.bib-medium-bild img{width:100%;height:100%;object-fit:cover;display:block}
.bib-video-zeichen{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft);
  border:1px solid var(--linie-stark);border-radius:var(--r-voll);padding:0 var(--a2)}
.bib-neu-rahmen{color:var(--akzent-text);background:var(--akzent-weich);
  border:2px dashed var(--akzent)}
.bib-neu:focus-visible .bib-neu-rahmen{border-style:solid;border-color:var(--fokus)}
.bib-neu:hover .bib-neu-rahmen{
  border-style:solid;border-color:var(--akzent)}
.bib-neu .vk-name{color:var(--akzent-text)}
.bib-neu-unter{font-family:inherit}
.bib-kachel.zieht{opacity:.5}
.bib-kachel[draggable="true"]{cursor:grab}
.bib-kachel[draggable="true"]:active{cursor:grabbing}

/* Die Bibliothek unter der Reihe im Playlist-Editor */
.pl-bib{margin-top:var(--a5);border-top:1px solid var(--linie);padding-top:var(--a4)}
.pl-bib-kopf{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.pl-bib-titel{font-size:var(--s3);font-weight:600}
.pl-bib-kopf .suche{max-width:260px;flex:1 1 160px}
.pl-bib-reiter{padding-left:0;padding-right:0}
.pl-bib-gitter{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--a4) var(--a3)}

/* Folien-Modus des Editors: keine Seitenleiste, kein Adresse & QR */
body.folie-modus #seitenleiste{display:none}
body.folie-modus #btn-url{display:none}

/* ============================================================
   Die Reihe im Playlist-Editor (Fassung 184)
   ------------------------------------------------------------
   Waagerecht: eine Kachel je Folie, mit Nummer, Bild, Name,
   Dauer und dem grünen Punkt für „läuft gerade". Darunter die
   Bibliothek (`.pl-bib`). Auf 760 px und schmaler entfällt das
   Ziehen; ‹ › an der Kachel und „+ Hinzufügen" übernehmen.
   ============================================================ */
.reihe-bereich{padding:var(--a4) var(--a5) 0;border-bottom:1px solid var(--linie);
  background:var(--flaeche);margin-bottom:var(--a4)}
.reihe-kopf{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;margin-bottom:var(--a3)}
.reihe-titel{font-size:var(--s3);font-weight:600}
.reihe-liste{display:flex;gap:var(--a3);overflow-x:auto;padding:var(--a2) var(--a1) var(--a4);
  min-height:96px;scroll-snap-type:x proximity;align-items:flex-start}
.reihe-liste.ueber{outline:2px dashed var(--akzent);outline-offset:2px;border-radius:var(--r2)}
.reihe-kachel{position:relative;flex:0 0 168px;display:flex;flex-direction:column;gap:var(--a1);
  padding:var(--a2);border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche-2);
  cursor:pointer;scroll-snap-align:start;min-width:0}
.reihe-kachel:hover{border-color:var(--linie-stark)}
.reihe-kachel.an{border-color:var(--akzent);box-shadow:0 0 0 2px var(--akzent-weich)}
.reihe-kachel:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.reihe-kachel.zieht{opacity:.5}
.reihe-kachel[draggable="true"]{cursor:grab}
.reihe-kachel.vor::before{content:"";position:absolute;left:-8px;top:var(--a2);bottom:var(--a2);
  width:3px;border-radius:2px;background:var(--akzent)}
.reihe-liste.hinten::after{content:"";flex:0 0 3px;align-self:stretch;border-radius:2px;background:var(--akzent)}
.reihe-nr{position:absolute;left:var(--a2);top:var(--a2);z-index:1;font-family:var(--mono);
  font-size:var(--s1);line-height:1;padding:2px var(--a1);border-radius:var(--r1);
  background:var(--flaeche);color:var(--gedaempft);border:1px solid var(--linie)}
.reihe-bild{aspect-ratio:16/9}
.reihe-kachel .vk-mass{display:flex;align-items:center;gap:var(--a1);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.reihe-kachel .punkt{width:7px;height:7px;border-radius:50%;background:var(--linie-stark)}
.reihe-kachel .punkt.live{background:var(--gruen)}
.reihe-tun{position:absolute;right:var(--a1);top:var(--a1);display:flex;gap:2px;z-index:1;
  opacity:0;transition:opacity var(--takt) ease}
.reihe-kachel:hover .reihe-tun,.reihe-kachel:focus-within .reihe-tun{opacity:1}
.reihe-tun .mini{background:var(--flaeche);border:1px solid var(--linie);width:24px;height:24px;
  padding:0;font-size:var(--s3);line-height:1;border-radius:var(--r1)}
.reihe-leer{flex:1 1 auto;align-self:stretch;display:flex;align-items:center;justify-content:center;
  text-align:center;padding:var(--a4);border:1px dashed var(--linie-stark);border-radius:var(--r2);
  color:var(--gedaempft);font-size:var(--s2);min-height:88px}
/* Seit Fassung 422 bis 860 px wie `REIHE_SCHMAL` und `HANDY` (bis 421: 760). */
@media (max-width:860px){
  .reihe-bereich{padding:var(--a3) var(--a4) 0}
  .reihe-kachel{flex-basis:140px}
  .reihe-tun{opacity:1}
}
/* Seit 184 zeigt die Reihe über dem Formular die Seiten; die Chips
   unter dem Formular sagten dasselbe ein zweites Mal. Der Knoten
   bleibt (Fassung 96 hat ihn dorthin gelegt), er ist nur unsichtbar. */
#seitenleiste{display:none}
/* Sondertage, Neustart, Download-Fenster im Reiter „Zeiten" (184) */
.gr-sonder-zeile input[type="text"]{flex:1 1 120px;min-width:100px;width:auto}
.gr-sonder-zeile input[type="date"]{width:auto;min-width:150px;flex:none}
.gr-sonder-zeile select{flex:0 0 auto;width:auto;min-width:0}
.gr-sonder-zeiten{display:inline-flex;align-items:center;gap:var(--a2);flex-wrap:wrap;max-width:100%}
/* Seit dem Nachtrag zu Fassung 464: „von [Zeit] bis [Zeit]“ eines Sondertags
   (oder der Feiertage) mit abweichenden Zeiten brach nicht um. Die Zeile wurde
   am Handy breiter als die Karte, und die Karte schnitt Datum, „bis“-Zeit und
   das ✕ ab. Jetzt bricht der Teil um; am Handy stehen „von“ und „bis“ je mit
   ihrer Uhrzeit untereinander, „von“ und „bis“ ohne die Mindestbreite von
   `.sz-marke` (bei 320 px reichte sonst der Platz für die Uhrzeit nicht). */
@media (max-width:860px){
  .gr-sonder-zeiten{display:grid;grid-template-columns:auto auto;justify-content:start}
  .gr-sonder-zeiten > .sz-marke{min-width:0}
}
.gr-schalter{display:flex;align-items:center;gap:var(--a2);font-weight:600}

/* Neue Folie aus einer Vorlage (Fassung 185): Vorschau links, Text rechts */
.bib-vorlage-kopf{display:flex;gap:var(--a4);align-items:flex-start;margin-bottom:var(--a4)}
.bib-vorlage-bild{flex:0 0 220px;width:220px;height:124px}
.bib-vorlage-bild.hoch{flex-basis:124px;width:124px;height:220px}
.bib-vorlage-text{flex:1 1 auto;min-width:0}
.kat-ziel{margin-bottom:var(--a4)}
@media (max-width:620px){
  .bib-vorlage-kopf{flex-direction:column}
}

/* ============================================================
   Die freie Folie: der Bühneneditor (Fassung 202, L-317)
   ------------------------------------------------------------
   Die Bühne ist dunkel, unabhängig vom Farbmodus des Editors: Sie
   zeigt das Bild des Kunden, und das braucht keinen Papierrahmen.
   Markierungen (Auswahl, Griffe, Überlauf) in festen Farben, weil
   sie auf JEDEM Bild lesbar sein müssen — Bernstein für gewählt,
   Rot für „passt nicht", mit halbdurchsichtiger Fläche, damit man
   den Kasten auch dann findet, wenn der Rand hinter Text liegt.
   ============================================================ */
.feld-layout{max-width:none}
.lay-huelle{position:relative;overflow:hidden;background:var(--dunkel);border:1px solid var(--linie-stark);
  border-radius:var(--r2);touch-action:none;user-select:none;-webkit-user-select:none;cursor:default}
.lay-huelle:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.lay-huelle.lay-pipette{cursor:crosshair}
/* Am Telefon wird nur gemessen, nicht gezeigt: die Bühne liegt
   außerhalb des Fensters, aber im Dokument — `display:none` hätte
   keine Maße. */
.lay-huelle.lay-nur-messen{position:absolute;left:-9999px;top:0;width:600px;visibility:hidden;pointer-events:none}
/* Die Bühne zeigt die Schriften der WAND (Fassung 208). Bis dahin kannte
   der Editor 'lumafy Sans' und 'lumafy Mono' nicht — ein Kasten stand auf
   der Bühne in der Ersatzschrift des Systems (unter Windows Times New
   Roman) und an der Wand in Liberation Sans. Dieselben Dateien wie in
   basis.css, dieselbe Gewichtsspanne. */
@font-face{font-family:'lumafy Sans';src:url('/player/schriften/lumafy-sans-400.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'lumafy Sans';src:url('/player/schriften/lumafy-sans-700.woff') format('woff');font-weight:500 900;font-style:normal;font-display:swap}
@font-face{font-family:'lumafy Mono';src:url('/player/schriften/lumafy-mono-400.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'lumafy Mono';src:url('/player/schriften/lumafy-mono-700.woff') format('woff');font-weight:500 900;font-style:normal;font-display:swap}
.lay-buehne{position:absolute;left:0;top:0;transform-origin:top left;background:var(--dunkel);overflow:hidden}
/* Hilfslinien beim Ziehen (Fassung 213). Sie liegen IN der Bühne, also
   im skalierten Maß — die Breite muss deshalb durch den Maßstab geteilt
   werden, sonst ist die Linie auf kleiner Bühne ein Balken. Das
   übernimmt `--lay-linie`, gesetzt beim Skalieren. */
.lay-linie{position:absolute;background:var(--akzent);pointer-events:none;z-index:3;opacity:.9}
.lay-linie-x{top:0;bottom:0;width:var(--lay-linie,2px);margin-left:calc(var(--lay-linie,2px) / -2)}
.lay-linie-y{left:0;right:0;height:var(--lay-linie,2px);margin-top:calc(var(--lay-linie,2px) / -2)}
.lay-hg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.lay-kasten{cursor:move;outline:1px dashed rgba(255,255,255,.4);outline-offset:-1px}
.lay-kasten.gewaehlt{outline:3px solid var(--buehne-wahl)}
.lay-kasten.lay-ueber{outline:3px solid var(--buehne-ueber);box-shadow:inset 0 0 0 9999px rgba(229,72,77,.22)}
.lay-griff{position:absolute;box-sizing:border-box;background:var(--buehne-wahl);border:2px solid var(--dunkel);border-radius:50%;z-index:3}
.lay-griff-nw,.lay-griff-so{cursor:nwse-resize}
.lay-griff-no,.lay-griff-sw{cursor:nesw-resize}
.lay-werkzeuge{margin-top:var(--a3)}
.lay-ueber-hinweis{min-height:1.4em}
.lay-ueber-hinweis.rot,.hinweis.rot{color:var(--rot-text)}
.lay-merkmale{margin-top:var(--a4);display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--a3) var(--a4);align-items:start;padding:var(--a4);background:var(--flaeche-2);
  border:1px solid var(--linie);border-radius:var(--r2)}
.lay-merkmale .feld{margin:0;max-width:none}
.lay-merkmale .breit{grid-column:1/-1}
.lay-merkmale textarea{min-height:4.5em}
.lay-farbe{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap}
.lay-farbe input[type=color]{width:52px;height:36px;padding:2px}
.lay-farbe input[type=range]{width:110px}
.lay-farbe input[type=checkbox]{width:auto}
.lay-ausrichtung{display:flex;gap:4px}
.lay-ausrichtung button{flex:1;padding-left:0;padding-right:0}
.lay-ausrichtung button.aktiv{background:var(--tinte);color:var(--flaeche);border-color:var(--tinte)}
.lay-handy-zeile{margin-bottom:var(--a4)}
/* Groß: dieselbe Bühne, ganzes Fenster. Der Feldknoten wandert in
   die Hülle und zurück — ein Editor, nicht zwei. */
.lay-gross-huelle{position:fixed;inset:0;z-index:70;background:var(--flaeche);overflow:auto;
  padding:var(--a4) var(--a5) var(--a6)}
.lay-gross-huelle .gross-leiste{justify-content:space-between;margin-bottom:var(--a4)}
.lay-gross-huelle .gross-leiste .titel{color:var(--tinte)}
.lay-gross-inhalt{max-width:1600px;margin:0 auto}
.lay-schriftwahl{display:flex;flex-direction:column;gap:var(--a2)}
.lay-werkzeuge button[disabled]{opacity:.45}
/* Bild oder Video im Kasten (Fassung 219). Der Dateiname darf
   umbrechen — eine Mediathekdatei heißt `k7m2-a4f2k9m3q7.jpg`, und
   das passt in keine Zeile. */
.lay-medium{flex-wrap:wrap;gap:var(--a2);align-items:center}
.lay-medium-name{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft);
  word-break:break-all;min-width:0}
.lay-kasten-medium{pointer-events:none}
/* Was im Kasten steht (Fassung 221). Fünf Knöpfe nebeneinander, von
   denen genau einer gedrückt ist. Der gedrückte trägt den Akzent als
   Rahmen statt als Fläche: Eine orange Fläche neben vier hellen
   Knöpfen sähe aus wie der Hauptknopf der Seite, und der steht oben
   rechts und heißt „Speichern". */
.lay-arten{flex-wrap:wrap;gap:var(--a1)}
button.mini.lay-art-an{background:var(--flaeche-3);color:var(--tinte);
  border:1px solid var(--akzent);box-shadow:inset 0 0 0 1px var(--akzent)}
/* Adresse prüfen: Feld, Knopf und Stand untereinander — die
   Fehlermeldung von `lib/anbindung.js` ist ein ganzer Satz und
   gehört nicht in eine Zeile neben einen Knopf gequetscht. */
.lay-adresse{display:flex;flex-direction:column;gap:var(--a2);align-items:stretch}
.lay-adresse input{width:100%}
.lay-adresse button{align-self:flex-start}
/* Platzhalter für YouTube und Webseite auf der Bühne. Er wird MIT
   der Bühne skaliert (die Bühne trägt ein `transform`), deshalb
   stehen hier bewusst große Pixelwerte: 36 px auf einer Bühne, die
   auf ein Drittel verkleinert ist, sind 12 px auf dem Schirm. */
.lay-kasten-platz{position:absolute;left:0;top:0;width:100%;height:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:8px;background:rgba(12,12,12,.82);border:2px dashed rgba(247,246,243,.5);
  box-sizing:border-box;padding:8px;overflow:hidden;text-align:center;
  font-family:var(--mono);color:#f7f6f3;line-height:1.2}
.lay-kasten-platz b{font-size:36px;letter-spacing:.04em}
.lay-kasten-platz span{font-size:24px;opacity:.75;word-break:break-all}
/* Feldtyp „farbe" (Fassung 222). Farbwähler, Hex-Feld und die zwei
   Knöpfe in einer Zeile, die auf schmalen Blättern umbricht. Das
   Hex-Feld ist so breit, wie `#rrggbb` braucht, und keinen Deut
   breiter — ein Textfeld über die halbe Spalte lädt dazu ein, dort
   etwas anderes hineinzuschreiben. */
.fa-reihe{display:flex;flex-wrap:wrap;gap:var(--a2);align-items:center}
.fa-reihe input[type=color]{width:56px;min-height:44px;padding:2px;flex:none}
.fa-hex{width:11ch;flex:none;font-family:var(--mono);text-transform:lowercase}
.fa-schnell{gap:var(--a1)}
/* Der Haken „Form des Ausschnitts" (Fassung 219) steht unter den
   Knöpfen und bekommt Luft nach oben — er gehört zum Ausschnitt
   darüber, nicht zum Hinweis darunter. */
.gr-wandform{margin-top:var(--a3)}
/* Woher die Vorbelegung stammt (Fassung 220). Der Satz steht unter
   der Lagezeile und ist der WICHTIGE von beiden — er sagt, ob die
   Zahl in den Feldern in derselben Pixelsorte gemessen ist wie das
   Testbild an der Wand. Deshalb etwas mehr Luft nach oben als ein
   gewöhnlicher Feldhinweis; gelb wird er über `.hinweis.warn`. */
.gr-herkunft{margin-top:var(--a2)}
.kat-selbst-hinweis{margin-top:var(--a3)}
/* Muster für die freie Folie (Fassung 215): Die Auswahl zeigt jedes
   Muster so, wie es auf dem Bildschirm steht — dieselbe Zeichnung wie
   auf der Bühne, nur verkleinert. Deshalb steht in `.mu-buehne` die
   volle Folie (1920 × 1080 bzw. 1080 × 1920) und wird als Ganzes
   skaliert; `.mu-rahmen` ist der Platz, den sie danach einnimmt. */
.dialog.mu-wahl{max-width:980px}
/* Die Spalte richtet sich nach der Miniatur, nicht umgekehrt: Eine
   Karte, die schmaler ist als ihr Bild, lässt das Bild über die
   Nachbarn laufen (gesehen am 15.09.2026). Quer braucht 270 px plus
   Rand, hoch 160 px. */
.mu-gitter{display:grid;gap:var(--a4);margin-top:var(--a3)}
.mu-gitter.mu-quer{grid-template-columns:repeat(auto-fill,minmax(292px,1fr))}
.mu-gitter.mu-hoch{grid-template-columns:repeat(auto-fill,minmax(182px,1fr))}
.mu-karte{display:flex;flex-direction:column;align-items:stretch;gap:var(--a2);
  background:none;border:1px solid var(--linie);border-radius:var(--r3);
  padding:var(--a2);text-align:left;color:var(--tinte);cursor:pointer;height:auto;min-height:0;
  overflow:hidden}
.mu-karte:hover{border-color:var(--akzent);background:var(--flaeche-2)}
.mu-karte:focus-visible{border-color:var(--fokus);background:var(--flaeche-2)}
.mu-karte b{font-size:var(--s2);color:var(--tinte)}
.mu-karte .leise{font-size:var(--s1);line-height:1.4;white-space:normal}
.mu-rahmen{position:relative;overflow:hidden;border-radius:var(--r2);
  background:var(--dunkel);align-self:center;flex:none}
.mu-buehne{position:absolute;left:0;top:0;transform-origin:top left;
  background:var(--dunkel);overflow:hidden}
.mu-hg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
/* Gestaltung einer Bestandsvorlage (Fassung 209) */
.gest-innen{outline:none}
.gest-feld{display:flex;flex-wrap:wrap;gap:var(--a2) var(--a3);align-items:center;padding:var(--a3) 0;border-top:1px solid var(--linie)}
.gest-feld.geaendert{border-left:3px solid var(--akzent);padding-left:var(--a2)}
.gest-kopf{flex:1 1 100%;display:flex;gap:var(--a3);align-items:baseline;flex-wrap:wrap}
.gest-lage{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.gest-pfeile{display:flex;gap:var(--a1)}
.gest-pfeile button{min-width:40px;padding-left:0;padding-right:0}
.gest-zahl,.gest-farbe{display:flex;align-items:center;gap:var(--a2)}
.gest-zahl input{width:5.5em}
.gest-schrift{flex:1 1 100%}

/* Fassung 240: Markierung im Medienwähler — die Datei liegt schon in der offenen Playlist. */
.med-wahl-karte.med-drin { outline: 2px solid var(--akzent); outline-offset: -2px; }
.med-wo { font-size: .8em; margin-top: .2em; }

/* ============================================================
   Fassung 243: Bildschirm teilen an der Gerätekarte (Reiter „Anzeige").
   Ein großer Schalter, zwei Kacheln für die Freigabe, die Vorschau der
   Plakette, die Zustandszeile mit Ampelpunkt, das Kennzeichen in der
   Liste. Farben nur aus den Variablen — Hell und Dunkel gleich.
   ============================================================ */
.gr-sp-schalter{font-size:var(--s3);gap:var(--a3);cursor:pointer}
/* Fassung 244: `input[type=checkbox]` in Zeile ~550 setzt 18 × 18 px mit
   höherer Spezifität als eine Klasse — der Schalter blieb deshalb
   18 px schmal, und der Knopf stand rechts daneben über der
   Beschriftung (Cedric, 22.09.2026). Deshalb hier mit Typ und
   Attribut, nicht nur mit der Klasse. */
input[type=checkbox].gr-sp-an{appearance:none;-webkit-appearance:none;width:48px;height:26px;border-radius:13px;
  background:var(--punkt-aus);border:1px solid var(--linie);position:relative;flex:none;
  cursor:pointer;transition:background var(--takt) ease;margin:0}
input[type=checkbox].gr-sp-an::before{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;
  border-radius:50%;background:var(--flaeche);box-shadow:0 1px 2px rgba(0,0,0,.25);
  transition:transform var(--takt) ease}
input[type=checkbox].gr-sp-an:checked{background:var(--gruen);border-color:var(--gruen)}
input[type=checkbox].gr-sp-an:checked::before{transform:translateX(22px)}
input[type=checkbox].gr-sp-an:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
input[type=checkbox].gr-sp-an:disabled{opacity:.5;cursor:default}
.gr-sp-einstellungen{margin-top:var(--a3);padding-left:var(--a3);border-left:2px solid var(--linie)}
.gr-sp-einstellungen .feld:last-child{margin-bottom:0}
.gr-sp-kacheln{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--a2)}
.gr-sp-kachel{display:block;text-align:left;font:inherit;padding:var(--a3);cursor:pointer;
  border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche);color:var(--gedaempft);
  min-height:44px;transition:border-color var(--takt) ease,background var(--takt) ease}
.gr-sp-kachel b{display:block;font-weight:600;color:var(--tinte);margin-bottom:2px}
.gr-sp-kachel span{display:block;font-size:var(--s2);line-height:1.4}
.gr-sp-kachel:hover{border-color:var(--linie-stark);background:var(--flaeche-3);filter:none}
.gr-sp-kachel.gewaehlt{border-color:var(--akzent);background:var(--akzent-weich);color:var(--akzent-text)}
.gr-sp-kachel.gewaehlt b{color:var(--akzent-text)}
.gr-sp-kachel:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.gr-sp-kachel:disabled{cursor:default;opacity:.6}
.gr-sp-name{max-width:360px}
/* Die Vorschau: ein Stück Bildschirm, unten rechts die Plakette — so
   sieht sie in der App aus (weiß auf halbdurchsichtigem Schwarz). */
.gr-sp-vorschau{position:relative;height:72px;max-width:360px;margin-top:var(--a2);
  border-radius:var(--r2);background:var(--dunkel);overflow:hidden}
.gr-sp-plakette{position:absolute;right:8px;bottom:8px;padding:var(--a1) var(--a3);border-radius:999px;
  background:rgba(0,0,0,.55);color:#fff;font-size:12px;line-height:1.4;white-space:nowrap;
  max-width:calc(100% - 16px);overflow:hidden;text-overflow:ellipsis}
.gr-sp-zustand{display:flex;align-items:center;gap:var(--a2);flex-wrap:wrap;margin-top:var(--a3);
  padding:var(--a2) var(--a3);border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche-2)}
.gr-sp-zustand-text{flex:1 1 200px;color:var(--tinte)}
.gr-sp-nicht-moeglich{border-color:var(--rot);background:var(--rotBg)}
.gr-sp-nicht-moeglich .gr-sp-zustand-text{color:var(--rot)}
.gr-sp-verbunden{border-color:var(--gruen);background:var(--gruenBg)}
.gr-sp-trennen{flex:none}
.punkt-gelb{background:var(--gelb)}
.gr-sp-kenn{display:inline-flex;align-items:center;gap:4px;background:var(--gruenBg);color:var(--gruen)}
.gr-sp-kenn svg{flex:none}

/* ============================================================
   Die Ordneransicht (Fassung 247, L-408)
   ------------------------------------------------------------
   Pfadzeile oben, darunter die Ordner der offenen Ebene als
   Kacheln, danach der Inhalt. Dieselbe Ansicht in Mediathek,
   Folien, Playlists und in der Bibliothek des Playlist-Editors.
   Die Kacheln tragen nur Farbtokens — Hell- und Dunkelmodus
   kommen damit von selbst.
   ============================================================ */
.ord-kopfzeile{display:flex;align-items:center;justify-content:space-between;
  gap:var(--a3);flex-wrap:wrap}
.ord-pfad{display:flex;align-items:center;flex-wrap:wrap;gap:2px;min-width:0}
.ord-pfad-teil{display:inline-flex;align-items:center;gap:var(--a1);background:none;
  border:1px solid transparent;border-radius:var(--r1);padding:4px var(--a2);
  font-size:var(--s3);color:var(--gedaempft);cursor:pointer;max-width:260px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ord-pfad-teil:hover{background:var(--flaeche-2);color:var(--tinte)}
.ord-pfad-teil.an{color:var(--tinte);font-weight:600}
span.ord-pfad-teil{cursor:default}
span.ord-pfad-teil:hover{background:none}
.ord-pfad-trenner{display:inline-flex;color:var(--gedaempft)}
.ord-pfad-tun{display:flex;gap:var(--a2);flex-wrap:wrap}
/* Die Ordner als Pillen (`.ord-kachel`, `.ord-kacheln`, `.ord-schalter`,
   Fassung 247/248/277) sind seit Fassung 435 entfallen: Keine Ablage zeigt
   sie mehr (Inhalte und Bibliothek: Kacheln im Raster, Playlists: Zeilen). */
/* Ziehen: dieselbe Füllung wie an der alten Leiste — wer etwas
   hält, sieht, wo es landet. */
.ord-pfad-teil.ord-ueber{background:var(--gewaehlt);color:var(--auf-gewaehlt);
  border-color:var(--gewaehlt)}
@media (max-width:600px){
  .ord-kopfzeile{align-items:flex-start}
}
/* Standbild eines Videos (Fassung 247): Sobald es da ist, wird das
   Abspielzeichen zur Plakette auf dem Bild — dunkler Kreis, weiß,
   damit es auf hellen wie dunklen Bildern lesbar bleibt. */
.hat-standbild{background-size:cover;background-position:center}
.hat-standbild .med-videozeichen,.hat-standbild .bib-video-zeichen{color:#fff;
  background:rgba(0,0,0,.55);border-color:transparent;border-radius:var(--r-voll);padding:var(--a1)}
.ord-zielt .ord-pfad-teil{border-style:dashed;border-color:var(--linie-stark)}

/* ============================================================
   Bibliothek im Playlist-Editor (Fassung 247, L-409)
   ------------------------------------------------------------
   Klick = ansehen, „+" = einhängen. Der Knopf sitzt oben rechts
   auf dem Bild, immer sichtbar (auf Berührungsgeräten gibt es kein
   Überfahren), mit 32 px Fläche. Die grüne Marke „schon in dieser
   Playlist" bleibt oben links (Fassung 228).
   ============================================================ */
.bib-plus{position:absolute;top:var(--a2);right:var(--a2);z-index:3;width:32px;height:32px;
  display:inline-flex;align-items:center;justify-content:center;padding:0;
  border-radius:var(--r-voll);border:1px solid var(--linie-stark);
  background:var(--flaeche);color:var(--tinte);box-shadow:var(--schatten-1);cursor:pointer}
.bib-plus:hover{background:var(--akzent);color:var(--auf-akzent);border-color:var(--akzent);filter:none}
.bib-plus:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.pl-bib .bib-kachel{cursor:pointer}
.bib-video{background-size:cover;background-position:center}
.bib-video .med-laenge{position:absolute;right:6px;bottom:6px}
.bib-video .bib-video-zeichen{display:inline-flex;align-items:center;justify-content:center}
/* Die große Vorschau im Dialog */
.bib-schau{background:#000;border-radius:var(--r2);overflow:hidden;display:flex;
  justify-content:center;align-items:center}
.bib-schau .med-schau{max-width:100%;max-height:min(62vh,560px);display:block}
.bib-schau-folie{background:var(--flaeche-2)}
.bib-schau-bild{width:100%;aspect-ratio:16/9;height:auto}
.bib-schau-bild.hoch{width:auto;height:min(62vh,560px);aspect-ratio:9/16}
.bib-schau-drin{display:inline-flex;align-items:center;gap:var(--a1);margin-top:var(--a3);
  font-weight:600;font-size:var(--s2);color:var(--gruen);background:var(--gruenBg);
  border:1px solid var(--gruen);border-radius:var(--r-voll);padding:2px var(--a2)}
/* In den schmalen Kacheln der Editor-Bibliothek trägt die Marke nur
   den Haken — der Satz steht im Tooltip und in der großen Vorschau,
   der grüne Rahmen bleibt. Mit Satz lag sie über dem „+". */
.pl-bib .bib-hinweis-reihe{padding:4px;border-radius:var(--r-voll)}
.pl-bib .bib-hinweis-reihe > span{position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap}

/* ============================================================
   Eine Kachelbedienung (Fassung 248, L-410)
   ------------------------------------------------------------
   Dieselbe Zeile unter Bildern, Videos, Dokumenten und Folien: zwei
   ruhige Knöpfe, dann „⋯". Die Knöpfe teilen sich die Breite, „⋯"
   bleibt quadratisch. Ein Wort, das nicht passt, wird mit Auslassung
   gekürzt und steht vollständig im Kurzhinweis.
   ============================================================ */
.kachel-tun{display:flex;align-items:center;gap:var(--a1);margin-top:var(--a2);min-width:0}
.med-karte .kachel-tun{margin:0;padding:0 var(--a2) var(--a2)}
.kachel-knopf{display:block;text-align:center;flex:1 1 0;min-width:0;min-height:32px;padding:var(--a1) var(--a2);
  border:1px solid var(--linie);border-radius:var(--r1);background:var(--flaeche);
  color:var(--tinte);font-size:var(--s2);font-weight:600;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kachel-knopf:hover{border-color:var(--linie-stark);background:var(--flaeche-2);filter:none}
.kachel-knopf:focus-visible,.kachel-mehr:focus-visible{outline:2px solid var(--fokus);outline-offset:1px}
.kachel-mehr{flex:none;width:32px;height:32px;padding:0;display:inline-flex;align-items:center;
  justify-content:center;border:1px solid var(--linie);border-radius:var(--r1);
  background:var(--flaeche);color:var(--tinte);cursor:pointer}
.kachel-mehr:hover,.kachel-mehr[aria-expanded="true"]{border-color:var(--linie-stark);
  background:var(--flaeche-2);filter:none}
/* Fassung 412: Lädt hinter „…" ein Dialog („Auf Bildschirm zeigen …" an
   einer Folie, seit 410 auch an einer Playlist), steht dort nur der Ring.
   Bis dahin passten Ring (14 px), sein Abstand (8 px) und die Punkte
   (18 px) nicht in 32 bzw. 40 px, und der Ring schrumpfte auf 0 px. */
.kachel-mehr.laedt svg{display:none}
.kachel-mehr.laedt::before{flex:none;margin-right:0}
/* Das Menü hängt am Dokument (oberflaeche.js, `mehrMenue`). */
.kachel-menue{position:fixed;z-index:1000;min-width:210px;max-width:320px;
  display:flex;flex-direction:column;padding:var(--a1);background:var(--flaeche);
  border:1px solid var(--linie);border-radius:var(--r2);box-shadow:var(--schatten-3)}
.kachel-menue-eintrag{display:flex;align-items:center;justify-content:flex-start;gap:var(--a2);
  width:100%;text-align:left;padding:var(--a2) var(--a3);border:0;border-radius:var(--r1);
  background:none;color:var(--tinte);font-size:var(--s3);cursor:pointer;min-height:40px}
.kachel-menue-eintrag:hover,.kachel-menue-eintrag:focus-visible{background:var(--flaeche-2);
  outline:none;filter:none}
.kachel-menue-eintrag.ist-gefahr{color:var(--rot-text)}
.kachel-menue-eintrag svg{flex:none;color:var(--gedaempft)}
.kachel-menue-platz{flex:none;width:16px;height:16px}


/* Der Dialog „Verschieben": ein Baum, eine Auswahl. */
.ordz-liste{display:flex;flex-direction:column;gap:2px;max-height:min(52vh,420px);overflow:auto;
  margin:var(--a3) 0;padding:var(--a1);border:1px solid var(--linie);border-radius:var(--r2);
  background:var(--flaeche)}
.ordz-zeile{display:flex;align-items:center;justify-content:flex-start;gap:var(--a2);
  width:100%;text-align:left;padding:var(--a2) var(--a3);border:1px solid transparent;
  border-radius:var(--r1);background:none;color:var(--tinte);font-size:var(--s3);
  cursor:pointer;min-height:40px}
.ordz-zeile svg{flex:none;color:var(--akzent-text)}
.ordz-zeile:hover:not([disabled]){background:var(--flaeche-2);filter:none}
.ordz-zeile.an{background:var(--gewaehlt);color:var(--auf-gewaehlt);border-color:var(--gewaehlt)}
.ordz-zeile.an svg{color:inherit}
.ordz-zeile[disabled]{cursor:default;opacity:1;color:var(--gedaempft)}
.ordz-zeile.wurzel{font-weight:600}
.ordz-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ordz-marke{font-size:var(--s1);color:var(--gedaempft);border:1px solid var(--linie);
  border-radius:var(--r-voll);padding:0 var(--a2)}
.ordz-neu-knopf{display:inline-flex;align-items:center;gap:var(--a1);font-weight:600}
.ordz-neu{display:flex;flex-direction:column;gap:var(--a1);margin-top:var(--a2)}
.ordz-neu .reihe-eng{display:flex;gap:var(--a2)}
.ordz-neu input{flex:1 1 auto}

/* Ziehen in Safari (Fassung 249, L-412). `-webkit-user-drag:element`
   sagt WebKit ausdrücklich, dass die ganze Kachel gezogen wird; Bilder
   darin ziehen nicht selbst, sonst nähme Safari das Bild statt der
   Kachel. Das Schild ist das Zugbild (`ziehBild`) — es steht außerhalb
   des sichtbaren Bereichs. */
[draggable="true"]{-webkit-user-drag:element}
[draggable="true"] img{-webkit-user-drag:none}
.zieh-schild{position:fixed;left:-1000px;top:-1000px;z-index:-1;max-width:260px;
  padding:var(--a2) var(--a3);border-radius:var(--r1);background:var(--tinte);
  color:var(--auf-tinte);font-size:var(--s2);font-weight:600;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;box-shadow:var(--schatten-3)}

/* Seitenleiste, „?" und Kleinteile aus Strom A (Fassungen 256–260)
   ------------------------------------------------------------
   Seit Fassung 286 aufgelöst: Was Stück 01 überschreibt (Gruppentitel,
   die rote Fläche von „Durchsagen & Tasten" mit festem Farbwert), ist
   weg; was bleibt, gilt so. */

/* Fassung 256 (ADR-048): Gruppen in der Seitenleiste. Mit „Verwaltung"
   stehen bis zu 14 Einträge untereinander; die Navigation rollt dann
   für sich, und der Fuß (Hilfe, Konto) bleibt unten im Bild. */
.haupt-nav{flex:1 1 auto;min-height:0;overflow-y:auto}
.live-durchsage{margin-bottom:var(--a5)}
/* Fassung 257: „Für Techniker" im Gerätedetail (UX-Audit B1) und die
   Zahlenfelder des Bildausschnitts, die „1920" als „19" zeigten (B3):
   Die vier Felder brechen auf zwei Spalten um, bevor eine Zahl
   abgeschnitten wird. */
.gr-techniker{margin-top:var(--a5);border-top:1px solid var(--linie);padding-top:var(--a3)}
.gr-techniker>summary{cursor:pointer;font-weight:600;min-height:44px;display:flex;align-items:center}
.gr-ausschnitt-felder{grid-template-columns:repeat(auto-fit,minmax(9em,1fr))}
.gr-ausschnitt-felder input{min-width:7ch}
/* Fassung 260 (E11, A10): das „?" an Feldern und sein Fenster. Nur
   vorhandene Token; das Aussehen kommt mit Strom B. Die Beschriftung
   rückt neben das „?", damit es auf ihrer Zeile steht. */
.mit-frage{display:inline-block;margin-right:var(--a1)}
/* Sichtbar ein Kreis von 24 px, getroffen wird eine Fläche von 44 px
   (dieselbe Mindestgröße wie jeder Knopf, `button:not(.text-knopf)`);
   der negative Rand hält die Zeile trotzdem so hoch wie die Schrift. */
button.hilfe-frage{position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;min-height:44px;margin:-10px -6px;padding:0;border:0;border-radius:50%;
  background:transparent;color:var(--gedaempft);
  font-size:var(--s1);font-weight:600;line-height:1;cursor:pointer;vertical-align:middle;flex:0 0 auto}
button.hilfe-frage::before{content:"";position:absolute;inset:10px;border-radius:50%;
  border:1px solid var(--linie);background:var(--flaeche);z-index:-1}
button.hilfe-frage{isolation:isolate}
button.hilfe-frage:hover,button.hilfe-frage[aria-expanded="true"]{color:var(--tinte)}
button.hilfe-frage:hover::before,button.hilfe-frage[aria-expanded="true"]::before{border-color:var(--tinte)}
button.hilfe-frage:focus-visible{outline:none}
button.hilfe-frage:focus-visible::before{outline:2px solid var(--fokus);outline-offset:2px}
.hilfe-fenster{position:fixed;z-index:1000;max-width:min(360px,calc(100vw - 16px));
  padding:var(--a3);background:var(--flaeche);color:var(--tinte);
  border:1px solid var(--linie);border-radius:var(--r2);box-shadow:var(--schatten-3);
  font-size:var(--s2);line-height:1.5}
.hilfe-fenster:focus{outline:none}
.hilfe-fenster-titel{font-weight:600;margin-bottom:var(--a1)}
.hilfe-fenster-text{white-space:pre-line}
.hilfe-fenster-weiter{margin-top:var(--a2);padding:0}
.hi-abschnitt{margin-top:var(--a3)}
.hi-abschnitt>b{display:block;margin-bottom:2px}
.hi-abschnitt.hervor{outline:2px solid var(--akzent);outline-offset:4px;border-radius:var(--r1)}
.mit-frage-zeile{display:flex;align-items:center;gap:var(--a2);margin:0 0 var(--a1)}
.mit-frage-zeile>label{margin:0}

/* ============================================================
   UX-Runde 1 · Strom B · Stück 01 — Seitenleiste und Kontomenü
   (Fassung 262, Entwurf `design_handoff_lumafy_ui/runde-1/01-seitenleiste/`)
   ------------------------------------------------------------
   Werte aus dem Entwurf von Claude Design. Zwei bewusste
   Abweichungen: Die Schrift bleibt IBM Plex Sans (Frage E15 an
   Cedric; sie hängt jetzt an `--sans`, umstellen ist eine Zeile),
   und wo der Entwurf den Schnitt 700 setzt, steht 600 — geladen
   sind genau zwei Schnitte (400, 600).
   ============================================================ */
:root,[data-thema="dunkel"]{
  /* Stück 01 */
  --nav-hoehe:40px;              /* Eintrag am Rechner; unter 860 px 48 */
  --nav-hoehe-handy:48px;
  --aktiv-balken:3px;            /* die EINE Aktiv-Markierung */
  --seitenleiste-schmal:248px;   /* 860–1179 px */
  --seitenleiste-schublade:320px;
  --sans:"IBM Plex Sans",system-ui,-apple-system,'Segoe UI',Helvetica,Arial,sans-serif;
  /* Stück 02 — schon hier, weil die Übergabe sie als Erstes nennt */
  --feld-kurz:160px;
  --feld-mittel:360px;
  --feld-lang:100%;
  --editor-rechts:440px;
  --editor-rechts-schmal:288px;
  --schublade-inhalte:560px;
  --band-hoehe:48px;             /* wird gemessen, sobald das Band steht */
}
/* 860–1179 px: die Leiste schmaler, damit die Arbeitsfläche bei
   1024 px 776 statt 728 px behält. Die Breite selbst steht weiter an
   genau einer Stelle (`--seitenleiste`); hier wechselt nur die Spalte. */
/* Seit Fassung 422 ab 861 px: Bei genau 860 px galten bis 421 diese
   Regel und das Handy (`HANDY`, max-width:860px) zugleich — der ganze
   Editor stand in einer 248 px schmalen Spalte (Prüfung von 419). */
@media (max-width:1179px) and (min-width:861px){
  #app{grid-template-columns:var(--seitenleiste-schmal) 1fr}
}
body{font-family:var(--sans)}

/* Einträge: 40 px hoch, 15 px, die Beschriftung darf umbrechen
   und wird nie abgeschnitten. */
/* `.seite` davor, weil die Grundregel `button:not(.text-knopf)` sonst
   mit 44 px gewinnt; am Rechner gilt der Entwurf (40), am Handy 48. */
.seite .nav-knopf{min-height:var(--nav-hoehe);padding:var(--a1) var(--a3);
  font-size:15px;line-height:1.3;overflow-wrap:anywhere}
.nav-text{display:flex;flex-direction:column;min-width:0}
.nav-rest{font-size:var(--s1);font-weight:400;line-height:1.3}
.nav-zahl{font-size:var(--s2)}
/* Gruppentitel: Versalien, gesperrt, Sans — kein Mono (E5: Mono nur
   für Daten). 20 px Luft zwischen den Gruppen. */
.nav-gruppe-kopf{font-family:var(--sans);font-size:var(--s1);font-weight:600;
  text-transform:uppercase;letter-spacing:.08em;color:var(--seite-gedaempft);
  padding:20px var(--a3) var(--a2)}
.nav-gruppe-kopf:first-child{padding-top:0}
/* Fassung 415 (L-599, Nachtrag zu ADR-048): „Verwaltung“ klappt. Der Kopf
   sieht weiter aus wie ein Gruppentitel; der Knopf darin füllt die Zeile,
   rechts der Pfeil (nach unten = zu, gedreht = offen). Die Einträge bleiben
   40 px hoch (F32). Zugeklappt ist die Hülle `hidden` — die Regel unten
   setzt `display:flex` nur, solange sie es nicht ist. */
.nav-gruppe-kopf.nav-klapp-kopf{padding:var(--a3) 0 0}
.nav-gruppe-kopf .nav-klapp{width:100%;min-height:var(--nav-hoehe);display:flex;align-items:center;
  justify-content:space-between;gap:var(--a2);padding:0 var(--a3);background:transparent;
  border:1px solid transparent;border-radius:var(--r1);font:inherit;text-transform:inherit;
  letter-spacing:inherit;color:var(--seite-gedaempft);text-align:left}
.nav-gruppe-kopf .nav-klapp:hover{background:var(--seite-flaeche);color:var(--seite-text);filter:none}
.nav-gruppe-kopf .nav-klapp-pfeil{display:flex;flex:none;transition:transform var(--takt) ease}
.nav-gruppe-kopf .nav-klapp[aria-expanded="true"] .nav-klapp-pfeil{transform:rotate(180deg)}
/* Fassung 419: Offen, solange ein Eintrag daraus aktiv ist — dann klappt
   der Kopf nicht (ADR-093); der Zeiger sagt es, `aria-disabled` auch. */
.nav-gruppe-kopf .nav-klapp[aria-disabled="true"]{cursor:default}
@media (prefers-reduced-motion:reduce){.nav-gruppe-kopf .nav-klapp-pfeil{transition:none}}
.seite .nav-gruppe{display:flex;flex-direction:column;gap:2px}
.seite .nav-gruppe[hidden]{display:none}
/* Die eine Aktiv-Markierung: Fläche + 3-px-Balken + Schnitt. */
.nav-knopf.an{box-shadow:inset var(--aktiv-balken) 0 0 var(--akzent);font-weight:600}
/* Durchsage läuft: Fläche --notfall, weißer Text, heller Rand gegen
   die dunkle Leiste (die Fläche allein hat dort nur 2,05:1). Kein
   Pulsieren. Ist der Eintrag zugleich aktiv, kommt der Balken dazu. */
.nav-knopf#btn-szenen.laeuft{background:var(--notfall);color:var(--auf-notfall);
  border-color:var(--seite-rot);font-weight:600;animation:none}
.nav-knopf#btn-szenen.laeuft .zeichen{color:var(--auf-notfall)}
.nav-knopf#btn-szenen.laeuft.an{box-shadow:inset var(--aktiv-balken) 0 0 var(--akzent)}
.nav-knopf#btn-szenen.laeuft .nav-rest{color:var(--auf-notfall)}
.nav-knopf.notfall.laeuft{animation:none}
.nav-knopf#btn-szenen.laeuft:focus-visible{outline-color:var(--akzent)}

/* Kontoknopf: Kürzel 36 px, Name (oder Firma) darf zwei Zeilen haben. */
.nutzer-knopf{min-height:56px;padding:var(--a2) var(--a3)}
.nutzer-knopf .kuerzel-kreis{width:36px;height:36px;font-family:var(--sans);font-weight:600}
.nutzer-knopf .wer b{font-size:15px;white-space:normal;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nutzer-knopf[aria-expanded="true"]{background:var(--seite-flaeche)}
.nutzer-knopf[aria-expanded="true"] .pfeil svg{transform:rotate(180deg)}
/* Das Menü: oben wer man ist, dann drei Einträge zu 44 px. */
.nutzer-menue .nm-kopf{padding:var(--a2) var(--a3) var(--a1);display:flex;
  flex-direction:column;gap:1px;font-size:var(--s2);color:var(--gedaempft);line-height:1.4}
.nutzer-menue .nm-kopf b{font-size:var(--s3);font-weight:600;color:var(--tinte)}
.nutzer-menue .nm-kopf span{overflow-wrap:anywhere}
.nutzer-menue .nm-kopf span:empty{display:none}
.nutzer-menue button[role="menuitem"]{min-height:44px;font-size:var(--s3)}

/* Das Band „Durchsage läuft" oben auf jeder Seite: bricht um, keine
   feste Höhe, der Inhalt rückt um die gemessene Höhe nach unten. */
.banner{flex-wrap:wrap;row-gap:var(--a2);font-weight:400;background:var(--notfall);
  color:var(--auf-notfall)}
.banner .b-text{flex-wrap:wrap;column-gap:var(--a3);row-gap:2px}
.banner .b-stufe{font-weight:600}
.banner .b-wo{opacity:1}
.banner button{background:transparent;color:var(--auf-notfall);
  border:1px solid var(--auf-notfall);min-height:40px}
.banner button:hover{background:rgba(255,255,255,.12);filter:none}
.banner :focus-visible{outline:2px solid var(--akzent);outline-offset:2px}
body.uebersteuert #app{margin-top:var(--band-hoehe)}
body.uebersteuert .kopf,body.uebersteuert .seite{top:var(--band-hoehe)}
body.uebersteuert .seite{height:calc(100vh - var(--band-hoehe))}

/* Reiter (Unternavigation) markieren wie die Leiste: Fläche, oben
   gerundet, Balken unten, Schnitt. Im Hellmodus trägt der Balken
   (1,81:1) die Aussage nicht allein — Fläche, Farbe und Schnitt
   tun es mit. */
/* Mit Fläche am aktiven Reiter trennt das Polster die Reiter; der
   große Abstand dazwischen entfällt (vier Reiter passen bei 1024 px). */
.reiter{gap:var(--a1)}
.reiter-knopf{padding:var(--a3) var(--a2)}
.reiter-knopf.aktiv,.reiter-knopf[aria-selected="true"]{background:var(--flaeche-2);
  border-radius:var(--r1) var(--r1) 0 0;
  box-shadow:inset 0 calc(-1 * var(--aktiv-balken)) 0 var(--akzent)}

/* Unter 860 px: Einträge 48 hoch (Tippziel). */
@media (max-width:860px){
  #app .seite .nav-knopf{min-height:var(--nav-hoehe-handy)}
  #app .seite .nav-gruppe-kopf .nav-klapp{min-height:var(--nav-hoehe-handy)}
  /* Die Schublade: 320 px, höchstens 86 % — daneben bleibt ein Streifen
     der Seite unter der Abdeckung sichtbar, und ein Tipp darauf schließt. */
  .seite{width:var(--seitenleiste-schublade);max-width:86%}
}
@media (prefers-reduced-motion:reduce){
  .banner .b-punkt{animation:none}
}

/* ============================================================
   UX-Runde 1 · Strom B · Stück 02a — Editor: Kopf, Folienreihe,
   Schublade „Folie hinzufügen"
   (Fassung 263, Entwurf `design_handoff_lumafy_ui/runde-1/02-editor/`)
   ------------------------------------------------------------
   Die Arbeitsfläche rückt nach oben: Der Kopf wird eine Zeile Name +
   EINE Zustands-Pille, darunter eine stille Meta-Zeile; die Reihe
   wird eine Zeile schmaler Einträge; die Bibliothek wird eine
   Schublade von rechts. Dauer und Zeiten (Stück 02b) und das
   Formular (02c) folgen in eigenen Fassungen.
   ============================================================ */

/* ---- Kopf ---- */
.kopf-titel{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;min-width:0;max-width:100%}
.kopf-titel .name-eingabe{field-sizing:content;min-width:12ch;max-width:100%;width:auto;
  font-weight:600;letter-spacing:0}
/* Die Pille: rund, 26 px, mit Symbol. Nie ein Knopf. */
.zustand-pille{display:inline-flex;align-items:center;gap:var(--a1);flex:none;
  min-height:26px;padding:0 var(--a2);border-radius:var(--r-voll);
  font-size:var(--s2);font-weight:600;line-height:1.2;white-space:nowrap;
  background:var(--gruenBg);color:var(--gruen)}
.zustand-pille svg{flex:none}
.zustand-pille .zp-punkt{width:8px;height:8px;border-radius:50%;background:currentColor;display:block}
.zustand-pille .zp-kreis{width:12px;height:12px;border-radius:50%;display:block;
  border:2px solid currentColor;border-right-color:transparent;animation:drehen .9s linear infinite}
.zustand-pille[data-zustand="offen"]{background:var(--akzent-weich);color:var(--akzent-text)}
.zustand-pille[data-zustand="sendet"],
.zustand-pille[data-zustand="speichert"]{background:var(--blauBg);color:var(--blau)}
.zustand-pille[data-zustand="eingereicht"]{background:var(--blauBg);color:var(--blau)}
@keyframes drehen{to{transform:rotate(360deg)}}

/* Die Meta-Zeile: still, 14 px, Sans. Was bisher fünf gleiche Pillen
   waren (Bildschirme, Betriebszeit, Format, geändert), ist jetzt ein
   Satz mit Mittelpunkten. Die Bildschirmnamen bleiben Wege. */
.kopf-meta{margin-top:2px;gap:2px var(--a2);font-size:var(--s3);color:var(--gedaempft);line-height:1.45}
.kopf-meta .etikett{background:none;border:0;padding:0;min-height:0;border-radius:0;
  font-family:var(--sans);font-size:var(--s3);letter-spacing:0;color:var(--gedaempft)}
/* Der Mittelpunkt steht HINTER einem Teil, auf den noch einer folgt:
   Bricht die Zeile um, endet sie mit „·", statt die neue damit zu
   beginnen. Die Teile sind Flex-Kästen mit Abstand — der Punkt ist
   eines ihrer Kinder und braucht deshalb keinen eigenen Rand. */
.kopf-meta > :not(.versteckt):has(~ :not(.versteckt))::after{content:"·";
  color:var(--gedaempft);text-decoration:none;display:inline-block}
.kopf-meta .geraete-chips{gap:2px var(--a2);align-items:center;margin:0}
.kopf-meta .meta-vor{color:var(--gedaempft)}
.kopf-meta .geraete-chip{background:none;border:0;padding:0;min-height:0;border-radius:0;
  font-family:var(--sans);font-size:var(--s3);font-weight:400;color:var(--tinte);gap:var(--a1)}
.kopf-meta .geraete-chip:hover{text-decoration:underline;text-underline-offset:3px;filter:none}
.kopf-meta .geraete-chip + .geraete-chip::before{content:"·";margin-right:var(--a1);color:var(--gedaempft);
  display:inline-block}
.kopf-meta .geraete-chip-mehr{color:var(--gedaempft);text-decoration:underline;text-underline-offset:3px}
/* Fassung 411: „+n weitere" für Zugänge ohne `geraet.zuweisen` ist Text,
   kein Weg — still wie „Läuft auf", ohne Unterstrich, auch unter der Maus.
   Der Mittelpunkt davor kommt von `.geraete-chip + .geraete-chip`. */
.kopf-meta .geraete-chip-rest,.kopf-meta .geraete-chip-rest:hover{color:var(--gedaempft);text-decoration:none}
.kopf-meta .geraete-chip .punkt-laeuft,.kopf-meta .geraete-chip .punkt-dunkel{display:none}
.kopf-meta .geraete-chip .leise{color:var(--gedaempft);font-size:inherit}
.kopf-meta .geraete-chip-still{color:var(--rot-text)}
.kopf-meta .etikett-knopf:hover{text-decoration:underline;text-underline-offset:3px}

/* Knöpfe 40 px mit Rand und Symbol; „…" ist ein Quadrat. */
.kopf .kopf-knoepfe button{min-height:40px;padding:0 var(--a3);gap:var(--a2);
  font-size:15px;font-weight:600;border-radius:var(--r1)}
/* Unter 1380 px stehen „Vorschau groß" und „Adresse & QR" im Menü „…"
   (`.eng-weg`, seit Fassung 96) — daran ändert 263 nichts. */
.kopf{flex-wrap:wrap;row-gap:var(--a3)}
.kopf-links{flex:1 1 360px}
.kopf .kopf-knoepfe .mehr-knopf{width:40px;padding:0;justify-content:center}
.kopf #btn-speichern{min-width:0;padding:0 var(--a4)}
/* Nach der Prüfung von 411: „…“ lädt, während der Dialog „Auf Bildschirm
   zeigen“ aus dem Menü seine Bildschirme holt. Ring (14 px), Abstand und
   Punkte (20 px) passten nicht in 40 px; der Ring schrumpfte auf 0 px und
   stand als schräger Strich da. Ohne Abstand bleiben Ring und Punkte ganz. */
.kopf .kopf-knoepfe .mehr-knopf.laedt{gap:0}
.kopf .kopf-knoepfe .mehr-knopf.laedt::before{flex:none;margin-right:0}
/* Fassung 417 (L-614): Rückgängig und Wiederholen im Kopf, je 44 × 44
   (Entwurf §7). Ausgegraut über `button:disabled` (45 %). Auf dem Handy
   stehen sie seit Fassung 420 rechts in der Kopfzeile oben (unten). */
.undo-paar{display:inline-flex;gap:var(--a1);flex:none}
.kopf .kopf-knoepfe .undo-knopf,.handy-kopf .undo-knopf{width:44px;min-width:44px;height:44px;min-height:44px;
  padding:0;display:inline-flex;align-items:center;justify-content:center}
/* Seit Fassung 420 (ADR-095) am Handy rechts in der Kopfzeile oben, bis
   419 in der unteren Leiste vor „…“. */
.handy-kopf .undo-paar{margin-left:auto}

/* ---- Folienreihe ---- */
.reihe-bereich{display:flex;align-items:stretch;gap:var(--a3);padding:var(--a3) var(--a6);
  margin-bottom:var(--a4)}
.reihe-kopf{flex:none;flex-direction:column;align-items:flex-start;justify-content:center;
  gap:2px;margin:0;padding-right:var(--a1);flex-wrap:nowrap}
.reihe-titel{font-size:var(--s3);font-weight:600}
.reihe-zahl{font-size:var(--s2);color:var(--gedaempft);white-space:nowrap}
.reihe-summe{font-family:var(--mono)}
.reihe-zeiten{font-size:var(--s2)}
.reihe-liste{flex:1 1 auto;min-width:0;min-height:0;padding:var(--a1);align-items:stretch;gap:var(--a3)}
.reihe-kachel{flex:0 0 244px;flex-direction:row;align-items:center;gap:var(--a3);min-height:64px;
  padding:var(--a1) var(--a2) var(--a1) var(--a1);background:var(--flaeche);border-radius:var(--r1)}
.reihe-kachel.an{background:var(--flaeche-2);border-color:var(--linie-stark);
  box-shadow:inset 0 calc(-1 * var(--aktiv-balken)) 0 var(--akzent),var(--schatten-1)}
.reihe-kachel.an .vk-name{font-weight:600}
.reihe-mini{position:relative;flex:none;width:72px;height:40px;border-radius:var(--r1);
  overflow:hidden;background:var(--dunkel)}
.reihe-mini .reihe-bild{width:100%;height:100%;aspect-ratio:auto;border:0;border-radius:0;
  background:transparent}
.reihe-mini .reihe-nr{left:2px;top:2px;padding:1px var(--a1)}
.reihe-text{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.reihe-kachel .vk-name{font-size:var(--s3);font-weight:400}
.reihe-kachel .vk-mass{display:block;white-space:normal;font-family:var(--sans);font-size:var(--s2);letter-spacing:0;
  color:var(--gedaempft);line-height:1.3}
.reihe-kachel .vk-mass .punkt{display:inline-block;vertical-align:middle;margin-right:var(--a1)}
.reihe-dauer{font-family:var(--mono)}
.reihe-auch{display:flex;align-items:center;gap:var(--a1);font-size:var(--s1);color:var(--beschriftung)}
.reihe-leer{min-height:64px;padding:var(--a2) var(--a4)}
/* „+ Folie hinzufügen" am Ende der Reihe, außerhalb des Rollbereichs:
   Sie bleibt sichtbar, egal wie lang die Reihe ist. In der senkrechten
   Reihe am Rechner (seit 419) rollt die ganze Reihe; dort klebt der
   Knopf seit Fassung 422 unten (Block „Fassung 419“). */
.reihe-bereich .reihe-dazu{flex:none;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:var(--a1);min-height:64px;padding:0 var(--a3);
  background:transparent;color:var(--tinte);border:1px dashed var(--linie-stark);
  border-radius:var(--r1);font-size:var(--s3);font-weight:600;white-space:nowrap}
.reihe-bereich .reihe-dazu:hover{background:var(--flaeche-2);filter:none}
@media (max-width:1379px){
  .reihe-bereich{padding:var(--a3) var(--a5)}
}
/* Seit Fassung 422 bis 860 px (bis 421: 760, Prüfung von 419). */
@media (max-width:860px){
  .reihe-bereich{flex-wrap:wrap;padding:var(--a3) var(--a4);gap:var(--a2)}
  .reihe-kopf{flex-direction:row;flex-wrap:wrap;align-items:baseline;justify-content:flex-start;
    gap:var(--a2);width:100%}
  .reihe-liste{flex-basis:0}
  /* ‹ › × stehen hier immer da (kein Hover) — im Eintrag, nicht über
     ihm: Bei 64 px Höhe deckten drei 44-px-Knöpfe sonst den Namen zu. */
  .reihe-kachel{flex-basis:auto;min-width:220px}
  .reihe-kachel .reihe-text{min-width:96px}
  .reihe-kachel .reihe-tun{position:static;flex:none}
  .reihe-bereich .reihe-dazu{padding:0 var(--a2);width:88px;white-space:normal;
    text-align:center;font-size:var(--s2);line-height:1.2}
}

/* ---- Schublade „Folie hinzufügen" ----
   Von rechts über die Arbeitsfläche, 560 / 440 px, am Handy volle
   Breite. Der Dialog selbst (Fokusfalle, Escape, Abdeckung) ist der
   gewohnte; nur Lage und Maß sind anders. */
.dialog-huelle.hat-schublade{justify-content:flex-end;align-items:stretch;padding:0}
.dialog.schublade-rechts{max-width:var(--schublade-inhalte);height:100%;max-height:none;
  border-radius:0;animation:schublade-rein .18s ease-out}
.dialog.schublade-rechts .dialog-kopf{border-radius:0}
.schublade-rechts .pl-bib{margin-top:0;border-top:0;padding-top:0}
.schublade-rechts .pl-bib-gitter{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
#dialog-inhalt > .schublade-meldung{position:sticky;bottom:calc(-1 * var(--a5));z-index:2;
  margin:var(--a4) calc(-1 * var(--a5)) calc(-1 * var(--a5));padding:var(--a3) var(--a5);
  background:var(--flaeche);border-top:1px solid var(--linie);font-size:var(--s3);color:var(--tinte)}
#dialog-inhalt > .schublade-meldung:empty{padding:0;border:0;margin-top:0}
@keyframes schublade-rein{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}
@media (max-width:1179px){
  .dialog.schublade-rechts{max-width:440px}
}
@media (max-width:860px){
  .dialog.schublade-rechts{max-width:none}
  #dialog-inhalt > .schublade-meldung{bottom:calc(-1 * var(--a4));
    margin:var(--a4) calc(-1 * var(--a4)) calc(-1 * var(--a4));padding:var(--a3) var(--a4)}
}
@media (prefers-reduced-motion:reduce){
  .dialog.schublade-rechts{animation:none}
  .zustand-pille .zp-kreis{animation:none}
}

/* ============================================================
   UX-Runde 1 · Strom B · Stück 02b — Dauer und Zeiten
   (Fassung 264, Entwurf `design_handoff_lumafy_ui/runde-1/02-editor/`)
   ------------------------------------------------------------
   Der Kasten unter der Vorschau: Karte `--flaeche`, Rand `--linie`,
   `--r2`. Stepper −/+ mit Mono-Wert, Segment Immer / Zu bestimmten
   Zeiten, Tage als Umschaltknöpfe (`aria-pressed`), von/bis in Mono.
   ============================================================ */
.dz-kasten{margin-top:var(--a4);background:var(--flaeche);border:1px solid var(--linie);
  border-radius:var(--r2);padding:var(--a3) var(--a4) var(--a4);display:flex;flex-direction:column;gap:var(--a3)}
.dz-kasten.versteckt{display:none}
.dz-kopf{display:flex;align-items:center;gap:var(--a2)}
.dz-kopf h2{font-size:15px;font-weight:600;margin:0;letter-spacing:0}
.dz-folie{font-size:var(--s2);color:var(--gedaempft)}
.dz-zeile{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.dz-name{flex:0 0 62px;font-size:var(--s3);font-weight:600}
.dz-stepper{display:inline-flex;align-items:stretch;border:1px solid var(--feld-rand);
  border-radius:var(--r1);background:var(--flaeche)}
.dz-kasten .dz-stepper .dz-schritt{min-height:40px;width:40px;padding:0;display:flex;align-items:center;
  justify-content:center;background:transparent;color:var(--tinte);border-radius:0}
.dz-kasten .dz-stepper .dz-schritt:hover{background:var(--flaeche-2);filter:none}
.dz-kasten .dz-stepper .dz-schritt:disabled{color:var(--beschriftung);background:transparent}
.dz-wert{min-width:56px;display:flex;align-items:center;justify-content:center;padding:0 var(--a2);
  font-family:var(--mono);font-size:var(--s4);border-left:1px solid var(--linie);
  border-right:1px solid var(--linie);white-space:nowrap}
.dz-ist-standard{font-size:var(--s2);color:var(--gedaempft)}
.dz-zurueck{font-size:var(--s3);font-weight:600;color:var(--akzent-text)}
.dz-segment{display:inline-flex;gap:2px;padding:2px;background:var(--flaeche-3);border-radius:var(--r1);
  flex-wrap:wrap}
.dz-kasten .dz-segment .dz-seg{min-height:36px;padding:0 var(--a3);background:transparent;
  color:var(--gedaempft);font-size:var(--s3);font-weight:400;border-radius:var(--r1);white-space:nowrap}
.dz-kasten .dz-segment .dz-seg[aria-checked="true"]{background:var(--flaeche);color:var(--tinte);
  font-weight:600;box-shadow:var(--schatten-1)}
.dz-kasten .dz-segment .dz-seg:hover{filter:none}
.dz-zeiten{background:var(--flaeche-2);border-radius:var(--r2);padding:var(--a3);
  display:flex;flex-direction:column;gap:var(--a3)}
.dz-tage{display:flex;gap:var(--a1);flex-wrap:wrap}
.dz-kasten .dz-tag{min-height:36px;min-width:36px;padding:0 var(--a1);border:1px solid var(--linie-stark);
  font-size:var(--s3);font-weight:400}
.dz-kasten .dz-tag.an{background:var(--tinte);color:var(--creme);border-color:var(--tinte);font-weight:600}
.dz-uhrzeiten{display:flex;align-items:center;gap:var(--a2) var(--a3);flex-wrap:wrap}
.dz-uhrzeiten label{display:flex;align-items:center;gap:var(--a2);margin:0;font-size:var(--s3);
  font-weight:400;color:var(--tinte)}
.dz-uhrzeiten input{width:auto;min-width:0;margin:0;font-family:var(--mono);border-color:var(--feld-rand)}
/* Nachtrag zu Fassung 464: Uhrzeiten hier („Zu bestimmten Zeiten“, Zeitblock
   im Wochenplan) mit Untergrenze wie in den Wochenzeilen. Ihre Breite hing nur
   an der Eigenbreite, die der Browser angibt. */
.dz-uhrzeiten input[type=time]{min-width:7em}
.dz-uhr-wort{font-size:var(--s2);color:var(--gedaempft)}
.dz-hinweis{margin:0;font-size:var(--s2);color:var(--gedaempft)}
.dz-hinweis:empty{display:none}
.dz-hinweis.rot{color:var(--rot-text)}
.dz-datum summary{cursor:pointer;font-size:var(--s3);color:var(--gedaempft);min-height:32px;
  display:flex;align-items:center}
.dz-datum[open] summary{margin-bottom:var(--a2)}
.dz-datum > .dz-hinweis{margin-top:var(--a2)}
@media (max-width:860px){
  .dz-kasten .dz-stepper .dz-schritt,#app .dz-kasten .dz-stepper .dz-schritt{min-height:44px;width:44px}
  .dz-kasten .dz-tag,#app .dz-kasten .dz-tag{min-height:44px;min-width:44px}
  .dz-kasten .dz-segment .dz-seg,#app .dz-kasten .dz-segment .dz-seg{min-height:44px}
}
/* Die rechte Spalte klebt unter dem gemessenen Kopf, und nur, wenn sie
   ganz ins Fenster passt (`vorschauKlebenPruefen`). */
@media (min-width:1181px){
  .vorschau{top:var(--kopf-hoehe,88px)}
  .vorschau.zu-hoch{position:static}
}

/* ============================================================
   UX-Runde 1 · Strom B · Stück 02c — Formular
   (Fassung 266, Entwurf `design_handoff_lumafy_ui/runde-1/02-editor/`)
   ------------------------------------------------------------
   Eingabefelder mit `--feld-rand` (3:1 als Bedienumriss, statt
   `--linie-stark` mit 1,65:1). Breite nach erwarteter Länge. Der
   Zähler steht dauerhaft rechts im Feld, Mono 12 px, am Limit rot.
   Listenzeilen sind Karten auf `--flaeche-2`, ausgeblendete 55 %.
   ============================================================ */
input,select,textarea{border-color:var(--feld-rand)}
.feld-eingabe{position:relative;max-width:100%}
.feld-eingabe.feld-kurz{width:var(--feld-kurz)}
.feld-eingabe.feld-mittel{width:var(--feld-mittel)}
.feld-eingabe.feld-lang{width:var(--feld-lang)}
.lfelder .feld-eingabe{width:100%}
.feld-eingabe.mit-zaehler input{padding-right:64px}
.feld-eingabe.mit-zaehler textarea{padding-bottom:28px}
.feld-eingabe .zaehler{float:none;position:absolute;right:var(--a3);top:50%;transform:translateY(-50%);
  opacity:1;pointer-events:none;font-size:var(--s1);color:var(--beschriftung);background:var(--flaeche);
  padding-left:var(--a1)}
.feld-eingabe textarea ~ .zaehler{top:auto;bottom:var(--a2);transform:none}
.feld-eingabe .zaehler.voll{color:var(--rot-text);font-weight:600}
.l-beschriftung{display:inline-flex;align-items:baseline;gap:var(--a2)}
.l-anzahl{font-size:var(--s2);font-weight:400;color:var(--gedaempft)}
.lfeld{border:0;background:transparent;overflow:visible;display:flex;flex-direction:column;gap:var(--a2)}
.lfeld > div:first-child{display:flex;flex-direction:column;gap:var(--a2)}
.lzeile{background:var(--flaeche-2);border:1px solid var(--linie);border-radius:var(--r2);
  border-bottom:1px solid var(--linie)}
.lzeile:last-of-type{border-bottom:1px solid var(--linie)}
.lzeile.aus{opacity:.55}
.lwerkzeuge{display:flex;flex-direction:column;gap:var(--a1);flex:none}
.lweg.lauge[aria-pressed="true"]{color:var(--tinte)}
.lfuss{padding:0;background:transparent}
.lzeile .lfeld{background:transparent}
.lzeile .lzeile{background:var(--flaeche)}
/* Listenfelder als kompakte Tabelle (D6, Fassung 295). Die Spalten
   setzt der Editor je Liste in `--lspalten` (Griff · Felder · Aktion). */
.lzeilen{display:flex;flex-direction:column;gap:var(--a2)}
.l-anzahl{font-family:var(--mono)}
.l-anzahl.voll{color:var(--tinte)}
.lfeld.ltabelle{gap:0;--lspalten:32px minmax(0,1fr) 88px}
.lfeld.ltabelle > .ltab-kopf{display:grid;grid-template-columns:var(--lspalten);gap:var(--a2);align-items:end;
  padding:0 0 var(--a1);border-bottom:1px solid var(--linie);font-size:var(--s2);font-weight:600;color:var(--gedaempft)}
.lfeld.ltabelle > .ltab-kopf > span{padding-left:calc(var(--a2) + 1px)}
.lfeld.ltabelle > .ltab-kopf > .lkurz-kopf{text-align:center;padding-left:0}
.ltabelle .lzeilen{gap:0}
.ltabelle .lzeile{display:grid;grid-template-columns:var(--lspalten);gap:var(--a2);align-items:center;min-height:44px;
  padding:0;background:transparent;border:0;border-bottom:1px solid var(--linie);border-radius:0}
.ltabelle .lzeile:last-of-type{border-bottom:1px solid var(--linie)}
.ltabelle .lzeile.aus{opacity:.5}
.ltabelle .lfelder{display:contents}
.ltabelle .lfelder > .feld{display:block;margin:0;min-width:0}
.ltabelle .lfelder > .feld > label,.ltabelle .lfelder > .feld > .hilfe-frage{display:none}
.ltabelle .lgriff{display:flex;align-items:center;justify-content:center;height:44px;padding:0}
.ltabelle .lwerkzeuge{flex-direction:row;justify-content:flex-end;gap:0}
.ltabelle .feld-eingabe input{min-height:40px;padding-left:var(--a2);padding-right:var(--a2);
  border-color:transparent;background:transparent}
.ltabelle .feld-eingabe input:hover{border-color:var(--linie)}
.ltabelle .feld-eingabe input:focus{border-color:var(--linie-stark);background:var(--flaeche)}
/* F-26 (Fassung 314): Textzellen brechen um, statt abzuschneiden. */
.ltabelle .feld-eingabe textarea.l-umbruch{display:block;width:100%;min-height:40px;height:40px;resize:none;
  overflow:hidden;padding:var(--a2);line-height:1.35;font:inherit;hyphens:auto;overflow-wrap:break-word;
  border-color:transparent;background:transparent}
.ltabelle .feld-eingabe textarea.l-umbruch:hover{border-color:var(--linie)}
.ltabelle .feld-eingabe textarea.l-umbruch:focus{border-color:var(--linie-stark);background:var(--flaeche)}
.ltabelle .feld-eingabe .zaehler{display:none}
.ltabelle .feld-eingabe:focus-within .zaehler{display:block}
.ltabelle .feld-eingabe.mit-zaehler input{padding-right:var(--a2)}
.ltabelle .lkurz .feld-eingabe input{font-family:var(--mono);text-align:center;color:var(--akzent-text);
  background:var(--flaeche-2)}
.ltabelle .lkurz .feld-eingabe:focus-within .zaehler{display:none}
.ltabelle .lzeile-handy{display:none}
/* Die Zeile klappt auf (Fassung 371, L-521): am Rechner Lesezeilen,
   die angeklickte Zeile wird zur Karte. Am Handy (bis 640 px) bleibt
   das Blatt — Lesezeile und Kartenfuß gibt es dort nicht. Der Zähler
   steht in der Karte über dem Feld, nie im Text. */
.ltabelle .lzeile-mitte,.ltabelle .lzeile-lesen,.ltabelle .lkarte-fuss{display:none}
.lfeld.ltabelle:not(.lklapp) .feld-eingabe.mit-zaehler:focus-within textarea.l-umbruch{padding-right:56px}
/* Das Blatt am Handy (Fassung 371): volle Breite, Text bricht um, der
   Zähler steht über dem Feld rechts — wie in der Karte am Rechner. */
.lblatt{display:flex;flex-direction:column;gap:var(--a4)}
.lblatt > .feld{margin:0}
.lblatt .feld-eingabe{width:100%}
.lblatt .feld-eingabe textarea.l-umbruch{display:block;width:100%;min-height:48px;resize:none;overflow:hidden;
  line-height:1.35;hyphens:auto;overflow-wrap:break-word}
.lblatt .feld-eingabe.mit-zaehler textarea.l-umbruch,.lblatt .feld-eingabe.mit-zaehler input{padding-right:var(--a4);padding-bottom:var(--a3)}
.lblatt .feld-eingabe .zaehler{top:-23px;bottom:auto;right:0;transform:none;background:transparent;padding:0;line-height:20px}
.lblatt > .feld.lb-schalter{display:flex;flex-direction:row-reverse;justify-content:flex-end;align-items:center;gap:var(--a3)}
.lblatt > .feld.lb-schalter > label{margin:0;font-weight:400;color:var(--tinte);cursor:pointer}
@media (min-width:641px){
  /* Lesezeile und Schalter teilen sich die Mitte; wird es eng, rutschen
     die Schalter unter den Text, statt ihn zusammenzudrücken. */
  .lfeld.lklapp{--lspalten:32px minmax(0,1fr)}
  .lklapp .lzeile > .lzeile-mitte{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a1) var(--a2);min-width:0;
    padding:2px 0}
  .lklapp .lzeile-mitte > .lwerkzeuge{flex:none;display:flex;flex-direction:row;gap:0;margin-left:auto}
  .lklapp .lzeile-mitte > .lzeile-lesen{position:relative;display:flex;align-items:center;justify-content:flex-start;
    gap:var(--a3);flex:1 1 16em;
    min-width:0;min-height:44px;margin:0;padding:var(--a1) var(--a5) var(--a1) var(--a2);background:transparent;
    color:var(--tinte);text-align:left;font-weight:400;font-size:var(--s4);line-height:1.35;
    border:1px solid transparent;border-radius:var(--r1);cursor:text}
  .lklapp .lzeile-mitte > .lzeile-lesen:hover{background:var(--flaeche-2);border-color:var(--linie);filter:none}
  .lklapp .lzeile-lesen .lkachel{display:inline-flex;align-items:center;justify-content:center;flex:none;
    min-width:44px;height:36px;padding:0 var(--a2);border-radius:var(--r1);background:var(--flaeche-2);
    color:var(--akzent-text);font-family:var(--mono)}
  .lklapp .lz-text{flex:1;min-width:0;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;
    -webkit-line-clamp:2;overflow-wrap:break-word;hyphens:auto}
  .lklapp .lz-rest,.lklapp .lz-trenner{color:var(--gedaempft)}
  .lklapp .lz-leer{color:var(--beschriftung)}
  .lklapp .lz-zahlen{flex:none;display:flex;gap:var(--a3);font-family:var(--mono);font-variant-numeric:tabular-nums}
  .lklapp .lz-schalter{flex:none;display:inline-flex;align-items:center;gap:var(--a1);min-height:32px;margin:0;
    padding:0 var(--a2);border:1px solid var(--linie);border-radius:var(--r-voll);background:transparent;
    color:var(--gedaempft);font-size:var(--s2);font-weight:400;white-space:nowrap}
  .lklapp .lz-schalter:hover{background:var(--flaeche-2);filter:none}
  .lklapp .lz-schalter.an{background:var(--akzent-weich);border-color:transparent;color:var(--akzent-text);font-weight:600}
  .lklapp .lz-kaestchen{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;
    border:1.5px solid currentColor;border-radius:3px}
  .lklapp .lz-schalter.an .lz-kaestchen{background:var(--akzent);border-color:var(--akzent);color:var(--auf-akzent)}
  .lklapp .lz-stift{position:absolute;right:var(--a1);top:50%;transform:translateY(-50%);display:inline-flex;
    color:var(--beschriftung);opacity:0;transition:opacity var(--takt) ease}
  .lklapp .lzeile-lesen:hover .lz-stift,.lklapp .lzeile-lesen:focus-visible .lz-stift{opacity:1}
  .ltabelle .lzeile.offen{display:block;margin:var(--a2) 0;padding:var(--a3) var(--a4);background:var(--flaeche-2);
    border:1px solid var(--linie);border-radius:var(--r2)}
  .ltabelle .lzeile.offen .lfelder{display:flex;flex-wrap:wrap;gap:var(--a3)}
  .ltabelle .lzeile.offen .lfelder > .feld{display:grid;grid-template-columns:max-content 1fr;align-items:center;
    column-gap:var(--a1);min-width:0}
  .ltabelle .lzeile.offen .lfelder > .feld > .feld-eingabe{grid-column:1 / -1}
  .ltabelle .lzeile.offen .lfelder > .feld > label{display:block;font-size:var(--s2);font-weight:600;
    color:var(--gedaempft);line-height:24px;margin:0 0 var(--a1)}
  .ltabelle .lzeile.offen .lfelder > .feld > .hilfe-frage{display:inline-flex}
  .ltabelle .lzeile.offen .lb-kurz{flex:1 1 180px}
  .ltabelle .lzeile.offen .lb-mittel{flex:2 1 300px}
  .ltabelle .lzeile.offen .lb-lang{flex:1 1 100%}
  .ltabelle .lzeile.offen .lb-zahl{flex:0 0 auto;min-width:160px}
  .ltabelle .lzeile.offen .lb-kuerzel{flex:0 0 96px}
  .ltabelle .lzeile.offen .lfelder > .feld.lb-schalter{flex:1 1 100%;display:flex;flex-direction:row-reverse;
    justify-content:flex-end;align-items:center;gap:var(--a2)}
  .ltabelle .lzeile.offen .lfelder > .feld.lb-schalter > label{font-size:var(--s3);font-weight:400;color:var(--tinte);
    margin:0;padding:0;cursor:pointer}
  .ltabelle .lzeile.offen .feld-eingabe textarea.l-umbruch,.ltabelle .lzeile.offen .feld-eingabe input{
    border-color:var(--feld-rand);background:var(--flaeche)}
  .ltabelle .lzeile.offen .feld-eingabe .zaehler{display:block;top:-28px;bottom:auto;right:0;transform:none;
    background:transparent;padding:0;line-height:24px}
  .ltabelle .lzeile.offen .lkurz .feld-eingabe .zaehler{display:none}
  .ltabelle .lzeile.offen > .lkarte-fuss{display:flex;align-items:center;gap:var(--a1);margin-top:var(--a2)}
  .ltabelle .lzeile.offen > .lkarte-fuss .lwerkzeuge{flex-direction:row;gap:0}
  .ltabelle .lzeile.offen > .lkarte-fuss .lfertig{margin-left:auto}
  /* Ausgeblendet: die Karte bleibt bedienbar, ein Satz sagt es. */
  .ltabelle .lzeile.offen.aus{opacity:1}
  .ltabelle .lzeile.offen .lkarte-aus{font-size:var(--s2);color:var(--gedaempft)}
}
/* Der Fokusring dieser Knöpfe ist Bernstein: Bis Fassung 405 gab die
   Grundregel jedem Hauptknopf die Farbe --auf-akzent, und die ist im
   Dunkelmodus fast so dunkel wie die Fläche (Kontrast rund 1:1, Fassung 371
   gemessen). Seit 406 ist es --fokus, im Dunkelmodus dasselbe Bernstein. */
.lfeld.ltabelle button.lzeile-lesen:focus-visible,.lfeld.ltabelle button.lz-schalter:focus-visible,
.lfeld.ltabelle button.lweg:focus-visible,.lfeld.ltabelle button.lzeile-handy:focus-visible{outline-color:var(--fokus)}
/* Editor-Kopf am Handy (D6): nur Name und Pille; der Rückweg steht in
   der Leiste darüber, die Meta-Zeile unter „⋯ → Über diese Playlist". */
.ueber-liste{margin:0 0 var(--a3);padding-left:var(--a4);display:flex;flex-direction:column;gap:var(--a1)}
@media (max-width:860px){
  #arbeit .kopf .zurueck-knopf,#arbeit .kopf .kopf-meta{display:none}
}
@media (max-width:640px){
  .lfeld.ltabelle > .ltab-kopf{display:none}
  .ltabelle .lzeile{display:block;min-height:0}
  .ltabelle .lzeile > .lgriff,.ltabelle .lzeile > .lfelder,.ltabelle .lzeile > .lwerkzeuge{display:none}
  .ltabelle button.lzeile-handy{display:flex;width:100%;min-height:56px;align-items:center;gap:var(--a3);
    justify-content:flex-start;padding:var(--a2) 0;background:transparent;color:var(--tinte);text-align:left;
    font-weight:400;border-radius:0}
  .ltabelle button.lzeile-handy:hover{filter:none;background:var(--flaeche-2)}
  .lkachel{display:inline-flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;
    border-radius:var(--r1);background:var(--flaeche-2);color:var(--akzent-text);font-family:var(--mono)}
  .lzeile-text{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;overflow-wrap:anywhere}
  .lzeile-text b{font-weight:400}
  .lzeile-text span{font-size:var(--s2);color:var(--gedaempft)}
}
/* Das „?" im Aussehen aus Stück 02: Kreis 20 px mit Rand, offen
   invertiert. Die Trefferfläche bleibt 44 px wie bei jedem Knopf
   (Fassung 260) — der Entwurf nennt am Rechner 32, die Grundregel
   des Editors ist 44. */
button.hilfe-frage::before{inset:12px;border-color:var(--linie-stark)}
button.hilfe-frage{color:var(--beschriftung)}
button.hilfe-frage[aria-expanded="true"]{color:var(--flaeche)}
button.hilfe-frage[aria-expanded="true"]::before{background:var(--tinte);border-color:var(--tinte)}
/* Mit und ohne „?" gleich hoch, damit die Felder in einer Listenzeile
   auf einer Linie stehen. */
.lfelder > .feld{display:grid;grid-template-columns:max-content 1fr;align-items:center;
  column-gap:var(--a1)}
.lfelder > .feld > label{line-height:24px;margin-bottom:var(--a1)}
.lfelder > .feld > :not(label):not(.hilfe-frage){grid-column:1 / -1}
.lfelder > .feld > .hilfe-frage{justify-self:start;margin-bottom:var(--a1)}
/* Preise und Zahlen in Mono, rechtsbündig (Regel 7: Mono für Daten). */
.feld-eingabe.feld-kurz input[inputmode="decimal"]{font-family:var(--mono);text-align:right}

/* ============================================================
   Texte nach Uhrzeit (Fassung 268, Stück 02 + E20)
   ------------------------------------------------------------
   Leiste über dem Formular: „Texte", Segment der Fassungen, „+ Fassung",
   rechts „2 Felder anders"; darunter die Regel der gewählten Fassung.
   Abweichende Felder tragen eine Pille in --akzent-text/--akzent-weich.
   ============================================================ */
.tf-leiste{background:var(--flaeche);border:1px solid var(--linie);border-radius:var(--r2);
  padding:var(--a3) var(--a4);margin-bottom:var(--a4);max-width:720px;display:flex;flex-direction:column;gap:var(--a3)}
.tf-kopf{display:flex;align-items:center;gap:var(--a2) var(--a3);flex-wrap:wrap}
.tf-titel{display:inline-flex;align-items:center;gap:var(--a1);font-weight:600;font-size:var(--s3)}
.tf-segment{display:inline-flex;gap:2px;padding:2px;background:var(--flaeche-3);border-radius:var(--r1);flex-wrap:wrap}
.tf-leiste .tf-segment .tf-seg{min-height:36px;padding:0 var(--a3);background:transparent;color:var(--gedaempft);
  font-size:var(--s3);font-weight:400;border-radius:var(--r1);white-space:nowrap}
.tf-leiste .tf-segment .tf-seg[aria-checked="true"]{background:var(--flaeche);color:var(--tinte);font-weight:600;
  box-shadow:var(--schatten-1)}
.tf-leiste .tf-segment .tf-seg:hover{filter:none}
.tf-anders{margin-left:auto;font-size:var(--s2);color:var(--gedaempft)}
.tf-regel{display:flex;flex-direction:column;gap:var(--a3);background:var(--flaeche-2);border-radius:var(--r2);
  padding:var(--a3)}
.tf-fuss{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.tf-fuss .feld-eingabe input{min-height:40px}
.gefahr-text{color:var(--rot-text)}
.tf-pille{display:inline-flex;align-items:center;gap:var(--a1);margin:0 0 var(--a1) var(--a2);padding:0 var(--a1) 0 var(--a2);
  min-height:24px;border-radius:var(--r-voll);background:var(--akzent-weich);color:var(--akzent-text);
  font-size:var(--s1);font-weight:600;vertical-align:middle;white-space:nowrap}
.tf-pille.versteckt{display:none}
.feld .tf-pille .tf-weg{min-height:24px;min-width:24px;padding:0;background:transparent;color:inherit;
  display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-voll)}
.lfelder > .feld > .tf-pille{grid-column:auto;justify-self:start}
.dz-texte{align-self:flex-start;font-size:var(--s3);color:var(--gedaempft)}
@media (max-width:860px){
  .tf-leiste .tf-segment .tf-seg,#app .tf-leiste .tf-segment .tf-seg{min-height:44px}
  .feld .tf-pille .tf-weg,#app .feld .tf-pille .tf-weg{min-height:44px;min-width:44px;margin:-11px -8px}
}

/* ============================================================
   UX-Runde 1 · Strom B · Stück 03 — Übersicht und Zustandssystem
   (Fassung 269, Entwurf `design_handoff_lumafy_ui/runde-1/03-uebersicht/`)
   ------------------------------------------------------------
   Je Zustand ein Wort, eine Farbe, ein Symbol. Raster aller
   Bildschirme mit Miniatur, Zusammenfassung als Filterknöpfe,
   „Heute" als Zeitleiste rechts (klebt ab 1180 px).
   ============================================================ */
:root,[data-thema="dunkel"]{
  --zustand-laeuft:var(--gruen);        --zustand-laeuft-bg:var(--gruenBg);
  --zustand-ruhezeit:var(--gedaempft);  --zustand-ruhezeit-bg:var(--flaeche-3);
  --zustand-pausiert:var(--zustand-ruhezeit);  --zustand-pausiert-bg:var(--zustand-ruhezeit-bg);
  --zustand-still:var(--rot-text);      --zustand-still-bg:var(--rotBg);
  --zustand-durchsage:var(--auf-notfall); --zustand-durchsage-bg:var(--notfall);
  --zustand-neu:var(--gelb);            --zustand-neu-bg:var(--gelbBg);
  --uebersicht-heute:320px;
  --karte-min:220px;
}
.zustand{display:inline-flex;align-items:center;gap:var(--a1);min-height:24px;padding:0 var(--a2);
  border-radius:var(--r-voll);font-size:var(--s2);font-weight:600;white-space:nowrap;flex:none;line-height:1.2}
.zustand svg{flex:none}
.zustand-punkt{width:8px;height:8px;border-radius:50%;background:currentColor;display:inline-block;flex:none}
.zustand-laeuft{background:var(--zustand-laeuft-bg);color:var(--zustand-laeuft)}
.zustand-ruhezeit{background:var(--zustand-ruhezeit-bg);color:var(--zustand-ruhezeit)}
/* Fassung 452 (L-065): von Hand pausiert — grau wie die Ruhezeit, eigenes Symbol. */
.zustand-pausiert{background:var(--zustand-pausiert-bg);color:var(--zustand-pausiert)}
/* „Kein Zeitblock“ (Fassung 424) sieht aus wie die Ruhezeit: ruhig, kein Alarm. */
.zustand-luecke{background:var(--zustand-ruhezeit-bg);color:var(--zustand-ruhezeit)}
.zustand-still{background:var(--zustand-still-bg);color:var(--zustand-still)}
.zustand-durchsage{background:var(--zustand-durchsage-bg);color:var(--zustand-durchsage)}
.zustand-neu{background:var(--zustand-neu-bg);color:var(--zustand-neu)}

.db-kopf-knopf{display:inline-flex;align-items:center;gap:var(--a2)}
.db-zwei{grid-template-columns:minmax(0,1fr) var(--uebersicht-heute)}
@media (min-width:1181px){
  .db-rechts{position:sticky;top:var(--a4)}
}
@media (max-width:1180px){
  .db-zwei{grid-template-columns:1fr}
}

/* Zusammenfassung */
.db-summe{display:flex;align-items:center;flex-wrap:wrap;gap:var(--a2);font-size:15px;margin-bottom:var(--a1)}
.db-summe-gesamt{font-weight:600}
.db-summe-punkt{color:var(--gedaempft)}
.db-summe .db-zahl{font-family:var(--mono);font-weight:600;font-size:inherit;line-height:inherit;color:inherit}
.db-summe .db-filter{display:inline-flex;align-items:center;gap:var(--a1);min-height:40px;padding:0 var(--a3);
  border-radius:var(--r-voll);border:1px solid var(--linie);background:var(--flaeche);color:var(--tinte);
  font-size:15px;font-weight:400}
.db-summe .db-filter:hover{border-color:var(--linie-stark);filter:none}
.db-summe .db-filter[aria-pressed="true"]{border-color:var(--tinte);background:var(--flaeche-2)}
.db-filter.zustand-laeuft .zustand-punkt{color:var(--gruen)}
.db-filter.zustand-still svg{color:var(--rot-text)}
.db-filter.zustand-ruhezeit svg,.db-filter.zustand-pausiert svg,.db-filter.zustand-neu svg{color:var(--gedaempft)}

/* Raster und Karte */
.db-raster{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--karte-min),1fr));gap:var(--a4)}
.db-karte{display:flex;flex-direction:column;gap:var(--a1);padding:var(--a2) var(--a2) var(--a3);
  background:var(--flaeche);border:1px solid var(--linie);border-radius:var(--r2);color:var(--tinte);
  text-decoration:none;min-width:0}
.db-karte:hover{border-color:var(--linie-stark)}
.db-karte:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.db-karte-kopf{display:flex;flex-direction:column;align-items:flex-start;gap:var(--a1);
  padding:var(--a2) var(--a1) 0}
.db-karte-name{font-size:15px;font-weight:600;overflow-wrap:anywhere;min-width:0}
/* Seit Fassung 422 (L-619, Entwurf §1): unter Name und Pille die
   Format-Marke (wie in der Bildschirmliste, `.gr-format`) und der
   Standort, darunter der Rest-Satz, zuletzt die Playlist, die jetzt
   läuft, mit Symbol und ohne Knopf. Kein Trennpunkt zwischen Marke und
   Standort: Beim Umbruch stünde er am Zeilenanfang (L-662). */
.db-karte-pl{display:flex;align-items:center;gap:var(--a2);font-size:var(--s3);padding:0 var(--a1);overflow-wrap:anywhere;min-width:0}
.db-karte-pl svg{flex:none;color:var(--gedaempft)}
.db-karte-pl.ohne{color:var(--gedaempft)}
.db-karte-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a1) var(--a3);font-size:var(--s2);
  color:var(--gedaempft);padding:0 var(--a1);line-height:1.45}
.db-karte-meta .gr-format svg{flex:none}
/* Seit Fassung 424 (Prüfung von 422): oben ausgerichtet — bricht ein langer
   Standort um, stand das Zeichen mittig und wirkte wie das der zweiten Zeile. */
.db-karte-ort{display:inline-flex;align-items:flex-start;gap:var(--a1);overflow-wrap:anywhere;min-width:0}
.db-karte-ort svg{flex:none;margin-top:2px}
.db-karte-rest{font-size:var(--s3);color:var(--gedaempft);padding:0 var(--a1);line-height:1.4;overflow-wrap:anywhere}

/* Miniatur: immer 16:9, Hochformat eingepasst */
.db-mini{position:relative;display:block;aspect-ratio:16/9;border-radius:var(--r1);overflow:hidden;
  background:var(--dunkel)}
.db-mini-foto{width:100%;height:100%;object-fit:contain;display:block}
.db-mini .db-mini-folie{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto;border:0;border-radius:0;
  background:var(--dunkel)}
.db-mini.ohne-bild{background:var(--flaeche-4)}
.db-mini-leer{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:var(--a1);color:var(--gedaempft);font-size:var(--s2)}
.db-mini-marke{position:absolute;left:var(--a2);bottom:var(--a2);display:inline-flex;align-items:center;gap:var(--a1);
  padding:2px var(--a2);border-radius:var(--r1);background:var(--marke-bild);color:var(--marke-bild-text);
  font-size:var(--s1);font-weight:600;z-index:2}
.db-mini-zeit{font-family:var(--mono);font-weight:400}
.db-mini-schleier{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:var(--a1);
  background:var(--ruhe-schleier);color:var(--marke-bild-text);font-size:var(--s3);font-weight:600;z-index:1}
.db-mini.still .db-mini-foto,.db-mini.still .db-mini-folie{filter:grayscale(1);opacity:.45}
/* Titelbild (D1, Fassung 294): Ruhezeit als eigene Fläche, Video mit
   Wiedergabe-Zeichen, „zuletzt da" mit rotem Punkt. */
.db-mini.ruhe{background:var(--ruhe-flaeche)}
.db-mini-ruhe{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:var(--a1);background:var(--ruhe-flaeche);color:var(--marke-bild-text);font-size:var(--s3);text-align:center;padding:var(--a2)}
.db-mini-mond{color:var(--ruhe-mond);display:inline-flex}
.db-mini-ruhe .db-mini-zeit{font-size:var(--s2);opacity:.8}
/* Fassung 350: Am Handy ist die Miniatur rund 130 px breit. Mond, „Ruhezeit"
   und „wieder ab morgen 03:00" passten nicht hinein und wurden oben und unten
   abgeschnitten. In kleinen Miniaturen fällt der Mond weg, die Schrift wird kleiner. */
.db-mini{container-type:inline-size}
@container (max-width:180px){
  .db-mini-ruhe{gap:0;padding:var(--a1);font-size:var(--s2);line-height:1.25}
  .db-mini-ruhe .db-mini-mond{display:none}
  .db-mini-ruhe .db-mini-zeit{font-size:var(--s1)}
}
/* Seit Fassung 422 (F51): Die Miniatur der Übersicht trägt keinen Text
   mehr — dann hat der Mond auch in der kleinen Miniatur Platz. */
.db-mini.ohne-text .db-mini-ruhe .db-mini-mond{display:inline-flex}
.db-mini-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:inline-flex;
  align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:var(--marke-bild);color:var(--marke-bild-text)}
.db-mini-rot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--rot-auf-dunkel);flex:none}

/* Gruppen je Standort (100+) */
.db-gruppen{display:flex;flex-direction:column;gap:var(--a4)}
.db-gruppe-kopf{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;min-height:44px;cursor:pointer;
  font-size:15px;margin-bottom:var(--a2)}
.db-gruppe-zahl{color:var(--gedaempft);font-size:var(--s3)}

/* Heute als Zeitleiste */
.db-heute-karte{padding:var(--a4);width:100%}
.db-heute-kopf{display:flex;align-items:baseline;justify-content:space-between;gap:var(--a2);margin-bottom:var(--a3)}
.db-heute-kopf h2{font-size:var(--s4);font-weight:600;margin:0}
.db-heute-datum{font-size:var(--s2);color:var(--gedaempft)}
.db-zeitleiste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.db-zl{display:grid;grid-template-columns:44px 20px 1fr;gap:var(--a2);padding:var(--a2) 0;
  border-bottom:1px solid var(--linie);align-items:start;font-size:var(--s3)}
.db-zl:last-child{border-bottom:0}
.db-zl.vorbei{opacity:.72}
.db-zl-zeit{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft);padding-top:1px}
.db-zl-sym{color:var(--gedaempft);padding-top:1px}
.db-zl-satz{display:flex;flex-direction:column;gap:1px;min-width:0;overflow-wrap:anywhere}
.db-zl-zusatz{font-size:var(--s2);color:var(--gedaempft)}
.db-jetzt{display:grid;grid-template-columns:44px 1fr auto;gap:var(--a2);align-items:center;padding:var(--a2) 0}
.db-jetzt .db-zl-zeit{color:var(--akzent-text)}
.db-jetzt-linie{height:2px;background:var(--akzent);border-radius:1px}
.db-jetzt-wort{font-size:var(--s2);font-weight:600;color:var(--akzent-text)}

/* Leer */
.db-leer{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--a3);
  padding:var(--a7) var(--a4);background:var(--flaeche);border:1px solid var(--linie);border-radius:var(--r2)}
.db-leer-bild svg{width:240px;max-width:100%;height:auto;display:block}
.db-leer h2{font-size:var(--s5);font-weight:600;margin:0}
.db-leer p{margin:0;max-width:44ch;color:var(--gedaempft)}
.db-leer button{display:inline-flex;align-items:center;gap:var(--a2)}

@media (max-width:860px){
  .db-summe .db-filter,#app .db-summe .db-filter{min-height:44px}
  .db-summe-punkt{display:none}
  .db-raster{grid-template-columns:1fr}
  .db-karte{display:grid;grid-template-columns:128px 1fr;column-gap:var(--a3);align-items:start}
  .db-karte .db-mini{grid-row:1 / span 4}
  .db-karte-kopf,.db-karte-meta,.db-karte-rest,.db-karte-pl{grid-column:2;padding-left:0}
}
.db-zl-nichts .db-zl-satz{grid-column:1 / -1}
.db-zl-nichts .db-zl-zeit,.db-zl-nichts .db-zl-sym{display:none}

/* Startliste für neue Konten (Fassung 270, Stück 03) */
.db-start{background:var(--flaeche);border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a4);
  display:flex;flex-direction:column;gap:var(--a3)}
.db-start-kopf{display:flex;align-items:center;flex-wrap:wrap;gap:var(--a2) var(--a4)}
.db-start-kopf h2{font-size:var(--s4);font-weight:600;margin:0;flex:1 1 auto}
.db-start-stand{font-size:var(--s2);color:var(--gedaempft)}
.db-start-balken{display:block;width:120px;height:6px;border-radius:3px;background:var(--flaeche-3);overflow:hidden}
.db-start-balken i{display:block;height:100%;background:var(--akzent)}
.db-start-liste{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--a3)}
.db-start-schritt{display:flex;flex-direction:column;gap:var(--a2);padding:var(--a3);border:1px solid var(--linie);
  border-radius:var(--r2);background:var(--flaeche)}
.db-start-schritt.erledigt{background:var(--flaeche-2)}
.db-start-schritt.erledigt b{color:var(--gedaempft)}
.db-start-nr{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;
  border:1px solid var(--linie-stark);font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.db-start-schritt.erledigt .db-start-nr{background:var(--gruen);border-color:var(--gruen);color:var(--flaeche)}
.db-start-text{display:flex;flex-direction:column;gap:2px;font-size:var(--s3)}
.db-start-text b{font-size:15px;font-weight:600}
.db-start-schritt button{align-self:flex-start;margin-top:auto}
@media (max-width:860px){
  .db-start-liste{grid-template-columns:1fr}
}
.db-start-zahl{font-family:var(--mono);color:var(--tinte)}
.db-mini.ohne-bild:has(.db-mini-schleier) .db-mini-leer{visibility:hidden}

/* Bildschirm-Detail, Kopf und linke Spalte (Fassung 271, Stück 04) */
.seiten-kopf-links.zurueck-oben{flex-direction:column;align-items:flex-start;gap:0}
.seiten-kopf-links.zurueck-oben .zurueck-knopf{margin-left:calc(-1 * var(--a3));padding:var(--a1) var(--a3);min-height:28px}
.seiten-titel.mit-neben{display:inline;overflow-wrap:anywhere}
.seiten-titel-neben{display:inline-flex;vertical-align:middle;margin-left:var(--a3);position:relative;top:-4px}
.seiten-titel-neben .zustand{min-height:26px;font-size:var(--s2)}
.zustand-seit{font-weight:400;margin-left:var(--a1)}
.detail-spalten{grid-template-columns:352px minmax(0,1fr);gap:var(--a5)}
.detail-spalten > .gr-seite-karte{position:sticky;top:var(--a4);padding:var(--a3);gap:var(--a3)}
.gr-mini{aspect-ratio:auto;background:none;border-radius:var(--r1);display:block}
.gr-mini .db-mini{aspect-ratio:16/9}
/* Linke Spalte des Details (D1, Fassung 294): Playlist mit Titelbild,
   darunter das Foto vom Bildschirm auf Anforderung. */
.gr-links-bilder{display:flex;flex-direction:column;gap:var(--a3)}
.gr-bild-block{display:flex;flex-direction:column;gap:var(--a2)}
.gr-foto-block{padding-top:var(--a3);border-top:1px solid var(--linie)}
.gr-bild-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);min-height:28px}
.gr-bild-kopf h2{font-size:var(--s3);font-weight:600;margin:0}
.gr-bild-zahl{font-size:var(--s2);color:var(--gedaempft)}
.gr-bild-fuss{display:flex;align-items:baseline;justify-content:space-between;gap:var(--a2);font-size:var(--s3)}
.gr-bild-name{color:var(--gedaempft);overflow-wrap:anywhere;min-width:0}
.gr-bild-fuss .gr-pl-weg{font-weight:600;flex:none}
.gr-foto-pille{display:inline-flex;align-items:center;min-height:24px;padding:0 var(--a2);border-radius:var(--r-voll);
  font-size:var(--s2);font-weight:600}
.gr-foto-pille.frisch{background:var(--gruenBg);color:var(--gruen)}
.gr-foto-pille.alt{background:var(--gelbBg);color:var(--gelb)}
.gr-foto-rahmen{position:relative;aspect-ratio:16/9;border:6px solid var(--geraet-rahmen);border-radius:var(--r2);
  background:var(--geraet-rahmen);overflow:hidden}
.gr-foto-rahmen .gr-foto-bild{width:100%;height:100%;object-fit:contain;display:block}
.gr-foto-rahmen.alt .gr-foto-bild{filter:grayscale(1);opacity:.55}
.gr-foto-marke{position:absolute;right:var(--a2);top:var(--a2);display:inline-flex;align-items:center;gap:var(--a1);
  padding:2px var(--a2);border-radius:var(--r1);background:var(--marke-bild);color:var(--marke-bild-text);font-size:var(--s1);font-weight:600}
.gr-foto-wartet{display:flex;align-items:center;gap:var(--a2);min-height:44px;padding:0 var(--a3);border-radius:var(--r2);
  background:var(--flaeche-2);font-size:var(--s3)}
.gr-foto-wartet .drehkreis{width:14px;height:14px;flex:none;border-radius:50%;border:2px solid currentColor;
  border-right-color:transparent;animation:drehen .9s linear infinite}
button.gr-foto-holen{width:100%;justify-content:center;gap:var(--a2)}
.gr-seite-karte .gr-daten{grid-template-columns:auto minmax(0,1fr);gap:var(--a1) var(--a3);font-size:var(--s3);line-height:1.45}
.gr-seite-karte .gr-daten dd{overflow-wrap:anywhere}
.gr-pl-weg{color:var(--tinte);font-weight:600;text-underline-offset:3px}
.gr-still{color:var(--gedaempft)}
.gr-seite-karte .gr-seite-tun{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--a2)}
.gr-seite-karte .gr-seite-tun button{min-height:40px;padding:0 var(--a3);white-space:nowrap}
.gr-an-schalter{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);
  padding:var(--a2) var(--a3);border-radius:var(--r2);background:var(--flaeche-2)}
.gr-an-text{display:flex;flex-direction:column;min-width:0}
/* Fassung 452 (L-065): „Pausieren“ / „Wieder einschalten“ unter dem Schalter, ganze Breite. */
.gr-pause{display:flex}
.gr-pause .gr-pause-knopf{flex:1;justify-content:center}
.gr-an-text b{font-size:15px;font-weight:600}
.gr-an-satz{font-size:var(--s2);color:var(--gedaempft)}
button.schalter{flex:none;position:relative;width:52px;height:44px;min-height:44px;padding:0;background:transparent;border-radius:15px}
button.schalter::before{content:"";position:absolute;left:0;right:0;top:50%;height:30px;transform:translateY(-50%);
  border-radius:15px;box-sizing:border-box;background:var(--flaeche-3);border:1px solid var(--feld-rand);
  transition:background var(--takt) ease}
button.schalter .schalter-knopf{position:absolute;top:50%;left:3px;width:22px;height:22px;margin-top:-11px;border-radius:50%;
  background:var(--gedaempft);box-shadow:var(--schatten-1);transition:left var(--takt) ease}
button.schalter[aria-checked="true"]::before{background:var(--gruen);border-color:var(--gruen)}
button.schalter[aria-checked="true"] .schalter-knopf{left:27px;background:var(--flaeche)}
button.schalter:hover{filter:none}
.gr-entkoppeln{border-top:1px solid var(--linie);padding-top:var(--a1);display:flex;flex-wrap:wrap;align-items:center;gap:var(--a1)}
/* Fassung 444 (L-693): „PIN“ links neben „Entkoppeln“, gleich gebaut, ohne Gefahrfarbe. */
.gr-pin{display:inline-flex;align-items:center;gap:var(--a1);margin-left:calc(-1 * var(--a1))}
button.gr-pin-knopf{min-height:44px;padding:0 var(--a2);background:transparent;color:var(--tinte);font-size:var(--s3)}
button.gr-pin-knopf:hover,button.gr-pin-knopf[aria-pressed="true"]{background:var(--flaeche-2);filter:none}
.gr-pin-wert{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:.18em;user-select:all}
.gr-pin-wert:empty{display:none}
button.gr-pin-kopie{min-height:44px;min-width:44px;padding:0;background:transparent;color:var(--gedaempft)}
button.gr-pin-kopie:hover{background:var(--flaeche-2);color:var(--tinte);filter:none}
button.gr-pin-kopie[hidden]{display:none}
.gr-pin + button.gr-entkoppeln-knopf{margin-left:0}
button.gr-entkoppeln-knopf{min-height:44px;padding:0 var(--a2);margin-left:calc(-1 * var(--a1));background:transparent;
  color:var(--rot-text);font-size:var(--s3)}
button.gr-entkoppeln-knopf:hover{background:var(--rotBg);filter:none}
.dialog-entkoppeln{max-width:460px;border-radius:var(--r3)}
.dialog-warnzeile{display:flex;gap:var(--a2);align-items:flex-start;margin:0 0 var(--a4);font-size:15px;line-height:1.5;color:var(--rot-text)}
.dialog-warnzeile svg{flex:none;margin-top:2px}
button.notfall-tun{background:var(--notfall);color:var(--auf-notfall);border:1px solid var(--notfall)}
.dialog-entkoppeln .reihe-frage button:last-child{margin-right:0;order:0}
.gr-pille-handy{display:none}
@media (max-width:1180px){
  .detail-spalten{grid-template-columns:272px minmax(0,1fr)}
}
@media (max-width:860px){
  .detail-spalten{grid-template-columns:1fr}
  .detail-spalten > .gr-seite-karte{position:static}
  .gr-seite-karte .gr-seite-tun button{min-height:48px}
  .gr-pille-handy{display:flex}
}
@media (prefers-reduced-motion:reduce){
  .gr-foto-wartet .drehkreis{animation:none}
  button.schalter::before,button.schalter .schalter-knopf{transition:none}
}

/* Bildschirm-Detail, die Reiter (Fassung 272, Stück 04b) */
.detail-spalten > .karte > .reiter{display:flex;gap:2px;overflow:visible}
.detail-spalten > .karte > .reiter .reiter-knopf{flex:none;min-height:44px}
.gr-et-kasten{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2);max-width:var(--feld-lang);
  min-height:44px;padding:var(--a1) var(--a2);border:1px solid var(--feld-rand);border-radius:var(--r1);background:var(--flaeche)}
.gr-et-chips{display:contents}
.gr-et-chip{display:inline-flex;align-items:center;gap:var(--a1);min-height:32px;padding:0 var(--a1) 0 var(--a3);
  border-radius:var(--r-voll);background:var(--flaeche-3);color:var(--tinte);font-size:var(--s3)}
button.gr-et-weg{width:28px;height:28px;min-height:28px;padding:0;border-radius:50%;background:transparent;color:var(--gedaempft)}
button.gr-et-weg:hover{background:var(--flaeche-4);color:var(--tinte);filter:none}
.gr-et-kasten input{flex:1 1 120px;min-width:120px;border:0;min-height:32px;padding:0 var(--a1);background:transparent}
.gr-et-kasten:focus-within{outline:2px solid var(--fokus);outline-offset:1px}
.gr-et-kasten input:focus{outline:none}
.gr-woche-kasten{display:flex;flex-direction:column;gap:var(--a3)}
.gr-woche-kopf{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--a2)}
.gr-woche-kopf h2,.gr-abschnitt{font-size:var(--s4);font-weight:600;margin:0}
.gr-abschnitt{margin-top:var(--a3)}
.gr-woche-jetzt{display:inline-flex;align-items:center;gap:var(--a2);font-size:var(--s2);color:var(--gedaempft)}
.gr-woche-zeilen{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
/* Seit Fassung 413 (L-612) zwei Spalten: Tag und die Zeitfenster des Tages
   (bis 412 dazwischen ein Schalter je Tag). */
.gr-woche-zeile{display:grid;grid-template-columns:120px minmax(0,1fr);align-items:center;gap:var(--a3);
  min-height:56px;border-top:1px solid var(--linie)}
.gr-woche-zeile:first-child{border-top:0}
.gr-woche-tag{font-size:15px}
.gr-woche-zeile.aus .gr-woche-tag{color:var(--gedaempft)}
/* justify-content:start (Fassung 350): Ohne ihn nahm die Spalte „bis" (auto)
   am Desktop den ganzen Rest der Zeile, und „bis" stand weit weg von der Endzeit. */
.gr-woche-uhr{display:grid;grid-template-columns:minmax(auto,150px) auto minmax(auto,150px);justify-content:start;align-items:center;gap:var(--a2);
  font-size:var(--s3);color:var(--gedaempft)}
/* Seit Fassung 464 (L-713): Ein Uhrzeitfeld wird nie schmaler als 5.5em
   (bis 463 `min-width:0` hier, an `.gr-woche-uhr`, `.gr-zf` und `.gr-zf-feld`,
   Spalten `minmax(0,…)`). Am iPhone (Safari, Bildschirmfoto 18.10.2026) kam
   „+ Zeitfenster“ mit in die Zeile des Fensters, und die Uhrzeitfelder lagen
   über Strich und ✕: Safari zeichnete sie breiter als ihre Spalte (warum,
   ist UNBESTÄTIGT — im Container gibt es nur Chromium). Jetzt hält die
   Untergrenze die Spalten offen; was nicht mehr passt, bricht in die nächste
   Zeile um, und erst wenn ein Fenster allein nicht passt, das ✕ unter die Felder. */
.gr-woche-uhr input{width:100%;min-width:5.5em;font-family:var(--mono)}
.gr-woche-ruhe{display:inline-flex;align-items:center;gap:var(--a1);font-size:var(--s3);color:var(--gedaempft)}
.gr-woche-tun{display:flex;gap:var(--a2)}
/* Zeitfenster je Tag (Fassung 413, L-612): die Fenster eines Tages
   nebeneinander, brechen um; der Fehler steht unter seinem Fenster. */
.gr-woche-titel{display:inline-flex;align-items:center;gap:var(--a2)}
.gr-woche-inhalt{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2);min-width:0;padding:var(--a2) 0}
.gr-zf{display:flex;flex-direction:column;gap:var(--a1)}
.gr-zf-feld{display:inline-flex;align-items:center;gap:var(--a1)}
.gr-zf-feld:not(.gr-zf-ganz){flex-wrap:wrap}
.gr-zf-feld > .gr-woche-uhr{flex:1 1 0}
.gr-zf.fehler .gr-woche-uhr input{border-color:var(--rot);box-shadow:inset 0 0 0 1px var(--rot)}
/* Fassung 414 (L-632): „Ganzer Tag“ ohne Uhrzeit ist ein Fehler wie ein falsches Feld. */
.gr-zf.fehler .gr-zf-ganz{border-color:var(--rot);box-shadow:inset 0 0 0 1px var(--rot);align-self:flex-start}
.gr-zf-satz{max-width:360px;font-size:var(--s2);color:var(--rot-text)}
.gr-zf-ganz{min-height:44px;padding:0 var(--a1) 0 var(--a3);border:1px solid var(--feld-rand);border-radius:var(--r2);
  font-size:var(--s3);color:var(--tinte)}
/* Fassung 415 (Nachbesserung zu 413): Das ✕ im Kasten ohne eigenen Rand —
   sonst lagen zwei Ränder übereinander. Ohne Recht sieht der Kasten aus wie
   die gesperrten Uhrzeitfelder, nicht wie etwas zum Anklicken. */
.gr-zf-ganz button.gr-zf-weg{border-color:transparent}
.gr-zf-ganz.gesperrt{background:var(--flaeche-2);border-color:var(--linie);color:var(--gedaempft)}
/* Fassung 419 (nach der Prüfung von 415): Ohne Recht steht der Grund am
   „Ganzen Tag“ still da, nicht rot — der Zugang kann ihn nicht beheben. */
.gr-zf-satz.still{color:var(--gedaempft)}
button.gr-zf-plus{border-style:dashed;gap:var(--a1)}
button.gr-zf-uebertragen{min-height:44px;color:var(--akzent-text)}
.gr-ausr{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:var(--a2);max-width:640px}
button.gr-ausr-karte{flex-direction:column;gap:var(--a2);min-height:96px;padding:var(--a3) var(--a2);
  border:1px solid var(--linie-stark);border-radius:var(--r2);background:var(--flaeche);color:var(--tinte);
  font-size:var(--s3);font-weight:600}
button.gr-ausr-karte:hover{background:var(--flaeche-2);filter:none}
button.gr-ausr-karte[aria-checked="true"]{border:2px solid var(--akzent);background:var(--akzent-weich);color:var(--akzent-text)}
.gr-ausr-form{display:grid;place-items:center;border:2px solid currentColor;border-radius:4px;color:var(--gedaempft)}
button.gr-ausr-karte[aria-checked="true"] .gr-ausr-form{color:var(--akzent-text)}
.gr-ausr-form.form-quer{width:40px;height:24px}
.gr-ausr-form.form-hoch{width:24px;height:40px}
.gr-ausr-form.form-auto{width:32px;height:32px;border-style:dashed;font-family:var(--mono);font-size:var(--s2)}
.feld-titel{font-size:var(--s3);font-weight:600}
.gr-laut-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);max-width:var(--feld-lang)}
.gr-laut-wert{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.gr-laut-zeile{display:flex;align-items:center;gap:var(--a2);max-width:var(--feld-lang);color:var(--gedaempft)}
.gr-laut-zeile input{flex:1;min-height:44px}
.gr-laut-aus{display:inline-flex;align-items:center;gap:var(--a2);min-height:44px;font-size:var(--s3);font-weight:400}
.gr-techniker-inhalt{margin-left:var(--a3);font-size:var(--s2);font-weight:400;color:var(--gedaempft)}
.gr-mono{font-family:var(--mono);font-size:var(--s2)}
button.schalter.klein{width:52px}
@media (max-width:860px){
  .detail-spalten > .karte > .reiter{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
  .detail-spalten > .karte > .reiter .reiter-knopf{font-size:var(--s3);padding:0 var(--a1)}
  .gr-woche-zeile{grid-template-columns:28px minmax(0,1fr);gap:var(--a2)}
  /* Seit dem Nachtrag zu Fassung 464 ist die Uhr am Handy kein Raster mehr:
     Felder, Strich und ✕ stehen direkt in der umbrechenden Feldzeile, und
     jedes Uhrzeitfeld ist so breit wie sein Inhalt (Englisch mit „07:30 PM“
     braucht mehr als Deutsch). Passt das Fenster nicht in eine Zeile, rückt
     erst das ✕, dann das zweite Feld samt ✕ in die nächste. Bis dahin wurden
     die Felder auf ihre Spalte gestaucht, und „AM/PM“ war abgeschnitten
     (19:00 las sich als 07:00). */
  .gr-woche-uhr{display:contents}
  .gr-woche-uhr input{flex:0 1 auto;width:auto;padding:0 var(--a1)}
  /* Nachbesserung zu 464 (nach der Prüfung): Chromium setzt das Uhrsymbol
     8 px hinter die Uhrzeit und zeichnet die Ziffern je nach Pixeldichte
     verschieden breit (gemessen im Container bei 360 px: Feld 93,8 px bei
     Pixeldichte 1, 101,8 px bei 3). Bei Pixeldichte 3 passte das ✕ nicht
     mehr in die Zeile: 2 × 101,8 + Strich und Abstände 20 + ✕ 44 = 267,6 px
     bei 266 px Platz. Mit 2 px Abstand ist jedes Feld 6 px schmaler, und ein
     Fenster passt bei 360 px bis Pixeldichte 4 in eine Zeile. Die Regel wirkt
     nur, wo der Browser dieses Uhrsymbol zeichnet. */
  .gr-woche-uhr input::-webkit-calendar-picker-indicator{margin-inline-start:2px}
  .gr-technik{grid-template-columns:1fr}
  .gr-technik dd{margin-bottom:var(--a2)}
  .gr-techniker-inhalt{display:block;margin-left:0}
}

/* Bildschirm verbinden (Fassung 272, Stück 05) */
.kp-seite{max-width:960px;display:flex;flex-direction:column;gap:var(--a5)}
.kp-leiste{list-style:none;margin:0;padding:0;display:flex;gap:var(--a2);border-bottom:1px solid var(--linie)}
.kp-schritt{display:flex;align-items:center;gap:var(--a2);min-height:44px;padding:0 var(--a3);
  color:var(--gedaempft);font-size:var(--s3);border-bottom:var(--aktiv-balken) solid transparent;margin-bottom:-1px}
.kp-schritt.jetzt{color:var(--tinte);font-weight:600;border-bottom-color:var(--akzent)}
.kp-nr{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;border:1px solid var(--linie-stark);
  font-family:var(--mono);font-size:var(--s2)}
.kp-schritt.jetzt .kp-nr{border-color:var(--tinte)}
.kp-schritt.fertig .kp-nr{background:var(--gruen);border-color:var(--gruen);color:var(--flaeche)}
.kp-titel{font-size:var(--s5);font-weight:600;margin:0}
.kp-geraete{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--a3)}
button.kp-geraet{position:relative;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:var(--a2);
  padding:var(--a3);min-height:0;border:1px solid var(--linie-stark);border-radius:var(--r2);background:var(--flaeche);
  color:var(--tinte);text-align:left;font-weight:400}
button.kp-geraet:hover{background:var(--flaeche-2);filter:none}
button.kp-geraet[aria-checked="true"]{border-color:var(--tinte);box-shadow:inset 0 calc(-1 * var(--aktiv-balken)) 0 var(--akzent)}
.kp-geraet-text{display:flex;flex-direction:column;gap:2px;font-size:var(--s3);color:var(--gedaempft)}
.kp-geraet-text b{font-size:15px;color:var(--tinte);font-weight:600}
.kp-radio{position:absolute;right:var(--a3);top:var(--a3);width:20px;height:20px;border-radius:50%;border:2px solid var(--feld-rand)}
button.kp-geraet[aria-checked="true"] .kp-radio{border:6px solid var(--tinte)}
.kp-grafik{display:block;width:100%}
.kp-grafik svg{display:block;width:100%;height:auto;max-height:140px}
.kp-anleitung{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--a4)}
.kp-anleitung li{display:flex;flex-direction:column;gap:var(--a2);align-items:flex-start}
.kp-anleitung p{margin:0;font-size:15px;line-height:1.5}
.kp-anleitung-nr{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--flaeche-3);
  font-family:var(--mono);font-size:var(--s2)}
.kp-tun{display:flex;flex-wrap:wrap;gap:var(--a2)}
.kp-zwei{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:var(--a5);align-items:start}
.kp-form{display:flex;flex-direction:column;gap:var(--a2)}
.kp-code{position:relative;max-width:360px}
.kp-code input{height:64px;font-family:var(--mono);font-size:28px;letter-spacing:.08em;padding-right:72px;text-transform:uppercase}
.kp-zaehler{position:absolute;right:var(--a3);top:50%;transform:translateY(-50%);font-family:var(--mono);font-size:var(--s2);color:var(--beschriftung)}
.kp-code.voll input{border-color:var(--gruen)}
.kp-code.voll .kp-zaehler{color:var(--gruen)}
.kp-code.falsch input{border:2px solid var(--rot)}
.kp-fehler{display:flex;gap:var(--a2);align-items:flex-start;margin-top:var(--a2);color:var(--rot-text);font-size:var(--s3)}
.kp-fehler svg{flex:none;margin-top:2px}
.kp-segment{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--linie-stark);border-radius:var(--r1);background:var(--flaeche-2)}
.kp-segment button{min-height:40px;padding:0 var(--a3);background:transparent;color:var(--gedaempft);font-weight:600}
.kp-segment button[aria-checked="true"]{background:var(--flaeche);color:var(--tinte);box-shadow:var(--schatten-1)}
.kp-segment button:hover{filter:none;color:var(--tinte)}
.kp-hier{display:flex;flex-direction:column;gap:var(--a2);align-items:center;color:var(--gedaempft);font-size:var(--s2)}
.kp-fertig{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:var(--a5);align-items:center}
.kp-fertig-text{display:flex;flex-direction:column;gap:var(--a3);align-items:flex-start}
.kp-fertig-text h2{margin:0;font-size:var(--s6);font-weight:600}
.kp-fertig-text p{margin:0;font-size:var(--s4);line-height:1.5}
.kp-fertig-haken{display:grid;place-items:center;width:56px;height:56px;border-radius:50%;background:var(--gruen);color:var(--flaeche)}
@media (max-width:1180px){
  .kp-zwei,.kp-fertig{grid-template-columns:minmax(0,1fr) 240px}
}
@media (max-width:860px){
  .kp-geraete,.kp-anleitung{grid-template-columns:1fr}
  .kp-zwei,.kp-fertig{grid-template-columns:1fr}
  .kp-hier{display:none}
  .kp-schritt:not(.jetzt) .kp-schritt-text{display:none}
  .kp-tun button{min-height:48px}
  .kp-fertig .kp-grafik{max-width:240px}
}
.feld > .feld-titel{display:block}

/* Durchsagen & Tasten als eine Seite (Fassung 273, Stück 09/06).
   Seit Fassung 293 (D3): oben die Durchsage mit der Vorschau
   daneben (420 px, klebt), darunter Tasten, „Zuletzt gesendet" und
   die Pulte. */
.dt-seite{display:flex;flex-direction:column;gap:var(--a5)}
.dt-links{min-width:0}
.dt-rechts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--a5);align-items:start;min-width:0}
.dt-rechts > .dt-tasten{grid-column:1/-1}
.dt-karte,.dt-tasten,.dt-verlauf{display:flex;flex-direction:column;gap:var(--a3);padding:var(--a4)}
/* Die Karte der Durchsage besteht aus drei Feldern des Rasters (oben
   Stufe und Text, dann Weitere Angaben mit Wo und Wie lange, dann der
   Sendeknopf) — nahtlos wie EINE Karte, damit die Vorschau am Handy
   zwischen Text und Rest rutschen kann. */
.dt-durchsage{display:grid;grid-template-columns:minmax(0,1fr) 420px;grid-template-areas:"a p" "b p" "t p";
  column-gap:var(--a5);align-items:start;max-width:1144px}
.dt-durchsage > .karte{box-shadow:none}
.dt-teil-a{grid-area:a;border-bottom:0;border-radius:var(--r2) var(--r2) 0 0;padding-bottom:var(--a3)}
.dt-teil-b{grid-area:b;border-top:0;border-bottom:0;border-radius:0;padding-top:0;padding-bottom:var(--a3)}
.dt-durchsage > .dt-tun{grid-area:t;border-top:0;border-radius:0 0 var(--r2) var(--r2);padding-top:0;align-items:stretch}
.dt-vorschau-spalte{grid-area:p;position:sticky;top:var(--a5);min-width:0}
.dt-vorschau{display:flex;flex-direction:column;gap:var(--a2)}
.dt-vs-kopf{font-weight:600;font-size:var(--s3)}
.dt-vs-satz{margin:0;font-size:var(--s2);color:var(--gedaempft)}
.dt-vs-zeichen svg{display:block;width:36px;height:36px}
.dt-stufen{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--a2)}
button.dt-stufe{min-height:48px;justify-content:center;gap:var(--a2);padding:var(--a2) var(--a3);
  border:1px solid var(--linie-stark);border-radius:var(--r2);background:var(--flaeche);color:var(--tinte);font-weight:600}
button.dt-stufe:hover{background:var(--flaeche-2);filter:none}
.dt-stufe-kreis,.dt-stufe-satz{display:none}
.dt-stufe-wort{display:flex;flex-direction:column;align-items:center;min-width:0}
button.dt-stufe[aria-checked="true"]{border-width:2px}
button.dt-stufe[data-stufe="info"][aria-checked="true"]{background:var(--blauBg);color:var(--blau);border-color:var(--blau)}
button.dt-stufe[data-stufe="warnung"][aria-checked="true"]{background:var(--gelbBg);color:var(--gelb);border-color:var(--gelb)}
button.dt-stufe[data-stufe="notfall"][aria-checked="true"]{background:var(--notfall);color:var(--auf-notfall);border-color:var(--notfall)}
.dt-weitere > summary{display:flex;align-items:baseline;gap:var(--a2);min-height:44px;padding:var(--a2) var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);cursor:pointer}
.dt-weitere[open] > summary{margin-bottom:var(--a3)}
.dt-weitere > summary .leise{font-size:var(--s2)}
.dt-wowie{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--a4);align-items:start}
.dt-wowie-zeile{display:none}
.dt-tun-reihe{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a3)}
.dt-senden-grund{font-size:var(--s2);color:var(--gedaempft)}
.dt-kopf{font-size:var(--s5);font-weight:600;margin:0}
.dt-kopf-zeile{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap}
.dt-laeuft{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap;
  padding:var(--a3);border-radius:var(--r2);background:var(--rotBg);color:var(--rot-text)}
.dt-laeuft-text{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}
.dt-laeuft-text span{color:var(--tinte)}
.dt-meta{font-size:var(--s2);color:var(--gedaempft)}
.dt-laeuft-text .dt-meta{color:var(--gedaempft)}
.dt-segment{display:inline-flex;flex-wrap:wrap;gap:2px;padding:2px;border:1px solid var(--linie-stark);border-radius:var(--r1);background:var(--flaeche-2)}
.dt-segment button{min-height:40px;padding:0 var(--a3);background:transparent;color:var(--gedaempft);font-weight:600}
.dt-segment button[aria-checked="true"]{background:var(--flaeche);color:var(--tinte);box-shadow:var(--schatten-1)}
.dt-segment button[data-stufe="notfall"][aria-checked="true"]{background:var(--notfall);color:var(--auf-notfall)}
.dt-segment button:hover{filter:none;color:var(--tinte)}
.dt-segment button[data-stufe="notfall"][aria-checked="true"]:hover{color:var(--auf-notfall)}
.dt-karte textarea{min-height:88px;resize:vertical}
.dt-vorschlaege{display:flex;flex-wrap:wrap;gap:var(--a2);margin-top:var(--a2)}
button.dt-vorschlag{min-height:36px;padding:0 var(--a3);border:1px solid var(--linie-stark);border-radius:var(--r-voll);
  background:var(--flaeche);color:var(--tinte);font-size:var(--s3);font-weight:400}
button.dt-vorschlag:hover{background:var(--flaeche-2);filter:none}
.dt-tun{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a3)}
button.dt-senden{min-height:48px;padding:0 var(--a5)}
.dt-tasten-raster{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--a2)}
.dt-taste-huelle{position:relative;min-width:0}
button.dt-taste{width:100%;min-height:96px;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--a1);
  padding:var(--a3) 44px var(--a3) var(--a3);border:1px solid var(--linie-stark);border-radius:var(--r2);
  background:var(--flaeche);color:var(--tinte);text-align:left;font-weight:400;overflow-wrap:anywhere}
button.dt-taste b{font-size:15px;font-weight:600}
button.dt-taste:hover{background:var(--flaeche-2);filter:none}
button.dt-taste.an{border:2px solid var(--akzent);background:var(--akzent-weich)}
.dt-taste-satz{font-size:var(--s2);color:var(--gedaempft)}
button.dt-taste.an .dt-taste-satz{color:var(--akzent-text)}
button.dt-taste-bearbeiten{position:absolute;right:var(--a1);top:var(--a1);width:36px;height:36px;min-height:36px;padding:0;
  background:transparent;color:var(--gedaempft)}
button.dt-taste-bearbeiten:hover{background:var(--flaeche-3);color:var(--tinte);filter:none}
.dt-verlauf-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.dt-verlauf-liste li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--a3);align-items:baseline;
  padding:var(--a2) 0;border-top:1px solid var(--linie)}
.dt-verlauf-liste li:first-child{border-top:0}
.dt-zeit{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft);white-space:nowrap}
.dt-eintrag{display:flex;flex-direction:column;gap:2px;min-width:0}
.dt-eintrag-text{overflow-wrap:anywhere}
@media (max-width:1180px){
  .dt-durchsage{grid-template-columns:minmax(0,1fr) 340px}
  .dt-rechts{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:860px){
  .dt-verlauf-liste li{grid-template-columns:minmax(0,1fr)}
  .dt-tasten-raster{grid-template-columns:repeat(2,minmax(0,1fr))}
  button.dt-senden{width:100%}
}

/* Inhalte (Fassung 274, Stück 08) */
.reiter-knopf .reiter-zahl{margin-left:var(--a2);font-family:var(--mono);font-size:var(--s2);font-weight:400;color:var(--gedaempft)}
.bib-kachel{position:relative}
.bib-kachel .vk-name{font-size:15px;font-weight:600}
.bib-kachel .vk-mass{font-family:var(--sans);letter-spacing:0;text-transform:none}
button.bib-wahl{position:absolute;left:var(--a2);top:var(--a2);z-index:3;width:32px;height:32px;min-height:32px;padding:0;
  border:2px solid var(--marke-bild-text);border-radius:var(--r1);background:var(--marke-bild);color:transparent}
button.bib-wahl:hover{filter:none;color:var(--marke-bild-text)}
button.bib-wahl[aria-checked="true"]{background:var(--akzent);border-color:var(--akzent);color:var(--auf-akzent)}
.bib-kachel.gewaehlt{outline:2px solid var(--akzent);outline-offset:2px;background:var(--akzent-weich);border-radius:var(--r2)}
.bib-wahlleiste{position:sticky;bottom:var(--a3);display:flex;align-items:center;gap:var(--a2);margin-top:var(--a4)}
.bib-wahlleiste select{min-height:40px}
@media (max-width:860px){
  .bib-reiter{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
  .bib-reiter .reiter-knopf{flex:none}
  button.bib-wahl{width:44px;height:44px;min-height:44px}
}
/* Inhalte und Vorlagen in einer Hülle (D7, Fassung 296) */
.vk.vk-oben{display:flex;flex-direction:column;align-items:stretch;gap:var(--a4);padding:var(--a4) 0 0}
.kat-filter{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2) var(--a3)}
.kat-filter .kat-suchzeile .suche{min-width:220px;max-width:320px}
.kat-pillen{display:flex;flex-wrap:wrap;gap:var(--a2);flex:1 1 320px;min-width:0}
button.kat-pille{min-height:40px;padding:0 var(--a3);gap:var(--a2);border:1px solid var(--linie-stark);border-radius:var(--r-voll);
  background:var(--flaeche);color:var(--tinte);font-weight:400;font-size:var(--s3)}
button.kat-pille:hover{background:var(--flaeche-2);filter:none}
button.kat-pille.an{border:2px solid var(--tinte);font-weight:600}
.kat-pille-zahl{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft)}
.kat-filter .vk-format{margin-left:auto;min-width:180px}
.kat-blatt-huelle{position:fixed;inset:0;z-index:45;background:var(--abdeckung);display:flex;justify-content:flex-end;
  animation:einblenden .12s ease}
.kat-blatt{width:min(480px,100vw);height:100%;display:flex;flex-direction:column;background:var(--flaeche);
  border-left:1px solid var(--linie);box-shadow:var(--schatten-2)}
.kat-blatt-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);padding:var(--a3) var(--a4);
  border-bottom:1px solid var(--linie)}
.kat-blatt-kopf h2{font-size:var(--s5);font-weight:600;margin:0;overflow-wrap:anywhere}
button.kat-blatt-zu{width:44px;height:44px;min-height:44px;padding:0;background:transparent;color:var(--gedaempft);flex:none}
button.kat-blatt-zu:hover{background:var(--flaeche-2);color:var(--tinte);filter:none}
.kat-blatt-rumpf{flex:1;overflow:auto;padding:var(--a4);display:flex;flex-direction:column;gap:var(--a3)}
.kat-blatt-bild{width:100%}
.kat-blatt-unter{font-size:var(--s3);font-weight:600;margin:0 0 var(--a1)}
.kat-blatt-rumpf .vs-aehnlich{display:flex;flex-direction:column;gap:var(--a1)}
.kat-blatt-seite{align-self:flex-start}
.kat-blatt-fuss{padding:var(--a3) var(--a4);border-top:1px solid var(--linie);display:flex;flex-direction:column;gap:var(--a2)}
.kat-blatt-fuss button{width:100%;justify-content:center}
.kat-blatt-fuss .vs-beruhigung{margin:0;font-size:var(--s2);color:var(--gedaempft)}
.med-ablage-kopf{display:flex;align-items:center;justify-content:center;gap:var(--a1)}
/* „Link anlegen" (D7): Art als Karten, Adresse in Mono mit Erkennung. */
.link-arten{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--a2);margin-bottom:var(--a3)}
button.link-art{min-height:80px;flex-direction:column;justify-content:center;gap:var(--a2);padding:var(--a2);
  border:1px solid var(--linie-stark);border-radius:var(--r2);background:var(--flaeche);color:var(--tinte);font-weight:400;white-space:normal}
button.link-art:hover{background:var(--flaeche-2);filter:none}
button.link-art[aria-checked="true"]{border:2px solid var(--tinte);background:var(--flaeche-2);font-weight:600}
.link-art-zeichen{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--r1);
  background:var(--flaeche-3);color:var(--tinte);font-family:var(--mono);font-weight:600}
input.mono{font-family:var(--mono)}
/* Das Pro-Schloss (Fassung 356): ein Satz mit Weg, vor der Aktion. */
button.link-art{position:relative}
.link-art-pro{position:absolute;top:var(--a1);right:var(--a1);display:inline-flex;color:var(--gedaempft)}
.pro-schloss{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2)}
.pro-schloss > svg{flex:none}
.pro-schloss > span{flex:1 1 16em}
.link-schloss{margin-bottom:var(--a3)}
button.mit-schloss > svg:first-child{margin-right:var(--a1)}
.link-antwort{min-height:22px;margin-top:var(--a1);font-size:var(--s2);color:var(--gedaempft)}
.link-antwort.gut{color:var(--gruen)}
.link-antwort.schlecht{color:var(--rot-text)}
@media (max-width:860px){
  /* Handy: Reiter als Pillen, die waagerecht rollen; der Verlauf rechts
     sagt, dass es weitergeht (D7, Tafel 7c). */
  .bib-reiter{gap:var(--a2);padding-bottom:var(--a2);border-bottom:0;
    -webkit-mask-image:linear-gradient(90deg,black 85%,transparent);mask-image:linear-gradient(90deg,black 85%,transparent)}
  .bib-reiter .reiter-knopf{min-height:44px;padding:0 var(--a3);border:1px solid var(--linie-stark);border-radius:var(--r-voll)}
  .bib-reiter .reiter-knopf.aktiv{border:2px solid var(--tinte);background:var(--flaeche-2)}
  .kat-filter .vk-format{margin-left:0}
  .kat-pillen{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  button.kat-pille{flex:none}
}
.bib-kachel > .kachel-tun{position:absolute;right:var(--a2);top:var(--a2);z-index:3;margin:0;padding:0;border:0}
.bib-kachel > .kachel-tun button{background:var(--marke-bild);color:var(--marke-bild-text);border:0;min-height:32px;width:32px;padding:0}
.bib-kachel > .kachel-tun button:hover{filter:none;border:1px solid var(--marke-bild-text)}

/* Hilfe (Fassung 275, Stück 10) */
.hi-suchfeld{position:relative;max-width:720px;color:var(--gedaempft)}
.hi-suchfeld svg{position:absolute;left:var(--a4);top:50%;transform:translateY(-50%);pointer-events:none}
input.hi-suche-gross{width:100%;height:52px;padding-left:48px;border-radius:var(--r2)}
.hi-zahl{margin-top:var(--a2);font-size:var(--s2);color:var(--gedaempft)}
.hi-treffer{list-style:none;margin:var(--a2) 0 0;padding:0;max-width:720px;border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche)}
.hi-treffer li+li{border-top:1px solid var(--linie)}
button.hi-treffer-zeile{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:var(--a3);row-gap:2px;
  width:100%;text-align:left;justify-content:stretch;align-items:center;padding:var(--a3) var(--a4);background:transparent;color:var(--tinte);font-weight:400}
button.hi-treffer-zeile b{font-weight:600}
button.hi-treffer-zeile svg{grid-column:2;grid-row:1 / span 2;color:var(--gedaempft)}
button.hi-treffer-zeile:hover{background:var(--flaeche-2);filter:none}
.hi-meta{font-size:var(--s2);color:var(--gedaempft)}
.hi-nichts{display:flex;flex-direction:column;gap:var(--a1);padding:var(--a4)}
.hi-karten{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--a3);margin-top:var(--a5)}
.hi-karte{display:flex;flex-direction:column;gap:var(--a2);padding:var(--a4);border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche)}
.hi-karte-kopf{display:flex;align-items:center;gap:var(--a3)}
.hi-karte-symbol{display:grid;place-items:center;width:36px;height:36px;border-radius:var(--r1);background:var(--akzent-weich);color:var(--akzent-text);flex:none}
.hi-gruppe-titel{margin:0;font-size:var(--s4);font-weight:600}
.hi-karte-liste{list-style:none;margin:0;padding:0}
.hi-karte-liste button.hi-link{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);width:100%;min-height:40px;
  padding:var(--a1) 0;background:transparent;color:var(--tinte);font-weight:400;text-align:left;border-radius:0;border-top:1px solid var(--linie)}
.hi-karte-liste li:first-child button.hi-link{border-top:0}
.hi-karte-liste button.hi-link svg{flex:none;color:var(--gedaempft)}
.hi-karte-liste button.hi-link:hover{color:var(--akzent-text);filter:none}
.hi-mehr{align-self:flex-start}
.hi-artikel-seite{display:grid;grid-template-columns:220px minmax(0,680px);gap:var(--a6);align-items:start}
.hi-artikel-seite.ohne-toc{grid-template-columns:minmax(0,680px)}
.hi-toc{position:sticky;top:var(--a4);display:flex;flex-direction:column;gap:var(--a2);font-size:var(--s3)}
.hi-toc ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.hi-toc a{display:block;padding:var(--a1) var(--a3);border-left:var(--aktiv-balken) solid transparent;color:var(--gedaempft);text-decoration:none}
.hi-toc a[aria-current="location"]{border-left-color:var(--akzent);color:var(--tinte);font-weight:600;background:var(--flaeche-2)}
.hi-artikel{font-size:var(--s4);line-height:1.6;display:flex;flex-direction:column;gap:var(--a4)}
.hi-artikel .hi-kurz{margin:0;font-size:var(--s4)}
.hi-abschnitt{padding:var(--a3);margin:0 calc(-1 * var(--a3));border-radius:var(--r2);border:1px solid transparent;scroll-margin-top:var(--a6)}
.hi-abschnitt.hervor{background:var(--akzent-weich);border-color:var(--akzent)}
.hi-abschnitt h2{display:flex;align-items:baseline;gap:var(--a2);margin:0 0 var(--a2);font-size:var(--s5);font-weight:600}
.hi-anker{color:var(--gedaempft);text-decoration:none;font-weight:400}
.hi-abschnitt p{margin:0}
.hi-geholfen{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2);padding-top:var(--a4);border-top:1px solid var(--linie)}
.hi-danke{font-size:var(--s3);color:var(--gruen)}
@media (max-width:860px){
  .hi-artikel-seite{grid-template-columns:minmax(0,1fr)}
  .hi-toc{display:none}
}


/* Einführung (Fassung 276, Stück 11) */
body.tour-laeuft #seite{z-index:91}
.tour-ziel{box-shadow:0 0 0 2px var(--akzent);border-radius:var(--r1)}
.tour.tour-neben{--spitze:48px;position:fixed;width:380px;max-width:calc(100vw - 32px);margin:0}
.tour.tour-neben::before{content:"";position:absolute;left:-8px;top:var(--spitze);width:16px;height:16px;margin-top:-8px;
  background:var(--flaeche);transform:rotate(45deg);border-radius:2px}
.tour-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);margin-bottom:var(--a3)}
.tour-kopf .tour-punkte{margin:0}
.tour-zahl{font-family:var(--mono)}
.tour-punkte i{width:8px}
.tour-punkte i.an{width:22px}
@media (max-width:860px){
  .tour.tour-blatt{position:fixed;left:0;right:0;bottom:0;max-width:none;border-radius:var(--r4) var(--r4) 0 0}
}
.pv-fertig{display:flex;flex-direction:column;align-items:flex-start;gap:var(--a2);margin-bottom:var(--a4)}
.pv-fertig h3{margin:0;font-size:var(--s5)}
.pv-fertig p{margin:0;line-height:1.5}
.pv-adresse{overflow-wrap:anywhere}
.pv-haken{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--gruen);color:var(--flaeche)}


/* Untere Navigation am Handy (Fassung 278, Stück 06). Dunkel wie die
   Seitenleiste; sichtbar nur bis 860 px und nicht im Playlist-Editor. */
.handy-nav{display:none;position:fixed;left:0;right:0;bottom:0;z-index:41;
  background:linear-gradient(180deg,var(--seite-oben),var(--seite-unten));border-top:1px solid var(--seite-linie);
  padding-bottom:env(safe-area-inset-bottom)}
.handy-nav .hn-knopf{flex:1;min-width:0;min-height:56px;flex-direction:column;gap:2px;padding:var(--a1) 2px;border-radius:0;
  background:transparent;color:var(--seite-gedaempft);font-size:var(--s2);font-weight:400;line-height:1.2;
  border-top:var(--aktiv-balken) solid transparent;white-space:normal;text-align:center}
.handy-nav .hn-knopf:hover{filter:none;color:var(--seite-text)}
.handy-nav .hn-knopf.an{background:var(--seite-flaeche-fest);color:var(--seite-text);border-top-color:var(--akzent);font-weight:600}
.handy-nav .hn-knopf.laeuft{color:var(--seite-rot);box-shadow:inset 0 0 0 1px var(--seite-rot)}
@media (max-width:860px){
  .handy-nav{display:flex}
  .handy-nav.versteckt{display:none}
  body.mit-handy-nav .handy-leiste{bottom:calc(56px + env(safe-area-inset-bottom))}
  body.mit-handy-nav .seiten-koerper{padding-bottom:calc(var(--a7) + 72px + env(safe-area-inset-bottom))}
  body.mit-handy-nav.mit-leiste .seiten-koerper{padding-bottom:calc(var(--a7) + 140px + env(safe-area-inset-bottom))}
}

/* „Ändern" und „Schnell ändern" (Fassung 278, Stück 06) */
.ae-suche{width:100%;max-width:560px;min-height:48px}
.ae-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;max-width:720px;
  border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche)}
.ae-liste li+li{border-top:1px solid var(--linie)}
.ae-liste > .leise{padding:var(--a4)}
button.ae-zeile{display:grid;grid-template-columns:112px minmax(0,1fr) auto;gap:var(--a3);align-items:center;width:100%;
  padding:var(--a2) var(--a3);background:transparent;color:var(--tinte);text-align:left;font-weight:400;border-radius:0;justify-content:stretch}
button.ae-zeile:hover{background:var(--flaeche-2);filter:none}
button.ae-zeile > svg{color:var(--gedaempft)}
.ae-mini{display:block;width:112px}
.ae-mini .vk-rahmen,.ae-vorschau .vk-rahmen{width:100%;border-radius:var(--r1);overflow:hidden}
.ae-text{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere;font-size:var(--s3);color:var(--gedaempft)}
.ae-text b{font-size:15px;color:var(--tinte);font-weight:600}
.ae-uhr{font-family:var(--mono)}
.ae-alle{align-self:flex-start;display:inline-flex;align-items:center;gap:var(--a1)}
.ae-kopf{display:flex;flex-direction:column;gap:2px;margin-bottom:var(--a3)}
.ae-kopf span{font-size:var(--s3);color:var(--gedaempft)}
.ae-vorschau{margin-bottom:var(--a3);max-width:420px}
.ae-gesendet{display:flex;align-items:center;gap:var(--a2);color:var(--gruen);font-weight:600;margin-bottom:var(--a2)}
.dialog.blatt-unten .blatt-griff{display:none}
@media (max-width:860px){
  #dialog .dialog.blatt-unten{position:fixed;left:0;right:0;bottom:0;top:auto;max-width:none;width:100%;max-height:88vh;overflow:auto;
    border-radius:var(--r4) var(--r4) 0 0;margin:0;padding-bottom:calc(var(--a4) + env(safe-area-inset-bottom))}
  .dialog.blatt-unten .blatt-griff{display:block;width:40px;height:4px;border-radius:2px;background:var(--linie-stark);margin:0 auto var(--a3)}
  .ae-tun{flex-direction:row}
  .ae-tun button{flex:1;min-height:48px}
}

/* Verwaltung: ein Aufbau für alle Seiten (Fassung 279, Stück 07) */
.vw-seite{max-width:1100px}
.vw-seite > .est-inhalt{max-width:none;display:flex;flex-direction:column;gap:var(--a5)}
.vw-bereich{display:flex;flex-direction:column;gap:var(--a5)}
.vw-karte{background:var(--flaeche);border:1px solid var(--linie);border-radius:var(--r2);min-width:0}
.vw-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap;
  padding:var(--a3) var(--a4);border-bottom:1px solid var(--linie)}
.vw-titel{display:flex;align-items:center;gap:var(--a1);margin:0;font-size:16px;font-weight:600}
.vw-kopf-rechts{display:flex;align-items:center;gap:var(--a3);margin-left:auto}
.vw-meta{font-size:var(--s3);color:var(--gedaempft)}
.vw-inhalt{padding:var(--a4);min-width:0}
.vw-inhalt > .feld:last-child,.vw-inhalt > :last-child{margin-bottom:0}
/* Eine Tabelle allein in der Karte steht bündig an ihren Rändern. */
.vw-rolle{overflow-x:auto;max-width:100%}
.vw-inhalt:has(> .vw-rolle:only-child),.vw-inhalt:has(> :only-child > .vw-rolle:only-child){padding:0 var(--a1)}
.vw-tabelle{width:100%;border-collapse:collapse;font-size:15px}
.vw-tabelle th{font-size:var(--s3);font-weight:600;color:var(--gedaempft);text-align:left;white-space:nowrap;
  padding:var(--a3) var(--a3);border-bottom:1px solid var(--linie)}
.vw-tabelle td{padding:var(--a3) var(--a3);border-bottom:1px solid var(--linie);vertical-align:middle}
.vw-tabelle tr:last-child td{border-bottom:0}
.vw-tabelle .rechts{text-align:right}
.vw-mono{font-family:var(--mono);font-size:var(--s3);white-space:nowrap}
.vw-leise{color:var(--gedaempft)}
.vw-leer{color:var(--gedaempft);padding:var(--a3) 0}
.vw-tabelle td.vw-leer{padding:var(--a4) var(--a3)}
.vw-tabelle .text-knopf{color:var(--akzent-text);font-weight:600;text-decoration:none;font-size:var(--s3);min-height:44px}
.vw-tabelle .text-knopf:hover{text-decoration:underline}
.vw-filter{display:flex;flex-wrap:wrap;gap:var(--a3)}
.vw-filter-feld{display:flex;flex-direction:column;gap:var(--a1);flex:0 1 240px;min-width:0}
.vw-filter-feld label{font-size:var(--s3);color:var(--gedaempft)}
.vw-filter-feld select{width:100%}
.vw-von-bis{display:grid;grid-template-columns:1fr 1fr;gap:var(--a2)}
.vw-filter-feld:has(.vw-von-bis){flex-basis:320px}
.wg-satz{margin:var(--a4) 0 0;font-size:15px}
.wg-folie{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.wg-unter td{background:var(--flaeche-2)}
.wg-unter .unterzeile{margin:0;padding-left:var(--a4);overflow-wrap:anywhere}
.st-tabelle .vw-leer{padding:0}
@media (max-width:860px){
  .vw-filter-feld,.vw-filter-feld:has(.vw-von-bis){flex:1 1 100%}
  .vw-kopf{padding:var(--a3)}
  .vw-inhalt{padding:var(--a3)}
}
.vw-karte .pro-tabelle-huelle{max-height:none;overflow:visible;border:0;border-radius:0}
.vw-karte .pro-tabelle-huelle thead th{position:static;background:transparent}
.vw-mehr{display:flex;justify-content:center;padding:var(--a3) 0 var(--a4)}

/* Zugänge & Rollen (Fassung 280, Stück 07) */
.vw-reiter{padding:0;margin-bottom:calc(-1 * var(--a2))}
.vw-pille{display:inline-flex;align-items:center;min-height:26px;padding:0 var(--a2);border-radius:var(--r-voll);
  font-size:var(--s2);font-weight:600;white-space:nowrap;background:var(--flaeche-3);color:var(--tinte)}
.vw-pille-admin{background:var(--akzent-weich);color:var(--akzent-text)}
.vw-pille-gelb{background:var(--gelbBg);color:var(--gelb)}
.vw-umbruch{overflow-wrap:anywhere}
.vw-schalter-zeile{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);min-height:44px}
.vw-schalter-zeile .mit-frage-zeile{margin:0}
.vw-nach-schalter{margin-top:var(--a3);padding-top:var(--a3);border-top:1px solid var(--linie)}
.rm-ja{color:var(--gruen);font-weight:600}
.rm-nein{color:var(--gedaempft)}

/* Benachrichtigungen: Schalterzeilen (Fassung 281, Stück 07) */
.vw-schalter-zeile + .vw-schalter-zeile,.feld + .vw-schalter-zeile{border-top:1px solid var(--linie);padding-top:var(--a3);margin-top:var(--a3)}
.vw-zeile-text{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.vw-zeile-rechts{display:flex;align-items:center;gap:var(--a3);flex:none}
.vw-wahl-kurz{width:auto;min-width:112px}
#mel-adressen{width:100%}
/* Am Handy bricht nur eine Zeile mit Auswahl um; ein Schalter allein
   bleibt neben seinem Satz. */
@media (max-width:860px){
  /* Die Seite hat schon ihren Rand von 16 px; die Spalte darin keinen zweiten. */
  .vw-seite > .est-inhalt{padding:var(--a4) 0}
  .vw-schalter-zeile:has(select){flex-wrap:wrap}
  .vw-schalter-zeile:has(select) .vw-zeile-text{flex-basis:100%}
  .vw-zeile-rechts{margin-left:auto}
}

/* Marke (Fassung 282, Stück 07): Logos als Kacheln, eine Hausfarbe, Schriften */
.mk-logos{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--a3)}
.mk-kachel{display:flex;flex-direction:column;gap:var(--a2);min-width:0;padding:var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2)}
.est-logo-buehne.mk-buehne{aspect-ratio:16/9;width:100%;height:auto;min-height:0;display:flex;
  align-items:center;justify-content:center;border-radius:var(--r1);border:1px dashed var(--linie)}
.mk-bild{height:48px;width:auto;max-width:80%;display:block}
.mk-fuss{display:flex;align-items:center;justify-content:space-between;gap:var(--a2)}
.mk-name{display:flex;flex-direction:column;gap:2px;min-width:0}
.mk-meta{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.mk-pruefung{color:var(--rot);font-size:var(--s2)}
.mk-kachel > .text-knopf{align-self:flex-start}
.mk-farbe{display:flex;align-items:center;gap:var(--a3)}
.mk-muster{display:inline-flex;width:44px;height:44px;border-radius:var(--r1);overflow:hidden;
  border:1px solid var(--linie);flex:none}
input.mk-muster-feld{width:56px;height:56px;min-height:0;margin:-6px;padding:0;border:0;background:none;cursor:pointer}
.mk-farbe-text{display:flex;flex-direction:column;gap:2px}
.mk-hex{font-family:var(--mono);font-size:var(--s3)}
.mk-kontrast{font-size:var(--s2);color:var(--gedaempft)}
.schrift-zeile{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);
  padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2);margin-bottom:var(--a2)}
.schrift-text{min-width:0}
.schrift-zeile .schrift-probe{font-size:20px;overflow-wrap:anywhere}
.schrift-zeile .schrift-name{font-size:var(--s2);color:var(--gedaempft);overflow-wrap:anywhere}
.mk-ablage{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--a2);
  padding:var(--a4);border:1.5px dashed var(--feld-rand);border-radius:var(--r2);text-align:center;color:var(--gedaempft)}
.mk-ablage.drueber{border-color:var(--akzent);background:var(--akzent-weich)}
.mk-ablage .mk-waehlen{color:var(--akzent-text);font-weight:600;font-size:inherit}
.mk-formate{display:flex;align-items:center;justify-content:center;gap:var(--a1);flex-basis:100%}
.mk-formate code{font-family:var(--mono);font-size:var(--s2)}
.schrift-liste:not(:empty){margin-bottom:var(--a3)}
.mk-recht{display:flex;align-items:center;gap:var(--a2);margin-top:var(--a3)}
/* Nachtrag zu Fassung 464: Der Satz am Häkchen bricht um, statt am Kartenrand
   abgeschnitten zu werden; das „?“ dahinter bleibt sichtbar. */
.mk-recht label.haken{min-width:0}
.mk-recht label.haken span{white-space:normal}

/* Lizenzen & Schnittstellen als Karten (Fassung 283, Stück 07) */
.vw-inhalt > .falt-koerper{border-top:0;padding:0;margin:0}

/* Durchsage in Daumen-Form (Fassung 284, Stück 06) */
.dt-dauer-kurz{display:none}
@media (max-width:860px){
  .dt-karte .dt-segment[role="radiogroup"]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;
    gap:var(--a2);padding:0;border:0;background:transparent}
  .dt-karte .dt-segment button{min-height:48px;padding:var(--a2);border:2px solid var(--linie);border-radius:var(--r2);
    background:var(--flaeche);color:var(--tinte);white-space:normal}
  .dt-karte .dt-segment button[aria-checked="true"]{box-shadow:none;border-color:var(--tinte)}
  .dt-karte .dt-dauer-wahl{display:none}
  .dt-karte button.dt-senden{min-height:56px}
  /* D3, Tafel 3b: Stufen als hohe Karten mit Kreis und Satz, die
     Vorschau unter dem Text, Wo und Wie lange hinter „ändern", der
     Sendeknopf klebt über der unteren Leiste. */
  .dt-durchsage{grid-template-columns:minmax(0,1fr);grid-template-areas:"a" "p" "b" "t"}
  .dt-vorschau-spalte{position:static;background:var(--flaeche);border-left:1px solid var(--linie);
    border-right:1px solid var(--linie);padding:0 var(--a4) var(--a3)}
  .dt-vs-kopf,.dt-vs-satz{display:none}
  .dt-stufen{grid-template-columns:minmax(0,1fr)}
  button.dt-stufe{min-height:64px;justify-content:flex-start;gap:var(--a3);text-align:left}
  .dt-stufe-kreis{display:block;flex:none;width:22px;height:22px;border:2px solid currentColor;border-radius:50%}
  button.dt-stufe[aria-checked="true"] .dt-stufe-kreis{background:radial-gradient(circle,currentColor 0 40%,transparent 46%)}
  .dt-stufe-wort{align-items:flex-start}
  .dt-stufe-satz{display:block;font-size:var(--s2);font-weight:400}
  .dt-wowie{display:none;grid-template-columns:minmax(0,1fr)}
  .dt-wowie.offen{display:grid}
  .dt-durchsage > .dt-tun{position:sticky;bottom:calc(56px + env(safe-area-inset-bottom));z-index:5;
    padding-top:var(--a3);border-top:1px solid var(--linie)}
  .dt-tun-reihe{flex-direction:column;align-items:stretch;text-align:center}
  .dt-wowie-zeile{display:block;text-align:center;font-size:var(--s2);color:var(--gedaempft)}
  .dt-wowie-zeile .text-knopf{font-size:var(--s2);min-height:44px}
}

/* Webhook-Zustand (Fassung 286, Stück 07) */
.wh-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);flex-wrap:wrap}
.wh-adresse{font-family:var(--mono);font-size:var(--s3);overflow-wrap:anywhere;min-width:0}
.vw-pille.wh-gut{background:var(--gruenBg);color:var(--gruen)}
.vw-pille.wh-fehler{background:var(--rotBg);color:var(--rot-text)}

/* Mono nur für Daten (E5, Fassung 286)
   ------------------------------------------------------------
   Zahlen, Uhrzeiten, Kennungen, Adressen, Maße und Wochentage bleiben
   in Mono. Überschriften, Kicker, Spaltenköpfe und Abschnittstitel
   stehen in Sans — dort war Mono Schmuck und keine Angabe. */
.mono-kopf,.seite-bereich,.seite-titel,.karte-kopf,.vorschau-kopf,.tabelle th,.gruppenkopf b,.klappe > summary b,.nf-vs-kicker,.vb-kicker,.vv-kicker,.qz-kat-name,.symbol-gruppe,.menue .kopfzeile,.seiten-zeile-kopf,.seiten-anzahl,.pl-sortknopf,.pl-kopfzeile,.tab-kopf-zelle,.kd-kachel .kd-kicker,.kk-band .kk-marke,.ts-gruppenname,.anm-oder{
  font-family:var(--sans);letter-spacing:.04em}
/* Der Kicker über dem Seitentitel wie im Entwurf: „Verwaltung", Sans,
   600, gedämpft — keine Versalien. */
.seiten-marke{font-family:var(--sans);font-size:var(--s2);font-weight:600;letter-spacing:0;text-transform:none}
/* Fassung 288: „Bildschirm zuweisen" aus der Playlist-Liste (F-12) und der
   Handy-Kicker in Sans wie der Kicker am Rechner (F-20). */
.pl-zuweisen-liste{display:grid;gap:var(--a2);margin-bottom:var(--a3)}
.pl-zuweisen-zeile{display:flex;align-items:center;gap:var(--a2);padding:var(--a2) var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);min-height:44px;cursor:pointer}
/* Fassung 410 (L-597 b): der Dialog „Auf Bildschirm zeigen". Die Liste
   rollt in sich, damit Suche, Warnzeile und Knöpfe stehen bleiben; die
   Gruppenköpfe kleben oben in der Liste. Bis 409 stand hier nur die
   Liste von „Bildschirm zuweisen" (`.pl-zuweisen-zeile` oben, bleibt für
   nichts mehr in Gebrauch). */
.dialog.abz-dialog{max-width:620px}
.abz-satz{margin:0 0 var(--a3);font-size:var(--s2);color:var(--gedaempft)}
.abz-suche{width:100%;margin:0 0 var(--a3)}
.abz-liste{max-height:min(50vh,460px);overflow:auto;overscroll-behavior:contain;
  border:1px solid var(--linie);border-radius:var(--r2)}
.abz-gruppe-kopf{position:sticky;top:0;z-index:1;display:flex;align-items:center;justify-content:space-between;
  gap:var(--a2);min-height:40px;padding:var(--a1) var(--a3);background:var(--flaeche-2);color:var(--beschriftung);
  border-bottom:1px solid var(--linie)}
.abz-gruppe-name{min-width:0;font-size:var(--s1);font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  overflow-wrap:anywhere}
button.abz-alle{flex:none;min-height:32px;padding:0 var(--a1);color:var(--akzent-text);font-weight:600;
  text-decoration:underline}
.abz-zeile{display:flex;align-items:flex-start;gap:var(--a3);min-height:52px;margin:0;
  padding:var(--a2) var(--a3);border-bottom:1px solid var(--linie);cursor:pointer;
  font-size:var(--s3);font-weight:400;color:var(--tinte)}
.abz-gruppe:last-of-type .abz-zeile:last-child{border-bottom:0}
/* Am Handy macht `label:has(> input[type="checkbox"])` jedes Kästchen-Label
   zu `inline-flex` — die Zeilen waren dort nur so breit wie ihr Text
   (gesehen bei 390 px). */
.abz-liste label.abz-zeile{display:flex;align-items:flex-start}
.abz-zeile:hover{background:var(--flaeche-2)}
.abz-zeile.gewaehlt{background:var(--akzent-weich);color:var(--tinte)}
.abz-zeile.gesperrt{cursor:not-allowed}
/* Seit Fassung 413 (nach der Prüfung von 412): Im Dunkelmodus sah ein
   gesperrtes Kästchen fast aus wie ein freies (Füllung beide 59, Rahmen 98
   gegen 133, im Browser gemessen); seit 412 sperrt das Format beim Anhaken
   schnell die Hälfte der Zeilen. Abgeblendet wie die gesperrten Schalter
   (`.gr-sp-an:disabled`): jetzt Füllung 40, Rahmen 58 (hell: Rahmen 235
   gegen 118 frei). */
.abz-zeile.gesperrt .abz-kasten{opacity:.45}
.abz-kasten{flex:none;width:20px;height:20px;margin:2px 0 0;accent-color:var(--tinte);cursor:inherit}
.abz-text{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.abz-kopf{display:flex;align-items:center;flex-wrap:wrap;gap:var(--a1) var(--a2);min-width:0}
.abz-name{font-weight:600;overflow-wrap:anywhere}
.abz-format{display:inline-flex;align-items:center;gap:var(--a1);font-size:var(--s1);color:var(--gedaempft)}
.abz-format:empty{display:none}
.abz-hinweise{font-size:var(--s2);color:var(--gedaempft)}
.abz-h svg{vertical-align:-2px;margin-right:2px}
.abz-h-ersetzt,.abz-h-format{color:var(--akzent-text)}
.abz-h-weg{color:var(--rot-text)}
.abz-leer{margin:0;padding:var(--a4) var(--a3);font-size:var(--s2);color:var(--gedaempft)}
.abz-warn,.abz-fehler{display:flex;align-items:flex-start;gap:var(--a2);margin:var(--a3) 0 0;
  font-size:var(--s2);color:var(--rot-text)}
.abz-warn svg{flex:none;margin-top:1px}
.abz-warn:empty,.abz-fehler:empty{margin:0}
.abz-fuss{align-items:center}
.abz-zahl{margin-right:auto;font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
/* Bis 860 px geht der Dialog über die ganze Fläche (s. oben); dann rollt
   der Dialog selbst und die Gruppenköpfe kleben an seinem Rand. (Bis zur
   Prüfung von 410 stand hier „Ab 860 px“.) Das „+“ in der Spalte „Läuft
   auf“ wird dort 44 × 44 wie jeder Knopf, als Kreis: Mit 32 px Breite und
   der Mindesthöhe von 44 war es ein hohes Oval. */
@media (max-width:860px){
  .abz-zahl{flex:1 1 100%}
  .abz-liste{max-height:none;overflow:visible}
  .abz-gruppe-kopf{top:calc(-1 * var(--a4))}
  #app button.pl-wo-plus{width:44px;height:44px}
  #app button.pl-wo-plus.gesperrt{width:auto}
}
.handy-kicker{font-family:var(--sans);font-weight:600;letter-spacing:0;text-transform:none}
/* ============================================================
   Fassung 290 · D11 Bauteile (UX-Runde 2)
   ============================================================ */
/* R2: ein Menü — 220 px, Zeilen 40 px, Löschen zuletzt und abgetrennt. */
.kachel-menue{min-width:220px}
.kachel-menue-eintrag.mit-trenner{margin-top:var(--a1);border-top:1px solid var(--linie);
  border-radius:0 0 var(--r1) var(--r1)}
/* R7: Fokus auf der dunklen Leiste als Bernstein-Ring, 2 px Abstand; die
   Liste rollt mit dünner Leiste, Hilfe und Kontomenü bleiben unten. */
#seite button:focus-visible,#seite a:focus-visible{outline:2px solid var(--akzent);outline-offset:2px}
.seite .haupt-nav{scrollbar-width:thin;scrollbar-color:var(--seite-linie) transparent}
/* R8: Tippflächen am Handy mindestens 44 × 44 px — auch Kästchen, „⋯", Chips
   und Textknöpfe. */
@media (max-width:860px){
  .text-knopf,.kachel-mehr,.chip,.hilfe-link{min-height:44px}
  .kachel-mehr{min-width:44px}
  input[type=checkbox]:not(.nur-vorlesen){width:24px;height:24px}
  label:has(> input[type=checkbox]){min-height:44px;display:inline-flex;align-items:center;gap:var(--a2)}
  /* F-49 (Fassung 311): Kästchen in Listen ohne Beschriftung — die Fläche
     darum hält R8 ein. 44 − 24 = 20, je Seite 10 px Rand nach innen. */
  .tipp-flaeche{width:44px;height:44px;margin:-10px}
  /* R6: am Handy kein Kicker über dem Titel. */
  .handy-kicker{display:none}
}
.loesch-reihe{justify-content:flex-end}
.pl-bereit{margin:0 0 var(--a2)}
/* R1: Fehler am Feld. */
.feld-fehler{border-color:var(--rot) !important;box-shadow:0 0 0 1px var(--rot)}
.feld-fehlertext{margin-top:var(--a1);color:var(--rot-text);font-size:var(--s2);font-weight:600}
/* R3: In der Rückfrage ist Löschen rot gefüllt — dieselbe modusfeste Fläche
   wie der Notfall-Auslöser (8,91:1 in beiden Modi). */
button.gefahr.gefahr-voll{background:var(--notfall);color:var(--auf-notfall);border-color:var(--notfall)}
button.gefahr.gefahr-voll:hover{background:var(--notfall);filter:brightness(1.1)}
button.gefahr.gefahr-voll:focus-visible{outline-color:var(--fokus)}
/* K-02 (Fassung 291): Lizenzlage am Handy — Name und Zeile über die volle
   Breite, darunter die drei Zahlen, darunter die Knöpfe; kein waagerechtes
   Rollen mehr. */
@media (max-width:860px){
  .kunde{flex-wrap:wrap}
  .kunde .k-name{flex:1 1 100%}
  .kunde .k-zahl{flex:1 1 0;min-width:0}
  .kunde > button{flex:1 1 auto;min-height:44px}
}
/* Fassung 292 (D4): die laufende Durchsage als rote Zeile in „Heute". */
.db-zl.db-zl-durchsage{grid-template-columns:44px 1fr;background:var(--notfall);color:var(--auf-notfall);border-radius:var(--r2);
  padding:var(--a2) var(--a3);margin:var(--a1) calc(-1 * var(--a2))}
.db-zl-durchsage .db-zl-zeit{color:var(--auf-notfall)}
.db-zl-durchsage .db-zl-satz{display:flex;flex-direction:column;gap:var(--a1)}
.db-zl-durchsage-fuss{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);font-size:var(--s2)}
.db-zl-durchsage .db-zl-beenden{background:transparent;color:var(--auf-notfall);border:1px solid var(--auf-notfall);min-height:36px}
.db-zl-durchsage .db-zl-beenden:focus-visible{outline-color:var(--auf-notfall)}
/* Fassung 292 (D5): leere Bildschirme-Seite als Karte. */
.gr-leer-karte{display:flex;align-items:center;gap:var(--a5);padding:var(--a5);border:1px solid var(--linie);
  border-radius:var(--r3);background:var(--flaeche);max-width:760px}
.gr-leer-karte .kp-grafik{flex:none;width:200px}
.gr-leer-text h2{margin:0 0 var(--a2);font-size:var(--s4)}
.gr-leer-text p{margin:0 0 var(--a3);color:var(--gedaempft)}
@media (max-width:860px){.gr-leer-karte{flex-direction:column;align-items:stretch}.gr-leer-karte .kp-grafik{width:auto}}
.db-start-schritt.naechster{border-color:var(--akzent);box-shadow:0 0 0 .5px var(--akzent)}
.db-start-verweis{text-decoration:underline;padding-left:0;padding-right:0}
.db-zl-durchsage .db-zl-beenden{flex:none;white-space:nowrap}

/* Verwaltung entflechten (D8, Fassung 297) */
.vw-reiter{padding-left:0;padding-right:0;margin-bottom:var(--a3);flex-wrap:wrap}
.vw-reiter .reiter-knopf{display:inline-flex;align-items:baseline;gap:var(--a2)}
.vw-reiter-zustand{font-size:var(--s1);font-weight:400;color:var(--gedaempft)}
.vw-reiter-zustand.gut{color:var(--gruen)}
.vw-reiter-zustand:empty{display:none}
.vw-reiter-zustand.fehler{color:var(--rot-text);font-weight:600}
.std-raster{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--a2) var(--a4);align-items:start}
.std-raster > .feld{margin:0}
.std-raster > .std-feier{min-width:0}
.std-raster > .std-feier .feld{margin:0}
.zg-karten{display:none;list-style:none;margin:0;padding:0;flex-direction:column;gap:var(--a2)}
button.zg-karte{width:100%;display:flex;align-items:flex-start;justify-content:flex-start;gap:var(--a3);padding:var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche);color:var(--tinte);text-align:left;font-weight:400}
button.zg-karte:hover{background:var(--flaeche-2);filter:none}
.zg-kuerzel{display:inline-flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px;border-radius:50%;
  background:var(--flaeche-3);font-size:var(--s2);font-weight:600}
.zg-karte-text{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;font-size:var(--s2);color:var(--gedaempft)}
.zg-karte-text b{font-size:15px;color:var(--tinte);overflow-wrap:anywhere}
.liz-nachbuchen{display:flex;flex-direction:column;gap:var(--a2);max-width:520px}
.liz-nachbuchen .feld{margin:0}
button.liz-preis{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--a3);padding:var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche);color:var(--tinte);text-align:left;font-weight:400}
button.liz-preis:hover{background:var(--flaeche-2);filter:none}
.liz-preis-text{display:flex;flex-direction:column;gap:2px;font-size:var(--s2);color:var(--gedaempft)}
.liz-preis-text b{font-size:15px;color:var(--tinte)}
.liz-preis-betrag{font-family:var(--mono);font-size:17px;white-space:nowrap}
@media (max-width:640px){
  .std-raster{grid-template-columns:minmax(0,1fr)}
  .zg-liste .vw-rolle{display:none}
  .zg-karten{display:flex}
}

/* Rollen und Freigabe (D9, Fassung 298) */
.feld-nur-ansicht{display:flex;flex-direction:column;gap:2px}
.vw-schalter-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.vw-schalter-unter{font-size:var(--s2);color:var(--gedaempft)}
.db-wartet-karte{padding:var(--a4);width:100%;border-color:var(--blau)}
.db-wartet-karte h2{font-size:var(--s4);font-weight:600;margin:0}
.db-wartet-zahl{font-family:var(--mono);color:var(--blau);font-weight:600}
.db-wartet-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.db-wartet{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);padding:var(--a2) 0;
  border-top:1px solid var(--linie);flex-wrap:wrap}
.db-wartet:first-child{border-top:0}
.db-wartet-text{display:flex;flex-direction:column;gap:1px;min-width:0;font-size:var(--s3);overflow-wrap:anywhere}
.db-wartet-tun{display:flex;gap:var(--a2);flex:none}

/* Mein Profil (D10, Fassung 299) */
.profil-karte{display:flex;flex-direction:column;gap:var(--a2);padding:var(--a3) 0;border-top:1px solid var(--linie)}
.profil-karte:first-child{border-top:0;padding-top:0}
.profil-karte h3{font-size:var(--s4);font-weight:600;margin:0}
.profil-karte .feld{margin:0}
.profil-zeile{display:flex;gap:var(--a2);align-items:center}
.profil-zeile input{flex:1;min-width:0}
.profil-karte .leise{margin:0;font-size:var(--s2);color:var(--gedaempft)}
/* Fassung 299 (D12): Hilfe-Suche — "gefunden über" und die Leerstelle */
.hi-ueber{display:inline-flex;align-items:center;gap:2px;margin-left:var(--a2);font-size:var(--s1);color:var(--gedaempft)}
.hi-begriff{background:var(--akzent-weich);color:var(--akzent-text);border-radius:999px;padding:0 var(--a2);font-weight:600}
.hi-nichts{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap;
  padding:var(--a3) var(--a4);color:var(--gedaempft)}
.hi-meintest{font-weight:600}
/* Fassung 300 (D13): Logos — Zuschnitt als gestrichelte Linie, Vorschau auf vier Vorlagen */
.mk-bild{outline:1px dashed var(--akzent);outline-offset:3px}
.mk-vorschau{display:flex;flex-direction:column;gap:var(--a3);border-top:1px solid var(--linie);padding-top:var(--a4)}
.mk-vorschau-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap}
.mk-vorschau-kopf h3{margin:0;font-size:var(--s4);font-weight:600}
.mk-vorschau-raster{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--a3)}
@media (max-width:760px){.mk-vorschau-raster{grid-template-columns:repeat(2,minmax(0,1fr))}}
.mk-vk-wirt{display:flex;flex-direction:column;gap:var(--a1);min-width:0}
.mk-vk{position:relative;aspect-ratio:16/9;border-radius:var(--r1);overflow:hidden;background:var(--vk-hell)}
.mk-vk.dunkel{background:var(--vk-dunkel)}
.mk-vk-logo{position:absolute;display:block;width:auto}
.mk-vk.oben .mk-vk-logo{left:7%;top:9%}
.mk-vk.unten .mk-vk-logo{left:7%;bottom:9%}
.mk-vk.ecke .mk-vk-logo{right:6%;top:8%}
.mk-vk-balken{position:absolute;left:7%;height:6%;border-radius:2px;background:var(--vk-balken-hell)}
.mk-vk.dunkel .mk-vk-balken{background:var(--vk-balken-dunkel)}
.mk-vk-balken.b1{top:48%;width:58%}
.mk-vk-balken.b2{top:60%;width:40%;opacity:.7}
.mk-vk-name{font-size:var(--s2);color:var(--gedaempft)}
/* Drei Plätze nebeneinander (D13), am Handy untereinander */
.mk-logos{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:760px){.mk-logos{grid-template-columns:minmax(0,1fr)}}
/* Fassung 301 (D2, Tafel 2b): das Bildfeld als eine Zeile */
.bildfeld.bildzeile{flex-wrap:nowrap;gap:var(--a3);justify-content:flex-start}
.bildfeld.bildzeile .vorschaubild{width:96px;height:96px;flex:none;background:var(--flaeche-2)}
/* Fassung 367 (L-512): `bz-leer`, nicht `leer` — `.leer` ist die ganzseitige
   Leeransicht (min-height:100vh), und ein leeres Bildfeld wurde damit so hoch
   wie das Fenster. */
.bildfeld.bildzeile .vorschaubild.bz-leer{border:1px dashed var(--linie-stark)}
.bz-text{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.bz-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bz-mass{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.bildfeld.bildzeile > button.sek{flex:none}
.mw-oben{display:flex;justify-content:flex-start;margin-bottom:var(--a3)}
@media (max-width:480px){.bildfeld.bildzeile .vorschaubild{width:64px;height:64px}}
.dz-zeitraum{margin-top:var(--a2)}
.dz-datum .vw-schalter-zeile{padding:var(--a1) 0;border-top:0}
/* Fassung 301 (D2, Tafel 2b): Live-Daten als Anzeige je Quelle */
.qz-pille{font-size:var(--s1);font-weight:600;border-radius:999px;padding:1px var(--a2);background:var(--neutralBg);color:var(--gedaempft)}
.qz-pille.gut{background:var(--gruenBg);color:var(--gruen)}
.qz-pille.schlecht{background:var(--rotBg);color:var(--rot-text)}
.qz-luft{flex:1 1 auto}
.qz-kopf .text-knopf{flex:none}
.qz-wert{margin-top:var(--a1);font-size:var(--s3);color:var(--gedaempft);overflow-wrap:anywhere}
.qz-alle{display:flex;justify-content:flex-end;margin:0 0 var(--a2)}
.darst-zeile{padding:var(--a2) 0}
.qz-kopf .text-knopf{font-size:var(--s2);padding:0}
/* Fassung 301/302 (D2): Playlists-Tabelle Name · Folien · Läuft auf · Geändert.
   Seit Fassung 433 (L-626) hat die Zeile drei Kinder statt acht; die Regeln
   nach Nummer (4 und 5 aus, 7 vor 6 und 8) sind entfallen — siehe den Block
   „Fassung 433“ unten. */
/* Fassung 302 (D2): Speicher als eine Zeile rechts neben den Filterpillen */
.med-leiste{justify-content:space-between}
.sp-balken.sp-rechts{margin:0 0 0 auto;display:flex;align-items:center;gap:var(--a2);max-width:none}
.sp-balken.sp-rechts .sp-text{margin:0;font-weight:400;font-size:var(--s2);white-space:nowrap}
.sp-balken.sp-rechts .sp-spur{width:96px;height:6px;flex:none}
/* Fassung 302 (D2): Verlauf als Blatt von rechts */
.vl-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.vl-zeile{padding:var(--a3) 0;border-top:1px solid var(--linie)}
.vl-zeile:first-child{border-top:0;padding-top:0}
.vl-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3)}
.vl-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.vl-zeit{font-weight:600}
.vl-wer{font-size:var(--s2);color:var(--gedaempft)}
.vl-frage{margin-top:var(--a2);display:flex;flex-direction:column;gap:var(--a2)}
.vl-frage p{margin:0;font-size:var(--s3)}
.vl-leer{color:var(--gedaempft)}
/* Fassung 302 (D2): „Verwendet in" im Folien-Editor */
.vi-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--a1)}
.vi-link{font-weight:600;color:var(--akzent-text)}
.vi-leer{margin:0;color:var(--gedaempft)}
.vi-dazu{margin-top:var(--a3)}
.vi-dazu select{max-width:320px}
.gr-ausnahmen{border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a3) var(--a4);display:flex;flex-direction:column;gap:var(--a3)}
.gr-ausnahmen > *{margin:0}
.gr-ausnahmen > * + *{border-top:1px solid var(--linie);padding-top:var(--a3)}
/* Fassung 304 (D2, Tafel 2d): Chips in „Taste anlegen" und „Pult einrichten" */
.ts-neu-chips{display:flex;flex-wrap:wrap;gap:var(--a2)}
button.ts-chip{min-height:44px;border-radius:999px;padding:0 var(--a4);background:var(--flaeche);border:1px solid var(--linie-stark);color:var(--tinte);font-weight:400}
button.ts-chip[aria-pressed=true]{background:var(--tinte);border-color:var(--tinte);color:var(--flaeche);font-weight:600}
button.ts-chip:disabled{opacity:1;cursor:default}
.ts-pult-oben{display:flex;justify-content:flex-end;margin:calc(var(--a2) * -1) 0 0}
.mel-feinheiten{border-top:1px solid var(--linie);padding-top:var(--a3);margin-top:var(--a2)}
.mel-feinheiten > summary{cursor:pointer;display:flex;align-items:baseline;gap:var(--a3);font-weight:600;min-height:44px;align-items:center}
.mel-feinheiten[open] > summary{margin-bottom:var(--a3)}
.mel-pruefen{border-top:1px solid var(--linie);padding-top:var(--a3);margin-top:var(--a2)}
.mel-pruefen > div:first-child{margin-top:0 !important}
.kd-plattform{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap;margin-bottom:var(--a3)}
/* K-25 (Fassung 307): Ort und Lizenzlage sind Wörter, keine Zahlen */
.kd-ort{font-size:var(--s2);color:var(--gedaempft)}
.kd-lage{font-size:var(--s2)}
.est-logo-leer.auf-hell{color:var(--kachel-leer-hell)}
.est-logo-leer.auf-dunkel{color:var(--kachel-leer-dunkel)}
.gr-laut-wert.ist-wort{font-family:var(--sans)}

/* ---------- Kundenliste nach KV1 (Fassung 317, Runde 3) ----------
   Kunde · Ort · Bildschirme online · Lizenzlage · Pfeil; die ganze Zeile
   öffnet. Lizenzlage als farbiges Wort mit Punkt: rot fehlt/abgelaufen,
   gelb läuft bald ab, grün gedeckt. Bei 1024 stehen Ort und Online als
   Unterzeile unter dem Namen, am Handy ist jede Zeile eine Karte. */
.kv-kopf .kv-mittel{display:none}
.pl-kopfzeile.kv-kopf{text-transform:none;letter-spacing:0;font-family:var(--sans);font-size:var(--s2);font-weight:600}
.kv-zeile{align-items:center;min-height:56px}
.kv-zeile .pl-name{font-weight:600}
.kv-leise{color:var(--gedaempft)}
.kv-zahl{font-family:var(--mono);font-size:var(--s3);font-variant-numeric:tabular-nums}
.kv-lage{display:inline-flex;align-items:center;gap:var(--a2);font-weight:600}
.kv-punkt{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none}
.kv-rot{color:var(--rot)}
.kv-gelb{color:var(--gelb)}
.kv-gruen{color:var(--gruen)}
.kv-pfeil{display:flex;justify-content:flex-end;color:var(--gedaempft)}
.kv-unter,.kv-unter-handy{display:none;font-size:var(--s2);color:var(--gedaempft);margin-top:2px}
.kv-vorrat{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap}
.kv-plus{width:44px;height:44px;min-height:44px;padding:0;align-items:center;justify-content:center}
@media (max-width:1200px) and (min-width:861px){
  .kv-kopf,.pl-zeile.kv-zeile{grid-template-columns:minmax(0,2fr) minmax(0,1fr) 32px !important}
  .kv-kopf .kv-breit,.kv-zeile .kv-breit{display:none}
  .kv-kopf .kv-voll{display:none}
  .kv-kopf .kv-mittel{display:inline}
  .kv-zeile .kv-unter{display:block}
  /* Die Playlist-Liste blendet bei ≤ 1200 px ihre hinteren Spalten aus
     (`.pl-zeile > .pl-sp:nth-child(…)`); die Kundenliste ordnet selbst. */
  .pl-zeile.kv-zeile > .kv-name{display:block}
  .pl-zeile.kv-zeile > .li-wichtig{display:block}
  .pl-zeile.kv-zeile > .kv-pfeil{display:flex}
  .pl-zeile.kv-zeile > .kv-nicht-handy{display:block}
  .pl-kopfzeile.kv-kopf > span{display:block}
  .pl-kopfzeile.kv-kopf > span.kv-breit{display:none}
  .kv-kopf:has(+ .kv-karte .kv-haendler),.pl-zeile.kv-zeile.kv-haendler{grid-template-columns:minmax(0,2fr) 100px minmax(0,1.2fr) 32px !important}
}
@media (max-width:860px){
  .kv-zeile{min-height:64px;align-items:center}
  .kv-zeile .kv-breit,.kv-zeile .kv-nicht-handy,.kv-zeile .kv-unter{display:none}
  .kv-zeile .kv-unter-handy{display:block}
  .pl-zeile.kv-zeile > .kv-name{display:block;flex:1 1 auto;order:1}
  .pl-zeile.kv-zeile > .li-wichtig{display:block;flex:none;order:2;margin-left:auto}
  .pl-zeile.kv-zeile > .kv-pfeil{display:flex;flex:none;order:3}
  .pl-zeile.kv-zeile > .kv-breit,.pl-zeile.kv-zeile > .kv-nicht-handy{display:none}
  .kv-zeile.pl-zeile{align-items:center}
  .nur-handy.kv-plus{display:inline-flex}
}
/* ---- KV2 (Fassung 318): Kopf der Kundenseite, Vergabe, Betreuer-Blatt ---- */
.kv-kopf-unter{display:flex;flex-direction:column;gap:var(--a1)}
.kv-kopf-kontakt{display:flex;flex-wrap:wrap;gap:var(--a1) var(--a5);font-family:var(--sans);color:var(--tinte)}
.kv-kopf-paar{display:inline-flex;align-items:baseline;gap:var(--a2);min-width:0}
.kv-kopf-wort{color:var(--gedaempft)}
.kv-kopf-paar a{color:var(--tinte);overflow-wrap:anywhere}
.kv-kopf-betreuer{display:inline-flex;align-items:baseline;gap:var(--a2)}
.kv-kopf-aendern{min-height:0;padding:0}
.kv-vergabe{display:flex;flex-direction:column;gap:var(--a3)}
.kv-vergabe .sp-balken{margin-bottom:0}
.kv-vergabe-leer{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.kv-vergabe-reihe{display:flex;flex-wrap:wrap;gap:var(--a3) var(--a4);align-items:flex-end}
.kv-vergabe-reihe .feld{margin:0}
.kv-zaehler{display:inline-flex;align-items:stretch;border:1px solid var(--feld-rand);border-radius:var(--r1);background:var(--flaeche)}
.kv-zaehler .kv-schritt{min-height:40px;width:40px;padding:0;display:flex;align-items:center;justify-content:center;
  background:transparent;color:var(--tinte);border-radius:0;font-family:var(--mono)}
.kv-zaehler .kv-schritt:hover{background:var(--flaeche-2);filter:none}
.kv-zaehler .kv-schritt:disabled{color:var(--beschriftung);background:transparent}
.kv-zaehler input.kv-zaehler-wert{width:64px;min-height:40px;border:0;border-left:1px solid var(--linie);border-right:1px solid var(--linie);
  border-radius:0;text-align:center;font-family:var(--mono);-moz-appearance:textfield;appearance:textfield}
.kv-zaehler input.kv-zaehler-wert::-webkit-inner-spin-button,.kv-zaehler input.kv-zaehler-wert::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.kv-segment{margin-bottom:var(--a1)}
.kv-verlauf .kv-v-wann{font-family:var(--mono);white-space:nowrap}
.kv-verlauf .kv-v-was{font-family:var(--mono)}
.kv-betreuer-zeile{display:flex;align-items:flex-start;gap:var(--a3);padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2);font-weight:400;cursor:pointer}
.kv-betreuer-zeile input{width:auto;margin-top:2px}
.kv-betreuer-text{display:flex;flex-direction:column;gap:2px}
.kv-betreuer-dazu{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.kv-betreuer-dazu.kv-betreuer-satz{font-family:var(--sans)}
@media (max-width:1200px) and (min-width:861px){
  .kv-verlauf .kv-v-wer{display:none}
}
@media (max-width:860px){
  .kv-zaehler .kv-schritt{min-height:44px;width:44px}
  .kv-zaehler input.kv-zaehler-wert{min-height:44px}
  .kv-vergabe-reihe{flex-direction:column;align-items:stretch}
  .kv-verlauf tr:first-child{display:none}
  .kv-verlauf tr{display:block;padding:var(--a2) 0;border-bottom:1px solid var(--linie)}
  .kv-verlauf td{display:block;border:0;padding:2px 0}
  .kv-verlauf td.kv-v-wer,.kv-verlauf td.kv-v-grund{color:var(--gedaempft)}
}
@media (max-width:860px){
  /* KV2: Am Handy steht unter den Handlungen, wer den Kunden betreut. */
  .seiten-kopf.unter-handy{flex-wrap:wrap}
  .seiten-kopf.unter-handy .seiten-kopf-links{display:block;order:2;flex:1 1 100%}
  .seiten-kopf.unter-handy #ansicht-unter{display:block}
  .kv-kopf-kontakt{flex-direction:column;gap:var(--a1)}
}
/* ---- KV3 (Fassung 319): Neuer Kunde, Neuer Händler, nach dem Anlegen ---- */
.kn-abschnitt{margin-bottom:var(--a5)}
.kn-abschnitt .mit-frage-zeile .est-titel{margin:0}
.kn-schalter{display:flex;align-items:center;gap:var(--a3);font-weight:400;margin:0}
.kn-demo-zahl{font-family:var(--mono);color:var(--gedaempft)}
.kn-fuss{position:sticky;bottom:0;z-index:2;display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;
  margin-top:var(--a4);padding:var(--a3) 0;background:var(--creme);border-top:1px solid var(--linie)}
.kn-fuss-frei{position:static;border-top:0;background:transparent}
.kn-an{margin-left:auto;font-size:var(--s2);color:var(--gedaempft);overflow-wrap:anywhere}
.kn-haken{display:flex;align-items:center;gap:var(--a2);font-weight:600;color:var(--gruen);margin-bottom:var(--a3)}
.kn-angelegt .merke{margin-bottom:var(--a4)}
.kn-kopierzeile{display:flex;gap:var(--a2);align-items:stretch;max-width:520px}
.kn-kopierzeile .kn-wert{flex:1 1 auto;min-width:0;font-family:var(--mono)}
@media (max-width:860px){
  .kn-fuss{padding:var(--a3) 0}
  .kn-fuss .kn-los{flex:1 1 100%;min-height:48px;order:1}
  /* Am Handy klebt nur der Hauptknopf; zurück führt der Pfeil oben. */
  .kn-fuss:not(.kn-fuss-frei) .sek{display:none}
  .kn-an{order:2;margin-left:0;flex:1 1 100%}
  .kn-fuss-frei > button{flex:1 1 100%;min-height:48px}
  /* Über der unteren Navigation kleben, nicht dahinter (56 px + Rand). */
  body.mit-handy-nav .kn-fuss:not(.kn-fuss-frei){bottom:calc(60px + env(safe-area-inset-bottom))}
}
/* ---- KV10 (Fassung 320): Vorlagen als Service ---- */
.dialog.va-dialog{max-width:920px;padding:0;overflow:hidden}
.dialog.va-dialog #dialog-titel{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.va-angebot{display:grid;grid-template-columns:minmax(0,400px) minmax(0,1fr)}
.va-links{background:var(--flaeche-2);padding:var(--a6);display:flex;flex-direction:column;gap:var(--a3)}
.va-rechts{padding:var(--a6);display:flex;flex-direction:column;gap:var(--a3);min-width:0}
.va-kicker{font-size:var(--s2);font-weight:600;color:var(--akzent-text)}
.va-titel{margin:0;font-size:var(--s5)}
.va-zwischen{margin:var(--a2) 0 0;font-size:var(--s3)}
.va-vn{display:grid;grid-template-columns:1fr 1fr;gap:var(--a2)}
.va-vn figure{margin:0;display:flex;flex-direction:column;gap:var(--a1)}
.va-vn img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--r1);border:1px solid var(--linie);display:block}
.va-vn figcaption{font-size:var(--s2);color:var(--gedaempft)}
.va-vn-klein figcaption{display:none}
.va-haken{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--a2)}
.va-haken li{display:flex;gap:var(--a2);align-items:flex-start}
.va-haken svg{color:var(--gruen);flex:none;margin-top:2px}
.va-preis{margin-top:auto;padding-top:var(--a3);border-top:1px solid var(--linie);display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--a2);color:var(--gedaempft)}
.va-zahl{font-family:var(--mono);color:var(--tinte);font-size:var(--s4)}
.va-schritte{list-style:none;margin:0;padding:0 0 var(--a3);display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--a3);border-bottom:1px solid var(--linie)}
.va-schritte li{display:flex;flex-direction:column;gap:2px;font-size:var(--s2)}
.va-nr{width:24px;height:24px;border-radius:50%;border:1px solid var(--linie-stark);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:var(--s1);margin-bottom:var(--a1)}
.va-chips{display:flex;flex-wrap:wrap;gap:var(--a2)}
.va-rechts .feld{margin-bottom:0}
.va-anhang{width:100%;justify-content:flex-start;gap:var(--a2);background:transparent;color:var(--gedaempft);border:1px dashed var(--linie-stark);font-weight:400}
.va-anhang:hover{filter:none;color:var(--tinte)}
.va-genau{margin-top:var(--a2);display:flex;flex-direction:column;gap:var(--a2)}
.va-genau-zeile{display:flex;align-items:center;gap:var(--a2);font-weight:400}
.va-fuss{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap}
.va-gesendet{padding:var(--a6);display:flex;flex-direction:column;gap:var(--a3);align-items:flex-start}
.va-karte{display:flex;align-items:center;gap:var(--a3);padding:var(--a3);border:1px dashed var(--akzent);border-radius:var(--r2);background:var(--flaeche)}
.va-karte-bild{width:88px;aspect-ratio:16/9;object-fit:cover;border-radius:var(--r1);flex:none}
.va-karte-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.va-karte-tun{display:flex;flex-direction:column;align-items:flex-end;gap:var(--a1)}
.va-karte-db,.va-karte-blatt{border-style:solid}
/* Die rechte Spalte der Übersicht ist schmal: Bild und Text oben, die
   zwei Verweise darunter nebeneinander. */
.va-karte-db{flex-wrap:wrap}
.va-karte-db .va-karte-text{flex:1 1 120px}
.va-karte-db .va-karte-tun{flex:1 1 100%;flex-direction:row;justify-content:space-between}
.dialog.va-dialog #dialog-inhalt{padding:0}
.va-karte-leer{margin-top:var(--a3)}
.va-karte-ende{margin-top:var(--a4)}
.va-weg{color:var(--gedaempft)}
.kat-fenster{margin-bottom:var(--a5)}
.kat-fenster-kopf,.kat-alle-kopf{display:flex;align-items:baseline;gap:var(--a3)}
.kat-bereich-titel{margin:0;font-size:var(--s4)}
.kat-fenster-kopf{margin-bottom:var(--a3)}
.kat-fenster-gitter{grid-template-columns:repeat(3,minmax(0,1fr))}
.kat-fenster-leer{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--a5);align-items:center;padding:var(--a4);border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche)}
.kat-fenster-satz p{margin:0 0 var(--a2)}
.kat-service{display:flex;flex-direction:column;align-items:stretch;gap:var(--a3);padding:var(--a3);text-align:left;background:var(--akzent-weich);color:var(--tinte);border:1px dashed var(--akzent);border-radius:var(--r3);font-weight:400}
.kat-service:hover{filter:none;border-style:solid}
.kat-service-text{display:flex;flex-direction:column;gap:2px}
.kat-service-weiter{color:var(--akzent-text);font-weight:600;text-decoration:underline}
.vk-neu.vk-eigen{text-transform:none;letter-spacing:0}
@media (max-width:860px){
  .dialog.va-dialog{max-width:none}
  .va-angebot{grid-template-columns:1fr}
  .va-links,.va-rechts{padding:var(--a4)}
  .va-schritte{grid-template-columns:1fr}
  .va-fuss{position:sticky;bottom:0;background:var(--flaeche);padding:var(--a3) 0}
  .va-fuss .va-los{flex:1 1 100%;min-height:48px}
  .kat-fenster-gitter{grid-template-columns:1fr}
  .kat-fenster-leer{grid-template-columns:1fr}
  .va-karte{flex-wrap:wrap}
}
/* ---- KV5 (Fassung 321): „Nur ansehen" an jedem Feld ---- */
input.kk-feld-gesperrt,textarea.kk-feld-gesperrt,select.kk-feld-gesperrt{
  border:1px dashed var(--linie-stark);background-color:var(--flaeche-2);color:var(--gedaempft);
  cursor:default;background-image:var(--schloss-bild);background-repeat:no-repeat;
  background-position:right var(--a3) center;padding-right:calc(var(--a3) * 2 + var(--a4))}
input.kk-feld-gesperrt:focus,textarea.kk-feld-gesperrt:focus,select.kk-feld-gesperrt:focus{box-shadow:none;border-color:var(--linie-stark)}
textarea.kk-feld-gesperrt{background-position:right var(--a3) top var(--a3)}
select.kk-feld-gesperrt{appearance:none;-webkit-appearance:none}
input[type="checkbox"].kk-feld-gesperrt,input[type="radio"].kk-feld-gesperrt{background-image:none;padding:0;opacity:.6}
.kk-hinweis{position:fixed;left:50%;bottom:var(--a5);transform:translateX(-50%);z-index:90;
  display:flex;align-items:center;gap:var(--a3);max-width:calc(100vw - 32px);
  padding:var(--a3) var(--a3) var(--a3) var(--a4);border-radius:var(--r3);
  background:var(--kk-grund);color:var(--auf-kk);box-shadow:var(--schatten-3)}
.kk-hinweis .kk-hinweis-satz{min-width:0}
.kk-hinweis-zu{background:transparent;color:var(--auf-kk);width:40px;height:40px;min-height:40px;padding:0;
  display:flex;align-items:center;justify-content:center}
.kk-hinweis-zu:hover{background:transparent;filter:none;opacity:.8}
@media (max-width:860px){
  .kk-hinweis{bottom:calc(72px + env(safe-area-inset-bottom));flex-wrap:wrap;left:16px;right:16px;transform:none;max-width:none}
  .kk-hinweis .kk-hinweis-satz{flex:1 1 100%}
  .kk-hinweis > button:not(.kk-hinweis-zu){flex:1 1 auto;min-height:48px}
}
button.kk-knopf-gesperrt{background-image:var(--schloss-bild);background-repeat:no-repeat;
  background-position:left var(--a3) center;padding-left:calc(var(--a3) + var(--a5))}
/* ---- KV5 Teil 2 (Fassung 322): „Rolle darf nicht" ---- */
input.rolle-gesperrt,select.rolle-gesperrt,textarea.rolle-gesperrt{border:1px solid var(--linie);
  background:var(--flaeche-2);color:var(--gedaempft);opacity:1;cursor:default}
input.mono-feld{font-family:var(--mono)}
.rolle-kopf{display:flex;align-items:baseline;gap:var(--a2);margin-bottom:var(--a1)}
.rolle-satz{margin:var(--a2) 0 0;font-size:var(--s2);color:var(--gedaempft)}
.rolle-kopf label{margin:0}
.rolle-schild{font-size:var(--s1);font-weight:600;color:var(--gedaempft);border:1px solid var(--linie);
  border-radius:var(--r-voll);padding:0 var(--a2);white-space:nowrap}
.rolle-farbe{display:flex;align-items:flex-end;gap:var(--a3)}
.rolle-farbe .feld{flex:1 1 auto;margin-bottom:0}
.rolle-muster{width:40px;height:40px;border-radius:var(--r1);border:1px solid var(--linie);flex:none;margin-bottom:2px}
.rolle-logos{display:flex;flex-wrap:wrap;gap:var(--a3)}
.rolle-logos figure{margin:0;display:flex;flex-direction:column;gap:var(--a1)}
.rolle-logos img{height:64px;max-width:200px;object-fit:contain;padding:var(--a2);border:1px solid var(--linie);border-radius:var(--r1);background:var(--flaeche)}
.rolle-logos figcaption{font-size:var(--s2);color:var(--gedaempft)}
/* ---- KV6 (Fassung 323): Anfragen als Seite ---- */
.an-leiste{display:flex;align-items:center;justify-content:space-between;gap:var(--a3);flex-wrap:wrap;margin-bottom:var(--a4)}
.an-artwahl{max-width:260px}
.an-karte{padding:0}
.an-eintrag{border-bottom:1px solid var(--linie)}
.an-eintrag:last-child{border-bottom:0}
.an-zeile{width:100%;display:grid;grid-template-columns:140px minmax(0,1fr) 110px auto 24px;align-items:center;gap:var(--a3);
  padding:var(--a3) var(--a4);min-height:56px;background:transparent;color:var(--tinte);text-align:left;font-weight:400;border-radius:0}
.an-zeile:hover{background:var(--flaeche-2);filter:none}
.an-art{justify-self:start}
.an-wer{display:flex;flex-direction:column;min-width:0}
.an-wer b,.an-wer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.an-wann{font-family:var(--mono);font-size:var(--s2);color:var(--gedaempft)}
.an-pfeil{display:flex;color:var(--gedaempft)}
.an-offen{background:var(--akzent-weich);color:var(--akzent-text)}
.an-auf{padding:0 var(--a4) var(--a4);display:flex;flex-direction:column;gap:var(--a3)}
.an-zitat{margin:0;padding:var(--a2) var(--a3);border-left:3px solid var(--linie-stark);color:var(--tinte);white-space:pre-wrap;line-height:1.5}
.an-kontakt{display:flex;flex-wrap:wrap;gap:var(--a1) var(--a4);font-size:var(--s2)}
.an-kontakt a{color:var(--tinte)}
.an-zeit{font-size:var(--s2)}
/* Fassung 432 (L-625): Vorgangsnummer, „Was ist los?“, Technik-Werte und Foto zu „Hilfe holen“. */
.an-nummer{font-size:var(--s2);color:var(--gedaempft);font-variant-numeric:tabular-nums}
.an-was{font-weight:600}
.an-technik > .gr-tech-gruppen{margin-top:var(--a3)}
.an-technik > .reihe{margin-top:var(--a3)}
.an-foto{display:flex;flex-wrap:wrap;gap:var(--a1) var(--a3);align-items:baseline;font-size:var(--s2)}
@media (max-width:1200px) and (min-width:861px){
  .an-zeile{grid-template-columns:130px minmax(0,1fr) auto 24px}
  .an-wann{display:none}
}
@media (max-width:860px){
  .an-zeile{grid-template-columns:minmax(0,1fr) auto 24px;grid-template-areas:"art zust pf" "wer wer wer";row-gap:var(--a1)}
  .an-art{grid-area:art}
  .an-zeile .zustand-pille{grid-area:zust}
  .an-pfeil{grid-area:pf}
  .an-wer{grid-area:wer}
  .an-wann{display:none}
  .an-artwahl{max-width:none;flex:1 1 100%}
}
/* ---- KV9 (Fassung 324): Lizenzlage als Seite ---- */
.lz-kennzahlen{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--a3);margin-bottom:var(--a4)}
.lz-kennzahl{display:flex;flex-direction:column;gap:var(--a1);padding:var(--a3) var(--a4);border:1px solid var(--linie);border-radius:var(--r2);background:var(--flaeche)}
.lz-kennzahl .lz-wort{font-size:var(--s2);color:var(--gedaempft)}
.lz-kennzahl .lz-zahl{font-family:var(--mono);font-size:24px;font-weight:600;color:var(--tinte)}
.lz-kennzahl.lz-rot .lz-zahl{color:var(--rot-text)}
.lz-satz{margin:0 0 var(--a4)}
.lz-gitter{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--a3);margin-bottom:var(--a4)}
.lz-karte{display:flex;flex-direction:column;gap:var(--a3);padding:var(--a4)}
.lz-karte-rot{border-color:var(--rot)}
.lz-karte-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a3)}
.lz-zeilen{display:flex;flex-direction:column;gap:var(--a1);font-size:var(--s3)}
.lz-zeilen .lz-wort{color:var(--gedaempft)}
.lz-rot-text{color:var(--rot-text)}
.lz-tun{display:flex;flex-wrap:wrap;gap:var(--a2)}
@media (max-width:1200px){ .lz-gitter{grid-template-columns:1fr} }
@media (max-width:860px){
  .lz-kennzahlen{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lz-tun > button{flex:1 1 auto;min-height:44px}
}
/* ---- KV7 (Fassung 325): Vorlagenbestand als Seite ---- */
.vb-filter{display:flex;align-items:center;gap:var(--a3);flex-wrap:wrap;margin-bottom:var(--a4)}
.vb-filter input[type="search"]{flex:1 1 240px;max-width:360px}
.vb-filter select{max-width:260px}
.vb-teil{display:grid;grid-template-columns:220px minmax(0,1fr);gap:var(--a5);align-items:start}
.vb-ordner{display:flex;flex-direction:column;gap:2px;position:sticky;top:var(--a4)}
.vb-ordner-knopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a2);min-height:40px;padding:0 var(--a3);
  background:transparent;color:var(--gedaempft);font-weight:400;text-align:left;border-radius:var(--r2)}
.vb-ordner-knopf:hover{background:var(--flaeche-2);filter:none;color:var(--tinte)}
.vb-ordner-knopf.an{background:var(--flaeche);color:var(--tinte);font-weight:600;box-shadow:var(--schatten-1)}
.vb-ordner-knopf.ablageziel{outline:2px dashed var(--akzent)}
.vb-ordner-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vb-ordnerwahl{display:none;margin-bottom:var(--a3)}
.vb-raster{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--a3)}
.vb-karte{position:relative;border:1px solid var(--linie);border-radius:var(--r3);background:var(--flaeche);overflow:hidden}
.vb-karte.gewaehlt{border-color:var(--tinte);box-shadow:0 0 0 1px var(--tinte)}
.vb-karte.frisch{border-color:var(--akzent)}
.vb-haken{position:absolute;left:var(--a2);top:var(--a2);z-index:2;width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  background:var(--flaeche);border-radius:var(--r1);box-shadow:var(--schatten-1)}
.vb-haken input{width:auto;margin:0}
.vb-oeffnen{display:flex;flex-direction:column;align-items:stretch;width:100%;padding:0;background:transparent;color:var(--tinte);
  text-align:left;font-weight:400;border-radius:0}
.vb-oeffnen:hover{filter:none;background:var(--flaeche-2)}
.vb-bild{aspect-ratio:4/3;background:var(--flaeche-2);display:flex;align-items:center;justify-content:center;overflow:hidden}
.vb-text{display:flex;flex-direction:column;gap:2px;padding:var(--a3)}
.vb-titel{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vb-fehler{color:var(--rot-text);font-size:var(--s2)}
.vb-wahlleiste{position:sticky;bottom:var(--a3);margin-top:var(--a4)}
.vb-blatt-bild{aspect-ratio:16/9;background:var(--flaeche-2);display:flex;align-items:center;justify-content:center;border-radius:var(--r2);overflow:hidden}
.vb-angaben{margin:0;display:grid;grid-template-columns:auto 1fr;gap:var(--a2) var(--a4)}
.vb-angabe{display:contents}
.vb-angabe dt{color:var(--gedaempft)}
.vb-angabe dd{margin:0}
@media (max-width:1200px){
  .vb-teil{grid-template-columns:1fr}
  .vb-ordner{display:none}
  .vb-ordnerwahl{display:block;max-width:320px}
  .vb-raster{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:860px){
  .vb-raster{grid-template-columns:repeat(2,minmax(0,1fr))}
  .vb-ordnerwahl{max-width:none;width:100%}
  .vb-filter select{max-width:none;flex:1 1 100%}
}
.vb-bild,.vb-blatt-bild{display:block}
.vb-bild .kat-bild,.vb-blatt-bild .kat-bild{width:100%;height:100%}
.kat-blatt-fuss .sz-ueberlauf{align-self:flex-end}
.kat-blatt-fuss .sz-ueberlauf > button{width:44px;min-height:44px}
/* ---- KV8 (Fassung 326): Neue Vorlage als Seite ---- */
.vn-ablage{width:100%;max-width:720px;min-height:96px;display:flex;align-items:center;justify-content:center;gap:var(--a2);
  border:1px dashed var(--linie-stark);border-radius:var(--r3);background:var(--flaeche);color:var(--gedaempft);font-weight:400}
.vn-ablage:hover,.vn-ablage.drueber{border-color:var(--akzent);color:var(--tinte);filter:none}
.vn-dateien{display:flex;flex-direction:column;gap:var(--a2);margin-top:var(--a3);max-width:720px}
.vn-datei{display:grid;grid-template-columns:24px 120px minmax(0,1fr);align-items:center;gap:var(--a2)}
.vn-dateiname{font-family:var(--mono);font-size:var(--s2)}
.vn-zeichen{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center}
.vn-offen{border:1.5px dashed var(--linie-stark)}
.vn-gut{background:var(--gruen);color:var(--flaeche)}
.vn-schlecht{background:var(--rot);color:var(--flaeche)}
.vn-grund{color:var(--rot-text);font-size:var(--s2)}
.vn-gelesen{margin:var(--a3) 0 var(--a4)}
.vn-kennung{margin-top:var(--a1);font-size:var(--s2)}
/* ---- KV4 (Fassung 327): Händlerseite ---- */
.hd-tab,.kv-verlauf{width:100%;max-width:720px;border-collapse:collapse}
.hd-tab th,.hd-tab td,.kv-verlauf th,.kv-verlauf td{text-align:left;padding:var(--a2) var(--a3);border-bottom:1px solid var(--linie)}
.hd-tab td:not(:first-child),.hd-tab th:not(:first-child){font-family:var(--mono);text-align:right}
.hd-tab th:not(:first-child){font-family:var(--sans)}
.hd-nachbuchen{padding:var(--a4);margin-top:var(--a4);max-width:720px}
.hd-nachbuchen .est-titel{margin-top:0}

/* Gewichte: lumafy Sans hat zwei Dateien (400 und 500–900, eine fette). 600
   wählt dieselbe fette Datei wie die 700 des Entwurfs — und das Blatt
   bleibt bei den zwei Gewichten, die der Selbsttest zulässt. */
/* ============================================================
   Anmelden · Vorschlag 1a „Bildschirmwand" (Fassung 331)
   ------------------------------------------------------------
   design_handoff_lumafy_ui/anmelden/: 1440 Karte 440 px, Überschrift
   52 px, Bildschirm quer und hoch, drei Pillen; 1024 Karte 400 px,
   Überschrift 40 px, nur quer, ohne Pillen; unter 900 px keine Folien,
   eine Zeile „Deine Bildschirme. In zwei Klicks geändert." und die Karte.
   ============================================================ */
.anm{min-height:100vh;display:flex;flex-direction:column;background:var(--anm-grund);
  color:var(--anm-text);font-family:'lumafy Sans',system-ui,sans-serif;-webkit-font-smoothing:antialiased}
.anm.versteckt{display:none}
.anm-kopf{display:flex;align-items:center;gap:var(--a5);padding:var(--a4) var(--a7);
  border-bottom:1px solid rgba(255,255,255,.08)}
.anm-logo{height:30px;width:auto;display:block}
.anm-dehnen{flex:1}
.anm-sprache{display:flex;border-radius:var(--r-voll);background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.12);gap:0;margin:0;padding:2px}
.anm-sprache .sprach-knopf{min-height:32px;min-width:44px;padding:0 var(--a3);border:0;border-radius:var(--r-voll);
  background:transparent;color:var(--anm-leise);font:600 13px/1 'lumafy Mono',ui-monospace,monospace;letter-spacing:.06em}
.anm-sprache .sprach-knopf:hover{color:var(--anm-text);filter:none}
.anm-sprache .sprach-knopf.an{background:var(--akzent);color:var(--anm-knopf-text)}
.anm-mitte{flex:1;display:grid;grid-template-columns:minmax(0,1fr) 440px;gap:64px;padding:var(--a6) var(--a7);
  align-items:center;max-width:1440px;width:100%;margin:0 auto;box-sizing:border-box}
.anm-links{display:flex;flex-direction:column;gap:var(--a6);min-width:0}
.anm-titelblock{display:flex;flex-direction:column;gap:var(--a3)}
.anm-kicker{font:400 13px/1.2 'lumafy Mono',ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--akzent)}
.anm-titel{margin:0;font-size:52px;line-height:1.02;font-weight:600;letter-spacing:-.035em;text-wrap:balance}
.anm-akzent{color:var(--akzent)}
.anm-titel-handy{display:none;margin:0;font-size:28px;line-height:1.1;font-weight:600;letter-spacing:-.02em}
.anm-wand{display:flex;gap:var(--a4);align-items:flex-end}
.anm-rahmen-quer{flex:1;min-width:0;background:var(--anm-rahmen);border-radius:14px;padding:var(--a3);
  box-shadow:0 30px 60px rgba(0,0,0,.5)}
.anm-rahmen-hoch{width:150px;flex:none;background:var(--anm-rahmen);border-radius:var(--r2);padding:var(--a2);
  box-shadow:0 30px 60px rgba(0,0,0,.5)}
.anm-folien{position:relative;aspect-ratio:16/9;border-radius:6px;overflow:hidden;background:var(--anm-grund);container-type:inline-size}
.anm-folien-hoch{aspect-ratio:9/16;border-radius:5px}
.anm-folie{position:absolute;inset:0;opacity:0;transition:opacity 1.2s ease;color:var(--anm-text)}
.anm-folie.an{opacity:1}
.anm-folie img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.anm-verlauf{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.05) 20%,rgba(0,0,0,.82) 100%)}
.anm-folie-text{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;
  align-items:flex-start;text-align:left;gap:1.4cqw;padding:5cqw 5.5cqw}
.anm-f-kicker{font:400 1.5cqw/1.2 'lumafy Mono',ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--akzent)}
.anm-f-titel{font-weight:600;font-size:3.6cqw;line-height:1.1;max-width:55%}
.anm-f-wert{font-weight:600;font-size:7cqw;line-height:1;color:var(--akzent)}
.anm-f-sub{font-size:1.8cqw;line-height:1.35;opacity:.85;max-width:55%}
.anm-folien-hoch .anm-folie-text{padding:10cqw 8cqw;gap:3cqw}
.anm-folien-hoch .anm-f-kicker{font-size:4.6cqw}
.anm-folien-hoch .anm-f-titel{font-size:9cqw;max-width:100%}
.anm-folien-hoch .anm-f-wert{font-size:14cqw}
.anm-folien-hoch .anm-f-sub{font-size:5cqw;max-width:100%}
.anm-folie-praxis{background:var(--anm-praxis-grund);color:var(--anm-praxis-text);box-shadow:inset 0 -1.2cqw 0 var(--anm-praxis-akzent)}
.anm-folie-praxis .anm-folie-text{justify-content:center}
.anm-folie-praxis .anm-f-kicker,.anm-folie-praxis .anm-f-wert{color:var(--anm-praxis-akzent)}
.anm-folie-praxis .anm-f-titel{font-weight:600}
.anm-folie-praxis .anm-f-wert{font-weight:600}
.anm-folie-empfang{background:var(--anm-empfang-grund);color:var(--anm-empfang-text);
  box-shadow:inset 0 0 0 2.4cqw var(--anm-empfang-grund),inset 0 0 0 calc(2.4cqw + 1px) var(--anm-empfang-akzent)}
.anm-folie-empfang .anm-folie-text{justify-content:center;align-items:center;text-align:center}
.anm-folie-empfang .anm-f-kicker,.anm-folie-empfang .anm-f-wert{color:var(--anm-empfang-akzent)}
.anm-folie-empfang .anm-f-titel{font-family:Georgia,serif;font-weight:400;max-width:100%}
.anm-folie-empfang .anm-f-wert{font-family:Georgia,serif;font-style:italic;font-weight:400}
.anm-folie-empfang .anm-f-sub{max-width:100%}
.anm-pillen{display:flex;gap:var(--a2);flex-wrap:wrap}
.anm-pille{padding:var(--a2) var(--a4);border-radius:var(--r-voll);border:1px solid rgba(255,255,255,.16);
  font-size:14px;color:var(--anm-leise);white-space:nowrap}

/* Die Karte */
.anm-karte{background:var(--anm-karte);color:var(--anm-tinte);border-radius:var(--r3);padding:var(--a6);
  display:flex;flex-direction:column;gap:var(--a4);box-shadow:0 30px 80px rgba(0,0,0,.45);box-sizing:border-box;width:100%}
.anm-zustand{display:flex;flex-direction:column;gap:var(--a4)}
.anm-zustand.versteckt{display:none}
.anm-karte-kopf{display:flex;flex-direction:column;gap:var(--a2)}
.anm-karte-kopf h1{margin:0;font-size:28px;line-height:1.1;font-weight:600;letter-spacing:-.02em;color:var(--anm-tinte)}
.anm-karte-kopf p{margin:0;font-size:15px;line-height:1.5;color:var(--anm-gedaempft)}
.anm-karte-kopf b{color:var(--anm-tinte);font-weight:600;overflow-wrap:anywhere}
.anm-form{display:flex;flex-direction:column;gap:var(--a4)}
.anm-feld{display:flex;flex-direction:column;gap:var(--a2)}
.anm-feld.versteckt{display:none}
.anm-feld label{margin:0;font-size:14px;font-weight:600;color:var(--anm-tinte)}
.anm .anm-feld input{height:48px;min-height:48px;padding:0 var(--a4);font:16px 'lumafy Sans',system-ui,sans-serif;
  border:1.5px solid var(--anm-feldrand);border-radius:10px;background:var(--anm-feld);color:var(--anm-tinte);width:100%;box-sizing:border-box}
.anm .anm-feld input[aria-invalid="true"]{border-color:var(--anm-rot)}
.anm-pw{position:relative}
.anm .anm-pw input{padding-right:96px}
.anm-zeigen{position:absolute;right:4px;top:4px;height:40px;min-height:40px;padding:0 var(--a3);border:0;
  background:transparent;font:600 14px 'lumafy Sans',system-ui,sans-serif;color:var(--anm-akzent-text);cursor:pointer}
.anm-zeigen:hover{filter:none;color:var(--anm-tinte)}
.anm-zeile{display:flex;justify-content:space-between;align-items:center;gap:var(--a3);flex-wrap:wrap}
.anm-haken{display:flex;align-items:center;gap:var(--a2);white-space:nowrap}
.anm-haken label{margin:0;font-size:15px;font-weight:400;color:var(--anm-tinte);cursor:pointer}
.anm-haken input{accent-color:var(--anm-akzent-text)}
.anm-link{border:0;background:transparent;padding:var(--a1) 0;min-height:0;font:600 14px 'lumafy Sans',system-ui,sans-serif;
  color:var(--anm-akzent-text);text-decoration:underline;cursor:pointer}
.anm-link:hover{filter:none;color:var(--anm-tinte)}
.anm-link[disabled]{opacity:.55;cursor:default;text-decoration:none}
.anm-links-buendig{align-self:flex-start}
.anm-knopf{height:52px;min-height:52px;border:0;border-radius:10px;background:var(--akzent);color:var(--anm-knopf-text);
  font:600 17px 'lumafy Sans',system-ui,sans-serif;cursor:pointer;width:100%}
.anm-knopf:hover{filter:brightness(.95)}
.anm-knopf.versteckt{display:none}
.anm-knopf-rand{height:52px;min-height:52px;border:1.5px solid var(--anm-tinte);border-radius:10px;background:transparent;
  color:var(--anm-tinte);font:600 16px 'lumafy Sans',system-ui,sans-serif;cursor:pointer;width:100%}
.anm-knopf-rand:hover{background:var(--anm-grau);filter:none}
.anm-oder{display:flex;align-items:center;gap:var(--a3);font:400 12px/1 'lumafy Mono',ui-monospace,monospace;
  letter-spacing:.14em;color:var(--anm-gedaempft)}
.anm-oder::before,.anm-oder::after{content:"";flex:1;height:1px;background:var(--anm-trenner)}
.anm-meldung{display:flex;gap:var(--a3);padding:var(--a3) var(--a4);border-radius:10px;background:var(--anm-rot-grund);
  color:var(--anm-rot-text);font-size:15px;line-height:1.4}
.anm-meldung.versteckt{display:none}
.anm-meldung b{font-weight:600}
.anm-hinweis{font-size:14px;line-height:1.45;color:var(--anm-gedaempft)}
.anm-hinweis.versteckt{display:none}
.anm-feldfehler{font-size:14px;color:var(--anm-rot)}
.anm-feldfehler.versteckt{display:none}
.anm-regel{font-size:14px;color:var(--anm-gedaempft)}
.anm-regel.erfuellt{color:var(--anm-gruen)}
.anm-grau{margin:0;padding:var(--a3) var(--a4);border-radius:10px;background:var(--anm-grau);font-size:15px;line-height:1.45}
.anm-uhr{font-family:'lumafy Mono',ui-monospace,monospace;font-weight:600;color:var(--anm-tinte)}
.anm-zurueck{align-self:flex-start;border:0;background:transparent;padding:0;min-height:0;
  font:600 14px 'lumafy Sans',system-ui,sans-serif;color:var(--anm-akzent-text);cursor:pointer}
.anm-zurueck:hover{filter:none;color:var(--anm-tinte)}
.anm-kreis{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font:600 22px/1 'lumafy Mono',ui-monospace,monospace}
.anm-kreis-gruen{background:var(--anm-gruen-grund);color:var(--anm-gruen)}
.anm-kreis-bernstein{background:var(--anm-bernstein-weich);color:var(--anm-akzent-text)}
.anm-klein{margin:0;font-size:15px;color:var(--anm-gedaempft)}
.anm-warten{font-family:'lumafy Mono',ui-monospace,monospace;font-size:13px}
.anm-warten.versteckt{display:none}
.anm-fuss{margin:0;padding-top:var(--a4);border-top:1px solid var(--anm-trenner);font-size:15px;color:var(--anm-gedaempft)}
.anm-start{color:var(--anm-akzent-text);font-weight:600}
.anm-start:hover{color:var(--anm-tinte)}
.anm :focus-visible{outline:2px solid var(--akzent);outline-offset:2px}
/* Fassung 406 (L-609): In der hellen Karte stand der Bernsteinring bei
   1,94:1. Dort nimmt er das dunklere Bernstein, auf dem dunklen Grund
   darum herum bleibt er Bernstein. */
.anm-karte :focus-visible{outline-color:var(--anm-fokus)}

/* 1024: schmalere linke Seite, nur quer, ohne Pillen */
@media (max-width:1279px){
  .anm-mitte{grid-template-columns:minmax(0,1fr) 400px;gap:var(--a6);padding:var(--a6) var(--a6)}
  .anm-kopf{padding:var(--a4) var(--a6)}
  .anm-titel{font-size:40px}
  .anm-rahmen-hoch,.anm-pillen{display:none}
  .anm-karte{padding:var(--a5) var(--a5)}
}
/* Unter 900 px: keine Folien, eine Zeile, die Karte */
@media (max-width:899px){
  .anm-kopf{padding:var(--a4)}
  .anm-mitte{display:flex;flex-direction:column;align-items:stretch;gap:var(--a5);padding:var(--a4)}
  .anm-titelblock,.anm-wand,.anm-pillen{display:none}
  .anm-titel-handy{display:block}
  .anm-karte{padding:var(--a5) var(--a5)}
  .anm-sprache{background:transparent;border:0;padding:0}
  .anm-sprache .sprach-knopf{min-width:44px;min-height:44px;padding:0 var(--a2)}
  .anm-sprache .sprach-knopf.an{background:transparent;color:var(--akzent)}
  .anm-zeile{flex-wrap:nowrap;align-items:flex-start}
  .anm-zeile .anm-link{text-align:right}
  .anm .anm-haken input{width:18px;height:18px;min-height:0}
}
@media (prefers-reduced-motion:reduce){.anm-folie{transition:none}}

/* ---- Musik (Fassung 335, L-303): Kachel und Dialog „Hintergrundmusik" ---- */
.med-bild.med-ton { position: relative; display: flex; align-items: center; justify-content: center; background: var(--flaeche-4); color: var(--gedaempft); }
.med-tonzeichen { display: flex; }
.med-schau-ton { width: 100%; }
.hm-liste { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.hm-titel { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border: 1px solid var(--linie); border-radius: 8px; }
.hm-nr { font-family: var(--mono); color: var(--gedaempft); min-width: 20px; }
.hm-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hm-laenge { font-family: var(--mono); color: var(--gedaempft); }
.hm-titel .lweg[disabled] { opacity: .35; }

/* ---- Fernwartung, schlank (Fassung 338) ---- */

/* ---- Tippflächen am Handy (Fassung 359, CoWork-Audit C-34) ----
   Mindestens 44 px Höhe für Playlist-Name, „ändern“ bei der Durchsage,
   Sortierauswahl der Bildschirme, „Öffnen“ im Bildschirm-Detail und die
   Zeile „Angemeldet bleiben“. Die Auswahlkästchen der Listen folgen mit
   dem nächsten Entwurf von Claude Design (Auftrag Runde 4). */
@media (max-width:760px){
  a.pl-name{display:inline-flex;align-items:center;min-height:44px}
  .dt-wowie-auf{min-height:44px;min-width:44px}
  select.gr-sortierung{min-height:44px}
  a.gr-pl-weg{display:inline-flex;align-items:center;min-height:44px;padding:0 var(--a2)}
  .anm-haken{min-height:44px}
  .anm-haken input{width:22px;height:22px}
}

/* ---- „Darf bearbeiten: alle / nur diese“ (Fassung 359, C-05) ---- */
.zs-feld .dt-segment{margin:var(--a2) 0}
.zs-liste{display:flex;flex-direction:column;gap:var(--a1);max-height:260px;overflow:auto;
  padding:var(--a2);border:1px solid var(--linie);border-radius:var(--r1);margin-bottom:var(--a2)}
.zs-liste:empty{display:none}
.zs-zeile{display:flex;align-items:center;gap:var(--a2);min-height:36px}
.zs-zeile label{margin:0;font-weight:400;cursor:pointer}
@media (max-width:760px){.zs-zeile{min-height:44px}}
/* ============================================================
   Raumbuchung (Fassung 375, L-528): Räume als Karten mit Ampel.
   Die Farbe trägt der Punkt und der Rand links; Text bleibt Tinte
   auf Fläche (Kontrast wie überall).
   ============================================================ */
.rm-seite{display:flex;flex-direction:column;gap:var(--a4)}
.rm-raster{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--a4)}
.rm-karte{display:flex;flex-direction:column;gap:var(--a2);border-left:6px solid var(--linie)}
.rm-karte.rm-frei{border-left-color:var(--gruen)}
.rm-karte.rm-gleich{border-left-color:var(--gelb)}
.rm-karte.rm-belegt{border-left-color:var(--rot)}
.rm-kopf{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--a3)}
.rm-kopf h2{margin:0;font-size:var(--s5)}
.rm-ampel{flex:none;display:flex;align-items:center;gap:var(--a2);text-align:right}
.rm-ampel b{display:block;font-size:var(--s4)}
.rm-ampel span span{display:block;font-size:var(--s2);color:var(--gedaempft)}
.rm-punkt{width:14px;height:14px;border-radius:50%;background:var(--linie-stark)}
.rm-frei .rm-punkt{background:var(--gruen)}
.rm-gleich .rm-punkt{background:var(--gelb)}
.rm-belegt .rm-punkt{background:var(--rot)}
.rm-jetzt{font-weight:600}
.rm-ohne{font-size:var(--s2)}
.rm-h{margin:var(--a2) 0 0;font-size:var(--s2);text-transform:uppercase;letter-spacing:.08em;color:var(--gedaempft)}
.rm-plan{list-style:none;margin:0;padding:0}
.rm-plan li{display:flex;align-items:baseline;gap:var(--a3);padding:var(--a2) 0;border-top:1px solid var(--linie)}
.rm-plan li:first-child{border-top:0}
.rm-plan li.vorbei{opacity:.55}
.rm-plan .rm-z{flex:none;width:112px;font-family:var(--mono);font-size:var(--s2);font-variant-numeric:tabular-nums}
.rm-plan li.laeuft .rm-z{color:var(--rot-text);font-weight:600}
.rm-plan .rm-t{flex:1;min-width:0;display:flex;flex-direction:column}
.rm-plan .rm-t small{font-size:var(--s1);color:var(--gedaempft)}
.rm-aktionen{display:flex;flex-wrap:wrap;gap:var(--a2);margin-top:var(--a2)}
.rm-schalter{display:flex;align-items:center;gap:var(--a2)}
.rm-schalter label{margin:0;font-weight:400}
.rm-qr{display:flex;justify-content:center;padding:var(--a3);background:#FFFFFF;border-radius:var(--r2)}
.rm-link code{display:block;padding:var(--a2);border-radius:var(--r1);background:var(--flaeche-2);overflow-wrap:anywhere;font-size:var(--s2)}
.rm-weg{margin-left:auto}

/* ============================================================
   Zeitpläne (Fassung 376, L-529; ab 378 je Bildschirm)
   Seit Fassung 436 (L-627, Bauplan 430) ein Wochenraster: EINE Zeile
   je Bildschirm, je Tag ein Band über 24 Stunden — Ruhezeit als Spur
   (--band-aus), Grund-Playlist in --akzent, Zeitblock in --zeitblock
   mit Namen, Lücke gestreift. Am Handy ein Tag.
   ============================================================ */
.zp-seite{display:flex;flex-direction:column;gap:var(--a4)}
.zp-leiste{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--a3)}
.zp-woche{display:flex;align-items:center;gap:var(--a2)}
.zp-kw{font-family:var(--mono);font-size:var(--s3);font-variant-numeric:tabular-nums;min-width:180px;text-align:center}
button.zp-pfeil{min-width:44px;min-height:44px;padding:0;display:inline-flex;align-items:center;justify-content:center}
.zp-tage{display:flex;flex-wrap:wrap;gap:var(--a2)}
button.zp-tag{min-height:36px;padding:0 var(--a3);font-size:var(--s2)}
button.zp-tag.heute{border-color:var(--akzent)}
.zp-legende{display:flex;flex-wrap:wrap;gap:var(--a4);font-size:var(--s2);color:var(--gedaempft)}
.zp-legende span{display:inline-flex;align-items:center;gap:var(--a2)}
.zp-legende i{display:inline-block;width:20px;height:10px;border-radius:3px}
.zp-legende i.zp-b-aus{outline:1px solid var(--linie-stark)}
.zp-legende i.zp-l-jetzt{width:2px;height:14px;border-radius:1px;background:var(--tinte)}
.zp-b-grund{background:var(--akzent)}
.zp-b-block{background:var(--zeitblock);color:var(--auf-zeitblock)}
.zp-b-luecke{background:repeating-linear-gradient(135deg,var(--gelb) 0 4px,transparent 4px 8px);box-shadow:inset 0 0 0 1px var(--gelb)}
.zp-b-aus{background:var(--band-aus)}
.zp-rolle{overflow-x:auto}
/* Nach der Prüfung von 436: Die Namensspalte ist 180–240 px breit (bis 436
   160–220), und Name und Grund-Playlist brechen um statt abgeschnitten zu
   werden (unten `.zp-auf-name,.zp-auf-unter`). */
.zp-raster{--zp-tage:7;display:grid;grid-template-columns:minmax(180px,240px) repeat(var(--zp-tage),minmax(72px,1fr));min-width:0}
.zp-zelle{border-top:1px solid var(--linie);padding:var(--a2) 0;min-width:0}
.zp-tagzelle{padding:var(--a2) var(--a1);border-left:1px solid var(--linie);display:flex;flex-direction:column;justify-content:center;gap:2px}
.zp-tagzelle.heute,.zp-tagkopf.heute{background:var(--akzent-weich)}
.zp-tagzelle.klickbar{cursor:pointer}
.zp-tagzelle.klickbar:hover .zp-spur{box-shadow:inset 0 0 0 1px var(--linie-stark)}
.zp-ecke,.zp-tagkopf{border-top:0}
.zp-ecke{display:flex;align-items:flex-end;padding:var(--a1) var(--a2);font-size:var(--s1)}
.zp-tagkopf{display:flex;flex-direction:column;gap:var(--a1);padding:var(--a1);border-left:1px solid var(--linie);font-size:var(--s2)}
.zp-stunden{display:flex;justify-content:space-between;font-style:normal;color:var(--gedaempft);font-size:var(--s1);font-variant-numeric:tabular-nums}
.zp-stunden i{font-style:normal}
.zp-spur{position:relative;height:22px;border-radius:4px;background:var(--band-aus);overflow:hidden}
.zp-b{position:absolute;top:0;bottom:0;min-width:2px;display:flex;align-items:center;overflow:hidden}
.zp-b-text{padding:0 var(--a1);font-size:var(--s1);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.zp-jetzt{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--tinte)}
.zp-ausnahme{font-size:var(--s1);color:var(--gedaempft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.zp-name{display:flex;align-items:center;gap:var(--a1);padding-right:var(--a2)}
button.zp-auf{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;min-height:44px;padding:var(--a1) var(--a2);background:none;border:0;border-radius:var(--r1);color:var(--tinte);font-weight:400;text-align:left;cursor:pointer}
button.zp-auf:hover{background:var(--flaeche-2)}
.zp-auf-name,.zp-auf-unter{max-width:100%;white-space:normal;overflow-wrap:anywhere}
.zp-auf-name{font-size:var(--s3)}
.zp-auf-unter{font-size:var(--s1)}
.zp-raster > .zp-ort{grid-column:1/-1;margin:var(--a4) 0 var(--a1);font-size:var(--s4)}
.zp-zeile-hinweise{grid-column:1/-1;border-top:0;padding:0 var(--a2) var(--a3);display:flex;flex-direction:column;gap:var(--a2)}
.zp-bloecke{display:flex;flex-direction:column;gap:var(--a3);margin-bottom:var(--a3)}
.zp-block{display:flex;flex-direction:column;gap:var(--a2);padding:var(--a3);border:1px solid var(--linie);border-radius:var(--r2)}
.zp-block-kopf{display:flex;align-items:center;justify-content:space-between;gap:var(--a2)}
.zp-block-tun{display:flex;gap:var(--a3)}
.zp-hinweise{margin:0;padding-left:var(--a4);display:flex;flex-direction:column;gap:var(--a1);font-size:var(--s2)}
.zp-h-fehler{color:var(--rot-text)}
@media (max-width:760px){
  .zp-kw{min-width:0}
  .zp-raster{grid-template-columns:1fr}
  .zp-ecke{display:none}
  .zp-name{border-top:1px solid var(--linie)}
  .zp-tagzelle,.zp-tagkopf{border-left:0}
  .zp-tagzelle{border-top:0;padding-top:0}
}

/* ---------- Fassung 383: Playlistliste mit Vorschaubild ----------
   Die Miniatur war ein angedeutetes Blatt in 39 × 22 px. Jetzt trägt
   sie das Bild der ersten Seite vom Server (`/vorschaubild/`, 381),
   am Rechner in 96 × 54 px, am Handy in 80 × 45 px. Das Blatt bleibt
   darunter stehen, bis das Bild da ist — und ganz, wenn keines kommt. */
.pl-mini{position:relative}
.pl-mini.quer{width:96px;height:54px;padding:8px;gap:4px;border-radius:4px}
.pl-mini.hoch{width:32px;height:54px;padding:4px;gap:4px;border-radius:4px}
.pl-mini.quer .pl-mini-z{height:4px}
.pl-mini.quer .pl-mini-akzent{height:5px}
/* Fassung 399 (L-601): eigener Name statt `leer` — siehe plMiniatur in app.js. */
.pl-mini.pl-mini-leer{background:transparent;border-style:dashed}
.pl-mini.pl-mini-leer>i{display:none}
.pl-mini-bild{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transition:opacity var(--takt) ease}
.pl-mini.mit-bild .pl-mini-bild{opacity:1}
.pl-mini.mit-bild>i{visibility:hidden}
.pl-sp-mini{gap:var(--a3);justify-content:flex-start}
.pl-kopfzeile.pl-pl,.pl-zeile.pl-pl{--pl-mini:112px}
/* Hochkant ist das Bild schmaler; der Rand hält die Spalte gleich breit,
   damit Kästchen und Name in jeder Zeile an derselben Stelle stehen. */
.pl-mini.hoch{margin:0 32px}
.pl-zeile.pl-pl{padding-top:var(--a2);padding-bottom:var(--a2)}
/* ============================================================
   Fassung 433 (L-626, Bauplan Plan 427) — die Playlist-Liste nach dem
   Entwurf (README §5): drei Spuren in jeder Breite. Bild im Format ·
   Name, darunter Format-Marke · Folien · geändert, darunter „Läuft auf“
   mit den Chips · das Menü „…“. Bis 432 standen hier je Breite eigene
   Spalten (1200 und 1000 px) und am Handy eine Fläche mit Nummern.
   Alles unter `.pl-pl`: `.pl-zeile` tragen auch die Kundenliste und die
   Tasten; deren Regeln unter 1200 und 1000 px (mit !important) schlägt
   die genauere Regel hier.
   ============================================================ */
.pl-kopfzeile.pl-pl,.pl-zeile.pl-pl{grid-template-columns:var(--pl-mini, 112px) minmax(0,1fr) auto !important}
.pl-pl>.pl-haupt{display:flex;flex-direction:column;align-items:flex-start;gap:var(--a1);min-width:0}
.pl-pl>.pl-haupt>.pl-name{max-width:100%}
.pl-pl .pl-meta{display:flex;flex-wrap:wrap;align-items:center;column-gap:var(--a2);row-gap:var(--a1);
  min-width:0;max-width:100%;font-size:var(--s2);color:var(--gedaempft)}
/* Die Format-Marke wie im Kopf des Editors: `--flaeche-3`, 600. */
.pl-pl .format-marke{display:inline-flex;align-items:center;gap:var(--a1);flex:none;
  background:var(--flaeche-3);color:var(--tinte);font-weight:600;padding:0 var(--a2);
  border-radius:var(--r1);min-height:24px;white-space:nowrap}
.pl-pl .format-marke svg{flex:none}
.pl-pl .pl-meta .pl-sp-vorlage{min-width:0}
.pl-pl .pl-geaendert{white-space:nowrap}
.pl-pl .pl-geaendert::before{content:"·";margin-right:var(--a2)}
.pl-pl>.pl-haupt>.pl-wo{margin-top:var(--a1);max-width:100%}
.pl-pl>.pl-tun{display:flex;align-items:center;justify-content:flex-end}
.pl-pl>.pl-tun .kachel-mehr{width:44px;height:44px}
/* Die Zählzeile statt der Reiter (F72): drei Knöpfe, der gewählte in
   --tinte, 600, mit der Bernstein-Linie darunter wie bis 432 der Reiter. */
.pl-reiterzeile:has(> .pl-zaehlzeile){align-items:center;margin-bottom:var(--a3)}
.pl-zaehlzeile{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a1);min-width:0}
button.pl-zaehl{min-height:32px;padding:0 var(--a1);background:transparent;border:0;
  color:var(--gedaempft);font-size:var(--s3);font-weight:400;border-radius:var(--r1)}
button.pl-zaehl:hover{filter:none;background:transparent;color:var(--tinte)}
button.pl-zaehl.aktiv{color:var(--tinte);font-weight:600;text-decoration:underline;
  text-decoration-color:var(--akzent);text-decoration-thickness:2px;text-underline-offset:6px}
.pl-zaehl-trenner{color:var(--gedaempft)}
.pl-zaehlzeile ~ .pl-sortknopf{margin-bottom:0}
/* Nach der Prüfung von 433: Bis 860 px steht die Reiterzeile als Spalte
   (`flex-direction:column`, Block „Die Reiterzeile und ihr Sortierknopf“).
   Die Regel darüber ist genauer und setzte dort `align-items:center` — in
   einer Spalte heißt das „waagrecht mittig“: Die Zählzeile stand in der
   Mitte, Sortierung und Liste links. */
@media (max-width:860px){
  .pl-reiterzeile:has(> .pl-zaehlzeile){align-items:stretch}
}
/* Am Handy: Bild und Name nebeneinander, „Läuft auf“ über die ganze
   Breite darunter (`display:contents` hebt die Zeile mit Name, Marke und
   Chips ins Raster). Das Änderungsdatum fällt weg wie bis 432 — in der
   schmalen Spalte neben dem Bild brach die Zeile sonst dreimal um und
   begann mit „·“ (gesehen bei 390 px); die Spaltenköpfe fallen auch weg. */
@media (max-width:860px){
  .pl-zeile.pl-pl{display:grid !important;align-items:center;
    grid-template-columns:auto minmax(0,1fr) auto !important;
    grid-template-areas:"mini name tun" "mini meta meta" "wo wo wo";
    column-gap:var(--a3);row-gap:var(--a1);padding:var(--a3)}
  .pl-zeile.pl-pl>.pl-sp{flex:none}
  .pl-zeile.pl-pl>.pl-haupt{display:contents}
  .pl-zeile.pl-pl>.pl-sp-mini{grid-area:mini}
  .pl-zeile.pl-pl .pl-name{grid-area:name}
  .pl-zeile.pl-pl .pl-meta{grid-area:meta}
  .pl-zeile.pl-pl .pl-wo{grid-area:wo;margin-top:var(--a2)}
  .pl-zeile.pl-pl .pl-geaendert{display:none}
  .pl-zeile.pl-pl>.pl-tun{grid-area:tun;align-self:center}
  /* Nachtrag zu Fassung 464: Die Zeile mit Formatmarke und Folienzahl reicht
     bis unter „…“ (Bereich `meta meta`). Bei 360 px war die Spalte neben dem
     Bild 98 px breit, die Marke „Querformat 16:9“ 135 px — sie lief unter „…“.
     Reicht auch das nicht (320 px), bricht die Marke in sich um. */
  .pl-zeile.pl-pl .format-marke{flex-shrink:1;min-width:0;white-space:normal}
  .pl-zeile.pl-pl .pl-mini.quer{width:80px;height:45px}
  .pl-zeile.pl-pl .pl-mini.hoch{width:24px;height:45px;margin:0 28px}
  .pl-zeile.pl-pl .pl-sp-mini{justify-content:flex-start;gap:var(--a2)}
  /* Der Name darf zwei Zeilen haben — abgeschnitten nach zehn Zeichen
     war er keine Auskunft. */
  .pl-zeile.pl-pl .pl-name{font-size:var(--s3);white-space:normal;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}
  .pl-zeile.pl-pl span.pl-zuweisen{white-space:nowrap;text-align:left;padding:0}
  .pl-karte:has(> .pl-zeile.pl-pl){padding:0}
}

/* ============================================================
   Fassung 418 (L-615, Bauplan Plan 414) — Editor B: Kopf und Inspektor
   ------------------------------------------------------------
   Entwurf Bedienlogik §7 (ADR-082 (1), Variante B). Der Kopf ist die
   Ebene der Playlist: Fläche `--flaeche-2`, oben der Pfad, dann Name
   (Überschrift) und Pille, darunter Chips, Format-Marke und „n Folien ·
   m:ss“. Rechts der Inspektor mit den Reitern „Folie N | Playlist“.
   Ab 1380 px: Mitte | 320 px; darunter steht der Inspektor unter der
   Mitte. Bei der freien Folie klappt er von selbst ein (ADR-041), die
   Bühne bekommt die Breite. Die Reihe bleibt bis Plan 415 oben.
   ============================================================ */
#arbeit .kopf{background:var(--flaeche-2)}
.kopf-pfad{display:flex;align-items:center;gap:var(--a1);min-width:0;flex-wrap:wrap}
.kopf-pfad .zurueck-knopf{margin-left:calc(var(--a3) * -1)}
.kopf-pfad-trenner{color:var(--gedaempft);font-size:var(--s2)}
.kopf-pfad-hier{display:inline-flex;align-items:center;gap:var(--a1);font-family:var(--mono);font-size:var(--s1);
  letter-spacing:.08em;text-transform:uppercase;font-weight:600;color:var(--gedaempft)}
.kopf-pfad-hier svg{flex:none}
.kopf-name{margin:0;font-size:var(--s6);font-weight:600;line-height:1.2;color:var(--tinte);
  min-width:0;overflow-wrap:anywhere}
/* Die Format-Marke im Kopf: Symbol und Wort, `--flaeche-3`, 600 — als
   inneres Stück von `#b-vorlage`, damit der Mittelpunkt dahinter bleibt. */
.kopf-meta .format-marke{display:inline-flex;align-items:center;gap:var(--a1);
  background:var(--flaeche-3);color:var(--tinte);font-weight:600;padding:0 var(--a2);
  border-radius:var(--r1);min-height:24px}
.kopf-meta .format-marke svg{flex:none}
@media (max-width:1379px){.kopf-name{font-size:var(--s5)}}

/* ---- Das Raster ---- */
.editor-raster{display:block}
.inspektor{padding:0 var(--a6) var(--a7);max-width:760px}
.ins-kopf{display:flex;align-items:center;gap:var(--a2);margin-bottom:var(--a3)}
.ins-reiter{display:flex;flex:1;min-width:0;gap:2px;padding:2px;border-radius:var(--r2);
  background:var(--flaeche-2);border:1px solid var(--linie)}
.ins-reiter-knopf{flex:1;min-height:40px;padding:0 var(--a3);border:0;border-radius:var(--r1);
  background:transparent;color:var(--gedaempft);font-size:var(--s3);font-weight:600;white-space:nowrap}
.ins-reiter-knopf:hover{filter:none;color:var(--tinte)}
.ins-reiter-knopf[aria-selected="true"]{background:var(--flaeche);color:var(--tinte);box-shadow:var(--schatten-1)}
.ins-reiter-knopf:focus-visible,.ins-klapp:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.ins-titel{flex:1;font-size:var(--s4);font-weight:600}
button.ins-klapp{flex:none;width:44px;min-width:44px;height:44px;min-height:44px;padding:0;
  display:inline-flex;align-items:center;justify-content:center}
.ins-tafel{display:flex;flex-direction:column;gap:var(--a4)}
.ins-tafel[hidden]{display:none}
.inspektor .dz-kasten{margin-top:0}
.ins-mehr{display:flex;flex-direction:column;gap:var(--a2)}
/* `.ins-h` (die Mono-Überschrift „MEHR ZU DIESER FOLIE“) gibt es seit Fassung 450 nicht mehr (L-665). */
#ins-mehr{display:flex;flex-direction:column;gap:var(--a3)}
/* Fassung 450 (L-665): „Mehr zu dieser Folie“ wie im Entwurf — EIN
   zugeklappter Abschnitt, im Kopf der Name und darunter der Stand,
   der Pfeil rechts; innen zwei Gruppen ohne eigene Klappe. */
.mehr-abschnitt{margin-bottom:0;max-width:none}
.mehr-abschnitt>.abschnitt-kopf{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;
  column-gap:var(--a3);row-gap:2px;min-height:52px;background:var(--flaeche);font-size:var(--s4)}
.mehr-abschnitt>.abschnitt-kopf:hover{background:var(--flaeche-2)}
.mehr-abschnitt>.abschnitt-kopf>.pfeil{grid-column:2;grid-row:1 / span 2}
.mehr-abschnitt>.abschnitt-kopf>span:not(.pfeil):not(.zusatz){grid-column:1;grid-row:1}
.mehr-abschnitt>.abschnitt-kopf>.zusatz{grid-column:1;grid-row:2;margin-left:0;font-size:var(--s2);
  font-weight:400;letter-spacing:0;color:var(--beschriftung)}
.mehr-abschnitt>.abschnitt-kopf:focus-visible{outline:2px solid var(--fokus);outline-offset:-2px}
.mehr-abschnitt>.abschnitt-inhalt{padding:0 var(--a4) var(--a4)}
.mehr-gruppe{display:flex;flex-direction:column;gap:var(--a2);border-top:1px solid var(--linie);padding-top:var(--a3)}
.mehr-gruppe+.mehr-gruppe{margin-top:var(--a3)}
.mehr-gruppe-titel{margin:0;font-size:var(--s3);font-weight:600;color:var(--tinte)}
/* Fassung 450 (L-565): „Läuft auch in N anderen Playlists“ unter dem Kopf der Folie. */
.seite-auch-in{display:flex;align-items:center;gap:var(--a2);margin:calc(-1 * var(--a3)) 0 var(--a4);
  font-size:var(--s2);color:var(--beschriftung)}
.seite-auch-in svg{flex:none}
.ins-name-block{display:flex;flex-direction:column;gap:var(--a1)}
.ins-name{font-size:var(--s3);font-weight:600}
.ins-name-block .name-eingabe{margin-left:0;max-width:none;font-size:var(--s4);min-height:44px;
  border:1px solid var(--feld-rand);background:var(--flaeche);padding:0 var(--a3);border-radius:var(--r2)}
.ins-name-block .name-eingabe:disabled{background:var(--flaeche-2);border-color:var(--linie);color:var(--gedaempft)}
.ins-liste{margin:0;display:flex;flex-direction:column}
/* Eine Zeile wie im Entwurf: Name links, Wert rechts, Linie darüber. */
.ins-zeile{display:flex;justify-content:space-between;align-items:center;gap:var(--a3);min-height:40px;
  padding:var(--a1) 0;border-top:1px solid var(--linie);font-size:var(--s3)}
.ins-zeile:first-child{border-top:0}
.ins-zeile dt{color:var(--tinte);font-weight:600;flex:none}
.ins-zeile dd{margin:0;min-width:0;color:var(--gedaempft);text-align:right}
/* „Läuft auf“ und „Betriebszeiten“: Name über dem Wert. */
.ins-zeile.ins-zeile-block{flex-direction:column;align-items:stretch;gap:var(--a2);padding:var(--a2) 0}
.ins-zeile.ins-zeile-block dd{display:flex;flex-direction:column;align-items:flex-start;gap:var(--a2);
  color:var(--tinte);text-align:left}
.ins-zeile .etikett{background:none;border:0;padding:0;min-height:0;font-family:var(--sans);
  font-size:var(--s3);letter-spacing:0;color:var(--tinte)}
.ins-zeile .etikett-knopf{text-decoration:underline;text-underline-offset:3px}
.ins-geaendert{margin:0;font-size:var(--s2);color:var(--gedaempft)}
.ins-geaendert .etikett{background:none;border:0;padding:0;min-height:0;font-family:var(--sans);
  font-size:var(--s2);color:var(--gedaempft)}
/* Die Einträge, die bis 417 im Menü „…“ standen: nebeneinander, wie
   im Entwurf; „… löschen …“ ohne Rahmen in `--rot-text`. */
.ins-aktionen{display:flex;flex-wrap:wrap;gap:var(--a2);padding-top:var(--a3);border-top:1px solid var(--linie)}
.ins-aktionen button{min-height:44px;gap:var(--a2);padding:0 var(--a3)}
.ins-aktionen button.gefahr-eintrag{color:var(--rot-text);border-color:transparent;background:none}
.ins-zeigen{gap:var(--a2);white-space:nowrap}
/* Der Folien-Editor (eine Folie ohne Playlist, F41): keine Reiter,
   ein Inspektor mit Name, „Verwendet in“, „Mehr“ und den Einträgen. */
.folie-modus .ins-nur-playlist{display:none}

@media (min-width:1380px){
  .editor-raster{display:grid;grid-template-columns:minmax(0,1fr) 320px;column-gap:var(--a5);
    align-items:start;padding-right:var(--a6)}
  .inspektor{padding:var(--a5) 0 var(--a7);max-width:none;position:sticky;top:var(--kopf-hoehe,88px);
    max-height:calc(100vh - var(--kopf-hoehe,88px));overflow:auto;overscroll-behavior:contain}
  /* Mit offenem Inspektor ist die Mitte eine Spalte: oben die Vorschau,
     darunter das Formular (Entwurf: „Mitte Vorschau, darunter Text und
     Bild“). Die Vorschau klebt hier nicht — sie läge sonst über dem
     Formular. Die Bühne der freien Folie behält ihre zwei Spalten. */
  .editor-raster:not(.ins-zu) .spalten:not(.mit-buehne),
  .editor-raster:not(.ins-zu) .spalten.quer:not(.mit-buehne){grid-template-columns:minmax(0,1fr)}
  .editor-raster:not(.ins-zu) .spalten:not(.mit-buehne) > .vorschau{order:-1;position:static;
    padding:var(--a5) 0 0 var(--a6)}
  .editor-raster:not(.ins-zu) .spalten:not(.mit-buehne) > section.formular{min-width:0;
    padding:var(--a5) 0 var(--a7) var(--a6)}
  /* Eingeklappt bleibt eine schmale Leiste mit dem Knopf. */
  .editor-raster.ins-zu{grid-template-columns:minmax(0,1fr) 44px}
  .editor-raster.ins-zu .ins-reiter,.editor-raster.ins-zu .ins-titel{display:none}
  .editor-raster.ins-zu .ins-inhalt{display:none}
}
@media (max-width:1379px){
  /* Unter der Mitte gibt es nichts einzuklappen. */
  .ins-klapp{display:none}
  .editor-raster.ins-zu .ins-inhalt{display:block}
}
@media (max-width:860px){
  .inspektor{padding:0 var(--a4) calc(var(--a7) + 56px + env(safe-area-inset-bottom))}
  #arbeit .kopf .kopf-pfad{display:none}
  .ins-reiter-knopf{min-height:44px}
  /* Am Handy steht „Vorschau groß“ wie bis 417 nur im Menü „…“ unten. Bis
     417 trug der Knopf `.eng-weg` (unter 1380 px weg); seit 418 steht er am
     Rechner in jeder Breite im Kopf, nur hier nicht. */
  #arbeit .kopf #btn-gross{display:none}
}
/* Das Menü „…“ steht seit Fassung 418 am Rechner und seit 420 auch am
   Handy nicht mehr (ADR-095 (2)); seine Einträge stehen im Inspektor. Der
   Knopf bleibt im Kopf, ausgeblendet (L-658: aufräumen). */
.kopf .kopf-knoepfe #btn-bs-mehr{display:none}
/* Ein gedeckelter Rahmen (Hochformat, Fassung 418) steht in der Mitte. */
.vorschau .rahmen{margin-left:auto;margin-right:auto}

/* ============================================================
   Fassung 419 (L-616, Bauplan Plan 415) — Editor B: Folienreihe senkrecht und Mitte
   ------------------------------------------------------------
   Entwurf Bedienlogik §7 (ADR-082 (1), Variante B). Die Reihe ist die
   linke Spalte des Rasters: ab 1380 px `240px | Mitte | 320px`, von 861
   bis 1379 px `200px | Mitte` mit dem Inspektor unter der Mitte, am
   Handy (bis 860 px) wie bis 418 waagrecht oben. Sie klebt unter dem
   Kopf und rollt für sich. Die Mitte ist eine Spalte: oben die Vorschau,
   darunter „Text und Bild“ (der Kopf mit „FOLIE a VON b“, Name und
   Vorlage, dann die Felder). Im Folien-Editor gibt es keine Reihe, das
   Raster bleibt wie in 418 (`mit-reihe` fehlt).
   ============================================================ */
.reihe-griff{display:none}
/* Der Kopf von „Text und Bild“: Marke auf `--akzent-weich` (5,67:1),
   der Name als Überschrift, die Vorlage still daneben. */
.seiten-kopf-zeile .seiten-kopf-nr{align-items:center}
h2.seiten-kopf-name{margin:0}
.seiten-kopf-marke{flex:none;padding:2px var(--a2);border-radius:var(--r1);
  background:var(--akzent-weich);color:var(--akzent-text);font-weight:600}
.seiten-kopf-vorlage{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-family:var(--sans);font-size:var(--s2);letter-spacing:0;text-transform:none;color:var(--gedaempft)}
@media (min-width:861px){
  .editor-raster.mit-reihe{display:grid;grid-template-columns:200px minmax(0,1fr);column-gap:var(--a5);
    align-items:start;padding-left:var(--a5)}
  .editor-raster.mit-reihe > .reihe-bereich{grid-column:1;grid-row:1 / span 2;position:sticky;
    top:var(--kopf-hoehe,88px);max-height:calc(100vh - var(--kopf-hoehe,88px));overflow-y:auto;
    overscroll-behavior:contain;flex-direction:column;align-items:stretch;gap:var(--a3);margin:0;
    padding:var(--a5) var(--a1);border:0;background:transparent}
  .editor-raster.mit-reihe > .spalten{grid-column:2;grid-row:1;min-width:0}
  .editor-raster.mit-reihe > .inspektor{grid-column:2;grid-row:2;padding-left:0}
  .editor-raster.mit-reihe .spalten > section.formular{padding-left:0}
  /* Der Kopf der Reihe: „Folienreihe“ links, „n Folien · m:ss“ rechts. */
  .editor-raster.mit-reihe .reihe-kopf{flex-direction:row;flex-wrap:wrap;align-items:baseline;
    justify-content:space-between;gap:var(--a1) var(--a2);padding:0}
  .editor-raster.mit-reihe .reihe-zahl{font-family:var(--mono);font-size:var(--s1)}
  .editor-raster.mit-reihe .reihe-liste{flex:none;flex-direction:column;gap:var(--a2);overflow:visible;
    min-height:0;padding:var(--a1) 0;scroll-snap-type:none}
  /* Ein Eintrag: Griff, Miniatur 64 × 36 mit Nummer, Name und
     „15 s · immer“; der gewählte mit Rand `--akzent` auf `--akzent-weich`
     (Name 600 bleibt — nicht nur die Farbe sagt es). */
  .editor-raster.mit-reihe .reihe-kachel{flex:none;width:100%;min-height:56px;gap:var(--a2);
    padding:var(--a2) var(--a2) var(--a2) var(--a1)}
  .editor-raster.mit-reihe .reihe-kachel.an{background:var(--akzent-weich);color:var(--tinte);
    border-color:var(--akzent);box-shadow:none}
  .editor-raster.mit-reihe .reihe-griff{display:flex;flex:none;color:var(--beschriftung)}
  .editor-raster.mit-reihe .reihe-mini{width:64px;height:36px}
  .editor-raster.mit-reihe .reihe-kachel .vk-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .editor-raster.mit-reihe .reihe-kachel .vk-mass svg{vertical-align:-2px;margin-right:2px}
  /* Die Ablagemarke liegt senkrecht ÜBER der Kachel statt links daneben. */
  .editor-raster.mit-reihe .reihe-kachel.vor::before{left:var(--a2);right:var(--a2);top:-6px;bottom:auto;
    width:auto;height:3px}
  .editor-raster.mit-reihe .reihe-tun .mini{display:inline-flex;align-items:center;justify-content:center}
  /* Seit Fassung 424: ↑ ↓ stehen bei Hover und Fokus übereinander über dem
     Griff, × oben rechts. 422 legte alle drei (rund 76 px) über Griff UND
     Miniatur — ein Klick auf die Miniatur traf dann „Aus der Reihe nehmen“
     statt die Folie zu öffnen (Prüfung von 422); bis 421 deckten sie oben
     rechts Name und Zeitregel zu (Prüfung von 419). Die Hülle liegt über
     der ganzen Kachel und lässt Klicks durch. */
  .editor-raster.mit-reihe .reihe-tun{inset:0;transform:none;pointer-events:none}
  /* Je 24 × 24 px (WCAG 2.5.8; die Kachel selbst ist das große Ziel, Pfeile
     und Entf gehen auch mit der Tastatur): Zwei 44 px hohe Knöpfe passten
     nicht übereinander in die 56 px der Kachel. */
  .editor-raster.mit-reihe .reihe-tun .mini{position:absolute;pointer-events:auto;min-height:24px}
  .editor-raster.mit-reihe .reihe-tun .reihe-hoch{left:2px;top:calc(50% - 26px)}
  .editor-raster.mit-reihe .reihe-tun .reihe-runter{left:2px;top:calc(50% + 2px)}
  .editor-raster.mit-reihe .reihe-tun .reihe-weg{right:var(--a1);top:var(--a1)}
  /* Die Uhr bleibt am ersten Wort der Zeitregel (Fassung 422). */
  .editor-raster.mit-reihe .reihe-regel-kopf{white-space:nowrap}

  /* „Folie hinzufügen“ unter der Reihe, so breit wie sie. Seit Fassung
     422 klebt der Knopf unten im Rollbereich der Reihe (deckend, damit
     keine Kachel durchscheint): Bei 1280 × 600 und fünf Folien lag er
     bis 421 außer Sicht (Prüfung von 419). */
  .editor-raster.mit-reihe .reihe-bereich .reihe-dazu{flex-direction:row;width:100%;min-height:48px;
    padding:0 var(--a3);white-space:normal;text-align:center}
  /* Seit Fassung 424 (Prüfung von 422): bündig am unteren Rand — mit
     `bottom:0` blieb der Innenabstand der Reihe (24 px) frei, und darunter
     schien die nächste Kachel durch. Und `scroll-padding-bottom` hält eine
     Kachel, auf die der Fokus springt, über dem Knopf (bei 1280 × 420 lag
     er über der fokussierten Kachel und ihren Knöpfen). */
  .editor-raster.mit-reihe .reihe-bereich .reihe-dazu{position:sticky;bottom:calc(-1 * var(--a5));z-index:2;
    background:var(--flaeche);box-shadow:0 calc(-1 * var(--a3)) var(--a3) var(--creme)}
  .editor-raster.mit-reihe .reihe-bereich{scroll-padding-bottom:calc(48px + var(--a5))}
  .editor-raster.mit-reihe .reihe-leer{min-height:0}
  /* Die freie Folie (Bühne, ADR-041): Neben Reihe und eingeklapptem
     Inspektor blieben der Bühne bei 1440 px nur rund 410 px, wenn die
     Vorschau daneben steht (418: rund 700). Mit der Reihe steht die
     Vorschau deshalb UNTER der Bühne; die Bühne bekommt die ganze Mitte
     (bei 1440 px rund 756 px). */
  .editor-raster.mit-reihe .spalten.mit-buehne,
  .editor-raster.mit-reihe .spalten.mit-buehne.quer{grid-template-columns:minmax(0,1fr)}
  .editor-raster.mit-reihe .spalten.mit-buehne > .vorschau{position:static;padding:0 var(--a5) var(--a6) 0}
  /* Leere Playlist: keine Mitte — die Reihe nimmt ihren Platz ein. */
  .editor-raster.mit-reihe.ohne-folie > .reihe-bereich{grid-column:1 / 3;grid-row:1;max-width:640px;
    position:static;max-height:none}
  .editor-raster.mit-reihe.ohne-folie > .inspektor{grid-column:1 / 3}
}
@media (min-width:861px) and (max-width:1379px){
  /* Die Mitte ist eine Spalte (Entwurf: Reihe | Vorschau, Text und Bild,
     darunter der Inspektor). Die Bühne der freien Folie ist mit Reihe
     ebenfalls eine Spalte, die Vorschau unter ihr (Regel oben, ab 861 px;
     bis 421 stand hier fälschlich, sie behalte zwei Spalten). */
  .editor-raster.mit-reihe .spalten:not(.mit-buehne),
  .editor-raster.mit-reihe .spalten.quer:not(.mit-buehne){grid-template-columns:minmax(0,1fr)}
  .editor-raster.mit-reihe .spalten:not(.mit-buehne) > .vorschau{order:-1;position:static;
    padding:var(--a5) var(--a5) 0 0}
  .editor-raster.mit-reihe .spalten > section.formular{min-width:0;padding:var(--a5) var(--a5) var(--a7) 0}
  .editor-raster.mit-reihe > .inspektor{padding-right:var(--a5);max-width:none}
  /* Seit Fassung 424 (Prüfung von 422) in --s1 („Zeitangaben“): Mit 13 px
     passte schon „⏱ 14:00–17:30“ nicht in die 82 px der Textspalte und
     endete mit „…“ — bei derselben Höhe wie 421, wo es ganz dastand. */
  .editor-raster.mit-reihe .reihe-regel{font-size:var(--s1)}
  /* … und mit 4 px Abstand statt 8 zwischen Griff, Miniatur und Text: 90 px
     statt 82 für den Text, „⏱ 14:00–17:30“ braucht in --s1 86 px. */
  .editor-raster.mit-reihe .reihe-kachel{gap:var(--a1)}
  /* Seit Fassung 422: In der 200-px-Reihe stehen Uhr und Zeitregel als ein
     Stück in der zweiten Zeile und enden, wenn sie nicht passen, mit „…“
     (ganz im `title`). Bis 421 brach die Unterzeile hier auf drei Zeilen
     um, die Kachel wurde 88 px hoch (Prüfung von 419). Ab 1380 px bricht
     die Regel an Leerzeichen um, nie im Zeitraum. */
  .editor-raster.mit-reihe .reihe-regel{display:inline-block;max-width:100%;vertical-align:bottom;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}
@media (min-width:1380px){
  .editor-raster.mit-reihe{grid-template-columns:240px minmax(0,1fr) 320px}
  .editor-raster.mit-reihe > .inspektor,
  .editor-raster.mit-reihe.ohne-folie > .inspektor{grid-column:3;grid-row:1}
  .editor-raster.mit-reihe.ins-zu{grid-template-columns:240px minmax(0,1fr) 44px}
  .editor-raster.mit-reihe:not(.ins-zu) .spalten:not(.mit-buehne) > .vorschau,
  .editor-raster.mit-reihe:not(.ins-zu) .spalten:not(.mit-buehne) > section.formular{padding-left:0}
  /* Seit Fassung 422: auch mit eingeklapptem Inspektor ist die Mitte neben
     der Reihe eine Spalte (ADR-094 (2)). Bis 421 galt dann wieder
     Formular | Vorschau mit mindestens 432 px Vorschau (`.spalten.quer`);
     neben der 240-px-Reihe passte das nicht: Bei 1380 bis 1470 px rollte
     die Seite waagrecht, die Leiste mit „Seitenspalte ausklappen“ lag über
     der Vorschau (Prüfung von 419). */
  .editor-raster.mit-reihe.ins-zu .spalten:not(.mit-buehne),
  .editor-raster.mit-reihe.ins-zu .spalten.quer:not(.mit-buehne){grid-template-columns:minmax(0,1fr)}
  .editor-raster.mit-reihe.ins-zu .spalten:not(.mit-buehne) > .vorschau{order:-1;position:static;
    padding:var(--a5) 0 0}
  .editor-raster.mit-reihe.ins-zu .spalten:not(.mit-buehne) > section.formular{min-width:0;
    padding:var(--a5) 0 var(--a7)}
}

/* ============================================================
   Fassung 420 (L-617, Bauplan Plan 416) — Editor B: Handy, Bediener
   ============================================================ */
/* Das Schloss mit „nur Admin und Redakteur“ statt eines Satzes (C-13).
   Sichtbar, nicht nur im Tooltip; leise wie eine Beschriftung. */
.schloss-marke{display:inline-flex;align-items:center;gap:var(--a1);color:var(--gedaempft);
  font-size:var(--s2);font-weight:400;line-height:1.3}
.schloss-marke svg{flex:none}
/* In „Wann zeigen“ in einer eigenen Zeile unter der Überschrift: Neben ihr
   brach bei 320 px Spaltenbreite sonst „Wann zeigen“ um. */
.dz-kopf{flex-wrap:wrap}
.dz-kopf .schloss-marke{flex-basis:100%}
#ins-laeuft .schloss-marke{display:flex;margin-top:var(--a1)}
/* „Rückgängig“ im Kopf der Reihe: mindestens 24 × 24 (WCAG 2.5.8; bis 419
   67 × 21 am Rechner, Prüfung von 417; bis 422 stand hier „31 × 21“). */
.reihe-kopf .reihe-rueck{min-height:24px;min-width:24px;padding:0 var(--a1)}
@media (max-width:860px){
  /* Die untere Leiste: Vorschau · Playlist · Auf Bildschirm zeigen ·
     Speichern (Entwurf §7). Je 48 × 48 wie der Vorschauknopf. */
  .handy-aktionen{gap:var(--a2)}
  .handy-ed{display:flex;gap:var(--a2);flex:none}
  .handy-ed-knopf{flex:none;width:48px;min-width:48px;min-height:48px;padding:0;
    display:inline-flex;align-items:center;justify-content:center}
  .handy-ed-knopf .kk-schloss{margin-right:2px}
  /* 48 px hoch wie im Entwurf; bis 419 setzte die allgemeine 44-px-Regel
     (`#app button:not(.text-knopf)`) die 48 px von Vorschau und Speichern
     außer Kraft. Nur die Leiste des Editors (nicht `.nur-seite`). */
  #app .handy-leiste:not(.nur-seite) button:not(.text-knopf){min-height:48px}
  /* Im Editor ist `#handy-tun` leer und nähme „Speichern“ in dieser Leiste
     rund 70 px Breite weg (bei 390 px gemessen; bis 419 waren es 28 px plus
     8 px Abstand, Prüfung von 420). */
  .handy-tun:empty{display:none}
  /* Im Kopf des Editors bleibt am Handy nichts zu drücken: Speichern ist
     unten, Rückgängig und Wiederholen oben in der Kopfzeile, „Vorschau
     groß“ im Blatt, „…“ entfällt (Fassung 420). */
  #arbeit .kopf .kopf-knoepfe{display:none}
  /* „Playlist“ rollt den Inspektor nach oben — nicht unter die klebende
     Kopfzeile. */
  .inspektor{scroll-margin-top:76px}
  /* Die Meldung steht ÜBER der unteren Leiste, nicht auf ihr (bis 419
     verdeckte sie 3 bis 12 s lang Rückgängig, Wiederholen und einen Teil
     von „Speichern“, Prüfung von 417). */
  body.mit-leiste #hinweis{bottom:calc(72px + env(safe-area-inset-bottom))}
  body.mit-leiste.mit-handy-nav #hinweis{bottom:calc(128px + env(safe-area-inset-bottom))}
}

/* ============================================================
   Fassung 421 (L-618, Bauplan Plan 417) — Bildschirmliste nach Entwurf
   ============================================================ */
/* Standortpillen (Entwurf §2), ein Bauteil (`standortPillen`, app.js):
   gewählt auf `--tinte` (bis 423 `--gewaehlt`), 44 px hoch, Umriss wie ein Umriss-Knopf
   (`--feld-rand`, Fassung 406). Die Zahl in Mono. */
.ort-pillen{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2);margin:var(--a4) 0 var(--a1)}
button.ort-pille{min-height:44px;padding:0 var(--a3) 0 var(--a4);border-radius:var(--r-voll);
  border:1px solid var(--feld-rand);background:var(--flaeche);color:var(--tinte);
  font-size:var(--s3);font-weight:600;gap:var(--a2)}
button.ort-pille:hover{background:var(--flaeche-2);filter:none}
/* Seit Fassung 424 (Prüfung von 421) gewählt auf --tinte mit --auf-tinte
   (Entwurf README): Dunkel lag --gewaehlt bei 1,22:1 gegen eine ungewählte
   Pille und ihr Rand bei 1,29:1 gegen die Seite; jetzt 15,71:1 gegen die
   Karte, hell unverändert dunkel (18,25:1). */
button.ort-pille.an{background:var(--tinte);border-color:var(--tinte);color:var(--auf-tinte)}
.ort-pille-zahl{font-family:var(--mono);font-size:var(--s1);font-weight:400}
.ort-pillen-liste .ort-suche{flex:1 1 200px;max-width:280px}
.ort-pillen-liste .ort-wahl{flex:1 1 220px;max-width:360px}
/* Die Gruppen: „Braucht dich · 3“ in `--rot-text`, darunter je Standort
   mit dem Zeichen davor. */
.gr-liste{margin-top:var(--a4)}
h2.gr-gruppenkopf{margin:var(--a5) 0 var(--a3);font-weight:600}
h2.gr-gruppenkopf:first-child{margin-top:0}
.gr-braucht-kopf{color:var(--rot-text)}
.gr-ort-kopf{display:flex;align-items:center;gap:var(--a1)}
.gr-ort-kopf svg{flex:none}
/* Die Zeile: Miniatur · Name mit Format-Marke und Rest-Satz · Pille ·
   Schnellwahl. Die Miniatur ist eine Fläche im Format des Bildschirms,
   keine Folie (Last); ohne bekanntes Format nur die Fläche (F14). */
.gr-zeilen-mini{width:72px;height:42px;flex:none;border-radius:var(--r1);background:var(--dunkel);
  display:grid;place-items:center}
.gr-zeilen-bild{display:block;height:30px;border-radius:2px;background:var(--zeilen-bild)}
.gr-zeilen-bild.quer{width:54px}
.gr-zeilen-bild.hoch{width:17px}
.gr-zeilen-bild.ohne-pl{background:none;border:1px dashed var(--beschriftung)}
.gr-zeilen-mini.blass .gr-zeilen-bild{opacity:.35}
.gr-zeile .zeile-text{display:flex;flex-direction:column;gap:2px}
.gr-rest{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a1) var(--a2);
  font-size:var(--s2);color:var(--gedaempft);line-height:1.45}
.gr-format{display:inline-flex;align-items:center;gap:var(--a1);padding:1px var(--a2);
  border-radius:var(--r1);background:var(--flaeche-3);color:var(--tinte);font-weight:600}
.gr-format svg{flex:none}
.gr-format-warn{display:flex;align-items:center;gap:var(--a1);font-size:var(--s2);color:var(--akzent-text)}
.gr-format-warn svg{flex:none}
/* „Taste aktiv“ (F47): nur in der Anzeige, in Bernstein wie im Entwurf. */
.zustand-taste{background:var(--akzent-weich);color:var(--akzent-text)}
.gr-zeile .zeile-aktionen{align-items:center}

/* ---- Nachgebessert zu Fassung 418 ---- */
/* Unter 1380 px gibt es nichts einzuklappen: `button.ins-klapp` (0,1,1)
   schlug `.ins-klapp{display:none}` (0,1,0), der Knopf stand da und tat
   nichts Sichtbares (L-656). */
@media (max-width:1379px){
  button.ins-klapp{display:none}
}
@media (min-width:1380px){
  /* Der Inspektor rollt in sich (`overflow:auto`) und schnitt die
     Fokusringe am Rand ab (2 px Ring + 2 px Abstand): innen 4 px Luft. */
  /* Über die Kennung: `.editor-raster.mit-reihe > .inspektor` (0,3,0) setzt
     links 0. */
  #inspektor{padding-left:var(--a1);padding-right:var(--a1)}
  /* Die freie Folie im Folien-Editor (ohne Reihe): Mit offenem Inspektor
     lief die Vorschau neben der Bühne unter ihn (bis 206 px bei 1440).
     Wie mit der Reihe seit 419: die Vorschau unter die Bühne. */
  .editor-raster:not(.mit-reihe):not(.ins-zu) .spalten.mit-buehne,
  .editor-raster:not(.mit-reihe):not(.ins-zu) .spalten.mit-buehne.quer{grid-template-columns:minmax(0,1fr)}
  .editor-raster:not(.mit-reihe):not(.ins-zu) .spalten.mit-buehne > .vorschau{position:static;
    padding:0 0 var(--a6) var(--a6)}
}
@media (max-width:760px){
  /* Am Handy stehen Miniatur und Name nebeneinander, auch mit Kästchen. */
  .gr-zeile .zeile-text{min-width:150px}
}
/* Die Betriebszeiten in einer eigenen Zeile unter dem Rest-Satz. */
.gr-zeiten{font-size:var(--s2);color:var(--gedaempft);line-height:1.45}

/* ============================================================
   Bildschirm-Detail als EINE Seite (Fassung 423, L-598 Teil 1, ADR-098)
   ------------------------------------------------------------
   Abschnitte links (fließend), die Gerätekarte ab 1100 px rechts mit
   320 px und klebend; darunter eine Spalte, die Karte unter den
   Abschnitten (Entwurf §3). Bis 422: Karte links mit 352 px, rechts die
   Reiter (Regeln oben aus Fassung 271/272 gelten für `.gr-detail` nicht).
   ============================================================ */
.detail-spalten.gr-detail{grid-template-columns:minmax(0,1fr) 320px;gap:var(--a5);align-items:start}
.detail-spalten.gr-detail > .gr-seite-karte{position:sticky;top:var(--a4)}
.gr-abschnitte{display:flex;flex-direction:column;gap:var(--a4);min-width:0}
@media (max-width:1099px){
  .detail-spalten.gr-detail{grid-template-columns:minmax(0,1fr)}
  .detail-spalten.gr-detail > .gr-seite-karte{position:static}
}
/* Die Sprungknöpfe unter dem Kopf; „Alle aufklappen“ rechts. */
.gr-sprung{display:flex;flex-wrap:wrap;align-items:center;gap:0 var(--a4);margin-top:calc(-1 * var(--a3))}
.gr-sprung-ziele{display:flex;flex-wrap:wrap;gap:0 var(--a4)}
button.gr-sprung-ziel,button.gr-sprung-alle{min-height:44px;padding:0 var(--a1);font-size:var(--s3);color:var(--tinte);
  text-decoration:underline;text-underline-offset:3px}
button.gr-sprung-alle{margin-left:auto;color:var(--akzent-text)}
/* „Was läuft hier?“ und die Abschnitte als Karten. */
.gr-was{display:flex;flex-direction:column;gap:var(--a3);padding:var(--a4)}
.gr-was-titel{font-size:var(--s5);font-weight:600;margin:0;color:var(--tinte)}
.gr-was-titel:focus{outline:none}
.gr-was-titel:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.gr-jetzt{display:flex;flex-direction:column;gap:2px;padding:var(--a3) var(--a4);border-radius:var(--r2);
  background:var(--zustand-neu-bg);color:var(--tinte);font-size:var(--s3);line-height:1.45}
.gr-jetzt-fett{font-size:15px;font-weight:600;overflow-wrap:anywhere}
.gr-jetzt-laeuft{background:var(--zustand-laeuft-bg)}
.gr-jetzt-ruhezeit{background:var(--zustand-ruhezeit-bg)}
.gr-jetzt-pausiert{background:var(--zustand-pausiert-bg)}
.gr-jetzt-still{background:var(--zustand-still-bg)}
.gr-jetzt-durchsage{background:var(--zustand-durchsage-bg)}
.gr-jetzt-taste{background:var(--akzent-weich)}
.gr-was .feld{max-width:none;margin:0}
.gr-ab{padding:0;overflow:hidden}
.gr-ab-h{margin:0;font-size:inherit;font-weight:inherit}
button.gr-ab-kopf{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"titel pfeil" "kurz pfeil";
  align-items:center;gap:2px var(--a3);width:100%;min-height:56px;padding:var(--a3) var(--a4);border:0;border-radius:0;
  background:transparent;color:var(--tinte);text-align:left;font-weight:400}
button.gr-ab-kopf:hover{background:var(--flaeche-2);filter:none}
.gr-ab-titelzeile{grid-area:titel;display:inline-flex;align-items:center;gap:var(--a2);font-size:var(--s5);font-weight:600}
.gr-ab-kurz{grid-area:kurz;font-size:var(--s3);color:var(--gedaempft);overflow-wrap:anywhere}
.gr-ab:not(.zu) .gr-ab-kurz{display:none}
.gr-ab-pfeil{grid-area:pfeil;display:flex;color:var(--gedaempft);transition:transform var(--takt) ease}
.gr-ab:not(.zu) .gr-ab-pfeil{transform:rotate(180deg)}
.gr-ab-punkt{display:none;width:8px;height:8px;border-radius:50%;background:var(--akzent-text)}
.gr-ab.geaendert .gr-ab-punkt{display:inline-block}
.gr-ab-inhalt{display:flex;flex-direction:column;gap:var(--a4);padding:var(--a2) var(--a4) var(--a5);min-width:0}
.gr-ab.zu .gr-ab-inhalt{display:none}
.gr-ab-inhalt .feld{max-width:none;margin:0}
.gr-ab-inhalt h3.gr-abschnitt{font-size:var(--s4);font-weight:600;margin:var(--a2) 0 0}
.gr-detail-unter{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--a1) var(--a2)}
/* Die Tage heißen „Mo“ bis „So“: 120 px für den Namen (Fassung 413) nahmen
   den Fenstern die Breite, und „auf Mo–Fr übertragen“ brach bei 1440 px in
   eine dritte Zeile (Prüfung von 413, L-598). */
@media (min-width:861px){
  .gr-detail .gr-woche-zeile{grid-template-columns:56px minmax(0,1fr)}
}
/* Befehle zwei mal zwei (Entwurf). */
.gr-detail .gr-seite-karte .gr-seite-tun{grid-template-columns:repeat(2,minmax(0,1fr))}
.gr-detail .gr-seite-karte .gr-seite-tun button{white-space:normal;text-align:left;justify-content:flex-start;line-height:1.2}
/* Die Leiste „Nicht gespeichert · Verwerfen · Speichern“ klebt unten
   (F52); am Handy über der unteren Navigation (wie `.kn-fuss`). */
.gr-leiste{position:sticky;bottom:0;z-index:3;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:var(--a2) var(--a3);padding:var(--a3) var(--a4);border:1px solid var(--linie-stark);border-radius:var(--r2);
  background:var(--flaeche);box-shadow:var(--schatten-2)}
.gr-leiste.versteckt{display:none}
.gr-leiste-stand{display:inline-flex;align-items:center;gap:var(--a2);font-size:15px;font-weight:600;color:var(--akzent-text)}
.gr-leiste-tun{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--a2)}
.gr-leiste-tun button{min-height:44px}
.gr-leiste-fehler{font-size:var(--s3);color:var(--rot-text)}
.gr-leiste-fehler:empty{display:none}
@media (max-width:860px){
  /* Am Handy eine Zeile, die waagrecht rollt — gebrochen waren es drei. */
  .gr-sprung{margin-top:0;flex-wrap:nowrap;overflow-x:auto;white-space:nowrap;scrollbar-width:none}
  .gr-sprung-ziele{flex-wrap:nowrap}
  button.gr-sprung-alle{margin-left:var(--a2)}
  .gr-was,.gr-ab-inhalt{padding-left:var(--a3);padding-right:var(--a3)}
  button.gr-ab-kopf{padding:var(--a3)}
  body.mit-handy-nav .gr-leiste{bottom:calc(60px + env(safe-area-inset-bottom))}
  .gr-leiste{padding:var(--a2) var(--a3)}
  .gr-leiste-tun{flex:1 1 auto}
  .gr-leiste-tun button{min-height:48px;flex:1 1 auto}
}
@media (prefers-reduced-motion:reduce){
  .gr-ab-pfeil{transition:none}
}
/* „Läuft auf“ im Reiter „Playlist“: die Bildschirme mit Zustand
   (Fassung 423, Prüfung von 420). */
.ins-laeuft-liste{list-style:none;margin:var(--a1) 0 var(--a2);padding:0;display:flex;flex-direction:column;gap:2px;
  font-size:var(--s3);line-height:1.4}
.ins-laeuft-liste .leise{color:var(--gedaempft)}
.ins-laeuft-liste li.still .leise{color:var(--rot-text)}
.ins-laeuft-name{overflow-wrap:anywhere}

/* ============================================================
   „Was läuft hier?“ mit Wochenplan (Fassung 424, L-598 Teil 2, Plan 420)
   ------------------------------------------------------------
   Titel und Segment in einer Zeile, der Jetzt-Satz, die Wahl (Knopf
   48 px, höchstens 420 px, Entwurf §3), die Zeitblöcke als Zeilen mit
   aufklappbaren Feldern, darunter das Tagesband mit Legende.
   ============================================================ */
.gr-was-kopf{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a3) var(--a4)}
.gr-was-segment button{min-height:44px}
.gr-was-grund{margin:0}
.gr-jetzt-luecke{background:var(--zustand-ruhezeit-bg)}
.gr-jetzt-stand{font-size:var(--s2);color:var(--gedaempft)}
.gr-jetzt-stand:empty{display:none}
.gr-was-inhalt{display:flex;flex-direction:column;gap:var(--a4)}
.gr-pl-feld,.gr-plan-feld{display:flex;flex-direction:column;align-items:flex-start;gap:var(--a2)}
.gr-pl-feld .leise,.gr-plan-feld .leise,.gr-pl-feld .hinweis{margin:0}
button.gr-pl-wahl{display:flex;align-items:center;justify-content:flex-start;gap:var(--a2);width:100%;max-width:420px;
  min-height:48px;padding:0 var(--a3);border:1px solid var(--feld-rand);border-radius:var(--r2);
  background:var(--flaeche);color:var(--tinte);font-size:var(--s4);text-align:left}
button.gr-pl-wahl:hover{background:var(--flaeche-2);filter:none}
.gr-pl-wahl-name{flex:1;min-width:0;overflow-wrap:anywhere}
.gr-pl-wahl svg{flex:none}
.gr-pl-detail{font-size:var(--s4)}
.gr-plan-ruht{margin:0}
/* Die Zeitblöcke im Detail: eine Zeile je Block (Regel · Farbe · Playlist ·
   Ändern), die Felder darunter. */
.gr-bloecke{width:100%;max-width:640px;margin:0;gap:var(--a2)}
.gr-block{padding:0;gap:0;background:var(--flaeche-2)}
.gr-block-zeile{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a1) var(--a3);min-height:44px;padding:var(--a1) var(--a3)}
.gr-block-regel{font-family:var(--mono);font-size:var(--s2);min-width:110px}
.gr-block-farbe{width:10px;height:10px;border-radius:2px;background:var(--zeitblock);flex:none}
.gr-block-name{flex:1;min-width:120px;font-size:var(--s3);overflow-wrap:anywhere}
.gr-block-name.fehlt{color:var(--rot-text)}
button.gr-block-auf{display:inline-flex;align-items:center;gap:var(--a1);min-height:44px;font-size:var(--s3)}
.gr-block-felder{display:flex;flex-direction:column;gap:var(--a2);padding:0 var(--a3) var(--a3);border-top:1px solid var(--linie)}
.gr-block-felder > select{margin-top:var(--a3)}
.gr-block.offen{background:var(--flaeche)}
/* Das Tagesband: Spur 14 px, Ruhezeit --band-aus, an --akzent, Zeitblock
   --zeitblock, der Strich „jetzt“ in --tinte. Hell liegt --akzent auf der
   Spur nur bei 1,64:1 (wie im Entwurf); das Band ist Zierde
   (`aria-hidden`), was es zeigt, sagen Jetzt-Satz, Zeitblöcke und Legende. */
.gr-band{display:flex;flex-direction:column;gap:var(--a2)}
.gr-band-bild{display:flex;flex-direction:column;gap:var(--a1)}
.gr-band-spur{position:relative;height:14px;border-radius:4px;background:var(--band-aus);overflow:visible}
.gr-band-spur > span{position:absolute;top:0;bottom:0}
.gr-band-an{background:var(--akzent)}
.gr-band-block{background:var(--zeitblock)}
.gr-band-aus{background:var(--band-aus)}
.gr-band-spur > .gr-band-jetzt{top:-4px;bottom:-4px;width:2px;margin-left:-1px;background:var(--tinte)}
.gr-band-skala{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;color:var(--beschriftung)}
.gr-band-legende{display:flex;flex-wrap:wrap;gap:var(--a1) var(--a4);font-size:var(--s2);color:var(--gedaempft)}
.gr-band-legende > span{display:inline-flex;align-items:center;gap:var(--a2)}
.gr-band-legende i{display:inline-block;width:14px;height:10px;border-radius:2px}
.gr-band-legende i.gr-band-aus{outline:1px solid var(--linie-stark)}
@media (max-width:860px){
  .gr-was-kopf{gap:var(--a2)}
  .gr-was-segment{width:100%}
  .gr-was-segment button{flex:1 1 0}
}

/* ============================================================
   Technik nach Gruppen (Fassung 426, L-620, Bauplan Plan 421)
   ------------------------------------------------------------
   Kopfzeile mit „Wert suchen“ und „Alle Werte kopieren“, darunter die
   Gruppen — zweispaltig, sobald zwei Spalten zu je 320 px Platz haben
   (Entwurf: „zweispaltig ab 1100 px“; mit der Gerätekarte rechts ist die
   Spalte erst bei breiteren Fenstern so breit). Zeilen mindestens 34 px,
   Schlüssel --gedaempft, Wert in Plex Mono rechtsbündig (Entwurf §3).
   Mit dabei die Nachbesserung zu Fassung 423.
   ============================================================ */
.gr-tech{display:flex;flex-direction:column;gap:var(--a4);min-width:0}
.gr-tech-kopf{display:flex;flex-wrap:wrap;align-items:center;gap:var(--a2) var(--a3)}
label.gr-tech-suche{display:flex;align-items:center;gap:var(--a2);flex:0 1 280px;min-width:0;min-height:44px;padding:0 var(--a3);
  border:1px solid var(--linie-stark);border-radius:var(--r2);background:var(--flaeche);color:var(--beschriftung);
  font-weight:400;margin:0}
label.gr-tech-suche:focus-within{outline:2px solid var(--fokus);outline-offset:2px}
label.gr-tech-suche svg{flex:none}
label.gr-tech-suche input{flex:1;min-width:0;border:0;padding:0;min-height:42px;background:transparent;color:var(--tinte);font-size:16px}
label.gr-tech-suche input:focus,label.gr-tech-suche input:focus-visible{outline:none;box-shadow:none}
button.gr-tech-kopieren{display:inline-flex;align-items:center;gap:var(--a2);min-height:44px}
.gr-tech-gruppen{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:var(--a3) var(--a6);align-items:start}
.gr-tech-gruppe{display:flex;flex-direction:column;min-width:0}
.gr-tech-titel{margin:0 0 var(--a1);font-size:var(--s1);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--beschriftung)}
.gr-tech-werte{display:grid;grid-template-columns:auto minmax(0,1fr);margin:0;font-size:var(--s3)}
.gr-tech-werte dt,.gr-tech-werte dd{display:flex;align-items:center;min-height:34px;padding:var(--a1) 0;border-top:1px solid var(--linie)}
.gr-tech-werte dt{color:var(--gedaempft);padding-right:var(--a3)}
.gr-tech-werte dd{margin:0;justify-content:flex-end;text-align:right;font-family:var(--mono);font-size:var(--s2);color:var(--tinte);
  overflow-wrap:anywhere}
.gr-tech-werte dd.gr-tech-verdeckt{font-family:inherit;color:var(--gedaempft)}
.gr-tech-leer{margin:0}
/* „Für Techniker“ steht seit 426 unter „Technik“. */
.gr-tech + .gr-techniker,.gr-tech ~ .gr-techniker{margin-top:0}
/* Die Überschrift des Zeiten-Kastens ist seit 426 ein h3 (Prüfung von 423). */
.gr-woche-kopf h3{font-size:var(--s4);font-weight:600;margin:0}

/* Nachgebessert zu 423: der Fokusring am Kopf eines Abschnitts. Er lag
   außen (outline-offset 2px), der Knopf füllt den Abschnitt bis auf 1px,
   und `overflow:hidden` am Abschnitt schnitt ihn ganz ab. Jetzt innen. */
button.gr-ab-kopf:focus-visible{outline:2px solid var(--fokus);outline-offset:-3px}
/* … der Jetzt-Satz bei einer Durchsage: dunkle Schrift auf --notfall lag
   hell bei 2,05:1. Jetzt die Schrift der Pille (--auf-notfall). */
.gr-jetzt-durchsage{color:var(--zustand-durchsage)}
/* Seit Fassung 428 (nachgebessert zu 426): auch die Zeile „So ist es
   gespeichert …“ (`.gr-jetzt-stand`, sonst --gedaempft) — sie stand bei
   einer Durchsage grau auf --notfall, hell 1,24:1, dunkel 3,69:1. */
.gr-jetzt-durchsage .gr-jetzt-stand{color:inherit}
/* … Sprünge und die klebende Gerätekarte unter der klebenden Kopfzeile
   (`--klebe-oben`, gesetzt von `grKlebeObenSetzen` am Element `html`, das
   schlägt diese Vorgabe), nicht dahinter. */
:root{--klebe-oben:0px}
.gr-detail .gr-was,.gr-detail .gr-ab{scroll-margin-top:calc(var(--klebe-oben,0px) + var(--a3))}
.detail-spalten.gr-detail > .gr-seite-karte{top:calc(var(--klebe-oben,0px) + var(--a4))}
@media (max-width:1099px){
  .detail-spalten.gr-detail > .gr-seite-karte{top:auto}
}
/* … die Meldung unten steht über der Leiste „Nicht gespeichert“, nicht
   auf ihr (am Handy nahm eine rote Meldung „Verwerfen“ und „Speichern“
   die Klicks ab). Wie im Editor seit 420 (`body.mit-leiste`). */
body:has(.gr-leiste:not(.versteckt)) #hinweis{bottom:calc(var(--a4) + 76px + env(safe-area-inset-bottom))}
@media (max-width:860px){
  body:has(.gr-leiste:not(.versteckt)) #hinweis{bottom:calc(var(--a3) + 100px + env(safe-area-inset-bottom))}
  body.mit-handy-nav:has(.gr-leiste:not(.versteckt)) #hinweis{bottom:calc(var(--a3) + 160px + env(safe-area-inset-bottom))}
}
/* … „App veraltet“ mit Abstand zu seinem Knopf. */
.gr-app-veraltet{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--a2) var(--a3)}
/* ============================================================
   Die Zustandsliste der Gerätekarte (Fassung 427, L-621, Plan 422)
   Zeichen plus Text, Abweichungen zuerst; Farbe nie allein. Nur `color`
   je Regel, der Grund bleibt die Karte.
   ============================================================ */
.gr-zustandsliste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.gr-zl{display:flex;align-items:center;gap:var(--a2) var(--a3);min-height:38px;padding:var(--a1) 0;
  border-top:1px solid var(--linie);font-size:var(--s3);line-height:1.35}
.gr-zl-zeichen{display:inline-flex;flex:none}
.gr-zl-gut .gr-zl-zeichen{color:var(--gruen)}
.gr-zl-ab .gr-zl-zeichen{color:var(--rot)}
.gr-zl-still .gr-zl-zeichen{color:var(--gedaempft)}
.gr-zl-name{flex:none}
.gr-zl-ab .gr-zl-name{font-weight:600}
.gr-zl-wert{flex:1;min-width:0;text-align:right;font-size:var(--s2);color:var(--gedaempft);overflow-wrap:anywhere}
/* F59: das Titelbild im echten Format — hochkant schmal auf dunklem Grund. */
.gr-links-bilder.hoch .gr-mini{display:flex;justify-content:center;padding:var(--a2);background:var(--dunkel)}
.gr-links-bilder.hoch .gr-mini .db-mini{aspect-ratio:9/16;width:96px}
/* … und mit Mond in der Ruhezeit (F59): Die Miniatur ist schmal, aber hoch genug;
   die Regel für kleine Miniaturen (Fassung 350) nimmt ihn sonst weg. */
.gr-links-bilder.hoch .gr-mini .db-mini-ruhe .db-mini-mond{display:inline-flex}

/* ---------- Problem melden (Fassung 430, L-623, Bauplan 424) ----------
   Die Meldungszeile in der Bildschirmliste, der Streifen oben im Detail
   (`.streifen.streifen-stoerung`: Balken links, keine rot getönte Fläche)
   und die Wahl „Was ist los?“ im Dialog — Zeilen mit 44 px wie die
   übrigen Ziele auf dem Handy. */
.gr-problem-zeile{display:flex;align-items:center;gap:var(--a1);font-size:var(--s2);color:var(--rot-text)}
.gr-problem-zeile svg{flex:none}
.gr-problem{margin-bottom:var(--a3);align-items:flex-start;flex-wrap:nowrap}
.gr-problem > svg{flex:none;color:var(--rot);margin-top:2px}
.gr-problem-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--a1);overflow-wrap:anywhere}
.gr-problem-notiz{color:var(--tinte)}
.gr-problem-mehr summary{cursor:pointer;font-size:var(--s2);color:var(--gedaempft)}
.gr-problem-mehr ul{margin:var(--a1) 0 0;padding-left:var(--a4);font-size:var(--s2)}
.gr-problem-erledigt{flex:none}
.pm-arten{border:0;margin:0 0 var(--a3);padding:0;display:flex;flex-direction:column;gap:var(--a1);min-width:0}
.pm-arten legend{font-weight:600;margin-bottom:var(--a2);padding:0}
.pm-wahl{display:flex;align-items:center;gap:var(--a2);min-height:44px;padding:0 var(--a3);
  border:1px solid var(--linie);border-radius:var(--r2);cursor:pointer}
.pm-wahl:has(input:checked){border-color:var(--akzent);background:var(--akzent-weich)}
.pm-text{width:100%;box-sizing:border-box}
.pm-satz{font-size:var(--s2);color:var(--gedaempft);margin:0 0 var(--a3)}
.pm-fehler{color:var(--rot-text);margin:0 0 var(--a3)}
/* Foto zum Problem (Fassung 431, L-624): das Häkchen im Dialog mit seiner
   Unterzeile (Ziel 44 px hoch) und die Zeile im Streifen mit dem kleinen
   Bild, das in einem neuen Reiter groß aufgeht. */
.pm-foto{display:flex;align-items:flex-start;gap:var(--a2);min-height:44px;margin:0 0 var(--a3);cursor:pointer}
.pm-foto input{flex:none;margin-top:var(--a1)}
.pm-foto > span{display:flex;flex-direction:column;gap:var(--a1)}
.pm-foto-unter{font-size:var(--s2);font-weight:400;color:var(--gedaempft)}
.gr-problem-foto{display:flex;align-items:center;gap:var(--a2);font-size:var(--s2);color:var(--gedaempft)}
.gr-problem-foto svg{flex:none}
.gr-problem-foto-bild{flex:none;display:block;line-height:0;border-radius:var(--r2)}
.gr-problem-foto-bild img{width:96px;height:64px;object-fit:contain;background:var(--flaeche-4);
  border:1px solid var(--linie);border-radius:var(--r2)}
.gr-problem-foto-bild:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
@media (max-width:600px){
  .gr-problem{flex-wrap:wrap}
  .gr-problem-erledigt{margin-left:auto}
}

/* ============================================================
   Fassung 434 (L-600 Teil 1, Bauplan 428) — Ordner als Kacheln im
   Raster unter „Inhalte“ (Entwurf ADR-082, Bild 12): gleich groß wie
   ein Inhalt, Fläche --flaeche-2, drei Mini-Vorschauen mit dem
   Ordnersymbol darüber, Name, „Ordner · 6“. Die Pfadzeile steht auf
   jeder Ebene, „Alles zeigen“ leise rechts daneben (F73).
   ============================================================ */
.ord-raster-kopf{margin:var(--a3) 0 0;gap:var(--a2)}
.ord-pfad-zahl{color:var(--gedaempft);font-size:var(--s2);padding-left:var(--a1)}
.ord-leise{background:none;border:0;padding:var(--a1) var(--a2);min-height:32px;color:var(--gedaempft);
  font-size:var(--s2);font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.ord-leise:hover{color:var(--tinte);filter:none}
.ord-leise.an{color:var(--akzent-text)}
.ord-leise:focus-visible{outline:2px solid var(--fokus);outline-offset:2px;border-radius:var(--r1)}
.ord-rkachel{display:flex;flex-direction:column;gap:var(--a1);min-width:0;position:relative;
  background:var(--flaeche-2);border:1px solid var(--linie);border-radius:var(--r2);padding:var(--a2);
  cursor:pointer;color:var(--tinte);text-align:left}
.ord-rkachel:hover{border-color:var(--linie-stark);filter:none}
.ord-rkachel-auf{position:relative;display:flex;align-items:center;justify-content:center;
  height:104px;width:100%;padding:0;background:none;border:0;border-radius:var(--r1);cursor:pointer}
.vk-gitter .ord-rkachel-auf{height:auto;aspect-ratio:4/3}
.vk-gitter button.ord-rkachel-neu{min-height:0;aspect-ratio:4/3}
.ord-rkachel-auf:hover{filter:none}
.ord-rkachel-auf:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
.ord-rkachel-minis{display:flex;gap:var(--a1);justify-content:center;width:100%;height:62%}
.ord-mini{flex:0 1 30%;min-width:0;height:100%;border-radius:6px;object-fit:cover;overflow:hidden;
  background:var(--flaeche-3);background-size:cover;background-position:center;display:block}
.ord-mini img{width:100%;height:100%;object-fit:cover;display:block}
.ord-mini-ton{display:flex;align-items:center;justify-content:center;color:var(--gedaempft)}
.ord-rkachel-zeichen{position:absolute;left:50%;bottom:6%;transform:translateX(-50%);
  display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;
  border-radius:var(--r1);background:var(--flaeche);color:var(--akzent-text);box-shadow:var(--schatten-1)}
.ord-minis-leer + .ord-rkachel-zeichen{bottom:auto;top:50%;transform:translate(-50%,-50%)}
.ord-rkachel-kopf{display:flex;align-items:center;gap:var(--a1);min-width:0}
.ord-rkachel-name{flex:1 1 auto;min-width:0;font-size:var(--s3);font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-rkachel-meta{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft)}
/* `button.` vor der Klasse: `button:not(.text-knopf){min-height:44px}`
   wiegt sonst mehr. Im Foliengitter so hoch wie ein Vorschaubild (4:3). */
button.ord-rkachel-neu{align-items:center;justify-content:center;flex-direction:column;min-height:150px;
  background:none;border:1px dashed var(--linie-stark);color:var(--gedaempft);font-weight:600;font-size:var(--s2)}
.ord-rkachel-neu:hover{border-style:solid;color:var(--tinte)}
.ord-rkachel-neu:focus-visible{outline:2px solid var(--fokus);outline-offset:2px}
/* Beim Ziehen: alle Ordner gestrichelt, das Ziel unter dem Zeiger mit
   Akzentrand und --akzent-weich (Entwurf §8). */
.ord-zielt .ord-rkachel:not(.ord-rkachel-neu){border-style:dashed;border-color:var(--akzent)}
.ord-rkachel.ord-ueber{border:2px solid var(--akzent);background:var(--akzent-weich);padding:calc(var(--a2) - 1px)}
/* „⋯“ neben dem Namen — an Ordnern, Dateien und Folien (F75). */
.ord-rkachel .kachel-mehr,.med-kopf .kachel-mehr,.vk-kopf .kachel-mehr{width:28px;height:28px;min-height:28px;
  border-color:transparent;background:transparent;flex:none}
.med-kopf{display:flex;align-items:center;gap:var(--a1);padding:var(--a2) var(--a1) 0 0;min-width:0}
.med-kopf .med-name{flex:1 1 auto;min-width:0}
.med-karte .med-zeile{font-family:var(--mono)}
.vk-kopf{display:flex;align-items:center;gap:var(--a1);min-width:0}
.vk-kopf .vk-name{flex:1 1 auto;min-width:0}
.vk-kopf .kachel-tun{margin:0;flex:none}
.vk-kopf button.vk-name-knopf{display:block;background:none;border:0;padding:0;min-height:32px;text-align:left;
  color:var(--tinte);cursor:pointer;font-family:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vk-name-knopf:hover{filter:none;text-decoration:underline}
.vk-name-knopf:focus-visible{outline:2px solid var(--fokus);outline-offset:2px;border-radius:var(--r1)}

/* ============================================================
   Fassung 435 (L-600 Teil 2, Bauplan 429, F71) — Ordner als Zeilen der
   Playlist-Tabelle (`ordnerRaster` mit `zeilen: true`). Drei Spuren wie
   eine Playlist: Ordnersymbol · Name (der Knopf) und „Ordner · 6“ · „⋯“.
   Ziehen: gestrichelt in `--akzent`, das Ziel mit `--akzent` und
   `--akzent-weich` wie die Ordnerkacheln unter „Inhalte“ (434).
   ============================================================ */
.ord-lzeile-bild{display:flex;align-items:center;justify-content:center;color:var(--akzent-text)}
.ord-lzeile-haupt{display:flex;flex-direction:column;align-items:flex-start;gap:var(--a1);min-width:0}
button.ord-lzeile-auf{background:none;border:0;padding:0;min-height:0;color:var(--tinte);
  font-size:var(--s3);font-weight:600;text-align:left;max-width:100%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
button.ord-lzeile-auf:hover{filter:none;text-decoration:underline}
button.ord-lzeile-auf:focus-visible{outline:2px solid var(--fokus);outline-offset:2px;border-radius:var(--r1)}
.ord-lzeile-meta{font-family:var(--mono);font-size:var(--s1);color:var(--gedaempft)}
.ord-lzeile-tun{display:flex;align-items:center;justify-content:flex-end}
.ord-lzeile-tun .kachel-mehr{width:44px;height:44px}
.ord-lzeile-neu button.ord-lzeile-auf{font-weight:400;color:var(--gedaempft)}
.ord-lzeile-neu:hover button.ord-lzeile-auf{color:var(--tinte)}
.ord-lzeile-neu .ord-lzeile-bild{color:var(--gedaempft)}
.ord-zielt .ord-lzeile:not(.ord-lzeile-neu){outline:1px dashed var(--akzent);outline-offset:-3px}
.ord-lzeile.ord-ueber{background:var(--akzent-weich);box-shadow:inset 0 0 0 2px var(--akzent)}
@media (max-width:860px){
  .pl-zeile.pl-pl.ord-lzeile{grid-template-areas:"mini name tun"}
  .pl-zeile.pl-pl.ord-lzeile>.ord-lzeile-bild{grid-area:mini}
  .pl-zeile.pl-pl.ord-lzeile>.ord-lzeile-haupt{grid-area:name}
  .pl-zeile.pl-pl.ord-lzeile>.ord-lzeile-tun{grid-area:tun}
}

/* ---------- Fassung 438 · Handy: kein ▾ neben „Speichern" ----------
   Die Leiste unten hat „Auf Bildschirm zeigen" neben „Speichern"
   (Fassung 420), wie im Entwurf; „Speichern" bekommt dort die runden
   Ecken zurück. */
@media (max-width:860px){
  .handy-aktionen button.sp-zeigen{display:none}
  .handy-aktionen .speicher-block.mit-zeigen #btn-speichern{border-radius:var(--r1)}
}
