/* AUTOGENERIERT von scripts/design.mjs (npm run design) — NICHT bearbeiten.
   Quelle der Wahrheit: wk-design/popup.css im Workspace-Root. */

/* ============================================================
   wk-design · popup.css
   Solange ein Pop-up offen ist, steht die Seite dahinter still — in
   Portal, Hauptseite und Archiv. Wird von `npm run design` verteilt,
   genau wie tokens.css und felder.css.

   WARUM ES DIESE DATEI GIBT (01.10.2026).

   Jede Anwendung sperrte vorher auf ihre eigene Weise, und jede hatte ein
   Loch:
     · das Portal gar nicht — `showOverlay` legt ein <div> über die Seite,
       und darunter scrollte alles mit;
     · die Hauptseite per `html:has(dialog[open])` — richtig, aber nur für
       ihre drei <dialog>s;
     · das Archiv per `document.body.style.overflow`, gesetzt von ZWEI
       Bauteilen unabhängig voneinander. Wer in der Epochen-Galerie die
       Lightbox schloss, gab das Scrollen frei, obwohl die Seitenleiste
       darunter noch offen war: die Lightbox wusste nichts von ihr.

   BAUART. Die Sperre fragt das Dokument, nicht einen Zähler: steht irgendwo
   ein Element mit `aria-modal="true"` oder ein offenes <dialog>, ist die
   Seite gesperrt; ist keines mehr da, ist sie frei. Es gibt nichts zu setzen
   und nichts zurückzusetzen — und damit nichts, das ein zweites Bauteil
   überschreiben oder ein Fehler im Schließen vergessen kann.

   Wer ein neues Pop-up baut, schreibt `aria-modal="true"` an das Fenster
   (das braucht der Screenreader ohnehin) oder nimmt `<dialog>` mit
   `showModal()`. Mehr ist nicht zu tun.

   NUR AUF DEM BILDSCHIRM. Beim Drucken würde `overflow:hidden` am <html>
   in manchen Browsern alles hinter der ersten Seite abschneiden — und im
   Portal wird auch aus offenen Fenstern heraus gedruckt.
   ============================================================ */

@media screen {
  /* `scrollbar-gutter` hält die Breite, wo die Leiste verschwindet —
     sonst rückte der Inhalt beim Öffnen um ihre Breite nach rechts. */
  html:has([aria-modal="true"]),
  html:has(dialog[open]) {
    overflow: hidden;
    scrollbar-gutter: stable;
  }

  /* Was IM Pop-up scrollt, gibt am Ende nicht an die Seite weiter. Auf dem
     Handy zog sonst der Wisch über das Ende einer langen Liste hinaus die
     gesperrte Seite trotzdem mit (Gummiband, Neuladen-Geste). */
  :is([aria-modal="true"], dialog),
  :is([aria-modal="true"], dialog) * {
    overscroll-behavior: contain;
  }
}
