/* ============================================================
   PRÜFMAGAZIN — BASIS (Ebene 2)
   Die Klassen, die auf JEDER Seite gleich sind. Bis jetzt lagen
   sie als Kopie in jeder einzelnen Seite — das war die Ursache
   für unsichtbare Texte, fehlende Abstände und tote Animationen,
   sobald eine Kopie entfernt wurde.

   LADEREIHENFOLGE (zwingend):
     1. pm-fundament.css   nur Variablen
     2. pm-basis.css       diese Datei
     3. pm.css             Header, Footer, Komponenten
     4. Seiten-CSS         inline im Block, nur Einzelstücke

   GRUNDREGEL
   Basisklassen legen KEINE Farbe fest, sie lesen den Kontext:
       .pm-h2{ color:var(--text); }
   Die Sektion setzt den Kontext. Dunkle Sektion = eine Klasse
   (.pm-dark), alles darin stimmt automatisch. Nie wieder eine
   Überschrift, die in ihrem eigenen Hintergrund verschwindet.
   ============================================================ */


/* ---------- 1 · Kontext ---------------------------------------
   Hell ist Standard. .pm-dark kippt den ganzen Kontext um.
   Weitere Kontexte (z. B. Akzentflächen) kommen hier dazu —
   nicht in den Seiten.                                          */
.pm{
  --text:var(--blau);          /* Überschriften, kräftiger Text */
  --text-2:var(--grau);        /* Fließtext, Lead              */
  --text-3:var(--schwach);     /* Kleintext, Beschriftungen    */
  --kicker:var(--akzent);      /* Eyebrow                      */
  --regel:var(--linie);        /* Trennlinien                  */
}
.pm .pm-dark,
.pm.pm-dark{
  --text:#fff;
  --text-2:#AEB9CC;
  --text-3:#9AA6BC;
  --kicker:var(--akzent-hell);
  --regel:rgba(255,255,255,.14);
}


/* ---------- 2 · Rahmen und Reset ------------------------------ */
.pm{
  font-family:var(--f,"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif);
  color:var(--text);
  background:#fff;
  -webkit-font-smoothing:antialiased;

  /* Stand bisher in pm.css. Der alte Divi-Aufbruch
     (width:100vw;left:50%;margin-left:-50vw) ging von einer
     schmalen Divi-Spalte als Elternelement aus und schob unter
     Astra die ganze Seite nach links. */
  width:100%;
  position:relative;
  /* clip statt hidden: "hidden" erzeugt einen Scroll-Container und
     macht damit jedes position:sticky im Inneren wirkungslos —
     genau daran blieb das Inhaltsverzeichnis der Beitraege oben
     haengen. "clip" schneidet genauso ab, ohne diesen Nebeneffekt. */
  overflow-x:clip;
}
/* RESET-REGEL, verbindlich:
   Der Reset greift nur auf Elemente OHNE Klasse (:not([class])).
   Damit schlaegt er die Theme-Vorgaben von Astra, laesst aber jede
   unserer Klassen unberuehrt. Beide Fehler der Vorfassungen sind
   damit ausgeschlossen:
   - ".pm p{margin:0}" hatte alle Absatzabstaende der Seiten geloescht
   - ":where(...)" hatte Spezifitaet 0 und verlor gegen Astra, wodurch
     Footer- und Menuelisten wieder Theme-Abstaende bekamen */
.pm *{box-sizing:border-box;}
.pm h1,.pm h2,.pm h3,.pm h4,.pm p,.pm li,.pm span,.pm a{
  hyphens:none;-webkit-hyphens:none;-ms-hyphens:none;
  overflow-wrap:normal;word-break:normal;
}
.pm h1:not([class]),.pm h2:not([class]),.pm h3:not([class]),
.pm h4:not([class]),.pm h5:not([class]){font-family:inherit;padding:0;margin:0;}
.pm p:not([class]){margin:0;}
/* Listen und Bilder OHNE :not() — sie brauchen den Reset immer,
   sonst schlagen Astras Listenabstaende und Bildgroessen durch
   (Header-Logo und Footer-Spalten). Nur bei p und h1-h5 ist die
   Einschraenkung noetig, weil dort unsere Klassen die Abstaende
   setzen. */
.pm ul{list-style:none;padding-left:0;margin:0;}
.pm ul li{list-style:none;margin:0;}
.pm ul li::marker{content:"";}
.pm img{max-width:100%;height:auto;display:block;}
.pm a,.pm a:link,.pm a:visited{color:inherit;text-decoration:none;}
.pm a h1,.pm a h2,.pm a h3,.pm a h4{color:inherit;}


/* ---------- 3 · Astra neutralisieren --------------------------
   Astra greift in .entry-content ein und unterstreicht jeden Link
   und legt einen Schatten um jedes Bild. Beides zerstört unsere
   Buttons und freigestellten Grafiken. Hier einmal zentral aus,
   statt auf jeder Seite dagegen anzukämpfen.                     */
.entry-content .pm a,
.ast-single-post .entry-content .pm a{text-decoration:none;}
.ast-article-single .pm img,
.ast-article-single .pm figure{box-shadow:none;}
/* Astra gibt jedem <button> Hintergrund, Rahmen, Polsterung und einen
   Hover-Farbwechsel. Unsere Akkordeons, Reiter und Aufklapper SIND
   Buttons — dadurch bekamen sie den blauen Kasten und den Rahmen um
   das erste Element. Hier einmal zentral zurueckgesetzt; .pm-btn
   behaelt seinen Stil, weil er weiter unten eigens gesetzt wird. */
.pm button:not(.pm-btn),
.pm button:not(.pm-btn):hover,
.pm button:not(.pm-btn):focus,
.pm button:not(.pm-btn):active{
  background:none;border:0;border-radius:0;box-shadow:none;
  color:inherit;font:inherit;text-transform:none;letter-spacing:inherit;
}
/* Astra haengt an jedes direkte Kind von .entry-content einen
   Unterrand. Das ist der weisse Streifen zwischen letzter Sektion
   und Footer. */
.entry-content > .pm,
.entry-content > *:last-child{margin-bottom:0;}
/* Weisser Streifen zwischen letzter Sektion und Footer. Drei Ursachen,
   alle hier abgeraeumt: Astras Innenabstand am Seitenende, leere
   Absaetze, die wpautop um Skripte und Kommentare legt, und der
   Aussenabstand des .pm-Containers selbst. */
.ast-page-builder-template .site-content .entry-content{padding-bottom:0;}
/* Astra setzt auf #primary einen Aussenabstand von 4em oben und unten.
   Oben faellt er bei page-builder-Seiten weg, unten nicht — das ist der
   weisse Streifen vor dem Footer. */
.ast-page-builder-template #primary,
.ast-page-builder-template .site-main,
.ast-page-builder-template .site-content > .ast-container{
  margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0;}
.entry-content > p:empty,
.entry-content > p > script{display:none;}
.entry-content .pm:last-of-type{margin-bottom:0;}


/* ---------- 4 · Raster und Sektionen -------------------------- */
.pm-wrap{max-width:1240px;margin:0 auto;padding:0 32px;}
@media(max-width:900px){ .pm-wrap{padding:0 22px;} }

.pm section{padding:var(--sp-sec) 0;}

/* Auftakt: keine feste Höhe. svh statt vh, sonst schneidet die
   Adressleiste auf dem Handy den Inhalt ab. Der Inhalt darf die
   Mindesthöhe jederzeit sprengen.                                */
/* Auftaktsektion. Gilt fuer BEIDE Klassennamen im Bestand
   (.pm-auftakt und .pm-hero) — gleichrangige Seiten muessen
   dieselbe Hoehe haben. svh statt vh, sonst schneidet die
   Adressleiste auf dem Handy den Inhalt ab. */
.pm section.pm-auftakt,
.pm section.pm-hero{
  padding:56px 0 var(--sp-sec);
  min-height:var(--hero-min,clamp(420px,62svh,640px));
  display:flex;flex-direction:column;justify-content:center;
}
@media(max-width:900px){
  .pm section.pm-auftakt,
  .pm section.pm-hero{padding:48px 0 var(--sp-sec);min-height:auto;}
}


/* ---------- 5 · Typografie ------------------------------------
   Keine festen Farben. Größen kommen aus dem Fundament.          */
.pm .pm-eyebrow{
  font-size:var(--fs-kicker);letter-spacing:.18em;text-transform:uppercase;
  font-weight:700;color:var(--kicker);margin:0 0 var(--tp-kicker);
}
.pm .pm-h1{font-size:var(--fs-h1);line-height:var(--lh-head);font-weight:700;
  letter-spacing:-.025em;margin:0 0 var(--tp-head);color:var(--text);}
.pm .pm-h2{font-size:var(--fs-h2);line-height:var(--lh-head);font-weight:700;
  letter-spacing:-.022em;margin:0 0 var(--tp-head);color:var(--text);}
.pm .pm-h3{font-size:var(--fs-h3);line-height:1.3;font-weight:700;
  letter-spacing:-.018em;margin:0 0 var(--tp-title);color:var(--text);}
.pm .pm-h4{font-size:var(--fs-h4);line-height:1.35;font-weight:600;
  margin:0 0 var(--tp-title);color:var(--text);}

.pm .pm-lead{font-size:var(--fs-lead);line-height:var(--lh-lead);
  color:var(--text-2);margin:0;max-width:var(--measure-lead);}
.pm .pm-text{font-size:var(--fs-body);line-height:var(--lh-body);
  color:var(--text-2);margin:0;max-width:var(--measure);}
.pm .pm-text + .pm-text{margin-top:var(--tp-para);}
.pm .pm-small{font-size:var(--fs-small);line-height:1.7;color:var(--text-2);margin:0;}

/* Eyebrow auf dunklen Flächen bekommt den Strich davor */
.pm .pm-dark .pm-eyebrow{display:flex;align-items:center;gap:14px;}
.pm .pm-dark .pm-eyebrow::before{
  content:"";width:34px;height:1.5px;background:var(--kicker);flex:none;}


/* ---------- 6 · Sektionskopf ---------------------------------
   Heißt pm-skopf, nicht pm-head: pm-head ist die Website-Kopfzeile
   in pm.css. Gleicher Name für zwei Dinge war eine Fehlerquelle.  */
.pm .pm-skopf{margin:0 0 var(--sp-lead);max-width:720px;}
.pm .pm-skopf--wide{max-width:900px;}
.pm .pm-skopf--center{max-width:680px;margin-left:auto;margin-right:auto;text-align:center;}
.pm .pm-skopf--center .pm-lead{margin-left:auto;margin-right:auto;}
.pm .pm-skopf--row{max-width:none;display:flex;justify-content:space-between;
  align-items:flex-end;gap:32px;}
@media(max-width:900px){
  .pm .pm-skopf--row{flex-direction:column;align-items:flex-start;gap:18px;}
}


/* ---------- 7 · Buttons und Links ----------------------------- */
.pm .pm-btn{
  display:inline-block;padding:18px 40px;border-radius:2px;font-size:15px;
  font-weight:600;font-family:inherit;line-height:1.2;transition:.18s;
  border:1.5px solid transparent;text-decoration:none;cursor:pointer;
}
.pm a.pm-btn--primary,.pm a.pm-btn--primary:link,.pm a.pm-btn--primary:visited{
  background:var(--blau);color:#fff;border-color:var(--blau);}
.pm a.pm-btn--primary:hover{background:var(--blau-2);border-color:var(--blau-2);color:#fff;}

.pm a.pm-btn--ghost,.pm a.pm-btn--ghost:link,.pm a.pm-btn--ghost:visited{
  background:#fff;color:var(--blau);border-color:var(--linie);}
.pm a.pm-btn--ghost:hover{border-color:var(--blau);color:var(--blau);}

.pm a.pm-btn--light,.pm a.pm-btn--light:link,.pm a.pm-btn--light:visited{
  background:#fff;color:var(--blau);border-color:#fff;}
.pm a.pm-btn--light:hover{background:var(--linie);border-color:var(--linie);color:var(--blau);}

.pm a.pm-btn--outline,.pm a.pm-btn--outline:link,.pm a.pm-btn--outline:visited{
  background:transparent;color:#fff;border-color:rgba(255,255,255,.28);}
.pm a.pm-btn--outline:hover{border-color:var(--akzent-hell);color:var(--akzent-hell);}

.pm .pm-btns{display:flex;gap:14px;flex-wrap:wrap;margin-top:var(--sp-block);}

.pm .pm-link{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;
  border-bottom:1.5px solid var(--akzent);padding-bottom:4px;transition:.18s;}
.pm .pm-link:hover{border-bottom-color:var(--text);}


/* ---------- 8 · Hinweiskasten --------------------------------- */
.pm .pm-note{margin-top:var(--sp-lead);padding-top:var(--sp-block);
  position:relative;z-index:1;border-top:1px solid var(--regel);
  display:flex;align-items:flex-start;gap:14px;max-width:760px;}
.pm .pm-note svg{width:22px;height:22px;flex:none;margin-top:1px;}
.pm .pm-note strong{color:var(--text);font-weight:600;}


/* ---------- 9 · Scroll Reveal --------------------------------
   Gestaffeltes Einblenden beim Scrollen. Ausgezeichnet wird per
   data-anim, geschaltet per JS (Klasse is-in).
   Zwei Schutzmechanismen, beide Pflicht:
   - prefers-reduced-motion: alles sofort sichtbar
   - keine Layout-Eigenschaften animieren, nur opacity/transform  */
/* WICHTIG: das Ausblenden haengt an .pm-js am <html>-Element.
   Diese Klasse setzt das Skript selbst. Laeuft kein oder ein
   fehlerhaftes Skript, wird nichts versteckt - die Seite ist dann
   ohne Animation, aber vollstaendig lesbar. Ohne diese Absicherung
   macht ein einziger JS-Fehler die halbe Seite unsichtbar. */
/* WICHTIG: padding-left gehoert mit in diese Kurzschreibweise.
   Elemente, die sowohl per Reveal einblenden ALS AUCH beim Hover
   einruecken, verlieren sonst ihren Hover-Uebergang — die Bewegung
   springt dann hart. Diese Regel steht spaeter als die Sektions-CSS
   und ueberschreibt deren transition komplett. */
.pm-js .pm [data-anim]{
  opacity:0;transform:translateY(var(--rv-y));
  transition:opacity var(--rv-t) var(--ease),
             transform var(--rv-t) var(--ease),
             padding-left var(--t-hover) var(--ease-out);
  will-change:opacity,transform;
}
.pm-js .pm [data-anim].is-in{opacity:1;transform:none;}
.pm [data-anim-delay="1"]{transition-delay:calc(var(--rv-stagger) * 1);}
.pm [data-anim-delay="2"]{transition-delay:calc(var(--rv-stagger) * 2);}
.pm [data-anim-delay="3"]{transition-delay:calc(var(--rv-stagger) * 3);}
.pm [data-anim-delay="4"]{transition-delay:calc(var(--rv-stagger) * 4);}
.pm [data-anim-delay="5"]{transition-delay:calc(var(--rv-stagger) * 5);}

@keyframes pmFade{
  from{opacity:0;transform:translateY(-5px);}
  to{opacity:1;transform:none;}
}

@media(prefers-reduced-motion:reduce){
  .pm-js .pm [data-anim]{opacity:1;transform:none;transition:none;}
  .pm *{animation:none;}
}
