/* =========================================================
   St. Michaelis – Modul-Stylesheet (hero, spalter, karussell,
   slideshow, teams, flipbook, instagram + Musik-Design)
   Baut auf main.css auf und nutzt die --st-* Design-Tokens.
   ========================================================= */

/* ---------- Tokens an Theme koppeln (Michel-Fallbacks) ---------- */
:root{
	--stm-primary:var(--st-color-primary,#002F5D);
	--stm-accent:var(--st-color-accent,#B51F29);
	--stm-lightblue:var(--st-color-lightblue,#CAD9E0);
	--stm-midblue:var(--st-color-secondary,#034B91);
	--stm-gold:var(--st-color-gold,#D1AC57);
	--stm-gap:var(--st-space-m,2rem);
}

/* ---------- Headline-Farben generell (blau / rot) für ALLE Module ---------- */
.module__headline-1{display:block;color:var(--st-color-primary,#002F5D);}
.module__headline-2{display:block;color:var(--st-color-accent,#B51F29);}

/* ---------- Button-Variante Secondary (main.css stylt .btn/.btn--primary) ---------- */
/* 31.07.: Altlast entfernt - .btn--secondary bekam frueher zusaetzlich einen
   2px-inset-Schatten zur 1px-Kontur (wirkte "zu fett"). Styling: Buttons v2 unten. */

/* =========================================================
   Spalter 1–4
   ========================================================= */
.module--spalter .cols__row{display:grid;gap:var(--stm-gap);align-items:start;}
.module--spalter-1 .cols__row{grid-template-columns:1fr;}
.module--spalter-2 .cols__row{grid-template-columns:1fr 1fr;}
.module--spalter-3 .cols__row{grid-template-columns:repeat(3,1fr);}
.module--spalter-4 .cols__row{grid-template-columns:repeat(4,1fr);}
.module__inner.split-70-30 .cols__row{grid-template-columns:7fr 3fr;}
.module__inner.split-30-70 .cols__row{grid-template-columns:3fr 7fr;}

.spalter__head{margin-bottom:0;}
.spalter__head .module__headline{margin-bottom:0;}
.module--spalter .module__inner{grid-template-columns:1fr;row-gap:1.5rem;}
/* Bild-Text 2-Spalter: Kopf in Textspalte, Bild volle Spaltenhoehe oben-buendig */
.has-bildtext .cols__row{align-items:stretch;}
.has-bildtext .spalter__head{margin-bottom:1rem;}
.has-bildtext .col--type-image{align-self:stretch;min-height:340px;}
/* 12.08. Ticket "Fehler Bilddarstellung bei Mehr anzeigen": Ist der Text AUFGEKLAPPT,
   darf die Bildspalte nicht mitwachsen (stretch + cover zoomte das Bild extrem auf).
   Hook = is-open am Toggle-Button; Browser ohne :has() behalten das bisherige Verhalten. */
.has-bildtext:has(.col__more-toggle.is-open) .col--type-image{align-self:flex-start;min-height:0;}
.has-bildtext .col--type-image .col__media{height:100%;margin:0;}
.has-bildtext .col--type-image .col__img,.has-bildtext .col--type-image img{height:100%;width:100%;object-fit:cover;display:block;}
/* Video-Facade in Spalten (YouTube/Vimeo): Poster + Play -> Embed beim Klick */
.col__media--video{position:relative;margin-bottom:var(--st-space-s,1rem);}
.col__video-facade{position:relative;display:block;width:100%;aspect-ratio:16/9;border:0;padding:0;cursor:pointer;background:var(--st-color-primary,#002F5D) 50%/cover no-repeat;overflow:hidden;}
.col__video-facade::after{content:"";position:absolute;inset:0;background:rgba(0,47,93,.18);transition:background .2s ease;}
.col__video-facade:hover::after{background:rgba(0,47,93,.04);}
.col__video-play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:66px;height:66px;border-radius:999px;background:rgba(255,255,255,.92);z-index:1;box-shadow:0 4px 18px rgba(0,0,0,.25);}
.col__video-play::before{content:"";position:absolute;top:50%;left:56%;transform:translate(-50%,-50%);border-style:solid;border-width:11px 0 11px 18px;border-color:transparent transparent transparent var(--st-color-primary,#002F5D);}
.col__video-embed{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;margin-bottom:var(--st-space-s,1rem);}
.col__video-embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
/* Video im Bild-Text-Spalter: FESTES 16:9 statt Hoehe der Textspalte (31.07.) */
.has-bildtext .col--type-video{align-self:start;}
.has-bildtext .col--type-video .col__media--video{height:auto;margin:0;}
.has-bildtext .col--type-video .col__video-facade,.has-bildtext .col--type-video .col__video-embed{aspect-ratio:16/9;height:auto;margin:0;}
.module__inner.is-intro .spalter__head .module__kicker{margin-bottom:.35em;}
.module__inner.is-intro .spalter__head{text-align:center;max-width:872px;margin-left:auto;margin-right:auto;}
.module--spalter-1 .module__inner.is-intro{max-width:872px;margin-inline:auto;}
/* Intro-Checkbox: Inhalt IMMER zentrieren - ueberschreibt jede WYSIWYG-Ausrichtung
   (inline text-align aus dem Editor) per !important (31.07.). */
.module__inner.is-intro .col__text,
.module__inner.is-intro .col__text *{text-align:center!important;}
.module__inner.is-intro .col__text p>a.btn{margin-left:.3rem;margin-right:.3rem;}
.module__inner.hl-xl .module__headline{font-size:var(--stm-h3-size);line-height:var(--stm-h3-lh);} /* 21.08.: hl-xl ~ Headline XL */
/* 09.09. (Maik, "Modul Intro"): XL-Intro fuer die Homepage - Intro-Variante mit Headline-Groesse XL
   (Select "Headline-Groesse" auf XL = H3-Token "Headline XL"). Die Intro-Kappungen (872px) gelten
   dann nur noch fuer die COPY; Kopf/Headline duerfen in den vollen Satzspiegel wachsen (Mock:
   "XL INTRO HEADLINE / HOMEPAGE" laeuft deutlich breiter als die 872px-Lesespalte). */
.module--spalter-1 .module__inner.is-intro.hl-xl{max-width:none;}
.module__inner.is-intro.hl-xl .spalter__head{max-width:1320px;width:100%;} /* width:100% noetig - die is-intro-Basisregel zentriert per margin:auto, und Auto-Margins machen GRID-Items (.cols ist ein Grid) shrink-to-fit: ohne width sass der Kopf auf max-content (724px) statt auf der 1320px-Kappe */
.module__inner.is-intro.hl-xl .spalter__head .module__headline{max-width:none;}
.module__inner.is-intro.hl-xl .cols__row{max-width:872px;margin-inline:auto;} /* Copy bleibt in der bewaehrten Intro-Lesebreite */

.col__media{margin-bottom:var(--st-space-s,1rem);}
.col__media img,.col__media video{width:100%;height:auto;display:block;}
.module--spalter-1 .col__media img{width:auto;max-width:100%;} /* 02.08.: 1-Spalter nie hochskalieren, Bild vollstaendig zeigen (Kundenticket) */
.col__subhead{margin:0 0 .5em;line-height:1.15;color:var(--st-color-primary,#002F5D);
	text-transform:uppercase;font-weight:700;}
.col__subhead--gross{font-size:clamp(1.3rem,2vw,1.6rem);}
.col__subhead--klein{font-size:1.05rem;}
.col__text{font-size:var(--stm-copy-size,1.25rem);line-height:var(--stm-copy-lh,1.5);} /* 03.09. (Maik, "Globale Headlines"): Zweispalter-Copy = Standard-Copy 20/30 (erbte vorher 18px vom Body) */
.col__cta{margin-top:var(--st-space-s,1rem);display:flex;gap:12px;flex-wrap:wrap;}

@media (max-width:900px){
	.module--spalter-2 .cols__row,.module--spalter-3 .cols__row,.module--spalter-4 .cols__row,
	.module__inner.split-70-30 .cols__row,.module__inner.split-30-70 .cols__row{grid-template-columns:1fr;}
}

/* =========================================================
   Hero-Slider
   ========================================================= */
.hero-slider{position:relative;overflow:hidden;}
/* 01.08.: Satzspiegel-Breite des Heros wirkte nie - es gab keine Regel fuer :not(.is-full) (Kundenticket) */
.module--hero:not(.is-full){width:calc(100% - 2*var(--st-gutter,60px));max-width:1200px;margin-left:auto;margin-right:auto;}
/* 31.07.: FESTE Hero-Hoehen statt Browserhoehe (Figma: Homepage 717, Verteiler 500) */
.hero-slider--s{min-height:0;height:500px;}
.hero-slider--m{min-height:0;height:600px;}
.hero-slider--l{min-height:0;height:717px;}
@media(max-width:782px){ /* Figma Mobile: 600/444 */
	.hero-slider--s{height:444px;}
	.hero-slider--m{height:520px;}
	.hero-slider--l{height:600px;}
}
.hero-slider__track{position:absolute;inset:0;}
.hero-slider__slide{position:absolute;inset:0;opacity:0;transition:opacity .6s ease,transform .6s ease;}
.hero-slider__slide.is-active{opacity:1;z-index:1;}
.hero-slider:not(.is-ready) .hero-slider__slide:first-child{opacity:1;}
.hero-slider.is-single .hero-slider__slide{opacity:1;position:relative;}
.hero-slider.effect-slide .hero-slider__slide{opacity:1;}
.hero-slider .hero{height:100%;}

.hero-slider__slide.hero{position:absolute;display:flex;align-items:center;}
.hero-slider.is-single .hero-slider__slide.hero{position:relative;}
.hero__media{position:absolute;inset:0;z-index:0;}
.hero__media img,.hero__video{width:100%;height:100%;object-fit:cover;}
/* 13.09. R10 ("Musik-Design"-Nachtrag, Hero-Video): YouTube/Vimeo als Hintergrund-Video.
   Der Wrapper ist Size-Container (er ist inset:0 absolut, seine Groesse haengt nie vom Inhalt ab),
   das iframe deckt per 16:9-Cover-Formel (cqw/cqh) die Flaeche wie object-fit:cover; pointer-events
   aus = kein Player-Hover/Klick, der Hero bleibt durchklickbar wie mit Bild. Sitzt INNERHALB von
   .hero__media, damit der Musik-"M"-Clip (has-musik-m) auch das Video beschneidet. */
.hero__ytwrap{position:absolute;inset:0;overflow:hidden;pointer-events:none;container-type:size;}
.hero__ytwrap iframe{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);border:0;width:max(100cqw,177.78cqh);height:max(100cqh,56.25cqw);}
/* Musik V-Ausschnitt: fester Winkel -> Oberkante skaliert mit Hero-Hoehe (L/M/S) */
/* 13.09. (Maik, "Modul Musik Design"): das weisse "M" (Bild-Clip) haengt jetzt an der EIGENEN
   Hero-Checkbox "Musik-Bilder" (Klasse has-musik-m, hero.php) statt am Musik-Design - "man
   moechte haeufig die blauen Headlines, aber nicht das weisse M". Der transparente Kasten
   gehoert zum M-Look (ragte sonst ins V-Dreieck) und wandert mit. ACHTUNG Altbestand:
   bestehende Musik-Heros zeigen das M erst wieder, wenn die neue Checkbox gesetzt ist. */
.has-musik-m .hero__media{clip-path:polygon(25% 0,75% 0,50% 100%);}
.hero-slider--m.has-musik-m .hero__media{clip-path:polygon(29% 0,71% 0,50% 100%);}
.hero-slider--s.has-musik-m .hero__media{clip-path:polygon(34% 0,66% 0,50% 100%);}
/* Michel-/Musik-Design: weisser Kasten entfaellt (31.07., ragte ins V-Dreieck) */
.hero-slider.has-musik-m .hero__box{background:transparent;}
/* 10.08. (Asana "Hero-Headline"): Box auto-breit (P rechts = P links), bisherige Breite
   als MAXIMALbreite, unten 20px weniger Padding (2.5rem-20px = 1.25rem). */
.hero__box{position:relative;z-index:1;background:rgba(255,255,255,.85);padding:2.5rem 2.5rem 1.25rem;width:auto;max-width:clamp(440px,36vw,680px);
	margin-left:0;}
.hero__topline{color:var(--st-color-accent,#B51F29);font-family:var(--st-font-head,inherit);text-transform:uppercase;font-weight:700;
	font-size:1.05rem;letter-spacing:0;margin:0 0 .6em;}
.hero__headline{margin:0 0 .5em;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;line-height:.9;letter-spacing:0;
	font-size:clamp(2.5rem,5.2vw,5rem);
	-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;} /* 10.08.: automatischer Umbruch (Asana "Hero-Headline", Screenshot Segensmomente) */
.hero__text{color:var(--st-color-text,#1a1a1a);margin:0 0 1.2em;}
.hero__cta.btn{margin-top:.25rem;}

.hero-slider__nav{position:absolute;right:24px;bottom:24px;z-index:3;display:flex;gap:8px;}
.hero-slider__arrow{width:44px;height:44px;padding:0;box-sizing:border-box;border-radius:50%;border:2px solid rgba(255,255,255,.85);background:transparent;color:rgba(255,255,255,.85);cursor:pointer;display:flex;align-items:center;justify-content:center;} /* 04.08.: Outline-Pfeile wie G5 (Kundenticket) */
.hero-slider__arrow svg{max-width:none;flex:0 0 auto;}
.hero-slider__arrow:hover{background:rgba(255,255,255,.15);color:#fff;border-color:#fff;}
.hero-slider__dots{position:absolute;left:50%;transform:translateX(-50%);bottom:28px;z-index:3;display:flex;gap:8px;} /* 04.08.: mittig (Kundenticket) */
.hero-slider__dots button{width:10px;height:10px;border-radius:999px;border:0;background:rgba(255,255,255,.6);cursor:pointer;padding:0;}
.hero-slider__dots button[aria-current="true"]{background:#fff;}
@media(max-width:900px){ .hero__box{margin:0 var(--st-pad,20px) 0 0;width:auto;max-width:none;padding:1.75rem;} } /* 28.08. (Maik): HL-Flaeche mobil IMMER buendig am linken Browserrand (links 0, rechte Luft bleibt) */

/* =========================================================
   Vanilla-Slider (Karussell, Slideshow, Spalten-Slideshow)
   ========================================================= */
.stm-slider{position:relative;overflow:hidden;}
.stm-slider__track{position:relative;}
.stm-slider__slide{position:absolute;inset:0;opacity:0;transition:opacity .5s ease,transform .5s ease;}
.stm-slider__slide.is-active{opacity:1;position:relative;} /* aktive Folie traegt die Hoehe (29.07.) */
/* 14.09. (Kunde, "Slider Mehrspalter"): Swipe-Unterstuetzung - is-adj macht den beim Ziehen
   mitlaufenden Nachbar-Slide sichtbar (JS setzt/entfernt die Klasse); pan-y laesst vertikales
   Wischen als Seiten-Scroll durch und reserviert horizontal fuers Sliden. Beides NUR am
   generischen .stm-slider (Hero-Slider unberuehrt). */
.stm-slider__slide.is-adj{opacity:1;}
.stm-slider[data-stm-slider] .stm-slider__track{touch-action:pan-y;}
.stm-slider:not(.is-ready) .stm-slider__slide:first-child{position:relative;opacity:1;}
.stm-slider__slide img{width:100%;height:auto;display:block;}
.stm-slider__prev,.stm-slider__next{position:absolute;top:50%;transform:translateY(-50%);z-index:3;
	width:44px;height:44px;border:0;border-radius:999px;background:rgba(255,255,255,.9);cursor:pointer;font-size:1.1rem;}
.stm-slider__prev{left:12px;} .stm-slider__next{right:12px;}
.stm-slider__prev,.stm-slider__next{display:flex;align-items:center;justify-content:center;} /* 01.08.: SVG-Pfeile zentrieren */
.stm-slider__prev svg,.stm-slider__next svg{display:block;flex:0 0 auto;}
.stm-slider__dots{position:absolute;left:0;right:0;bottom:12px;z-index:3;display:flex;gap:8px;justify-content:center;}
.stm-slider__dots button{width:10px;height:10px;border-radius:999px;border:0;background:rgba(0,0,0,.25);cursor:pointer;padding:0;}
.stm-slider__dots button[aria-current="true"]{background:var(--st-color-primary,#002F5D);}

/* Karussell (Kacheln) – Karten-Karussell */
.stm-cards-carousel{position:relative;}
.stm-cards__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--st-space-m,2rem);margin-bottom:var(--st-space-m,2rem);flex-wrap:wrap;}
.stm-cards__heading{max-width:60ch;}
.stm-cards__heading .module__headline{margin:.2em 0 0;}
.stm-cards__controls{display:flex;align-items:center;gap:var(--st-space-s,1rem);}
.stm-cards__arrows{display:flex;gap:.5rem;}
.stm-cards__arrow{width:44px;height:44px;border-radius:999px;border:1px solid var(--st-color-primary,#002F5D);
  background:#fff;color:var(--st-color-primary,#002F5D);font-size:1.5rem;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:background .15s ease,color .15s ease;}
.stm-cards__arrow:hover{background:var(--st-color-primary,#002F5D);color:#fff;}
.stm-cards__arrow[disabled]{opacity:.35;cursor:default;}
.stm-cards__arrow[disabled]:hover{background:#fff;color:var(--st-color-primary,#002F5D);}

.stm-cards{list-style:none;margin:0;padding:0 0 .5rem;display:grid;grid-auto-flow:column;
  grid-auto-columns:minmax(260px,1fr);gap:var(--st-space-m,2rem);
  overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;
  scrollbar-width:none;-ms-overflow-style:none;}
.stm-cards::-webkit-scrollbar{display:none;}
@media(min-width:700px){ .stm-cards{grid-auto-columns:calc((100% - 3*var(--st-space-m,2rem))/4);} }
.stm-card{scroll-snap-align:start;}
.stm-card__inner{display:flex;flex-direction:column;gap:.85rem;text-decoration:none;color:inherit;}
.stm-card__media{display:block;aspect-ratio:1/1;overflow:hidden;background:var(--st-color-mist,#CAD9E0);border-radius:2px;}
.stm-card__img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .4s ease;}
a.stm-card__inner:hover .stm-card__img{transform:scale(1.04);}
.stm-card__title{font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;
  letter-spacing:.04em;font-size:1.05rem;color:var(--st-color-primary,#002F5D);}

.stm-cards__dots{display:flex;gap:.5rem;justify-content:center;margin-top:var(--st-space-m,2rem);}
.stm-cards__dots button{width:9px;height:9px;border-radius:999px;border:0;background:rgba(0,47,93,.25);cursor:pointer;padding:0;}
.stm-cards__dots button[aria-current="true"]{background:var(--st-color-primary,#002F5D);}
@media(max-width:700px){ .stm-cards{grid-auto-columns:78%;} .stm-cards__arrows{display:none;} }

/* =========================================================
   Slideshow / Galerie – Raster+Lightbox, Thumbnail-Slider, Coverflow
   ========================================================= */
.stm-ss__head{margin-bottom:var(--st-space-m,2rem);}
.stm-ss__head .module__headline{margin:0;}
.stm-ss__head .module__kicker{margin-bottom:8px;} /* 01.09. (Maik, Galerie-Runde): Abstand Topline -> HL um 1/3 verringert (12 -> 8px; HL-margin-top raus, sonst gewinnt er beim Margin-Collapse) */
.stm-ss__caption{margin:.5rem 0 0;font-size:.88rem;line-height:1.4;color:var(--st-color-slate,#5C788E);}
.stm-ss__caption-text{color:var(--st-color-ink,#1a1a1a);}
.stm-ss__credit{font-style:italic;opacity:.85;}

/* --- Raster + Lightbox --- */
.stm-gallery-grid{display:grid;gap:var(--st-space-s,1rem);grid-template-columns:repeat(3,1fr);}
.stm-gallery-grid--2{grid-template-columns:repeat(2,1fr);}
.stm-gallery-grid--3{grid-template-columns:repeat(3,1fr);}
.stm-gallery-grid--4{grid-template-columns:repeat(4,1fr);}
@media(max-width:900px){ .stm-gallery-grid,.stm-gallery-grid--3,.stm-gallery-grid--4{grid-template-columns:repeat(2,1fr);} }
@media(max-width:520px){ .stm-gallery-grid,.stm-gallery-grid--2,.stm-gallery-grid--3,.stm-gallery-grid--4{grid-template-columns:1fr;} }
.stm-gallery__item{margin:0;}
.stm-gallery__btn{display:block;width:100%;padding:0;border:0;background:none;cursor:pointer;overflow:hidden;border-radius:2px;}
.stm-gallery__img{width:100%;height:100%;object-fit:cover;display:block;aspect-ratio:4/3;transition:transform .4s ease;}
.stm-gallery__btn:hover .stm-gallery__img{transform:scale(1.04);}

/* Lightbox-Overlay (per JS injiziert) */
.stm-lightbox{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;
  background:rgba(0,20,40,.92);opacity:0;visibility:hidden;transition:opacity .25s ease;}
.stm-lightbox.is-open{opacity:1;visibility:visible;}
.stm-lightbox__img{max-width:88vw;max-height:78vh;object-fit:contain;display:block;box-shadow:0 10px 40px rgba(0,0,0,.4);}
.stm-lightbox__cap{position:absolute;left:0;right:0;bottom:24px;text-align:center;color:#fff;font-size:.95rem;padding:0 1rem;}
.stm-lightbox__cap .stm-ss__credit{color:rgba(255,255,255,.75);}
.stm-lightbox__btn{position:absolute;top:50%;transform:translateY(-50%);width:54px;height:54px;border:0;border-radius:999px;
  background:rgba(255,255,255,.15);color:#fff;font-size:2rem;line-height:1;cursor:pointer;transition:background .15s;}
.stm-lightbox__btn:hover{background:rgba(255,255,255,.3);}
.stm-lightbox__prev{left:2vw;} .stm-lightbox__next{right:2vw;}
.stm-lightbox__close{position:absolute;top:20px;right:24px;width:44px;height:44px;font-size:1.6rem;transform:none;}
@media(max-width:600px){ .stm-lightbox__btn{width:44px;height:44px;font-size:1.5rem;} }

/* --- Thumbnail-Slider --- */
.stm-thumbs__stage{position:relative;background:var(--st-color-mist,#CAD9E0);border-radius:2px;overflow:hidden;}
.stm-thumbs__slide{margin:0;display:none;}
.stm-thumbs__slide.is-active{display:block;}
.stm-thumbs__img{width:100%;max-height:70vh;object-fit:contain;display:block;background:#000;}
.stm-thumbs__stage .stm-ss__caption{position:absolute;left:0;right:0;bottom:0;margin:0;padding:.75rem 1rem;
  background:linear-gradient(transparent,rgba(0,20,40,.75));color:#fff;}
.stm-thumbs__stage .stm-ss__caption .stm-ss__caption-text{color:#fff;}
.stm-thumbs__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:46px;height:46px;border:0;border-radius:999px;
  background:rgba(255,255,255,.85);color:var(--st-color-primary,#002F5D);font-size:1.6rem;line-height:1;cursor:pointer;}
.stm-thumbs__arrow[data-dir="prev"]{left:12px;} .stm-thumbs__arrow[data-dir="next"]{right:12px;}
.stm-thumbs__nav{list-style:none;margin:.75rem 0 0;padding:0;display:flex;gap:.5rem;overflow-x:auto;scrollbar-width:thin;}
.stm-thumbs__thumb{padding:0;border:2px solid transparent;background:none;cursor:pointer;border-radius:2px;overflow:hidden;flex:0 0 auto;}
.stm-thumbs__thumb img{width:88px;height:64px;object-fit:cover;display:block;}
.stm-thumbs__thumb.is-active{border-color:var(--st-color-primary,#002F5D);}

/* --- Coverflow --- */
.stm-coverflow{position:relative;display:flex;align-items:center;gap:.5rem;}
.stm-coverflow__track{list-style:none;margin:0;padding:1rem 0;display:flex;align-items:center;justify-content:center;
  gap:1rem;overflow:hidden;flex:1;min-height:0;}
.stm-coverflow__item{flex:0 0 auto;width:clamp(160px,42%,620px);opacity:.45;transform:scale(.82);
  transition:opacity .4s ease,transform .4s ease;filter:saturate(.9);}
.stm-coverflow__item figure{margin:0;}
.stm-coverflow__item.is-active{opacity:1;transform:scale(1);filter:none;}
.stm-coverflow__img{width:100%;max-height:64vh;object-fit:contain;display:block;border-radius:2px;}
.stm-coverflow__arrow{flex:0 0 auto;width:48px;height:48px;border:1px solid var(--st-color-primary,#002F5D);border-radius:999px;
  background:#fff;color:var(--st-color-primary,#002F5D);font-size:1.6rem;line-height:1;cursor:pointer;transition:background .15s,color .15s;}
.stm-coverflow__arrow:hover{background:var(--st-color-primary,#002F5D);color:#fff;}

/* =========================================================
   Teams
   ========================================================= */
.stm-team__head{margin-bottom:var(--st-space-m,2rem);}
.stm-team__head .module__headline{margin:.2em 0 0;}

/* Raster */
.stm-team-grid{display:grid;gap:2.5rem 24px;grid-template-columns:repeat(3,1fr);} /* 01.08.: Spalten-Gap 24px nach Figma */
.stm-team-grid--2{grid-template-columns:repeat(2,1fr);}
.stm-team-grid--3{grid-template-columns:repeat(3,1fr);}
.stm-team-grid--4{grid-template-columns:repeat(4,1fr);}
@media(max-width:900px){ .stm-team-grid,.stm-team-grid--3,.stm-team-grid--4{grid-template-columns:repeat(2,1fr);} }
@media(max-width:560px){ .stm-team-grid,.stm-team-grid--2,.stm-team-grid--3,.stm-team-grid--4{grid-template-columns:1fr;} }

/* Personenkarte */
.stm-team-card{display:flex;flex-direction:column;height:100%;}
.stm-team-card__media{aspect-ratio:3/4;overflow:hidden;background:var(--st-color-mist,#CAD9E0);border-radius:0;margin-bottom:1rem;} /* 02.09. (Maik): keine abgerundeten Ecken */
.stm-team-card__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-team-card__body{display:flex;flex-direction:column;gap:.35rem;}
.stm-team-card__name{margin:0;font-family:var(--st-font-head,inherit);font-size:1.2rem;font-weight:700;color:var(--st-color-primary,#002F5D);}
.stm-team-card__role{margin:0 0 .35rem;font-weight:600;color:var(--st-color-accent,#B51F29);}
.stm-team-card__text{font-size:1.25rem;line-height:1.5;margin:.5rem 0 0;}
.stm-team-card__contact{margin:.25rem 0 0;font-size:.92rem;line-height:1.5;}
.stm-team-card__contact dd{margin:0;}
.stm-team-card__contact dd a{color:var(--st-color-primary,#002F5D);text-decoration:none;}
.stm-team-card__contact dd a:hover{text-decoration:underline;}
.stm-team-card__contact-label{font-weight:700;color:var(--st-color-primary,#002F5D);margin-top:.15rem;}
/* 02.09.: Alt-Regeln fuer __more entfernt - Typo/Farbe/Hover kommen von "Textlink mit Pfeil (klein)" (btn--text btn--sm), Layout unten bei den Karten-Regeln */

/* Musik-Design: Akzente blau statt rot */
.is-musik .stm-team-card__role,
.is-musik .stm-team-card__more{color:var(--st-color-primary,#002F5D);}

/* Karussell-Variante nutzt die stm-cards-Mechanik */
.stm-cards--team{grid-auto-columns:minmax(240px,1fr);}
@media(min-width:700px){ .stm-cards--team{grid-auto-columns:calc((100% - 2*var(--st-space-m,2rem))/3);} }
.stm-cards__controls--top{display:flex;justify-content:flex-end;margin-bottom:1rem;}

/* =========================================================
   Downloads – Datei-Karten
   ========================================================= */

/* =========================================================
   Flipbook
   ========================================================= */
.flipbook{max-width:900px;margin:0 auto;text-align:center;}
.flipbook__cover img{width:100%;height:auto;display:block;margin-bottom:var(--st-space-s,1rem);}
.flipbook__embed{position:relative;padding-top:66%;}
.flipbook__embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
.flipbook__open{margin-top:var(--st-space-s,1rem);}

/* =========================================================
   Instagram / Social
   ========================================================= */
.instagram__handle{margin:0 0 var(--st-space-s,1rem);font-weight:700;color:var(--st-color-primary,#002F5D);}
.instagram__handle a{color:inherit;text-decoration:none;}
.instagram-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.instagram-item{position:relative;display:block;overflow:hidden;aspect-ratio:4/5;background:var(--st-color-bg-alt,#f2f3f5);}
.instagram-item img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s ease;}
.instagram-item:hover img{transform:scale(1.04);}
.instagram-item__cap{position:absolute;inset:auto 0 0 0;z-index:3;padding:8px;font-size:.8rem;background:rgba(0,47,93,.7);color:#fff;
	opacity:0;transition:.2s;}
.instagram-item:hover .instagram-item__cap{opacity:1;}
.instagram__feed-placeholder{padding:var(--st-space-l,4rem);border:1px dashed var(--st-color-border,#e2e4e8);text-align:center;color:var(--st-color-muted,#5a5a5a);}
@media(max-width:900px){ .instagram-grid{grid-template-columns:repeat(2,1fr);} }

/* =========================================================
   Musik-Design: Topline + Headline komplett Primärblau
   ========================================================= */
.is-musik .module__kicker,
.is-musik .hero__topline,
.is-musik .module__headline,
.is-musik .module__headline-1,
.is-musik .module__headline-2,
.is-musik .hero__headline,
.is-musik .hero__headline .module__headline-1,
.is-musik .hero__headline .module__headline-2,
.is-musik .col__subhead,
.is-musik .stm-hl__last{color:var(--st-color-primary,#002F5D)!important;}
/* 14.09. (Maik, "Musik Design"): Die fruehe Konzept-Regel ".is-musik .btn--primary = Outline"
   ist RAUS - der im Editor gewaehlte "CTA-Button Blau" muss auch im Musik-Design als gefuellter
   blauer Button erscheinen (Backend zeigte ihn korrekt, Frontend machte Outline daraus).
   Der Musik-Hover bleibt als eigene Regel bestehen (s. globaler Musik-Block, hart #B51F29 -
   die Standard-Hover-Var --st-color-accent ist im is-musik-Scope auf BLAU remappt). */

/* =========================================================
   Spenden
   ========================================================= */
.spenden__purpose{font-weight:700;color:var(--st-color-primary,#002F5D);margin:0 0 1rem;}
.spenden__amounts{list-style:none;margin:0 0 1.5rem;padding:0;display:flex;gap:12px;flex-wrap:wrap;}
.spenden__amount{border:2px solid var(--st-color-primary,#002F5D);border-radius:8px;padding:.6rem 1rem;text-align:center;min-width:88px;}
.spenden__amount-value{display:block;font-weight:800;font-size:1.25rem;color:var(--st-color-primary,#002F5D);}
.spenden__amount-label{display:block;font-size:.85rem;color:var(--st-color-muted,#5a5a5a);}

/* =========================================================
   Tickets
   ========================================================= */
.tickets-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--st-space-m,2rem);margin-bottom:1.5rem;}
.ticket-card{border:1px solid var(--st-color-border,#e2e4e8);border-radius:8px;padding:1.5rem;display:flex;flex-direction:column;}
.ticket-card__title{margin:0 0 .25em;color:var(--st-color-primary,#002F5D);}
.ticket-card__price{margin:0 0 .5em;font-weight:800;font-size:1.4rem;color:var(--st-color-accent,#B51F29);}
.ticket-card__desc{margin:0 0 1rem;font-size:.95rem;line-height:1.5;flex:1;}
@media(max-width:900px){ .tickets-grid{grid-template-columns:1fr;} }

/* =========================================================
   Glockengeläut (Audio)
   ========================================================= */
.glocken{list-style:none;margin:0;padding:0;display:grid;gap:1rem;}
.glocken__item{display:grid;grid-template-columns:1fr auto;align-items:center;gap:12px 20px;
	padding:1rem 1.25rem;background:var(--st-color-bg-alt,#f2f3f5);border-radius:8px;}
.glocken__title{font-weight:700;color:var(--st-color-primary,#002F5D);}
.glocken__player{width:100%;max-width:360px;grid-column:2;}
.glocken__info{grid-column:1/-1;font-size:.9rem;color:var(--st-color-muted,#5a5a5a);}
@media(max-width:640px){ .glocken__item{grid-template-columns:1fr;} .glocken__player{grid-column:1;max-width:none;} }


/* =========================================================
   Button-System (Figma) – Pill, Pfeil, Zustände, SM/2XL
   ========================================================= */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.6em;font-family:var(--st-font-head,inherit);font-weight:500;font-size:1.25rem;line-height:1;height:45px;padding:0 1.5rem;border-radius:999px;border:1px solid transparent;text-decoration:none;cursor:pointer;white-space:nowrap;-webkit-appearance:none;appearance:none;transition:all .3s ease-in-out;} /* 05.09. (Maik, "Modul GLOBAL: Buttons"): Padding aller CTAs um 1/4 verringert (2 -> 1.5rem); Hoehen bleiben (Mock markiert nur die Seiten, Rueckfrage Johann bestaetigt) */
.btn:hover,.btn:focus-visible,.btn:active{text-decoration:none;} /* main.css a:hover unterstreicht sonst */
.btn--sm{height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:.625em;} /* 07.09. R2 (Maik): Hoehe -1/4 (50 -> 37.5px) */ /* 05.09. (Maik): Padding -1/4 (1.625 -> 1.22rem) */
.btn__ico{font-size:1.1em;line-height:0;display:inline-flex;align-items:center;}
.btn__text{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;}
.btn__sub{font-weight:400;font-size:.76em;opacity:.9;}
/* 31.07. CTA-Finale: SVG-Pfeile statt Unicode-Zeichen - rendert bei ALLEN Usern
   identisch (gepunktete Ersatz-Glyphen einzelner System-Fonts adé). Das Chevron hat
   Pfeil-Groesse und wird beim Hover nur VERLAENGERT (rechts verankert). */
.btn--primary::after,.btn--secondary::after,.btn--primary-neg::after,.btn--text::after{content:"";display:inline-block;flex:0 0 auto;width:.62em;height:.95em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;transition:all .3s ease-in-out;}
.btn--primary:hover::after,.btn--primary:focus-visible::after,.btn--primary:active::after,
.btn--secondary:hover::after,.btn--secondary:focus-visible::after,.btn--secondary:active::after,
.btn--primary-neg:hover::after,.btn--primary-neg:focus-visible::after,.btn--primary-neg:active::after,
.btn--text:hover::after,.btn--text:focus-visible::after,.btn--text:active::after{width:1.28em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}
.btn--arrow-left::after{transform:scaleX(-1);}
.btn--arrow-left{flex-direction:row-reverse;}
.btn--stacked::after,.btn--sound::after,.btn--rotate::after,.btn--ics::after,.btn--spenden::after,.btn--ticket::after,.btn--noarrow::after{content:none;}
.btn--primary{background:var(--st-color-primary,#002F5D);color:#fff;}
.btn--primary:hover,.btn--primary:focus-visible{background:var(--st-color-accent,#B51F29);color:#fff;}
.btn--primary:active{background:#8F1620;color:#fff;}
.btn--primary-neg{background:#fff;color:var(--st-color-primary,#002F5D);}
.btn--primary-neg:hover,.btn--primary-neg:focus-visible{background:#fff;color:var(--st-color-accent,#B51F29);}
.btn--primary-neg:active{color:#8F1620;}
.btn--secondary{background:#fff;color:var(--st-color-primary,#002F5D);border-color:var(--st-color-primary,#002F5D);}
.btn--secondary:hover,.btn--secondary:focus-visible{background:var(--st-color-secondary,#034B91);color:#fff;border-color:var(--st-color-secondary,#034B91);} /* 05.09. (Maik, Buttons-Ticket): CTA-Outline-States NEU - Hover Flaeche+Kontur #034B91, Typo+Icon weiss */
.btn--secondary:active{background:var(--st-color-primary,#002F5D);color:#fff;border-color:var(--st-color-primary,#002F5D);} /* 05.09. (Maik): Pressed/Active Flaeche+Kontur #002F5D, Typo+Icon weiss (Hover/Active-Farben getauscht gegenueber vorher) */
.btn--text{background:none;border:0;height:auto;padding:.25em 0;color:#222222;gap:.4em;font-weight:500;} /* 05.09. (Maik, Buttons-Ticket): Text-Link mit Pfeil - Schriftschnitt MEDIUM (war 700) + neue States: Default #222222 (war Primaerblau) */
.btn--text:hover,.btn--text:focus-visible{color:var(--st-color-secondary,#034B91);} /* Hover #034B91 */
.btn--text:active{color:var(--st-color-primary,#002F5D);} /* Pressed #002F5D */
.btn--text.btn--neg{color:#fff;}
.btn--text.btn--neg:hover{color:var(--st-color-lightblue,#CAD9E0);}
.btn--ics{background:#fff;color:var(--st-color-primary,#002F5D);border-color:var(--st-color-primary,#002F5D);}
.btn--ics:hover,.btn--ics:focus-visible{border-color:var(--st-color-secondary,#034B91);color:var(--st-color-secondary,#034B91);}
.btn--rotate{background:var(--st-color-primary,#002F5D);color:#fff;font-size:.9rem;height:40px;padding:0 1.1rem;}
.btn--stacked{height:auto;padding:.45rem 1.6rem;} /* 07.09. R2: vertikal -1/4 */
.btn:disabled,.btn.is-disabled,.btn[aria-disabled="true"]{background:#fff!important;color:var(--st-neutral-300,#B0B0B0)!important;border-color:var(--st-neutral-300,#B0B0B0)!important;cursor:default;pointer-events:none;}
.btn--text:disabled,.btn--text.is-disabled{background:none!important;border:0!important;color:var(--st-neutral-300,#B0B0B0)!important;}
/* 05.09. (Maik, Buttons-Ticket, "Generell gilt"): Mobile IMMER die kleine Version - GLOBAL fuer
   alle CTA-Buttons und Text-Links (ersetzt die bisherigen Einzelregeln pro Modul, die bleiben
   als engere Sonderfaelle bestehen). Grenze 1000px = mobile Navigation. Werte = .btn--sm
   (Padding bereits -1/4); Text-Link (klein) = 1rem. Sonderhoehen (rotate/stacked) bleiben. */
@media (max-width:1000px){
	.btn{height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:.625em;} /* 07.09. R2: Hoehe -1/4 */
	.btn--text{height:auto;padding:.25em 0;font-size:1rem;gap:.4em;font-weight:500;}
	.btn--rotate{height:40px;font-size:.9rem;padding:0 .825rem;}
	.btn--stacked{height:auto;padding:.45rem 1.2rem;}
}
.textlink{color:var(--st-color-accent,#B51F29);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s ease;}
.textlink:hover,.textlink:focus-visible{border-bottom-color:currentColor;}

/* =========================================================
   Klickelemente (Figma) – Breadcrumb, Mehr-anzeigen, Navdots,
   Scroll-down, Slider-Arrows (Zustände), Paginierung
   ========================================================= */
.stm-breadcrumb{font-size:.8rem;color:var(--st-neutral-400,#888);display:flex;flex-wrap:wrap;gap:.45em;align-items:center;}
.stm-breadcrumb a{color:var(--st-neutral-400,#888);text-decoration:none;}
.stm-breadcrumb a:hover{color:var(--st-color-primary,#002F5D);}
.stm-breadcrumb__sep{color:var(--st-neutral-300,#B0B0B0);font-size:.9em;}
.stm-breadcrumb__current{color:var(--st-neutral-950,#222);font-weight:700;}
.stm-more-toggle{background:none;border:0;cursor:pointer;color:var(--st-neutral-500,#6D6D6D);font-size:.95rem;display:inline-flex;align-items:center;gap:.6em;padding:.4em 0;}
.stm-more-toggle:hover{color:var(--st-color-primary,#002F5D);}
.stm-more-toggle__ico{width:.5em;height:.5em;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);display:inline-block;margin-top:-.18em;transition:transform .2s ease;}
.stm-more-toggle[aria-expanded="true"] .stm-more-toggle__ico{transform:rotate(-135deg);margin-top:.12em;}
.stm-cards__dots button,.stm-slider__dots button,.hero-slider__dots button,.stm-dots button{width:8px;height:8px;border-radius:999px;border:0;background:var(--st-neutral-300,#B0B0B0);cursor:pointer;padding:0;transition:width .2s ease,background .2s ease;}
.stm-cards__dots button[aria-current="true"],.stm-slider__dots button[aria-current="true"],.hero-slider__dots button[aria-current="true"],.stm-dots button[aria-current="true"]{width:26px;background:var(--st-color-primary,#002F5D);}
.stm-eq{display:inline-flex;gap:14px;align-items:flex-start;}
.stm-eq__col{position:relative;display:flex;flex-direction:column;gap:7px;align-items:center;}
.stm-eq__col > span{width:6px;height:6px;border-radius:999px;background:var(--st-neutral-300,#B0B0B0);}
.stm-eq__bar{position:absolute;left:50%;transform:translateX(-50%);width:6px;border-radius:999px;background:var(--st-color-primary,#002F5D);}
.stm-scroll-down{width:40px;height:40px;border-radius:999px;border:1.5px solid currentColor;background:none;color:#fff;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;opacity:.85;transition:opacity .2s ease;font-size:1.05rem;line-height:0;}
.stm-scroll-down:hover{opacity:1;}
.stm-arrow{width:38px;height:38px;flex:0 0 auto;border-radius:999px;border:1.5px solid var(--st-color-primary,#002F5D);background:#fff;color:var(--st-color-primary,#002F5D);font-size:1.05rem;line-height:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease;}
.stm-arrow svg{display:block;} /* 17.08.: SVG-Pfeile exakt mittig (Font-Glyphen sassen schief) */
.stm-arrow:hover{background:var(--st-color-lightblue,#CAD9E0);}
.stm-arrow:active{background:var(--st-color-primary,#002F5D);color:#fff;}
.stm-arrow:disabled,.stm-arrow[disabled],.stm-arrow.is-inactive{border-color:var(--st-neutral-300,#B0B0B0);color:var(--st-neutral-300,#B0B0B0);background:#fff;cursor:default;}
.stm-cards__arrow:hover,.stm-coverflow__arrow:hover{background:var(--st-color-lightblue,#CAD9E0);border-color:var(--st-color-primary,#002F5D);color:var(--st-color-primary,#002F5D);}
.stm-cards__arrow[disabled]{border-color:var(--st-neutral-300,#B0B0B0);color:var(--st-neutral-300,#B0B0B0);}
.stm-pagination{display:flex;align-items:center;gap:16px;justify-content:center;flex-wrap:wrap;} /* 16.09. (Kunde, "Paginierung" global): Figma-Stände - Details s. Kommentar am .stm-evl__pager (~2102) */
.stm-pagination__num{min-width:1.2em;text-align:center;color:var(--st-neutral-300,#B0B0B0);text-decoration:none;font-weight:700;}
a.stm-pagination__num:hover,a.stm-pagination__num:focus-visible{color:var(--st-color-secondary,#034B91);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:2px;}
a.stm-pagination__num:active{color:var(--st-color-primary,#002F5D);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:2px;}
.stm-pagination__num[aria-current="page"],.stm-pagination__num.is-active{color:var(--st-color-primary,#002F5D);}
.stm-pagination__edge{width:24px;height:24px;padding:0;font-size:0;line-height:0;background:url("../img/icons/Slider%20Arrow%20Paginierung%20right%20default.svg") no-repeat center/24px 24px;border:0;cursor:pointer;text-decoration:none;background-position:center,-60px -60px;background-size:24px 24px,1px 1px;background-repeat:no-repeat;} /* Unicode-Pfeil per font-size:0 stumm - Grafik = Asset; Richtung ueber Position: der Prev-Pfeil ist (wenn vorhanden) IMMER erstes Kind */ /* 17.09. (Maik, Paginierung R2): Hover-Variante als geparkte 1px-Zweitebene VORGELADEN (Preload-Muster wie stm-il/G3-Toggle) - Pfeil blitzte beim ersten Hover auf, weil die Hover-Datei erst da geladen wurde */
.stm-pagination__edge{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20right%20default.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20right%20hover.svg");}
.stm-pagination__edge:first-child{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20left%20default.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20left%20hover.svg");}
.stm-pagination__edge:hover,.stm-pagination__edge:active{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20right%20hover.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20right%20default.svg");}
.stm-pagination__edge:first-child:hover,.stm-pagination__edge:first-child:active{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20left%20hover.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20left%20default.svg");}
.stm-pagination__edge[disabled],.stm-pagination__edge.is-inactive{opacity:.35;pointer-events:none;}
/* 17.09. (Maik, Paginierung R2): Seitenwechsel springt zum CONTENT-Anfang statt zum Seitenkopf -
   paginate_links haengt #stm-liste (Archive) bzw. #stm-termine (/veranstaltungen) an jeden Link;
   scroll-margin-top haelt den sticky Header (Desktop 137px, Mobil 80px) + etwas Luft frei. */
#stm-liste,#stm-termine{scroll-margin-top:9.4rem;}
@media (max-width:1000px){
	#stm-liste,#stm-termine{scroll-margin-top:6rem;}
}
html[data-stm-anchorjump]{scroll-behavior:auto !important;} /* 17.09. R2 (Maik-Video): Paginierungs-Anker springt INSTANT statt sichtbar vom Hero herunterzurutschen - Attribut setzt das fruehe Head-Script (functions.php), stm-modules.js entfernt es nach der Lade-Nachkorrektur */
.stm-pager{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
.stm-pager__link{display:inline-flex;align-items:center;gap:.6em;color:var(--st-color-primary,#002F5D);text-decoration:none;font-weight:600;}
.stm-pager__link:hover,.stm-pager__link:focus-visible,.stm-pager__link:active{color:var(--st-color-accent,#B51F29);text-decoration:none;} /* 17.09. (Stefanie, beide Einzelseiten): "vorige"/"naechste" hovern ROT #B51F29 wie die Kreis-Pfeile daneben, OHNE Underline (war #034B91 + globale Link-Underline) */
.stm-pager__center{font-weight:700;}
a.stm-pager__center{color:var(--st-color-primary,#002F5D);} /* 16.09. (Stefanie): Textlink-Komponente im DEFAULT blau #002F5D (Ticket); Hover #034B91/Pressed #002F5D kommen aus den .btn--text-Staten (hoehere Spezifitaet) */
.stm-arrow--ic{border:0;background-color:transparent;background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20right%20default.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20right%20hover.svg");background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;} /* 16.09. (Stefanie): Kreis-Pfeile = gelieferte Assets (wie Flipbook) statt Eigenbau-Kreis */ /* 18.09. R56 (Dirk/Stefanie, "Slider-Pfeile unten in der Navi auch hier vorladen"): Zwei-Ebenen-Muster wie Flipbook R53 - Hover-Grafik als geparkte 1px-Zweitebene, laedt beim ersten Paint, kein Aufblitzen beim Erstkontakt */
.stm-arrow--ic-l{background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20left%20default.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20left%20hover.svg");}
.stm-pager__link:hover .stm-arrow--ic-l,.stm-pager__link:active .stm-arrow--ic-l,.stm-arrow--ic-l:hover{background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20left%20hover.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20left%20default.svg");background-color:transparent;}
.stm-pager__link:hover .stm-arrow--ic-r,.stm-pager__link:active .stm-arrow--ic-r,.stm-arrow--ic-r:hover{background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20right%20hover.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20right%20default.svg");background-color:transparent;}
@media (max-width:640px){
	.stm-pager{row-gap:1.4rem;}
	.stm-pager__link--prev{order:1;}
	.stm-pager__link--next{order:2;margin-left:auto;}
	.stm-pager__center{order:3;flex:0 0 100%;justify-content:center;font-size:1rem;} /* 16.09. (Stefanie, Mobile-Figma): Zeile 1 = vorige/naechste links+rechts, Zeile 2 = "Alle ..." zentriert (Textlink klein) */
}


/* ============ Teaser-Features (2026-07-23) ============ */
.col__media--map{position:relative;width:100%;min-height:340px;height:100%;}
.col__media--map iframe{display:block;width:100%;height:100%;min-height:340px;border:0;}
.has-bildtext .col--type-map{align-self:stretch;}
.has-bildtext .col--type-map .col__media--map{height:100%;}
.col__form{width:100%;}
.col__form .wpforms-container{margin:0;}
/* 07.09.: alte stm-slider__caption-Regeln entfernt - die Kachel-Slideshow rendert jetzt die
   Headline-Box (.stm-slbox, s. "Slideshow mit Headline-Box" weiter unten). */
.col__media,.col__media--video,.col__media--cards{position:relative;}
.col__sound{position:absolute;right:1rem;bottom:1rem;z-index:3;}
.col__sound-audio{display:none;}
.is-textmore .col--type-none .col__text{position:relative;overflow:hidden;}
.is-textmore .col--type-none .col__text{transition:max-height .35s ease;} /* 01.08.: animiertes Auf-/Zuklappen */
.is-textmore .col--type-none .col__text.is-clamped{max-height:18em;}
.is-textmore .col--type-none .col__text.is-clamped::after{content:"";position:absolute;left:0;right:0;bottom:0;height:4em;background:linear-gradient(to bottom,rgba(255,255,255,0),#fff);pointer-events:none;}
/* 01.08.: Mehr/Weniger im Spalter wie G2-Lightbox (grau, SVG-Chevron, animiert - Kundenticket) */
.col__text-toggle,.col__more-toggle{display:flex;justify-content:center;align-items:center;gap:.45rem;margin:.75rem auto 0;align-self:center;background:none;border:0;padding:0;cursor:pointer;color:var(--st-neutral-400,#888);font-weight:400;font-family:inherit;font-size:inherit;text-transform:none;text-decoration:none;} /* 03.09. (Maik): Weiterlesen-Tag GLOBAL horizontal zentriert unter der Copy (Desktop/Tablet/Mobile) - war inline-flex/linksbuendig. Buttons bleiben auch als display:flex shrink-to-fit, daher zentrieren die auto-Margins; align-self:center faengt Spalten ab, die selbst Flex-Container sind (stretch wuerde sonst die Breite aufziehen). Timeline (.stm-tl__more) und G2-Lightbox (.stm-ov__g2moretoggle) stehen schon per margin:auto mittig. */
.col__text-toggle:hover,.col__more-toggle:hover{color:var(--st-color-accent,#B51F29);}
.stm-chev{display:inline-block;width:.95em;height:.62em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 10'%3E%3Cpath d='M1.8 2 7.5 8 13.2 2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 10'%3E%3Cpath d='M1.8 2 7.5 8 13.2 2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;transition:transform .2s ease;}
.is-open > .stm-chev{transform:rotate(180deg);} /* 16.09. (Kunde, "Galerie 2"): KIND- statt Nachfahren-Kombinator - die G2-Lightbox selbst traegt .stm-ov.is-open, der Nachfahren-Selektor drehte damit JEDES Chevron in der offenen Lightbox dauerhaft auf 180° (Mehr-anzeigen stand schon zugeklappt "falsch herum", das Toggle-is-open aenderte nichts mehr). Alle .stm-chev-Spans sitzen als DIREKTES Kind ihres Toggles (col__more-toggle functions.php:780, Teaser-Akkordeon stm-modules.js:587, G2-g2moretoggle stm-slideshow.js:272) - nur noch der eigene Button dreht sein Chevron. */
.teaser-grid{display:flex;flex-wrap:wrap;gap:var(--st-space-s,16px);grid-template-columns:none;}
.teaser-grid__item{--tg-gap:var(--st-space-s,16px);flex:0 0 auto;display:block;text-decoration:none;color:inherit;}
.teaser-grid .tg--full{flex-basis:100%;}
.teaser-grid .tg--half{flex-basis:calc(50% - var(--tg-gap)/2);}
.teaser-grid .tg--two_thirds{flex-basis:calc(66.666% - var(--tg-gap)/3);}
.teaser-grid .tg--one_third{flex-basis:calc(33.333% - var(--tg-gap)*2/3);}
.teaser-grid .tg--quarter{flex-basis:calc(25% - var(--tg-gap)*3/4);}
.teaser-grid__media{position:relative;display:block;aspect-ratio:4/3;overflow:hidden;background:var(--st-color-lightblue,#CAD9E0);}
.tg--full .teaser-grid__media{aspect-ratio:21/9;}
.teaser-grid__img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .45s ease;}
.teaser-grid__item:hover .teaser-grid__img{transform:scale(1.05);}
.teaser-grid__overlay{position:absolute;left:0;right:0;bottom:0;padding:1.25rem;display:flex;flex-direction:column;gap:.25rem;background:linear-gradient(to top,rgba(0,47,93,.72),rgba(0,47,93,0));}
.teaser-grid__title{font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#fff;}
.teaser-grid__cta{font-weight:700;color:#fff;}
.teaser-grid__cta::after{content:"";display:inline-block;width:1.1em;height:.8em;vertical-align:-.08em;margin-left:.35em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;} /* 01.08.: SVG statt Unicode-Pfeil */
.teaser-grid__item:hover .teaser-grid__cta{color:var(--st-color-accent,#B51F29);}
@media (max-width:820px){
  .teaser-grid__item{flex-basis:100% !important;}
  .teaser-grid__media,.tg--full .teaser-grid__media{aspect-ratio:16/9;}
}


/* --- 07.09. (Maik, "Modul Slider mit Headline-Box"): Struktur nach Figma 8090:1508 (Desktop) /
   8090:1208 (Mobile). Das Bildformat traegt jetzt der TRACK (872/520 wie Figma, mobil 360/460),
   damit Pfeile und Dots UNTERHALB des Bildes nicht mehr vom overflow:hidden des Wrappers
   abgeschnitten werden; die Slides liegen absolut im Track (auch die aktive - die generischen
   is-active/not(is-ready)-Regeln wuerden sie sonst in den Fluss holen und die Ratio aufsprengen). */
.col__media--cards{position:relative;margin-bottom:3rem;} /* Platz fuer Dots/Pfeile unterm Bild */
.col__media--cards .stm-slider{position:relative;overflow:visible;} /* 13.09. (Kunde, "2 Spalter Slideshow mit Headline-Box"): DIE Ursache der "fehlenden" Pfeile/Dots - die Basisregel .stm-slider traegt overflow:hidden und clippte die unterhalb des Bildes positionierte Navigation (top:100%+X) komplett weg (Desktop Pfeile+Dots, mobil die Dots; die mobilen Pfeile liegen INNERHALB und blieben sichtbar - exakt das Ticketbild) */
.col__media--cards .stm-slider__track{position:relative;aspect-ratio:872/520;overflow:hidden;}
.col__media--cards .stm-slider__slide,
.col__media--cards .stm-slider:not(.is-ready) .stm-slider__slide:first-child,
.col__media--cards .stm-slider__slide.is-active{position:absolute;inset:0;}
.col__media--cards .stm-slider__slide img{width:100%;height:100%;object-fit:cover;}
.has-bildtext .col--type-slider_cards{align-self:start;} /* Ratio bestimmt die Hoehe (Figma: Bild ist die hoehere Spalte) - nicht mehr auf Spaltenhoehe strecken */
/* Headline-Box: unten links AUF dem Bild (Figma: 20/20 Inset, Padding 24/20) */
.stm-slbox{position:absolute;left:20px;bottom:20px;z-index:2;background:#fff;padding:22px 26px 22px 22px;max-width:min(78%,420px);} /* 13.09. (Kunde): Padding links/oben/unten 22px, rechts 26px */
.stm-slbox__hl{margin:0;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;font-size:1.75rem;line-height:.875;letter-spacing:0;color:var(--st-color-primary,#002F5D);} /* 13.09. (Kunde): Line-Height-Proportionen analog H2 (Token-Ratio Desktop .875, war 1.18) */
.stm-slbox__l{display:block;}
.stm-slbox__l--red{color:var(--st-color-accent,#B51F29);}
.stm-slbox .stm-slbox__link{margin-top:12px;} /* Figma: 18px Luecke HL->Link (abzgl. .25em Eigen-Padding der Textlink-Komponente) */
/* Nav unterm Bild: duenne stm-sarr-Pfeile rechts, Dots mittig - vertikal auf gemeinsamer Achse (Figma: Mitte 26px unter Bildkante) */
.stm-slbox__arrows{position:absolute;right:0;top:calc(100% + 3px);display:flex;gap:.9rem;z-index:2;} /* 13.09. (Kunde, "Slider Mehrspalter"): Abstand zur Bildkante halbiert (Pfeil-Mitte 26 -> 15px, analog Spalten-Slideshow) */
.col__media--cards .stm-slider__prev,.col__media--cards .stm-slider__next{position:static;top:auto;left:auto;right:auto;transform:none;width:24px;height:24px;} /* Basisregel setzt die Slideshow-Pfeile absolut in die Bildmitte - hier sitzen sie im Pfeil-Container */
.col__media--cards .stm-slider__nav{position:absolute;left:0;right:0;top:calc(100% + 11px);display:flex;justify-content:center;} /* 13.09.: Dot-Mitte 26 -> 15px unter der Bildkante (Abstand halbiert) */
.col__media--cards .stm-slider__dots{position:static;left:auto;right:auto;bottom:auto;} /* Basisregel pinnt Dots absolut ins Bild - hier stehen sie im Nav-Container unterm Bild */
@media (max-width:900px){ /* Spalten gestapelt = Mobile-Layout (Figma 8090:1208) */
	.col__media--cards .stm-slider{padding-top:46px;} /* Pfeil-Zone UEBER dem Bild */
	.stm-slbox__arrows{top:0;left:0;right:0;justify-content:space-between;}
	.stm-slbox{left:18px;top:18px;bottom:auto;padding:18px 21px 18px 18px;} /* Box OBEN im Bild (statt wie beim Hero unten herauszuhaengen) */ /* 13.09. (Kunde): Padding mobil proportional (22/26 * 18/22 = 18/21) */
	.stm-slbox__hl{line-height:.889;} /* 13.09.: H2-Token-Ratio am Mobil-Ende der Interpolation */
	.col__media--cards .stm-slider__track{aspect-ratio:360/460;}
}


/* ============ Akkordeon-Modul (2026-07-23) ============ */
.accordion__head{margin-bottom:2.5rem;} /* 01.08.: Kopf wie andere Module (Topline + Headline) */
.accordion__head .module__headline{margin:.2em 0 0;}
/* 01.09. (Maik, "Akkordeons brauchen Liebe"):
   - Titel+Icon 8px eingerueckt (Trennlinien bleiben volle Breite), Inhalt nochmal +8px links
   - Doppellinien-Fix: main.css gab JEDEM Item border-bottom, stm-modules jedem border-top ->
     zwischen den Items lagen zwei 1px-Linien uebereinander ("unscharf"); erste/letzte waren
     einfach ("scharf"). Jetzt: nur border-top je Item + border-bottom nur am letzten.
   - Plus/Minus nach den gelieferten SVGs (22px-Balken, runde Enden, Marine/Akzentrot-Hover)
     als ZWEI CSS-Balken nachgebaut - nur so laesst sich der senkrechte Balken um 90 Grad auf
     die Waagerechte drehen (Datei-Swap kann nicht morphen); Geometrie/Farben identisch zu
     assets/img/icons/Plus.svg & Co. */
.module--accordion .accordion__item{border-top:1px solid var(--st-neutral-300,#D1D1D1);border-bottom:0;}
.module--accordion .accordion__item:last-child{border-bottom:1px solid var(--st-neutral-300,#D1D1D1);}
.accordion__title{list-style:none;cursor:pointer;display:block;position:relative;padding:1.15rem calc(8px + 22px + 1rem) 1.15rem 8px;margin:0;font-family:var(--st-font-head,inherit);font-weight:700;font-size:1.125rem;color:var(--st-color-primary,#002F5D);}
.accordion__title::-webkit-details-marker{display:none;}
.accordion__title::before,.accordion__title::after{content:"";position:absolute;right:8px;top:50%;width:22px;height:2px;margin-top:-1px;border-radius:1px;background:var(--st-color-primary,#002F5D);transition:transform .3s ease,background .15s ease;}
.accordion__title::before{transform:rotate(90deg);} /* der senkrechte Plus-Balken */
.accordion__item[open] .accordion__title::before{transform:rotate(180deg);} /* dreht sich beim Oeffnen um 90 Grad auf die Waagerechte -> Minus (und beim Schliessen zurueck) */
.accordion__title:hover{color:var(--st-color-accent,#B51F29);}
.accordion__title:hover::before,.accordion__title:hover::after{background:var(--st-color-accent,#B51F29);} /* Hover-SVGs: beide Balken Akzentrot */
.accordion__body{padding:.25rem 8px 1.5rem 16px;max-width:70ch;} /* 8px wie der Titel + 8px extra Einzug links */
.accordion__body p{margin:0 0 .75rem;}
.accordion__body p:last-child{margin-bottom:0;}

/* ============ Zitat-Modul (2026-07-23 v2, nach Figma) ============ */
.module--quote .module__inner.quote{max-width:872px;margin-left:auto;margin-right:auto;}
.quote__fig{margin:0;display:flex;flex-direction:column;}
.quote--has-image .quote__media{align-self:center;margin-bottom:2rem;}
.quote__img{width:220px;height:auto;border-radius:14px;display:block;} /* 01.08.: kein Anschnitt mehr (war 260x260 cover), etwas kleiner */
.quote__mark{display:block;color:var(--st-color-lightblue,#CAD9E0);margin-bottom:1rem;} /* 01.08.: Kunden-SVG statt Font-Glyphe */
.quote__mark svg{width:clamp(64px,8vw,109px);height:auto;display:block;}
.quote__text{font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;color:var(--st-color-primary,#002F5D);line-height:1.05;margin:.25rem 0 0;}
.quote--l .quote__text{font-size:var(--stm-h2-size);} /* 09.09. (Maik, Zitate): L = globale H2 (Token, 80px-Kappe; vorher 52px-Kappe) */
.quote--m .quote__text{font-size:clamp(2rem,4.4vw,3.25rem);} /* 09.09. (Maik, Zitate): M uebernimmt die bisherige L-Groesse (52px-Kappe; vorher 40px) */
.quote--s .quote__text{font-size:clamp(1.25rem,2.6vw,1.9rem);text-transform:none;line-height:1.4;} /* 31.07.: S-Zitat brauchte mehr Zeilenabstand */
.quote__caption{margin-top:1.5rem;text-align:center;display:flex;flex-direction:column;gap:.133rem;} /* 09.09. (Maik, Zitate): Abstand Autor->Zusatz um 1/3 verringert (.2rem -> .133rem) */
.quote__author{font-weight:700;color:var(--st-color-accent,#B51F29);} /* 09.09. (Maik, Zitate): gemischte Schreibweise statt versal (uppercase + letter-spacing raus); Schriftgroesse bleibt identisch mit .quote__extra (beide erben 1.125rem) */
.quote__extra{color:var(--st-color-primary,#002F5D);} /* 09.09. (Maik, Zitate): Zusatz in #002F5D (vorher Ink mit .85 Opacity) */
.module--quote.is-musik{background:var(--st-color-primary,#002F5D);}
/* Module MIT Hintergrundflaeche brauchen trotz global entferntem Modul-Padding
   (31.07., main.css) weiterhin vertikalen INNENabstand: */
.module.has-bg,.module.theme--dark,.module--quote.is-musik{padding-top:var(--st-space-l,4rem);padding-bottom:var(--st-space-l,4rem);}
.module--quote.is-musik .quote__text{color:#fff;}
.module--quote.is-musik .quote__mark{color:rgba(255,255,255,.4);}
.module--quote.is-musik .quote__author{color:var(--st-color-gold,#D1AC57);}
.module--quote.is-musik .quote__extra{color:rgba(255,255,255,.8);}


/* ============ Akkordeon neben Bild (2026-07-23) ============ */
.module--accordion .module__inner.has-media .accordion__grid{display:grid;gap:2.5rem;align-items:start;}
.module--accordion .acc--two_thirds .accordion__grid{grid-template-columns:2fr 1fr;}
.module--accordion .acc--half .accordion__grid{grid-template-columns:1fr 1fr;}
.accordion__media{align-self:start;}
.accordion__img{width:100%;height:auto;object-fit:cover;display:block;border-radius:2px;} /* 01.09. (Maik): Bild behaelt sein Ausgangsformat und waechst NICHT mit dem geoeffneten Akkordeon in die Hoehe (vorher stretch + height:100%) */
@media (max-width:820px){
  .module--accordion .acc--two_thirds .accordion__grid,
  .module--accordion .acc--half .accordion__grid{grid-template-columns:1fr;}
  .accordion__img{min-height:0;} /* 01.09.: auch mobil natuerliche Bildhoehe */
}

/* ============ Parallax nach Figma 8183:1952 (Asana "Modul Paralax", 23.08.2026) ============
   Basis 1440px (Wrapper 1320 + 2x60). Spalten-Linien (px): 0|60|107|706|751|807|918|972|1346|1383|1440.
   Bildverhaeltnisse aus Figma: Bild1 918x551, Bild2 576x506 (max 580x500-Klasse).
   Ebenen unten->oben: Bild1, HL1, Copy1, Bild2, Stack2 (HL2+Copy2). */
.module--parallax{padding-left:0;padding-right:0;} /* 30.08. (Maik): auch das 60px-Modulpadding weg - erst so kleben die Bilder bei Viewports unter 1560px WIRKLICH am Browserrand (vorher blieb links/rechts ein 60px-Streifen) */
.module--parallax > .module__inner{max-width:1560px;padding-left:0;padding-right:0;} /* 28.08. (Maik): Bilder kleben bis 1560px Viewport am Browserrand, danach zentriert mit Weissraum */
.module--parallax .plx__img{box-shadow:none;border-radius:0;width:100%;height:auto;display:block;object-fit:cover;}
.module--parallax .plx__headline .plx__hl{display:block;}
.module--parallax .plx__hlbox{background:rgba(255,255,255,.9);} /* 28.08. (Maik): HL-Flaechen NICHT blau - weiss #fff bei 90%% */
.plx-t__hl2{position:relative;z-index:2;}
.plx-t__copy2{position:relative;z-index:1;} /* 07.09. R6 (Maik, "HL-Flaechen ganz oben"): Z-Ordnung INNERHALB von stack2 - Copy 2 rutscht beim Hochscrollen hinter ihre HL-Flaeche. Gilt Desktop UND Mobile (beide stapeln hl2+copy2 im selben stack2-Kontext); ohne explizites z gewann die spaeter im DOM stehende, transformierte Copy */
.module--parallax .plx__headline{margin:0;} /* Abstand nach unten = Flaechen-Padding (gleich wie links) */
.module--parallax .plx__topline{font-size:.95rem;letter-spacing:0;font-weight:700;text-transform:uppercase;color:var(--st-color-accent,#B51F29);margin:0 0 .1rem;} /* 30.08. (Maik): Abstand Topline -> HL um 30%% verringert (visuell ~21px -> ~15px, Rest ist Zeilen-Leading) */ /* 28.08.: Standard-Topline (H6-Groesse .95rem) - war .82rem */
/* 03.09. (Maik): Vollweiss-Override ERSATZLOS RAUS - "die Deckkraft der weissen Flaechen betraegt
   95%, das sollte nie so sein [vollweiss]". Historie: das #fff kam am 02.09. gegen die durch die
   95%%-Transparenz durchscheinende Bildkante (wirkte wie ein Umbruch zwischen Copy und Button) -
   diese schwache Kante ist laut Maik aber DESIGN-ABSICHT, sie bleibt jetzt bewusst sichtbar.
   Deckkraft steht zentral in der .plx-c__box-Basisregel (rgba .95, gilt Desktop UND Mobile). */
.module--parallax .plx-c__box .plx__text{margin:0 0 1.65rem;} /* 28.08.: Abstand Copy -> CTA um 1/2 vergroessert (1.1 -> 1.65rem) */
.module--parallax .plx__copy .plx__text{color:var(--st-color-ink,#222);}
.module--parallax .plx__headline{hyphens:auto;overflow-wrap:anywhere;} /* lange Woerter (KONZERTORGEL) brechen in der 646px-Flaeche */

@media (min-width:1001px){
	.plx-t{display:grid;position:relative;
		grid-template-columns:4.167% 3.264% 41.597% 3.125% 3.889% 7.708% 3.75% 25.972% 2.569% 3.958%;
		grid-template-rows:auto calc(2rem + var(--stm-h3-lh,90px)) auto 1fr 16px 50px auto;} /* 30.08. (Maik): Ueberlappung HL-Flaeche/Bild = unteres Padding + genau EINE Headline-Zeile -> obere Bildkante sitzt bei jeder Viewportbreite exakt zwischen den zwei HL-Zeilen (134px fix stimmte nur bei 1920) */
	.plx-t__media1{grid-column:1/7;grid-row:2/7;z-index:1;align-self:stretch;}
	.plx-t__img1{aspect-ratio:92/55;height:100%;object-position:center center;} /* 28.08.: fixe Ratio (Maik) */
	.plx-t__hl1{grid-column:5/9;grid-row:1/3;z-index:6;align-self:end;justify-self:start;max-width:100%;padding:2rem;} /* 31.08. (Maik): endet rechts buendig mit Copy 1 (Linie 9) statt am Browserrand - HL stand hinter den Quicklinks; justify-self:start = Flaeche schrumpft bei kurzen HLs auf Textbreite (wie Teaser/Heros) */ /* 30.08. (Maik): Innenabstand rundum um 1/3 verringert */ /* 28.08.: Abstand zur HL rundum gleich */ /* Fix: Linie 5 = x751 (verifiziert) */ /* unten fix auf Bild1, waechst nach oben (Zeile 1 auto) */
	.plx-t__copy1{grid-column:8/9;grid-row:3/4;z-index:3;padding-top:0;} /* 28.08.: KEIN Abstand zwischen HL-Flaeche und Copy */ /* 07.09. R6 (Maik): HL-Flaeche 1 jetzt z6 (s.o.) - die Copy (z3) rutscht beim Hochscrollen HINTER die Flaeche */
	.plx-t__media2{grid-column:6/10;grid-row:6/8;z-index:4;align-self:start;} /* rechts am Wrapper, ~16px tiefer als HL-Flaeche 2 */
	.plx-t__img2{aspect-ratio:58/50;object-position:center center;} /* 28.08.: fixe Ratio (Maik) */
	.plx-t__stack2{grid-column:2/4;grid-row:5/8;z-index:5;align-self:start;} /* oben fix auf Bild1, waechst nach unten */
	.plx-t__hl2{width:fit-content;max-width:100%;padding:2rem;} /* 31.08. (Maik): Flaeche passt sich kurzen HLs an */ /* 30.08. (Maik): 1/3 weniger, wie HL-Flaeche 1 */ /* 28.08.: rundum gleich */
	.plx-t__copy2{padding:0 0 0 2rem;max-width:none;} /* 30.08.: buendig zum neuen HL-Padding */ /* beginnt buendig unter HL-Flaeche 2, linksbuendig mit deren Text */
	.plx-t__copy2 .plx__text,.plx-t__copy1 .plx__text{max-width:none;}
	.plx-t__copy1{max-width:none;}
}
@media (max-width:1000px){
	/* Mobile nach Figma 8183:2191: HL1 oben, Bild1 ueberlappt von unten; Bild2 rechtsbuendig,
	   HL2-Box ueberlappt Bildunterkante links, Copy darunter. */
	.plx-t{display:flex;flex-direction:column;}
	.plx-t__hl1{order:1;width:fit-content;max-width:80%;position:relative;z-index:2;margin-bottom:-41px;padding:1.6rem;} /* 31.08. (Maik): 80%% ist jetzt MAX-Breite, Flaeche schrumpft auf die HL */ /* 28.08.: rundum gleich */
	.plx-t__media1{order:2;width:92.8%;position:relative;z-index:1;}
	.plx-t__img1{aspect-ratio:33/30;object-position:center center;}
	.plx-t__copy1{order:3;padding:1rem 8%;margin-top:1.5rem;max-width:none;position:relative;z-index:1;background:rgba(255,255,255,.9);} /* 05.10. R8 (Stefanie, "weisse Flaeche mit 90% Deckkraft im Hintergrund ... damit die Lesbarkeit gewaehrleistet ist"): Copy-Flaechen mobil wie die HL-Flaechen weiss hinterlegt (rgba .9, Muster .plx__hlbox) - die Copys laufen beim Ueberdecken uebers Bild und blieben sonst schwer lesbar (Kundenvideo P1 Mobile); vertikales Padding 1rem, damit die Flaeche den Text fasst */ /* 30.08. (Maik): mobil Abstand zwischen Bild 1 und Copy 1 */ /* 28.08.: kein Abstand zur HL-Flaeche */ /* 07.09. R6 (Maik): explizit UNTER der HL-Flaeche (z2) - Copy rutscht auch mobil dahinter */
	.plx-t__media2{order:4;width:78%;margin:2.6rem 0 0 auto;position:relative;z-index:1;}
	.plx-t__img2{aspect-ratio:28/25;object-position:center center;}
	.plx-t__stack2{order:5;position:relative;z-index:2;margin-top:-3rem;}
	.plx-t__hl2{width:fit-content;max-width:84%;padding:1.6rem;}
	.plx-t__copy2{padding:1rem 8%;max-width:none;background:rgba(255,255,255,.9);} /* 05.10. R8: weisse 90%-Flaeche wie Copy 1, s.o. */
}

/* ---- Parallax-Modul 2 (Collage, 3 Bilder + Copy-Flaechen) nach Anhang-Mock ---- */
.plx-c{position:relative;}
.plx-c__item{position:relative;}
.plx-c__img{display:block;width:100%;height:auto;border-radius:0;object-fit:cover;}
.plx-c__box{position:relative;z-index:3;background:rgba(255,255,255,.95);padding:1.6rem 1.9rem;} /* 03.09. (Maik): Deckkraft der weissen Flaechen = 95%% - verbindlich fuer ALLE Copy-Flaechen, Desktop und Mobile (war .92, zwischenzeitlich vollweiss) */
.plx-c__box .plx__text{color:var(--st-color-ink,#222);margin:0 0 1.1rem;line-height:var(--stm-copy-lh,1.5);} /* 03.09.: Standard-Copy-Zeilenhoehe (1.6 ueberschrieb sonst das Token) */
.plx-c__box .plx__actions{margin:0;}
@media (min-width:1001px){
	/* Bild1 rechts am Wrapper+60 (Modulrand), Bild2 rechts am Wrapper (60px Rand),
	   Bild3 links am Wrapper+60 (Modulrand); gleicher Abstand zwischen den Bildern. */
	.plx-c__box{padding:2rem;} /* 30.08. (Maik): Innenabstand zum Text rundum um 1/3 verringert */ /* 28.08.: gleicher Innenabstand rundum wie die P1-Flaechen */
	.plx-c__item--1{width:85.8%;margin-left:auto;z-index:3;} /* 30.08. (Maik): insgesamt groesser (Figma 85.8%% Wrapperbreite); z3, damit Copy-Flaeche 1 UEBER Bild 2 liegt (Maik: "liegt ueber Bild 2") */
	.plx-c__item--1 .plx-c__img{aspect-ratio:124/74;object-position:center center;} /* 28.08.: fixe Ratio (Maik) */
	.plx-c__item--1 .plx-c__box{position:absolute;bottom:-11.2%;left:-7.6%;width:49.6%;margin:0;} /* 31.08. (Maik): an der UNTERKANTE verankert (11.2%% Bildhoehe unter Bild 1 = ueber die 3.6%%-Luecke hinweg) - die Flaeche liegt damit bei JEDER Textlaenge auf der linken oberen Ecke von Bild 2 und waechst nach oben */ /* 30.08. (Maik): breiter (Figma 474/955 Bildbreite), ragt links ueber die Bildkante; ABSOLUT verankert (Oberkante bei 31.2%% Bildhoehe ueber der Unterkante), damit die Textlaenge NICHT die Position von Bild 2 verschiebt */ /* 28.08.: sitzt tiefer - ragt rechts unten ueber Bild 2 */
	.plx-c__item--2{width:50.9%;margin:3.6% 5.5% 0 auto;z-index:2;} /* 30.08. (Maik): groesser (Figma 50.9%%), rechts 5.5%% Rand; margin-top = exakt die Figma-Luecke Bild1->Bild2 (3.4%% Wrapperbreite) - moeglich, weil Copy 1 absolut haengt und den Fluss nicht mehr verlaengert. Vertikale Luecke = horizontale Luecke Bild2<->Bild3 (Maik) */ /* Copy1-Ueberhang (50px) kompensiert -> exakt 40px Bild-Abstand */
	.plx-c__item--2 .plx-c__img{aspect-ratio:73/59;object-position:center center;}
	.plx-c__item--2 .plx-c__box{position:absolute;bottom:-15%;left:8.15%;width:83.7%;margin:0;} /* 31.08. (Maik): sitzt tiefer - Unterkante fix 15%% Bildhoehe unter Bild 2; mit realen Textlaengen liegt die Flaeche damit immer noch AUF dem Bild (Figma-Wert -32%% haette sie bei kurzen Texten ganz unters Bild geschoben) */ /* 30.08. (Maik): breiter (Figma 474/566 Bildbreite), mittig; absolut wie Copy 1, damit Bild 3 textunabhaengig ansetzt */ /* 28.08.: ragt ~zur Haelfte unten raus - Bildkante endet zwischen 1. und 2. Copyzeile */
	.plx-c__item--3{width:40%;margin-top:-27.2%;z-index:1;} /* 30.08. (Maik/Figma): 40%% Wrapperbreite, buendig links; -27.2%% ab Bild2-UNTERKANTE (Copys sind absolut) = Bild3-Top ~13.8%% Wrapperbreite unter Bild2-Top wie im Figma */ /* 28.08.: horizontale Luecke zu Bild 2 = 40px (wie Bild1<->Bild2) */ /* Bild3-Top ~180px nach Bild2-Top (Mock) */ /* beginnt waehrend Bild2 laeuft, links am Modulrand */
	.plx-c__item--3 .plx-c__img{aspect-ratio:58/65;object-position:center center;}
	.plx-c__item--3 .plx-c__box{width:86.5%;margin:-17% 0 0 22.2%;} /* 30.08. (Maik): breiter (Figma 385/445), links 22%% eingerueckt, ragt rechts ueber die Bildkante; bleibt IM Fluss. 02.09. (Johann, "Problem mit dem Umbruch"): tiefer aufs Bild gezogen (-13 -> -17%%; Wrapper cappt bei 1560, dadurch schneidet die Kante NIE durch den Button) - mit dem kurzen echten Text schnitt die Bildkante ZWISCHEN den zwei Zeilen durch und Zeile 2 + Button wirkten auf dem weissen Grund "abgerissen"; jetzt sitzt der Text komplett auf dem Bild */ /* 28.08.: Bildkante endet zwischen 1./2. Copyzeile */
}
@media (max-width:1000px){
	.plx-c__item{margin-top:2rem;} /* Abstand Bild3<->Bild2 = Bild1<->Bild2 */
	.plx-c__item--1{margin-top:0;}
	.plx-c__item--1 .plx-c__img{aspect-ratio:36/32;object-position:center center;} /* 28.08.: fixe Mobil-Ratios (Maik) */
	.plx-c__item--2{width:88%;margin-left:auto;}
	.plx-c__item--2 .plx-c__img{aspect-ratio:32/32;object-position:center center;}
	.plx-c__item--3{width:95%;} /* 31.08. (Maik): NICHT full width - Weissraum rechts (Figma ~5%%) */
	.plx-c__item--3 .plx-c__img{aspect-ratio:34/38;object-position:center center;}
	.plx-c__box{width:92%;margin:-2.65rem 0 0;padding:1.05rem;} /* 31.08.: liegt ueberlappend auf dem Bild (Bildkante zwischen 1./2. Copyzeile). 02.09. (Maik): rechts eingekuerzt, damit ~8%% Viewport MOTIV neben der Flaeche sichtbar bleibt. 03.09. (Maik): Einkuerzung gilt NUR fuer Copy-Flaeche 1 und 3 - Flaeche 2 laeuft bis zum rechten Rand (eigene Regel unten); Deckkraft kommt aus der Basisregel (95%%) */
	.plx-c__item--2 .plx-c__box{width:100%;padding-left:0;} /* 03.09. (Maik): Copy-Flaeche 2 laeuft rechts BIS ZUM RAND (Item 2 endet am Viewportrand, 100%% = volle Spanne; die 8%%-Motivstreifen-Einkuerzung vom 02.09. galt nur fuer Flaeche 1+3) und Text + Button beginnen links BUENDIG mit Bild 2 (Box-Links = Bild-Links -> padding-left:0 setzt die Inhalte exakt auf die Bildkante) */
	.plx-c__item--3 .plx-c__box{width:91.6%;} /* Bild 3 spannt 95%% -> gleicher Streifen, endet an der Bildkante vor dem Weissraum */
		/* 30.08. (Maik): Copy 2 "fast ueber komplette Breite" - deckt als 100%%-Box exakt die Bild2-Spanne (beginnt an dessen linker Bildkante, laeuft bis zum rechten Rand) - Basisregel reicht */
		.module--parallax .btn{height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:.625em;} /* 28.08.: CTA-Button klein (Button-Set) mobil - P1 wie P2 */ /* 05.09. (Maik, Buttons-Ticket): Padding -1/4 */
}

/* ===== Karussell-Karten: hochkant + zentrierter Titel (Figma, 2026-07-23) ===== */
.module--karussell .stm-card__media{aspect-ratio:4/5;}
.module--karussell .stm-card__title{text-align:center;}

/* ===== Zitat: Text zentriert (Figma-Korrektur 2026-07-23) ===== */
.module--quote .quote__text{text-align:center;}
.module--quote .quote__mark{text-align:left;}
.module--quote .quote__img{border-radius:2px;}


/* ===== Zitat-Anführungszeichen als SVG (Figma, 2026-07-23) ===== */
.module--quote .quote__mark{display:block;width:78px;height:auto;color:var(--st-color-lightblue,#CAD9E0);margin:0 0 .42rem;text-align:left;} /* 09.09. (Maik, Zitate): Abstand Quote-Icon -> Zitat um 1/3 verringert - sichtbarer Abstand = .75rem hier + .25rem margin-top des Texts = 16px, jetzt .42+.25rem = 10.7px */
.module--quote .quote__mark svg{width:78px;height:auto;fill:currentColor;display:block;}
.module--quote.is-musik .quote__mark{color:rgba(255,255,255,.45);}


/* ============ Mega-Menü Desktop (Nachtschicht 2026-07-25) ============ */
.site-header{position:sticky;top:0;} /* 02.08.: sticky reaktiviert (main.css-Basis); admin-bar-Offset kommt aus main.css */
.nav-menu--mega{display:flex;gap:2.5rem;align-items:center;list-style:none;margin:0;padding:0;}
/* 01.08.: Hauptmenue nach Figma (Meta Pro Book 20px #222); Unterstrich als 2px-Linie mit runden
   Enden ALS OVERLAY (::after, immer vorhanden, nur Farbe wechselt -> nichts springt, immer duenn). */
.nav-menu--mega .nav-menu__link,
.site-nav .nav-menu--mega > li > a{font-family:var(--st-font-body,inherit);font-weight:400;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.5;color:var(--st-color-ink,#222);text-decoration:none;padding:1.2rem 0;display:inline-block;position:relative;}
.site-nav .nav-menu--mega > li > a,
.site-nav .nav-menu--mega > li.current-menu-item > a,
.site-nav .nav-menu--mega > li.current-menu-ancestor > a,
.site-nav .nav-menu--mega > li.current_page_ancestor > a{color:var(--st-color-ink,#222);background:none;}
.nav-menu--mega .nav-menu__link::after{content:"";position:absolute;left:0;right:0;bottom:.85rem;height:2px;background:transparent;}
/* 19.08. R2 Hauptnav-States (Maik): aktueller Punkt Primaer (Text+Linie); Hover/Mega-offen
   Sekundaer - steht NACH der is-current-Regel und gewinnt daher auch ueber dem aktiven
   Punkt; Pressed Primaer. is-mega-open kommt aus dem JS und haelt den Hover-Zustand,
   solange sich die Maus im zugehoerigen Megamenue bewegt (Luecke zwischen li und Mega). */
.nav-menu--mega .nav-menu__item.is-current > .nav-menu__link{color:var(--st-color-primary,#002F5D);}
.nav-menu--mega .nav-menu__item.is-current > .nav-menu__link::after{background:var(--st-color-primary,#002F5D);}
.nav-menu--mega .nav-menu__item:hover > .nav-menu__link,
.nav-menu--mega .nav-menu__item:focus-within > .nav-menu__link,
.nav-menu--mega .nav-menu__item.is-mega-open > .nav-menu__link{color:var(--st-color-secondary,#034B91);}
.nav-menu--mega .nav-menu__item:hover > .nav-menu__link::after,
.nav-menu--mega .nav-menu__item:focus-within > .nav-menu__link::after,
.nav-menu--mega .nav-menu__item.is-mega-open > .nav-menu__link::after{background:var(--st-color-secondary,#034B91);}
.nav-menu--mega .nav-menu__item > .nav-menu__link:active{color:var(--st-color-primary,#002F5D);}
.nav-menu--mega .nav-menu__item > .nav-menu__link:active::after{background:var(--st-color-primary,#002F5D);}
/* ==== Mega-Menue nach Figma (31.07., Nodes 8001:15422 + 8004:2045) ====
   Links 366px Ebene-2 | (optional) 360px Ebene-3 mit Innenschatten | Teaser-Hero,
   der sich beim Oeffnen der 3. Ebene zur Seite schiebt (left 366px -> 726px). */
.mega{position:absolute;left:0;right:0;top:100%;height:min(620px,calc(100vh - 140px));background:transparent;z-index:60;overflow:hidden;} /* 28.08. (Maik): BG transparent - der statische weisse Layer blitzte bei der Animation HINTER dem slidenden Inner auf */ /* 01.08.: kein Schlagschatten mehr (Ticket); 23.08.: untere Trennlinie sitzt am INNER und slidet mit rein (Maik: "als Ganzes reinanimieren") */
/* 19.08. (Maik): Die graue Trennlinie Hauptmenue/Megamenue bleibt an Ort und Stelle - vorher ueberdeckte
   das herausfahrende Mega (z-index 60) die border-bottom des Headers, unten erschien stattdessen die
   Mega-Abschlusslinie -> wirkte, als wandere die Linie mit. Overlay-Linie ueber dem Mega: */
@media (min-width:1001px){.site-header::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:#B0B0B0;z-index:70;pointer-events:none;}} /* 19.08.: hart #B0B0B0 - einheitlicher Grauton offen/geschlossen */
/* 21.09. R65: Die R61-Regeln (.is-g5flush blendete border-bottom + ::after aus, solange eine
   Galerie 5 unterm Header gepinnt war) sind ZURUECKGENOMMEN - Kundin: "die graue Trennlinie ...
   bitte wieder anzeigen lassen"; die Kante kam in Wahrheit vom Blur-Geisterband der Vorgaenger-
   Slides (Ausschub-Fix in stm-slideshow.js, R65). Das JS setzt die Klasse nicht mehr (und raeumt
   sie aktiv ab), daher stehen hier bewusst keine .is-g5flush-Regeln mehr. */
/* 19.08. (Maik): Mega faehrt HINTER dem Hauptmenue hervor - der Slide liegt auf dem INNER
   (das Mega clippt via overflow:hidden), das Mega selbst blendet nur. Verlassen: Fade-Out
   via is-closing (JS setzt hidden erst nach 220ms). */
.mega.is-open{animation:stmMegaFade .3s ease-out;}
.mega.is-open .mega__inner{animation:stmMegaSlide .3s ease-out;}
.mega.is-closing{animation:stmMegaOut .22s ease-in both;pointer-events:none;}
@keyframes stmMegaFade{from{opacity:0;}to{opacity:1;}}
@keyframes stmMegaSlide{from{transform:translateY(-24px);}to{transform:translateY(0);}}
@keyframes stmMegaOut{from{opacity:1;}to{opacity:0;}}
.mega[hidden]{display:none;}
.mega__inner{position:relative;height:100%;max-width:none;margin:0;padding:0;display:block;box-sizing:border-box;border-bottom:1px solid #B0B0B0;background:#fff;} /* 28.08.: weisser Grund slidet als Teil des Inners mit */
.mega__l2{list-style:none;margin:0;padding:48px 40px;position:absolute;left:0;top:0;bottom:0;width:366px;display:flex;flex-direction:column;gap:24px;overflow-y:auto;}
.mega__l2-item a{display:flex;justify-content:space-between;align-items:center;gap:1rem;font-family:var(--st-font-body,inherit);font-weight:400;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.5;color:var(--st-color-ink,#222);text-decoration:none;} /* 01.08.: Figma - Book 20px #222, Regular */
.mega__l2-item.is-active a,.mega__l2-item a:hover{text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:2px;} /* 23.08. (Maik): Hover/Aktiv NUR Linie, Schriftschnitt bleibt Book - kein Umbruch-Springen, einheitlich zu Mobile */
.mega__chev{flex:0 0 auto;width:10px;height:15px;font-size:0;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;}
.mega__l3{position:absolute;left:366px;top:0;bottom:0;width:360px;background:#fff;box-shadow:inset 8px 0 13px rgba(0,0,0,.05);padding:48px 40px;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity .25s ease;}
.mega.has-l3 .mega__l3{opacity:1;visibility:visible;}
.mega__l3-list{list-style:none;margin:0;padding:0;display:none;flex-direction:column;gap:26px;}
.mega__l3-list.is-active{display:flex;}
.mega__l3-list a{font-size:1.25rem;line-height:1.5;font-weight:400;color:var(--st-color-ink,#222);text-decoration:none;}
.mega__l3-list a:hover{color:var(--st-color-secondary,#034B91);text-decoration:underline;text-underline-offset:5px;}
.mega__l3-list a:active{color:var(--st-color-primary,#002F5D);} /* 19.08. (Maik): Pressed ~ Primaer */
.mega__teasers{position:absolute;top:0;right:0;bottom:0;left:366px;transition:left .35s ease;overflow:hidden;} /* schiebt sich zur Seite */
.mega.has-l3 .mega__teasers{left:726px;}
.mega__teaser{display:none;position:absolute;inset:0;min-height:0;}
.mega__teaser.is-active{display:block;}
.mega__teaser-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.mega__teaser-box{position:absolute;left:0;top:42px;width:400px;min-height:347px;margin:0;max-width:none;background:rgba(255,255,255,.8);display:flex;flex-direction:column;justify-content:center;padding:44px 38px 44px 24px;z-index:2;}
.mega__teaser-hl{margin:0 0 1.5rem;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;font-size:clamp(2.4rem,3.1vw,3.75rem);line-height:.85;}
.mega__hl1{display:block;color:var(--st-color-primary,#002F5D);}
.mega__hl2{display:block;color:var(--st-color-accent,#B51F29);}
.mega__teaser-copy{margin:0 0 2.5rem;color:var(--st-color-ink,#222);font-size:1.25rem;line-height:1.5;}
/* 10.08. (CPT-Teaser): WYSIWYG-Variante - Absaetze kompakt, CTA aus dem Editor sitzt wie der alte Button */
.mega__teaser-copy--rich p{margin:0 0 .6em;}
.mega__teaser-copy--rich p:last-child{margin-bottom:0;}
.mega__teaser-copy--rich .btn{margin-top:.9em;white-space:nowrap;}
/* 10.08. (Kontakt in Spalte): Team-Karte als Spalteninhalt */
.col--type-team .stm-team-card--col{max-width:100%;}
.col--type-team .stm-team-card__media img{width:100%;height:100%;object-fit:cover;} /* 13.09. (Kunde, "Modul Teams Kachel Bild"): "damit der gesamte Bild-Container gefuellt ist" - das alte height:auto liess das Bild im 3/4-Container mit Mist-Hintergrundstreifen stehen. Gewuenschtes ERGEBNIS = voll gefuellter Container -> object-fit:cover (woertliches 'contain' wuerde exakt die beanstandeten Raender lassen; im Antworttext erlaeutert) */
.mega__teaser-btn{white-space:nowrap;align-self:flex-start;}
@media (max-width:1000px){
  .mega{display:none !important;}
}

/* Mega-Menü Fix: Panel vollbreit (li/nav dürfen nicht positioniert sein) – nur Desktop */
@media (min-width:1001px){
  .site-nav:has(.nav-menu--mega){position:static !important;}
  .nav-menu--mega > .nav-menu__item{position:static !important;}
}


/* ============ WPForms-Styling nach Figma (2026-07-26, v2 hohe Spezifität) ============ */
body div.wpforms-container-full,body div.wpforms-container{--wpforms-field-border-color:var(--st-color-lightblue,#CAD9E0);--wpforms-field-border-radius:8px;--wpforms-field-text-color:var(--st-color-primary,#002F5D);--wpforms-button-background-color:var(--st-color-primary,#002F5D);--wpforms-button-border-radius:999px;max-width:640px;}
body div.wpforms-container-full .wpforms-form .wpforms-field{padding:9px 0;}
body div.wpforms-container-full .wpforms-form input[type=text],body div.wpforms-container-full .wpforms-form input[type=email],body div.wpforms-container-full .wpforms-form select,body div.wpforms-container-full .wpforms-form textarea{width:100%;max-width:100%;border:1px solid var(--st-color-lightblue,#CAD9E0);border-radius:8px !important;padding:.7em 1.05em;height:auto;color:var(--st-color-primary,#002F5D);background:#fff;font-family:inherit;font-size:1rem;line-height:1.4;}
body div.wpforms-container-full .wpforms-form input::placeholder,body div.wpforms-container-full .wpforms-form textarea::placeholder{color:rgba(0,47,93,.72);opacity:1;}
body div.wpforms-container-full .wpforms-form select{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'><path d='M1 1l6 6 6-6' fill='none' stroke='%23002F5D' stroke-width='2'/></svg>");background-repeat:no-repeat;background-position:right 1em center;padding-right:2.6em;}
body div.wpforms-container-full .wpforms-form textarea{min-height:210px !important;}
body div.wpforms-container-full .wpforms-form input[type=text]:focus,body div.wpforms-container-full .wpforms-form input[type=email]:focus,body div.wpforms-container-full .wpforms-form input[type=tel]:focus,body div.wpforms-container-full .wpforms-form input[type=number]:focus,body div.wpforms-container-full .wpforms-form input[type=url]:focus,body div.wpforms-container-full .wpforms-form input[type=password]:focus,body div.wpforms-container-full .wpforms-form select:focus,body div.wpforms-container-full .wpforms-form textarea:focus{border-color:var(--st-color-primary,#002F5D);outline:none;box-shadow:none;} /* 09.09. (Maik, Newsletter-Ticket, GLOBAL fuer alle Formularfelder): im aktiven Zustand faerbt sich NUR die vorhandene hellgraue 1px-Kontur Dunkelblau - gleiche Strichstaerke, KEIN zusaetzlicher Ring. Die "dicke blaue Kontur" war der Browser-Default-Fokusring (outline auto), fuer den keine eigene Regel existierte; der Fokus bleibt durch den Farbwechsel der Kontur sichtbar. */
body div.wpforms-container-full .wpforms-form .wpforms-field-label{display:none;}
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox ul{list-style:none;margin:0;padding:0;}
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li{display:flex;align-items:flex-start;gap:.6rem;margin:.35rem 0;}
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]{width:20px;height:20px;flex:0 0 auto;margin-top:0;-webkit-appearance:none;appearance:none;border:1px solid var(--wpforms-field-border-color,#CAD9E0);border-radius:4px;background:#fff;cursor:pointer;position:relative;} /* 09.09. R3 (Maik, Newsletter): native accent-color-Optik ersetzt, 20px-Box, r4 */ /* 09.09. R8 (Maik): DEFAULT-Kontur grau wie die Textfelder (1px #CAD9E0 = WPForms-Feldrahmen) - NUR der geklickte Zustand wird blau (Regel unten); margin-top:0 -> Box-Oberkante = Zeilen-Oberkante, und weil lh (19.76px) ~ Boxhoehe (20px) sitzt die erste Textzeile vertikal mittig zum Kaestchen, mehrzeiliger Text waechst nach unten */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]::before,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]::after{content:none;} /* 09.09. R4 (Johann, "noch kaputt"): WPForms-Modern malt den Checkbox-Rahmen als EIGENES ::before-Pseudo (16px, 1px lightblue, absolut) AUF dem Input + den Haken als ::after - zusammen mit unserer 20px-Box ergab das ZWEI versetzte Rahmen (oben/links hell, unten/rechts dunkel; auf Johanns 2x-Screenshot per Pixelanalyse identifiziert: #CAD9E0-Kante + #002F5D-Kante am selben Kaestchen). Beide WPForms-Pseudos aus - die Box zeichnet der Input selbst (Regel oben), den Haken UNSERE :checked-Regel darunter. */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:checked::after{content:"";box-sizing:border-box;position:absolute;left:50%;top:50%;width:7px;height:11px;margin:-6.9px 0 0 -3.5px;border:solid var(--st-color-primary,#002F5D);border-width:0 2.5px 2.5px 0;background:none;transform:rotate(40deg);} /* blauer Haken; :checked::after (hoehere Spezifitaet) reaktiviert ihn nach dem content:none oben; background:none neutralisiert ein evtl. SVG-Haken-Bild der WPForms-::after-Regel */ /* 09.09. R8c (Johann, "noch nicht exakt genug"): URSACHE des Restversatzes war box-sizing - im WPForms-Kontext rendern Pseudos CONTENT-box (unser Haken real 9x13, Rotationszentrum rechts-unten verschoben; live per getComputedStyle bewiesen), die Newsletter-Auswahl (.stm-nlx__box:after) dagegen BORDER-box. box-sizing:border-box erzwungen -> Glyph wieder echte 7x11; margin -6.9px vertikal legt die Haken-Tinte per PIL-Raster exakt auf die Boxmitte, identisch zur Auswahl (deren Element-Mitte sitzt 1.5px ueber Boxmitte, Tinte dadurch zentriert - bottom-heavy Glyph). LEHRE: bei Pseudo-Geometrie IMMER box-sizing mitpruefen - dieselbe width/height-Angabe kann je nach Reset-Kontext zwei verschiedene Kaesten ergeben. */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:checked,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:checked:hover,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:checked:focus,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:checked:active{border:1.5px solid var(--st-color-primary,#002F5D);background:#fff;box-shadow:none;} /* 09.09. R8 (Maik): NUR der geklickte (angehakte) Zustand traegt die blaue 1.5px-Kontur - inkl. Hover/Focus/Active-Varianten, damit keine WPForms-Zustandsregel dazwischenfunkt */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:focus-visible{outline:2px solid var(--st-color-secondary,#034B91);outline-offset:2px;} /* Tastatur-Fokus bleibt sichtbar (appearance:none entfernt den nativen Ring) - Muster wie .stm-nlx__cb:focus-visible */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox].wpforms-error,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox].user-invalid{border:1.5px solid var(--st-color-accent,#B51F29);} /* 09.09. R5 (Johann): WPForms-Validierung setzt .wpforms-error auf den Input und deren Regel loescht die Border (border-style:none) - Kontur bleibt im Error-Zustand stehen. */ /* 09.09. R8 (Maik): Error-Kontur in Michel-Rot #B51F29 statt Blau */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:hover,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:focus,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]:active{border:1px solid var(--wpforms-field-border-color,#CAD9E0);box-shadow:none;background:#fff;} /* 09.09. R6/R8: unangehakt bleibt die Kontur auch bei Hover/Focus/Active GRAU wie im Default (WPForms wuerde hier eigene Zustandsoptik reinmalen); angehakt gewinnt die :checked-Variantenregel oben (hoehere Spezifitaet) */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox].wpforms-error:hover,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox].wpforms-error:focus,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox].user-invalid:hover,body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox].user-invalid:focus{border:1.5px solid var(--st-color-accent,#B51F29);box-shadow:none;background:#fff;} /* 09.09. R6 (Johann, "gleiches Problem auch im Inkognito"): WPForms hat :hover-/:focus-Varianten der Error-Regel (0-6-2, border-style:none), die die reine Error-Regel (0-5-4) schlagen, sobald die Maus nach dem Abwahl-Klick auf dem Kaestchen steht. Diese Varianten (0-6-4) halten den Error-Rahmen in allen dynamischen Zustaenden - seit R8 in Michel-Rot. LEHRE: CDP-Klicks setzen weder :hover noch :focus - solche Zustandskombis sind per Automation unsichtbar und muessen ueber die CSSOM-Regelliste gefunden und per Klassenkopie nachgebaut werden. */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li label{color:var(--st-color-ink,#222);font-size:.95rem;margin:0;}
body div.wpforms-container-full .wpforms-form .wpforms-submit-container{text-align:right;padding-top:.6rem;}
body div.wpforms-container-full .wpforms-form button[type=submit]{display:inline-flex;align-items:center;justify-content:center;gap:.6em;background:var(--st-color-primary,#002F5D) !important;color:#fff !important;border:1px solid transparent;border-radius:999px !important;padding:0 1.5rem;font-weight:500;font-family:var(--st-font-head,inherit);font-size:1.25rem;line-height:1;height:45px;white-space:nowrap;-webkit-appearance:none;appearance:none;cursor:pointer;transition:all .3s ease-in-out;} /* 02.08.: gleiche Transition wie CTA-System */ /* 09.09. (Maik, Newsletter-Ticket): Submit = exakt der definierte grosse System-CTA .btn/.btn--primary (45px/1.25rem/500/0 1.5rem) statt des veralteten Sondermasses (46px/1rem/700/.85em 1.8em); mobil unten der globale <=1000-Switch auf die kleine Variante */
body div.wpforms-container-full .wpforms-form button[type=submit]:after{content:"";display:inline-block;flex:0 0 auto;width:.62em;height:.95em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;transition:all .3s ease-in-out;} /* 02.08.: exakt wie .btn--primary - Chevron, beim Hover verlaengert */
body div.wpforms-container-full .wpforms-form button[type=submit]:hover{background:var(--st-color-accent,#B51F29) !important;}
body div.wpforms-container-full .wpforms-form button[type=submit]:hover:after,body div.wpforms-container-full .wpforms-form button[type=submit]:focus-visible:after,body div.wpforms-container-full .wpforms-form button[type=submit]:active:after{width:1.28em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}
body div.wpforms-container-full .wpforms-form button[type=submit]:active{background:#8F1620 !important;} /* 09.09.: Pressed-State des System-CTA */
@media (max-width:1000px){
	body div.wpforms-container-full .wpforms-form button[type=submit]{height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:.625em;} /* 09.09. (Maik, Newsletter-Ticket): mobil die KLEINE System-CTA-Variante - Werte und Grenze (1000px) identisch mit dem globalen .btn-Klein-Switch */
}
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li{gap:.3rem;} /* 09.09. (Maik): Abstand Auswahl-Kaestchen -> "Datenschutzbestimmungen"-Text HALBIERT */ /* 09.09. R5 (Maik, Kontaktformular-Ticket): GLOBAL fuer alle Formulare (war auf .module--newsletter gescopt) */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li label{padding-left:0;} /* 09.09. R2 (Johann): sichtbarer Abstand war trotz Gap-Halbierung 16.8px - WPForms gibt dem Label ZUSAETZLICH padding-left:12px mit. Padding weg -> sichtbar 4.8px */ /* 09.09. R5: global */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox ul li input + label{padding-left:0;padding-inline-start:0;} /* 09.09. R7: REGRESSION aus der R5-Globalisierung - mit dem Wegfall von .module--newsletter verlor die Regel oben eine Klasse (0-3-4) und WPForms' "div... .wpforms-field.wpforms-field-checkbox ul li input + label{padding-inline-start:12px}" (0-3-5) gewann wieder: Text sass in ALLEN Formularen erneut 16.8px neben dem Kaestchen. Diese Variante (0-3-6) schlaegt sie; padding-inline-start explizit mit genullt, weil die WPForms-Regel die logische Eigenschaft setzt. LEHRE: beim Ent-Scopen einer Regel sinkt ihre Spezifitaet - jede Globalisierung gegen die verlierende Fremdregel NEU nachmessen (Tinte, nicht Box). */
body div.wpforms-container-full .wpforms-form .wpforms-field-checkbox li input[type=checkbox]{margin-top:0;} /* 09.09. R2: war 4.5px (Text oben buendig zur Box) */ /* 09.09. R8 (Maik): Textzeile VERTIKAL ZENTRIERT zum Kaestchen - margin-top:0 reicht, weil Zeilenhoehe (19.76px) ~ Boxhoehe (20px); mehrzeiliger Text waechst nach unten */
body div.wpforms-container-full .wpforms-form .wpforms-submit-container{padding-top:0;} /* 09.09. R2 (Johann): Abstand "*Pflichtfelder" zum Block darueber halbiert (Container-padding-top 9.6px raus) */ /* 09.09. R5: global */
body div.wpforms-container-full .wpforms-form .wpforms-submit-container::before{content:"*Pflichtfelder";display:block;text-align:left;font-size:.8rem;color:var(--st-neutral-600,#6D6D6D);margin:-5px 0 .8rem;} /* 09.09. (Maik): "*Pflichtfelder" ZWISCHEN Datenschutz-Zeile und CTA (Block VOR dem Button, linksbuendig; -5px oben, Rest des Abstands sind Feld-padding-bottom 9px + 10px Feld->Container in WPForms-Strukturen) */ /* 09.09. R5 (Maik, Kontaktformular-Ticket): GLOBAL fuer ALLE Formulare - die alte :after-Variante unterm .module--form-Formular ist ERSATZLOS raus (stand sonst doppelt); damit steht die Zeile auch im Teams-/Kontaktformular */

/* ---- 16.09.2026 (Ticket "Abschiedsbuch Herr Roeder"): Upload-Felder + Zeichen-Zaehler ----
   Neues Formular 11501 nutzt erstmals File-Upload (WPForms Pro, modern style) und das
   600-Zeichen-Limit. Upload-Felder brauchen SICHTBARE Labels ("Upload 1 - ein Foto von mir"),
   die globale Platzhalter-Konvention (Labels display:none, Z.842) gilt nur fuer Tipp-Felder. */
body div.wpforms-container-full .wpforms-form .wpforms-field-file-upload .wpforms-field-label{display:block;font-size:1rem;font-weight:500;color:var(--st-color-primary,#002F5D);margin:0 0 .45rem;}
body div.wpforms-container-full .wpforms-form .wpforms-field-file-upload .wpforms-uploader{border:1px dashed var(--st-color-lightblue,#CAD9E0);border-radius:8px;background:#fff;color:var(--st-color-primary,#002F5D);}
body div.wpforms-container-full .wpforms-form .wpforms-field-file-upload .wpforms-uploader:hover,body div.wpforms-container-full .wpforms-form .wpforms-field-file-upload .wpforms-uploader.wpforms-dropzone-hover{border-color:var(--st-color-primary,#002F5D);}
body div.wpforms-container-full .wpforms-form .wpforms-field-file-upload .wpforms-uploader .dz-message{color:var(--st-color-primary,#002F5D);}
body div.wpforms-container-full .wpforms-form .wpforms-field-file-upload .wpforms-uploader svg{fill:var(--st-color-primary,#002F5D);}
body div.wpforms-container-full .wpforms-form .wpforms-field-description{font-size:.8rem;color:var(--st-neutral-600,#6D6D6D);margin-top:.35rem;}
body div.wpforms-container-full .wpforms-form .wpforms-field-limit-text{font-size:.8rem;color:var(--st-neutral-600,#6D6D6D);text-align:right;margin-top:.35rem;}


/* ============ Mobile Navigation – Header + Drill-Down (2026-07-26) ============ */
@media (min-width:1001px){
  .header-search{display:none;}
  .site-branding__logo--stacked{display:none;}
  .mnav{display:none;}
}
@media (max-width:1000px){
  /* --- Header nach Figma: Burger links, Logo (gestapelt) mittig, Suche rechts ---
     19.08. R2 (Asana "Modul Haupt Navigation"): Asset-Icons (Burger Menu/Close/Suche Lupe),
     Menue hoehenfuellend, kein Schatten auf der Hauptnavi, Trennlinie hart #B0B0B0. */
  .site-topbar{display:none;}
  .site-header__inner{min-height:80px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 14px;}
  .nav-toggle{display:flex;order:1;flex-direction:row;align-items:center;justify-content:center;gap:0;width:44px;height:44px;padding:0;background:transparent;border:none;cursor:pointer;color:var(--st-color-primary,#002F5D);}
  .nav-toggle{position:relative;}
  .nav-toggle__open,.nav-toggle__close{display:block;line-height:0;transition:opacity .22s ease,transform .22s ease;} /* 28.08. (Maik): Burger <-> Close animiert (Crossfade + Drehung) */
  .nav-toggle__open svg,.nav-toggle__close svg{width:36px;height:36px;max-width:none;display:block;} /* 23.08.: Icons etwas groesser */
  .nav-toggle__close{position:absolute;left:50%;top:50%;margin:-18px 0 0 -18px;opacity:0;transform:rotate(-90deg);pointer-events:none;}
  .nav-toggle[aria-expanded="true"] .nav-toggle__open{opacity:0;transform:rotate(90deg);}
  .nav-toggle[aria-expanded="true"] .nav-toggle__close{opacity:1;transform:rotate(0deg);}
  .nav-toggle__bar{background:var(--st-color-primary,#002F5D);} /* Fallback-Bars, falls Icon-Dateien fehlen */
  .site-header__inner{position:relative;}
  .site-branding{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:flex;} /* 28.08. (Maik): Logo zur BROWSERBREITE zentriert, nicht zwischen den ungleich breiten Icon-Gruppen */
  .site-branding__logo--full,.site-branding__logo--mark{display:none !important;}
  .site-branding__logo--stacked{display:block;height:62px;width:auto;}
  .header-actions{order:3;display:flex;align-items:center;gap:2px;} /* 28.08. (Eyeable): Gruppe statt Einzelbutton */
  .header-search{display:flex;align-items:center;justify-content:center;width:44px;height:44px;color:var(--st-color-primary,#002F5D);background:none !important;border:0;padding:0;} /* 18.08.: kein Akzent-BG (Altregel) */
  .site-header .header-a11y svg{width:40px;height:40px;max-width:none;}
  .site-header .header-search svg{width:40px;height:40px;max-width:none;} /* 28.08. R2: 40 = Kreisgroesse; Spezifitaet > button.header-search svg */
  body.mnav-lock{overflow:hidden;}

  /* --- Overlay: hoehenfuellend, liegt HINTER der Hauptnavigation (kein Schatten auf ihr) --- */
  #site-nav{display:none;position:fixed;top:calc(80px + var(--wp-admin--admin-bar--height,0px));left:0;right:0;bottom:0;background:#fff;z-index:80;box-shadow:none;border-top:1px solid #B0B0B0;height:auto;max-height:none;overflow-y:auto;overscroll-behavior:contain;} /* 28.08. (Maik): wieder hoehenfuellend - fixed bis bottom:0 statt 100dvh-Rechnung (dvh war auf Kunden-Browsern unzuverlaessig -> Menue endete vor dem unteren Rand); 19.08.: max-height:none schlaegt Altregel */
  #site-nav.is-open{display:block;}
  #site-nav .nav-menu--mega{display:none;}

  /* --- Drill-Down (19.08. R2: Stack-Slides statt Akkordeons, nach Figma) --- */
  .mnav ul{list-style:none;margin:0;padding:0;}
  .mnav__panel--sub{display:none;}
  .mnav__panel{padding-bottom:150px;} /* 28.08. (Maik): fester Weissraum nach dem letzten Menuepunkt - die Quicknavi-Pille (bottom 16 + 56 hoch) liegt nie mehr ueber dem Inhalt */
  .mnav.has-sub .mnav__panel--root{display:none;}
  .mnav__panel--sub.is-active{display:block;}
  .mnav__panel.slide-fwd{animation:mnavInFwd .28s ease both;}
  .mnav__panel.slide-back{animation:mnavInBack .28s ease both;}
  .mnav__panel--root{padding-bottom:150px;} /* 28.08.: gleicher fester Weissraum wie die Sub-Panels (2rem-Regel ueberschrieb die generische 150px-Regel) */

  /* Mask-Chevron wie Desktop (mega__chev, 10x15) */
  .mnav__chev{flex:0 0 auto;width:10px;height:15px;font-size:0;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;}

  /* Hauptmenuepunkte: Typo wie Desktop (Book, uppercase, #222222), KEINE Trennlinien */
  .mnav ul.mnav__l1{padding-top:.6rem;} /* 19.08.: Spezifitaet > .mnav ul */
  .mnav__row{display:flex;justify-content:space-between;align-items:center;gap:1rem;width:100%;padding:.85rem 1.5rem;background:none;border:0;font-family:var(--st-font-body,inherit);font-weight:400;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.5;color:#222222;text-decoration:none;text-align:left;cursor:pointer;}
  .mnav__row .mnav__chev{color:#222222;}
  button.mnav__row:hover,button.mnav__row:active,button.mnav__metarow:hover,button.mnav__metarow:active{text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:2px;} /* 28.08. (Maik): Hover-Effekt auch fuer Punkte mit tieferer Ebene (mobil) */

  /* Panel-Kopf: Back-Arrow (Asset) linksbuendig + vertikal zentriert, Titel zentriert,
     unterstrichen, #222222, Maximalbreite mit automatischem Umbruch */
  .mnav__head{position:relative;padding:1.1rem 3.4rem;min-height:56px;display:flex;align-items:center;justify-content:center;margin-bottom:.9rem;} /* 23.08.: mehr Abstand Titel -> Untermenue */
  .mnav__back{position:absolute;left:.9rem;top:50%;transform:translateY(-50%);width:44px;height:44px;padding:0;border:0;cursor:pointer;background:transparent url("../img/icons/Back%20Arrow.svg") no-repeat center/36px auto;font-size:0;} /* 28.08. (Maik): gleiche Groesse wie das Close-Icon (36px) */
  .mnav__title{display:block;max-width:100%;margin:0 auto;text-align:center;font-family:var(--st-font-body,inherit);font-weight:400;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.4;color:#222222;text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:2px;overflow-wrap:break-word;hyphens:auto;}

  /* Tiefere Ebenen: KEINE Trennlinien, KEINE Akkordeons - Typo/Chevrons wie Desktop */
  .mnav__l3list a{display:block;padding:.7rem 1.5rem;font-size:1.25rem;line-height:1.5;font-weight:400;color:#222222;text-decoration:none;}

  /* Topnavigation im Menue: einheitlich #5D5D5D, gleiche Chevrons; dunkelblaue Trennlinie
     zum Hauptmenue NUR in Textbox-Breite (margin statt voller Breite) */
  .mnav ul.mnav__meta{border-top:1px solid var(--st-color-primary,#002F5D);margin:1.1rem 1.5rem 0;padding:1rem 0 2rem;} /* 19.08.: Spezifitaet > .mnav ul; 23.08.: Linie duenner (Maik) */
  .mnav__metarow{display:flex;justify-content:space-between;align-items:center;gap:1rem;width:100%;padding:.6rem 0;background:none;border:0;font-family:var(--st-font-body,inherit);font-weight:400;font-size:1.125rem;line-height:1.5;color:var(--st-neutral-600,#5D5D5D);cursor:pointer;text-align:left;text-decoration:none;}
  .mnav__metarow .mnav__chev{color:var(--st-neutral-600,#5D5D5D);}
  .mnav__metalist a{display:flex;align-items:center;gap:10px;padding:.7rem 1.5rem;color:var(--st-neutral-600,#5D5D5D);text-decoration:none;font-size:1.125rem;direction:ltr;text-align:left;}
  .mnav__metalist a:hover{color:#034B91;}
  .mnav__metalist a.is-active{color:var(--st-color-primary,#002F5D);font-weight:700;}
  .mnav__metalist .stm-lang__check{display:none;flex:0 0 auto;}
  .mnav__metalist a.is-active .stm-lang__check{display:block;}
}
@keyframes mnavInFwd{from{transform:translateX(48px);opacity:0;}to{transform:none;opacity:1;}}
@keyframes mnavInBack{from{transform:translateX(-48px);opacity:0;}to{transform:none;opacity:1;}}

/* ============ Footer mobil nach Figma „7 Mob Mobile Footer" (2026-07-26) ============ */
@media (max-width:782px){
  .site-footer__cols{grid-template-columns:1fr !important;gap:0;}
  .site-footer__col{padding:22px 0;border-bottom:1px solid #ffffff;} /* 23.08. (Maik): Trenner weiss */
  .site-footer__col:first-child{padding-top:0;}
  .site-footer__col--social{border-bottom:0;}
  .site-footer__bottom{display:flex;flex-direction:column;align-items:center;border-top:1px solid #ffffff;margin-top:8px;}
  .site-footer__logo,.site-footer__logo--center{position:static;transform:none;background:transparent;padding:24px 0 4px;order:1;margin:0;}
  .site-footer__meta{order:2;width:100%;}
  .site-footer__meta::before{display:none;}
  .site-footer__meta-menu{flex-wrap:wrap;justify-content:center;column-gap:24px;row-gap:10px;padding:12px 0 110px;} /* 23.08. (Maik): mehr blaue Flaeche unten - Quicknavi-Pille (bottom 16 + 56 hoch) verdeckt die Meta-Punkte nicht mehr */
  .site-footer__meta-menu li{background:transparent;}
}

/* Mobile: lange Headline-Wörter umbrechen (min-content-Overflow, 2026-07-26) */
@media (max-width:1000px){
  .module__headline,.quote__text,.plx__headline{hyphens:auto;overflow-wrap:anywhere;}
  .cols__row,.cols__row>.col{min-width:0;}
}

/* 19.08. R2: Meta-Styles wandern in den Hauptnav-Mobile-Block */

/* 19.08. R2: Topnavi-Mobile-Styles in den Hauptnav-Mobile-Block ueberfuehrt */


/* ============ Karussell "Aktuelles"/"Veranstaltungen" + Team-Formular (2026-07-27, Figma 8081:1051) ============ */
.nkar{display:grid;grid-template-columns:minmax(240px,.9fr) 2.1fr;gap:3rem;align-items:center;}
.nkar__intro{display:flex;flex-direction:column;gap:1.4rem;align-items:flex-start;min-width:0;}
.nkar__intro-img{max-width:65%;height:auto;align-self:flex-end;margin-bottom:-2rem;}
.nkar__headline{font-size:var(--stm-h2-size);line-height:var(--stm-h2-lh);margin:0;} /* 21.08.: globale H2 */
.nkar__cta{margin:0;}
.nkar__main{min-width:0;}
@media(min-width:700px){ .nkar .stm-cards{grid-auto-columns:calc((100% - 2*var(--st-space-m,2rem))/3);} }
.nkar .stm-card__media{aspect-ratio:auto;}
.nkar-card__inner{display:flex;flex-direction:column;gap:.3rem;text-decoration:none;height:100%;}
.nkar-card{display:flex;} .nkar-card>.nkar-card__inner{flex:1;} /* 31.07.: gleiche Kartenhoehe */
.nkar-card__media{position:relative;display:block;aspect-ratio:4/3;overflow:hidden;background:var(--st-color-lightblue,#CAD9E0);}
.nkar-card__img{width:100%;height:100%;object-fit:cover;display:block;}
.nkar-card__date{position:absolute;top:0;left:0;background:rgba(34,34,34,.85);color:#fff;font-size:.72rem;font-weight:700;padding:.3rem .6rem;letter-spacing:.04em;}
.nkar-card__badge{position:absolute;top:0;left:0;background:var(--st-color-primary,#002F5D);color:#fff;font-size:.72rem;font-weight:700;padding:.3rem .6rem;letter-spacing:.04em;text-transform:uppercase;}
/* 02.08.: Termine-Karussell nach Figma 8081:1156 - Freisteller rechts, grosse Headline links, CTA unten */
.nkar--events{grid-template-columns:minmax(280px,.95fr) 1.05fr;}
.nkar--events .nkar__intro{position:relative;display:block;min-height:420px;}
.nkar--events .nkar__intro-img{position:absolute;right:0;bottom:0;max-width:60%;margin:0;z-index:1;}
.nkar--events .nkar__intro .module__kicker{position:relative;z-index:2;margin:0 0 1rem;}
.nkar--events .nkar__headline{position:relative;z-index:2;margin:0 0 2rem;max-width:70%;} /* 02.08. R2: KEINE Groessen-Override mehr - Standard-Headline wie Einzelveranstaltung/alle Module */
.nkar--events .nkar__cta{position:relative;z-index:2;margin:0;}
.nkar--events .nkar-card__badge{text-transform:none;} /* Kategorien nicht VERSAL (Ticket) */
@media(max-width:900px){
  .nkar--events .nkar__intro{min-height:0;}
  .nkar--events .nkar__intro-img{position:static;max-width:45%;display:block;margin:0 auto 1rem;}
  .nkar--events .nkar__headline{max-width:none;}
}
.nkar-card__title,.nkar-card__when{font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;color:var(--st-color-primary,#002F5D);font-size:.92rem;line-height:1.3;margin-top:.55rem;}
.nkar-card__sub,.nkar-card__evtitle{color:var(--st-color-accent,#B51F29);font-weight:700;font-size:.9rem;line-height:1.35;}
.nkar-card__desc{color:#555;font-size:.85rem;line-height:1.4;}
.nkar-card__go{color:#222222;font-size:1rem;font-weight:500;margin-top:auto;padding-top:.35rem;display:inline-flex;align-items:center;gap:.4em;align-self:flex-start;} /* 31.07.: immer auf einer Hoehe */ /* 05.09. (Maik, Buttons-Ticket): auf die Komponente "Text-Link mit Pfeil (klein)" vereinheitlicht - Medium 1rem, #222222, mit Chevron (News + Veranstaltungen hatten "komplett andere Textlinks") */
.nkar-card__go::after{content:"";display:inline-block;flex:0 0 auto;width:.62em;height:.95em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;transition:all .3s ease-in-out;} /* 07.09. R2 (Maik, News-Karussell): transition wie beim btn--text-Original - noetig fuer den Hover-Morph unten */
.nkar-card__inner:hover .nkar-card__go::after,.nkar-card__inner:focus-visible .nkar-card__go::after,.nkar-card__inner:active .nkar-card__go::after{width:1.28em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");} /* 07.09. R2 (Maik, News-Karussell): "der korrekte Text-Link hat bei Hover und Klick einen PFEIL statt Chevron" - der Hover-Morph des btn--text-Originals fehlte in der nkar-Kopie; er greift beim Hover/Klick der ganzen Karte (die Karte IST der Link, analog zum Farbwechsel darunter). Gilt fuer News- UND Veranstaltungs-Karten (beide nutzen .nkar-card__go) */
.nkar-card__inner:hover .nkar-card__title{color:var(--st-color-accent,#B51F29);}
.nkar-card__inner:hover .nkar-card__go{color:var(--st-color-secondary,#034B91);}
.nkar-card__inner:active .nkar-card__go{color:var(--st-color-primary,#002F5D);} /* 05.09. (Maik): Text-Link-States #222/#034B91/#002F5D - Kartentitel hovert weiter rot */
.nkar__topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;gap:1rem;}
.nkar__tabs{display:flex;gap:1.6rem;}
.nkar__tab{background:none;border:0;padding:0;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:.95rem;color:var(--st-color-primary,#002F5D);cursor:pointer;}
.nkar__tab.is-active,.nkar__tab:hover{color:var(--st-color-accent,#B51F29);}
.nkar__main[data-tab="heute"] .stm-card[data-today="0"]{display:none;}
.nkar__empty{color:#666;margin:.5rem 0 0;}
@media(max-width:900px){
  .nkar{grid-template-columns:1fr;gap:1.25rem;}
  .nkar__intro{align-items:center;text-align:center;}
  .nkar__intro-img{align-self:center;margin-bottom:0;max-width:45%;}
}
.stm-team-form{display:grid;grid-template-columns:1fr 1.3fr;gap:3rem;align-items:start;}
.stm-team-form .stm-team-card__media{aspect-ratio:6/3;} /* 01.08.: breites Personenbild (Ticket) */
.stm-team-form .stm-team-card__name{margin-bottom:.25rem;} /* 02.08.: Funktion dichter an den Namen (Ticket) */
.stm-team-form__form .wpforms-container,.stm-team-form__form .wpforms-container-full,
body .stm-team-form__form div.wpforms-container-full{margin-top:0;padding-top:0;} /* Formular oben buendig mit dem Bild (02.08.: Selektor verstaerkt) */
.stm-team-form__form .wpforms-container .wpforms-form,.stm-team-form__form .wpforms-field:first-child{margin-top:0;padding-top:0;}
.stm-team-form__hint{color:#666;}
@media(max-width:820px){ .stm-team-form{grid-template-columns:1fr;gap:1.5rem;} }

/* Fix: Intro-Headline im nkar darf auch auf Desktop trennen (2026-07-27) */
.nkar__headline{hyphens:auto;overflow-wrap:anywhere;}

/* Fix: gestapeltes Logo auf Desktop sicher verstecken (stm-assets.css setzt .site-branding__logo display:block) 2026-07-27 */
@media (min-width:1001px){ .site-branding__logo.site-branding__logo--stacked{display:none;} }

/* Fix: Sound-Button verankert sich in seiner Spalte (sitzt unten rechts im Motiv, Figma) 2026-07-27 */
.col:has(.col__soundwrap){position:relative;}


/* ============ Teaser-Rework nach Figma-Abgleich (2026-07-27) ============ */
/* Teaserkacheln: eigener Modul-Wrapper, max 1440px, Link-Zeile UNTER dem Bild */
/* 04.08.: 1440px-Sonderbreite ENTFERNT - Teaser liegt im Satzspiegel (Kundenticket module-6) */
.teaser-grid__item{display:flex;flex-direction:column;gap:.9rem;text-decoration:none;}
/* 02.09. R2 (Maik, "Modul Teaser Kacheln"): Kachel-Ratios exakt nach Figma-Briefing */
.teaser-grid__media{position:relative;display:block;overflow:hidden;aspect-ratio:648/440;} /* Basis = 2-Spalter 64.8/44 */
.tg--full .teaser-grid__media{aspect-ratio:1320/540;} /* 1-Spalter 132/54 */
.tg--two_thirds .teaser-grid__media{aspect-ratio:872/520;} /* 70er-Kachel 87.2/52 */
.tg--one_third .teaser-grid__media{aspect-ratio:422/380;} /* 3-Spalter 42.2/38 */
.tg--two_thirds + .tg--one_third .teaser-grid__media,
.tg--one_third:has(+ .tg--two_thirds) .teaser-grid__media{aspect-ratio:422/520;} /* 30er NEBEN einem 70er: 42.2/52 - gleiche Hoehe wie die 70er-Kachel (872+422+Gap = Satzspiegel) */
.tg--quarter .teaser-grid__media{aspect-ratio:312/320;} /* 4-Spalter 31.2/32 (leicht hochkant) */
.teaser-grid__label{display:block;text-align:center;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:.95rem;color:var(--st-color-primary,#002F5D);transition:color .15s ease;}
.teaser-grid__item:hover .teaser-grid__label{color:var(--st-color-accent,#B51F29);}
.teaser-grid__overlay{display:none;}
/* 02.09. R2: Kopfzeile mit optionalem CTA - EXAKT der Karussell-Standard (.nnews__head):
   Desktop Topline/HL links + Button rechts untenbuendig zur HL, Mobile untereinander linksbuendig */
.stm-teasergrid .tg__head{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:2rem;}
.stm-teasergrid .tg__headings{min-width:0;}
.stm-teasergrid .tg__head .module__headline{margin-bottom:0;}
.stm-teasergrid .tg__cta{flex:0 0 auto;}
.stm-teasergrid .teaser-grid{margin-top:0;} /* Abstand zum Grid steuert jetzt .tg__head */
@media (max-width:900px){
  .stm-teasergrid .tg__head{flex-direction:column;align-items:flex-start;gap:1.25rem;margin-bottom:1.5rem;}
}
/* 02.09. R2: Mobil haben ALLE Kacheln dasselbe Format 36/32, kleine Formate full width */
@media (max-width:820px){
  .teaser-grid__item{flex-basis:calc(50% - var(--tg-gap)/2) !important;}
  .teaser-grid__media,.tg--full .teaser-grid__media,.tg--two_thirds .teaser-grid__media,
  .tg--one_third .teaser-grid__media,.tg--quarter .teaser-grid__media,
  .tg--two_thirds + .tg--one_third .teaser-grid__media,
  .tg--one_third:has(+ .tg--two_thirds) .teaser-grid__media{aspect-ratio:360/320;}
}
@media (max-width:520px){ .teaser-grid__item{flex-basis:100% !important;} }

/* Slider-Dots (sitewide): Grau-Punkte, aktiv = blaue Pille */
.stm-slider__dots{display:flex;gap:.45rem;align-items:center;}
.stm-slider__dots button{width:8px;height:8px;border-radius:999px;border:0;padding:0;background:var(--st-neutral-300,#D1D1D1);cursor:pointer;transition:all .2s ease;}
.stm-slider__dots button[aria-current="true"]{width:22px;background:var(--st-color-primary,#002F5D);}
.stm-slider__prev,.stm-slider__next{background:none;border:0;padding:0;font-size:1.3rem;line-height:1;color:var(--st-color-primary,#002F5D);cursor:pointer;}
.stm-slider__prev:disabled,.stm-slider__next:disabled{color:var(--st-neutral-300,#D1D1D1);cursor:default;}
.stm-slider__prev:hover:not(:disabled),.stm-slider__next:hover:not(:disabled){color:var(--st-color-accent,#B51F29);}
/* 07.09.: caption-box/navarrows-Regeln entfernt - Markup nutzt jetzt .stm-slbox + .stm-slbox__arrows (s. Spalter-Block) */

/* Meta-Zeilen (Glockengelaeut: Label blau VERSAL, Wert rot) */
.col__text .stm-meta{margin:.5rem 0 0;}
.col__text .stm-meta strong{display:block;color:var(--st-color-primary,#002F5D);text-transform:uppercase;letter-spacing:.05em;font-size:.82rem;}
.col__text .stm-meta span{color:var(--st-color-accent,#B51F29);font-weight:700;font-size:.9rem;line-height:1.4;}

/* Meta-Zeilen: Wert-Text rot auch ohne span (TinyMCE strippt spans) 2026-07-27 */
.col__text .stm-meta{color:var(--st-color-accent,#B51F29);font-weight:700;font-size:.9rem;line-height:1.45;}

/* is-intro Bild-Text: Kopf zentriert, Spaltentext bleibt linksbuendig (Glockengelaeut) 2026-07-27 */
.module--spalter .is-intro .col .col__text{text-align:left;}

/* Teaserkacheln: Link-Balken halbtransparent unten AUF dem Bild (Figma-Detail) 2026-07-27 */
.teaser-grid__item{gap:0;}
.teaser-grid__bar{position:absolute;left:0;right:0;bottom:0;z-index:3;padding:.75rem 1rem; /* 02.08.: z-index ueber dem Bild-Credit (Credit liegt dahinter) */background:rgba(255,255,255,.85);text-align:center;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.1;color:var(--st-color-primary,#002F5D);transition:color .15s ease;} /* 05.09. (Maik, "Modul Teaser"): Title-Links ALLE auf H5 (1.25rem, war H4 28px - "einfach zu riesig"); line-height 1.5 statt H5-34px, damit mehrzeilige Titel in der Leiste kompakt bleiben */ /* 15.10. R115 (Kunde, "Teaserkachel Lineheight H5"): 1.5 (30px) -> 1.1 (22px) = die allgemeine H5-Zeilenhoehe aus Maiks 10.09.-Ticket (.module h5 20/22px, Regel ~2366). Die 1.5 stammte von VOR dem 10.09., als die globale H5 noch 34px hatte - seit der Globalkorrektur stand die Kachel als einzige noch auf dem alten Wert. Relativ (1.1) statt 1.375rem, damit ein kuenftiger Groessenwechsel mitskaliert. */
.teaser-grid__item:hover .teaser-grid__bar{color:var(--st-color-accent,#B51F29);}
/* 05.09.: 4-Spalter-Sonderregel (Figma 24) entfaellt - alle Varianten einheitlich H5 */
@media (max-width:820px){ .teaser-grid__bar{padding:.7rem .9rem;} } /* mobil: gleiche H5-Groesse, nur kompakteres Padding */


/* ============ Karussells dynamisiert: Anschnitt + Dots + Pfeile (Figma, 2026-07-27) ============ */
/* Angeschnittener Eintrag: News/Events ~2,4 Karten, generisches Karussell ~4,3 Karten je View */
@media(min-width:700px){
  .nkar .stm-cards{grid-auto-columns:calc((100% - var(--nkarbleed,0px) - 2*var(--st-space-m,2rem))/2.4);}
  .module--karussell .stm-cards{grid-auto-columns:calc((100% - 4*var(--st-space-m,2rem))/4.3);}
}
/* Dots: aktiv = blaue Pille */
.stm-cards__dots button{width:8px;height:8px;background:var(--st-neutral-300,#D1D1D1);transition:width .2s ease,background .2s ease;}
.stm-cards__dots button[aria-current="true"]{width:22px;background:var(--st-color-primary,#002F5D);}

/* News-Feinschliff (31.07., Kundenticket module-11): schmalere Gaps, Titel lh 1.1,
   kompakter Datums-Badge, Hover nur "Mehr erfahren", Anschnitt AUSSERHALB des Satzspiegels */
.stm-cards--news{gap:1rem;} /* 07.09. (Maik, News-Karussell): Gap wie Karussell Standard (1rem, war 1.5) - Kacheln damit exakt in Standard-4-Spalter-Breite */
.nkar-card__title{line-height:1.1;}
.nkar-card__date,.nkar-card__badge{font-size:.75rem;line-height:1;padding:5px 8px;}
.nkar-card__inner:hover,.nkar-card__inner:hover span{text-decoration:none;}
/* 05.09. (Maik, Buttons-Ticket): Hover-Unterstreichung raus - die Text-Link-Komponente hat keine, der Chevron kommt aus der Basisregel */
.module--newsblog,.module--events{overflow-x:clip;} /* Bleed ohne Seiten-Scrollbalken */

/* ==== Code-Modul: Embeds/iframes responsiv 16:9 (31.07., Webcam-Ticket) ====
   Wie die Live-Seite (padding-bottom 56.25%-Hack), nur modern per aspect-ratio.
   width/height-Attribute des eingefuegten iframes werden ueberschrieben; eine
   feste Hoehe per Inline-style="height:..px" gewinnt weiterhin (bewusst). */
.module--code iframe{display:block;width:100%;aspect-ratio:16/9;height:auto;border:0;}

.stm-hn__customico{width:34px;height:34px;object-fit:contain;max-width:none;display:block;} /* Motiv 34px = gruene Kaesten (Kundenmock, 51px@1.5x) */ /* Quick-Navi: getauschte Icons */

/* ==== Breadcrumbs (31.07., Figma Seite "Layout") ==== */
.modules{display:flow-root;} /* 01.08.: Margin-Collapse-Falle - die bc-Marge kollabierte durch den Wrapper nach aussen (sichtbar 0px unterm Header) */
.stm-bc{margin:2rem 0 1rem;} /* 02.08.: Header ueberlappt seit Sticky-Fix NICHT mehr -> 2rem = 32px sichtbare Luft wie abgenommen */
.module--sgt .stm-bc{position:relative;z-index:5;} /* 18.09. R56 (Dirk/Stefanie, Einzelseiten News+Termine): Brotkrume in der Z-ACHSE ueber den Content - die grosse Datums-Textbox der sgt-grid reichte (transparent) ueber die Brotkrume und fing deren Klicks ab; Position bleibt wie immer UNTER dem Hero (17.09.-Umzug vor den Hero war ein Missverstaendnis, Templates zurueckgebaut) */
.stm-bc__list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;align-items:center;}
.stm-bc__item{display:inline-flex;align-items:center;font-size:.75rem;font-weight:500;line-height:1.5;letter-spacing:.0125em;color:var(--st-neutral-300,#B0B0B0);}
.stm-bc__item.is-current{color:var(--st-neutral-400,#888888);}
.stm-bc__link{color:inherit;text-decoration:none;}
.stm-bc__link:hover{color:var(--st-neutral-400,#888888);text-decoration:none;}
/* Nach einem Hero: Breadcrumb DIREKT an die Hero-Kante (fix 40px, unabhaengig vom Spacer);
   der "Abstand unten" des Heros wirkt erst NACH dem Breadcrumb (Kundenregel 31.07.).
   Margin-Collapse-Mathe: Ziel 40px = max(HeroSpacer, mt) bzw. HeroSpacer + negatives mt. */
.module--hero + .stm-bc{margin-top:-10px;margin-bottom:50px;} /* Default-Spacer 50 */
.module--hero.spacer--0 + .stm-bc{margin-top:40px;margin-bottom:0;}
.module--hero.spacer--25 + .stm-bc{margin-top:40px;margin-bottom:25px;}
.module--hero.spacer--50 + .stm-bc{margin-top:-10px;margin-bottom:50px;}
.module--hero.spacer--75 + .stm-bc{margin-top:-35px;margin-bottom:75px;}
.module--hero.spacer--100 + .stm-bc{margin-top:-60px;margin-bottom:100px;}
.module--hero.spacer--150 + .stm-bc{margin-top:-110px;margin-bottom:150px;}
.module--hero.spacer--200 + .stm-bc{margin-top:-160px;margin-bottom:200px;}
.module--hero.spacer--250 + .stm-bc{margin-top:-210px;margin-bottom:250px;}
/* 28.08. (Maik): Breadcrumb-Abstand nach oben MOBIL um 60%% verringert (40px sichtbar -> 16px).
   30.08. (Maik): "gerne nochmal um 40%%" -> 16px sichtbar -> ~10px (je Variante -6px mehr Zug);
   Basisfall 12.8px -> 7.7px, Termin-Single 11.2px -> 6.7px. Desktop weiterhin unveraendert.
   01.09. (Johann-Screenshot, Fenster 901-1000px): Breakpoint von 900 auf 1000 - die Seite zeigt ab
   <=1000 das MOBILE Layout (Burger/zentriertes Logo), der Breadcrumb-Block schaltete aber erst bei
   <=900 um -> in der Zone dazwischen galten noch die Desktop-40px. Gleiche Lehre wie beim
   Quicknav-JS: Breakpoints IMMER an der Media-Query des sichtbaren Layouts ausrichten. */
@media(max-width:1000px){
  .stm-bc{margin-top:.48rem;padding-top:0;} /* Basisfall ohne Hero davor: 2rem -> 0.48rem. 01.09. (Johann, 48px-Messung): .stm-bc ist AUCH .module und erbt 32px padding-top IM Element - alle bisherigen Runden haben nur den Margin-Anteil verkleinert, der Text sass trotzdem 32px tiefer als die gemessene Boxkante. Mobil padding-top:0 -> sichtbarer Abstand = exakt die kalibrierten Margin-Werte (10px bei Heros). */
  .module--hero + .stm-bc{margin-top:-40px;}
  .module--hero.spacer--0 + .stm-bc{margin-top:10px;}
  .module--hero.spacer--25 + .stm-bc{margin-top:-15px;} /* 30.08.: Kalibrierfehler der 28.08.-Runde behoben - Hero traegt hier selbst 25px margin-bottom, die beim Margin-Collapse gewannen (sichtbar waren 25 statt 16); -15 ergibt die einheitlichen 10px */
  .module--hero.spacer--50 + .stm-bc{margin-top:-40px;}
  .module--hero.spacer--75 + .stm-bc{margin-top:-65px;}
  .module--hero.spacer--100 + .stm-bc{margin-top:-90px;}
  .module--hero.spacer--150 + .stm-bc{margin-top:-140px;}
  .module--hero.spacer--200 + .stm-bc{margin-top:-190px;}
  .module--hero.spacer--250 + .stm-bc{margin-top:-240px;}
  .module--sgt .stm-bc{margin-top:.42rem;} /* Termin-Single: 1.75rem -> 0.42rem */
}
.stm-bc__item:not(:last-child)::after{content:"";width:20px;height:20px;flex:0 0 auto;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/auto 9px;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/auto 9px;}

.nnews__main.stm-cards-carousel,.nkar__main{--nkarbleed:calc(var(--st-gutter,60px) + max(0px,(100vw - 1320px)/2));margin-right:calc(-1*var(--nkarbleed));}

/* Pfeile: schlicht, blau, disabled grau (statt Kreis-Buttons) */
.nkar .stm-cards__arrows,.module--karussell .stm-cards__arrows{gap:1rem;}
.nkar .stm-cards__arrow,.module--karussell .stm-cards__arrow{width:auto;height:auto;border:0;border-radius:0;background:none;font-size:1.5rem;line-height:1;color:var(--st-color-primary,#002F5D);padding:.15rem .2rem;}
.nkar .stm-cards__arrow:hover,.module--karussell .stm-cards__arrow:hover{background:none;color:var(--st-color-accent,#B51F29);}
.nkar .stm-cards__arrow[disabled],.module--karussell .stm-cards__arrow[disabled]{opacity:1;color:var(--st-neutral-300,#D1D1D1);}
.nkar .stm-cards__arrow[disabled]:hover,.module--karussell .stm-cards__arrow[disabled]:hover{background:none;color:var(--st-neutral-300,#D1D1D1);}
/* Badge-Farben nach Kategorie (Figma: Gottesdienste rot, Musik blau, Vortrag gold) */
.nkar-card__badge{background:var(--st-color-primary,#002F5D);}
.nkar-card__badge.badge--gottesdienste{background:var(--st-color-accent,#B51F29);}
.nkar-card__badge.badge--musik{background:var(--st-color-primary,#002F5D);}
.nkar-card__badge.badge--vortrag{background:var(--st-color-gold,#D1AC57);}


/* ============ Teams-Rework nach Figma (2026-07-27) ============ */
/* Karte: Foto quadratisch + Credit-Overlay, Name VERSAL blau, Funktion rot (Musik: blau) */
.stm-team-card__media{position:relative;overflow:hidden;aspect-ratio:424/280;margin-bottom:.625rem;} /* 02.09. (Maik): Abstand Bild -> Name halbiert (1.25 -> .625rem) */
.stm-cards--team .stm-team-card__media{aspect-ratio:312/280;}
.stm-team-grid--minimal .stm-team-card__media{aspect-ratio:424/380;}
.stm-team-card__body{gap:0;}
.stm-team-card__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-team-card__credit{position:absolute;left:0;bottom:0;background:rgba(34,34,34,.7);color:#fff;font-size:.62rem;padding:.2rem .45rem;letter-spacing:.02em;}
.stm-team-card__name{font-family:var(--st-font-body,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.1;color:var(--st-color-primary,#002F5D);margin:0 0 .45rem;} /* 01.08.: Meta Pro (Body) statt Headline-Schnitt - Figma */ /* 02.09. (Maik): Name = H5-Groesse (20px, passte schon); Abstand Name -> Beschreibung halbiert (.875 -> .45rem) */
.stm-team-card__role{color:var(--st-color-accent,#B51F29);font-weight:400;font-size:1.25rem;line-height:1.5;margin:0;} /* 02.09. (Maik): Beschreibung = Standard-Copy (20/30, Regular) */
.stm-cards--team .stm-team-card__role,.stm-team-grid .stm-team-card__role{line-height:1.125;} /* 09.09. (Maik, Karussell mit Personen): Zeilenabstand der Funktion um 1/4 reduziert (30 -> 22.5px), Desktop+Mobile, Karussell UND Kachelansicht; das Personen-Kontaktformular (.stm-team-form) bleibt bewusst unangetastet */
.is-musik .stm-team-card__role{color:var(--st-color-primary,#002F5D);}
/* Kontaktblock */
.stm-team-card__contact{margin:.875rem 0 0;} /* 02.09. (Maik): Blockabstand halbiert (1.75 -> .875rem) */
.stm-team-card__contact-head{font-family:var(--st-font-body,inherit);font-weight:700;color:var(--st-color-primary,#002F5D);margin:0 0 .375rem;font-size:1.25rem;line-height:1.1;} /* 02.09.: halbiert */
.stm-team-card__contact-line{margin:0;font-size:1.25rem;color:var(--st-color-ink,#222);line-height:1.5;} /* 01.08.: Zeilen laufen durch (Figma lh30, kein Extra-Abstand) */
.stm-team-card__contact-line a{color:inherit;text-decoration:none;}
.stm-team-card__iconlink{margin:.375rem 0 0;font-size:1.25rem;line-height:1.2;} /* 02.09. (Maik): halbiert */
.stm-team-card__iconlink a{display:inline-flex;align-items:center;gap:.375rem;color:var(--st-color-accent,#B51F29);text-decoration:none;font-weight:400;}
.stm-team-card__iconlink a:hover{text-decoration:underline;}
.stm-team-card__iconlink .stm-ic{display:inline-flex;width:20px;height:20px;color:var(--st-color-accent,#B51F29);}
.stm-team-card__iconlink .stm-ic svg{width:20px;height:20px;}
.stm-team-card__more{margin-top:auto;padding-top:.875rem;align-self:flex-start;} /* 02.09. (Maik): Abstand halbiert; Typo/Farbe/Pfeil kommen jetzt von der definierten Komponente "Textlink mit Pfeil (klein)" (btn btn--text btn--sm im Markup) - hier NUR noch Layout */
.stm-team-card__body{flex:1;}
.stm-cards--team .stm-team-card__more{margin-top:.5rem;}
@media(min-width:1001px){
	.stm-cards--team .stm-team-card__text,.stm-cards--team .stm-team-card__contact-line,.stm-cards--team .stm-team-card__contact-head{font-size:1.125rem;line-height:1.625rem;} /* 09.09. (Maik, Karussell mit Personen): NUR Desktop - Kurztext, Kontakt-Zusatz und Adresse auf 18px/26px verkleinert (vorher 20/30) */ /* 09.09. R2 (Maik): auch der "Kontakt"-Zwischentitel auf 18/26 (bleibt bold); E-Mail-/Website-Links bleiben 20px */
}
.stm-team-grid--3 .stm-team-card__text,.stm-team-grid--3 .stm-team-card__contact-line,.stm-team-grid--3 .stm-team-card__contact-head,.stm-team-grid--4 .stm-team-card__text,.stm-team-grid--4 .stm-team-card__contact-line,.stm-team-grid--4 .stm-team-card__contact-head{font-size:1.125rem;line-height:1.625rem;} /* 09.09. (Maik): dito fuer die 3- und 4-spaltige Kachelansicht (variantenbasiert, gilt auch mobil); 2-Spalter bleibt bei 20/30 */ /* 09.09. R2 (Maik): inkl. "Kontakt"-Zwischentitel */
/* Raster minimal: zentrierte Namenszeile */
.stm-team-grid--minimal .stm-team-card--minimal{text-align:center;}
.stm-team-card__caption{margin:0;font-family:var(--st-font-body,inherit);font-weight:700;color:var(--st-color-primary,#002F5D);font-size:1.25rem;} /* 01.08.: dichter ans Bild */
.stm-team-grid--minimal .stm-team-card__media{margin-bottom:.625rem;}
/* Team-Karussell: Anschnitt wie Figma (~4,3 Karten) */
@media(min-width:700px){ .stm-cards--team{grid-auto-columns:calc((100% - 4*var(--st-space-m,2rem))/4.3);} }
.stm-team-carousel .stm-cards__arrows{gap:1rem;}
.stm-team-carousel .stm-cards__arrow{width:auto;height:auto;border:0;border-radius:0;background:none;font-size:1.5rem;line-height:1;color:var(--st-color-primary,#002F5D);padding:.15rem .2rem;}
.stm-team-carousel .stm-cards__arrow:hover{background:none;color:var(--st-color-accent,#B51F29);}
.stm-team-carousel .stm-cards__arrow[disabled]{opacity:1;color:var(--st-neutral-300,#D1D1D1);}

/* ============================================================
   Flipbook 2.0 (27.07.) – PDF.js + StPageFlip, Controls nach Figma
   ============================================================ */
.stm-flip__dl-top{margin:var(--stm-copy-size,1.25rem) 0 1.75rem;} /* 10.09. (Johann, "Zeilenabstand Flipbook Download"): oben derselbe Abstand wie zwischen den <p> der Copy (20px = 1em der Copy-Groesse; der letzte Absatz traegt margin-bottom 0, der Link klebte direkt darunter) */
/* 16.09. (Kunde, "Flipbook"): Link ist jetzt die echte Komponente btn btn--text btn--sm (Markup) -
   die frueheren Nachbau-Farbregeln (05.09.) sind raus, sonst wuerden sie die Komponente per
   hoeherer Spezifitaet (.stm-flip__dl-top a) ueberstimmen. */
.stm-flip{position:relative;max-width:1160px;margin:0 auto;outline:none;}
.stm-flip__scroll{overflow:hidden;}
.stm-flip__scroll.is-zoomed{overflow:auto;max-height:80vh;}
.stm-flip__stagewrap{position:relative;padding:1.5rem 4rem 2rem;}
.stm-flip__book{margin:0 auto;transition:transform .25s ease;}
.stm-flip__book .stf__parent{margin:0 auto;}
.stm-flip__book img{box-shadow:0 10px 30px rgba(0,0,0,.18);}
.stm-flip__status{text-align:center;color:var(--st-neutral-500,#767676);padding:3rem 0;}
.stm-flip.is-ready .stm-flip__status{display:none;}

/* Kreis-Pfeile links/rechts */
.stm-flip__arrow{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;padding:0;border:0;border-radius:50%;background-color:transparent;background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20left%20default.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20left%20hover.svg");background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;cursor:pointer;z-index:5;transition:opacity .15s;} /* 16.09. (Kunde, "Flipbook"): gelieferte Assets "Slider Arrow white circle" (36er-viewBox: weisser Kreis + grauer Ring + blauer Pfeil; Hover-Variante = roter Kreis) statt Eigenbau-Kreis mit Inline-SVG */ /* 18.09. (Kunde, "Flipbook: Slider-Pfeile vorladen"): Zwei-Ebenen-Muster wie Paginierung/Timeline/Zoom-Close - Hover-Grafik als geparkte 1px-Zweitebene, laedt beim ersten Paint statt beim ersten Hover -> kein Aufblitzen */
.stm-flip__arrow--next{background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20right%20default.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20right%20hover.svg");}
.stm-flip__arrow--prev:hover,.stm-flip__arrow--prev:active{background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20left%20hover.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20left%20default.svg");}
.stm-flip__arrow--next:hover,.stm-flip__arrow--next:active{background-image:url("../img/icons/Slider%20Arrow%20white%20circle%20right%20hover.svg"),url("../img/icons/Slider%20Arrow%20white%20circle%20right%20default.svg");}
.stm-flip__arrow[disabled]{opacity:.35;cursor:default;pointer-events:none;}
.stm-flip__arrow--prev{left:0;}
.stm-flip__arrow--next{right:0;}

/* Bedienleiste unten */
.stm-flip__bar{display:flex;align-items:center;gap:1.5rem;margin-top:1rem;padding:0 .25rem;}
.stm-flip__tools{display:flex;align-items:center;gap:.9rem;}
.stm-flip__iconbtn{border:0;padding:0;width:26px;height:26px;color:var(--st-color-primary,#002F5D);cursor:pointer;display:inline-flex;background:currentColor;-webkit-mask:no-repeat center/22px 22px;mask:no-repeat center/22px 22px;transition:color .15s;} /* 16.09. (Kunde, "Flipbook"): gelieferte Icons als MASKE - background:currentColor faerbt, die bestehende Hover-Regel macht weiter das Rot #B51F29 */
.stm-flip__iconbtn[data-flip-thumbs]{-webkit-mask-image:url("../img/icons/Icon%20Kachel%20Flipbook.svg");mask-image:url("../img/icons/Icon%20Kachel%20Flipbook.svg");}
.stm-flip__iconbtn[data-flip-zoom]{-webkit-mask-image:url("../img/icons/Icon%20Zoom%20in%20Flipbook.svg");mask-image:url("../img/icons/Icon%20Zoom%20in%20Flipbook.svg");}
.stm-flip__iconbtn[data-flip-fullscreen]{-webkit-mask-image:url("../img/icons/Icon%20Frame%20Flipbook.svg");mask-image:url("../img/icons/Icon%20Frame%20Flipbook.svg");}
.stm-flip__iconbtn--dl{-webkit-mask-image:url("../img/icons/Icon%20Download%20Flipbook.svg");mask-image:url("../img/icons/Icon%20Download%20Flipbook.svg");}
.stm-flip__iconbtn:hover{color:var(--st-color-accent,#B51F29);}

/* Fortschrittsbalken */
.stm-flip__range{flex:1;appearance:none;-webkit-appearance:none;height:4px;border-radius:2px;background:var(--st-neutral-200,#E3E8EE);cursor:pointer;}
.stm-flip__range::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--st-color-primary,#002F5D);border:0;}
.stm-flip__range::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--st-color-primary,#002F5D);border:0;}
.stm-flip__range::-moz-range-progress{background:var(--st-color-primary,#002F5D);height:4px;border-radius:2px;}

/* Thumbnail-Overlay */
.stm-flip__thumbs{position:absolute;inset:0;z-index:10;background:rgba(255,255,255,.96);overflow:auto;padding:2rem;}
.stm-flip__thumbgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:1rem;}
.stm-flip__thumb{position:relative;border:1px solid var(--st-neutral-200,#E3E8EE);background:#fff;padding:0;cursor:pointer;}
.stm-flip__thumb img{display:block;width:100%;height:auto;}
.stm-flip__thumb span{position:absolute;right:.35rem;bottom:.35rem;font-size:.75rem;color:#fff;background:var(--st-color-primary,#002F5D);padding:.05rem .4rem;border-radius:2px;}
.stm-flip__thumb:hover{border-color:var(--st-color-primary,#002F5D);}

/* Vollbild */
.stm-flip.is-fullscreen{background:#fff;padding:2rem;display:flex;flex-direction:column;justify-content:center;}
.stm-flip.is-fullscreen .stm-flip__stagewrap{padding-top:0;}

/* Mobil */
@media (max-width:767px){
	.stm-flip__stagewrap{padding:1rem 2.4rem 1.5rem;}
	.stm-flip__arrow{width:36px;height:36px;}
	.stm-flip__bar{gap:1rem;}
}

/* ============================================================
   News-Rework (27.07.) – „News aus dem Michel" / „Neuigkeiten"
   ============================================================ */
/* Karte: Datum-Badge blau, Bild-Credit-Overlay, fetter Mehr-erfahren-Link */
.nkar-card__date{background:var(--st-color-primary,#002F5D);}
.nkar-card__credit{position:absolute;left:0;bottom:0;background:rgba(34,34,34,.55);color:#fff;font-size:.62rem;padding:.15rem .45rem;line-height:1.2;}
/* 05.09.: fw-700-Override raus - Text-Link-Komponente ist MEDIUM (Basisregel oben) */

/* Karussell-Kopf: Topline/Headline links · Alle-News-Button + Pfeile rechts */
.nnews__head{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:2.5rem;} /* 01.08.: Controls buendig zur Headline-Unterkante */
.nnews__headings{min-width:0;}
.nnews__headline{margin:0;}
.nnews__actions{display:flex;align-items:center;gap:1.75rem;flex:0 0 auto;}
.nnews__main{min-width:0;position:relative;}
.nnews__head .stm-cards__controls--top{position:static;margin:0;} /* 01.08.: Controls sitzen jetzt IN der Kopfzeile */
.nnews__main > .nnews__head{margin-right:var(--nkarbleed,0px);} /* 01.08.: Kopfzeile bleibt im Satzspiegel - der Anschnitt-Bleed gilt nur den Karten */
.nnews__head .stm-cards__arrows{align-items:flex-end;} /* Pfeile (44px) buendig zur Button-/Headline-Unterkante */
.stm-nnews .stm-cards__arrows{gap:1.1rem;}
.stm-nnews .stm-cards__arrow{width:auto;height:auto;border:0;border-radius:0;background:none;font-size:1.4rem;line-height:1;color:var(--st-color-primary,#002F5D);padding:.15rem .2rem;}
.stm-nnews .stm-cards__arrow:hover{background:none;color:var(--st-color-accent,#B51F29);}
.stm-nnews .stm-cards__arrow[disabled]{opacity:1;color:var(--st-color-lightblue,#CAD9E0);}
.stm-nnews .stm-cards__arrow[disabled]:hover{background:none;color:var(--st-color-lightblue,#CAD9E0);}
@media(min-width:700px){ .stm-nnews .stm-cards{grid-auto-columns:calc((100% - 3*1rem)/4);padding-right:var(--nkarbleed,0px);} } /* 07.09. (Maik): padding-right = Anschnitt-Bleed -> der Content-Bereich der Liste IST der Satzspiegel: Kacheln exakt Standard-4-Spalter-Breite UND am Scroll-Ende schliesst die LETZTE Kachel buendig mit dem Satzspiegel ab (vorher lief sie bis zur Bleed-Kante) */
@media(max-width:900px){
	.nnews__head{flex-direction:column;align-items:flex-start;gap:1rem;}
	.nnews__main .stm-cards__controls--top{position:static;display:flex;justify-content:flex-end;margin-bottom:.5rem;}
	.stm-nnews .stm-cards{grid-auto-columns:calc((100% - 1.4*1rem)/2.4);} /* 07.09.: Bleed steckt jetzt im padding-right (Content-Bereich = Satzspiegel), Gap 1rem */
}
@media(max-width:600px){ .stm-nnews .stm-cards{grid-auto-columns:calc((100% - .3*1rem)/1.3);} } /* 07.09.: dito; unter 700 uebersteuert ohnehin der Standard-Mobile-Block weiter unten (100%) */

/* 07.09. (Maik, "Modul Karussell News"): Angleich an den Karussell-Standard.
   Desktop: Dots zentriert im SATZSPIEGEL (Container laeuft inkl. Bleed - margin-right gleicht
   aus), Bild -> Text -1/3 (13.6 -> 9.1px: Titel-Margin .55 -> .27rem bei .3rem Flex-Gap),
   Text -> Text-Link halbiert (Struktur-Abstand 10.4 -> 4.8px: padding-top des Links raus;
   die Links bleiben ueber alle Karten auf einer Hoehe, gemessen an der hoechsten Karte).
   Mobile (<=700): exakt der Standard-Karussell-Aufbau - Einspalter-Kachel in Satzspiegelbreite
   ohne Anschnitt, Kopf als Spalte (HL -> CTA -> Pfeile je 1.4rem, Pfeile links/rechts buendig
   ueber der Kachel, 1rem zur Kachel), Dots 1.35rem unter der Kachel + zentriert,
   Bild -> Text HALBIERT (13.6 -> 6.8px). */
.stm-nnews .stm-cards__dots{margin-right:var(--nkarbleed,0px);}
.stm-nnews .nkar-card__title,.module--newsblog .nkar-card__title{margin-top:.27rem;} /* 09.09. (Maik, Karussell News): angepasster Bild->Text-Abstand gilt auch fuer die News-KACHEL-Ansicht (.module--newsblog Raster; Basis .55rem bleibt fuer die Veranstaltungs-Karten) */
.stm-nnews .nkar-card__go,.module--newsblog .nkar-card__go{padding-top:0;} /* 09.09. (Maik, Karussell News): angepasster Text->Text-Link-Abstand auch in der Kachel-Ansicht */
@media(max-width:700px){
	.nnews__main.stm-cards-carousel{--nkarbleed:0px;margin-right:0;}
	.stm-nnews .stm-cards{grid-auto-columns:100%;gap:1rem;padding-right:0;}
	.nnews__head{flex-direction:column;align-items:flex-start;gap:1.4rem;margin-bottom:1rem;}
	.nnews__main .stm-cards__controls--top{display:block;width:100%;margin:0;}
	.stm-nnews .stm-cards__arrows{display:grid;grid-template-columns:1fr auto;gap:1.4rem;width:100%;align-items:center;}
	.stm-nnews .stm-cards__arrows .btn{grid-column:1 / -1;justify-self:start;}
	.stm-nnews .stm-cards__arrows .stm-sarr--prev{justify-self:start;}
	.stm-nnews .stm-cards__arrows .stm-cards__arrow[data-dir="next"]{justify-self:end;}
	.stm-nnews .stm-cards__dots{margin-top:1.35rem;}
	.stm-nnews .nkar-card__title{margin-top:.125rem;}
}

/* Raster „Neuigkeiten" – 4-spaltig, gleiche Karten */
.nnews__gridhead{margin-bottom:2.5rem;}
.nnews-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2.25rem 1.5rem;}
.nnews-grid__item{min-width:0;}
@media(max-width:1000px){ .nnews-grid{grid-template-columns:repeat(2,minmax(0,1fr));} }
@media(max-width:560px){ .nnews-grid{grid-template-columns:1fr;} }

/* Google Map – Dummy-Kartenbild nach Figma (27.07.) */
.stm-map{margin:0;max-width:1320px;}
.stm-map__img{display:block;width:100%;height:auto;}

/* 404-Seite „Heiliger Bimbam" (27.07.) */
.stm-404{display:grid;grid-template-columns:1.1fr .9fr;gap:3rem;align-items:center;padding-top:2.5rem;padding-bottom:3.5rem;}
.stm-404__text{min-width:0;}
.stm-404__media{display:flex;justify-content:center;}
.stm-404__media img{width:auto;max-width:100%;max-height:520px;}
.stm-404__search{display:flex;align-items:center;gap:1.1rem;max-width:340px;margin-top:1.5rem;}
.stm-404__search input{flex:1;min-width:0;border:0;border-bottom:1px solid var(--st-neutral-300,#D1D1D1);border-radius:0;padding:.45rem 0;font:inherit;color:var(--st-color-ink,#222);background:none;outline:none;appearance:none;-webkit-appearance:none;}
.stm-404__search input::placeholder{color:var(--st-neutral-500,#767676);}
.stm-404__search input:focus{border-bottom-color:var(--st-color-primary,#002F5D);}
/* 15.09. (Stefanie, "404 Seite"): Icons analog Hauptsuche - exakt das Rezept der ASP-Overrides
   (~2532ff): Lupe = Asset "Suche Lupe.svg" in Kreisgroesse 40 (die viewBox enthaelt den Bounds-Kreis),
   Hover-/Pressed-State = Kreisfarbe #CAD9E0 aus "Suche Lupe Hover.svg"; Close = "Close klein.svg" 34px,
   erscheint per JS (404.php) nur bei Eingabe. Das native Such-X des Browsers ist abgeschaltet, sonst
   staenden zwei Close-Icons nebeneinander. opacity:1 auf Hover schlaegt die globale
   button:hover{opacity:.92}-Regel aus main.css (stm-hn-Muster). */
.stm-404__search .stm-404__go{flex:0 0 auto;width:40px;height:40px;padding:0;border:0;border-radius:50%;background:url("../img/icons/Suche%20Lupe.svg") no-repeat center/40px 40px;cursor:pointer;}
.stm-404__search .stm-404__go:hover,.stm-404__search .stm-404__go:focus-visible,.stm-404__search .stm-404__go:active{background-color:#CAD9E0;opacity:1;}
/* 16.09. R2 (Stefanie, Video): Close-Icon sass als Flex-Nachbar NEBEN dem Feld und verkuerzte den
   Suchschlitz ("riesig, sitzt nicht auf dem Suchschlitz"). In der Hauptsuche steckt das proclose IN
   der gefuellten 44px-Bar - beim Unterstrich-Feld hier ist das Aequivalent ein OVERLAY am rechten
   Feldende: absolut positioniert (nimmt keine Flexbreite weg), 24px-Icon in 28px-Klickflaeche,
   vertikal auf der Feldmitte; das Feld bekommt rechts Padding, damit Text nicht unters X laeuft.
   right = 40px Lupe + 1.1rem Gap + 4px Einzug. */
.stm-404__search{position:relative;}
.stm-404__search input{padding-right:34px;}
.stm-404__search .stm-404__clear{position:absolute;right:calc(40px + 1.1rem + 4px);top:50%;transform:translateY(-50%);width:28px;height:28px;padding:0;border:0;background:url("../img/icons/Close%20klein.svg") no-repeat center/38px 38px;cursor:pointer;} /* 17.09. (Maik, "arg winzig"): KORREKTUR der 13px vom 16.09. - "Close klein.svg" traegt INTERNES PADDING, die X-Glyphe fuellt nur 33.8% der SVG-Flaeche (canvas-vermessen). 13px background-size ergab eine 4.4px-Glyphe; fuer die von Figma geforderten 13px GLYPHE muss die Flaeche 13/0.338 = 38px sein. Die 38px ragen seitlich transparent ueber die 28px-Klickflaeche - die zentrierte 13px-Glyphe bleibt vollstaendig sichtbar. */
.stm-404__search .stm-404__clear:hover{opacity:1;}
.stm-404__search .stm-404__clear[hidden]{display:none;} /* explizit: irgendeine globale button-Displayregel (z.B. altes display:inline-flex) wuerde das UA-[hidden] sonst ueberstimmen - im Injektions-Test live passiert */
.stm-404__search input::-webkit-search-cancel-button,.stm-404__search input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;}
@media(max-width:800px){
	.stm-404{grid-template-columns:1fr;gap:2rem;}
	.stm-404__media{order:-1;}
	.stm-404__media img{max-height:300px;}
}

/* ============================================================
   Slideshow-Rework (27.07.) – 5 Galerien nach Figma
   ============================================================ */
/* Kopf: Headline links, Pfeile rechts unten (Galerie 1) */
.stm-ss__head{margin-bottom:1.25rem;} /* 01.09. (Maik): Abstand Copy -> Slideshow 20px (Pfeile sitzen mit drin) */ /* 02.09. R2: bleibt 20px = HAELFTE des neuen HL-Copy-Abstands (Maiks Regel: Copy->Slideshow = halber HL-Copy-Abstand) */
.stm-ss__head--arrows{display:block;} /* 05.09. (Maik, Galerie 1): Pfeile auch DESKTOP aus der Kopfzeile geloest - sie sollen NICHT unten buendig mit Copy/HL stehen, sondern "mit der Slideshow zusammen nach unten rutschen": eigene rechtsbuendige Reihe mit festem Abstand zur Slideshow (war flex + align-items:flex-end an der Copy-Unterkante) */
.stm-ss__copy{margin-top:2.5rem;max-width:70ch;} /* 01.09. (Maik): 8 -> 20px */ /* 02.09. R2 (Maik): nochmal VERDOPPELT (20 -> 40px), Desktop only - Mobile-Block unten behaelt 1rem */
.stm-ss__arrows{display:flex;gap:1.1rem;flex:0 0 auto;justify-content:flex-end;margin-top:1.25rem;} /* 05.09. (Maik): Desktop rechtsbuendig unter der Copy, 20px Abstand nach oben; nach unten wirken die 20px der .stm-ss__head-margin -> Pfeile haengen fest an der Slideshow */
.stm-ss__arrow{background:none;border:0;padding:.15rem .2rem;color:var(--st-color-primary,#002F5D);cursor:pointer;display:inline-flex;}
.stm-ss__arrow svg{max-width:none;flex:0 0 auto;}
.stm-ss__arrow:hover{color:var(--st-color-accent,#B51F29);}
.stm-ss__arrow[disabled]{color:var(--st-color-lightblue,#CAD9E0);cursor:default;}

/* Punkte: aktiv = blaue Pille */
.stm-ss__dots{display:flex;justify-content:center;align-items:center;gap:.5rem;margin-top:1.1rem;}
.stm-ss__dot{width:8px;height:8px;border-radius:4px;border:0;padding:0;background:var(--st-neutral-300,#D1D1D1);cursor:pointer;transition:all .2s;}
.stm-ss__dot.is-active{width:22px;background:var(--st-color-primary,#002F5D);}

/* Bild-Credit-Overlay (unten links auf dem Bild) */
.stm-ss__imgcredit{position:absolute;left:0;bottom:0;background:rgba(34,34,34,.55);color:#fff;font-size:.62rem;padding:.15rem .45rem;line-height:1.2;margin:0;}

/* Zweifarbige Labels (VERSAL, „|“ = Zeile 2 rot) */
.stm-ss__l1{display:block;color:var(--st-color-primary,#002F5D);}
.stm-ss__l2{display:block;color:var(--st-color-accent,#B51F29);}

/* ---------- Galerie 1: Hauptbild + Thumbs/Texte ---------- */
.stm-g1__stage{position:relative;aspect-ratio:16/9;overflow:hidden;background:var(--st-color-lightblue,#CAD9E0);}
.stm-g1__slide{position:absolute;inset:0;margin:0;opacity:0;transition:opacity .35s;}
/* 01.08.: Bilduebergang "Bewegen" = echtes Schieben ohne Fade (Referenz BSH-Hero):
   neue Folie schiebt komplett herein, die alte gleichzeitig hinaus. */
.stm-g1[data-transition="slide"] .stm-g1__slide{transition:none;}
.stm-g1__slide.is-slide-r{animation:stmG1InR .5s ease both;opacity:1;z-index:2;}
.stm-g1__slide.is-slide-l{animation:stmG1InL .5s ease both;opacity:1;z-index:2;}
.stm-g1__slide.is-out-l{animation:stmG1OutL .5s ease both;opacity:1;z-index:1;}
.stm-g1__slide.is-out-r{animation:stmG1OutR .5s ease both;opacity:1;z-index:1;}
@keyframes stmG1InR{from{transform:translateX(100%);}to{transform:translateX(0);}}
@keyframes stmG1InL{from{transform:translateX(-100%);}to{transform:translateX(0);}}
@keyframes stmG1OutL{from{transform:translateX(0);}to{transform:translateX(-100%);}}
@keyframes stmG1OutR{from{transform:translateX(0);}to{transform:translateX(100%);}}
.stm-g1__slide.is-active{opacity:1;}
.stm-g1__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-g1__thumbnav{list-style:none;display:flex;gap:6px;margin:6px 0 0;padding:0;}
.stm-g1__thumbnav li{flex:1;min-width:0;}
.stm-g1__thumb{display:block;width:100%;aspect-ratio:16/10;overflow:hidden;border:0;padding:0;cursor:pointer;opacity:.85;background:none;position:relative;}
.stm-g1__thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-g1__thumb .stm-imgcredit,.stm-g1__thumb .stm-ss__imgcredit{display:none;} /* 01.09. (Maik): auf den kleinen Thumbnails keine Copyrights (kommen aus dem globalen Bild-Credit-Filter) */
/* 01.08.: blaue Aktiv-Linie als Overlay-Ebene - die alte outline lag mit -2px INNERHALB der Box und wurde vom Bild uebermalt */
.stm-g1__thumb::after{content:"";position:absolute;inset:0;border:2px solid transparent;pointer-events:none;}
.stm-g1__thumb:hover,.stm-g1__thumb.is-active{opacity:1;}
.stm-g1__thumb:hover::after,.stm-g1__thumb.is-active::after{border-color:var(--st-color-primary,#002F5D);}
.stm-g1__textnav{list-style:none;display:flex;justify-content:center;flex-wrap:wrap;gap:.5rem 2rem;margin:1.25rem 0 0;padding:0 20px;} /* 10.08.: zentriert unter dem Bild (Asana-Ticket) */ /* 07.09. (Maik, "Galerie 1 mit Texten"): 20px Seitenpadding (war 4px), Abstand Bild -> Nav bleibt 20px; max-height/overflow-y RAUS - die Nav scrollt nie mehr und wird nicht mehr angeschnitten (mobil war "KANZEL" in Zeile 3 geclippt: 102px Inhalt in 88px Box), sie bricht einfach um und waechst */
.stm-g1__navtext{background:none;border:0;padding:0;cursor:pointer;font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.04em;font-size:1.05rem;color:var(--st-color-primary,#002F5D);} /* 07.09. (Maik): Schriftgroesse = Topline (module__kicker 1.05rem, live gemessen 16.8px Desktop UND Mobile - war .85rem) */
.stm-g1__navtext:hover,.stm-g1__navtext.is-active{color:var(--st-color-accent,#B51F29);}

/* ---------- Galerie 2: Karten-Raster ---------- */
.stm-g2{display:grid;gap:2.25rem 1.75rem;}
.stm-g2--2{grid-template-columns:repeat(2,minmax(0,1fr));}
.stm-g2--3{grid-template-columns:repeat(3,minmax(0,1fr));}
.stm-g2--4{grid-template-columns:repeat(4,minmax(0,1fr));}
.stm-g2__open{display:flex;flex-direction:column;align-items:flex-start;gap:.45rem;background:none;border:0;padding:0;cursor:pointer;text-align:left;width:100%;height:100%;font:inherit;}
.stm-g2__card{display:flex;} .stm-g2__card>.stm-g2__open{flex:1;}
.stm-g2__media{display:block;width:100%;aspect-ratio:4/3;overflow:hidden;background:var(--st-color-lightblue,#CAD9E0);}
.stm-g2__media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s;}
.stm-g2__open:hover .stm-g2__media img{transform:scale(1.04);}
.stm-g2__title{font-family:var(--st-font-body,inherit);font-weight:700;text-transform:uppercase;letter-spacing:.02em;font-size:1.25rem;line-height:1.1;margin-top:.275rem;color:var(--st-color-primary,#002F5D);} /* 14.09. (Kunde, Anhang "H5" + "Abstand halbieren"): Name exakt wie .stm-team-card__name (Meta Pro Body, H5-Groesse 20px, lh 1.1, ls .02em) statt Headline-Schnitt 28px; Abstand Bild->Name HALBIERT: 23.2px (gap .45rem + margin 1rem) -> 11.6px (gap .45rem + margin .275rem), gemessen. */
.stm-g2__title .stm-ss__l1,.stm-g2__title .stm-ss__l2{display:inline;}
.stm-g2__teaser{color:var(--st-color-ink,#222);font-size:1.25rem;line-height:1.5;}
/* 14.09. (Kunde, Anhang "Korrekte Text-Links einsetzen"): "Mehr erfahren" ist jetzt die Komponente
   "Textlink mit Pfeil (klein)" (btn btn--text btn--sm im Markup, slideshow.php) wie in den
   Team-Kacheln - hier NUR noch Layout; Karten-Hover/Active steuern die Komponenten-States samt
   Pfeil-Morph an (die ganze Karte ist der Klickbereich, Muster wie .nkar-card__go). */
.stm-g2__more{margin-top:auto;padding-top:.6rem;}
.stm-g2__open:hover .stm-g2__more,.stm-g2__open:focus-visible .stm-g2__more{color:var(--st-color-secondary,#034B91);}
.stm-g2__open:active .stm-g2__more{color:var(--st-color-primary,#002F5D);}
.stm-g2__open:hover .stm-g2__more::after,.stm-g2__open:focus-visible .stm-g2__more::after,.stm-g2__open:active .stm-g2__more::after{width:1.28em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}

/* ---------- Galerie 3: justified Raster ---------- */
/* 31.07.: gleichmaessiges Raster (Kundenwunsch: kein Flattern unten/rechts) */
.stm-g3{display:grid;gap:14px;grid-template-columns:repeat(var(--g3cols,3),minmax(0,1fr));}
.stm-g3__item{margin:0;}
.stm-g3__btn{position:relative;display:block;width:100%;border:0;padding:0;background:none;cursor:pointer;overflow:hidden;}
.stm-g3__img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;display:block;}
.stm-g3__item.no-nums .stm-g3__file{display:none;}
.stm-g3__file{position:absolute;top:.4rem;right:.55rem;color:#fff;font-size:.7rem;text-shadow:0 1px 3px rgba(0,0,0,.55);opacity:0;transition:opacity .15s;}
.stm-g3__btn:hover .stm-g3__file{opacity:1;}
.stm-g3__copyright{position:absolute;left:0;bottom:0;background:rgba(34,34,34,.55);color:#fff;font-size:.62rem;padding:.15rem .45rem;}
/* 01.08.: Justified-Raster (JS setzt Position/Groesse; Bilder behalten ihr Seitenverhaeltnis) */
.stm-g3.is-justified{display:block;position:relative;}
/* 02.08.: Anker - sanftes Scrollen + Ziel unterhalb des sticky Headers */
/* 14.10. R109 (Kunde, "Ankerlinks: Sprungmarke + 100px, Content nicht hinterm Menue"):
   (1) Versatz = Headerhoehe + 100px Luft (Desktop-Header fix 137px -> 237; mobil 80 -> 180).
       Die alten 140px lagen nur 3px unter der Headerkante, gefuehlt "hinterm Menue".
   (2) Gilt jetzt fuer ALLE id-Ziele ([id]), nicht nur .module/.stm-bc - auch Anker im
       Fliesstext (WYSIWYG) landen damit frei. scroll-margin wirkt nur bei Anker-Navigation/
       scrollIntoView, nie aufs Layout. Die Paginierungs-Anker #stm-liste/#stm-termine
       behalten ihre Maik-kalibrierten knapperen Werte (ID-Selektor schlaegt [id]). */
html{scroll-behavior:smooth;}
[id]{scroll-margin-top:237px;}
@media(max-width:1000px){ [id]{scroll-margin-top:180px;} }
.stm-g3.is-justified .stm-g3__btn{height:100%;}
.stm-g3.is-justified .stm-g3__img{width:100%;height:100%;aspect-ratio:auto;object-fit:cover;}

/* ---------- Overlays (Galerie 2 + 3) ---------- */
body.stm-ov-open{overflow:hidden;}
.stm-ov{position:fixed;inset:0;z-index:9000;display:none;background:rgba(255,255,255,.88);}
.stm-ov.is-open{display:block;}
.stm-ov__frame{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:3.5rem 5rem;}
/* 31.07.: Box-Wrapper - Close/Pfeile/Dots sitzen AN der Lightbox, nicht am Browser-Rand */
.stm-ov__box{position:relative;width:min(880px,92vw);}
.stm-ov__card{position:relative;background:#fff;box-shadow:0 18px 60px rgba(0,0,0,.25);width:100%;max-height:82vh;overflow:auto;}
.stm-ov__close{position:absolute;top:-2.6rem;right:0;z-index:3;background:none;border:0;padding:.3rem;color:var(--st-color-ink,#222);cursor:pointer;display:inline-flex;}
.stm-ov__close svg{max-width:none;}
.stm-ov__close:hover{color:var(--st-color-accent,#B51F29);}
.stm-ov__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:42px;height:42px;min-width:42px;padding:0;box-sizing:border-box;aspect-ratio:1;border-radius:50%;border:1px solid var(--st-neutral-300,#D1D1D1);background:#fff;color:var(--st-color-primary,#002F5D);cursor:pointer;display:flex;align-items:center;justify-content:center;}
.stm-ov__arrow svg{max-width:none;flex:0 0 auto;width:30px;height:30px;} /* 07.09. (Maik, Galerie 3): Pfeil GROESSER im Kreis - 30px-SVG rendert die 20px-Pfeillinie der Figma-Vorlage (40er Kreis/20er Pfeil); war 18px-SVG = 12px-Linie */
.stm-ov__arrow:hover{border-color:var(--st-color-accent,#B51F29);color:var(--st-color-accent,#B51F29);}
.stm-ov__arrow--prev{left:-56px;}
.stm-ov__arrow--next{right:-56px;}
@media(max-width:1260px){ .stm-ov__arrow--prev{left:-14px;} .stm-ov__arrow--next{right:-14px;} }
.stm-ov__dots{position:absolute;left:0;right:0;top:100%;padding-top:1rem;margin:0;}

/* Overlay Galerie 2: Text-Modal */
.stm-ov--g2 .stm-ov__box{width:min(1092px,92vw);}
.stm-ov--g2 .stm-ov__card{padding:2.2rem 2.25rem 2.5rem;}
.stm-ov__g2top{display:grid;grid-template-columns:minmax(0,500px) minmax(0,1fr);gap:2rem;align-items:stretch;} /* 14.09. (Kunde): Bildspalte = fixe 500px-Bildbreite (war 7fr/6fr - liess das Bild schmaler/breiter als 500 laufen) */
.stm-ov__g2head{display:flex;flex-direction:column;justify-content:center;} /* 31.07.: Headline+Subline vertikal zentriert neben dem Bild */
.stm-ov__g2head .stm-ss-intro{margin:0;color:var(--st-color-primary,#002F5D);font-weight:500;font-size:1.25rem;line-height:1.5;}
.stm-ov__g2title .stm-ss__lastline{color:var(--st-color-accent,#B51F29);} /* Standard: letzte Zeile rot */
.stm-ov__g2media{margin:0;}
.stm-ov__g2media img{width:100%;height:auto;display:block;}
.stm-ov__g2caption{color:var(--st-neutral-500,#6D6D6D);font-size:1rem;line-height:1.25;margin-top:.6rem;}
.stm-ov__g2title{font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;font-size:clamp(2rem,4.2vw,3.75rem);line-height:.9;margin:0 0 1rem;hyphens:auto;overflow-wrap:anywhere;color:var(--st-color-primary,#002F5D);}
.stm-ov__g2intro{color:var(--st-color-primary,#002F5D);font-weight:500;font-size:1.25rem;line-height:1.5;}
.stm-ov__g2body{margin-top:1.5rem;font-size:1.25rem;line-height:1.5;color:var(--st-color-ink,#222);}
.stm-ov__g2body p{margin:0 0 .9rem;}
.stm-ov__g2body.is-collapsed{max-height:11.5rem;overflow:hidden;-webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent);}
/* 14.09. (Kunde, Wdh.): "Da sind immer noch die veralteten Mehr-anzeigen-Akkordeons drin" / Anhang
   "Das Korrekte Mehr anzeigen einsetzen". Der 13.09.-Fix hatte auf 1rem verkleinert - das KORREKTE
   Original ist die Weiterlesen-Komponente der Spalten (.col__text-toggle, Zeile ~510): dort erbt
   font-size die COPY-Groesse 1.25rem. Jetzt 1:1 deren Werte (flex + gap .45rem + .stm-chev-Span aus
   stm-slideshow.js statt der Sonder-Chevron-Maske .stm-ov__g2chev - Regeln geloescht); die globale
   Regel ".is-open .stm-chev" dreht das Chevron. KEINE Sonderoptik mehr. */
.stm-ov__g2moretoggle{display:flex;justify-content:center;align-items:center;gap:.45rem;margin:.75rem auto 0;background:none;border:0;padding:0;cursor:pointer;color:var(--st-neutral-400,#888);font-weight:400;font-family:inherit;font-size:1.25rem;text-transform:none;text-decoration:none;}
.stm-ov__g2moretoggle:hover{color:var(--st-color-accent,#B51F29);}
/* 12.08. Ticket "Scrollen bei Text in Galerie" / 13.09. (Kunde, "Modul Galerie 2") UMGEBAUT:
   "Der ganze Content scrollt in der Lightbox - Bild und Headline scrollen mit." Der fruehere
   Flex-Split (g2top fix, nur der Textkoerper scrollte innen) ist raus - die KARTE selbst ist
   der Scroll-Container (Basisregel .stm-ov__card overflow:auto), alles fliesst normal. */
.stm-ov--g2 .stm-ov__card{max-height:calc(100vh - 140px);}
/* 14.09. (Kunde, "Galerie 2", Wdh. aus letztem Kommentar): "den Bildern auch eine FIXE BREITE von
   500px geben und Bilder ueber COVER einbinden" - die 13.09.-Regel hatte stattdessen die HOEHE auf
   500 gekappt (width:auto). Jetzt woertlich: Breite fix 500px (auf schmalen Karten via max-width
   gekappt), Format fest quadratisch 500x500 (aspect-ratio - cover braucht einen festen Rahmen),
   Bildausschnitt per object-fit:cover. */
.stm-ov__g2media img{width:500px;max-width:100%;height:auto;aspect-ratio:1/1;object-fit:cover;}
/* 13.09. (Kunde): Pfeil-Icons wie Galerie 3 - gelieferte Dateien "Slider Arrow white circle *"
   (identische Geometrie wie die Lightbox-Icons der G3; Hover per Bildtausch, vorgeladen). */
.stm-ov--g2 .stm-ov__arrow{--ova:url("../img/icons/Slider%20Arrow%20white%20circle%20right%20default.svg");--ovah:url("../img/icons/Slider%20Arrow%20white%20circle%20right%20hover.svg");border:0;background-color:transparent;background-image:var(--ova),var(--ovah);background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;width:40px;height:40px;min-width:40px;}
.stm-ov--g2 .stm-ov__arrow--prev{--ova:url("../img/icons/Slider%20Arrow%20white%20circle%20left%20default.svg");--ovah:url("../img/icons/Slider%20Arrow%20white%20circle%20left%20hover.svg");}
.stm-ov--g2 .stm-ov__arrow:hover{background-image:var(--ovah),var(--ova);}
.stm-ov--g2 .stm-ov__arrow svg{display:none;}
.stm-ov__g2link{margin-top:1rem;}
/* 14.09. (Kunde, Anhang "Korrekte Text-Links einsetzen"): der Link ist jetzt die Komponente
   "Textlink mit Pfeil (klein)" (btn btn--text btn--sm im Markup, stm-slideshow.js) - die alten
   Sonderregeln (.85rem/700/Hover rot) sind raus, Typo/Farbe/Pfeil/States kommen vom Button-System. */

/* Overlay Galerie 3: Lightbox mit Text-Panel */
.stm-ov--g3 .stm-ov__box{width:min(1096px,calc(100vw - 170px));} /* 08.09. R4 (Stefanie): beim Verkleinern des Browserfensters wird die GALERIE schmaler - 170px Reserve (2x80px Frame-Padding + Luft) deckt die 56px-Pfeil-Aussenlage ab, die Pfeile bleiben IMMER links/rechts AUSSEN (war 92vw -> Pfeile rutschten per 1260er-Regel in die Galerie) */
.stm-ov--g3 .stm-ov__arrow--prev{left:-56px;}
.stm-ov--g3 .stm-ov__arrow--next{right:-56px;} /* schlaegt die generische 1260er-Innen-Regel (-14px) per Spezifitaet 0-3-0 - gilt fuer G3 in JEDER Desktop-Breite; mobil uebersteuert der <=900-Block (spaeter im File, gleiche Spezifitaet) */
.stm-ov--g3 .stm-ov__card{max-width:none;padding:0;overflow:visible;}
/* 08.09. R3 (Stefanie): aeussere Slider-Pfeile der G3-Lightbox = gelieferte Icons "Slider Arrow
   Lightbox" (Kreis+Rand+Pfeil im SVG) statt CSS-Kreis + Inline-SVG; Hover tauscht auf die rote
   Variante (geparkte 1px-Zweitebene laedt sie vor). Mobil dieselben Icons verkleinert (Block unten). */
.stm-ov--g3 .stm-ov__arrow{--ova:url("../img/icons/Slider%20Arrow%20Lightbox%20right%20default.svg");--ovah:url("../img/icons/Slider%20Arrow%20Lightbox%20right%20hover.svg");border:0;background-color:transparent;background-image:var(--ova),var(--ovah);background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;width:40px;height:40px;min-width:40px;}
.stm-ov--g3 .stm-ov__arrow--prev{--ova:url("../img/icons/Slider%20Arrow%20Lightbox%20left%20default.svg");--ovah:url("../img/icons/Slider%20Arrow%20Lightbox%20left%20hover.svg");}
.stm-ov--g3 .stm-ov__arrow:hover{background-image:var(--ovah),var(--ova);}
.stm-ov--g3 .stm-ov__arrow svg{display:none;}
/* 31.07.: feste Box (Hoehe+Breite konstant), Panel liegt ALS OVERLAY ueber dem Bild */
.stm-ov__g3wrap{position:relative;aspect-ratio:1096/580;max-height:82vh;overflow:hidden;}
.stm-ov__g3media{margin:0;position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#fff;}
.stm-ov__g3media img{width:100%;height:100%;display:block;object-fit:cover;}
.stm-ov__g3wrap.is-portrait .stm-ov__g3media{padding:0;}
.stm-ov__g3wrap.is-portrait .stm-ov__g3media img{object-fit:contain;width:auto;max-width:100%;height:100%;} /* Hochformat: zentriert mit Weissraum, Box bleibt gleich gross */
.stm-ov__g3cap{position:absolute;top:.5rem;right:.75rem;z-index:2;margin:0;color:#fff;font-size:.8rem;line-height:1.3;text-shadow:0 1px 3px rgba(0,0,0,.55);max-width:60%;text-align:right;} /* 15.10. R114 (Kunde): Bildbeschriftung in der Lightbox per default oben rechts (Optik wie der Hover-Text .stm-g3__file im Raster); Copyright unten links kommt als globale Plakette (.stm-imgcredit, Basisregel ~2339) direkt mit ins figure */
.stm-ov__g3panel{position:absolute;top:0;right:0;bottom:0;width:min(38%,340px);background:rgba(255,255,255,.85);padding:3.2rem 1.6rem 1.6rem;display:flex;align-items:flex-start;overflow-y:auto;overscroll-behavior:contain;} /* 12.08. Ticket "Scrollen bei Text in Galerie 3": lange Overlaytexte scrollen statt beidseitig abgeschnitten */
.stm-ov__g3panel > *{margin-top:auto;margin-bottom:auto;} /* kurzer Text bleibt vertikal zentriert (align-items:center wuerde bei overflow den Anfang abschneiden) */
/* 08.09. R3 (Stefanie): Ausklapp-Pfeil = geliefertes Icon "Slider Arrow Lightbox" (weisser Kreis mit
   grauem Rand + blauer Pfeil, Hover = roter Pfeil). Ersetzt die CSS-gebaute Kreisflaeche UND die
   Zustands-Sonderregel vom 07.09. (offen = blanker Pfeil) - das Icon gilt jetzt in beiden Zustaenden.
   Hover-Variante als geparkte 1px-Zweitebene vorgeladen (Icon-Links-LEHRE). */
.stm-ov__g3toggle{position:absolute;top:.9rem;right:.9rem;width:40px;height:40px;border:0;border-radius:50%;padding:0;cursor:pointer;color:var(--st-color-primary,#002F5D);background-color:transparent;background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;box-shadow:none;display:inline-flex;align-items:center;justify-content:center;}
/* 08.09. R4 (Stefanie, praezisiert): GESCHLOSSEN (is-panel-hidden) = geliefertes Icon "Slider Arrow
   Lightbox" (Kreis mit Kontur); GEOEFFNET = Pfeil OHNE Hinterlegung (das Inline-SVG, kein Kreis). */
.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3toggle{background-image:url("../img/icons/Slider%20Arrow%20Lightbox%20right%20default.svg"),url("../img/icons/Slider%20Arrow%20Lightbox%20right%20hover.svg");}
.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3toggle:hover{background-image:url("../img/icons/Slider%20Arrow%20Lightbox%20right%20hover.svg"),url("../img/icons/Slider%20Arrow%20Lightbox%20right%20default.svg");}
.stm-ov__g3toggle svg{display:none;} /* 09.09. (Maik): Inline-SVG komplett aus - BEIDE Zustaende nutzen jetzt das gelieferte Icon-Artwork */
.stm-ov__g3toggle{background-image:url("../img/icons/Slider%20Arrow%20Lightbox%20right%20open%20default.svg"),url("../img/icons/Slider%20Arrow%20Lightbox%20right%20open%20hover.svg");} /* 09.09. (Maik, "noch der alte dickere Pfeil"): GEOEFFNET = Pfeil des gelieferten Icons OHNE Kreis (Pfeil-only-Ableitung, gleiche Pfadgeometrie) statt des dicken 30px-Inline-SVGs; Hover vorgeladen */
.stm-ov__g3toggle:hover{background-image:url("../img/icons/Slider%20Arrow%20Lightbox%20right%20open%20hover.svg"),url("../img/icons/Slider%20Arrow%20Lightbox%20right%20open%20default.svg");color:var(--st-color-accent,#B51F29);}
.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3paneltext{display:none;}
.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3panel{background:transparent;width:64px;padding:0;} /* zu: nur runder Linkspfeil bleibt */
.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3toggle{transform:scaleX(-1);}
.stm-ov__g3head{font-family:var(--st-font-head,inherit);font-weight:700;text-transform:uppercase;font-size:1rem;line-height:1.35;margin:0 0 .75rem;} /* 08.09. R4 (Stefanie hatte RECHT - QM-Vorfall): Die HL ist ein <h3> und ERBTE aus der globalen h3-Regel die Token-Zeilenhoehe (~88px bei 16px Schrift!) - der "grosse Abstand" war Leerraum IN der Zeilenbox, ober- und unterhalb des Texts. Der Margin-Fix vom 07.09. (.8 -> .27rem) war deployed, aber optisch wirkungslos; die Kante-zu-Kante-Messung sah nur den Margin. Jetzt: line-height 1.35 (Zeilenbox eng am Text) + margin .75rem -> SICHTBARER Text-zu-Text-Abstand ~15px = 1/3 des Originals (~49px), wie gefordert -2/3. LEHRE: Abstaende zwischen TEXTEN immer per Range-Rects (letzte Textzeile -> erste Textzeile) messen, nie ueber Boxkanten - Zeilenboxen koennen riesig sein. */
.stm-ov__g3paneltext{font-size:.85rem;line-height:1.55;color:var(--st-color-ink,#222);}
.stm-ov__g3paneltext p{margin:0 0 .8rem;}
.stm-ov__g3link a{color:var(--st-color-ink,#222);font-weight:700;font-size:.82rem;text-decoration:none;}
.stm-ov__g3link a:hover{color:var(--st-color-accent,#B51F29);}

/* ---------- Galerie 4: Coverflow ---------- */
/* 08.09. R2 (Stefanie): Legacy-Regel .stm-g4{padding:0 3.5rem} ENTFERNT (Relikt des Ur-Layouts mit
   Pfeilen im Randbereich) - das Padding war Stefanies vermutete "Maskierung": es engte den
   overflow:hidden-Viewport ein, mobil wurde das satzspiegelbreite Zentralbild dadurch beidseitig
   um 56px beschnitten (BU lief "ueber das Bild hinaus", Copyright-Tag links abgeschnitten, kein
   Nachbar-Anschnitt sichtbar) und es steckte in der 56px-Diskrepanz der Initial-Positionierung. */
/* == 05.09. (Maik, "Modul Galerie Nr. 4 Coverflow") - Rework nach Figma 8106:1681 (Desktop)
   + 8106:1522 (Mobile, 360er-Mock). Modell: Track in FULL-BLEED-Breite (margin 50%-50vw),
   alle Slots haben die Breite des Zentralbilds (--g4w), Nachbarn werden per transform:scale(.85)
   verkleinert + opacity .5 (Ticket: 85%%, vertikal zentriert via align-items:center) - Position,
   Groesse und Deckkraft animieren dadurch SMOOTH in einem Rutsch (Track-Translate + Item-Scale).
   Sichtbarer Abstand Nachbar->Zentralbild = --g4gap (Figma: 10px am 360er, ~91px am 1440er,
   waechst responsive) -> Slot-Margin = g4gap - 7.5%% Slotbreite (der Scale-Einzug), am Handy
   dadurch bewusst NEGATIV. Desktop-Zentralbild 1020x600 (Figma 17:10, zentriert), Pfeile
   vertikal bildmittig IN den Luecken zwischen Zentral- und Nachbarbild. */
.module--slideshow:has([data-stm-gal4]){overflow-x:clip;} /* Bleed ohne Seiten-Scrollbalken (Muster newsblog/events) */
/* 08.09. R2 (Stefanie, "Satzspiegel vs. Gesamte Breite"): BASIS = SATZSPIEGEL-Variante - kein
   Full-Bleed mehr (Bleed-Margins raus), die Galerie lebt in der Breite des module__inner (1200px
   Inhalt). Geometrie proportional zum Figma-1440er skaliert und auf den Satzspiegel bezogen:
   Zentralbild 70.9%% der Containerbreite (bei 1200px = 850px, via vw-Formel ausgedrueckt, damit
   die vw-basierte Pfeil-top-Rechnung weiter funktioniert: 70.9vw - 70.9%%*120px Gutter), Gap analog.
   "Gesamte Breite" (Moduleigenschaft width=full) unten: dort ist module__inner bereits full-bleed
   (main.css .module.is-full), die Galerie bekommt die originalen Viewport-Formeln - Bilder laufen
   bis an den Browserrand. Mobile (<920) sind beide Varianten identisch (Block unten). */
.stm-g4{position:relative;--g4w:min(850px,70.9vw - 85.1px);--g4gap:clamp(10px,7.44vw - 25.7px,72.5px);}
@media (min-width:920px){ /* 08.09. R3 (Stefanie): is-full-Sonderwerte NUR DESKTOP - die 0-2-0-Regel schlug sonst auch mobil die 0-1-0-Regeln des <=919-Blocks und "Gesamte Breite" sah mobil anders aus (Zentralbild 70.9vw statt satzspiegelbreit). Mobil sind jetzt BEIDE Breiten-Varianten exakt die Satzspiegel-Darstellung. */
.module.is-full .stm-g4{--g4w:min(1020px,70.9vw);--g4gap:clamp(10px,7.44vw - 16.8px,91px);margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);} /* Bleed-Margins als Garantie bis zum Browserrand - falls ein Wrapper doch Seitenpadding behaelt (live gesehen: 59px Rest); bei bereits voller Breite ergeben sie 0 */
.module--slideshow--coverflow.is-full .stm-ss__head{max-width:1320px;margin-left:auto;margin-right:auto;padding-left:var(--st-gutter,60px);padding-right:var(--st-gutter,60px);} /* Kopf (Topline/HL/Copy) bleibt bei "Gesamte Breite" IM Satzspiegel (Muster der Vertikal-Galerie) */
}
.stm-g4.is-snap .stm-g4__track,.stm-g4.is-snap .stm-g4__item,.stm-g4.is-snap .stm-g4__bar{transition:none !important;} /* 08.09. R2 (Stefanie, Wrap-Blitzen): waehrend des Klon-Falts (JS snap()) sind ALLE Animationen im Modul stumm - auch die BU-/Abdunklungs-Transitions, die das alte Inline-Muster nicht erfasste */
.stm-g4__viewport{overflow:hidden;}
.stm-g4__track{list-style:none;display:flex;align-items:center;margin:0;padding:0;transition:transform .55s cubic-bezier(.33,.1,.25,1);}
.stm-g4__item{flex:0 0 var(--g4w);min-width:0;cursor:pointer;opacity:.5;transform:scale(.85);transition:transform .55s cubic-bezier(.33,.1,.25,1),opacity .55s ease;}
.stm-g4__item:not(:last-child){margin-right:calc(var(--g4gap) - .075*var(--g4w));}
.stm-g4__item.is-active{opacity:1;transform:scale(1);}
.stm-g4__fig{position:relative;margin:0;aspect-ratio:17/10;overflow:hidden;background:var(--st-color-lightblue,#CAD9E0);} /* Figma Desktop 1020x600 */
.stm-g4__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-g4__bar{position:absolute;left:0;right:0;bottom:0;min-height:168px;display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;background:linear-gradient(to top,rgba(0,0,0,.85),rgba(0,0,0,0));color:#fff;padding:2.2rem 1.75rem calc(1rem + 10px);font-size:calc(1.25rem*2/3);line-height:1.5;font-weight:400;opacity:0;transition:opacity .3s;} /* Figma: 168px-Schwarzverlauf */ /* 05.09. (Maik): BU Desktop um 1/3 verkleinert (20 -> 13.3px) + 10px mehr Padding nach unten */
.stm-g4__item.is-active .stm-g4__bar{opacity:1;}
.stm-g4__credit{font-size:.75rem;line-height:1;background:rgba(34,34,34,.35);padding:.3rem .55rem;flex:0 0 auto;margin-bottom:.35rem;}
.stm-g4__arrow{position:absolute;top:calc(.2941*var(--g4w));transform:translate(-50%,-50%);z-index:2;background:none;border:0;padding:.2rem;color:var(--st-color-primary,#002F5D);cursor:pointer;display:inline-flex;} /* top = halbe Bildhoehe (10/17/2 der Slotbreite) - die Dots unterm Bild zaehlen nicht mit */
.stm-g4__arrow svg{max-width:none;flex:0 0 auto;}
.stm-g4__arrow:hover{color:var(--st-color-accent,#B51F29);}
.stm-g4__arrow[disabled]{color:var(--st-color-lightblue,#CAD9E0);cursor:default;}
.stm-g4__arrow--prev{left:calc(50% - var(--g4w)/2 - var(--g4gap)/2);} /* mittig in der Luecke zwischen Nachbar- und Zentralbild */
.stm-g4__arrow--next{left:calc(50% + var(--g4w)/2 + var(--g4gap)/2);right:auto;}
@media (max-width:919px){
	/* Mobile nach Figma 8106:1522: Zentralbild satzspiegelbreit (100vw - 2x24) in Ratio 30/38,
	   Nachbarn 85%% mit 10px Sichtabstand (Deckel der clamp), Pfeile wie Galerie Nr. 1 als eigene
	   Reihe UEBER der Galerie an den Satzspiegelkanten (24px Pfeil + 20px Abstand = 44px padding-top),
	   BU in Groesse UND Zeilenabstand halbiert (20/30 -> 10/15). */
	.stm-g4{--g4w:calc(100vw - 48px);margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);margin-top:1rem;padding-top:40px;} /* 08.09. R2 (Stefanie): mobil sind BEIDE Breiten-Varianten identisch - Bleed-Margins hier (bei is-full ergeben sie 0), Zentralbild satzspiegelbreit, Nachbarn schauen im Anschnitt rein (Figma 8106:1529: Peek = Gutter - Gap). Abstaende wie Galerie 1: Copy -> Pfeile 32px (16px head-margin + 16px margin-top) und Pfeile -> Slideshow 16px (padding-top 40 = 24px Pfeil + 16px; war 44) */
	.stm-g4__fig{aspect-ratio:30/38;}
	.stm-g4__arrow{top:0;transform:none;}
	.stm-g4__arrow--prev{left:24px;}
	.stm-g4__arrow--next{left:auto;right:24px;}
	.stm-g4__bar{min-height:110px;font-size:.625rem;line-height:1.5;padding:1.6rem 1rem calc(.53rem + 18.7px);flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:.45rem;background:linear-gradient(to top,rgba(0,0,0,.95),rgba(0,0,0,0));} /* 08.09. R3 (Stefanie): BU rutschte HINTER das Copyright (globale .stm-imgcredit-Plakette, absolut unten links AUF dem Bild, ~22px hoch) - extra Boden-Abstand haelt die BU immer OBERHALB der Plakette. */ /* 09.09. R4 (Maik): BU sass etwas zu hoch - Boden-Abstand um 1/3 verringert (calc(.8rem+28px)@40.8 -> 27.2px; Rest-Luft zur Plakette ~5px, weiterhin KEINE Ueberlappung moeglich) + Abdunkelung hinter der BU verstaerkt (Verlauf unten .85 -> .95) fuer bessere Lesbarkeit */
	.stm-g4__credit{margin-bottom:0;align-self:flex-start;}
	.module--slideshow--coverflow.is-full .stm-ss__head{max-width:none;margin-left:0;margin-right:0;padding-left:0;padding-right:0;} /* 08.09. R3: is-full-Kopf mobil exakt wie Satzspiegel - module__inner behaelt mobil auch bei is-full den 24px-Gutter (gemessen), der Kopf braucht daher KEIN eigenes Padding (24px extra ergaben 48px Doppel-Gutter) */
}

/* ---------- Galerie 5: Vertikal ---------- */
/* 13.09.2026 (Kunde, "Modul Galerie 5 - Vertikal Slider"): SCROLL-SLIDER statt Klick-Slider.
   Mechanik: eine .stm-g5__sec je Slide in EINEM Container. Jede Section pinnt per sticky,
   sobald ihr Ende die Viewport-Unterkante erreicht (inline top = min(headerH, vh - Hoehe),
   setzt stm-slideshow.js - CSS kann 100vh minus EIGENE Hoehe nicht rechnen); bis dahin
   scrollt der Text im Seitenfluss ("Bild bleibt fix, Text schiebt sich weiter"), denn die
   BILDSPALTE ist ihrerseits sticky auf Viewporthoehe unter dem sticky Site-Header
   (--g5top = Header-Unterkante, JS). Die naechste Section schiebt sich im Fluss UEBER die
   gepinnte vorherige (DOM-Reihenfolge = Stapelfolge, Sections sind positioniert und opak).
   Auf dem letzten Slide scrollt man aus dem Modul raus (Container-Ende loest das Sticky).
   Der aktive Dot ist je Section fest eingebacken - die aktuelle Section deckt den Viewport. */
.stm-g5{position:relative;background:#fff;clip-path:inset(0);} /* 16.09. R2 (Kunde): clip-path maskiert ALLES, was ueber die Modulkanten hinausmalt - unten schauten die geblurrten Vorgaenger-Slides (Blur-Halo) und der Schatten-Bleed unter dem letzten Slide hervor. clip-path (statt overflow:hidden!) laesst position:sticky intakt - overflow wuerde .stm-g5 zum Scroll-Container machen und das Pinnen killen. */
.stm-g5{--g5padl:clamp(1.5rem,3.3vw,3rem);} /* 31.07.: linkes Text-Padding als Var (Full-Width-Ausrichtung) */
/* 18.09. R3 (Kunde, "Vertikal Slider"): CSS-Scroll-Snap KOMPLETT raus (html scroll-snap-type +
   Marker). Grund: der Snap-Radius von proximity ist Browser-Sache (Chrome mobil bis ~1/3
   Viewport) - bei langen Texten zog es den Scroll "ab einem gewissen Punkt" ans Slide-Ende,
   selbstbestimmtes Lesen unmoeglich (Ticket). Ersatz: JS-Settle in stm-slideshow.js mit KLEINEM,
   kontrolliertem Radius (90px) - rastet nur, wenn man ohnehin fast an der Grenze steht. */
.stm-g5__sec{position:sticky;top:0;/* JS: min(headerH, vh - Hoehe) */display:grid;grid-template-columns:minmax(0,44fr) minmax(0,56fr);gap:0;align-items:stretch;background:#fff;min-height:calc(100svh - var(--g5top,0px));} /* 44:56 nach Kundenvorgabe (31.07.) */
/* 16.09. R2 (Kunde): Der Schlagschatten ist NICHT mehr statisch (.stm-g5__sec+.stm-g5__sec) - am
   neuen Rastpunkt ragte sein Blur-Radius bereits ueber die Oberkante des wartenden Slides in den
   Viewport ("da soll man den Schatten noch nicht sehen"). Er wird jetzt wie das Blur scrollgetrieben
   in stm-slideshow.js gesetzt (blendet ueber die ersten 80px Ueberdeckung ein); der letzte Slide hat
   dadurch von selbst nie einen Schatten nach unten. */
.stm-g5__text{position:relative;display:flex;flex-direction:column;justify-content:flex-start;padding:clamp(2rem,6vh,5.9rem) clamp(1.5rem,7vw,7rem) 56px var(--g5padl);} /* unten 56px = Luft unter der Textnavigation (ehem. navrow-bottom) */
.stm-g5__panel{display:block;}
.stm-g5__intro{color:var(--st-color-primary,#002F5D);font-weight:700;line-height:1.5;margin:0 0 1.1rem;}
.module--slideshow--vertical.is-full .stm-ss__head{max-width:1320px;margin-left:auto;margin-right:auto;padding-left:var(--st-gutter,60px);padding-right:var(--st-gutter,60px);} /* 02.08.: Kopf oben im Satzspiegel trotz full-bleed */
.stm-g5__head{margin-bottom:1.6rem;} /* Topline+Headline JE SLIDE im Panel */
.stm-g5__head .module__kicker{margin-bottom:.4rem;} /* 03.08.: Standard-Topline-Groesse */
.stm-g5__head .module__headline{max-width:none;margin-bottom:0;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;} /* 03.08.: Standard-Headline (Kundenticket 'bollerig') */ /* 18.09. R3 (Kunde): hyphens+break-word - in Zwischengroessen lief ein langes Einzelwort (MICHELBRAND, Brandspuren) breiter als die 44%-Textspalte und hinters Bild; Haus-Muster wie .stm-evl__title/Hero-Headline */
.stm-g5__body{font-size:1.25rem;line-height:1.5;}
.stm-g5__body p{margin:0 0 1rem;}
.stm-g5__navrow{display:flex;gap:2rem;margin-top:auto;padding-top:2.5rem;} /* 13.09.: im FLUSS am Textende (nach langem Text erreicht man sie durchs Scrollen); margin-top:auto pinnt sie bei kurzen Texten an die Unterkante der gepinnten Section */
/* 13.09.: Textnavigation = Komponente btn--text btn--sm (Kundenticket "die korrekten Text-Links (klein)").
   PREV: Komponenten-Chevron (::after) abschalten und gespiegelt VOR den Text setzen (gleiche Maske). */
.stm-g5__navlink--prev.btn--text::after{content:none;}
.stm-g5__navlink--prev.btn--text::before{content:"";display:inline-block;flex:0 0 auto;width:.62em;height:.95em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M8 1.8 2 7.5 8 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat left center/auto 100%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M8 1.8 2 7.5 8 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat left center/auto 100%;transition:all .3s ease-in-out;}
.stm-g5__navlink--prev.btn--text:hover::before,.stm-g5__navlink--prev.btn--text:focus-visible::before,.stm-g5__navlink--prev.btn--text:active::before{width:1.28em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M19 7.5H2.6M8 1.8 2 7.5 8 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M19 7.5H2.6M8 1.8 2 7.5 8 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}
/* Full-Width: Bild bis an den Viewport-Rand, TEXT bleibt am Satzspiegel (Kundenregel 31.07.) */
.module--slideshow--vertical.is-full{padding-left:0;padding-right:0;}
.module--slideshow--vertical.is-full > .module__inner{max-width:none;padding-left:0;padding-right:0;} /* inner-Padding (4vw-Altregel) neutralisieren */
.stm-g5__media{position:sticky;top:var(--g5top,0px);height:calc(100svh - var(--g5top,0px));align-self:start;min-height:0;} /* 13.09.: Bild richtet sich nach der Hoehe des Browserfensters (unter dem sticky Header) und bleibt stehen, waehrend der Text scrollt */
.stm-g5__slide{position:absolute;inset:0;margin:0;}
.stm-g5__img{width:100%;height:100%;object-fit:cover;object-position:center;display:block;}
/* 13.09.: Copyright GESTUERZT unten links in der Bildecke (liest von unten nach oben). Traeger ist
   die globale Bild-Credit-Plakette (span.stm-imgcredit aus dem Copyright-Filter) - die frueher
   zusaetzlich gerenderte figcaption.stm-g5__credit ist aus dem Template raus (Doppel-Copyright). */
.stm-g5 .stm-imgcredit{left:1px;bottom:.9rem;right:auto;top:auto;margin:0;background:rgba(34,34,34,.68);padding:.6rem .28rem;max-width:none;overflow:visible;color:#fff;font-size:.72rem;line-height:1.2;writing-mode:vertical-rl;transform:rotate(180deg);text-shadow:none;} /* 18.09. R3 (Kunde, "Copyright ein Pixel verschoben auf der Textflaeche"): left 0 -> 1px. Die Grid-Spaltengrenze liegt auf einem BRUCH-Pixel (gemessen: media.left 643.266px); die halbtransparente Plakette startete exakt dort und ihr Antialiasing-Saum mischte sich in der angebrochenen Pixelspalte mit dem Weiss der Textflaeche = "leichte Fragmente". Mit 1px Versatz liegt die Plakettenkante vollstaendig AUF dem Bild. */ /* 16.09. R2 (Kunde): buendig an die linke Bildkante (war .5rem Abstand) und mit der schwarzen, transparenten Flaeche der STANDARD-Plakette hinterlegt (rgba(34,34,34,.68)/.72rem wie .stm-imgcredit-Basisregel ~2169; Padding physisch gedreht .6/.28, weil der Streifen gestuerzt laeuft); Text-Schatten entfaellt - die Flaeche uebernimmt die Lesbarkeit. */
.stm-g5__down{position:absolute;left:2.9rem;bottom:1.5rem;transform:none;width:44px;height:44px;padding:0;box-sizing:border-box;aspect-ratio:1;border-radius:50%;border:2px solid rgba(255,255,255,.85);background:transparent;color:rgba(255,255,255,.85);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2;} /* 13.09.: mit etwas Abstand RECHTS neben dem gestuerzten Copyright (Figma); immer im Viewport, weil die Bildspalte sticky auf Viewporthoehe steht */
.stm-g5__down svg{max-width:none;flex:0 0 auto;}
.stm-g5__down:hover{background:rgba(255,255,255,.15);color:#fff;border-color:#fff;}
.stm-g5__dots{list-style:none;position:fixed;right:5rem;top:50vh;transform:translateY(-50%);display:none;flex-direction:column;gap:8px;margin:0;padding:0;z-index:5;} /* 13.09.: Dot-Abstand analog der anderen Slideshows (8px-Dots, 8px-Luecke); vorher blaehte die li-Zeilenbox (line-height ~24px) jeden Abstand auf ~20px auf */ /* 16.09. R2 (Kunde): EINE fixe Instanz auf OBERSTER Ebene (z5) statt je Section - Dots bleiben stehen und scharf, nur der aktive Dot animiert (bestehende Transition). Sichtbarkeit (.is-on) + top setzt initGal5 scrollgetrieben; als Kind von .stm-g5 clippt die Container-clip-path sie automatisch an den Modulkanten. */
.stm-g5__dots.is-on{display:flex;}
.stm-g5__dots li{display:flex;} /* Zeilenbox der li killen - sonst traegt jedes li ~16px Extra-Hoehe */
.stm-g5__dot{width:8px;height:8px;border-radius:4px;border:0;padding:0;background:rgba(255,255,255,.5);cursor:pointer;transition:all .2s;}
.stm-g5__dot.is-active{height:22px;background:rgba(255,255,255,.85);}

/* ---------- Responsive ---------- */
@media(max-width:900px){
	.stm-g2--4,.stm-g2--3{grid-template-columns:repeat(2,minmax(0,1fr));}
	.stm-ov__frame{padding:2.5rem 1rem;}
	.stm-ov__arrow--prev{left:.4rem;}
	.stm-ov__arrow--next{right:.4rem;}
	.stm-ov__g2top{grid-template-columns:1fr;}
	.stm-ov__g3wrap{flex-direction:column;max-height:none;}
	.stm-ov__g3panel{flex:0 0 auto;padding:2.6rem 1.4rem 1.4rem;}
	/* 05.09.: alte Mobil-Regeln (padding 2.2rem / flex-basis 92%%) ENTFERNT - das Coverflow-Rework
	   (eigener Mobil-Block oben, Full-Bleed + 30/38 + Pfeile wie G1) uebernimmt komplett */
	/* 13.09. (Kunde, "Vertikal Slider") Mobile: Bild oben sticky, die weisse Text-Flaeche schiebt
	   sich beim Scrollen UEBER das Bild (und damit ueber Sprungpfeil + Dots); danach pinnt die
	   Section wie am Desktop und die naechste schiebt sich drueber. */
	.stm-g5__sec{display:flex;flex-direction:column;}
	.stm-g5__media{position:sticky;top:var(--g5top,0px);height:clamp(340px,58svh,560px);z-index:1;order:-1;align-self:stretch;} /* Bild OBEN (Markup: Text zuerst), Textflaeche folgt und schiebt sich drueber */ /* 14.09. (Kunde, "Galerie 5 Mobile: Bilder nur weiss"): align-self:stretch ZWINGEND - die Desktop-Regel setzt align-self:start (dort Block-Achse im Grid, harmlos); im mobilen Column-Flex ist das aber die QUERACHSE: start = inhaltsbreit, und der Inhalt (figure absolut) ist 0px -> Bildspalte 0px breit = "weisse" Bilder, Sprungpfeil (left:50% von 0 - 22px = halb angeschnitten am LINKEN Rand) und Dots (right:.5rem von 0 = ausserhalb links) gleich mit. EIN Root-Cause fuer drei Ticket-Symptome; gemessen: media-Breite 0 -> 100%. */
	/* 18.09. R55 (Kunde, "Galerie 5 Mobile: ~1px Spalt zwischen kurzem Text-Slide und Hauptnavigation,
	   darunter blitzt das Bild durch"): Die Oberkante der weissen Textflaeche trifft die Header-
	   Unterkante nur auf ganze Pixel genau - vier Rundungsquellen wirken zusammen (JS rundet die
	   Header-Unterkante via Math.round, offsetHeight der Sections ist ganzzahlig, die Bildzone ist
	   58svh = Bruch-Pixel, und lvh/svh differieren je nach URL-Leisten-Zustand). Statt an der
	   Rundungskette zu drehen (fragil, geraeteabhaengig): 2px weisse Deckkante OBERHALB der
	   Textflaeche als box-shadow - kein Layout-Einfluss, ueberdeckt jeden Sub-/1px-Spalt; waehrend
	   des Hochschiebens verlaengert sie die weisse Flaeche nur um 2px nach oben (unsichtbar,
	   gleiche Farbe, gerade Kante). Muster verwandt mit der R52-Haarlinien-Analyse (Bruch-Pixel). */
	.stm-g5__text{box-shadow:0 -2px 0 0 #fff;position:relative;z-index:2;background:#fff;padding-top:clamp(1rem,3vh,2.95rem);padding-bottom:104px;min-height:calc(100svh - var(--g5top,0px));min-height:calc(100lvh - var(--g5top,0px));} /* 16.09. R3 (Kunde, "Textflaechen immer Device-fuellend"): lvh statt svh - svh ist die KLEINE Viewporthoehe (Browser-URL-Leiste sichtbar); beim Scrollen ist die Leiste aber eingeklappt, der echte Viewport ist ~60px hoeher, und genau dieser Streifen des Motivs blieb sichtbar, waehrend der naechste Slide schon reinkam. lvh = grosse Viewporthoehe: Textflaeche deckt das Bild in BEIDEN Leisten-Zustaenden komplett, bevor der naechste Slide kommt (svh-Zeile davor = Fallback fuer Browser ohne lvh). Passend dazu rechnet initGal5 die Pin-Kante jetzt mit der stabilen grossen Viewporthoehe (vhL, stm-slideshow.js). */ /* Padding Headline -> Oberkante weisse Flaeche HALBIERT (war clamp(2rem,6vh,5.9rem)) */ /* 14.09. (Kunde): "weisse Flaechen brauchen Mobile mehr Abstand nach unten, damit Inhalte nicht hinter den Quicklinks verschwinden und klickbar sind" - die Quicklinks-Pille (.stm-hn mobil, fixed bottom:16px + 56px hoch) deckt die unteren 72px des Viewports; eine gepinnte Section endet an der Viewport-Unterkante, mit den alten 56px lag die Textnavigation exakt HINTER der Pille. 104px = 72px Pille + 32px Luft. */ /* 16.09. R2 (Kunde): min-height = Viewport unterm Header -> die weisse Textflaeche schiebt sich BROWSERFUELLEND ueber das Bild: im gepinnten Zustand (Section-Ende an der Viewport-Unterkante) reicht sie von der Header-Unterkante bis ganz unten, das Bild ist komplett verdeckt - erst danach schiebt sich der naechste Slide rein. Die Textnavigation haengt via margin-top:auto weiter an der Unterkante. */
	.module--slideshow--vertical.is-full .stm-ss__head{padding-left:var(--st-pad,24px);padding-right:var(--st-pad,24px);} /* 14.09. (Kunde): "Headline im Satzspiegel buendig setzen" - die Desktop-Regel (Zeile ~1618) nutzt var(--st-gutter,60px), und --st-gutter bleibt auch mobil 60px (:root-Doublette, siehe MERKER im dev-log); der mobile Satzspiegel ist aber 24px (--st-pad, wie module__inner gemessen). Kopf sass dadurch 36px eingerueckt. */
	.stm-g5__down{left:50%;transform:translateX(-50%);} /* Sprungpfeil horizontal zentriert auf dem Bild */
	.stm-g5__dots{right:.5rem;z-index:1;} /* 16.09. R2: mobil UNTER der Textflaeche (text z2, media z1; Dots stehen im DOM nach den Sections und liegen mit z1 ueber dem Bild) - schiebt sich die weisse Flaeche browserfuellend uebers Bild, verschwinden die (weissen) Dots mit dem Bild, statt unsichtbar auf Weiss zu stehen; JS setzt top auf die Mitte der Bildzone */
	.stm-g1__textnav{justify-content:center;margin-top:.625rem;} /* 10.08.: auch mobil zentriert (Asana-Ticket) */ /* 07.09. (Maik): Abstand Bild -> Nav mobil HALBIERT (20 -> 10px) */
	/* 01.09. (Maik, Galerie-Runde) mobil: */
	.stm-ss__head--arrows{display:block;} /* Pfeile aus der Kopfzeile loesen -> eigene Reihe zwischen Copy und Slideshow */
	.stm-ss__copy{margin-top:1rem;} /* HL -> Copy +100%% (8 -> 16px) */
	.stm-ss__arrows{justify-content:space-between;width:100%;margin-top:2rem;} /* Pfeile links/rechts buendig am Satzspiegel */ /* 05.09. (Maik): nach OBEN das DOPPELTE an Abstand wie nach unten (32px vs 16px) - klemmt nicht mehr unter der HL; gilt via stm-ss-Klassen automatisch auch fuer die Galerie mit Text(-Navigation) */
	.stm-ss__head{margin-bottom:1rem;} /* Pfeile -> Slideshow 16px */
	.module--slideshow--thumbs .stm-g1{margin-left:calc(-1 * var(--st-pad,24px));margin-right:calc(-1 * var(--st-pad,24px));} /* Slideshow full width - hebt das Satzspiegel-Padding auf (Modul-Padding ist mobil 0) */
	.stm-g1__stage{aspect-ratio:4/3;} /* grosses Bild mobil hoeher (16/9 -> 4/3) */
}
/* 07.09. (Maik, "Galerie 3 - Mobile braucht viel Liebe"): Mobile-Lightbox nach Figma-Layout.
   Layer richtet sich an der Geraetehoehe aus (Box = Flex-Spalte, max-height 100%), das Bild
   sitzt oben in einer FESTEN 4/3-Box (Querformat cover, Hochformat contain - wie Desktop
   eingespiegelt), die Slider-Pfeile liegen AUF dem Bild (vertikal auf dessen Mitte, Groesse
   wie Desktop), der weisse Textlayer haengt FIX unter dem Bild: 100%% deckend, immer sichtbar,
   OHNE Ausklapp-Pfeil - bei viel Text scrollt die Flaeche in sich. Dots darunter im Fluss. */
@media(max-width:900px){
	/* 08.09. R3 (Stefanie, Mobile-Fixlayout nach Figma/Mock): Lightbox hat eine FESTE Groesse nach
	   Browserhoehe (height:100%% der Frame-Flaeche), alle Elemente bleiben an ihrer Position:
	   Bild oben fix in fester Ratio 36/28 (alle Bilder gleich gross, auch Hochformate), Pfeile
	   mittig AUF dem Bild, weisse Flaeche mit FESTER Hoehe (flex:1 = fuellt den Rest, auch bei
	   kurzen Texten; langer Text scrollt intern), Dots unten fix. Ohne Textflaeche bleibt das
	   Bild trotzdem oben in seiner fixen Position (Box behaelt die volle Hoehe). Panel-Padding
	   oben HALBIERT (1.2 -> .6rem), HL+Copy rutschen hoch. */
	.stm-ov--g3 .stm-ov__frame{padding:2.9rem .75rem 1rem;} /* 14.09. (Kunde, "Galerie 3 Lightbox"): Close-Icon kollidierte mit der Bild-Oberkante (top:-1rem => Button ragte 14px IN die Bildbox, gemessen). Jetzt FIXER Abstand: oben 8.4px Viewport-Luft + 29.6px Button + 8.4px Abstand = Box-Top 2.9rem; der Button haengt via top:-2.375rem KOMPLETT ueber der Lightbox. (ersetzt 1.6rem vom 09.09. - die Halbierung stammte aus Maiks HL-Ticket, der Kunde fordert nun explizit die Kollisionfreiheit) */
	.stm-ov--g3 .stm-ov__close{top:-2.375rem;} /* 14.09.: 2.375rem = 29.6px Buttonhoehe (20px SVG + 2*4.8px Padding) + 8.4px fixer Abstand zur Box-/Bild-Oberkante */
	.stm-ov--g3 .stm-ov__box{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;}
	.stm-ov--g3 .stm-ov__card{flex:1 1 auto;min-height:0;max-height:none;overflow:visible;display:flex;flex-direction:column;}
	.stm-ov__g3wrap{aspect-ratio:auto;max-height:none;overflow:visible;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}
	.stm-ov__g3media{position:relative;inset:auto;flex:0 0 auto;aspect-ratio:7/5;background:#fff;min-height:0;max-height:none;overflow:hidden;} /* 10.09. (Kunde, G3 R2): mobil FESTES 7/5-Containerformat, weiss (war 36/28) */ /* 10.09. R3 (Kunde-Screenshots Safari vs. Chrome): min-height:0 ZWINGEND - als Flex-Item in der Spalten-Wrap greift in BLINK die inhaltsbasierte Mindesthoehe (min-height:auto): sobald ein HOCHKANT-Bild geladen ist, ueberstimmt dessen intrinsische Hoehe die 7/5-aspect-ratio (gemessen: Box 366x458 = Bildratio statt 366x261) - das Bild stand riesig ohne Weissraum. Safari/WebKit loest das Minimum ueber die aspect-ratio auf -> dort war es korrekt. WICHTIG fuers QM: Der Fehler zeigt sich NUR mit geladenem Bild - Lazy-Bilder in Hintergrund-Tabs laden nie, deshalb sah die fruehere Verifikation faelschlich "korrekt" (LEHRE im dev-log) */
	.stm-ov--g3 .stm-ov__g3media img{object-fit:contain;width:100%;height:100%;} /* 10.09. (Kunde, G3 R2): Bild NUR mobil zentriert in voller Groesse eingepasst (contain) - passt es nicht exakt, entstehen weisse Streifen oben/unten bzw. links/rechts; Desktop behaelt cover */
	.stm-ov__g3panel,.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3panel{position:static;width:auto;flex:1 1 auto;min-height:0;overflow-y:auto;background:#fff;padding:.8rem 1.4rem 1.4rem;display:block;} /* 10.09. (Kunde, G3 R2): Abstand Bild->Text mindestens Absatz-Abstand (.8rem = p-margin der Panel-Copy; uebersteuert bewusst Maiks Halbierung vom 09.09. auf .3rem - der Kunde meldet den Abstand explizit als zu gering zurueck) */
	.stm-ov--g3 .stm-ov__card{background:transparent;box-shadow:none;} /* 09.09. (Maik): OHNE Erklaertext KEINE sichtbare weisse Flaeche - die Kartenflaeche unterm Bild war der weisse Rest der fixen Boxhoehe; weiss sind jetzt nur Bildbox (36/28, fix) und Panel selbst, Position/Groesse des Bilds bleibt unveraendert */
	.stm-ov__g3panel > *{margin-top:0;margin-bottom:.8rem;}
	.stm-ov__g3toggle{display:none;}
	.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3paneltext{display:block;} /* Panel ist mobil IMMER sichtbar - auch wenn es auf Desktop zugeklappt wurde */
	.stm-ov--g3 .stm-ov__arrow{top:calc((100vw - 1.5rem)*14/36);width:32px;height:32px;min-width:32px;} /* Mitte der 36/28-Bildbox (Boxbreite = 100vw - 2*.75rem Frame-Padding); Icons "dementsprechend verkleinert" (40 -> 32px) */
	.stm-ov--g3 .stm-ov__arrow--prev{left:.6rem;}
	.stm-ov--g3 .stm-ov__arrow--next{right:.6rem;}
	.stm-ov--g3 .stm-ov__dots{position:static;margin-top:auto;padding-top:.9rem;} /* margin-top:auto pinnt die Dots an die Unterkante der fixen Box */
}
@media(max-width:600px){
	.stm-g2--4,.stm-g2--3,.stm-g2--2{grid-template-columns:1fr;}
	.stm-g3__img{height:140px;}
	.stm-g3__item.is-portrait .stm-g3__img{height:200px;}
}

/* ============================================================
   Downloads/Pressematerial-Rework (27.07.) nach Figma
   ============================================================ */
.stm-dl__head{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:1.5rem;}
.stm-dl__headings{min-width:0;}
.stm-dl__copy{margin-top:.4rem;}
.stm-dl__filterwrap{flex:0 0 auto;}
.stm-dl__filter{display:inline-flex;align-items:center;gap:.6rem;height:36px;min-width:min(312px,100%);border:1px solid var(--st-neutral-300,#B0B0B0);border-radius:5px;padding:0 .75rem;background:#fff;color:var(--st-color-ink,#222);}
.stm-dl__filter-eye{display:inline-flex;color:var(--st-color-ink,#222);}
.stm-dl__filter-eye svg{max-width:none;}
.stm-dl__filter select{border:0;font:inherit;font-size:.95rem;color:inherit;outline:none;cursor:pointer;padding:0 23px 0 0;flex:1;appearance:none;-webkit-appearance:none;text-align:center;text-align-last:center;background:url("../img/icons/Chevron%20-%20neutral%20400.svg") no-repeat right center/15px 7px;} /* 16.09. R3: Chevron-Asset wie der Veranstaltungs-Filter (dessen nativer Pfeil wurde in der Filter-Zeilen-Runde durch "Chevron - neutral 400.svg" ersetzt - die R27-Analogie "analog Veranstaltungen" zieht mit) */ /* 16.09. (Kunde, "Downloadbereich Filter"): analog Veranstaltungs-Filter - Typo .95rem statt 1.125 (== .stm-evl__f select), horizontal ZENTRIERT zwischen Auge und Chevron (text-align-last fuer den zugeklappten Zustand, Blink), Chevron = derselbe native Select-Pfeil wie im Veranstaltungs-Filter (dort appearance:auto - hier explizit gesetzt). */
/* alte Button-Filter neutralisiert das Markup von selbst */

.stm-dl-list--grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2.5rem 1.75rem;}
.stm-dl-list--list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2.5rem 4rem;} /* 01.08.: mehr Abstand zwischen den Eintraegen */

.stm-dl-card{display:flex;flex-direction:column;gap:0;height:100%;border:0;background:none;}
.stm-dl-card__body{display:flex;flex-direction:column;flex:1;min-width:0;}
.stm-dl-card__media{position:relative;aspect-ratio:3/2;overflow:hidden;background:var(--st-neutral-100,#F6F6F6);}
.stm-dl-card__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-dl-card__media--icon{display:flex;align-items:center;justify-content:center;}
.stm-dl-card__filetype{display:inline-flex;}
.stm-dl-card__ficon{width:76px;height:auto;max-width:none;color:var(--st-color-primary,#002F5D);}
.stm-dl-card__ficon svg{width:76px;height:auto;max-width:none;}
.stm-dl-card__badge{position:absolute;right:0;bottom:0;background:var(--st-color-primary,#002F5D);color:#fff;font-size:1rem;font-weight:500;line-height:1;padding:6px;letter-spacing:0;border-radius:0;width:auto;}
.stm-dl-card__title{font-family:var(--st-font-head,inherit);font-weight:700;color:var(--st-color-primary,#002F5D);font-size:1.125rem;line-height:1.15;margin:.5rem 0 0;text-transform:none;letter-spacing:0;} /* 08.09. R2 (Maik, Downloads): Abstaende im Textblock HALBIERT (Bild->Titel 1rem -> .5) */
.stm-dl-card__text{color:var(--st-color-ink,#222);font-size:1rem;line-height:1.25;margin-top:.3125rem;} /* 08.09. R2: halbiert (.625 -> .3125) */
.stm-dl-card__text p{margin:0;}
.stm-dl-card__credits{font-size:1rem;line-height:1.25;color:var(--st-color-ink,#222);margin:.5rem 0 0;} /* 08.09. R2: halbiert (1rem -> .5) */
.stm-dl-card__credits-label{display:block;font-weight:700;text-transform:uppercase;font-size:.875rem;line-height:1;letter-spacing:.02em;color:#5C788E;margin-bottom:.25rem;} /* 01.08.: Abstand Label->Zeile verkleinert (Ticket) */
.stm-dl-card__actions{display:flex;flex-wrap:wrap;gap:.35rem 1.625rem;margin-top:auto;padding-top:.75rem;} /* 08.09. R2 (Maik): padding halbiert (1.5 -> .75rem); flex-wrap NEU - bei schmalen Spaltenbreiten liefen "Ansehen/Download" in die Nachbarspalten, jetzt brechen sie UNTEREINANDER um (row-gap .35rem) */
.stm-dl-card__action{color:#222222;font-size:1rem;font-weight:500;line-height:1.375;text-decoration:none;display:inline-flex;align-items:center;gap:.4em;} /* 05.09. (Maik, Buttons-Ticket): Downloads auf die Text-Link-Komponente - mit Chevron und den States #222/#034B91/#002F5D (Hover war rot) */
.stm-dl-card__action::after{content:"";display:inline-block;flex:0 0 auto;width:.62em;height:.95em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;}
.stm-dl-card__action:hover,.stm-dl-card__action:focus-visible{color:var(--st-color-secondary,#034B91);}
.stm-dl-card__action:active{color:var(--st-color-primary,#002F5D);}
.stm-dl-card__action::after{transition:all .3s ease-in-out;} /* 08.09. R2 (Maik): "finale Text-Links" komplett - der Hover-Morph zum Pfeil fehlte hier (wie zuvor bei News) */
.stm-dl-card__action:hover::after,.stm-dl-card__action:focus-visible::after,.stm-dl-card__action:active::after{width:1.28em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}

/* Listenansicht: Thumb links, Text rechts.
   09.09. R3 (Maik): der komplette Listen-Look gilt nur noch AB 561px - in Mobile (<=560) faellt die
   Listenansicht auf die BASIS-Kartenregeln zurueck und ist damit IDENTISCH zur Kachelansicht
   (Bild 3/2 volle Breite, gleiche Abstaende/Schriften); die frueheren <=560-Sonderregeln entfallen. */
@media (min-width:561px){
.stm-dl-list--list .stm-dl-card{flex-direction:row;gap:1rem;align-items:stretch;height:auto;align-self:start;} /* 08.09. R2 (Maik): Karte streckt sich NICHT mehr auf die Zeilenhoehe des Nachbarn */ /* 09.09. R3 (Maik): Abstand Bild -> Text um 1/3 verringert (1.5 -> 1rem) */
.stm-dl-list--list .stm-dl-card__body{min-height:128px;} /* 08.09. R2 (Maik): Body mindestens Bildhoehe (200px x 32/50), margin-top:auto pinnt die Links an die BILD-Unterkante; laengere Texte schieben sie natuerlich weiter runter */
.stm-dl-list--list .stm-dl-card__media{flex:0 0 200px;aspect-ratio:50/32;min-height:0;align-self:flex-start;} /* 01.08.: festes Format 50/32 */
.stm-dl-list--list .stm-dl-card__ficon,.stm-dl-list--list .stm-dl-card__ficon svg{width:56px;height:auto;}
.stm-dl-list--list .stm-dl-card__title{margin-top:0;}
/* Liste kompakt (Figma-Zeile 128px): Links unten buendig mit der Bildunterkante */
.stm-dl-list--list .stm-dl-card__text{margin-top:.1875rem;font-size:.875rem;} /* 08.09. R2: Abstand halbiert */ /* 09.09. R3 (Maik): Beschreibung in der Liste etwas kleiner (1 -> .875rem) */
.stm-dl-list--list .stm-dl-card__credits{margin-top:.3125rem;font-size:.875rem;} /* 08.09. R2: Abstand halbiert */ /* 09.09. R3 (Maik): "Foto: XY" etwas kleiner (1 -> .875rem) */
.stm-dl-list--list .stm-dl-card__actions{padding-top:.3125rem;} /* 08.09. R2: halbiert */
}
@media(max-width:1000px){
	.stm-dl-list--grid{grid-template-columns:repeat(2,minmax(0,1fr));}
	.stm-dl-list--list{grid-template-columns:1fr;}
	.stm-dl__head{flex-direction:column;align-items:flex-start;gap:1rem;}
}
@media(max-width:560px){
	.stm-dl-list--grid{grid-template-columns:1fr;}
}

/* ==== SERP / Suchergebnisseite (Figma 8106-4228, 27.07.2026) ==== */
.stm-serp__hero{position:relative;width:100%;aspect-ratio:1440/681;min-height:340px;max-height:70vh;overflow:hidden;background:var(--st-neutral-100,#F6F6F6);}
.stm-serp__hero-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.stm-serp__hero-box{position:absolute;left:0;top:31%;background:rgba(255,255,255,.9);padding:2rem 2.4rem 2.4rem;max-width:min(506px,86vw);}
.stm-serp__kicker{margin:0 0 .4rem;font-weight:700;font-size:1.25rem;line-height:1.5;text-transform:uppercase;color:var(--st-color-accent,#B51F29);}
.stm-serp__title{margin:0;font-weight:700;font-size:var(--stm-h2-size);line-height:var(--stm-h2-lh);text-transform:uppercase;} /* 21.08.: globale H2 */
.stm-serp__wrap{max-width:1369px;margin:0 auto;padding:0 24px 5rem;}
.stm-serp__summary{margin:4.5rem 0 0;font-weight:700;font-size:clamp(1.5rem,2.5vw,2.25rem);line-height:1.2;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-serp__term{color:var(--st-color-accent,#B51F29);}
.stm-serp__group{margin-top:4.5rem;}
.stm-serp__group-title{margin:0 0 2rem;font-weight:700;font-size:clamp(1.35rem,1.95vw,1.75rem);line-height:1.2;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-serp__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2.5rem 24px;}
.stm-serp-card{display:flex;flex-direction:column;align-items:flex-start;}
.stm-serp-card__media{display:block;width:100%;aspect-ratio:312/206;overflow:hidden;background:var(--st-neutral-100,#F6F6F6);}
.stm-serp-card__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-serp-card__title{margin:.63rem 0 0;font-weight:700;font-size:1.125rem;line-height:1.22;text-transform:uppercase;} /* 16.09. (Stefanie, "Suchergebnisseite"): Abstand Bild -> Titel um 1/3 reduziert - Ink-gemessen 10.6 -> 7.1px (Margin 13.6 -> 10.1px = .63rem) */
.stm-serp-card__title a{color:var(--st-color-primary,#002F5D);text-decoration:none;}
.stm-serp-card__title a:hover{color:var(--st-color-accent,#B51F29);} /* 16.09. (Stefanie): Titel-Hover ROT #B51F29 statt hellblau #034B91 */
/* 16.09. (Stefanie): "Zur …"-Links sind jetzt die Komponente "Textlink mit Pfeil (klein)"
   (btn btn--text btn--sm im Markup, search.php) - Typo/Farbe/Pfeil/States kommen vom Button-System,
   hier NUR noch Layout. Abstand Titel -> Link um 1/3 reduziert (Ink 12.3 -> 8.2px; die Komponente
   bringt .25em Eigen-Padding oben mit, daher Margin 6.3px). */
.stm-serp-card__cta{margin-top:8.2px;} /* 16.09. R2 (Fresh-Verify): 6.3 -> 8.2px - die 6.3 waren gegen die inzwischen GELOESCHTE Alt-Regel (line-height 1.35) kalibriert; die Komponente laeuft auf lh 1, deren engere Zeilenbox holt ~2px zurueck. Deployt ink-gemessen: 8.1px == Soll 8.2 (12.3 - 1/3). */
.stm-serp__again{margin-top:7rem;text-align:center;}
.stm-serp__again-title{margin:0;font-weight:700;font-size:clamp(2.4rem,5.5vw,5rem);line-height:.9;text-transform:uppercase;}
.stm-serp__again-copy{margin:1.6rem 0 0;font-size:1.25rem;line-height:1.5;color:var(--st-color-ink,#222);}
.stm-serp__search{display:flex;align-items:center;gap:1.1rem;max-width:528px;margin:2.2rem auto 0;}
.stm-serp__search input{flex:1;min-width:0;border:0;border-bottom:1px solid var(--st-neutral-300,#B0B0B0);border-radius:0;padding:.7rem 0;font:inherit;font-size:1.125rem;color:var(--st-color-ink,#222);background:none;outline:none;appearance:none;-webkit-appearance:none;}
.stm-serp__search input::placeholder{color:var(--st-neutral-600,#5D5D5D);}
.stm-serp__search input:focus{border-bottom-color:var(--st-color-primary,#002F5D);}
/* 16.09. (Stefanie, "Suchergebnisseite"): Icons analog Hauptsuche - identisches Rezept wie die
   404-Suche (R22): Lupe = Asset "Suche Lupe.svg" (40px-Kreisform), Hover/Pressed = Kreisfarbe
   #CAD9E0; Close = "Close klein.svg" 34px, per JS (search.php) nur bei Eingabe; natives Such-X aus.
   Der bisherige blaue Kreis-Button (Primaerblau + Inline-SVG) ist ersetzt. */
.stm-serp__search .stm-serp__go{flex:0 0 auto;width:40px;height:40px;padding:0;border:0;border-radius:50%;background:url("../img/icons/Suche%20Lupe.svg") no-repeat center/40px 40px;cursor:pointer;}
.stm-serp__search .stm-serp__go:hover,.stm-serp__search .stm-serp__go:focus-visible,.stm-serp__search .stm-serp__go:active{background-color:#CAD9E0;opacity:1;}
/* 16.09. R2 (Stefanie, 404-Video - gilt hier identisch): Close als OVERLAY am rechten Feldende
   statt Flex-Nachbar, 24px-Icon in 28px-Klickflaeche - siehe .stm-404__clear-Kommentar. */
.stm-serp__search{position:relative;}
.stm-serp__search input{padding-right:34px;}
.stm-serp__search .stm-serp__clear{position:absolute;right:calc(40px + 1.1rem + 4px);top:50%;transform:translateY(-50%);width:28px;height:28px;padding:0;border:0;background:url("../img/icons/Close%20klein.svg") no-repeat center/38px 38px;cursor:pointer;} /* 17.09. (Maik, "arg winzig"): 38px Flaeche = 13px X-Glyphe (Asset-Padding 33.8%), Details s. .stm-404__clear */
.stm-serp__search .stm-serp__clear:hover{opacity:1;}
.stm-serp__search .stm-serp__clear[hidden]{display:none;} /* explizit gegen globale button-Displayregeln (LEHRE R22) */
.stm-serp__search input::-webkit-search-cancel-button,.stm-serp__search input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;}
@media (max-width:1023px){
	.stm-serp__grid{grid-template-columns:repeat(2,minmax(0,1fr));}
	.stm-serp__hero{aspect-ratio:auto;height:52vw;min-height:300px;}
}
@media (max-width:600px){
	.stm-serp__grid{grid-template-columns:minmax(0,1fr);}
	.stm-serp__hero-box{top:auto;bottom:0;padding:1.4rem 1.6rem 1.6rem;}
	.stm-serp__again{margin-top:4.5rem;}
}

/* ==== Header-Finalisierung: Topbar-Dropdowns, Sprache, Suche, Hilfsnavigation (Figma 8011-824, 28.07.2026) ==== */
/* --- Topbar-Dropdowns --- */
/* 19.08. Ticket "Modul Topnavigation": Topbar exakt 40px (Figma "Top Navigation" 1440x40,
   Hauptnav 90px). Items fuellen die volle Bar-Hoehe -> Flyouts (top:100%) sitzen unten
   BUENDIG an der Topline. Flyout-Typo: #5D5D5D, Hover #034B91 (Michel-Sekundaer). */
.site-topbar__inner{position:relative;padding-top:0;padding-bottom:0;min-height:40px;}
.topbar-menu li{position:relative;}
.topbar-menu > li{display:inline-flex;align-items:stretch;}
.topbar-menu > li > a{display:inline-flex;align-items:center;gap:6px;padding:0;min-height:40px;}
.topbar-chev{flex:0 0 auto;max-width:none;margin-top:1px;transition:transform .15s ease;} /* +1px: optische Mitte auf x-Hoehe statt Zeilenbox */
.topbar-menu > li.is-open > a .topbar-chev{transform:rotate(180deg);}
.site-topbar .topbar-menu .sub-menu{display:block;opacity:0;visibility:hidden;pointer-events:none;position:absolute;top:100%;left:50%;transform:translateX(-50%) translateY(10px);z-index:120;background:#fff;box-shadow:0 10px 24px rgba(0,0,0,.14);list-style:none;margin:0;padding:12px 0;min-width:230px;transition:opacity .25s ease,transform .25s ease,visibility 0s linear .25s;} /* 23.08. (Maik): Flyouts faden rein/raus */
.site-topbar .topbar-menu > li.is-open > .sub-menu{opacity:1;visibility:visible;pointer-events:auto;transform:translateX(-50%) translateY(0);transition:opacity .25s ease,transform .25s ease;}
.site-topbar .topbar-menu .sub-menu a{display:block;padding:8px 20px;color:var(--st-neutral-600,#5D5D5D);font-size:1rem;text-decoration:none;white-space:nowrap;}
.site-topbar .topbar-menu .sub-menu a:hover{color:#034B91;text-decoration:none;}

/* Barrierefreiheit-Punkt (Figma Topnavi) - oeffnet Eye-Able Assist (stm-header.js) */
.stm-a11y-btn{background:none;border:0;color:#fff;font:inherit;font-size:1rem;cursor:pointer;padding:0;min-height:40px;display:inline-flex;align-items:center;}
.stm-a11y-btn:hover{text-decoration:underline;}

/* Sprachauswahl (19.08.: Typo 1rem wie Topnavi-Punkte, Caption #222, Sprachen linksbuendig
   inkl. Arabisch - dir:ltr statt rtl-Flip; aktive Sprache blau+bold+Haken, Rest #5D5D5D) */
.stm-lang{position:relative;display:inline-flex;align-items:stretch;}
.stm-lang__btn{background:none;border:0;color:#fff;font:inherit;font-size:1rem;display:inline-flex;align-items:center;gap:6px;cursor:pointer;padding:0;min-height:40px;}
.stm-lang__btn:hover{opacity:1;} /* 23.08. (Maik): globale button:hover{opacity:.92} machte die Sprachwahl transparent */
.stm-lang.is-open .topbar-chev{transform:rotate(180deg);}
.stm-lang__panel{position:absolute;top:100%;right:0;z-index:120;background:#fff;box-shadow:0 10px 24px rgba(0,0,0,.14);min-width:210px;padding:16px 0 12px;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(10px);transition:opacity .25s ease,transform .25s ease,visibility 0s linear .25s;}
.stm-lang__panel[hidden]{display:block;} /* 23.08.: hidden-Attribut neutralisiert - Sichtbarkeit steuert .is-open (Fade) */
.stm-lang.is-open .stm-lang__panel{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0);transition:opacity .25s ease,transform .25s ease;}
.stm-lang__caption{margin:0 20px 8px;font-size:1rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#222222;}
.stm-lang__list{list-style:none;margin:0;padding:0;max-height:min(430px,calc(100vh - 260px));overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#B0B0B0 transparent;} /* 28.08. (Maik, Topnavigation): Flyout hoehenbegrenzt (~11 Sprachen), Rest scrollt - sichtbare schmale Scrollbar */
.stm-lang__list a{display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:7px 20px;color:var(--st-neutral-600,#5D5D5D);font-size:1rem;text-decoration:none;white-space:nowrap;direction:ltr;text-align:left;}
.stm-lang__list a:hover{color:#034B91;text-decoration:none;}
.stm-lang__list a.is-active{font-weight:700;color:var(--st-color-primary,#002F5D);}
.stm-lang__check{display:none;flex:0 0 auto;max-width:none;}
.stm-lang__list a.is-active .stm-lang__check{display:block;}

/* Eye-Able Translate: Standard-Schwebe-Button ausblenden - Sprachwahl laeuft ueber die Topnavi.
   WICHTIG: :host des Widgets setzt display mit !important aus dem Shadow-Sheet (gewinnt gegen
   Author-!important) - aber es konsumiert var(--display), daher die Custom-Property. */
translation-select{--display:none;display:none !important;}
/* --- Header-Suche --- */
@media (min-width:1001px){
  button.header-search{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:0;background:none;color:var(--st-color-primary,#002F5D);cursor:pointer;margin-right:-4px;} /* 28.08. (Maik): mittig unter der Sprachauswahl (DE-Button-Mitte lag 4px weiter rechts, live gemessen) */
  button.header-search:hover,button.header-search.is-open{color:var(--st-color-primary,#002F5D);} /* 26.08.: keine Rotfaerbung mehr - Hover ist der graue Kreis (unten) */
}
button.header-search svg{width:40px;height:40px;max-width:none;flex:0 0 auto;position:relative;} /* 28.08. R2 (Maik): 40 = Kreisgroesse, Verhaeltnis wie im SVG */ /* 23.08.: Safari kollabiert Inline-SVGs ohne width/height auf 0 - Icon fehlte dort */
/* 27.08. REGRESSION-FIX (Maren: Mega-Menue nicht mehr full width, Topbar-Unterpunkte nicht klickbar):
   position/z-index am .site-header__inner (gestriger Such-Umbau) machte den 1200px-Inner zum
   Containing-Block des Mega-Menues UND legte ihn ueber die Topbar-Flyouts. Jetzt: Clip-Container
   (overflow:hidden) uebernimmt das "unter dem Header herausschieben" - ganz ohne Header-Eingriffe. */
.stm-searchbar-clip{position:absolute;top:100%;left:0;right:0;overflow:hidden;padding-bottom:60px;pointer-events:none;z-index:60;} /* 08.09. (Maik, Suche): 60px Luft unterhalb des Flyouts - overflow:hidden schnitt den Schlagschatten (0 18px 30px = 48px Reichweite) exakt an der Unterkante ab; overflow clippt an der PADDING-Kante, der Schatten faellt jetzt in die Luft. Oben bleibt alles maskiert (kein padding-top) */
.stm-searchbar{position:relative;margin-left:auto;margin-right:max(calc((100% - 1200px)/2 - 28px),0px);width:min(524px,94vw);background:#fff;box-shadow:0 18px 30px rgba(0,0,0,.14);transform:translateY(calc(-100% - 60px));transition:transform .38s ease;pointer-events:auto;} /* 08.09.: geschlossen um die 60px Schatten-Luft weiter hochgeschoben (war -104%), sonst wuerde die Schattenfahne des zugeklappten Flyouts durch das neue padding-bottom unter dem Header durchscheinen */
.stm-searchbar.is-open{transform:none;}
.site-topbar{position:relative;z-index:120;} /* 27.08. (Johann): Topmenu liegt auf der Z-Achse UEBER dem Mainmenu - Dropdowns immer klickbar */
.stm-searchbar__form{max-width:528px;margin:0 auto;display:flex;align-items:center;gap:1.1rem;padding:1.4rem 24px;}
.stm-searchbar__form input{flex:1;min-width:0;border:0;border-bottom:1px solid var(--st-neutral-300,#B0B0B0);border-radius:0;padding:.7rem 0;font:inherit;font-size:1.125rem;color:var(--st-color-ink,#222);background:none;outline:none;appearance:none;-webkit-appearance:none;}
.stm-searchbar__form input::placeholder{color:var(--st-neutral-600,#5D5D5D);}
.stm-searchbar__form input:focus{border-bottom-color:var(--st-color-primary,#002F5D);}
.stm-searchbar__form button{flex:0 0 auto;width:40px;height:40px;padding:0;border:0;border-radius:50%;background:var(--st-color-primary,#002F5D);color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;}
.stm-searchbar__form button svg{max-width:none;flex:0 0 auto;}
.stm-searchbar__form button:hover{background:var(--st-color-secondary,#034B91);}
/* --- Hilfsnavigation rechts --- */
.stm-hn{position:fixed;right:0;top:190px;z-index:90;display:flex;flex-direction:column;gap:12px;width:50px;} /* 03.08.: Kacheln 50 (Kundenmock: Kachel unveraendert, nur Motive groesser) */
.stm-hn__item{position:relative;height:50px;}
.stm-hn__btn{position:absolute;right:0;top:0;height:50px;width:50px;display:flex;align-items:center;gap:2px;padding:0;border:0;background:var(--st-color-lightblue,#CAD9E0);color:var(--st-color-primary,#002F5D);cursor:pointer;overflow:hidden;white-space:nowrap;transition:width .18s ease;font-family:var(--st-font-head,inherit);} /* 28.08. (Maik): BUTTONS ERBEN KEINE SCHRIFT - Desktop zeigte Fallback statt Meta Pro (mobil setzt __mhead sie explizit) */
.stm-hn__item:hover .stm-hn__btn,.stm-hn__item.is-open .stm-hn__btn{width:340px;box-shadow:-4px 4px 8.5px rgba(0,0,0,.10);} /* 28.08. (Maik): 300 -> 340, damit "TURM + RICKMER RICKMERS" samt Hover-Pfeil einzeilig bleibt (Windows rendert breiter) */
.stm-hn__item.is-open .stm-hn__btn,.stm-hn__item.is-closing .stm-hn__btn{z-index:97;box-shadow:none;} /* 28.08. R3 (Maik-Video): Kachel wirft offen KEINEN eigenen Schatten mehr - die Flyout-Flaeche (beginnt hinter der Kachel) traegt den EINEN durchgehenden Schatten; Kachel liegt nur optisch obenauf (z 97) */
.stm-hn__btn:hover,.stm-hn__item:hover .stm-hn__btn{opacity:1;} /* 19.08. Quicknavi (Maik): globale button:hover{opacity:.92}-Regel aus main.css machte die Kachel transparent */
.stm-hn__ico{flex:0 0 50px;width:50px;height:50px;display:flex;align-items:center;justify-content:center;position:relative;}
.stm-hn__ico .stm-ic,.stm-hn__ico svg{width:34px;height:34px;max-width:none;flex:0 0 auto;display:block;}
.stm-hn__ico--cal .stm-hn__day{position:absolute;left:50%;top:54%;transform:translate(-50%,-50%);font-size:14px;font-weight:700;letter-spacing:.05em;color:var(--st-color-primary,#002F5D);line-height:1;}
.stm-hn__label{font-weight:700;font-size:1.25rem;line-height:1;text-transform:uppercase;}
.stm-hn__l-open{display:none;}
.stm-hn__item.is-open .stm-hn__l-open{display:inline;}
.stm-hn__item.is-open .stm-hn__l-closed{display:none;}
.stm-hn__flyout{position:absolute;right:0;top:0;width:340px;background:#fff;box-shadow:-4px 4px 8.5px rgba(0,0,0,.10);padding:74px 30px 28px;z-index:95;height:50px;overflow:hidden;transition:height .32s ease,padding-top .32s ease,padding-bottom .32s ease;scrollbar-width:thin;scrollbar-color:#B0B0B0 transparent;} /* 28.08. R3 (Maik-Video): Die Flaeche beginnt HINTER der Kachel (top 0, Inhalt startet bei 50+24) und waechst per Hoehen-Animation mit - ihr box-shadow umlaeuft Kachel+Flyout als EIN durchgehender Schatten und wird von overflow:hidden nicht geclippt (Schatten liegt ausserhalb der Box). Zielhoehe/50px-Bodenabstand rechnet stm-header.js; scrollbar erst, wenn gekappt. */
.stm-hn__item.is-open{z-index:96;}
.stm-hn__item.is-closing{z-index:95;} /* 31.08.: .is-closing haelt die Stapelordnung waehrend der Zuzieh-Animation (Kachel bleibt ueber der eigenen Flaeche). 01.09. (Maik): eine Stufe UNTER .is-open - beim Wechsel schiebt sich das neu geoeffnete Flyout VOR das alte, das alte zieht sich im Hintergrund zurueck */
.stm-hn__event,.stm-hn__link{margin:0 0 15px;} /* 28.08. (Maik): Abstand zwischen den Link-Bloecken um 1/3 verringert (22 -> 15) */
.stm-hn__flyout .stm-hn__event:last-of-type,.stm-hn__flyout .stm-hn__link:last-of-type{margin-bottom:0;} /* fester, ueberall gleicher Abstand Content -> Haupt-CTA */
.stm-hn__ev-head{margin:0 0 6px;font-weight:700;font-size:1.05rem;line-height:1.3;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-hn__ev-title{margin:0 0 4px;font-weight:700;font-size:1.05rem;line-height:1.3;}
.stm-hn__ev-title a{color:var(--st-color-accent,#B51F29);text-decoration:none;}
.stm-hn__ev-title a:hover{text-decoration:underline;text-underline-offset:3px;}
.stm-hn__ev-text{margin:0 0 6px;font-size:.95rem;line-height:1.4;color:var(--st-color-ink,#222);}
/* 19.08. Quicknavi: finale CTA-Komponenten - Markup nutzt jetzt btn--text / btn--secondary btn--sm /
   btn--primary btn--sm (Spenden: Hover Primaer-Rot kommt aus dem System). Hier nur Feinanpassung. */
.stm-hn__flyout .btn--text{font-weight:500;font-size:.95rem;}
.stm-hn__link-title span{font-weight:700;}
.stm-hn__link-title{display:inline;margin:0 0 2px;font-weight:700;font-size:1.05rem;line-height:1.3;text-transform:uppercase;color:var(--st-color-primary,#002F5D);text-decoration:none;} /* 28.08. (Maik): inline statt flex - das Chevron haengt mit FESTEM Abstand direkt am letzten Wort (auch bei mehrzeiligen Titeln) */
.stm-hn__link-title:hover{color:var(--st-color-secondary,#034B91);}
/* 23.08. (Maik): korrektes Chevron wie "Textlink mit Pfeil" (btn--text) inkl. Hover-Morph zum Pfeil */
.stm-hn__link-title::after{content:"";display:inline-block;margin-left:.4em;vertical-align:-.08em;width:.52em;height:.8em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 15'%3E%3Cpath d='M2 1.8 8 7.5 2 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right center/auto 100%;transition:all .3s ease-in-out;}
.stm-hn__link-title:hover::after{width:1.05em;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 15'%3E%3Cpath d='M1 7.5h16.4M12 1.8 18 7.5 12 13.2' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}
.stm-hn__pill,.stm-hn__cta{margin-top:18px;} /* 28.08. (Maik): ueberall gleicher Abstand Content -> Haupt-CTA (mobil zugleich der sichtbare Abstand CTA -> Pille via padding-bottom 46) */
.stm-hn__cta-ico svg,.stm-hn__cta-ico .stm-ic{width:24px;height:24px;max-width:none;display:block;color:#fff;}
.stm-hn__mhead,.stm-hn__mtoday{display:none;} /* nur mobil sichtbar */
/* 19.08. Quicknavi Mobile (Figma "Mobile - Quicknavigation"): schwebende Icon-Pill unten mittig,
   aktives Icon mit weissem Kreis, Panels als Karten ueber der Pill mit hellblauem Kopf */
@media (max-width:1000px){
  /* 23.08. (Maik): Pille breiter (= Flyout-Breite), liegt UEBER Hauptnavi (z 120 > Header 100);
     Pillen-Koerper als ::before (z1), Buttons z2, Flyout z0 -> Flyout verschwindet HINTER der Pille. */
  .stm-hn{display:flex;top:auto;bottom:16px;left:max(16px,calc((100% - 400px)/2));right:max(16px,calc((100% - 400px)/2));margin:0;width:auto;flex-direction:row;align-items:center;justify-content:space-between;gap:4px;background:none;border-radius:999px;padding:5px 22px;box-shadow:none;z-index:120;} /* 28.08. (Maik): Pille max. 400px breit (korrigiert, 800 war Photoshop-Versehen) (ohne transform - die fixed-Flyouts duerfen keinen transform-Container bekommen) */
  .stm-hn::before{content:"";position:absolute;inset:0;background:var(--st-color-lightblue,#CAD9E0);border-radius:999px;box-shadow:0 8px 22px rgba(0,0,0,.22);z-index:1;}
  .stm-hn__item{height:46px;position:static;z-index:auto;}
  .stm-hn__item.is-open,.stm-hn__item.is-closing{z-index:auto;}
  .stm-hn__item.is-closing .stm-hn__flyout{z-index:-1;} /* 01.09. (Maik): mobil zieht sich das alte Flyout im HINTERGRUND zurueck - ohne das gewann beim Klick von rechts nach links die DOM-Reihenfolge und das alte (spaetere) Flyout lag beim Zuziehen VOR dem neuen; -1 bleibt innerhalb des .stm-hn-Kontexts (z120) und damit ueber der Seite, aber unter neuem Flyout (0) und Pille (1) */
  .stm-hn__btn{position:relative;z-index:2;width:54px;height:46px;background:none;justify-content:center;transition:none;clip-path:none;}
  .stm-hn__item:hover .stm-hn__btn,.stm-hn__item.is-open .stm-hn__btn{width:54px;box-shadow:none;clip-path:none;}
  .stm-hn__ico{flex:0 0 46px;width:46px;height:46px;border-radius:50%;}
  .stm-hn__ico .stm-ic,.stm-hn__ico svg{width:34px;height:34px;} /* 23.08.: Icons groesser, Hover-Kreis (46) bleibt */
  .stm-hn__customico{width:34px;height:34px;}
  .stm-hn__ico--cal .stm-hn__day{font-size:11px;letter-spacing:0;line-height:1;} /* 23.08.: Datum 2pt kleiner, Line-Spacing 0 */
  .stm-hn__item.is-open .stm-hn__ico{background:#fff;}
  .stm-hn__label{display:none;}
  /* 23.08.: gleiche Breite wie Pille (left/right 16), weisse Flaeche bis zur PILLENMITTE
     (Pille: bottom 16 + 56 hoch -> Mitte 44) - schiebt sich buendig ohne Abstand aus ihr. */
  .stm-hn__flyout{position:fixed;left:max(16px,calc((100% - 400px)/2));right:max(16px,calc((100% - 400px)/2));bottom:44px;top:auto;width:auto;height:0;overflow:hidden;border-radius:8px 8px 0 0;padding:0 22px 46px;box-shadow:0 10px 30px rgba(0,0,0,.25);z-index:0;transition:height .32s ease,padding-top .32s ease,padding-bottom .32s ease;max-height:none;} /* 28.08. R3 (Maik-Video): KEIN clip-path mehr - Hoehen-Animation aus der Pille heraus, der box-shadow bleibt ueberall ungeclippt (keine Ueberblendungen/Kanten). Zielhoehe = Platz bis 24px unterm Hauptmenue (stm-header.js); scrollbar erst, wenn gekappt. */
  .stm-hn__mhead{display:flex;position:sticky;top:0;z-index:3;align-items:center;justify-content:space-between;gap:12px;width:calc(100% + 44px);margin:0 -22px 16px;padding:13px 22px;background:var(--st-color-lightblue,#CAD9E0);border:0;border-radius:8px 8px 0 0;font-family:var(--st-font-head,inherit);font-weight:700;font-size:1.25rem;text-transform:uppercase;color:var(--st-color-primary,#002F5D);cursor:pointer;text-align:left;} /* 23.08.: Typo groesser */
  .stm-hn__mtoday{display:block;margin:0 0 14px;font-weight:700;font-size:1.05rem;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
}

/* ==== Veranstaltungsseite /veranstaltungen/ (Figma 8106-2353, 28.07.2026) ==== */
.stm-evl__hero{position:relative;width:100%;aspect-ratio:1440/681;min-height:380px;max-height:72vh;background:var(--st-neutral-100,#F6F6F6);}
.stm-evl__hero-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
/* 27.08. (Maik, Modul Veranstaltungen): Blaetterpfeile = Kreis-Outline-Pfeile der fertigen Heros
   (hero-slider__arrow-Optik), unten rechts nebeneinander statt links/rechts mittig */
.stm-evl__hero .stm-slider__prev,.stm-evl__hero .stm-slider__next{top:auto;bottom:24px;transform:none;width:44px;height:44px;box-sizing:border-box;border-radius:50%;border:2px solid rgba(255,255,255,.85);background:transparent;color:rgba(255,255,255,.85);}
.stm-evl__hero .stm-slider__next{right:24px;}
@media (min-width:1101px){ /* 28.08. (Maik, Seite Veranstaltungen): NUR dieser Hero - Pfeile ueber die absolut ueberlappende Filterleiste (76px hoch) heben; >=1100 wird der Filter static, dann gilt wieder bottom:24 */
  .stm-evl__hero .stm-slider__prev,.stm-evl__hero .stm-slider__next{bottom:100px;}
}
.stm-evl__hero .stm-slider__prev{left:auto;right:76px;}
.stm-evl__hero .stm-slider__prev:hover:not(:disabled),.stm-evl__hero .stm-slider__next:hover:not(:disabled){background:rgba(255,255,255,.15);color:#fff;border-color:#fff;}
/* 27.08.: Box-Inhalt wechselt pro Slide - weicher Fade beim Tausch */
.stm-evl__hero-boxslot{transition:opacity .18s ease;}
.stm-evl__hero-box.is-switching .stm-evl__hero-boxslot{opacity:0;}
/* 27.08. (Maik): Modulhoehe S/M/L wirkt jetzt - Werte wie die fertigen Heros (hero-slider--s/m/l) */
@media (min-width:901px){
  .stm-evl__hero--s{aspect-ratio:auto;height:500px;max-height:none;}
  .stm-evl__hero--m{aspect-ratio:auto;height:600px;max-height:none;}
  .stm-evl__hero--l{aspect-ratio:auto;height:717px;max-height:none;}
}
/* 26.08. (Maik): Hero optional als Slideshow - Slides fuellen die Hero-Flaeche, Box/Filter bleiben fix */
.stm-evl__hero .stm-slider,.stm-evl__hero .stm-slider__track{position:absolute;inset:0;}
.stm-evl__hero .stm-slider__slide{height:100%;}
.stm-evl__hero .stm-slider .stm-evl__hero-img{position:absolute;inset:0;height:100%;aspect-ratio:auto;}
.stm-evl__hero .stm-slider__dots{bottom:92px;} /* ueber der Filterleiste */
.stm-evl__hero-box{position:absolute;left:0;top:12%;z-index:3;background:rgba(246,246,246,.92);padding:2rem 2.6rem 2.4rem;max-width:min(686px,88vw);} /* 17.09. (Stefanie): z-index 3 - das Copyright (.stm-imgcredit, z2) lag beim EINZELBILD-Hero UEBER der Box (beim Slider steckt der Credit im Slide-Stacking und blieb dahinter); Box liegt jetzt in beiden Faellen drueber */
.stm-evl__hero .stm-imgcredit{bottom:var(--evl-fh,76px);} /* 18.09. R62 (Stefanie, "Copyright direkt an die Filterleiste andocken"): OHNE Luft auf die Leisten-Oberkante. Die Leistenhoehe ist browserabhaengig (Date-Inputs rendern je Engine unterschiedlich hoch - beim Kunden stand die Plakette ~20px ueber der Leiste, in Chrome 8px), ein fester Wert kann also nie ueberall stimmen: JS (stm-modules.js, evl-dock) misst die Leiste und schreibt --evl-fh an den Hero, Fallback 76px = Standard-Leistenhoehe Chrome. */ /* 18.09. R58: Vorgeschichte - Plakette sass mit bottom .9rem IN der Filterleisten-Zone (Filter overlayt die unteren ~76px des Heros), danach 84px = Leistenhoehe + 8px Luft; die Luft ist mit R62 raus. */
@media(max-width:900px){ .stm-evl__hero-box{padding:1.75rem;} } /* 18.09. R58 (Kunde, "Mobile groesserer Abstand links als bei unseren definierten Heros"): Standard-Hero-Box hat mobil padding 1.75rem (Regel Z.~159) - die evl-Box behielt ihre Desktop-2rem/2.6rem, Text startete ~14px weiter rechts */
.stm-evl__kicker{margin:0 0 .4rem;font-weight:700;font-size:1.05rem;line-height:1.4;text-transform:uppercase;color:var(--st-color-accent,#B51F29);} /* 18.09. R58: 1.1 -> 1.05rem = Standard-Hero-Topline */
.stm-evl__title{margin:0;font-weight:700;font-size:clamp(2.5rem,5.2vw,5rem);line-height:.9;text-transform:uppercase;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;} /* 26.08. (Maik): automatischer Umbruch */ /* 18.09. R58 (Kunde, "Headline im Hero Veranstaltung so riesig"): exakt die Standard-Hero-Groesse (.hero__headline: clamp 2.5rem/5.2vw/5rem, lh .9) statt globalem H2-Token (der lag mobil bei 54px statt 40px, Zwischengroessen 80 vs 75, und hatte 70px-Zeilenhoehe statt .9) */
.stm-evl__copy{margin:.9rem 0 0;font-size:1.05rem;line-height:1.5;color:var(--st-color-ink,#222);max-width:60ch;} /* 26.08. (Maik): Copy (WYSIWYG) des Hero-Slides */
.stm-evl__copy p{margin:0 0 .8em;}
.stm-evl__copy p:last-child{margin-bottom:0;} /* 21.08.: globale H2 */
/* Filterleiste am Hero-Fuss */
.stm-evl__filter{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:12px;padding:16px max(24px,calc((100% - 1320px)/2 + 0px));background:rgba(246,246,246,.82);backdrop-filter:blur(2px);}
.stm-evl__f{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--st-neutral-300,#D1D1D1);border-radius:8px;padding:0 12px;height:44px;color:var(--st-color-ink,#222);}
.stm-evl__f-ico{display:inline-flex;align-items:center;gap:3px;color:var(--st-color-ink,#222);position:relative;}
.stm-evl__f-ico svg{max-width:none;flex:0 0 auto;}
.stm-evl__f-tag{font-size:.8rem;font-weight:700;text-transform:lowercase;color:var(--st-neutral-600,#5D5D5D);} /* 20.08. R2 (Maik): Icon vorne wieder raus, nur noch von/bis als Text */
.stm-evl__pick{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:30px;height:30px;padding:0;border:0;background:none;cursor:pointer;color:var(--st-color-primary,#002F5D);}
.stm-evl__pick svg{width:20px;height:21px;max-width:none;display:block;}
.stm-evl__f--date input::-webkit-calendar-picker-indicator{display:none;} /* natives Symbol aus - unser stm-evl__pick ist ueberall das eine Symbol (Safari hat nativ keins) */
.stm-evl__f input,.stm-evl__f select{border:0;background:none;outline:none;font:inherit;font-size:.95rem;color:var(--st-color-ink,#222);height:100%;}
.stm-evl__f--date input{width:130px;-webkit-appearance:none;appearance:none;background:none;} /* 17.09. (Stefanie, Mobile-Chrome): appearance:none nimmt Chromes kleinen NATIVEN Dropdown-Pfeil vor unserem Kalender-Icon weg (der Kalender-Indicator selbst ist schon per ::-webkit-calendar-picker-indicator aus) */
@supports (-moz-appearance:none){
	.stm-evl__f--date input{clip-path:inset(0 30px 0 0);} /* 18.09. R57 (Kunde, "In Firefox haben wir in den Kalenderzeilen noch die Kalender-Icons von Firefox mit drin"): Firefox (ab 109) malt einen EIGENEN Kalender-Indicator ans Eingabefeld-Ende und bietet dafuer KEIN Pseudo-Element und keinen appearance-Schalter an - einziger sauberer Weg ist, die rechten 30px des Inputs wegzuclippen (dort steht nur das FF-Icon, der Datumstext ist linksbuendig). Der @supports-Guard (-moz-appearance) matcht NUR Firefox - Chrome/Safari bleiben unberuehrt. Klick zum Oeffnen laeuft ohnehin ueber unser .stm-evl__pick. */
}
.stm-evl__f--kat select{min-width:170px;appearance:none;-webkit-appearance:none;text-align:center;text-align-last:center;padding:0 23px 0 0;height:auto;align-self:center;background:url("../img/icons/Chevron%20-%20neutral%20400.svg") no-repeat right center/15px 7px;} /* 16.09. R2 (Kunde, Filter-Zeile): NATIVER Pfeil raus (appearance:none), stattdessen das gelieferte Asset "Chevron - neutral 400.svg" (15x7, Naturgroesse) rechtsbuendig im Select; padding-right 23px (15px Chevron + 8px Luft) haelt den Text davon frei -> die Textbox endet an der Chevron-Kante und text-align:center zentriert "Alle anzeigen" damit exakt ZWISCHEN Auge-Icon (links vorm Select) und Chevron */ /* 23.08. (Maik R2): height:100% liess Blink den Text an die Baseline setzen statt zu zentrieren -> select nur texthoch, Flex zentriert es (Screenshot-verifiziert) */ /* 20.08. R2 (Maik): Begriff mittig - Chrome/Edge brauchen text-align-last fuer den zugeklappten Zustand */
.stm-evl__f--q{flex:0 1 300px;}
.stm-evl__f--q input{width:100%;min-width:0;}
/* 16.09. R2 (Kunde, Filter-Zeile): Lupe nach RECHTS als Suchen-Button - Asset "Suche Lupe - neutral 400.svg"
   als MASKE auf currentColor (Default #888 wie das Asset, Hover/Fokus BLAU #002F5D mit Transition);
   davor das kleine Close (Asset "Close klein.svg" in NATURGROESSE 13px, 28px-Klickflaeche - LEHRE R33),
   erscheint nur bei Eingabe (Inline-JS im Template, Muster 404/SERP); natives Such-X aus. */
.stm-evl__qgo{flex:0 0 auto;width:32px;height:32px;padding:0;border:0;cursor:pointer;color:var(--st-neutral-400,#888);background:currentColor;-webkit-mask:url("../img/icons/Suche%20Lupe%20-%20neutral%20400.svg") no-repeat center/32px 32px;mask:url("../img/icons/Suche%20Lupe%20-%20neutral%20400.svg") no-repeat center/32px 32px;transition:color .15s;}
.stm-evl__qgo:hover,.stm-evl__qgo:focus-visible{color:var(--st-color-primary,#002F5D);}
.stm-evl__qclear{flex:0 0 auto;width:28px;height:28px;padding:0;border:0;background:url("../img/icons/Close%20klein.svg") no-repeat center/38px 38px;cursor:pointer;} /* 17.09. (Maik, "arg winzig"): 38px Flaeche = 13px X-Glyphe (Asset-Padding), s. .stm-404__clear */
.stm-evl__qclear[hidden]{display:none;} /* explizit gegen globale button-Displayregeln (LEHRE R22) */
.stm-evl__f--q input::-webkit-search-cancel-button,.stm-evl__f--q input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;}
.stm-evl__reset{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:#fff;border:1px solid var(--st-neutral-300,#D1D1D1);border-radius:8px;color:var(--st-color-ink,#222);}
.stm-evl__reset:hover{color:var(--st-color-accent,#B51F29);}
.stm-evl__reset svg{max-width:none;}
.stm-evl__views{margin-left:auto;display:inline-flex;gap:8px;}
.stm-evl__view{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:none;border:0;border-radius:8px;padding:0;color:var(--st-neutral-500,#888);} /* 19.08. (Asana "Seite Veranstaltungen"): Rahmen kommt jetzt aus den Asset-Icons (Icon_Display_*_Active/Inactive bringen den 36er-Kasten mit) */
.stm-evl__view.is-active{color:var(--st-color-accent,#B51F29);border-color:var(--st-neutral-300,#D1D1D1);}
.stm-evl__view:hover svg *[fill]:not([fill="none"]):not([fill="white"]):not([fill="#fff"]):not([fill="#FFF"]):not([fill="#ffffff"]):not([fill="#FFFFFF"]){fill:var(--st-color-accent,#B51F29);} /* 20.08. R2 (Maik): Mouse-Over rot (CSS schlaegt SVG-Praesentationsattribute) */
.stm-evl__view:hover svg *[stroke]:not([stroke="none"]){stroke:var(--st-color-accent,#B51F29);}
.stm-evl__view svg{max-width:none;width:36px;height:36px;}
/* Inhalt */
.stm-evl__wrap{max-width:1369px;margin:0 auto;padding:0 24px 5rem;}
.stm-evl__month{margin:3.4rem 0 1.6rem;font-weight:700;font-size:clamp(1.7rem,2.6vw,2.25rem);line-height:1.1;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-evl__badge{position:absolute;top:0;left:0;background:var(--st-neutral-600,#5D5D5D);color:#fff;font-size:.75rem;line-height:1;font-weight:700;padding:5px 8px;letter-spacing:.04em;text-transform:none;} /* 02.08.: gleiche Hoehe wie Karussell-Badge (23px, Figma) */
/* Kategoriefarben dieser Seite */
[class*="is-cat-"]{--evc:var(--st-color-accent,#B51F29);} /* 26.08. (Maik): nur 3 Farben - alles ausser Gottesdiensten/Musik laeuft rot ("Sonstiges") */
.is-cat-gottesdienste{--evc:var(--st-color-gold,#D1AC57);}
.is-cat-musik{--evc:var(--st-color-primary,#002F5D);}
.stm-evl-row .stm-evl__badge,.stm-evl-tile .stm-evl__badge{background:var(--evc,#5D5D5D);}
/* Listenzeile */
.stm-evl-row{display:grid;grid-template-columns:312px 150px minmax(0,1fr) 250px;gap:0 34px;align-items:start;padding:34px 0;} /* 02.08.: Trennlinie raus, Abstand groesser (Ticket) */
.stm-evl-row__media{position:relative;}
.stm-evl-row__media a{position:relative;display:block;aspect-ratio:312/206;overflow:hidden;background:var(--st-neutral-100,#F6F6F6);}
.stm-evl-row__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-evl-row__room{margin:auto 0 0;padding-top:.6rem;display:flex;align-items:center;gap:.4rem;font-weight:700;font-size:.9rem;color:var(--st-color-primary,#002F5D);} /* 02.08.: sitzt jetzt unten in der Datumsspalte (Figma) */
.stm-evl-row__room svg{max-width:none;flex:0 0 auto;}
.stm-evl-row__date{display:flex;flex-direction:column;align-self:stretch;} /* 02.08.: Spalte streckt bis Bildunterkante (Ort unten) */
.stm-evl-row__day{font-weight:700;font-size:6.75rem;line-height:.9;color:var(--evc,#002F5D);letter-spacing:.02em;margin-top:-1.4rem;} /* 02.08.: Figma 108px, Zahl haengt leicht ueber die Bildoberkante */
.stm-evl-row__wd{margin-top:14px;font-weight:700;font-size:.95rem;line-height:1.38;text-transform:uppercase;color:var(--st-color-accent,#B51F29);} /* 02.08.: +5px unter der grossen Zahl (Ticket) */ /* 16.09. (Maik, "Termin Listenansicht"): Abstaende Tag->Datum->Uhrzeit um 1/4 reduziert - lh 1.6(geerbt) -> 1.38: Ink-Gap Tag->Datum gemessen 13.31 -> 9.98px (exakt -25%) */
.stm-evl-row__d{font-weight:700;font-size:.95rem;line-height:1.38;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-evl-row__d + .stm-evl-row__d{margin-top:.05rem;} /* 16.09. (Maik): Datum->Uhrzeit ebenfalls exakt -25% (10.31 -> 7.73px): die Datumszeile traegt 3px Ziffern-Unterlaenge (Meta-Pro-Mediaevalziffern), die reine lh-Reduktion wuerde diesen Gap um 32% druecken - +.05rem gleicht das aus (gemessen 7.78) */
.stm-evl-row__dr{display:contents;} /* 16.09. (Maik, Mobile-Figma): Markup-Wrapper um Tag/Datum/Uhrzeit/Ort - am Desktop per display:contents layoutneutral (Spans wirken direkt als Flex-Kinder wie vor dem Wrapper), mobil (<=640) wird er zur rechtsbuendigen Flex-Spalte */
.stm-evl-row__month{display:block;margin-top:24px;font-weight:700;font-size:1.05rem;line-height:1.2;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* 17.09. (Stefanie, "Single Terminen ... Monat unter der grossen Datumszahl"): Monat jetzt AUCH am Desktop sichtbar (Optik wie sgt-date__month, 1.05rem). margin 24px ZOOM-KALIBRIERT: die 108px-Zahl (lh .9, Mediaevalziffern) haengt mit ihrer Unterlaenge in die Folgezeile - bei .3rem schnitt die 05 den Monat an (gleiche Ursache und gleicher Wert wie die Mobile-Regel unten). Element existiert nur im MODUL-Markup (events.php Einzeltermine) - die Veranstaltungsseiten-Listen rendern es nicht, dort bleiben die Monats-Kapitel. */
.stm-evl-row__body{border-left:2px solid var(--evc,#002F5D);padding-left:34px;min-height:206px;}
.stm-evl-row__title{margin:0 0 .5rem;font-weight:700;font-size:1.25rem;line-height:1.3;}
.stm-evl-row__title a{color:var(--st-color-accent,#B51F29);text-decoration:none;}
.stm-evl-row__title a:hover{text-decoration:none;} /* 17.09. (Stefanie, Listenansicht): Hover-Underline im Titel raus (wie zuvor schon bei den Kacheln, R29) */
.stm-evl-row__sub{margin:0 0 .7rem;font-weight:700;font-size:1.02rem;line-height:1.4;color:var(--st-color-accent,#B51F29);}
.stm-evl-row__text{margin:0 0 .6rem;font-size:1rem;line-height:1.45;color:var(--st-color-ink,#222);}
.stm-evl-row__note{margin:0 0 .6rem;font-size:.95rem;line-height:1.4;color:var(--st-color-ink,#222);}
.stm-evl__more{display:inline-flex;align-items:center;gap:.55rem;font-weight:500;font-size:1rem;color:var(--st-color-ink,#222);text-decoration:none;}
.stm-evl__more span{font-weight:500;} /* 05.09. (Maik, Buttons-Ticket): Text-Links in MEDIUM (war 700) */
.stm-evl__more:hover{color:var(--st-color-secondary,#034B91);}
.stm-evl__more:active{color:var(--st-color-primary,#002F5D);} /* 05.09.: Pressed-State der Text-Link-Komponente */
.stm-evl-row__actions{display:flex;flex-direction:column;gap:14px;align-self:end;justify-self:end;} /* 02.08.: unten buendig mit dem Bild (Ticket) */
/* 18.09. R60 (Kunde, "Einzelveranstaltungen mit Monat: Bild in der Hoehe dem Datumsblock anpassen,
   Trennlinie unten buendig, CTAs unten buendig"): Nur die MODUL-Rows tragen .stm-evl-row__month
   (events.php) - dort ist der Datumsblock (Zahl+Monat+Block) hoeher als Bild und Linie. :has-Scope
   + min-width 1101: greift nur im Desktop-Spaltenlayout; mobil regelt das Datums-Grid den Monat.
   align-self:stretch zieht Bildzelle und Body (traegt die border-left-Linie) auf die Zeilenhoehe
   (= hoechstes Element, i.d.R. der Datumsblock); img height:100%/cover fuellt die Zelle;
   min-height:206px entfaellt im Stretch-Fall. CTAs stehen mit align-self:end bereits unten. */
@media (min-width:1101px){
	/* 14.10. R110 (Kunde, "Bilder im Modul langgezogen und links/rechts beschnitten"): Der
	   R60-Bild-Stretch (Bildzelle = Zeilenhoehe) ist RAUS - seit die R88-Werklisten die Zeilen
	   hoch machen, wurde aus "Bildhoehe = Datumsblock" ein Extrem-Crop (Zeilenhoehe >> 206px,
	   object-fit:cover schnitt links/rechts massiv). Das Bild behaelt jetzt ueberall sein
	   312/206-Seitenverhaeltnis (wie auf /veranstaltungen/, vom Kunden als "korrekt" benannt).
	   Die uebrigen R60-Punkte BLEIBEN: body align-self:stretch zieht die Trennlinie auf
	   Zeilenhoehe, die CTAs stehen mit align-self:end unten buendig. */
	.stm-evl-row:has(.stm-evl-row__month) .stm-evl-row__body{align-self:stretch;min-height:0;}
}
/* 26.08. (Maik): CTAs auf die globalen Button-Komponenten vereinheitlicht - Markup traegt jetzt
   .btn .btn--secondary/.btn--primary; Hoehe (60px), Radius, Chevron-Morph und Hover kommen aus dem
   System (stm-modules.css .btn-Block), hier nur noch Breite, Icon und der zweizeilige Innenaufbau. */
.stm-evl__btn{width:236px;justify-content:flex-start;gap:12px;padding:0 1.3rem 0 1.1rem;}
.stm-evl__btn::after{margin-left:auto;}
.stm-evl__btn .btn__ico{flex:0 0 auto;display:inline-flex;}
.stm-evl__btn .btn__ico svg{width:22px;height:22px;max-width:none;display:block;}
.stm-evl__btn .btn__ico svg *[fill]:not([fill="none"]){fill:currentColor;} /* Asset-Icons folgen der Buttonfarbe (auch im Hover) */
.stm-evl__btn-txt{display:flex;flex-direction:column;align-items:flex-start;flex:0 1 auto;min-width:0;text-align:left;line-height:1.15;}
.stm-evl__btn-txt strong{font-size:.95rem;font-weight:700;}
.stm-evl__btn-txt small{font-size:.75rem;font-weight:400;}
/* Kacheln */
.stm-evl__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:3rem 24px;}
.stm-evl__month + .stm-evl__grid{margin-top:60px;} /* 18.09. R60 (Kunde, "Kachelansicht: gleicher Abstand zwischen Monat und Terminen wie in Listenansicht"): Liste = Monats-margin 1.6rem + Row-padding-top 34px = 60px Ink-Abstand (iframe-gemessen). ACHTUNG Margin-Collapse: margin-bottom des Monats und margin-top des Grids kollabieren zum MAXIMUM - deshalb direkt 60px (nicht +34; erste Version ergab kollabierte 34px). */
.stm-evl-tile__media{position:relative;display:block;aspect-ratio:312/206;overflow:hidden;background:var(--st-neutral-100,#F6F6F6);}
.stm-evl-tile__img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-evl-tile__date{margin:.9rem 0 .3rem;font-weight:700;font-size:.98rem;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-evl-tile__title{margin:0 0 .4rem;font-weight:700;font-size:1.1rem;line-height:1.3;}
.stm-evl-tile__title a{color:var(--st-color-accent,#B51F29);text-decoration:none;}
/* 16.09. (Maik, "Modul Termin Kacheln"): Hover-Unterstreichung ENTFERNT (a:hover{underline} stand hier seit dem Raster-Erstbau 02.08. und fiel erst nach der Format-Angleichung an die Karussells auf) - Verhalten wie im Termin-Karussell: dort wechselt der Titel beim Hover nur die Farbe (blau -> rot, .nkar-card__inner:hover), nichts wird unterstrichen; der Kachel-Titel IST bereits rot, also beim Hover keine Veraenderung - wie News-Kacheln/News-Karussell auch. */
.stm-evl-tile__text{margin:0 0 .55rem;font-size:.98rem;line-height:1.4;color:var(--st-color-ink,#222);}
/* Paginierung + Leerzustand */
/* 16.09. (Kunde, "Paginierung", global nach Figma): Zahlen BOLD, Active #002F5D (OHNE Unterstrich),
   Inactive #B0B0B0, Hover #034B91 + Unterstrich, Pressed #002F5D + Unterstrich; Pfeile = gelieferte
   Assets "Slider Arrow Paginierung" (Default blau / Hover rot, so liefert es das Asset). Identische
   Optik fuer .stm-evl__pager (Veranstaltungsseite, WP-page-numbers-Klassen) und .stm-pagination
   (News-/Termine-Archive) - EIN Regelblock je Eigenschaft, damit nichts driftet. */
.stm-evl__pager{margin-top:3.4rem;display:flex;align-items:center;justify-content:center;gap:16px;}
.stm-evl__pager .page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:1.2em;color:var(--st-neutral-300,#B0B0B0);font-weight:700;text-decoration:none;}
.stm-evl__pager .page-numbers.current{color:var(--st-color-primary,#002F5D);}
.stm-evl__pager a.page-numbers:hover,.stm-evl__pager a.page-numbers:focus-visible{color:var(--st-color-secondary,#034B91);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:2px;}
.stm-evl__pager a.page-numbers:active{color:var(--st-color-primary,#002F5D);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:2px;}
.stm-evl__pager a.page-numbers.prev,.stm-evl__pager a.page-numbers.next{min-width:24px;width:24px;height:24px;background:url("../img/icons/Slider%20Arrow%20Paginierung%20left%20default.svg") no-repeat center/24px 24px;text-decoration:none;background-position:center,-60px -60px;background-size:24px 24px,1px 1px;background-repeat:no-repeat;} /* 17.09. (Maik, Paginierung R2): Hover-Varianten vorgeladen (geparkte Zweitebene) - kein Aufblitzen beim ersten Hover */
.stm-evl__pager a.page-numbers.prev{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20left%20default.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20left%20hover.svg");}
.stm-evl__pager a.page-numbers.next{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20right%20default.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20right%20hover.svg");}
.stm-evl__pager a.page-numbers.prev:hover,.stm-evl__pager a.page-numbers.prev:active{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20left%20hover.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20left%20default.svg");}
.stm-evl__pager a.page-numbers.next:hover,.stm-evl__pager a.page-numbers.next:active{background-image:url("../img/icons/Slider%20Arrow%20Paginierung%20right%20hover.svg"),url("../img/icons/Slider%20Arrow%20Paginierung%20right%20default.svg");}
.stm-evl__pager .page-numbers.prev svg,.stm-evl__pager .page-numbers.next svg{display:none;} /* Inline-SVG-Altpfeile aus paginate_links raus - Grafik kommt aus dem Asset */
.stm-evl__empty{margin:4rem 0;font-size:1.1rem;color:var(--st-color-ink,#222);}
@media (max-width:1100px){
  /* 18.09. R60 (Kunde, "Listenansicht Zwischengroessen: Bild auf Satzspiegelbreite, buendig links
     zum grossen Datum und rechts zum Block Uhrzeit/Ort"): Das 240px-Spaltenlayout entfaellt - die
     Zwischengroessen uebernehmen die MOBILE Row-Struktur (Bild volle Breite oben, darunter das
     Datums-Grid). Die Struktur-Regeln sind aus dem <=640-Block HIERHER gezogen (gelten jetzt
     <=1100); im <=640-Block verbleiben nur die Mobil-Sonderfaelle (u.a. media max-width 340px).
     Datums-Grid-Kommentare/Kalibrierungen: siehe urspruenglicher 16.09.-Block. */
  .stm-evl-row{grid-template-columns:minmax(0,1fr);}
  .stm-evl-row__date{display:grid;grid-template-columns:auto auto minmax(0,1fr);grid-template-rows:auto auto;gap:0 12px;align-items:start;margin:1rem 0 1.6rem;} /* 18.09. R60 (Kunde): margin-bottom .4 -> .8rem = Abstand Datums-Block -> Termintitel verdoppelt */ /* 18.09. R60b (Johann, Nachschlag "hier muss der Abstand noch groesser - siehe rechtes Bild"): .8 -> 1.6rem (Ink-Gap ~26px statt 13) - gilt fuer Listen- UND Modul-Rows inkl. Monats-Variante (SEPTEMBER unter der Zahl) */
  .stm-evl-row__day{grid-area:1/1;margin-top:-24px;}
  .stm-evl-row__date::before{content:"";grid-column:2;grid-row:1 / span 2;width:3px;background:var(--evc,#002F5D);align-self:stretch;margin:4px 0 2px;}
  .stm-evl-row__month{display:block;grid-area:2/1;margin-top:24px;font-weight:700;font-size:.95rem;line-height:1.38;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
  .stm-evl-row__dr{display:flex;grid-area:1/3/span 2/4;flex-direction:column;align-items:flex-end;text-align:right;}
  .stm-evl-row__wd{margin-top:0;}
  .stm-evl-row__room{margin:0;padding-top:.35rem;justify-content:flex-end;}
  .stm-evl-row__body{border-left:0;padding-left:0;min-height:0;}
  .stm-evl-row__actions{grid-column:1;margin-top:27px;}
  .stm-evl__grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .stm-evl__filter{flex-wrap:wrap;position:static;background:var(--st-neutral-100,#F6F6F6);}
  /* 13.09. (Kunde, "Mobile Ansicht von Veranstaltung"): KERNFIX max-height:none - die Basisregel
     kappt den Hero auf 72vh, mobil ist sein INHALT (Bild + eingeflossene Box + statische Filter-
     leiste) aber deutlich hoeher. Die Kinder liefen deshalb ueber die Header-Unterkante hinaus
     UEBER den Folgecontent (gemessen 390px: Header-Fluss ~910px, Kappe 608px - Monatstitel lag
     HINTER der halbtransparenten Filterleiste, "Layer liegt komisch im Hintergrund"; Box ragte
     ueber die Kappe, "HL-Box laeuft ueber Content"). */
  .stm-evl__hero,.stm-evl__hero--s,.stm-evl__hero--m,.stm-evl__hero--l{aspect-ratio:auto;min-height:0;max-height:none;height:auto;} /* 17.09. (Stefanie, "komische verschobene Sachen in den Zwischengroessen"): Die GROESSENVARIANTEN (--s/--m/--l, FESTE height 500/600/717) schlugen die Entkappung (0-2-0 > 0-1-0) - der Hero blieb bei 641-1100 z.B. 717px hoch, waehrend Box und Filterleiste im Fluss darunter weiterliefen: Box ragte 290px ueber die Hero-Unterkante, Monats-Kapitel und erste Zeile lagen DAHINTER (gemessen 1031px). height:auto fuer Basis UND Varianten -> Hero-Hoehe = Bild + Box + Filter, Content folgt sauber. */
  .stm-evl__hero-img{position:relative;aspect-ratio:16/10;}
  .stm-evl__hero .stm-slider{position:relative;inset:auto;aspect-ratio:16/10;}
  /* 13.09.: Dots + Pfeile UEBER die Box-Ueberlappung heben (Box ragt 56px ins Bild) - Dots lagen
     AUF der Box (bottom:12), die Kreis-Pfeile (bottom:24) wurden von ihr verdeckt. */
  .stm-evl__hero .stm-slider__dots{bottom:68px;}
  .stm-evl__hero .stm-slider__prev,.stm-evl__hero .stm-slider__next{bottom:68px;}
  .stm-evl__hero-box{position:relative;top:auto;bottom:auto;margin:-56px 16px 0 0;} /* 26.08. (Maik): Box ragt ins Bild, Filter folgt DARUNTER statt ueberdeckt zu werden */
  .stm-evl__hero .stm-imgcredit{bottom:56px;} /* 18.09. R62 ("andocken"): exakt auf der Box-Oberkante - die Box ragt fix -56px ins Bild (Regel oben), die Filterleiste liegt mobil DARUNTER im Fluss; naechste Kante unterm Copyright ist hier also die Box, und die 8px-Luft aus R58 entfaellt analog Desktop. */ /* 18.09. R58: Vorgeschichte - Box (z3) verdeckte die Plakette (z2) an der Bild-Unterkante komplett; 64px = 56 Ueberlappung + 8 Luft. */

}
@media (max-width:640px){
  /* 18.09. R60: Row-Struktur-Regeln (Datums-Grid etc.) in den <=1100-Block gezogen (Zwischengroessen-Ticket) - hier nur noch Mobil-Sonderfaelle */
  /* 21.09. R64 (Stefanie, "Zwischengroessen Tablet/Mobile: Skalierung des Bildes auf Satzspiegel-
     breite stimmt noch nicht"): max-width:340px ENTFERNT. Die 340 waren ein absoluter Schnappschuss
     des 390er-Figma (Satzspiegel dort 358) - bei 500-640px Viewport blieb das Bild dadurch bei 340
     stehen (Kunden-Screenshot pixelvermessen: exakt 340 CSS-px bei DPR2) statt wie ab R60 gefordert
     auf Satzspiegelbreite zu laufen, buendig links Datum / rechts Uhrzeit-Ort. Ohne Cap greift die
     1fr-Spalte aus dem <=1100-Block auf der GESAMTEN Mobilstrecke; am 390er-Geraet wird das Bild
     dadurch 358 statt 340 breit (+18px, buendig mit dem Datumsblock - die Buendigkeits-Logik des
     Tickets, kein Design-Bruch). Hoehe folgt via aspect-ratio 312/206 am Anker. */
  /* 16.09. (Maik, Mobile-Figma "Listenansicht"): Datumsblock nach Figma - grosse Zahl links,
     vertikale Linie direkt daneben, Tag/Datum/Uhrzeit/Ort als RECHTSBUENDIGER Block am rechten
     Satzspiegelrand. Technik: 3-Spalten-Grid [Zahl+Monat | Linie | Restbreite]; die Linie ist das
     ::before-Pseudo als eigenes GRID-ITEM ueber beide Zeilen (align-self:stretch) - dadurch richtet
     sie sich automatisch an der Gesamthoehe Zahl+Monat aus: auf der Veranstaltungsseite (Monats-
     KAPITEL vorhanden, kein Monat unter der Zahl -> Zeile 2 kollabiert auf 0) ist sie so hoch wie
     die Zahl, im Modul (Monat unter der Zahl, events.php) so hoch wie Zahl+Monat - exakt die
     Ticket-Vorgabe. Margins der Linie sind ink-kalibriert auf die Ziffern-Glyphkante (s. Verify). */
  .stm-evl__month{margin-bottom:.44rem;} /* 16.09. (Maik, "Monat als Kapitel: Abstand -1/3"): Ink-Abstand Kapitel -> erste Karte von 55.5 auf gemessen 37.0px (exakt -1/3) */
  .stm-evl__month + .stm-evl__grid{margin-top:41px;} /* 18.09. R60: mobiles Pendant - Liste mobil = .44rem Monats-margin + 34px Row-padding = 41px; Collapse nimmt das Maximum */
  .stm-evl__grid{grid-template-columns:minmax(0,1fr);}
  /* 13.09. (Kunde, "Mobile Ansicht von Veranstaltung"): Filterfelder GESTAPELT wie im Figma -
     jedes Feld volle Satzspiegelbreite (statt wild umbrechender Flex-Reste), Reset + Ansichts-
     Schalter als Schlusszeile. */
  .stm-evl__filter{padding:16px 24px;gap:10px;}
  .stm-evl__f{width:100%;}
  .stm-evl__f--date input{width:100%;flex:1 1 auto;}
  .stm-evl__f--date .stm-evl__pick{margin-left:auto;}
  .stm-evl__f--kat select{width:100%;min-width:0;text-align:left;text-align-last:left;background-position:right 8.5px center;padding-right:31px;} /* 17.09. (Stefanie, "Icons horizontal zentriert untereinander"): Chevron-MITTE auf die gemeinsame 28px-Achse der gestapelten Felder (right 8.5 + 7.5 Halbbreite + 12 Feldpadding = 28; Kalender-Icon 28, Lupe 28) - nur mobil, die Desktop-Zentrierung "zwischen Auge und Chevron" (R36) bleibt unangetastet */
  .stm-evl__f--date .stm-evl__pick{margin-right:1px;} /* Icon-Mitte auf die gemeinsame Achse mit Chevron/Lupe (live kalibriert: positive Marge schiebt das Flex-Item nach LINKS; 318px-Achse aller drei Icons bei 390px gemessen) */
  .stm-evl__f--q{flex:1 1 100%;}
}
/* Fix 28.07.: globale h3-Versalien fuer Veranstaltungs-Titel aufheben (Figma: Mischschreibung) */
.stm-evl-row__title,.stm-evl-tile__title{text-transform:none;}

/* ==== Newsletter-Modul Rework (Figma Newsletter-Anmeldeseite, 28.07.2026) ==== */
.stm-nlx .module__kicker{margin-bottom:.6rem;}
.stm-nlx__grid{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:2rem 64px;align-items:start;margin-top:2.2rem;} /* 11.09. (Ticket "Newsletter Anmeldung"): Headline+Copy stehen jetzt VORM Grid (Template) - der 2.2rem-Abstand, den vorher die Liste trug, haengt am Grid, damit Checkboxen UND Formular gemeinsam oben starten (rechte Spalte buendig mit erster Checkbox, Figma-Soll) */
.stm-nlx__head{margin:0 0 1.1rem;font-weight:700;font-size:1.35rem;line-height:1.25;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-nlx__copy p{margin:0 0 1em;font-size:1.05rem;line-height:1.55;color:var(--st-color-ink,#222);}
.stm-nlx__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.6rem;} /* 11.09.: 2.2rem-Top-Marge ans Grid gewandert (s. dort) - die Liste selbst startet auf Grid-Oberkante, buendig mit dem Formular rechts */
.stm-nlx__item{display:grid;grid-template-columns:22px 44px minmax(0,1fr);gap:0 16px;align-items:start;}
.stm-nlx__cb{position:absolute;opacity:0;width:1px;height:1px;}
.stm-nlx__box{width:20px;height:20px;margin-top:12px;border:1.5px solid var(--st-neutral-400,#B0B0B0);border-radius:3px;background:#fff;cursor:pointer;position:relative;}
.stm-nlx__cb:checked + .stm-nlx__box{border-color:var(--st-color-primary,#002F5D);}
.stm-nlx__cb:checked + .stm-nlx__box:after{content:"";position:absolute;left:4px;top:1px;width:8px;height:12px;border:solid var(--st-color-primary,#002F5D);border-width:0 2.5px 2.5px 0;transform:rotate(40deg);}
.stm-nlx__cb:focus-visible + .stm-nlx__box{outline:2px solid var(--st-color-secondary,#034B91);outline-offset:2px;}
.stm-nlx__ico{width:44px;height:44px;background:var(--st-color-primary,#002F5D);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:2px;}
.stm-nlx__ico .stm-ic,.stm-nlx__ico svg{width:26px;height:26px;max-width:none;display:block;}
.stm-nlx__ico img{width:26px;height:26px;object-fit:contain;display:block;}
.stm-nlx__title{display:block;font-weight:700;font-size:1rem;line-height:1.3;text-transform:uppercase;color:var(--st-color-accent,#B51F29);cursor:pointer;}
.stm-nlx__desc{margin:.2rem 0 0;font-size:.98rem;line-height:1.45;color:var(--st-color-ink,#222);}
.stm-nlx__hiddenfield{position:absolute !important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);padding:0 !important;margin:0 !important;}
.stm-nlx .wpforms-container{background:none;max-width:none;}
.stm-nlx__right div.wpforms-container-full:not(:empty){margin-top:0;} /* 11.09. (Ticket "Newsletter Anmeldung" R2): WPForms bringt 24px eigene Top-Marge mit (Plugin-Regel div.wpforms-container-full:not(:empty), Spezifitaet 0-2-1 - schlaegt auch die Theme-Regel .module--newsletter .wpforms-container aus main.css) - das sichtbare erste Feld startete dadurch 24px UNTER dem obersten Icon, obwohl die Spalten-Oberkanten seit R1 buendig sind. Selektor hier 0-3-1, gewinnt unabhaengig von der Ladereihenfolge -> Formular-Oberkante = Icon-Oberkante */
.stm-nlx__right .wpforms-form .wpforms-field:first-child:not(.stm-nlx__hiddenfield),
.stm-nlx__right .wpforms-form .stm-nlx__hiddenfield + .wpforms-field{padding-top:0;} /* 11.09. R3 (Johann-DevTools-Screenshot): LETZTE Restluft - unsere eigene Feld-Rhythmus-Regel (body div.wpforms-container-full ... .wpforms-field{padding:9px 0}, Formular-Runde, Spezifitaet 0-3-2 - die ELEMENT-Anteile zaehlen mit!) gibt auch dem ERSTEN sichtbaren Feld 9px Top-Padding; das weisse Anrede-Feld (choices-Wrapper) startete damit 9px unterm Icon, obwohl die FELD-Box buendig war. Beide Arme hier 0-4-0+ (4 Klassen bzw. Pseudoklassen) -> gewinnen sicher. Faelle: verstecktes Auswahlfeld zuerst im Formular (Adjazenz-Arm) ODER sichtbares Feld direkt als erstes Kind. Zwischen den Feldern bleibt der 9px-Rhythmus unveraendert */
/* 13.09. R12 (Kunde, "der Fehler ist wieder da"): die beiden Positions-Arme oben scheitern, sobald
   WEITERE unsichtbare Felder vor dem ersten sichtbaren stehen - Maik hat dem Formular per
   WPForms-Option "Feld ausblenden" zwei versteckte Felder hinzugefuegt (field_7/field_8, per
   ID-Inline-Regel position:absolute); der Adjazenz-Arm nullte damit das FALSCHE (unsichtbare) Feld
   und "Anrede" behielt die 9px. Sichtbarkeit kann CSS nicht selektieren -> das Inline-JS der
   Newsletter-Ausspielungen (newsletter.php + newsletter-layer.php) markiert jetzt das erste NICHT
   versteckte Feld mit .stm-nlx__firstfield. 0-4-0 schlaegt die 9px-Rhythmusregel (0-3-2).
   LEHRE: Positions-Selektoren fuer "erstes sichtbares X" sind IMMER eine tickende Regression,
   wenn Redakteure die Struktur aendern koennen - Sichtbarkeit gehoert ins JS. */
.stm-nlx .stm-nlx__right .wpforms-form .stm-nlx__firstfield{padding-top:0;}
@media (max-width:900px){.stm-nlx__grid{grid-template-columns:minmax(0,1fr);}}

/* ==== Formular-Modul 2-spaltig (Figma Newsletter-Anmeldeseite, 28.07.2026) ==== */
.stm-formx__headline{margin:.1em 0 .6em;font-weight:700;font-size:var(--stm-h2-size);line-height:var(--stm-h2-lh);text-transform:uppercase;} /* 21.08.: globale H2 */
.stm-formx__grid{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,6fr);gap:2rem 64px;align-items:start;margin-top:1.4rem;}
.stm-formx__subhead{margin:0 0 1rem;font-weight:700;font-size:1.15rem;line-height:1.3;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.stm-formx__text p{margin:0 0 1em;font-size:1.05rem;line-height:1.55;color:var(--st-color-ink,#222);}
.stm-formx .wpforms-container{max-width:none;}
@media (max-width:900px){.stm-formx__grid{grid-template-columns:minmax(0,1fr);}}
/* Fix 28.07.: Newsletter-Icons = Original-SVGs aus Figma; Kachel 66px/r6, Checkbox 22px (Figma-Masse) */
.stm-nlx__item{grid-template-columns:24px 66px minmax(0,1fr);}
.stm-nlx__box{width:22px;height:22px;border-radius:4px;margin-top:22px;border-color:var(--st-color-primary,#002F5D);}
.stm-nlx__cb:checked + .stm-nlx__box:after{left:5px;top:2px;}
.stm-nlx__ico{width:66px;height:66px;border-radius:6px;}
.stm-nlx__ico .stm-ic,.stm-nlx__ico svg{width:auto;height:42px;}
.stm-nlx__txt{padding-top:0;margin-top:-3px;} /* 09.09. (Maik, Newsletter-Ticket): Textblock OPTISCH oben buendig ans Icon - die Versal-Oberkante des Titels liegt fontmetrisch ~3px unter der Blockoberkante (ff-meta 16px/1.3: Half-Leading -1.1 + Ascent 18 - Versal-Ascent 12); -3px Margin hebt die Titel-VERSALIEN auf die Icon-Oberkante (nachgemessen per Canvas-Fontmetrik: Rest-Offset 0.1px; -5px waren 2px zu hoch, das alte +2px-Padding entfaellt) */

/* ==== Bild-Copyright-Overlay (Media-Felder, Figma "Bild: Max Mustermann", 28.07.2026) ==== */
.stm-imgwrap{position:relative;display:block;width:100%;height:100%;}
.stm-imgwrap > img{display:block;}
.stm-imgcredit{position:absolute;left:0;bottom:0;z-index:2;background:rgba(34,34,34,.68);color:#fff;font-size:.72rem;line-height:1.2;font-weight:400;padding:.28rem .6rem;pointer-events:none;max-width:92%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* ==== Audio-Button auf Bildern (Media-Feld img_audio, Asana "Audio-Links im Bild", 10.08.2026) ====
   Weisse Pille unten rechts nach Kundenmock "Jetzt reinhören + Note". role="link"-Span,
   Klick uebernimmt stm-modules.js (kein <a>, weil Bilder oft schon in Links stecken). */
.stm-imgaudio{position:absolute;right:16px;bottom:16px;z-index:2;display:inline-flex;align-items:center;justify-content:center;gap:.625em;
	background:#fff;color:var(--st-color-primary,#002f5d);font-family:var(--st-font-head,inherit);font-weight:400;
	font-size:1rem;line-height:1;height:37.5px;padding:0 1.22rem;border-radius:999px;cursor:pointer;user-select:none;
	box-shadow:0 2px 10px rgba(0,0,0,.18);white-space:nowrap;max-width:calc(100% - 32px);} /* 05.09. (Maik, Buttons-Ticket): Sound-Button auf Bildern IMMER in der Groesse von CTA-Button (klein) - exakt .btn--sm-Masse (50px, 1rem/400, Padding 1.22rem = -1/4), war eigene Pille .85em/1.4em fett */
/* 05.09. (Maik): States laut Ticket - Default Flaeche weiss Typo+Icon #002F5D, Hover Flaeche weiss Typo+Icon #B51F29, Active/Playing Flaeche #B51F29 Typo+Icon weiss, nach Soundende Default (Icon haengt via currentColor an der Textfarbe - Default ist damit BLAU, war faelschlich immer rot) */
.stm-imgaudio:hover,.stm-imgaudio:focus-visible{color:var(--st-color-accent,#B51F29);}
.stm-imgaudio.is-playing{background:var(--st-color-accent,#B51F29);color:#fff;}
.stm-imgaudio.is-playing .stm-imgaudio__ico{background:#fff;}
.stm-imgaudio__label{overflow:hidden;text-overflow:ellipsis;}
.stm-imgaudio__ico{flex:0 0 auto;width:1.05em;height:1.2em;background:currentColor;
	-webkit-mask:url(../img/icons/audio-note.svg) no-repeat center/contain;mask:url(../img/icons/audio-note.svg) no-repeat center/contain;}
.mega .stm-imgaudio{display:none;} /* 10.08.: Mega-Menue-Teaser sind selbst Link-Karten - dort keine Audio-Pille (Credit bleibt) */
/* Hero: bei Slidern sitzen unten rechts die Pfeile -> Audio-Pille darueber */
.hero-slider:not(.is-single) .stm-imgaudio{right:24px;bottom:84px;}
.hero-slider.is-single .stm-imgaudio{right:24px;bottom:24px;}
@media(max-width:900px){ .stm-imgaudio{right:12px;bottom:12px;} } /* 05.09. (Maik): mobil KEINE Verkleinerung mehr (war .85rem) - der Bild-Sound-Button ist IMMER CTA-klein-Groesse; nur die Position rueckt naeher an die Bildkante */

/* ---------- WYSIWYG-Formate: CTAs, Icon-Links, Zwischenheadlines (2026-07-29) ---------- */
.module h4,.module h5{margin:1.4em 0 .5em;line-height:1.15;color:var(--st-color-primary,#002F5D);text-transform:uppercase;font-weight:700;}
.module h4{font-size:1.75rem;line-height:1.875rem;} /* 10.09. (Maik, "Line Height H4 und H5"): 28/30 - die 22px aus der 21.08.-Runde waren zu wenig (Zeilen klebten aneinander); Zuordnung der Ticket-Werte per Rueckfrage bestaetigt (H4 -> 30, H5 -> 22 - die Pfeile im Ticket waren vertauscht, woertlich haette H4 auf den bemaengelten 22 bleiben muessen) */
@media (max-width:1000px){ .module h4{font-size:1.4583rem;line-height:1.5625rem;} } /* 07.09. (Maik, "Modul H4"): Mobile -1/6 (28 -> 23.3px); 10.09.: Zeilenhoehe proportional zur neuen 30er (30 x 5/6 = 25px); Breakpoint 1000 = globaler Mobile-Switch */
.module h5{font-size:1.25rem;line-height:1.375rem;} /* 10.09. (Maik, "Line Height H4 und H5"): 20/22 - die 34px aus der 21.08.-Runde waren zu viel (Zuordnung per Rueckfrage bestaetigt, s. H4) */
@media (max-width:1000px){ .module h5{font-size:1.0417rem;line-height:1.1458rem;} } /* 10.09. (Rueckfrage Johann): H5 mobil ebenfalls -1/6 wie die H4 aus dem "Modul H4"-Ticket (20 -> 16.7px, Zeilenhoehe proportional 22 -> 18.3px) */
.module h6{margin:1.4em 0 .25em;line-height:1.2;color:var(--st-color-accent,#B51F29);text-transform:uppercase;font-weight:700;font-size:.95rem;} /* 21.08.: Groesse bleibt, Abstand zur H2/H3 verringert */
.module h4:first-child,.module h5:first-child,.module h6:first-child{margin-top:0;}
.module p>a.btn{margin:.35em .6rem .35em 0;}
a.stm-il{display:inline-flex;align-items:flex-start;gap:6px;font-weight:400;color:var(--st-color-accent,#B51F29);text-decoration:none;} /* 07.09. (Maik, "Icon-Links"): Gap 6px wie Figma (Bulletpoint: Icon 20, Text ab x=26; war .45em=9px) */ /* 10.09. (Maik, "Zeilenabstand Aufzaehlung"): flex-start statt center - bei MEHRZEILIGEN Eintraegen haengt das Icon sonst mittig am ganzen Block statt buendig an der ersten Zeile; die Erste-Zeile-Zentrierung uebernimmt der margin-top am ::before */
a.stm-il:hover,a.stm-il:focus-visible{color:var(--st-color-accent,#B51F29);}
a.stm-il:hover::before,a.stm-il:focus-visible::before{background-image:var(--ilh,var(--il));}
a.stm-il::before{margin-top:6px;margin-top:calc((1lh - 20px)/2 + 1px);} /* 10.09. (Maik, "Zeilenabstand Aufzaehlung"): Icon in der ERSTEN Zeile zentrieren ((Zeilenhoehe - 20px Icon)/2) plus optischer Versatz des gelieferten Icons; lh-Einheit = Zeilenhoehe des Links (Standard-Copy 30px), die px-Zeile davor ist der Fallback fuer Browser ohne lh-Unit */ /* 13.09. (Kunde): "+2px war etwas zu grosszuegig, sitzt zu tief" -> Versatz von +2 auf +1px reduziert (Fallback 7 -> 6px) */
.stm-team-card__iconlink a.stm-il{align-items:flex-start;} /* 14.09. (Kunde, "Icon Links"): KEIN Team-Sonderweg mehr ("es sollen ueberall einheitlich nur noch die angepassten Icon-Links verwendet werden ... aktuell sitzt das Icon in den Team-Modulen hoeher") - der 10./13.09.-Override (align-items:center + margin-top:-1px) ist raus, es gilt exakt die Basiskomponente: flex-start + ::before-margin calc((1lh - 20px)/2 + 1px), die sich ueber die lh-Einheit von selbst an die Team-Zeilenhoehe (1.2 statt 1.5) anpasst. Diese Zeile bleibt NUR, weil die aeltere Teamkarten-Regel (.stm-team-card__iconlink a, ~Z.1185, align-items:center) sonst die Basis (a.stm-il, 0-1-1) schlaegt. */
a.stm-il::before{content:"";width:20px;height:20px;flex:0 0 auto;background-image:var(--il),var(--ilh,var(--il));background-position:center,-40px -40px;background-size:contain,1px 1px;background-repeat:no-repeat;} /* 07.09. (Maik, "Icon-Links"): Icons GLOBAL auf die Figma-Groesse 20x20 fixiert (Bulletpoint-Komponente, Desktop UND Mobile identisch; war 1.35em = 27px bei 20px-Copy) */ /* 08.09. R2 (Maik, "Preload"): die rote Hover-Variante haengt als ZWEITE Background-Ebene mit am Icon (bei -40px/-40px geparkt, 1px klein -> ausserhalb der 20px-Box geclippt, unsichtbar) - Chrome laedt sie damit, SOBALD DAS ICON GEMALT WIRD (live gemessen: Fetches folgen der Scroll-Position), also immer bevor man es hovern kann; vorher lud die -red.svg erst beim ERSTEN Hover und das Icon flackerte. WICHTIG: Groesse 1px, NICHT 0 - eine 0x0-Ebene laedt Chrome gar nicht erst (gemessen: 0 Fetches). Die Hover-Regel darueber tauscht dann aus dem Cache (bei nur einem Bild greifen die ersten Werte der Longhand-Listen: center/contain) */
.stm-il--email{--il:url(../img/icons/il-email.svg);--ilh:url(../img/icons/il-email-red.svg);}
.stm-il--phone{--il:url(../img/icons/il-phone.svg);--ilh:url(../img/icons/il-phone-red.svg);}
.stm-il--website{--il:url(../img/icons/il-website.svg);--ilh:url(../img/icons/il-website-red.svg);}
.stm-il--file-pdf{--il:url(../img/icons/il-file-pdf.svg);--ilh:url(../img/icons/il-file-pdf-red.svg);}
.stm-il--file-download{--il:url(../img/icons/il-file-download.svg);--ilh:url(../img/icons/il-file-download-red.svg);}
.stm-il--calendar{--il:url(../img/icons/il-calendar.svg);--ilh:url(../img/icons/il-calendar-red.svg);}
.stm-il--ticket{--il:url(../img/icons/il-ticket.svg);--ilh:url(../img/icons/il-ticket-red.svg);}
.stm-il--webshop{--il:url(../img/icons/il-webshop.svg);--ilh:url(../img/icons/il-webshop-red.svg);}
.stm-il--facebook{--il:url(../img/icons/il-facebook.svg);--ilh:url(../img/icons/il-facebook-red.svg);}
.stm-il--instagram{--il:url(../img/icons/il-instagram.svg);--ilh:url(../img/icons/il-instagram-red.svg);}
.stm-il--linkedin{--il:url(../img/icons/il-linkedin.svg);--ilh:url(../img/icons/il-linkedin-red.svg);}
.stm-il--pinterest{--il:url(../img/icons/il-pinterest.svg);--ilh:url(../img/icons/il-pinterest-red.svg);}
.stm-il--x{--il:url(../img/icons/il-x.svg);--ilh:url(../img/icons/il-x-red.svg);}
.stm-il--xing{--il:url(../img/icons/il-xing.svg);--ilh:url(../img/icons/il-xing-red.svg);}
.stm-il--youtube{--il:url(../img/icons/il-youtube.svg);--ilh:url(../img/icons/il-youtube-red.svg);}

/* ---------- Auto-Headline: JS faerbt die letzte gerenderte Zeile (2026-07-29) ---------- */
.stm-hl{display:block;color:var(--st-color-primary,#002F5D);}
.stm-hl .stm-hl__last{color:var(--st-color-accent,#B51F29);}

/* ---------- Footer-Metazeile nach Figma: Links verteilt, Logo mittig, durchgehende Linie (2026-07-29) ---------- */
@media(min-width:783px){
	.site-footer__bottom{display:block;position:relative;margin-top:48px;padding-top:72px;border-top:0;}
	/* Links sitzen UNTEN: Unterkante-Text ~12px ueber der Linie, Text-Mitte auf Logo-Unterkante
	   (Figma 8001-15513). Alt-CSS gab der ul 26px Padding + zentrierte sie -> Links rutschten hoch. */
	.site-footer__meta{border-bottom:1px solid #fff;padding-bottom:7px;display:flex;align-items:flex-end;}
	.site-footer__meta::before{content:none;} /* alte Zwischenlinie des frueheren Footers */
	.site-footer__meta-menu{display:flex;justify-content:flex-start;gap:clamp(40px,15vw,180px);width:100%;padding:0;margin:0;} /* 08.09. (Johann, "was ist mit dem Footer passiert"): space-between legte bei genau DREI Menuepunkten den mittleren (Datenschutzerklaerung) exakt unter das zentrierte Logo. Figma 8001:15544 hat die Legals in ZWEI GRUPPEN (links/rechts, Mitte frei fuers Logo, Cluster-Gap 180px bei 1200) - jetzt: linksbuendige Gruppe + ... */
	.site-footer__meta-menu li:nth-last-child(2){margin-left:auto;} /* ...der VORLETZTE Punkt beginnt die rechte Gruppe (zaehlerrobust: 3 Links = 1+2, 4 Links = 2+2 wie im Figma; margin-left:auto schiebt ihn samt Nachfolgern nach rechts). Ausloeser war vermutlich ein neu ins Menue gelegter dritter Punkt - das CSS hier ist seit 29.07. unveraendert */
	/* Logo sitzt AUF der Linie: Wrapper nur als Anker (alte Wrapper-Hoehe lief sonst ueber), Bild selbst positioniert */
	.site-footer__bottom .site-footer__logo--center{position:absolute;left:0;right:0;bottom:0;top:auto;height:0;transform:none;display:block;}
	.site-footer__bottom .site-footer__logo-img{position:absolute;left:50%;bottom:19px;transform:translateX(-50%);width:68px;height:auto;display:block;} /* Figma 8001-15513: Logo 68x80, Unterkante 18px UEBER der Linie */
}

/* ---------- Headlines: Maximalbreite 760px, kein Volllauf ueber die ganze Breite (2026-07-29) ---------- */
.module__headline{max-width:760px;}
.module__inner.is-intro .spalter__head .module__headline{margin-left:auto;margin-right:auto;} /* zentrierter Intro-Kopf (1-Spalter) */

/* ---------- Spalten-Slideshow: Navigation UNTER dem Bild nach Figma (2026-07-29) -
   Dots mittig (aktiv = blaue Pille), duenne Pfeile rechts, disabled = grau ---------- */
/* Spalten-Slideshow: Bilder fest 3:2 (31.07.) - alle Slides gleich gross,
   der mittlere Bereich springt beim Blaettern nicht mehr. */
.col--type-slideshow .stm-slider__slide img{aspect-ratio:3/2;width:100%;height:auto;object-fit:cover;}
/* Bilder in 3-/4-Spaltern ebenfalls fest 3:2 (31.07.) */
.module--spalter-3 .col__media .col__img,
.module--spalter-4 .col__media .col__img{aspect-ratio:3/2;width:100%;height:auto;object-fit:cover;}
/* 13.09. (Kunde, "Modul Slider Mehrspalter"): Pfeile = stm-sarr-Masken-Komponente (24px, wie
   Karussells/Galerie 1 - Markup in functions.php umgestellt); Abstand Bild -> Dots/Pfeile-Zeile
   HALBIERT (Achsen-Mitte war 30px unter der Bildkante, jetzt 15px: padding-bottom 46->27,
   Dots bottom 8 (Mitte 27-8-4), Pfeile bottom 0 (Mitte 27-0-12)). */
.col--type-slideshow .stm-slider{overflow:visible;padding-bottom:27px;}
.col--type-slideshow .stm-slider__track{position:relative;overflow:hidden;}
.col--type-slideshow .stm-slider__dots{position:absolute;top:auto;bottom:8px;left:50%;right:auto;transform:translateX(-50%);display:flex;gap:8px;}
.col--type-slideshow .stm-slider__prev,
.col--type-slideshow .stm-slider__next{position:absolute;top:auto;left:auto;bottom:0;transform:none;border-radius:0;box-shadow:none;} /* Groesse/Maske/Farben kommen von .stm-sarr */
.col--type-slideshow .stm-slider__prev{right:38px;}
.col--type-slideshow .stm-slider__next{right:0;}
/* 13.09.: 3-/4-Spalter Desktop - Pfeile 20% kleiner (24 -> 19px; bottom nachgefuehrt, Achse bleibt ~15px) */
@media (min-width:901px){
	.module--spalter-3 .col--type-slideshow .stm-slider__prev,
	.module--spalter-3 .col--type-slideshow .stm-slider__next,
	.module--spalter-4 .col--type-slideshow .stm-slider__prev,
	.module--spalter-4 .col--type-slideshow .stm-slider__next{width:19px;height:19px;bottom:3px;}
	.module--spalter-3 .col--type-slideshow .stm-slider__prev,
	.module--spalter-4 .col--type-slideshow .stm-slider__prev{right:31px;}
}
/* Mobile (gestapelte Spalten): Pfeile OBEN ueber dem Bild links/rechts buendig - Groesse und
   Position analog Karussell (24px-sarr, eigene Zeile ueber dem Strang); Dots mittig UNTER dem
   Bild, Abstand ebenfalls halbiert (Mitte 30 -> 15px unter der Bildkante). */
@media (max-width:900px){
	.col--type-slideshow .stm-slider{padding-top:38px;padding-bottom:25px;}
	.col--type-slideshow .stm-slider__prev,
	.col--type-slideshow .stm-slider__next{top:0;bottom:auto;width:24px;height:24px;}
	.col--type-slideshow .stm-slider__prev{left:0;right:auto;}
	.col--type-slideshow .stm-slider__next{left:auto;right:0;}
	.col--type-slideshow .stm-slider__dots{bottom:6px;}
}

/* ==== Spalter: "Mehr lesen"-Toggle + Sound-Button (31.07.2026) ==== */
.col__more{margin-top:.5rem;}
/* 01.08.: col__more-toggle-Styles siehe Mehr/Weniger-Block bei .col__text-toggle */
/* 10.08. Nachticket "Audio-Links im Bild": Unicode-Note (\266A) durch die richtige
   Kunden-Note ersetzt (audio-note.svg als Mask, faerbt via currentColor - rot bei is-playing). */
.btn--sound::before{content:"";display:inline-block;flex:0 0 auto;width:.75em;height:1.1em;background:currentColor;order:2;
	-webkit-mask:url(../img/icons/audio-note.svg) no-repeat center/contain;mask:url(../img/icons/audio-note.svg) no-repeat center/contain;} /* 05.09. (Maik, Buttons-Ticket): Noten-Icon RECHTS neben dem Text (order:2 - das ::before ist ein Flex-Item) */
.btn--sound.is-playing{background:var(--st-color-primary,#002F5D);border-color:var(--st-color-primary,#002F5D);color:#fff;} /* 05.09. (Maik): Sound-Button Outline = States des CTA-Button Outline (Rueckfrage Johann: Mock-Variante, nicht die rote Liste im Tickettext), der Pressed-State ist der ACTIVE/Playing-State - Flaeche+Kontur #002F5D, Typo+Icon weiss; nach Soundende entfernt stm-modules.js is-playing -> Default. Hover #034B91 kommt aus .btn--secondary. */

/* Slideshow: migrierte Intro-Absaetze aus dem frueheren Intro-Feld (31.07.) */
.stm-ss-intro{color:var(--st-color-secondary,#034B91);font-weight:600;}

/* 31.07.: "Alle News"-Button neben den Karussell-Pfeilen */
.stm-cards__arrows{display:flex;align-items:center;gap:.6rem;}
.stm-cards__arrows .btn{margin-right:.5rem;}

/* == 02.08.: Textformatierungen (Kundenticket) - Listen + Blockquote im WYSIWYG-Content == */
.module ul:not([class]),.module ol:not([class]){margin:.4em 0 1.15em;padding:0 0 0 1.25em;}
.module p + ul:not([class]),.module p + ol:not([class]){margin-top:-.55em;} /* 02.08. R2: Liste dichter an die Zeile darueber (8px) */
.module ul:not([class]) li,.module ol:not([class]) li{margin:.2em 0;padding:0;}
.module ul:not([class]) li::marker{color:var(--st-color-primary,#002F5D);} /* 12.08.: Kundenticket Aufzaehlungen - ul-Punkte blau */
.module ol:not([class]) li::marker{color:var(--st-color-primary,#002F5D);font-weight:700;} /* 12.08.: ol-Zahlen blau + bold */
.module div.wpforms-container-full ul{margin:0;padding:0;}
.module blockquote:not(.quote__text){position:relative;padding:0 0 0 20px;margin:20px 0;font-style:italic;border-left:8px solid #CAD9E0;} /* 03.08.: nur Copytext-Zitate - das Zitate-MODUL bleibt unangetastet (Kundenticket) */
.module blockquote:not(.quote__text) :last-child{margin-bottom:0;}

/* == 02.08.: Sticky-Header Schrumpf-Zustand (Kundenticket) == */
.site-topbar__inner{transition:padding .25s ease;}
.site-header__inner{transition:min-height .25s ease,padding .25s ease;}
@media (min-width:1001px){
  /* 23.08. (Maik): Hauptmenuepunkte bleiben beim Sticky-Shrink in Position - Grid mit
     symmetrischen 1fr-Seiten statt space-between (Logo-Breite egal); .stm-searchbar ist
     absolute und belegt keinen Track. */
  .site-header__inner{display:grid;grid-template-columns:1fr max-content 1fr;align-items:center;}
  .site-header__inner > .site-branding{justify-self:start;}
  .site-header__inner > .site-nav{justify-self:center;}
  .site-header__inner > .header-actions{justify-self:end;display:flex;align-items:center;gap:6px;} /* 28.08. (Eyeable): Barrierefreiheit + Lupe als Gruppe rechts */
}
/* 19.08.: Topbar bleibt im Sticky-Zustand bei 40px (Figma) - fruehere Padding-Schrumpfregel entfernt */
.site-nav .nav-menu > li > a{transition:padding .25s ease;}
@media (min-width:1001px){ /* 28.08. (Maik): Shrink-Header ist DESKTOP-ONLY - mobil blieb die min-height:56-Regel bisher ungescoped aktiv (3-Klassen-Spezifitaet schlug die mobile 80px-Regel): Logo abgeschnitten, fixes Menue (top:80px) nicht mehr buendig. Mobil jetzt immer fixe Headerhoehe. */
.site-header.is-shrunk .site-header__inner{min-height:56px;padding-top:6px;padding-bottom:6px;}
.site-header.is-shrunk .site-nav .nav-menu > li > a{padding-top:.5rem;padding-bottom:.5rem;}
.site-header.is-shrunk .nav-menu--mega .nav-menu__link::after{bottom:.15rem;} /* 03.08.: Unterstrich rueckt im Sticky sonst an den Text - .15rem = gleiche 5.6px Luft wie im Standard-Header */

  .site-header.is-shrunk .site-branding__logo--full{display:none;}
  .site-header.is-shrunk .site-branding__logo--mark{display:block;height:40px;}
}

/* 03.08. R3: HTML-Buchseiten - Browser rendert DPR-scharf aus den 1600px-Quellen */
.stm-flip__page{width:100%;height:100%;}
.stm-flip__page img{width:100%;height:100%;max-width:none;object-fit:cover;display:block;pointer-events:none;-webkit-user-drag:none;user-select:none;}
/* 03.08. R2: Zoom-Lupe - aktuelle Doppelseite als scharfe 1600px-Bilder, scrollbar */
.stm-flip__lupe{position:absolute;inset:0;z-index:5;background:rgba(255,255,255,.97);overflow:auto;display:flex;align-items:flex-start;justify-content:safe center;gap:0;padding:1rem;box-sizing:border-box;}
.stm-flip__lupe[hidden]{display:none;} /* 03.08.: Autoren-display:flex ueberstimmt sonst das hidden-Attribut - Lupe blieb nach Esc sichtbar */
/* 18.09. (Stefanie, "Flipbook"): "Bitte noch das veraltete Close-Icon bei Zoom-in austauschen" -
   gelieferte Assets statt Unicode-x (Default: blaues X, Hover: rotes X - jeweils weisser Kreis mit
   grauem Ring, viewBox 36). Zwei-Ebenen-Muster wie Paginierung/Timeline: Hover-Grafik als geparkte
   1px-Zweitebene vorgeladen, kein Aufblitzen beim ersten Hover. font-size:0 neutralisiert das
   JS-injizierte Textzeichen (stm-flipbook.js setzt textContent '\00d7'). */
.stm-flip__lupeclose{position:absolute;top:.6rem;right:.6rem;z-index:6;width:42px;height:42px;padding:0;border-radius:50%;border:0;background-color:transparent;background-image:url("../img/icons/Close%20white%20circle%20default.svg"),url("../img/icons/Close%20white%20circle%20hover.svg");background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;font-size:0;line-height:0;color:transparent;cursor:pointer;display:none;}
.stm-flip.is-lupe .stm-flip__lupeclose{display:block;}
.stm-flip__lupeclose:hover,.stm-flip__lupeclose:active{background-image:url("../img/icons/Close%20white%20circle%20hover.svg"),url("../img/icons/Close%20white%20circle%20default.svg");}
.stm-flip__lupe img{width:calc(50% * var(--lupe-z,1.5));max-width:none;height:auto;flex:0 0 auto;box-shadow:0 10px 30px rgba(0,0,0,.18);}
.stm-flip__lupe img:only-child{width:calc(72% * var(--lupe-z,1.5));}
.stm-flip.is-lupe .stm-flip__book{visibility:hidden;}

/* == 03.08.: Modul Besuch (besichtigung) - Rework nach Figma 8183:1825 == */
.module--besichtigung .besuch__row{display:grid;grid-template-columns:270px 1fr;gap:2rem 66px;align-items:stretch;max-width:872px;margin:0 auto;} /* 02.09. R2 (Maik): stretch statt end - HL-Block beginnt OBEN buendig mit der Illu, der Fuss (CTA+Hinweis) haengt unten buendig (margin-top:auto im Body-Flex) */
.besuch__illu{position:relative;}
@media (min-width:1100px){ /* 05.09. R3 (Maik): Desktop-Layout erst ab 1100 (war 901) - zwischen 901 und 1099 war das 2-Spalten-Layout NICHT haltbar: die 3-spaltige Zeiten-Zeile brach um (Block wuchs ueber die Illu-Unterkante hinaus, gemessen +92px bei 1000) und die HL-Einrueckung (-146px, greift ab 1100) fehlte ("rutscht links buendig zum Oeffnungszeiten-Block"). Ab 1100 existieren Einrueckung + Platz fuer alle 3 Zeiten-Spalten -> "Topline+Headline in Desktop IMMER eingerueckt" und "Oeffnungszeiten-Block nie unter der Illu" sind ab hier strukturell erfuellt; 901-1099 uebernimmt das (reparierte) Tablet-Layout. Gleiche Logik wie beim Ticket-Modul (3-Spalten-Karte erst ab 1024). */
	.besuch__body{display:flex;flex-direction:column;align-items:flex-start;} /* 02.09. R2: Fuss nach unten druecken */
	.besuch__body .besuch__foot{margin-top:auto;padding-top:2rem;} /* 02.09. R2b: Spezifitaet 0-2-0 - die SPAETER stehende Basisregel .besuch__foot{margin-top:2.4rem} gewann sonst und schob den Fuss 26px unter die Illu-Unterkante (live gesehen) */
} /* 02.09. R2: die alte translateY(14px)-Kalibrierung ("Spitze buendig Topline") entfaellt - neue Vorgabe ist Illu-OBERKANTE = HL-Block-Oberkante */
@media (min-width:1100px) and (max-width:1249px){
	.besuch__times{gap:1rem 28px;} /* 05.09. R3: Spalten-Gap schmaler (50 -> 28px), damit die 3 Zeiten-Spalten auch bei 1100-1250 einzeilig bleiben und der Block nicht unter die Illu waechst */
}
.besuch__illu-frame{display:none;}
.besuch__illu-frame.is-active{display:block;}
.besuch__illu-img{width:100%;height:auto;display:block;}
.besuch__headline{font-size:var(--stm-h3-size);line-height:var(--stm-h3-lh);max-width:none;margin-bottom:40px;} /* 21.08.: Besuch ~ Headline XL */
.besuch__headwrap .module__kicker{font-size:1.25rem;margin-bottom:10px;padding-left:6px;} /* Glyphen-Gap 24px wie Vorlage */ /* 02.09. R2 (Maik): 6px links - optisch buendig mit der Riesen-HL (deren Glyphen-Anlauf rueckt das M ein) */
@media (min-width:1100px){.besuch__headwrap{margin-left:-146px;}} /* Vorlage 8287: HL-Block ab x190, Inhalt ab x336 */
.besuch__oz-title{margin:0 0 26px;font-size:1.375rem;line-height:1;font-weight:700;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* 05.09. R3 (Maik): "Oeffnungszeiten" in der Typogroesse von "Heute"/"Morgen" (1.375rem/22px wie .besuch__tab, war H4 28px) + etwas mehr Abstand zu den Tabs (15 -> 26px). Gilt Desktop UND Mobile. */
.besuch__tabs{display:flex;align-items:center;gap:1.5rem;margin:0 0 1.875rem;} /* 02.09. R2 (Maik): Abstand zur Turm/Kirche/Krypta-Zeile -1/4 (2.5 -> 1.875rem) */
.besuch__tab{border:0;background:none;padding:0;font:inherit;font-weight:700;font-size:1.375rem;line-height:1;text-transform:uppercase;color:var(--st-color-primary,#002F5D);cursor:pointer;transition:color .15s;}
.besuch__tab:hover{color:var(--st-color-secondary,#034B91);}
.besuch__tab.is-active{color:var(--st-color-accent,#B51F29);}
.besuch__cal{position:relative;display:inline-flex;}
.besuch__calbtn{border:0;background:none;padding:0;cursor:pointer;color:var(--st-color-primary,#002F5D);display:inline-flex;}
.besuch__calbtn svg{width:18px;height:18px;max-width:none;display:block;} /* 05.09. R3 (Maik): Kalender-Icon kleiner (24 -> 18px, Mock: Icon ~ Versalhoehe von "Morgen"). Gilt Desktop UND Mobile. */
.besuch__calbtn svg *{fill:currentColor;} /* 02.09. R2: geliefertes Kalender-Icon hat festes fill #002f5d - fuer den roten Aktiv-Zustand uebersteuern */
.besuch__cal.is-active .besuch__calbtn{color:var(--st-color-accent,#B51F29);}
.besuch__cal .besuch__date{position:absolute;inset:0;opacity:0;pointer-events:none;}
.besuch__caldate{font-weight:700;font-size:min(1.375rem,19.23vw - 52.5px);font-size:min(1.375rem,19.23cqi - 43.3px);line-height:1;color:var(--st-color-accent,#B51F29);display:none;margin-left:-.75rem;} /* 08.09. (Maik): Abstand Kalender-Icon -> Datum HALBIERT (Flex-Gap 24px bleibt fuer Heute/Morgen/Icon, das Datum zieht sich per -12px-Margin heran; gilt Desktop UND Mobile). Mobile: NUR die Datums-Schrift verkleinert sich soweit, dass das Datum im Satzspiegel bleibt. Formel aus Messung: Datum-Startkante in der Tabs-Zeile fix bei 225px (Heute 61 + Gap 24 + Morgen 86 + Gap 24 + Icon 18 + 12), "TT.MM.JJJJ" ist 5.0x Fontgroesse breit (+4%% Reserve = 5.2) -> font-size = (Zeilenbreite - 225px)/5.2 = 19.23cqi - 43.3px; cqi = Breite der .besuch__tabs (container-type steht NUR im <=1099-Block: im Desktop-Layout ist die Tabs-Zeile shrink-to-fit und wuerde als Groessen-Container auf 0 kollabieren -> ohne Container faellt cqi auf Viewport-Units zurueck, da greift immer der Deckel). Deckel 1.375rem = exakt die Heute/Morgen-Groesse ab ~390px Viewport (Vorgabe "bei groesseren Devices gleiche Schriftgroesse"); die vw-Zeile davor ist der Fallback fuer Browser ohne Container-Queries. */
.besuch__cal.is-active + .besuch__caldate,.besuch__cal.is-active ~ .besuch__caldate{display:inline;}
.besuch__times{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem 50px;max-width:660px;} /* 03.08. R3: neue Vorlage 8287 - ALLE drei Orte immer sichtbar, aktiver rot */
.besuch__spot{position:absolute;border:0;background:transparent;padding:0;cursor:pointer;z-index:2;}
.besuch__spot:focus-visible{outline:2px solid var(--st-color-secondary,#034B91);outline-offset:2px;}
.besuch__spot--turm{left:0;top:0;width:32%;height:66%;}
.besuch__spot--kirche{left:24%;top:60%;width:76%;height:29%;}
.besuch__spot--krypta{left:0;top:89%;width:100%;height:11%;}
.besuch__time{cursor:pointer;}
.besuch__time-title{display:block;margin-bottom:9px;font-weight:700;font-size:1.25rem;line-height:26px;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* 02.09. R2 (Maik): = H5; Abstand Titel -> Uhrzeit HALBIERT (18 -> 9px) */
.besuch__time.is-active .besuch__time-title{color:var(--st-color-accent,#B51F29);}
.besuch__time-hours{font-size:1rem;line-height:28px;color:var(--st-color-ink,#222);}
.besuch__foot{display:flex;align-items:flex-end;gap:2rem;margin-top:2.4rem;} /* 02.09. R2 (Maik): CTA + "Aenderungen vorbehalten" unten buendig (zur Illu-Unterkante, s. Body-Flex oben) */
.besuch__tickets{gap:12px;display:inline-flex;align-items:center;} /* 07.09. R3 (Maik, Global Buttons): keine Sondergroesse mehr - Basis ist der definierte grosse CTA aus .btn (45px/1.25rem/1.5rem), wie im Ticket-Modul; Icon 35x31 behaelt Luft */
.besuch__tickets .stm-ic,.besuch__tickets svg{width:35px;height:31px;max-width:none;flex:0 0 auto;}
.besuch__tickets .stm-ic svg{width:100%;height:100%;}
.besuch__hinweis{margin:0 0 4px;font-size:.75rem;line-height:18px;color:var(--st-neutral-600,#5D5D5D);}
@media (max-width:1099px){ /* 05.09. R3: Grenze 900 -> 1099 (s. Kommentar am Desktop-Block) */
	/* 04.08.: Mobile nach Kundenmock - Grafik unter die Headline, links neben den Zeiten */
	/* 05.09. R3 (Maik, Mock): Illu-Spalte GROESSER (Faktor Bild h/w = 1.956!) und GEDECKELT:
	   min(46%,150px) -> Illu-Hoehe ~275-293px und damit IMMER mindestens so hoch wie der
	   Uhrzeitenblock (~272px); der Uhrzeitblock rutscht entsprechend weiter nach rechts.
	   Der Deckel 150px behebt zugleich den Tablet-Bruch: bei 36% ohne Deckel wurde die Illu
	   z.B. bei 850px Viewport 282px breit = 551px HOCH - HL/Oeffnungszeiten/Tabs sassen dann
	   303px vom unten-buendigen Uhrzeitblock entfernt ("rutscht nach oben ueber die Illu weg").
	   minmax-Untergrenze 140px sichert die Mindesthoehe auch bei sehr schmalen Viewports. */
	.module--besichtigung .besuch__row{grid-template-columns:minmax(145px,min(46%,150px)) 1fr;gap:1.25rem 20px;align-items:start;grid-template-areas:"head head" "oz oz" "tabs tabs" "illu times" "foot foot";} /* Untergrenze 145px (nicht 140): bei 360px-Viewports wuchs der Zeiten-Block auf 277px - 145*1.956=284px Illu-Hoehe haelt die Mindesthoehen-Regel auch dort (QA-Messung) */
	.besuch__body{display:contents;}
	.besuch__headwrap{grid-area:head;}
	.besuch__headline{margin-bottom:10px;} /* 02.09. R2 (Maik-Mock): Abstand HL -> Oeffnungszeiten halbiert (40 -> 20px) */ /* 07.09. R4 (Maik, Mobile-Anhang): Gesamtabstand HL -> "Oeffnungszeiten" -1/4 (20px Margin + 20px Grid-row-gap = 40 -> 30px, also Margin 20 -> 10) */
	.besuch__oz-title{grid-area:oz;margin-bottom:0;} /* 05.09. R3 (Maik): mobil mehr Abstand zu "Heute"/"Morgen" - 10px + 20px Grid-row-gap = 30px (war 0 + 20) */ /* 07.09. R4 (Maik, Mobile-Anhang): -1/3 zurueck auf 20px gesamt (0 + 20px Grid-row-gap) */
	.besuch__tabs{grid-area:tabs;margin-bottom:.25rem;container-type:inline-size;} /* 08.09. (Maik, Datum im Satzspiegel): Tabs-Zeile als Groessen-Container fuer die cqi-Formel der Datums-Schrift (s. .besuch__caldate) - hier ist sie Grid-Item mit stretch, die Breite also von aussen definiert (im Desktop-Layout NICHT setzen, s. Kommentar dort) */
	.besuch__illu{grid-area:illu;max-width:none;align-self:end;} /* 02.09. R2: Unterkanten-Buendigkeit mit dem Zeiten-Block */
	.besuch__times{grid-area:times;grid-template-columns:1fr;gap:1.1rem;max-width:none;align-self:end;padding-bottom:8px;} /* 02.09. R2 (Maik): Zeiten-Block unten buendig mit der Illu + 8px Abstand */
	.besuch__time-title{margin-bottom:8px;} /* 02.09. R2 (Maik): mobil -1/3 (18 -> 12px) */ /* 07.09. R4 (Maik, Mobile-Anhang): nochmal -1/3 (12 -> 8px) - gilt fuer Turm, Kirche UND Krypta */
	.besuch__foot{grid-area:foot;flex-direction:column-reverse;align-items:flex-start;gap:1rem;margin-top:0;padding-top:20px;border-top:1px solid var(--st-color-primary,#002F5D);} /* 02.09. R2 (Maik): Trennlinie Primaerblau in Modulbreite, 20px Abstand oben... */
	.module--besichtigung .besuch__row{row-gap:20px;} /* ...und 20px zur Illu/Zeiten-Zeile darueber */
	.besuch__tickets{height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:10px;} /* 02.09. R2 (Maik): CTA blau KLEIN (wie Ticket-Modul mobil) */ /* 07.09. R3 (Maik, Global Buttons): Basis = definierter kleiner CTA (37.5px) statt Sondermass 33px - explizit, weil dieser Block ab 1099 greift */
	.besuch__tickets .stm-ic,.besuch__tickets svg{width:26px;height:23px;}
	.besuch__calbtn svg{width:18px;height:18px;} /* 05.09. R3: Icon-Groesse explizit auch hier - Basisregel gilt, aber gegen kuenftige mobile Overrides abgesichert */
}
/* 07.09. R5 (Maik, "Zwischenformat Mobile/Tablet"): solange der Platz reicht (ab 760px), stehen
   HL, Oeffnungszeiten-Zeile UND Uhrzeiten RECHTS NEBEN der Michel-Illu - die Illu spannt sich
   links ueber alle vier Inhaltszeilen, die Uhrzeiten laufen wie im Desktop 3-spaltig; der CTA
   bleibt mit Trennlinie darunter ("wie jetzt schon der Fall"). Behebt den unausgewogenen
   Weissraum rechts neben HL/Tabs im alten Stapel-Layout. Unter 760px reicht die Restbreite
   nicht mehr fuer 3 Zeiten-Spalten neben der Illu -> dort weiter das Stapel-Layout. */
@media (min-width:760px) and (max-width:1099px){
	.module--besichtigung .besuch__row{grid-template-columns:minmax(190px,23%) 1fr;grid-template-areas:"illu head" "illu oz" "illu tabs" "illu times" "foot foot";}
	.besuch__illu{align-self:center;margin-top:0;} /* vertikal mittig neben dem Inhaltsblock - kein Loch unter der Illu, wenn die Inhaltsspalte hoeher ist */
	.besuch__times{grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem 24px;align-self:start;padding-bottom:0;}
	.besuch__headwrap{align-self:end;}
	.besuch__headline{font-size:min(var(--stm-h3-size),6.6vw);line-height:.89;} /* "BESICHTIGUNG" bleibt neben der Illu einzeilig (2 HL-Zeilen wie im Mock) - verifiziert bei 760/920/1000/1099; die R4-Abstaende (30/20px) bleiben exakt erhalten */ /* 07.09. R6 (Maik): Zeilenabstand skaliert PROPORTIONAL mit der 6.6vw-gedeckelten Fontgroesse - unitless .89 = Token-Verhaeltnis --stm-h3-lh/--stm-h3-size in diesem Breitenbereich (.883-.893); vorher blieb die px-Line-Height des ungedeckelten Tokens stehen (z.B. 900px: Font 59.4px, LH 70.5px -> riesiger Zeilen- und Topline-Abstand) */
	.besuch__headwrap .module__kicker{font-size:calc(.4rem + .95vw);padding-left:calc(2px + .27vw);} /* 07.09. R6 (Maik): Topline-GROESSE + optischer Glyphen-Einzug skalieren mit demselben Faktor f = 6.6vw/Token-H3 wie die Headline (f=.68 bei 760 -> .83 bei 1099) - Verhaeltnis Topline:Headline bleibt damit exakt wie im ungedeckelten Layout (20px/6px jeweils x f, linear angenaehert, Fehler <0.2px). Der ABSTAND zur HL wird ganz unten skaliert (nach der globalen 7px-Regel, s. dort) */
}
@media (max-width:359px){
	.besuch__time-hours{font-size:.875rem;} /* 05.09. R3: Sehr schmale Geraete - "10:00 - 18:00 Uhr" darf neben der 140px-Mindest-Illu nicht umbrechen (sonst waechst der Uhrzeitblock ueber die Illu-Hoehe) */
}

/* ---- Spendenbutton-Shortcode + Twingle-Layer + Generator (03.08.2026) ---- */
.stm-spb{gap:12px;cursor:pointer;padding-left:1.125rem;} /* 05.09. (Maik, Buttons-Ticket): Padding links vom Spenden-Icon verringert (1.5rem -> 18px) - entspricht dem vertikalen Icon-Abstand ((60-25)/2=17.5px), damit der Abstand optisch UMLAUFEND gleich ist; Groessen kommen unveraendert aus .btn/.btn--sm (inkl. -1/4-Padding) */
.stm-spb.btn--sm{padding-left:.8rem;} /* klein: (50-25)/2=12.5px */
@media (max-width:1000px){ .stm-spb{padding-left:.8rem;} } /* 07.09. R3 (Maik, Global Buttons): mobil wird der Spenden-CTA per globalem <=1000-Block klein, behielt aber die 18px Links-Luft des GROSSEN CTAs (die .btn--sm-Regel greift nur per Klasse) - live gemessen 18px bei 37.5px Hoehe. Jetzt wie die kleine Variante .8rem. Muss NACH der Basisregel stehen (gleiche Spezifitaet, Reihenfolge entscheidet). */
.stm-spb .btn__ico{flex:0 0 auto;display:inline-flex;}
.stm-spb svg.btn__ico,.stm-spb .btn__ico svg{width:22px;height:25px;max-width:none;display:block;} /* Hand-mit-Herz (qn-spenden 32x37); Klasse sitzt AM svg */
.stm-spb__ico{width:22px;height:25px;background:currentColor;-webkit-mask:url(../img/icons/qn-spenden.svg) center/contain no-repeat;mask:url(../img/icons/qn-spenden.svg) center/contain no-repeat;display:inline-block;flex:0 0 auto;} /* 04.08.: Mask-Span statt Inline-SVG - wp_kses_post im Spalter frisst svg (Kundenseite Kirche) */
.stm-spb--blau{background:var(--st-color-primary,#002F5D);border:1px solid var(--st-color-primary,#002F5D);color:#fff;}
.stm-spb--blau:hover,.stm-spb--blau:focus-visible{background:var(--st-color-accent,#B51F29);border-color:var(--st-color-accent,#B51F29);color:#fff;}
.stm-spb--rot{background:var(--st-color-accent,#B51F29);border:1px solid var(--st-color-accent,#B51F29);color:#fff;}
.stm-spb--rot:hover,.stm-spb--rot:focus-visible{background:var(--st-color-primary,#002F5D);border-color:var(--st-color-primary,#002F5D);color:#fff;}
.stm-spb--gold{background:var(--st-color-gold,#D1AC57);border:1px solid var(--st-color-gold,#D1AC57);color:var(--st-color-primary,#002F5D);}
.stm-spb--gold:hover,.stm-spb--gold:focus-visible{background:var(--st-color-accent,#B51F29);border-color:var(--st-color-accent,#B51F29);color:#fff;}
.stm-spb-ov{position:fixed;inset:0;z-index:4000;background:rgba(255,255,255,.88);display:flex;align-items:center;justify-content:center;padding:24px;}
.stm-spb-ov[hidden]{display:none;} /* Autoren-display schlaegt sonst das hidden-Attribut (Lupe-Lehre) */
.stm-spb-ov__box{position:relative;width:min(560px,94vw);height:min(760px,88vh);background:#fff;box-shadow:0 10px 40px rgba(0,0,0,.22);}
.stm-spb-ov__frame{width:100%;height:100%;border:0;display:block;}
.stm-spb-ov__close{position:absolute;top:-21px;right:-21px;z-index:2;width:42px;height:42px;padding:0;border-radius:50%;border:1px solid var(--st-neutral-300,#D1D1D1);background:#fff;color:var(--st-color-primary,#002F5D);font-size:26px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.stm-spb-ov__close:hover{color:var(--st-color-accent,#B51F29);}
.spbgen{display:grid;grid-template-columns:1fr 1fr;gap:2rem 50px;align-items:start;}
.spbgen__title{margin:0 0 1.25rem;font-size:1.25rem;font-weight:700;text-transform:uppercase;color:var(--st-color-primary,#002F5D);}
.spbgen__title--code{margin-top:2.5rem;}
.spbgen__field{display:block;margin:0 0 1.4rem;}
.spbgen__label{display:block;font-weight:700;color:var(--st-color-primary,#002F5D);margin-bottom:.4rem;}
.spbgen__hint{display:block;font-size:.8rem;color:var(--st-neutral-600,#5D5D5D);margin-bottom:.4rem;}
.spbgen__field input,.spbgen__field select{width:100%;max-width:420px;padding:12px 14px;border:1px solid var(--st-neutral-300,#D1D1D1);background:#fff;font:inherit;color:var(--st-color-ink,#222);}
.spbgen__field input:focus,.spbgen__field select:focus{outline:2px solid var(--st-color-secondary,#034B91);outline-offset:0;}
.spbgen__preview{min-height:70px;display:flex;align-items:center;}
.spbgen__code{width:100%;padding:12px 14px;border:1px solid var(--st-neutral-300,#D1D1D1);font-family:ui-monospace,Consolas,monospace;font-size:.85rem;color:var(--st-color-ink,#222);resize:vertical;}
@media(max-width:900px){ .spbgen{grid-template-columns:1fr;} }

/* =========================================================
   Michel-Tafeln: Gravur-Konfigurator + Gravur-Suche
   (10.08.2026, Asana "Suchfunktion Michel Tafeln", Figma 8106:4982)
   ========================================================= */
.stm-tk__head{margin-bottom:2.5rem;}
.stm-tk__grid{display:grid;grid-template-columns:minmax(0,620px) minmax(0,640px);justify-content:space-between;gap:2rem 4rem;}
.stm-tk__row{margin-bottom:1.1rem;}
.stm-tk__inputwrap{position:relative;display:flex;gap:.5rem;align-items:center;}
.stm-tk__input{flex:1 1 auto;min-width:0;border:1px solid #c8cdd4;border-radius:4px;padding:.65rem .9rem;font:inherit;font-size:.95rem;font-family:'ff-meta-web-pro','Meta Pro','Segoe UI Symbol','Noto Sans Symbols 2','DejaVu Sans',Arial,sans-serif;} /* 10.08.: Symbol-Fallbacks = monochrome Glyphen statt Farb-Emojis */
.stm-tk__input:focus{outline:2px solid var(--st-color-secondary,#034B91);outline-offset:0;}
.stm-tk__picker{flex:0 0 auto;width:38px;height:38px;border:1px solid #c8cdd4;border-radius:4px;background:#fff;cursor:pointer;font-size:1.6rem;line-height:1;padding:0;display:flex;align-items:center;justify-content:center;color:var(--st-color-primary,#002F5D);font-family:'Segoe UI Symbol','Noto Sans Symbols 2','DejaVu Sans',Arial,sans-serif;} /* 12.08. Feedback R3: Oeffner-Smiley groesser + exakt mittig */
.stm-tk__picker:hover{color:var(--st-color-accent,#B51F29);border-color:currentColor;}
.stm-tk__pickerpop{position:absolute;right:0;top:calc(100% + 4px);z-index:5;background:#fff;border:1px solid #c8cdd4;border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.15);padding:.35rem;display:flex;gap:.25rem;}
.stm-tk__pickerpop button{width:46px;height:46px;border:0;background:none;cursor:pointer;font-size:1.7rem;line-height:1;padding:0;display:flex;align-items:center;justify-content:center;color:var(--st-color-primary,#002F5D);font-family:'Segoe UI Symbol','Noto Sans Symbols 2','DejaVu Sans',Arial,sans-serif;} /* 12.08. Feedback: Symbole mittig + groesser */
.stm-tk__pickerpop button:hover{color:var(--st-color-accent,#B51F29);}
.stm-tk__count{margin:.35rem 0 0;font-size:.8rem;color:#5D5D5D;}
.stm-tk__count b{color:var(--st-color-primary,#002F5D);}
.stm-tk__frame{display:inline-flex;align-items:center;gap:.5rem;margin:.4rem 0 1.4rem;cursor:pointer;}
.stm-tk__hint{font-size:.85rem;line-height:1.55;color:#444;}
.stm-tk__hint p{margin:0 0 .7em;}
.stm-tk__previewlabel{margin:0 0 .8rem;font-size:.85rem;color:#444;}
.stm-tk__preview{position:relative;min-height:190px;border-radius:4px;background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center;padding:1.6rem;}
.stm-tk__preview.is-plain{background:linear-gradient(135deg,#9c7e52 0%,#b89a6b 45%,#8f7148 100%);}
.stm-tk__prevlines{width:100%;text-align:center;color:rgba(116,110,89,.9);
	font-family:Arial,sans-serif;font-weight:700;font-size:clamp(1.1rem,2vw,1.6rem);line-height:1.5;letter-spacing:.02em;
	text-shadow:0 1px 0 rgba(255,245,220,.80),0 -1px 1px rgba(0,0,0,.35);} /* Graviert-Effekt, CSS-Vorgabe Maik 17.08. */
.stm-tk__prevlines.has-frame{outline:2px solid rgba(116,110,89,.9);outline-offset:10px;}
.stm-tk__prevline{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.stm-tk__sums{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1rem;margin:1.6rem 0 1.4rem;align-items:start;}
.stm-tk__sumlabel{display:block;font-size:.85rem;margin-bottom:.35rem;}
.stm-tk__sumval{font-family:var(--st-font-head,inherit);font-weight:700;font-size:1.4rem;color:var(--st-color-primary,#002F5D);}
.stm-tk__sumval--big{font-size:2rem;}
.stm-tk__sum--total{text-align:right;}
.stm-tk__sum--total .stm-tk__sumlabel{text-align:right;}
.stm-tk__spende{width:90px;border:1px solid #c8cdd4;border-radius:4px;padding:.45rem .6rem;font:inherit;}
.stm-tk__actions{display:flex;justify-content:flex-end;gap:1rem;flex-wrap:wrap;}
.stm-tk__actions .btn[disabled]{opacity:.45;cursor:not-allowed;}
@media(max-width:900px){
	.stm-tk__grid{grid-template-columns:1fr;}
	.stm-tk__sums{grid-template-columns:1fr;}
	.stm-tk__sum--total,.stm-tk__sum--total .stm-tk__sumlabel{text-align:left;}
	.stm-tk__actions{justify-content:flex-start;}
}

.stm-ts__head{margin-bottom:2.5rem;}
.stm-ts__grid{display:grid;grid-template-columns:minmax(0,560px) minmax(0,640px);justify-content:space-between;gap:2rem 4rem;}
.stm-ts__copy{font-size:.95rem;line-height:1.6;}
.stm-ts__label{display:block;font-size:.9rem;margin-bottom:.5rem;}
.stm-ts__inputwrap{display:flex;align-items:center;gap:.5rem;}
.stm-ts__input{flex:1 1 auto;min-width:0;border:1px solid #c8cdd4;border-radius:4px;padding:.65rem .9rem;font:inherit;font-size:.95rem;}
.stm-ts__input:focus{outline:2px solid var(--st-color-secondary,#034B91);outline-offset:0;}
.stm-ts__go{flex:0 0 auto;width:40px;height:40px;border:0;background:none;cursor:pointer;color:var(--st-color-primary,#002F5D);display:flex;align-items:center;justify-content:center;}
.stm-ts__go:hover{color:var(--st-color-accent,#B51F29);}
.stm-ts__results{margin-top:1.4rem;}
.stm-ts__state{font-size:.9rem;color:#5D5D5D;margin:0;}
.stm-ts__found{font-size:.9rem;margin:0 0 .8rem;}
.stm-ts__list{list-style:none;margin:0;padding:0;max-height:320px;overflow-y:auto;}
.stm-ts__morewrap{margin:.7rem 0 0;} /* 12.08.: Weitere-anzeigen-Button unter der Trefferliste */

/* == 12.08.: ASP-Live-Suche in der Header-Suchleiste (Ticket "Modul Volltext Suche") == */
.stm-searchbar__asp{max-width:640px;margin:0 auto;padding:.4rem 0;}
.stm-searchbar__asp .asp_main_container{margin:0 auto;}
.stm-searchbar__asp .asp_w{font-family:inherit;}
/* 12.08. R2 (Ticket "Modul Suchergebnisse", nach Figma): Suche rechtsbuendig,
   KEIN Pillen-Feld - nur Unterstrich-Zeile, Lupe ohne Kreis in Dunkelgrau,
   Trennlinien zwischen den Treffern, "Haeufig gesucht"-Phrasen untereinander.
   ASP generiert Inline-CSS, daher !important. */
.stm-searchbar__asp{padding:0 0 1.8rem;display:block;} /* 28.08. (Maik): Oberluft steckt jetzt in der probox-Hoehe - Zeile+Icons mittig in der weissen Flaeche ueber der Linie */ /* 26.08.: Linie full width */
.stm-searchbar__asp .asp_w_container{width:100%;margin:0 !important;float:none !important;}
.stm-searchbar__asp .asp_w.asp_m{background:transparent !important;background-image:none !important;border:0 !important;border-radius:0 !important;box-shadow:none !important;padding:0 !important;}
.stm-searchbar__asp .asp_m .probox{background:transparent !important;box-shadow:none !important;border:0 !important;border-bottom:1px solid #B0B0B0 !important;border-radius:0 !important;height:60px !important;align-items:center !important;margin:0 !important;padding:0 26px 0 0 !important;} /* 28.08. (Maik): Hoehe 60 (Zeile VERTIKAL mittig zur Linie), rechts 26px Luft - die 40er-Lupe bleibt exakt unter dem Header-Close (Flyout +24 breiter) */
.stm-searchbar__asp .asp_m .probox .proinput{padding:0 0 0 24px !important;margin:0 !important;display:flex;align-items:center;flex:1 1 auto !important;width:auto !important;min-width:0 !important;position:relative;} /* 26.08.: flex statt ASP-Inline-Breite (Lupe blieb sonst nicht im Kasten); Einzug links */
#stm-searchbar .asp_m .probox .proinput input.orig{margin:0 !important;} /* ID-Selektor: ASP setzt margin-left:-4px mit hoher Spezifitaet */
#stm-searchbar .asp_m .probox .proinput form{display:flex !important;align-items:center !important;height:100% !important;margin:0 !important;} /* 28.08. (Maik): das Eingabefeld steckt in einem gestreckten <form> - erst dessen Zentrierung setzt die Zeile wirklich mittig in die 60er-Flaeche */
.stm-searchbar__asp .asp_m .probox .proinput input.orig,
.stm-searchbar__asp .asp_m .probox .proinput input.autocomplete{color:#222 !important;font-family:inherit !important;font-size:1.2rem !important;line-height:normal !important;height:42px !important;padding:0 !important;margin:0 !important;}
.stm-searchbar__asp .asp_m .probox .proinput input.orig::placeholder{color:#5D5D5D !important;opacity:1;}
#stm-searchbar .asp_m .probox .proinput input.autocomplete{position:absolute !important;left:24px !important;top:0 !important;width:calc(100% - 24px) !important;margin:0 !important;} /* margin:0 zwingend - ASP schiebt den Ghost mit margin-top:-28px nach oben (live diagnostiziert) */ /* 26.08. (Maik, Bug): Autofill lag als zweites Input im Fluss VERSETZT unter der Eingabe - jetzt Overlay in einer Zeile */
.stm-searchbar__asp .asp_m .probox .promagnifier{background:url("../img/icons/Suche Lupe.svg") no-repeat center/40px 40px !important;border-radius:50% !important;width:40px !important;height:40px !important;margin:0 !important;box-shadow:none !important;flex:0 0 auto;} /* 28.08. (Maik): exakt wie das Header-Icon - SVG in Kreisgroesse 40 (die 40er-viewBox enthaelt den Bounds-Kreis) */
.stm-searchbar__asp .asp_m .probox .promagnifier .innericon{display:none !important;}
.stm-searchbar__asp .asp_m .probox .promagnifier:hover,.stm-searchbar__asp .asp_m .probox .promagnifier:active{background-color:#CAD9E0 !important;} /* Hover-State = Pressed-State - Kreisfarbe aus dem Original-Asset "Suche Lupe Hover.svg" (#CAD9E0) */
.stm-searchbar__asp .asp_m .probox .proclose{width:34px !important;height:34px !important;background:url("../img/icons/Close klein.svg") no-repeat center/38px 38px !important;position:relative;flex:0 0 auto;} /* 27.08.: Original-Asset (kam nachgeliefert) */ /* 17.09. (Maik, "arg winzig"): KORREKTUR - das Asset hat internes Padding (Glyphe = 33.8% der Flaeche). Die 34px vom 27.08. zeigten eine 11.5px-Glyphe (der Zustand, den Stefanie "huebsch und klein" fand), die 13px vom 16.09. nur noch 4.4px. Jetzt 38px Flaeche = exakt die 13px GLYPHE aus der Figma-Messung (0.325 x 40px-Lupenkreis); Klickflaeche bleibt 34px. */
.stm-searchbar__asp .asp_m .probox .proclose svg{display:none !important;}
/* Treffer-Panel: weiss, dezente Trennlinien zwischen den Ergebnissen (Figma) */
div.asp_w.asp_r.asp_r_1{border:1px solid #CAD9E0 !important;border-radius:8px !important;box-shadow:0 12px 28px rgba(0,0,0,.14) !important;}
div.asp_r.asp_r_1 .results .item{border-bottom:1px solid #E7E7E7 !important;}
div.asp_r.asp_r_1 .results .item:last-child{border-bottom:0 !important;}
div.asp_r.asp_r_1 .results .item{display:flex !important;align-items:center !important;} /* 26.08. (Maik): Vorschlaege ohne Bild vertikal zentriert */
div.asp_r.asp_r_1 .results .item .asp_content{margin-top:auto !important;margin-bottom:auto !important;}
/* 28.08. (Maik): MIT Bild stehen die Begriffe rechts OBEN neben dem Bild (nie darunter).
   Das Bild steckt in ASPs Markup IN .asp_content (a.asp_res_image_url > .asp_image) und floatete -
   je nach Textlaenge stand der Text mal daneben, mal darunter. Fix: .asp_content wird ein
   2-Spalten-Grid (Bild links ueber alle Zeilen, Texte rechts oben); OHNE Bild bleibt das Item
   vertikal zentriert (Flex-Regel oben). */
div.asp_r.asp_r_1 .results .item:has(.asp_image){align-items:flex-start !important;}
div.asp_r.asp_r_1 .results .item:has(.asp_image) .asp_content{margin-top:0 !important;display:grid !important;grid-template-columns:auto minmax(0,1fr);column-gap:14px;align-items:start;}
div.asp_r.asp_r_1 .results .item:has(.asp_image) .asp_content > a.asp_res_image_url{grid-column:1;grid-row:1 / span 9;float:none !important;}
div.asp_r.asp_r_1 .results .item:has(.asp_image) .asp_content > *:not(a.asp_res_image_url){grid-column:2;}
div.asp_r.asp_r_1 .results .item:has(.asp_image) .asp_content h3{margin-top:0 !important;}
div.asp_r.asp_r_1 .results .item .asp_image{float:none !important;}
div.asp_r.asp_r_1 .results .item h3, div.asp_r.asp_r_1 .results .item h3 a{font-family:inherit !important;color:var(--st-color-primary,#002F5D) !important;}
div.asp_r.asp_r_1 .results .item h3 a:hover{color:var(--st-color-accent,#B51F29) !important;}
div.asp_r.asp_r_1 .asp_nores{font-family:inherit !important;}
div.asp_r.asp_r_1 .asp_keywords a, div.asp_r.asp_r_1 .asp_keywords a span{color:var(--st-color-accent,#B51F29) !important;}
/* "Haeufig gesucht": Label blau VERSAL, Phrasen untereinander, Hover/Pressed blau unterstrichen */
.stm-searchbar__asp p.asp-try{width:100%;margin:1rem 0 0 !important;padding:0 24px;box-sizing:border-box;font-family:inherit !important;font-weight:700;font-size:1.05rem;letter-spacing:.02em;text-transform:uppercase;color:var(--st-color-primary,#002F5D) !important;text-align:left;}
/* == 05.09. (Maik, "Modul Suche"): ASP-Autofill == Ghost-Input aus (sass im Searchbar-Layout
   versetzt hinter dem Feld und war nicht klickbar), stattdessen rendert stm-header.js die
   Vervollstaendigung als klickbare Zeile zwischen Suchfeld und Trefferliste ("dazwischen
   integriert"): getippter Teil normal, Ergaenzung fett, Optik wie eine zweite Feldzeile (Mock). */
.ajaxsearchpro input.autocomplete{opacity:0 !important;pointer-events:none !important;}
.stm-asp-suggest{display:block;width:calc(100% - 8px) !important;margin:2px 4px 4px !important;padding:14px 18px !important;background:#fff !important;border:1px solid var(--st-neutral-300,#D1D1D1) !important;border-radius:5px !important;font-family:var(--st-font-body,inherit) !important;font-weight:400 !important;font-size:1.05rem !important;line-height:1.3 !important;text-align:left;color:#8a8f98 !important;cursor:pointer;box-sizing:border-box !important;transition:border-color .15s,color .15s;} /* 05.09. R2 (Kundenmock "so wollen die das haben"): volle Breite direkt unterm Suchfeld, Vorschlag komplett in Platzhalter-Grau, Optik wie eine zweite Feldzeile */ /* 05.09. R2b: !important auf allen Optik-Werten - ASP druckt eigenes Instanz-CSS mit *-Selektoren in den Ergebnis-Container (live: Farbe #6d6d6d, radius 0 gewannen sonst); gleiches Muster wie unsere asp-try-Overrides */ /* 07.09. R4 (Maik: "Autofill-Feld etwas zu lang, rechts so wie links"): box-sizing brauchte AUCH !important - ASPs *-Instanz-CSS setzte content-box, dadurch kamen 36px Padding + 2px Border AUF die calc-Breite obendrauf und die Zeile ragte rechts 29px ueber das Feld; mit border-box sitzt sie symmetrisch (je 9px Inset links/rechts, live gemessen 844-1350 im Feld 835-1359) */
.stm-asp-suggest:hover{border-color:var(--st-color-secondary,#034B91) !important;color:var(--st-color-secondary,#034B91) !important;}
.stm-asp-suggest[hidden]{display:none !important;}
.stm-searchbar__asp p.asp-try a{display:block;margin:.35rem 0 0;font-weight:400;font-size:1.125rem;letter-spacing:0;text-transform:none;color:#454545 !important;text-decoration:none;}
.stm-searchbar__asp p.asp-try a:first-of-type{margin-top:.55rem;}
.stm-searchbar__asp p.asp-try a::after{content:none !important;} /* 12.08.: ASP haengt Trenn-Kommas als CSS-::after an die Phrasen - nur so abschaltbar */
.stm-searchbar__asp p.asp-try a:hover{color:#034B91 !important;font-weight:400;text-decoration:underline;text-underline-offset:3px;text-decoration-color:#034B91;} /* 26.08. (Maik): NICHT fetten - Default-Schnitt, Hover #034B91 (Typo+Linie) */
.stm-searchbar__asp p.asp-try a:active{color:#002F5D !important;font-weight:400;text-decoration:underline;text-underline-offset:3px;text-decoration-color:#002F5D;} /* Pressed #002F5D */

/* == 12.08.: Tickets-Rework nach Figma 8219:5111 (Asana "Modul Ticket") - .stm-tix__* ==
   == 18.08.: Korrektur-Runde 2 nach Figma 8514:1987/8514:1713 (Asana "Modul Tickets"):
   1px-Linien (aussen+vertikal #002F5D, Zeilentrenner #B0B0B0), radius 0, feste Spalten
   27.1%/32.5%/25.8% (Figma 357/428/340 von 1319), Zeilen 42px + Icon 42x42 + 14px Abstand,
   Chevron 13x13 SVG, Grafik 250x230 fix unten links hinter der Typo, HL/Copy rechtsbuendig
   auf gemeinsamer Kante (right 9.1% der Mitte), Optionen-Listen rot+bold, Mobile Selectbox. == */
.stm-tix{display:grid;grid-template-columns:minmax(0,29.3%) minmax(0,35.1%) minmax(0,27.9%);justify-content:space-between;align-items:start;border:1px solid var(--st-color-primary,#002F5D);border-radius:0;background:#fff;padding:40px 4.25% 40px 3.34%;} /* 18.08. R3: Spalten-%% auf den INNENRAUM bezogen (357/428/340 von 1219) - vorher fielen die Gaps doppelt so gross aus und die Mitte war zu schmal */ /* 02.09. R4 (Maik): ALLE Linien 1px; minmax(0,..) - Inhalte (CTA, lange Woerter) koennen die Spalten nicht mehr aufsprengen, die Karte skaliert sauber beim Kleinerziehen */
.stm-tix__mnav{display:none;margin:0;}
.stm-tix__kicker{margin:0 0 1.6rem;font-weight:700;font-size:1.125rem;line-height:1;letter-spacing:.02em;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* 18.08. R3: groesser */
.stm-tix__list{list-style:none;margin:0;padding:0;display:grid;grid-auto-rows:1fr;} /* 18.08. R3: alle Zeilen exakt gleich hoch - waechst gemeinsam, wenn Labels umbrechen */
.stm-tix__item{display:flex;padding:6px 0;border-bottom:1px solid var(--st-neutral-300,#B0B0B0);} /* 02.09. R4: 1px */
.stm-tix__item:first-child{padding-top:0;}
.stm-tix__item:last-child{padding-bottom:0;border-bottom:0;}
.stm-tix__tab{display:flex;align-items:center;gap:14px;width:100%;min-height:42px;padding:0;background:none;border:0;cursor:pointer;text-align:left;font:inherit;} /* 18.08. R3: font:inherit (Buttons erben sonst NICHT - Arial-Fallback!); min-height statt fixer Hoehe */
.stm-tix__ico{flex:0 0 42px;width:42px;height:42px;display:flex;align-items:center;justify-content:center;}
.stm-tix__ico img{width:100%;height:100%;object-fit:contain;}
.stm-tix__name{min-width:0;font-weight:700;font-size:1rem;line-height:1;letter-spacing:.01em;text-transform:uppercase;color:var(--st-color-primary,#002F5D);display:flex;flex-direction:column;gap:2px;transition:color .2s ease;}
.stm-tix__name small{font-size:.6875rem;font-weight:700;line-height:1;}
.stm-tix__chev{flex:0 0 8px;width:8px;height:17px;margin-left:auto;color:var(--st-color-primary,#002F5D);transition:color .2s ease;} /* R3: Proportion der gelieferten Chevron.svg (viewBox 7x15) - nie mehr verzerrt */
.stm-tix__chev svg{display:block;width:100%;height:100%;}
.stm-tix__chev svg *{fill:currentColor;} /* Illustrator-SVG hat festes fill #002f5d - fuer Hover-Rot uebersteuern */
.stm-tix__tab:hover .stm-tix__name, .stm-tix__tab.is-active .stm-tix__name,
.stm-tix__tab:hover .stm-tix__chev, .stm-tix__tab.is-active .stm-tix__chev{color:var(--st-color-accent,#B51F29);}
.stm-tix__panels{display:contents;}
.stm-tix__panel{display:contents;}
.stm-tix__panel[hidden]{display:none;} /* display:contents wuerde das hidden-Attribut sonst uebersteuern */
.stm-tix__panel:not([hidden]):not(.is-leaving) .stm-tix__art,.stm-tix__panel:not([hidden]):not(.is-leaving) .stm-tix__stagetext,
.stm-tix__panel:not([hidden]):not(.is-leaving) .stm-tix__opttext,.stm-tix__panel:not([hidden]):not(.is-leaving) .stm-tix__cta{animation:stmTixFade .5s ease both;} /* 02.09. R4 (Maik): NUR die tauschenden Inhalte (Grafik, Texte, Button) blenden ueber - Linien + "Optionen"-Kicker bleiben stehen */ /* 03.09. R5 (Maik, "zu hart / blitzt auf"): laenger (.4 -> .5s) UND Zwei-Phasen-Wechsel: initTickets setzt vor dem Tausch 200ms .is-leaving aufs alte Panel -> dessen Inhalte blenden per Transition aus (das :not(.is-leaving) nimmt sie aus der Animation, sonst pinnt fill:both die Opacity auf 1) */
.stm-tix__panel .stm-tix__art,.stm-tix__panel .stm-tix__stagetext,
.stm-tix__panel .stm-tix__opttext,.stm-tix__panel .stm-tix__cta{transition:opacity .2s ease;}
.stm-tix__panel.is-leaving .stm-tix__art,.stm-tix__panel.is-leaving .stm-tix__stagetext,
.stm-tix__panel.is-leaving .stm-tix__opttext,.stm-tix__panel.is-leaving .stm-tix__cta{opacity:0;}
@keyframes stmTixFade{from{opacity:0;}to{opacity:1;}}
.stm-tix__stage{position:relative;align-self:stretch;border-left:1px solid var(--st-color-primary,#002F5D);border-right:1px solid var(--st-color-primary,#002F5D);min-height:360px;} /* 02.09. R4: 1px */
.stm-tix__art{position:absolute;left:20px;bottom:0;width:250px;height:230px;max-width:70%;z-index:0;display:flex;align-items:flex-end;justify-content:flex-start;}
.stm-tix__art img{width:auto;height:auto;max-width:100%;max-height:100%;} /* 18.08. R3: Naturgroesse bis Box-Limit - eng beschnittene SVGs (Paket 156x156) werden nicht mehr auf Boxhoehe aufgeblasen */
.stm-tix__art--mobile{display:none;}
.stm-tix__stagetext{position:relative;z-index:1;padding:14px 9.1% 0 0;text-align:right;}
.stm-tix__bigpre{margin:0;font-weight:700;font-size:1.75rem;line-height:1.05;letter-spacing:.01em;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* R3: Vorzeile (HL klein) groesser */ /* 03.09. R5 (Maik): Zeilenabstaende zwischen den HLs halbiert - lh 1.15 -> 1.05, Extra-Margin (.1rem) raus */
.stm-tix__bighl{margin:0 0 1.2rem;margin-left:auto;max-width:350px;font-weight:700;font-size:clamp(2.5rem,3.7vw,3.05rem);line-height:.95;letter-spacing:-.01em;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* HL mittel (Kombi) - blau, letzte Pipe-Zeile rot */ /* 03.09. R5 (Maik): Zeilenabstand innerhalb der HL halbiert (lh 1.05 -> .95 - Versal-Zeilen, kein Unterlaengen-Risiko) */
.stm-tix__bighl--xl{font-size:clamp(2.75rem,4.4vw,3.375rem);} /* R3: HL GROSS (Turm/Krypta/Gutschein, ohne Vorzeile) */
.stm-tix__hlred{color:var(--st-color-accent,#B51F29);}
.stm-tix__bigcopy{margin:0 0 0 auto;max-width:240px;font-size:1rem;line-height:1.4;color:var(--st-color-primary,#002F5D);} /* 02.09. R4 (Maik): Copy sichtbar schmaler als die HL (260 -> 240, HL 350) */
.stm-tix__opt{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;padding-top:4px;}
.stm-tix__opttext{font-size:.875rem;line-height:1.3;color:#222;margin-bottom:1.6rem;} /* 18.08. R3: Mindestabstand zum Button auch bei langem Text */
.stm-tix__opttext h6, .stm-tix__opttext .stm-optlabel{margin:1.1em 0 .5em;font-size:1rem;color:var(--st-color-accent,#B51F29);text-transform:none;letter-spacing:0;}
.stm-tix__opttext > :first-child{margin-top:0;}
/* 18.08.: Bullets (Kombiticket Hafenrundfahrt) + Gutscheinbetraege = Listen im Optionen-Feld -> Primaerrot + bold */
.stm-tix__opttext ul:not([class]) li{color:var(--st-color-accent,#B51F29);font-weight:700;font-size:1rem;} /* R3: gleiche Groesse wie die h6-Optionstitel */
.stm-tix__opttext ul:not([class]) li::marker{color:var(--st-color-accent,#B51F29);}
.stm-tix .stm-tix__opttext > :first-child{margin-top:0;} /* 03.09. R5 (Maik, "Copy bei Turm & Hafenrundfahrt sitzt tiefer"): die Bullet-Liste startete 5.6px tiefer als die H6s der anderen Tickets - eine allgemeinere ul-Regel schlug das schwaechere :first-child-Reset; hoehere Spezifitaet gewinnt jetzt (gilt Desktop UND Mobile) */
.stm-tix__opttext ul:not([class]) li:first-child{margin-top:0;} /* dito: auch das erste LI brachte 3.2px Eigen-Margin mit */
.stm-tix__opttext strong{color:var(--st-color-accent,#B51F29);font-weight:700;font-size:1rem;} /* Gutscheinbetraege: rot + Groesse wie h6-Optionstitel */
.stm-tix__cta{margin-top:auto;display:inline-flex;align-items:center;gap:12px;} /* 07.09. R3 (Maik, Global Buttons): KEINE Sondergroesse mehr - Basis ist der definierte grosse CTA (Hoehe/Typo/Padding aus .btn: 45px/1.25rem/1.5rem, mobil via globalem <=1000-Block automatisch klein); nur Icon-Gap bleibt modulspezifisch. Damit klemmt das Ticket-Icon (35x31) nicht mehr. */
.stm-tix__cta .btn__ico{width:35px;height:31px;}
.stm-tix__cta .btn__ico svg{width:100%;height:100%;max-width:none;}
/* 02.09. R4 (Maik): schmale Desktop-Formate - Karte skaliert sauber mit: weniger Innenraum,
   Grafik/HLs eine Stufe kleiner, CTA = kleiner Mobile-Button.
   03.09. R5 (Maik, "Grenze zu Mobile/Tablet funktioniert nicht - Spalte 1 rutscht in Spalte 2"):
   Untergrenze der 3-Spalten-Karte von 920 auf 1024 angehoben - zwischen 920 und 1023 war die
   Karte trotz aller Verkleinerungen zu eng (Stage-Typo lief ueber die Nav-Spalte), dort greift
   jetzt das funktionierende Mobile-Layout mit Selectbox. HLs/Copy brechen zudem FRUEHER um
   (schmalere max-width-Kanten) statt ueberzulaufen. Das Ticket-Icon im CTA behaelt seine
   ORIGINALGROESSE 35x31 (Maik: nicht mehr kleiner skalieren - wenn es gar nicht passt, blendet
   es aus; bei >=1024 passt der kleine CTA mit Voll-Icon aber in die 27.9%%-Spalte). */
/* 07.09. R6 (Maik, "Tabletbereich"): EINHEITLICHE Abstaende zu den Trennlinien. Live gemessen
   bei 1024px waren es 7.3 / 21 / 23.9 / 27.9px: (a) die %%-Spalten + space-between machen die
   Rinnen breitenabhaengig, (b) die Illustration sass fix bei 20px, (c) die Typo-Kante bei 9.1%%
   der Stage, (d) und Spalte 1 LIEF UEBER - "HAFENRUNDFAHRT" ist unbrechbar, der Chevron wurde
   bis 7px an die Linie gedrueckt (Maiks "rechts 1. Spalte viel zu klein"). Fix: fr-Spalten in
   den ALTEN Proportionen + fester column-gap 24px -> alle vier Rinnen exakt 24px; Illustration
   left 23px + Typo-Padding 23px (+1px Border = 24); Nav eine Stufe kompakter (Icon 34, Gap 12,
   Label 15px + hyphens als Netz), damit die lange Kombiticket-Zeile in die Spalte passt. */
@media (min-width:1024px) and (max-width:1240px){
  .stm-tix{padding:28px 3% 28px 2.6%;grid-template-columns:minmax(0,29.3fr) minmax(0,35.1fr) minmax(0,27.9fr);column-gap:24px;}
  .stm-tix__tab{gap:12px;}
  .stm-tix__ico{flex-basis:34px;width:34px;height:34px;}
  .stm-tix__name{font-size:.9375rem;hyphens:auto;}
  .stm-tix__art{width:min(250px,80%);height:200px;left:23px;}
  .stm-tix__stagetext{padding-right:23px;}
  .stm-tix__bighl{font-size:clamp(2.05rem,2.9vw,2.5rem);max-width:300px;}
  .stm-tix__bighl--xl{font-size:clamp(2.3rem,3.4vw,2.9rem);}
  .stm-tix__bigcopy{max-width:210px;}
  .stm-tix__cta{height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:10px;} /* 07.09. R3 (Maik, Global Buttons): Basis = definierter KLEINER CTA (37.5px) statt Sondermass 33px */
  .stm-tix__cta .btn__ico{width:26px;height:23px;} /* 07.09. R6 (Maik): kleiner CTA war da, Icon aber noch 35x31 vom Desktop-CTA - jetzt die 26x23 des kleinen CTAs (wie Mobile) */
}
@media (max-width:919px){
  .module{padding-left:0;padding-right:0;} /* 18.08. R3 (Maik, alle Module): mobiler Weissraum halbiert - module- UND inner-Padding waren je 24px */ /* 03.09. R5: bleibt bei 919 (gilt fuer ALLE Module) - nur die Tickets-Karte wechselt schon bei 1023 ins Mobile-Layout */
  .module--hero:not(.is-full){width:calc(100% - 48px);} /* 13.09. (Kunde, "Hero Module"): Satzspiegel-Heros waren mobil SCHMALER als der Satzspiegel - die Basisregel (main.css) rechnet mit var(--st-gutter)=IMMER 60px (bekannte :root-Doublette, s. dev-log 11.09.), mobil sind es aber 24px je Seite -> hier mit den echten 24px gerechnet */
} /* 13.09. NACHT-FIX: diese schliessende Klammer war beim Einfuegen der Hero-Regel verloren gegangen - dadurch hing ALLES ab hier (Timeline-Desktop, G2-Lightbox, G5, Termin-Kacheln, ...) im max-width:919px-Block und war auf Desktop tot. LEHRE: vor jeder CSS-Auslieferung Klammer-Bilanz pruefen. */
@media (max-width:1023px){
  .stm-tix{display:block;border:1px solid var(--st-color-primary,#002F5D);padding:24px 16px;} /* R3: Selectbox sitzt IN der Karte */ /* 02.09. R4 (Maik): Kontur 1px; Padding oben+unten +50% (16 -> 24px) */
  .stm-tix__mnav{display:block;margin:0 0 1rem;}
  .stm-tix__select{appearance:none;-webkit-appearance:none;width:100%;padding:.9rem 2.8rem .9rem 1.2rem;border:1.5px solid rgba(0,47,93,.35);border-radius:10px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 8'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23B51F29' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 1.2rem center/16px 9px;font:inherit;font-weight:700;font-size:1rem;text-transform:uppercase;letter-spacing:.02em;color:var(--st-color-accent,#B51F29);text-align:left;} /* 02.09. R4 (Maik): keine Pille mehr - abgerundete Ecken + Look exakt wie die Timeline-Selectbox (radius 10, 1.5px halbtransparenter Rand, VERSAL rot, roter Chevron) */
  .stm-tix__nav{display:none;}
  .stm-tix__panels{display:block;}
  .stm-tix__panel{display:block;border:0;padding:0;}
  .stm-tix__panel[hidden]{display:none;}
  .stm-tix__stage{border:0;min-height:0;padding:0 0 1.2rem;}
  .stm-tix__art--desktop{display:none;}
  .stm-tix__art--mobile{display:block;position:relative;left:0;bottom:auto;width:auto;height:210px;max-width:60%;} /* 02.09. R4 (Maik): Hoehe FIX statt width:56% - die Grafik skaliert nicht mehr mit der Viewportbreite */
  .stm-tix__art--mobile img{width:auto;height:100%;max-width:100%;object-fit:contain;object-position:left top;}
  .stm-tix__stagetext{position:absolute;top:0;right:0;max-width:72%;padding:0;}
  .stm-tix__bigpre{font-size:clamp(1.35rem,5.6vw,1.75rem);} /* 02.09. R4 (Maik): alle HL-Varianten groesser, skalieren per vw bis zur Desktop-Groesse hoch */
  .stm-tix__bighl{font-size:clamp(2.3rem,10vw,3.375rem);max-width:none;margin-bottom:.8rem;} /* 03.09. R5 (Maik): mittelgrosse HL mobil GENAUSO GROSS wie die grosse (gleiche clamp wie --xl); Abstand HL -> Copy um 1/3 verringert (1.2 -> .8rem) */
  .stm-tix__bighl--xl{font-size:clamp(2.3rem,10vw,3.375rem);}
  .stm-tix__bigcopy{max-width:82%;} /* R3: Textbox schmaler als die HL */
  .stm-tix__opt{padding:0;}
  .stm-tix__opt .stm-tix__kicker{margin-bottom:1.05rem;} /* 02.09. R4 (Maik): Abstand "Optionen" -> Copy um 1/3 verringert (1.6 -> 1.05rem) */
  .stm-tix__opttext{margin-bottom:1rem;}
  .stm-tix__opttext h6, .stm-tix__opttext .stm-optlabel{margin:.8em 0 .3em;} /* R3: mobile Abstaende kompakter */
  .stm-tix__cta{margin-top:.8rem;height:37.5px;font-size:1rem;font-weight:400;padding:0 1.22rem;gap:10px;} /* R3: CTA mobil immer klein */ /* 07.09. R3 (Maik, Global Buttons): Basis = definierter kleiner CTA (37.5px/1rem/1.22rem) statt Sondermass 33px - explizit, weil dieser Block schon ab 1023 greift (globaler Klein-Switch erst <=1000) */
  .stm-tix__cta .btn__ico{width:26px;height:23px;}
}
.stm-ts__item{display:flex;justify-content:space-between;gap:1.5rem;padding:.3rem 0;font-size:.95rem;line-height:1.5;}
.stm-ts__text{min-width:0;}
.stm-ts__text mark{background:none;color:var(--st-color-accent,#B51F29);font-weight:700;}
.stm-ts__nr{flex:0 0 auto;white-space:nowrap;}
.stm-ts__map{margin:3.5rem 0 0;}
.stm-ts__mapimg{width:100%;height:auto;display:block;}
@media(max-width:900px){ .stm-ts__grid{grid-template-columns:1fr;} }


/* == 12.08.: Modul-Scroll-Animationen (Ticket "Animationen", BSH-Muster) ==
   Eigene schlanke Loesung statt wow.js/animate.css: IntersectionObserver + CSS-Keyframes.
   html.js-stm-reveal wird per Head-Script NUR gesetzt, wenn IO existiert und
   prefers-reduced-motion nicht aktiv ist (inc/anim.php); is-inview vergibt stm-modules.js.
   animation-fill backwards = nach dem Einblenden bleibt KEIN transform am Modul haengen
   (kein containing-block fuer fixe Kinder, keine Sticky-/Anker-Nebenwirkungen). */
html.js-stm-reveal .modules > .module:not(.module--parallax){opacity:0;}
html.js-stm-reveal .modules > .module.is-inview{opacity:1;animation:stmRevealUp .7s cubic-bezier(.25,.46,.45,.94) backwards;}
@keyframes stmRevealUp{from{opacity:0;transform:translate3d(0,64px,0);}to{opacity:1;transform:none;}} /* 12.08. Feedback Maik: Strecke 32->64px verdoppelt */
/* 26.08. (Asana "Modul Suche"): offener Zustand zeigt Close.svg (Markup-Span statt CSS-Balken);
   Suche-Icon hat Hover-State = Pressed-State (grauer Kreis, "Suche Lupe Hover") */
button.header-search{position:relative;}
button.header-search .header-search__lupe,button.header-search .header-search__close{display:inline-flex;line-height:0;}
button.header-search .header-search__close{display:none;}
button.header-search.is-open .header-search__lupe{display:none;}
button.header-search.is-open .header-search__close{display:inline-flex;}
button.header-search::before{content:"";position:absolute;left:50%;top:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;background:#CAD9E0;opacity:0;} /* 28.08. R2 (Maik): Hoverkreis 40 statt 44; Kreisfarbe aus "Suche Lupe Hover.svg" */
button.header-search:hover::before,button.header-search:active::before{opacity:1;}
button.header-search.is-open::before{display:none !important;} /* 28.08. (Maik): Close-Icon hat KEINEN Hover-/Active-State - Kreis nur an der Lupe */
/* 28.08. (Asana "Modul Eyeable"): Barrierefreiheit-Icon neben der Suche; Hover = Kreis aus "Barrierefreiheit Icon Hover.svg" (#CAD9E0). Nach Klick (Eye-Able oeffnet) faellt der Button automatisch in den Default zurueck. */
button.header-a11y{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:0;background:none;color:var(--st-color-primary,#002F5D);cursor:pointer;}
button.header-a11y svg{width:40px;height:40px;max-width:none;flex:0 0 auto;position:relative;} /* 28.08. R2 (Maik): SVG in Kreisgroesse rendern - die 40er-viewBox enthaelt den Bounds-Kreis, damit stimmt Icon:Kreis wie im SVG angelegt */
button.header-a11y{position:relative;}
button.header-a11y::before{content:"";position:absolute;left:50%;top:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;background:#CAD9E0;opacity:0;} /* 28.08. R2 (Maik): Hoverkreis 40 statt 44 - Icon groesser, Kreis kleiner */
button.header-a11y:hover::before,button.header-a11y:active::before{opacity:1;}
a#bottomBar{display:none !important;} /* Original-EyeAble-Schwebebutton unten links aus - Zugang laeuft ueber unser Header-Icon */
@media (max-width:1000px){ /* 26.08. (Maik, Modul Suche mobil) */
  .stm-searchbar{margin-right:0;width:auto;box-shadow:none;border-top:1px solid #B0B0B0;} /* full width im Clip-Container; Trennlinie sichtbar; liegt hinter #site-nav (Clip z60 < 80) */
  .stm-searchbar__asp{padding:.6rem 0 1.4rem;}
  #stm-searchbar .asp_m .probox .proinput{padding-left:18px !important;} /* linksbuendig zum Burger-Icon (14px Header-Padding + 4px Icon-Versatz) */
  #stm-searchbar .asp_m .probox{padding-right:16px !important;} /* 28.08. (Maik): 40er-Lupe mittig unter dem mobilen Close-Icon (Header-Padding 14 + 44er-Button) - klebt nicht mehr am Rand */
  #stm-searchbar .asp_m .probox .proinput input.autocomplete{left:18px !important;width:calc(100% - 18px) !important;}
  .stm-searchbar__asp p.asp-try{padding:0 18px;}
}

/* == 12.08. Ticket "Zahlenformate, global": Lining-Numbers ueberall, Oldstyle NUR bei den
   grossen Termin-Tageszahlen (.stm-evl-row__day) - CSS-Vorgabe des Kunden == */
body{font-feature-settings:"lnum";font-variant-numeric:lining-nums;}
button,input,select,textarea{font-feature-settings:"lnum";font-variant-numeric:lining-nums;} /* 28.08. (Maik, Quicknavi): UA-font-SHORTHAND auf Formularelementen (Chrome/FF) resettet die geerbten Ziffern-Features -> Mediaevalziffern; hier explizit Versalziffern */
.stm-evl-row__day{font-feature-settings:normal;font-variant-numeric:oldstyle-nums;}

/* ================= Timeline (Drehrad + Drehkreis, Figma 8500:1870, 17.08.2026) ================= */
.module--timeline{width:100%;max-width:1440px;margin-left:auto;margin-right:auto;padding-left:0;padding-right:0;overflow:hidden;} /* 18.08. R2: auf breiten Monitoren am Satzspiegel ausgerichtet statt Full-Bleed */
.module--timeline > .module__inner{max-width:none;padding-left:0;padding-right:0;}
.stm-tl__head{max-width:1200px;margin:0 auto 1rem;padding:0 var(--st-gutter,60px);text-align:center;}
.stm-tl__head .module__headline{margin-left:auto;margin-right:auto;} /* 18.08. R2: globale max-width:760 klebte links - Topline- und HL-Mitte deckungsgleich */
.stm-tl{position:relative;}
.module.module--timeline{max-width:none;} /* 19.08. R3 (Maik): Modul Full-Width - Rad und Kreis kleben am linken Viewport-Rand, Content bleibt im 1440er-Satzspiegel zentriert */
.stm-tl__stage{position:relative;margin:0 auto;min-height:1000px;display:flex;align-items:center;}

/* Drehkreis */
.stm-tl__orbit{position:absolute;left:0;top:500px;width:256px;height:1080px;transform:translateY(-50%);pointer-events:none;} /* 13.09. ("Modul Timeline", Punkt 4): top fix auf die halbe min-height der Stage (1000px) statt 50% - waechst die Stage mit langem Content, blieb Ring+Rad sonst nicht stehen ("Navigation verspringt beim Scrollen" = Blaettern per Scrollrad aendert die Slide-Hoehe und damit die 50%-Mitte) */
.stm-tl__ring{position:absolute;left:-824px;top:0;width:1080px;height:1080px;border:3px solid var(--st-color-primary,#002F5D);border-radius:50%;} /* 13.09.: Ring rotiert NICHT mehr (Morph-Stationen statt Wanderung) - transition/will-change raus */
/* 13.09. ("Modul Timeline", Punkt 1): Kreis-Animation als MORPH zwischen drei festen Stationen
   auf der Kontur (-16/0/+16 Grad; 0 = Ost = roter Punkt) statt Ringrotation. Jeder Eintrags-Punkt
   ist ein Traeger: left/top = Ringmitte (537px Padding-Box), transform rotate(S*16deg)
   translateX(538.5px) setzt ihn auf die Kontur; die transform-Interpolation laeuft exakt auf dem
   Kreisbogen. Beim Blaettern morpht der kleine blaue Punkt direkt zum grossen roten (Weg nur 16
   Grad ~ 150px) und der rote umgekehrt zum kleinen blauen; die Aussenstationen +-32 Grad (opacity
   0) lassen den naechsten Punkt rein- bzw. den vorletzten rausschieben. Der rote Punkt wandert
   nie mehr ueber den ganzen Kreis. .is-ready gated die Transition, damit der erste Paint nicht
   vom Ost-Stapel aus animiert. */
.stm-tl__dotgrp{position:absolute;left:537px;top:537px;width:30px;height:30px;margin:-15px 0 0 -15px;display:flex;align-items:center;justify-content:center;padding:0;background:none;border:0;cursor:pointer;pointer-events:auto;transform:rotate(0deg) translateX(538.5px);font:inherit;}
.stm-tl__ring.is-ready .stm-tl__dotgrp{transition:transform .6s cubic-bezier(.4,0,.2,1),opacity .4s ease;}
.stm-tl__dot{flex:0 0 auto;width:15px;height:15px;border-radius:50%;background:var(--st-color-primary,#002F5D);transition:width .6s cubic-bezier(.4,0,.2,1),height .6s cubic-bezier(.4,0,.2,1);} /* klein/blau als Default; is-current zieht auf 30px rot. 14.09. (Kunde, "Timeline"): Farbe wechselt HART statt per .6s-Transition - der Blau<->Rot-Fade lief durch entsaettigte Mischtoene, die als "Punkt wird transparent" wahrgenommen wurden (im Screenrecording gemessen: Weinrot-Phase je Wechsel). Groesse+Bogenfahrt animieren weiter, Rot ist damit in jedem Frame 100% satt. Gilt auch fuer den Hover-Farbwechsel. */
.stm-tl__dotlabel{font-weight:700;font-size:1.25rem;line-height:1.1;letter-spacing:.02em;text-transform:uppercase;color:var(--st-color-primary,#002F5D);text-align:left;max-width:170px;transition:opacity .3s ease;}
.stm-tl__dotgrp.is-current .stm-tl__dot{width:30px;height:30px;background:var(--st-color-accent,#B51F29);}
.stm-tl__dotgrp.is-current{cursor:default;pointer-events:none;}
.stm-tl__dotgrp.is-current .stm-tl__dotlabel{opacity:0;} /* aktueller Name steht am Rad */
.stm-tl__dotgrp.is-off{opacity:0;pointer-events:none;}
.stm-tl__dotgrp:hover .stm-tl__dot{background:var(--st-color-accent,#B51F29);} /* 13.09. (Punkt 2): sichtbare Punkte stehen IMMER auf 100% Deckkraft (Halbtransparenz gibt es nur noch als opacity-0-Aussenstation) - Hover faerbt rot */
.stm-tl__dotgrp:hover,.stm-tl__marrow:hover,.stm-tl__arrow:hover,.stm-tl__more:hover{opacity:1;} /* 16.09. R2 (Kunde, "Timeline Modul": Hover-Effekte '100% Deckkraft'): die GLOBALE Altregel button:hover{opacity:.92} (main.css:201, Basistheme) dimmte alle Timeline-Buttons beim Hover leicht - fuer Punkte, Slider-Kreise, Blaetterpfeile und Mehr-anzeigen hier auf voll gestellt (0-2-0 schlaegt 0-1-1). Die Altregel selbst bleibt vorerst unangetastet (siteweite Nebenwirkungen) - MERKER im dev-log fuer die Global-Entruempelung. */

/* Drehrad */
.stm-tl__wheel{position:absolute;left:0;top:500px;transform:translateY(-50%);display:flex;align-items:center;gap:14px;z-index:3;cursor:grab;user-select:none;touch-action:none;padding:14px 0;} /* 13.09. (Punkt 4): top fix 500px statt 50% - siehe .stm-tl__orbit */
.stm-tl__wheel:active{cursor:grabbing;}
.stm-tl__wheel:focus-visible{outline:2px solid var(--st-color-primary,#002F5D);outline-offset:4px;}
.stm-tl__bars{display:flex;flex-direction:column;gap:12px;}
.stm-tl__bars i{display:block;width:40px;height:5px;border-radius:0;background:var(--st-color-primary,#002F5D);} /* 11.09. (Stefanie, "Modul Timeline"): Linien der Navigation am Browserrand mit Corner-Radius 0 (war 2px) */
.stm-tl__bars i:nth-child(5){width:60px;background:var(--st-color-accent,#B51F29);}
/* 14.09. (Kunde, "Timeline"): Tick-Huepfer der Balken (+-6px je Raste beim Scrollen/Ziehen) RAUS -
   "die Navigationslinien springen beim Scrollen, bitte statisch an ihrer Position" (zweite
   Meldung dazu - der top:500px-Fix vom 13.09. betraf die Stage-Hoehe, DIES hier war das
   verbliebene Springen). Das Live-Feedback beim Drehen bleibt ueber das wechselnde Label.
   JS (tick() in initTimeline) setzt die is-tick-Klassen weiter - sie sind jetzt bewusst
   wirkungslos, damit nur die CSS deployt werden muss. */
.stm-tl__bars.is-tick,.stm-tl__bars.is-tick-down{animation:none;}
.stm-tl__wheellabel{font-weight:700;font-size:1.125rem;line-height:1.2;text-transform:uppercase;letter-spacing:.02em;color:var(--st-color-accent,#B51F29);max-width:150px;hyphens:auto;overflow-wrap:break-word;} /* 20.08. Finale (Maik): laeuft nicht mehr in den aktiven Punkt (Punkt ab x~240, Label ab 74) - hyphens:auto, vertikal zentriert via align-items:center am Wheel */

/* Inhalt */
.stm-tl__slides{width:100%;max-width:1440px;margin:0 auto;padding:0 80px 0 311px;} /* buendig zur 1440er-Stage, Content ab x=311 wie Figma */
.stm-tl__row{display:flex;align-items:center;gap:48px;}
.stm-tl__text{flex:1 1 auto;min-width:0;max-width:930px;margin-left:clamp(-270px,calc((1440px - 100vw)/2),0px);} /* 20.08. Finale (Maik): 930 statt 660 - Block waechst bei breiten Viewports nach links Richtung Drehkreis (Zentrier-Offset, cap 270px); bei 1440 unveraendert, rechte Kante/Bild bleiben */
.stm-tl__kicker{margin:0 0 .8rem;font-weight:700;font-size:1.25rem;line-height:1.5;text-transform:uppercase;color:var(--st-color-accent,#B51F29);}
.stm-tl__hl{margin:0 0 1.4rem;font-weight:700;font-size:var(--stm-h2-size);line-height:var(--stm-h2-lh);text-transform:uppercase;color:var(--st-color-primary,#002F5D);hyphens:auto;overflow-wrap:break-word;} /* 21.08.: globale H2 */ /* 19.08. R3 (Maik): Groesse wie .module__headline + hyphens:auto */
.stm-tl__copy{font-size:var(--stm-copy-size,1.25rem);line-height:var(--stm-copy-lh,1.5);color:#222;} /* 03.09.: auf das Standard-Copy-Token umgestellt (Wert unveraendert - Timeline war die Referenz) */
.stm-tl__copy > p:first-child{color:var(--st-color-primary,#002F5D);} /* 19.08. R3 (Maik): kein erzwungenes Bold mehr - Fettung macht die Redaktion per strong; Farbe bleibt */
.stm-tl__morebox{font-size:1.25rem;line-height:1.5;color:#222;} /* 18.08. R2: Read-More-Teil (WordPress-Weiterlesen-Tag) statt Auto-Overflow-Klapper */
.stm-tl__morebox > :first-child{margin-top:1em;}
.stm-tl__morebox[hidden]{display:none;}
.stm-tl__more{display:flex;align-items:center;gap:12px;margin:1.4rem auto 0;padding:0;background:none;border:0;cursor:pointer;font:inherit;font-size:1.25rem;color:#888;}
.stm-tl__more:hover{color:var(--st-color-primary,#002F5D);}
.stm-tl__chev{display:inline-block;width:14px;height:8px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 8'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 8'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;transition:transform .3s ease;}
.stm-tl__more.is-open .stm-tl__chev{transform:rotate(180deg);}
.stm-tl__media{flex:0 0 auto;width:min(420px,38%);margin:0;}
.stm-tl__imgwrap{display:block;position:relative;aspect-ratio:25/30;overflow:hidden;}
.stm-tl__imgwrap img{width:100%;height:100%;object-fit:cover;display:block;}
.stm-tl__bu{margin-top:.6rem;font-size:1rem;line-height:1.25;color:#6D6D6D;}
.stm-tl__ctawrap{max-width:930px;margin:2.6rem 0 0;text-align:center;} /* unter dem Text, NICHT mitzentriert; 20.08.: mit Textblock auf 930 */

/* Blaetterpfeile */
.stm-tl__arrows{position:absolute;right:max(80px,calc((100% - 1440px)/2 + 80px));bottom:60px;display:flex;gap:24px;z-index:3;} /* 19.08. R3: Pfeile bleiben am Satzspiegel, nicht am Viewport-Rand */
.stm-tl__arrow{display:flex;align-items:center;justify-content:center;padding:6px;background:none;border:0;cursor:pointer;color:var(--st-color-primary,#002F5D);}
.stm-tl__arrow svg{width:34px;height:16px;display:block;}
.stm-tl__arrow:hover{color:var(--st-color-accent,#B51F29);}
.stm-tl__arrow:disabled{opacity:.25;cursor:default;color:var(--st-color-primary,#002F5D);}

/* Content-Animation */
.stm-tl__slide.is-in{animation:stmTlFade .5s ease both;}
@keyframes stmTlFade{from{opacity:0;}to{opacity:1;}}
.stm-tl--anim-swipe .stm-tl__slide.is-in.is-up{animation:stmTlUp .5s cubic-bezier(.4,0,.2,1) both;}
.stm-tl--anim-swipe .stm-tl__slide.is-in.is-down{animation:stmTlDown .5s cubic-bezier(.4,0,.2,1) both;}
@keyframes stmTlUp{from{opacity:0;transform:translateY(56px);}to{opacity:1;transform:none;}}
@keyframes stmTlDown{from{opacity:0;transform:translateY(-56px);}to{opacity:1;transform:none;}}
.stm-tl__slide[hidden]{display:none;}

/* Mobile Auswahl (Selectbox + Pfeile) */
.stm-tl__mnav{display:none;}
@media (max-width:919px){
	.stm-tl__orbit,.stm-tl__wheel{display:none;}
	.stm-tl__stage{min-height:0;display:block;padding:1rem 0 2rem;}
	/* 18.08. R2: Mobile-Navigation nach Layout - Selectbox-Pill + flacher Kreisbogen mit rotem Punkt und Pfeilen AUF der Linie */
	.stm-tl__mnav{display:block;margin:0 0 1rem;padding:0 var(--st-gutter,24px);}
	.stm-tl__selectwrap{position:relative;display:block;}
	.stm-tl__selectwrap::after{content:"";position:absolute;right:1.2rem;top:50%;width:16px;height:9px;transform:translateY(-50%);pointer-events:none;background:var(--st-color-accent,#B51F29);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 8'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E") no-repeat center/contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 8'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E") no-repeat center/contain;}
	.stm-tl__selectwrap select{appearance:none;-webkit-appearance:none;width:100%;padding:.9rem 2.8rem .9rem 1.2rem;border:1.5px solid rgba(0,47,93,.35);border-radius:10px;background:#fff;font-weight:700;font-size:1rem;text-transform:uppercase;letter-spacing:.02em;color:var(--st-color-accent,#B51F29);text-align:left;}
	.stm-tl__marc{position:relative;height:120px;margin:1.4rem calc(-1*var(--st-gutter,24px)) .6rem;color:var(--st-color-primary,#002F5D);}
	.stm-tl__marcline{position:absolute;inset:0;width:100%;height:100%;display:block;}
	.stm-tl__marcdot{position:absolute;left:50%;top:73%;width:34px;height:34px;transform:translate(-50%,-50%);border-radius:50%;background:var(--st-color-accent,#B51F29);}
	/* 18.09. (Stefanie, "Hover-Farbe aus den Timeline Arrows weg"): Die mobilen Kreis-Pfeile waren
	   EIGENBAU (CSS-Kreis #002F5D + Masken-Pfeil) und hatten nie einen Farb-Hover - jetzt die
	   GELIEFERTEN Assets "Timeline Arrow left/right default/hover.svg" (34x34: Kreis #002F5D bzw.
	   Hover #034B91, Pfeil weiss im Artwork). Hover-Variante als geparkte Zweitebene VORGELADEN
	   (Preload-Muster R40), der ::before-Maskenpfeil entfaellt. */
	.stm-tl__marrow{position:absolute;width:44px;height:44px;border:0;border-radius:50%;cursor:pointer;left:9%;top:34%;transform:translate(-50%,-50%);background-color:transparent;background-image:url("../img/icons/Timeline%20Arrow%20left%20default.svg"),url("../img/icons/Timeline%20Arrow%20left%20hover.svg");background-position:center,-60px -60px;background-size:44px 44px,1px 1px;background-repeat:no-repeat;}
	.stm-tl__marrow:hover,.stm-tl__marrow:active{background-image:url("../img/icons/Timeline%20Arrow%20left%20hover.svg"),url("../img/icons/Timeline%20Arrow%20left%20default.svg");}
	.stm-tl__marrow--next{left:auto;right:9%;transform:translate(50%,-50%);background-image:url("../img/icons/Timeline%20Arrow%20right%20default.svg"),url("../img/icons/Timeline%20Arrow%20right%20hover.svg");}
	.stm-tl__marrow--next:hover,.stm-tl__marrow--next:active{background-image:url("../img/icons/Timeline%20Arrow%20right%20hover.svg"),url("../img/icons/Timeline%20Arrow%20right%20default.svg");}
	.stm-tl__marrow::before,.stm-tl__marrow--next::before{content:none;}
	.stm-tl__marrow:disabled{visibility:hidden;cursor:default;} /* 13.09. (Mobile Punkt 6): an Anfang/Ende GAR KEIN Slider-Kreis (war opacity .3 = "ausgegraut"); visibility haelt das Layout, faengt aber Hover/Tap */
	.stm-tl__slides{padding:0 var(--st-gutter,24px);}
	.stm-tl__row{flex-direction:column;align-items:stretch;gap:1.8rem;}
	.stm-tl__media{width:100%;max-width:420px;margin:0 auto;}
	.stm-tl__ctawrap{max-width:none;margin-top:2rem;}
	.stm-tl__arrows{position:static;justify-content:center;margin-top:1.6rem;}
}
@media (prefers-reduced-motion:reduce){
	.stm-tl__ring,.stm-tl__dotgrp,.stm-tl__ring.is-ready .stm-tl__dotgrp,.stm-tl__dot{transition:none;} /* 13.09.: is-ready-Regel ist spezifischer - hier mit abdecken */
	.stm-tl__slide.is-in,.stm-tl--anim-swipe .stm-tl__slide.is-in.is-up,.stm-tl--anim-swipe .stm-tl__slide.is-in.is-down{animation:none;}
	.stm-tl__bars.is-tick,.stm-tl__bars.is-tick-down{animation:none;}
}

/* =========================================================
   Newsletter-Layer (Exit-Intent-Popup) - 20.08.2026
   Ansicht: Hero + Newsletter-Modul der Quellseite, ohne Full-Width.
   ========================================================= */
.stm-nlpop{position:fixed;inset:0;z-index:2000;background:rgba(255,255,255,.88);display:flex;align-items:center;justify-content:center;padding:24px;opacity:0;transition:opacity .25s ease;} /* Nachschlag: 88% Weiss wie Twingle-Layer statt Blau */
.stm-nlpop.is-open{opacity:1;}
.stm-nlpop[hidden]{display:none;}
body.stm-nlpop-lock{overflow:hidden;}
.stm-nlpop__dlg{position:relative;width:min(1000px,100%);max-height:calc(100vh - 48px);background:#fff;box-shadow:0 24px 64px rgba(0,0,0,.35);display:flex;flex-direction:column;transform:translateY(16px);transition:transform .25s ease;}
.stm-nlpop.is-open .stm-nlpop__dlg{transform:none;}
/* Kopf-Streifen: blockieren + schliessen */
.stm-nlpop__bar{position:relative;display:flex;align-items:center;justify-content:center;background:var(--st-color-primary,#002F5D);color:#fff;padding:.35rem 3rem;min-height:44px;} /* Nachschlag: Blockier-Link zentriert, X absolut rechts */
.stm-nlpop.is-manual .stm-nlpop__block{display:none;} /* Blockier-Text nur beim automatischen Aufruf */
.stm-nlpop__block{background:none;border:0;padding:.35rem 0;cursor:pointer;font:inherit;font-size:.9rem;color:#fff;text-decoration:underline;text-underline-offset:3px;opacity:.9;}
.stm-nlpop__block:hover{opacity:1;}
.stm-nlpop__x{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:38px;height:38px;background:none;border:0;padding:0;cursor:pointer;color:#fff;outline:none;}
.stm-nlpop__x:focus,.stm-nlpop__x:focus-visible{outline:none;box-shadow:none;} /* Nachschlag: keine blaue Outline */
.stm-nlpop__x svg path{fill:#fff;} /* Close.svg bringt fill:#222 als eingebettete Klasse mit - hier weiss */
.stm-nlpop__x svg{width:22px;height:22px;max-width:none;display:block;}
.stm-nlpop__scroll{overflow-y:auto;overscroll-behavior:contain;}
/* Hero-Teil (nutzt hero__box/topline/headline-Optik des Hero-Moduls) */
.stm-nlpop__hero{position:relative;min-height:230px;display:flex;align-items:center;overflow:hidden;}
.stm-nlpop__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.stm-nlpop .stm-nlpop__box{margin:2rem 2rem 2rem 0;padding:1.75rem 2rem 1rem;max-width:min(430px,72%);} /* Nachschlag: Headline-Box buendig an den linken Rand */
.stm-nlpop .stm-nlpop__box .hero__headline{font-size:clamp(1.8rem,3.4vw,2.6rem);margin-bottom:.35em;}
/* Newsletter-Teil: stm-nlx-Optik im Dialog */
.stm-nlpop__nl{padding:2rem 2.5rem 2.5rem;}
.stm-nlpop__nl .stm-nlx__copy{margin:0 0 1.6rem;}
.stm-nlpop__nl .stm-nlx__grid{gap:2rem 48px;}
@media(max-width:760px){
  .stm-nlpop{padding:0;}
  .stm-nlpop__dlg{max-height:100dvh;width:100%;height:100%;}
  .stm-nlpop__nl{padding:1.5rem 1.25rem 2rem;}
  .stm-nlpop__nl .stm-nlx__grid{grid-template-columns:minmax(0,1fr);}
  .stm-nlpop .stm-nlpop__box{margin:1.25rem 1.25rem 1.25rem 0;max-width:none;}
  .stm-nlpop__hero{min-height:180px;}
}

/* =========================================================
   Global (Asana 21.08., Maik):
   1) Letter-Spacing ueberall 0 (alle Schriften + CTAs).
   2) Alle Bilder ohne Eckenradius (Logo bleibt rund).
   ========================================================= */
*{letter-spacing:0 !important;}
:root{--st-radius:0px;}
img:not(.custom-logo){border-radius:0 !important;}
.stm-card__media,.stm-thumbs__stage,.module--slider2 .slider2__item,.news-card,.event-card{border-radius:0;} /* Bild-Wrapper mit overflow:hidden clippen sonst weiter rund */

/* =========================================================
   Termin-Einzelseite nach Figma (Asana "Modul Termine
   Einzelseiten", 23.08.2026). Kategoriefarbe kommt als --evc
   von den bestehenden is-cat-*-Klassen; CTAs/Badge nutzen die
   Uebersichts-Komponenten (.stm-evl__btn / .stm-evl__badge).
   ========================================================= */
.module--sgt{padding:0 0 4rem;}
.sgt-hero{position:relative;overflow:hidden;}
/* 28.08. (Maik): gleiche Blaetterpfeile wie in allen Heros - Kreis-Outline unten rechts */
.sgt-hero .stm-slider__prev,.sgt-hero .stm-slider__next{top:auto;bottom:24px;transform:none;width:44px;height:44px;box-sizing:border-box;border-radius:50%;border:2px solid rgba(255,255,255,.85);background:transparent;color:rgba(255,255,255,.85);}
.sgt-hero .stm-slider__next{right:24px;}
.sgt-hero .stm-slider__prev{left:auto;right:76px;}
.sgt-hero .stm-slider__prev:hover:not(:disabled),.sgt-hero .stm-slider__next:hover:not(:disabled){background:rgba(255,255,255,.15);color:#fff;border-color:#fff;}
.sgt-hero__media img,.sgt-hero__img{display:block;width:100%;height:717px;object-fit:cover;} /* 26.08. (Maik): L-Hoehe wie Hero-Modul (hero-slider--l: 717/600) */
.sgt-hero__media .stm-slider,.sgt-hero__media .stm-slider__track,.sgt-hero__media .stm-slider__slide{height:100%;}
.sgt-hero__box{position:absolute;left:0;top:50%;transform:translateY(-50%);z-index:3;background:rgba(246,246,246,.92);padding:2rem 2.6rem 2.4rem;max-width:min(686px,88vw);} /* 28.08. (Maik praezisiert): Textbox VERTIKAL MITTIG im Hero */ /* 17.09. (Stefanie): z 2 -> 3, Copyright-Plakette (z2) liegt beim Einzelbild-Hero sonst UEBER der Box */
.sgt-hero__topline{margin:0 0 .4rem;font-weight:700;font-size:1.1rem;line-height:1.4;text-transform:uppercase;color:var(--st-color-accent,#B51F29);}
.sgt-hero__title{margin:0;color:var(--st-color-primary,#002F5D);hyphens:auto;overflow-wrap:break-word;}
.sgt-hero__media .stm-slider__dots{position:absolute;left:0;right:0;bottom:14px;z-index:3;}
/* 17.09. (Stefanie): Breadcrumb-Sondermargin der Unter-dem-Hero-Position (26.08.) entfernt -
   die Brotkrume steht auf beiden Einzelseiten jetzt VOR dem Hero (Templates) mit den
   Standard-Margins der Basisregel .stm-bc. */

.sgt-grid{display:grid;grid-template-columns:225px minmax(0,1fr) 260px;gap:2rem 56px;max-width:1320px;margin:70px auto 0;padding:0 var(--st-gutter,60px);align-items:start;box-sizing:border-box;} /* 16.09. (Stefanie, Einzelseiten): padding 24 -> Gutter 60 = Inhalt exakt im SATZSPIEGEL (Breadcrumb-Innenkante 353..1553, vorher ragte der Content 36px je Seite drueber); margin-top 70px = HALBIERTER News-Abstand (war dort 2.5rem+100px=140) - gilt per Ticket 'analog' fuer BEIDE Einzelseiten */
/* links: Datum - 26.08. (Maik) abgeglichen mit Uebersichts-Zeile: Zahl groesser, Monat weiter runter, Wochentag rot */
.sgt-date{display:flex;flex-direction:column;position:relative;padding-right:20px;}
.sgt-date::after{content:"";position:absolute;top:14px;right:0;width:4px;height:calc(100% - 14px - 1.6rem);background:var(--evc,#002F5D);} /* 26.08. R4 (Figma ausgemessen): Strich beginnt 14px UNTER der Ziffern-Oberkante, laeuft bis zur Datumszeile, 4px breit */
.sgt-date__top{display:flex;align-items:flex-start;gap:16px;font-size:8.75rem;} /* 26.08. (Maik/Figma): Zahl + vertikaler Strich; Groesse hier, damit Strich/Trim in em mitskalieren */
.sgt-date__day{font-weight:700;font-size:inherit;line-height:.9;color:var(--evc,#002F5D);letter-spacing:.02em;font-feature-settings:normal;font-variant-numeric:oldstyle-nums;margin:-.33em 0 .16em;} /* Margin-Trim: Ziffern-Oberkante buendig mit Spalten-/Strich-Oberkante, Unterkante schliesst mit dem Block (Meta-Pro-Linebox hat oben .33em Luft; Screenshot-kalibriert 26.08.) */
.sgt-date__month{font-weight:700;font-size:1.05rem;text-transform:uppercase;color:var(--evc,#002F5D);margin-top:.3rem;} /* 26.08. R4: 1.3rem */ /* 16.09. (Stefanie, beide Einzelseiten): Abstand Zahl->Monat HALBIERT - Glyph-Gap pixelvermessen 32 -> 16px => margin 20.8-16=4.8px (.3rem) */

.sgt-date__wd{margin-top:auto;font-weight:700;font-size:.95rem;line-height:1;text-transform:uppercase;color:var(--st-color-accent,#B51F29);padding-top:1rem;} /* 16.09. R2 (Stefanie, Termin-Einzelseite): Block Tag/Datum/Uhrzeit haengt via margin-top:auto UNTEN buendig an Spalten-/Linienende (Spalte align-self:stretch, s. Termin-Scope unten); lh 1.38 -> 1 fuer die HALBIERTEN Abstaende; padding-top als Mindestluft zum Monat, falls die Spalte nicht gestreckt wird */
.sgt-date__d{margin-top:1.7px;font-weight:700;font-size:.95rem;line-height:1;text-transform:uppercase;color:var(--st-color-primary,#002F5D);} /* 16.09. R2 (Stefanie): Abstaende HALBIERT (von den -25%-Werten der Vorrunde): lh 1 + .112rem -> Ink-Gap Ziel 5.90px */
.sgt-date__d + .sgt-date__d{margin-top:3.55px;} /* 16.09. R2 (Stefanie): halbiert -> Ink-Gap Ziel 4.76px (Datumszeile traegt 3px Ziffern-Unterlaenge, daher eigener Wert) */
.sgt-date__dr{display:contents;} /* 16.09. (Maik, Mobile-Figma): Wrapper wie .stm-evl-row__dr - Desktop layoutneutral, mobil (<=640) rechtsbuendiger Block */
.sgt-date__badge,.sgt-date__room{display:none;} /* 16.09. R2: Mobile-Dubletten von Badge/Ort (Desktop zeigt beide in der sgt-side) */
/* Mitte: 26.08. (Maik) Aufbau wie Uebersichts-Zeile - rote bold Headline erneut + alle Inhalte */
.sgt-body{padding-top:8px;} /* 26.08. R5: Strich-Oberkante buendig mit der HEADLINE-GLYPHKANTE - Titel-Linebox hat 6.5px Luft (Canvas-Metrik), 8px Padding + 6.5 ~ 14px Strich-Top */
.sgt-body__title{margin:0 0 .5rem;font-weight:700;font-size:1.25rem;line-height:1.3;color:var(--st-color-accent,#B51F29);}
.sgt-body__sub{margin:0 0 .7rem;font-weight:700;font-size:1.02rem;line-height:1.4;color:var(--st-color-accent,#B51F29);}
.sgt-body__lead{margin:0 0 1rem;font-weight:700;font-size:1.1rem;line-height:1.45;color:var(--st-color-ink,#222);}
.sgt-body__people,.sgt-body__org{margin:0 0 .6rem;font-size:1rem;line-height:1.45;color:var(--st-color-ink,#222);}
.sgt-body__note{margin:0 0 .6rem;font-size:.95rem;line-height:1.4;color:var(--st-color-ink,#222);}
.sgt-body__content{font-size:1rem;line-height:1.5;}
.sgt-body__content > :first-child{margin-top:0;}
/* rechts: 26.08. (Maik) Kategorie + Ort rechtsbuendig, CTAs buendig mit dem Text der Mitte */
.sgt-side{display:flex;flex-direction:column;align-items:flex-end;gap:.9rem;text-align:right;padding-top:14px;align-self:stretch;} /* Badge-Box-Kante buendig mit dem Strich (26.08. R5) */
/* 17.09. (Stefanie, Termin-Einzelseite Desktop): Das 16.09.-Strecken der Datums-Spalte ist RAUS -
   "Zahl + Tag/Datum/Uhrzeit-Block + Linie sind ein festes Konstrukt, unabhaengig vom Inhalt":
   die Spalte behaelt ihre natuerliche Hoehe (Zahl -> Monat -> Block, Basisregeln oben), die Linie
   endet an der Datumszeile (::after der Basis) - bei langem wie kurzem Content identisch.
   Die CTA-Spalte streckt WEITER (align-self:stretch an .sgt-side + margin-top:auto an den CTAs):
   CTAs bleiben unten buendig zum Content - dieser Teil des 16.09.-Mechanismus war nicht moniert. */
.sgt-side .sgt-side__badge{position:static;display:inline-block;background:var(--evc,#5D5D5D);}
.sgt-side__room{margin:0;display:flex;align-items:center;gap:.45rem;font-weight:700;font-size:.95rem;color:var(--st-color-primary,#002F5D);}
.sgt-side__ctas{display:flex;flex-direction:column;gap:14px;margin-top:auto;padding-top:.4rem;align-items:stretch;} /* 16.09. R2: margin-top:auto = unten buendig (s. Kommentar oben) */
/* Pager: 26.08. (Maik) links/rechts ausserhalb des Satzspiegels (Muster Uebersichts-Pfeile), oben viel Abstand */
.sgt-pagerwrap{max-width:1320px;margin:6.5rem auto 0;padding:0 var(--st-gutter,60px);box-sizing:border-box;} /* 16.09. (Stefanie): Navigation IN den Satzspiegel (war bewusst ausserhalb, 26.08.) */

@media (max-width:782px){
	.sgt-hero__media img,.sgt-hero__img{height:600px;} /* Hero-Modul L mobil */
}
@media (max-width:900px){
	.sgt-hero__box{left:0;right:16px;top:50%;transform:translateY(-50%);bottom:auto;max-width:none;padding:1.4rem 1.6rem 1.2rem;} /* 28.08.: vertikal mittig auch mobil */
	.sgt-grid{grid-template-columns:1fr;gap:1.6rem;margin-top:2rem;padding:0 var(--st-pad,20px);}
	.sgt-date{margin-bottom:1.6rem;} /* 18.09. R60 (Kunde, "Termin-Einzelseiten Mobile: Abstand Datums-Block -> Copy-Content verdoppeln"): Grid-row-gap 1.6rem + 1.6rem Zusatz-Margin NUR an dieser einen Kante = exakt verdoppelt (3.2rem); die uebrigen Stapel-Abstaende behalten 1.6rem */
	/* 17.09. (Stefanie, "Zwischengroessen wie in Mobile belassen"): die alte Zwischengroessen-
	   Spaltenoptik (3.8rem-Zahl, 220px-Datumsspalte, satzspiegelbreite CTAs) ist RAUS - der
	   komplette Mobile-Figma-Block (bisher <=640) gilt jetzt bis 900 und liefert Zahl links /
	   Block rechts / rechtsbuendige CTAs (Block unten, gewinnt per Reihenfolge). */
	.sgt-body{padding-top:0;}
	.sgt-side{padding-top:0;}
	.sgt-side{gap:.8rem;text-align:left;}
	.sgt-pagerwrap{margin-top:3.5rem;padding:0 var(--st-pad,20px);}
}
@media (max-width:900px){
	/* 16.09. (Maik, Mobile-Figma "Einzelveranstaltung"): gleicher Datumsblock-Aufbau wie die
	   Listenansicht - Zahl+Monat links, Strich daneben, Tag/Datum/Uhrzeit rechtsbuendig. Der
	   bisherige absolute ::after-Strich (lief an der GANZEN Spalte entlang) wird zum Grid-Item
	   ueber die Zeilen von Zahl+Monat -> Hoehe = Gesamthoehe Zahl+Monat (Ticket-Vorgabe). */
	/* 17.09. (Stefanie): Breakpoint 640 -> 900 - dieser Mobile-Block IST jetzt auch die
	   Zwischengroesse (Termin: Zahl links + Block rechts + CTAs rechtsbuendig; News: grosse
	   Zahl 5.5rem + Monat 1.25rem proportional, Linie direkt an der Zahl statt an der Copy). */
	.sgt-date{display:grid;grid-template-columns:auto auto minmax(0,1fr);grid-template-rows:auto auto 1fr;gap:0 12px;align-items:start;max-width:none;padding-right:0;} /* 17.09. R2 (Stefanie, "Monat auf gleiche Hoehe wie News"): DRITTE 1fr-Zeile - der rechte Tag/Datum/Uhrzeit-Block (dr, spannt jetzt alle 3 Zeilen) blaehte sonst die Zahl-Zeile auf und drueckte den Monat nach unten (News ohne dr sass hoeher). Zeilen 1+2 bleiben min-content (Zahl/Monat wie News), der Block-Ueberhang laeuft in Zeile 3; die Linie spannt weiter Zeile 1-2 = Zahl+Monat. */
	.sgt-date::after{content:"";position:static;grid-column:2;grid-row:1 / span 2;width:4px;height:auto;align-self:stretch;margin:6px 0 4px;} /* Margins ink-kalibriert (s. Verify) */ /* 16.09. R2 (Stefanie, Figma vermessen): Linie 4px (war 3) */
	.sgt-date__top{grid-area:1/1;font-size:5.5rem;} /* 16.09. R2 (Stefanie, "Datum und Linie vergroessern wie in Figma"): Figma-Zahl pixelvermessen 91px Glyphhoehe = Faktor 1.46 auf die bisherigen 3.8rem -> 5.5rem; gilt fuer News UND Termin (geteilte Komponente, beide Figma-Mocks zeigen dieselbe Groesse) */
	.sgt-date__month{grid-area:2/1;margin-top:.1rem;font-size:1.25rem;} /* 16.09. R2: Monat mit (Figma ~20px) - Glyph-Gap Ziel ~10px, margin kalibriert im Verify */
	.sgt-date__dr{display:flex;grid-area:1/3/span 3/4;flex-direction:column;align-items:flex-end;text-align:right;} /* 17.09. R2: span 3 (s. Zeilen-Kommentar oben) */
	.sgt-date__wd{margin-top:0;} /* Block startet auf Zahl-Oberkante (Figma) - 1rem-Abstand der Spaltenoptik entfaellt */
	/* 16.09. R2 (Stefanie, Termin Mobile-Figma): Badge + Ort im rechten Datumsblock (Markup in single-termine.php, Desktop dort ausgeblendet); Reihenfolge Badge/Tag/Datum/Uhrzeit/Ort */
	.sgt-date__badge{display:inline-block;position:static;margin-bottom:.55rem;background:var(--evc,#5D5D5D);} /* Kategoriefarbe wie die sgt-side-Badge */
	.sgt-date__room{display:flex;margin:0;padding-top:.35rem;justify-content:flex-end;align-items:center;gap:.45rem;font-weight:700;font-size:.95rem;color:var(--st-color-primary,#002F5D);}
	.sgt-date__room svg{max-width:none;flex:0 0 auto;}
	.sgt-side .sgt-side__badge,.sgt-side .sgt-side__room{display:none;} /* stehen mobil im Datumsblock */ /* 16.09. R2-Fix (Deploy-Verify): Spezifitaet 0-2-0 noetig - die Basisregel '.sgt-side .sgt-side__badge' (0-2-0) schlug das einfache display:none (0-1-0), Badge erschien DOPPELT */
	.sgt-side{align-items:flex-end;} /* 16.09. R2 (Stefanie): CTAs mobil NICHT satzspiegelbreit, rechtsbuendig */
	.sgt-side__ctas{width:auto;}
	.sgt-side__ctas .stm-evl__btn{width:236px;}
}


/* ==== 28.08. Runde 2 (Maik, "Modul Footer"): pixelgenau nach Visualisierung kalibriert ====
   URSACHE der zaehen Abstaende: .site-footer__heading ist ein h3 und erbte die globale
   "Headline XL"-Zeilenhoehe (--stm-h3-lh, bis 90px Desktop / 52px mobil) aus main.css:447.
   Die Paddings zu halbieren half kaum, weil der Phantom-Zeilenkasten dominierte.
   Jetzt: line-height 1.3 + Werte per Pixelmessung gegen Maiks "SO SOLL ES SEIN" geeicht. */
.site-footer__heading{line-height:1.3;} /* killt die geerbte 90px/52px-H3-Zeilenhoehe */
.site-footer__inner{padding-top:36px;} /* Desktop: Blaukante -> Heading-Oberkante = 59px wie Mock (16 Footer-Padding + 36 + Zeilenkasten) */
.site-footer__heading{margin:0 0 20px;} /* Desktop: Heading -> Menuepunkte = 32px visuell (Mock) */
@media (max-width:782px){
	.site-footer__inner{padding-top:18px;} /* mobil: Blaukante -> Heading = ~41px visuell (Mock: 67px/1.65 Skalierung) */
	.site-footer__heading{margin:0 0 16px;} /* mobil: Heading -> Inhalt = ~28px visuell (um 1/3 verringert) */
	.site-footer__col{padding:31px 0;} /* Trennlinien: SYMMETRISCH ~37-38px visuell nach oben und unten (Mock-Gauge 62px/1.65) */
	.site-footer__col:first-child{padding-top:0;}
	.site-footer__menu li:last-child{margin-bottom:0;} /* li-margin machte den Abstand UEBER der Linie groesser */
	.site-footer__bottom{margin-top:6px;} /* letzte Linie: oben 31+6=37px - symmetrisch zum Logo-Abstand */
	.site-footer__logo,.site-footer__logo--center{padding:38px 0 4px;} /* Linie -> Michel-Logo = 40px wie Mock (war 24) */
}

/* ==== 28.08. (Maik, Mega-Teaser "Umbrueche"): Einzeiler bewusst rot via Pipe am Ende (stmichaelis_headline_html) ==== */
.stm-hl--red{color:var(--st-color-accent,#B51F29);}

/* ==== 28.08. (Maik, Konfi-Zeit): lange Woerter in Headlines silbentrennen statt hinters Bild laufen ==== */
.stm-hl{-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;} /* 28.08. R4 (Maik-Entscheid): WOERTERBUCH-Trennung global zurueck - mechanische break-word-Punkte waren "falsch getrennt". Bewusste Folge: auch Modul-Headlines hyphenieren, wenn ein Wort nicht passt (statt minimal ueberzustehen). Der rote Teil = letzte Zeile kommt aus dem stm-hl-JS-Split am Browser-Trennpunkt. */

/* 28.08. R4: roter Zeilen-Teil silbengetrennter Woerter (CSS Custom Highlight API, gesetzt vom stm-hl-JS) */
::highlight(stm-hl-tail){color:var(--st-color-accent,#B51F29);}

/* == 02.09. (Maik, Asana "Modul Global: Headlineschriften + Topline"): Abstand Topline -> Headline
   GLOBAL um 1/3 verringert, Desktop + Mobile - auf den Look der bereits abgenommenen Runden
   vereinheitlicht (Galerie: Kicker-Marge 8px + HL-margin-top raus; Parallax: .1rem + Leading).
   WICHTIG: Der '+'-Reset entfernt den margin-top der Headline NACH einer Topline - der gewann
   sonst den Margin-Collapse (z.B. Akkordeon-Kopf: H2-mt 15.8px > Kicker-mb 12px, jede
   Topline-Margen-Aenderung blieb dort unsichtbar). Block steht am Dateiende und uebersteuert
   damit alle Kontext-Regeln gleicher Spezifitaet. == */
.newsletter__kicker, .serp__kicker, .tafeln__kicker, .module__kicker{margin-bottom:8px;}
.module__inner.is-intro .spalter__head .module__kicker{margin-bottom:8px;} /* hoehere Spezifitaet der Intro-Regel einholen */
.module__kicker + .module__headline, .module__kicker + h2, .module__kicker + h3,
.hero__topline + .hero__headline, .stm-tl__kicker + .stm-tl__hl{margin-top:0;}
.hero__topline{margin-bottom:.4em;} /* .6em -> -1/3 */
.stage__kicker{margin-bottom:7px;} /* 10px -> 7 */
.besuch__headwrap .module__kicker{margin-bottom:7px;} /* 10px -> 7 */
@media (min-width:760px) and (max-width:1099px){ .besuch__headwrap .module__kicker{margin-bottom:calc(2.3px + .32vw);} } /* 07.09. R6 (Maik, Zwischenformat): Abstand Topline -> HL skaliert mit dem HL-Faktor f (7px x f = 4.7 bei 760 -> 5.8 bei 1099); MUSS nach der 7px-Regel stehen (gleiche Spezifitaet, das Zwischenformat-Pendant oben in der Besuch-Sektion wuerde sonst ueberschrieben) */
.stm-tl__kicker{margin-bottom:.55rem;} /* Timeline .8rem -> -1/3 */
.stm-evl__kicker{margin-bottom:.25rem;} /* .4rem -> -1/3 */
.sgt-hero__topline{margin-bottom:.25rem;}
.besichtigung__topline{margin-bottom:.25rem;}
.turmblick__kicker{margin-bottom:.15rem;} /* .25rem -> -1/3 */
.stm-g5__head .module__kicker{margin-bottom:8px;} /* vereinheitlicht */
.nkar--events .nkar__intro .module__kicker{margin:0 0 8px;} /* 10.09. R3 (Ticket "Karussell aus Terminen"): Abstand Topline -> Headline = die 8px der Standard-Kombi (Vereinheitlichungs-Block oben) statt .65rem=10.4px - "Proportionen abgleichen mit unserer Standard Topline & Headline-Kombi"; gilt via .nkar--events auch fuer die News-Intro-Variante */
.stm-nlx .module__kicker{margin-bottom:.4rem;} /* .6rem -> -1/3 */

/* == 02.09. (Maik): Karussell-Standard "Wahrzeichen erleben" + Karussell mit Personen ==
   Gemeinsame Bausteine: gelieferte Slider-Pfeile (Slider Arrow *.svg) als Masken-Komponente
   .stm-sarr (auch in den Slideshows, Buttons in den Templates), endlos-Loop (data-loop, JS),
   Anschnitt rechts bis max 1560px Gesamtbreite (--nkarbleed mit 360px-Kappe: 1200px Inhalt
   + 360 = 1560), Kopf und Dots bleiben im Satzspiegel. == */
.module button.stm-sarr{width:24px;height:24px;flex:0 0 auto;padding:0;border:0;border-radius:0;font-size:0;line-height:0;cursor:pointer;background:var(--st-color-primary,#002F5D);-webkit-mask:url("../img/icons/Slider%20Arrow%20right%20default.svg") no-repeat center/contain;mask:url("../img/icons/Slider%20Arrow%20right%20default.svg") no-repeat center/contain;}
.module button.stm-sarr.stm-sarr--prev{-webkit-mask-image:url("../img/icons/Slider%20Arrow%20left%20default.svg");mask-image:url("../img/icons/Slider%20Arrow%20left%20default.svg");}
.module button.stm-sarr:hover{background:var(--st-color-accent,#B51F29);}
.module button.stm-sarr[disabled]{background:var(--st-neutral-300,#D1D1D1);cursor:default;}
.module button.stm-sarr[disabled]:hover,.module button.stm-sarr[disabled]:active{background:var(--st-neutral-300,#D1D1D1);} /* 07.09. R2 (Maik, News-Karussell): ausgegrauter Pfeil verschwand bei Hover/Klick - die Legacy-Regeln der frueheren GLYPHEN-Pfeile (.stm-nnews/.nkar/.module--karussell .stm-cards__arrow[disabled]:hover{background:none}, Spezifitaet 0-4-0) schlagen die sarr-Basisregel (0-3-1); bei den Masken-Pfeilen IST der background aber das Icon -> unsichtbar. Diese Regel (0-4-1) gewinnt gegen alle Legacy-Varianten. */
/* 08.09. R2 (Stefanie, Galerie 4): NUR DESKTOP die gelieferten Kreis-Pfeile "Slider Arrow Coverflow"
   (weisser Kreis 95%% Deckkraft + blauer Pfeil, Hover = roter Pfeil) statt der duennen sarr-Maske -
   mobil bleiben die bisherigen Pfeile. Mehrfarbige SVGs gehen NICHT als Maske -> background-image
   mit Default/Hover-Tausch; die Hover-Datei haengt als geparkte 1px-Zweitebene mit dran (Preload
   beim Sichtbarwerden; Icon-Links-LEHRE: Groesse 0 wuerde Chrome gar nicht laden). Spezifitaet
   0-4-1 + spaeter im File schlaegt die sarr-Basis- und Hover-Shorthands (0-3-1). */
@media (min-width:920px){
	.module button.stm-g4__arrow.stm-sarr{--g4a:url("../img/icons/Slider%20Arrow%20Coverflow%20right%20default.svg");--g4ah:url("../img/icons/Slider%20Arrow%20Coverflow%20right%20hover.svg");width:36px;height:36px;-webkit-mask:none;mask:none;background-color:transparent;background-image:var(--g4a),var(--g4ah);background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;}
	.module button.stm-g4__arrow.stm-sarr.stm-sarr--prev{--g4a:url("../img/icons/Slider%20Arrow%20Coverflow%20left%20default.svg");--g4ah:url("../img/icons/Slider%20Arrow%20Coverflow%20left%20hover.svg");}
	.module button.stm-g4__arrow.stm-sarr:hover{background-color:transparent;background-image:var(--g4ah),var(--g4a);}
}

/* --- Karussell-Standard (module--karussell / .stm-karussell) --- */
.stm-cards__heading{max-width:72ch;} /* Headline-Box etwas breiter (war 60ch) */
.stm-karussell .stm-cards-carousel{--nkarbleed:min(calc(var(--st-gutter,60px) + max(0px,(100vw - 1320px)/2)),360px);margin-right:calc(-1*var(--nkarbleed));}
.stm-karussell .stm-cards__head{margin-right:var(--nkarbleed,0px);} /* Kopf bleibt im Satzspiegel */
.stm-karussell .stm-cards__dots{margin-right:var(--nkarbleed,0px);} /* Dots zentriert im Satzspiegel */
.module--karussell .stm-cards{gap:1rem;} /* Abstand zwischen Slides -50% (2 -> 1rem) */
@media(min-width:700px){ .module--karussell .stm-cards{grid-auto-columns:calc((100% - var(--nkarbleed,0px) - 3*1rem)/4);} } /* 03.09. R2 (Maik): responsive wie Karussell mit Personen - 4 Kacheln im SATZSPIEGEL (Vierspalter), die 5. laeuft rechts in den Anschnitt raus (gleiche Formel wie .stm-cards--team) */ /* war: 5 Kacheln ueber den ganzen Streifen */
.module--karussell .stm-cards__controls{gap:2.5rem;align-items:flex-end;} /* 03.09. R2 (Maik): Pfeile vertikal nach UNTEN am CTA ausgerichtet (flex-end statt center) */ /* mehr Abstand CTA -> Pfeile */
.module--karussell .stm-cards__arrows{gap:1.6rem;} /* 03.09. R2 (Maik): Pfeile bündig an der UNTERKANTE des CTA (align-items:flex-end am Controls-Container, kein Zusatz-Offset - rote Linie im Mock sitzt an der Button-Unterkante) */
.stm-karussell .stm-cards__controls{margin-left:auto;} /* 03.09. R2 (Maik): CTA+Pfeile bleiben auch bei kleineren Browsergroessen rechts buendig am Satzspiegel (wie Teams) - beim Umbruch der Kopfzeile rutschten sie sonst linksbuendig unter die Headline */
.module--karussell .stm-card__inner{gap:.55rem;} /* Kachel -> Titel -1/3 (.85rem) */
.module--karussell .stm-card__title{font-size:1.25rem;letter-spacing:.02em;line-height:2.125rem;} /* 03.09. R2 (Maik, "Kommando zurueck"): Titel = Typo der H5 (Subline klein 20/34) - war Figma 24 */
.module--karussell a.stm-card__inner:hover{text-decoration:none;} /* 03.09. R2-Fix (Johann, "doppelter Unterstrich"): main.css a:hover unterstreicht den Kachel-LINK selbst - die Container-Deko propagiert auf den Titeltext und wurde ZUSAETZLICH zur eigenen Titel-Linie gezeichnet (zwei Striche). Container-Deko aus, nur die Titel-Linie bleibt. */
.module--karussell a.stm-card__inner:hover .stm-card__title{text-decoration:underline;text-decoration-color:var(--st-color-primary,#002F5D);text-underline-offset:5px;text-decoration-thickness:2px;} /* 03.09. R2 (Maik): Hover-Unterstreichung der Titel in Primaerblau #002F5D */
@media(max-width:700px){
  .stm-karussell .stm-cards-carousel{--nkarbleed:0px;margin-right:0;} /* mobil KEIN Anschnitt */
  .module--karussell .stm-cards{grid-auto-columns:100%;gap:1rem;} /* eine satzspiegelfuellende Kachel */
  .module--karussell .stm-card__media{aspect-ratio:1/1;} /* quadratisch 32/32 */
  .stm-karussell .stm-cards__head{flex-direction:column;align-items:flex-start;gap:1.4rem;margin-bottom:1rem;} /* 03.09. R2 (Maik): HL -> CTA = gleicher Abstand wie CTA -> Pfeile (1.4rem); Abstand Pfeile -> Kachel halbiert (Head-mb 2 -> 1rem) */
  .stm-karussell .stm-cards__controls{width:100%;flex-direction:column;align-items:flex-start;gap:1.4rem;margin-left:0;}
  .stm-karussell .stm-cards__arrows{display:flex;width:100%;justify-content:space-between;margin-bottom:0;} /* Pfeile buendig links/rechts UNTER dem CTA */ /* 03.09. R2: Desktop-Grundlinien-Offset mobil neutralisieren */
  /* 07.09. R3 (Maik): 33px-Sondermass entfernt - mobil greift jetzt der globale <=1000-Klein-Switch (definierter CTA Outline klein: 37.5px/1rem/1.22rem/400) */
  .stm-karussell .stm-cards__dots{margin-top:1.35rem;} /* 03.09. R2 (Maik): Abstand Karussell-Titel -> Nav-Dots um 1/3 verringert (2 -> 1.35rem) */
}

/* --- Karussell mit Personen (.stm-team-carousel) - Kopf = Karussell-Standard --- */
.stm-team-carousel{--nkarbleed:min(calc(var(--st-gutter,60px) + max(0px,(100vw - 1320px)/2)),360px);margin-right:calc(-1*var(--nkarbleed));}
.stm-team-carousel > .nnews__head{margin-right:var(--nkarbleed,0px);}
.stm-team-carousel .stm-cards__dots{margin-right:var(--nkarbleed,0px);}
.stm-team-carousel .stm-cards__controls--top{gap:2.5rem;align-items:flex-end;} /* 09.09. (Maik, Karussell mit Personen): Slider-Pfeile unten BUENDIG am CTA (flex-end statt center) - analog Karussell Standard (03.09.); mobil stellt der Block unten auf column um */
.stm-team-carousel .stm-cards__arrows{gap:1.6rem;align-items:center;}
.stm-cards--team{gap:1rem;} /* Abstand zwischen den Kacheln halbiert (wie Standard) */
@media(min-width:700px){ .stm-team-carousel .stm-cards--team{grid-auto-columns:calc((100% - var(--nkarbleed,0px) - 3*1rem)/4);} }
@media(max-width:700px){
  .stm-team-carousel{--nkarbleed:0px;margin-right:0;}
  .stm-team-carousel .stm-cards--team{grid-auto-columns:100%;} /* eine satzspiegelfuellende Kachel */
  .stm-team-carousel .stm-cards__controls--top{width:100%;flex-direction:column;align-items:flex-start;gap:1.4rem;justify-content:flex-start;}
  .stm-team-carousel .stm-cards__arrows{display:flex;width:100%;justify-content:space-between;}
}

/* == 03.09. (Maik, "Modul Globale Headlines"): Standard-Copy-Norm ==
   .module__text (generischer Copy-Container, z.B. Galerie-Kopf) bekommt die Standard-Copy 20/30
   statt der ererbten Body-18px - zusammen mit .plx__text, .col__text und .stm-tl__copy (Token
   --stm-copy-size/--stm-copy-lh in main.css) haben damit alle Modul-Copys EINE Groesse.
   Die rem-Basis ist seit heute in main.css auf html{font-size:16px} festgenagelt (Browser-
   Defaults/Safari-Einstellungen koennen die Schriften nicht mehr auseinanderziehen). == */
.module__text{font-size:var(--stm-copy-size,1.25rem);line-height:var(--stm-copy-lh,1.5);}

/* ============ News-Einzelseite (09.09.2026, Ticket "Modul News-Text einpflegen"; R2 nach den
   nachgereichten Figma-Layouts) ============ */
/* Hero: module--sgt-Komponenten (full-bleed 717/600, Slideshow) OHNE Headline-Box. Darunter das
   sgt-grid mit der sgt-date-Komponente der Termin-Einzelseite (grosse Ziffer + Linie + Monat/Jahr) -
   fuer News auf ZWEI Spalten reduziert; rechts Topline (Kategorie) + H2-Headline + rote Subline
   (WP-Auszug) + Text (~820px wie im Figma-Mock @1440). */
.sgn-grid{grid-template-columns:225px minmax(0,860px);} /* 09.09. R3: +100px-Abstand -> 16.09. (Stefanie) HALBIERT und in die sgt-grid-Basis gewandert (70px, beide Einzelseiten gleich) */
.module--sgn .stm-pager{max-width:1320px;margin:100px auto 0;padding:0 var(--st-gutter,60px);box-sizing:border-box;} /* 16.09. (Stefanie): content-box machte den Pager 120px BREITER als den Satzspiegel - border-box = Innenkanten exakt auf 353..1553 */ /* 09.09. R3 (Maik): Paginierung der News-Einzelseite IN den Satzspiegel (1320 + Gutter, wie module__inner) und 100px Abstand nach oben; content-box, damit 1320 die INNENbreite ist. Nur News - der Termine-Pager behaelt seine sgt-Optik. */
.sgn-main__kicker{margin:0 0 .35rem;}
.sgn-main__title{margin:0 0 1.4rem;}
.sgn-main__sub{margin:0 0 1.2rem;font-weight:700;font-size:1.25rem;line-height:1.5;color:var(--st-color-accent,#B51F29);} /* Subline rot = WP-Auszug, Optik wie sgt-body__title */
.sgn-main__content > :first-child{margin-top:0;}
.sgn-main__content .wp-video{width:auto!important;max-width:100%;} /* 21.09. R66: WP-Video-Shortcode (jetzt ausgefuehrt, s. single-news.php) setzt inline width in Original-Pixeln (z.B. 1920px, Beitrag "Luminiscence") - haerten auf Lesespaltenbreite */
.sgn-main__content video{max-width:100%;height:auto;display:block;}
.sgn-main__more{display:none;}
@media(max-width:700px){
	.sgn-grid{grid-template-columns:1fr;} /* Datum stapelt ueber den Inhalt (sgt-Mobile-Regeln skalieren die Ziffer) */
	.sgn-main__content.is-clamped{max-height:34rem;overflow:hidden;-webkit-mask-image:linear-gradient(#000 78%,transparent);mask-image:linear-gradient(#000 78%,transparent);} /* "Mehr anzeigen": nur mobil, nur wenn der Text laenger ist (JS misst) */ /* 16.09. R2: Ausblend-Verlauf wie die G2-/Spalter-Komponente */
	.sgn-main__more{display:flex;align-items:center;justify-content:center;gap:.45rem;margin:1rem auto 0;background:none;border:0;padding:.25em 0;font-family:inherit;font-size:1.0625rem;font-weight:400;color:var(--st-neutral-400,#888);cursor:pointer;} /* 16.09. R2 (Stefanie): FINALE Weiterlesen-Komponente (Optik col__more-toggle: grau, .stm-chev-Span aus dem Markup, Hover rot) statt Sonder-SVG */
	.sgn-main__more:hover{color:var(--st-color-accent,#B51F29);}
	.sgn-main__more[hidden]{display:none;}
}
@media(max-width:640px){
	.sgn-grid{margin-top:1rem;row-gap:2.7rem;} /* 16.09. R2 (Stefanie, News Mobile): Breadcrumb->News HALBIERT (2rem -> 1rem) + Abstand Datumsblock->Kicker um 2/3 ERHOEHT (1.6 -> 2.7rem; nur News - der Termin behaelt 1.6rem) */
}

/* ============ 10.09.2026 - Ticket "Karussell Termine" (Maik/Stefanie): Feinschliff nach Figma ============ */
/* Desktop: Modul 50:50, Kacheln = EINE globale Spaltenbreite (2 im Satzspiegel + 3. im Anschnitt;
   gleiche Technik wie News-Karussell: padding-right = Bleed, damit endet die letzte Kachel buendig
   im Satzspiegel), Pfeile + Dots im Satzspiegel, Tabs 22px mit Kalender-Icon (Asana-Anhang, inline
   im Template), Freisteller rechtsbuendig + unten buendig mit den KACHELN (darf oben rausragen).
   Text/CTA duerfen max. 10% (mobil 25%) ueber den Freisteller laufen - die Overlap-Geometrie steckt
   in --introimg (Bildbreite in der Spalte) und --introov (erlaubter Overlap-Anteil); die Headline
   schrumpft per JS (stm-modules.js "nkarfit"), bis sie ueber dem fix unten sitzenden CTA Platz hat.
   --introbtm (JS) hebt CTA + Bild um die Dots-Hoehe an -> buendig mit Kachel-Unterkante.
   Vorbereitet fuer die angekuendigte 40:60-News-Variante: Split + --introimg haengen nur an dieser
   einen Grid-Regel, eine kuenftige Modifier-Klasse (z.B. .nkar--news6040) muss nur die beiden Werte
   aendern. */
.nkar--events{grid-template-columns:1fr 1fr;gap:1rem;align-items:stretch;--introimg:55%;--introov:.1;}
.nkar--events .nkar__intro{min-height:420px;text-align:left;} /* text-align schlaegt den zentrierenden Legacy-<=900-Block */
.nkar--events .nkar__intro-img{position:absolute;right:0;bottom:var(--introbtm,0px);height:calc(100% - var(--introbtm,0px) + 3rem);width:auto;max-width:var(--introimg);object-fit:contain;object-position:right bottom;margin:0;}
.nkar--events .nkar__headline{max-width:calc(100% - var(--introimg)*(1 - var(--introov)));}
.nkar--events .nkar__cta{position:absolute;left:0;bottom:var(--introbtm,0px);max-width:calc(100% - var(--introimg)*(1 - var(--introov)));display:flex;} /* 13.09. (Maik, "Karussell Termine" - "noch Padding/Versatz drin"): display:flex statt Inline-Zeilenbox, damit die p-Unterkante exakt die Button-Unterkante ist (kein Strut-Descender; Desktop absolut + Mobile static, gleiche Regelbasis) */
.nkar--events .nkar__cta > .btn{margin:0;} /* 13.09. dito: der eigentliche 7px-Versatz kam aus der globalen Abstandsregel .module p > a.btn (margin .35em .6rem .35em 0, bei 20px Buttonschrift = 7px unten) - der Button hing dadurch 7px UEBER der Kachel-/Bild-Unterkante. Hier sitzt der Button fix an der Unterkante, die Luft-Regel ist fuer Fliesstext-Buttons gedacht (0-3-0 schlaegt 0-2-2). Live gemessen: Button/Bild/Strang-Unterkante 0/0/0. */
.nkar--events .nkar__topbar{margin-right:var(--nkarbleed,0px);} /* Pfeile bleiben im Satzspiegel (vorher teils ausserhalb des Fensters) */
.nkar--events .stm-cards__dots{margin-right:var(--nkarbleed,0px);} /* Dots mittig unter den 2 Satzspiegel-Kacheln */
@media(min-width:700px){ .nkar--events .stm-cards{grid-auto-columns:calc((100% - 1rem)/2);padding-right:var(--nkarbleed,0px);} } /* 100% = Content-Box, das padding-right traegt den Bleed bereits ab (gleiche Logik wie die News-Formel) */
.nkar--events .nkar-card__media{aspect-ratio:288/169;} /* Kachel auf Spaltenbreite (225->288), Bildhoehe bleibt wie bisher (169 bei 1200er-Satzspiegel) */
.nkar--events .nkar__tabs{align-items:center;flex-wrap:wrap;} /* 10.09. R3: wrap - mobil darf das gewaehlte Datum in die naechste Zeile rutschen */
.nkar--events .nkar__tab{font-size:1.375rem;line-height:1;letter-spacing:.03em;transition:color .15s;} /* 22pt lt. Ticket */ /* 10.09. R3: line-height 1 wie .besuch__tab - Button-Hoehe = Schrifthoehe, das Kalender-Icon haengt sauber auf Tab-Hoehe */
/* 10.09. R3 (Ticket "Karussell aus Terminen"): Tab-States lt. Vorgabe - Default #002F5D (Basisregel
   oben), Hover #B51F29, Aktiv #B51F29 OHNE weiteren Hover-Effekt (Hover- und Aktivfarbe identisch,
   die bestehende Kombi-Regel .nkar__tab.is-active,.nkar__tab:hover deckt das ab). */
/* Kalender-Icon: FUNKTIONAL analog Besuch-Modul (Button oeffnet den nativen Datepicker, Auswahl
   loest eine neue Terminabfrage via REST aus, gewaehltes Datum erscheint rot neben dem Icon).
   Groesse 18px = Versalhoehen-Logik des Besuch-Icons ("in der Hoehe wie Heute/Bevorstehend",
   dort 05.09. R3 fuer dieselbe 22px-Tab-Schrift abgenommen; das gelieferte Dots-Icon stand
   vorher 21x22 und ueberragte die Versalien). */
.nkar__cal{position:relative;display:inline-flex;align-items:center;}
.nkar__calbtn{border:0;background:none;padding:0;cursor:pointer;color:var(--st-color-primary,#002F5D);display:inline-flex;transition:color .15s;}
.nkar__calbtn svg{display:block;width:auto;height:18px;max-width:none;}
.nkar__calbtn svg *{fill:currentColor;} /* geliefertes Icon traegt festes fill #002F5D - fuer Hover/Aktiv-Rot uebersteuern */
.nkar__calbtn:hover{color:var(--st-color-accent,#B51F29);} /* Hover immer #B51F29 (Ticket) */
.nkar__cal.is-active .nkar__calbtn{color:var(--st-color-accent,#B51F29);}
.nkar__cal .nkar__date{position:absolute;inset:0;opacity:0;pointer-events:none;} /* unsichtbares Datumsfeld hinter dem Icon (Besuch-Muster) */
.nkar__caldate{font-weight:700;font-size:1.375rem;line-height:1;color:var(--st-color-accent,#B51F29);display:none;margin-left:-.8rem;} /* Abstand Icon->Datum halbiert (Flex-Gap 1.6rem bleibt fuer die Tabs, Besuch-Muster) */
.nkar__cal.is-active ~ .nkar__caldate{display:inline;}
.nkar--events .nkar-card__when{margin-top:.27rem;line-height:1.1;} /* Abstand Bild->Text analog News-Kacheln */ /* 15.09. (Kunde, "Karussell Termine": Abstaende "ein paar Pixel zu viel"): line-height 1.1 wie der News-Karussell-Titel (Regel ~1102) - die Datumszeile lief noch auf der Basis-lh 1.3 (Zeile ~987), deren groessere Zeilenbox trug ~1-2px Extra-Leading OBER- und UNTERHALB der Schrift. Ink-gemessen jetzt deckungsgleich: Bild->Text 6.1 / Text->Titel 1.0 / ->Link 6.2 == News. */
.nkar--events .nkar-card__go{padding-top:0;} /* Abstand Text->Text-Link analog News-Kacheln */
/* Kategorien: nur noch 3 Farben - Gottesdienste GOLD, Musik BLAU, alles andere ROT ("Allgemein");
   der echte Kategoriename bleibt als Badge-Text stehen (so auch im Figma-Mock: "Vortrag" in Rot).
   Gleiche Logik wie die is-cat-*-Regeln der Veranstaltungsseite (26.08.) - das Karussell hing noch
   auf dem alten Farbschema (Gottesdienste rot, Vortrag gold). */
.nkar--events .nkar-card__badge{background:var(--st-color-accent,#B51F29);}
.nkar--events .nkar-card__badge.badge--gottesdienste{background:var(--st-color-gold,#D1AC57);}
.nkar--events .nkar-card__badge.badge--musik{background:var(--st-color-primary,#002F5D);}
/* Mobile (<=700, wie alle Karussells): Headline + CTA links NEBEN dem Freisteller, der Freisteller
   klebt rechts am Browserrand (ueber den Satzspiegel hinaus), Text-Overlap max. 1/4; Slider analog
   News-Karussell (1 Kachel in Satzspiegelbreite, Pfeile-Zeile unterm Tab-Kopf, Dots mittig). */
@media(max-width:700px){
	.nkar--events{grid-template-columns:1fr;gap:1.75rem;--introimg:52%;--introov:.25;} /* 13.09. (Maik, "Karussell Termine"): Mobile 1/4 mehr Abstand Intro-Kachel -> Karussell-Block (1.4rem * 1.25) */
	/* 10.09. R3 (Ticket "Karussell aus Terminen", Mobile): Headline + optionale Topline haengen
	   UNTEN im Intro mit festem 40px-Abstand zum CTA - laengere Headlines wachsen nach OBEN
	   (Flex-Spalte, unten ausgerichtet; der CTA steht mobil im Fluss statt absolut, sein Platz
	   ist damit fix und der Text darueber schiebt das Intro nach oben auf). Gilt via
	   .nkar--events auch fuer die News-Intro-Variante. */
	.nkar--events .nkar__intro{min-height:20rem;text-align:left;display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:0;} /* gap:0 zwingend - die Legacy-Basisregel .nkar__intro traegt gap:1.4rem, das display:flex hier weckt sie wieder auf (gemessen: 62px statt 40px Abstand zum CTA, 30px statt 8px Topline->Headline) */
	.nkar--events .nkar__headline{margin:0;}
	.nkar--events .nkar__cta{position:static;margin:40px 0 0;}
	.nkar--events .nkar__intro-img{right:calc((100% - 100vw)/2);max-width:calc(var(--introimg) + (100vw - 100%)/2);height:calc(100% - var(--introbtm,0px));} /* (100vw-100%)/2 = tatsaechlicher Seitenrand -> Bild klebt EXAKT am Browserrand, egal welchen Wert --st-gutter gerade hat */
	.nkar--events .nkar__main{--nkarbleed:0px;margin-right:0;}
	.nkar--events .nkar__topbar{display:block;margin-right:0;margin-bottom:.4rem;}
	.stm-nkar .stm-cards__arrows{display:grid;grid-template-columns:1fr auto;width:100%;align-items:center;margin:.5rem 0 .9rem;} /* schlaegt das globale display:none der Karussell-Pfeile <=700 (News-Muster) */
	.stm-nkar .stm-cards__arrows .stm-sarr--prev{justify-self:start;}
	.stm-nkar .stm-cards__arrows .stm-cards__arrow[data-dir="next"]{justify-self:end;}
	.nkar--events .stm-cards{grid-auto-columns:100%;gap:1rem;padding-right:0;}
	.nkar--events .stm-cards__dots{margin-right:0;margin-top:1.35rem;}
	/* 13.09. (Maik, "Karussell Termine", Mobile-Mock): gewaehltes Datum 1/4 KLEINER (1.375rem*.75),
	   auf EIGENER Zeile linksbuendig im Satzspiegel (flex-basis:100% bricht innerhalb der
	   wrap-faehigen Tabs-Zeile um; das Desktop-margin-left:-.8rem entfaellt) und vertikal
	   MITTIG zwischen Tabs-Zeile und Karussell-Block: row-gap ersetzt die 1.6rem-Flex-Luecke
	   nach oben, margin-bottom gleicht die Reststrecke nach unten an (Topbar-mb .4rem;
	   Werte live nachgemessen). */
	.nkar--events .nkar__caldate{font-size:1.03125rem;flex-basis:100%;margin-left:0;margin-bottom:3px;} /* margin-bottom 3px: unten bis zum Karussell-Block liegen Topbar-mb 6.4px -> mit row-gap .55rem oben ergibt das live gemessen 9px/9px (mittig) */
	.nkar--events .nkar__tabs{row-gap:.55rem;}
}

/* ============ 10.09.2026 - Ticket "Karussell News mit Intro-Bild" (Stefanie): 40:60-Variante ============ */
/* Baut auf .nkar--events (Karussell Termine) auf - der Modifier .nkar--news6040 aendert nur:
   Split 40:60, Turm-Freisteller im Format 20/46 (ragt oben ~1/3 = Ticket-Spanne 30-40% ueber
   die Kacheln hinaus; Hoehe = Kachelstrang-Hoehe --nkkarh * 1.5, vom nkarfit-JS gemessen),
   Headline OBEN buendig mit den Kacheln (--introtop = Topbar-Hoehe, JS) + CTA unten buendig
   (--introbtm wie gehabt), Text-Overlap 1/4 der Bildbreite (BildB = --nkkarh*1.5*20/46 =
   --nkkarh*.652 -> Textbreite 100% - .489*--nkkarh). News-Karten behalten ihr 4/3-Format.
   Ohne Tabs ruecken die Pfeile rechts. Mobil analog Termine, aber OHNE Text-Overlap
   (--introov:0) und mit schmalerem/hoeherem Bild (20/46 ueber die volle Intro-Hoehe). */
.nkar--events.nkar--news6040{grid-template-columns:2fr 3fr;}
.nkar--news6040 .nkar__topbar .stm-cards__arrows{margin-left:auto;}
.nkar--news6040 .nkar__intro{padding-top:var(--introtop,0px);}
.nkar--news6040 .nkar__intro-img{height:calc(var(--nkkarh,340px)*1.5);aspect-ratio:20/46;width:auto;max-width:none;}
.nkar--news6040 .nkar__headline,.nkar--news6040 .nkar__cta{max-width:calc(100% - var(--nkkarh,340px)*.489);}
.nkar--news6040 .nkar-card__media{aspect-ratio:347/169;} /* 10.09. R2 (Stefanie, "Karussell so riesig"): Kachelbild auf TERMIN-Bildhoehe (169px bei Standardbreite; war 4/3 = 260px) - das News-Intro-Karussell bekommt damit die Hoehe des Termine-Karussells */
.nkar--news6040 .nkar-card__desc{display:none;} /* 10.09. R2 (Stefanie/Johann-Entscheid): grauer Teasertext entfaellt in der Intro-Variante (wie im Figma-Mock "Michel Aktuell" - Datum/Titel/Subline/Link bleiben); sonst blieben die Kacheln durch die Extra-Zeilen hoeher als die Termin-Kacheln */
/* 10.09. R4b (Maik, "Karrussels" - Klarstellung Johann): der Vorschautext wird in BEIDEN
   News-Karussellen IDENTISCH auf ZWEI Zeilen gekuerzt - der R2-Clamp galt nur der
   Freisteller-Variante, die Standard-Ansicht zeigte den Auszug voll (genau die
   Ungleichheit aus Maiks Screenshot). Erste R4-Lesart (Clamp ganz raus, beide voll)
   war FALSCH herum und ist zurueckgedreht. Das Kachel-Raster ("Neuigkeiten") und das
   /news/-Archiv sind bewusst NICHT betroffen - das Ticket nennt die Karusselle. */
.stm-nnews .nkar-card__sub,
.nkar--news6040 .nkar-card__sub{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
/* 10.09. R4d (Johann, ersetzt R4c): "Mehr erfahren" MUSS bei allen Meldungen auf der
   GLEICHEN Hoehe stehen - das margin-top:auto der Basiskomponente (Link an der gemeinsamen
   Kartenunterkante, gleiche Kartenhoehe per li-stretch) ist also RICHTIG und gilt wieder
   (die R4c-Regel margin-top:0 ist raus). Der eigentliche Ausreisser war die HEADLINE:
   ein Zweifachumbruch (3 Zeilen, "Dialog im Michel...") "duerfte nicht moeglich sein" -
   Headline daher wie die Subline auf max. 2 Zeilen geclampt (laengere enden mit "…").
   Ergebnis-Stapel: Headline max. 2 Zeilen, Text max. 2 Zeilen, Link unten buendig ueber
   alle Karten. Gilt fuer BEIDE News-Karusselle (Standard + Freisteller-Variante). */
.stm-nnews .nkar-card__title,
.nkar--news6040 .nkar-card__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
/* 10.09. R4e (Johann, Screenshot-Vergleich Homepage vs. Modulseite): im STANDARD-Karussell
   blieb der Abstand Text -> Link zu gross. Ursache: dort rendert noch der GRAUE Teasertext
   (.nkar-card__desc) - die Freisteller-Variante blendet ihn seit der Hoehen-Runde aus. Eine
   Karte mit langem Teaser (auch ausserhalb des sichtbaren Ausschnitts, gleiche Kartenhoehe
   gilt fuer den GANZEN Strang) zog die Reihe hoch, der Link ruckte bei allen anderen nach
   unten weg. Fuer die identische Karte in beiden Karussellen: desc auch hier aus - Stapel
   ueberall Datum/Bild, Titel max. 2, Subline max. 2, Link. */
.stm-nnews .nkar-card__desc{display:none;}

/* ============ 10.09.2026 - "HL-Flaechen Heros Mobile" (Kunde) ============ */
/* "bitte in Mobile global unten das gleiche Padding wie oben in der Headline-Flaeche -
   sodass Topline+Headline den gleichen Abstand nach oben und unten hat."
   Betroffene HL-Flaechen: .hero__box (Hero-Modul, z. B. Seitenkopf "Kircheneintritt")
   und .sgt-hero__box (News-/Termin-Einzelseiten). .stage__box ist toter Altbestand
   (kein Template nutzt ihn), der Mega-Menue-Teaser existiert mobil nicht.
   Ursachen gemessen (390px): hero__box hat zwar 1.75rem RUNDUM-Padding, aber die
   Headline traegt margin-bottom .5em (=20px) -> unten 48px statt 28px Luft; der
   sgt-Box-Boden stand auf 1.2rem statt der 1.4rem von oben. Fix: letztes Kind ohne
   Restmarge (faengt auch hero__text mit seinen 1.2em ab) + sgt-Padding symmetrisch.
   NUR mobil - die Desktop-Flaechen (2.5/1.25 bzw. 2/2.4rem) sind abgenommene Optik. */
@media(max-width:900px){
	.hero__box > :last-child{margin-bottom:0;}
	.sgt-hero__box{padding:1.4rem 1.6rem;}
	.sgt-hero__box > :last-child{margin-bottom:0;}
}
/* 10.09. R3 (Ticket "Karussell aus Terminen", ersetzt die feste .875-Regel von R2): Die Zeilen-
   hoehe kommt wieder aus dem STANDARD-Token (--stm-h2-lh, Basisregel .nkar__headline) - damit
   stimmt die Proportion auch in den ZWISCHENGROESSEN exakt mit der Standard-Kombi ueberein
   (die Tokens interpolieren 390->1440px, das Verhaeltnis wandert dabei .889 -> .875; die feste
   .875 lag dazwischen leicht daneben). Beim JS-Font-Shrink setzt nkarfit (stm-modules.js) das
   Verhaeltnis als UNITLESS line-height inline mit - "Line Height skaliert sich proportional
   mit kleiner" bleibt also erhalten, jetzt mit dem viewport-richtigen Faktor. */
@media(max-width:700px){
	.nkar--events.nkar--news6040{grid-template-columns:1fr;--introimg:40%;--introov:0;}
	.nkar--news6040 .nkar__intro{padding-top:0;}
	.nkar--news6040 .nkar__intro-img{height:calc(100% - var(--introbtm,0px));aspect-ratio:20/46;width:auto;max-width:none;}
	.nkar--news6040 .nkar__headline,.nkar--news6040 .nkar__cta{max-width:calc(100% - var(--introimg)*(1 - var(--introov)));}
}
/* 10.09. R2 (News-Intro): Anti-Trennungs-Modus fuer die Intro-Headline - MUSS auch den inneren
   .stm-hl-Span erfassen (der traegt seit 28.08. hyphens:auto und gewinnt sonst gegen Inline-Styles
   am H2). Das nkarfit-JS schaltet die Klasse und schrumpft, bis das laengste Wort passt. */
.nkar--news6040 .nkar__headline.is-nohyph,
.nkar--news6040 .nkar__headline.is-nohyph .stm-hl{-webkit-hyphens:none;hyphens:none;overflow-wrap:normal;}

/* 10.09. R3 (Ticket "Karussell aus Terminen"): SEPARATES Intro-Bild fuer Mobile ("damit wir einen
   anderen Bildanschnitt des Motivs haben koennen") - neues ACF-Feld je Karussell (Termine:
   ev_intro_image_mobile, News: nb_intro_image_mobile). Ist es gepflegt, rendert das Template
   BEIDE Bilder; hier schaltet der Breakpoint um (das Desktop-Bild bekommt dann die Klasse
   --hasmobile). Ohne Mobile-Bild bleibt das Desktop-Bild wie bisher auf allen Groessen. */
.nkar__intro-img--mobile{display:none;}
@media(max-width:700px){
	.nkar__intro-img--mobile{display:block;}
	.nkar__intro-img--hasmobile{display:none;}
}

/* ============ 10.09.2026 - G3-Lightbox R2 (Kunde): Textbox-Toggle animiert (Desktop) ============ */
/* "Das Auf- und Zuklappen der Textbox waere animiert viel schoener": Das Panel gleitet jetzt
   zwischen voller Breite und dem 64px-Pfeilstreifen, der Text blendet dabei ueber Opacity aus/ein
   (display:none aus der Basisregel wird hier desktop-seitig durch opacity/visibility ersetzt -
   display laesst sich nicht animieren). Waehrend des Zusammenfahrens ist der Text unsichtbar,
   das Neuumbrechen der schmaler werdenden Box faellt also nicht auf. Nur Desktop - mobil ist
   der Toggle ausgeblendet (statisches Panel). */
@media(min-width:901px){
	.stm-ov__g3panel{transition:width .35s ease,background-color .35s ease,padding .35s ease;}
	.stm-ov__g3toggle{transition:transform .35s ease;}
	.stm-ov__g3paneltext{opacity:1;transition:opacity .22s ease,visibility 0s linear 0s;}
	.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3paneltext{display:block;opacity:0;visibility:hidden;transition:opacity .22s ease,visibility 0s linear .22s;} /* schlaegt das display:none der Basisregel; visibility springt erst NACH dem Ausblenden */
	.stm-ov__g3wrap.is-panel-hidden .stm-ov__g3panel{overflow:hidden;} /* unsichtbarer Text darf im 64px-Streifen keinen Scrollbalken erzeugen */
}

/* ============ 10.09.2026 - "Karussell mit Personen": Mehr-erfahren-Link verspringt beim ersten Hover ============ */
/* Ursache (Johann-Frage, Video-Beweis): NUR die Personen-Karten haben ein Bildformat (312/280),
   das bei 288px Kartenbreite eine KRUMME Bildhoehe (258.46px) erzeugt - Funktion/Kontakt/Link
   darunter liegen dadurch auf Subpixel-Positionen (Link-Top gemessen 674.13). Der Text wird
   zunaechst im Seiten-Layer gerastert; der erste Hover startet die Pfeil-Transition des ::after
   und erzwingt ein Neu-Rastern des Links - dabei schnappt der Text einen halben Pixel tiefer ein
   und BLEIBT so (reines Paint-Snapping, die Layout-Koordinaten aendern sich nicht). News-/Termin-
   Karten haben ganzzahlige Bildhoehen (216/169px) -> nur dieses Karussell betroffen.
   Fix: eigener Compositing-Layer von Anfang an - der Link rastert vor, waehrend und nach dem
   Hover identisch, es gibt kein "erstes Umrastern" mehr. */
.stm-team-card__more{will-change:transform;}

/* ============ 16.09.2026 - "Kombiticket Abicht": 2-Klick-Einwilligung fuer externe Inhalte (Code-Modul) ============
   Optik nach dem media2click-Muster der bisherigen Website: graue Platzhalterflaeche, zentrierter
   Hinweistext, zwei Buttons (Komponenten btn--secondary/--primary). Der Code selbst liegt bis zur
   Aktivierung inert im <template> (s. template-parts/modules/code.php). */
.stm-extc__ph{background:var(--st-neutral-100,#ECECEC);min-height:340px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.6rem;padding:2.5rem 1.5rem;text-align:center;}
.stm-extc__txt{margin:0;max-width:640px;font-size:1.02rem;line-height:1.5;color:var(--st-neutral-600,#5D5D5D);}
.stm-extc__btns{margin:0;display:flex;gap:14px;flex-wrap:wrap;justify-content:center;}
.stm-extc.is-active{background:none;}

/* ============ 10.09.2026 - "Bilder in Mehrspaltern": maximale Hoehe 500px ============ */
/* Kundenticket: "Aktuell skalieren sie sich in der Hoehe mit anhand der laengsten Spalte"
   (Bild-Text-Fall: .has-bildtext zieht das Bild auf 100% Modulhoehe). Deckel bei 500px -
   object-fit:cover laesst das gedeckelte Bild beschneiden statt verzerren; der Media-
   Wrapper wird mitgedeckelt, sonst bliebe unter dem Bild ein leerer 100%-Streifen.
   Gilt fuer die MEHRspalter (2/3/4) - der 1-Spalter behaelt seine 02.08.-Regel
   ("Bild vollstaendig zeigen", nie beschneiden). */
.module--spalter-2 .col--type-image .col__media img,
.module--spalter-3 .col--type-image .col__media img,
.module--spalter-4 .col--type-image .col__media img{max-height:500px;object-fit:cover;}
.has-bildtext .col--type-image .col__media{max-height:500px;}
/* 16.09. (Maik + Endkunde, "Darstellung der Bilder auf Anfahrtsseite"): ACF-Checkbox "Bild nicht
   anschneiden" (Spalten-Feld image_contain, nur Mehrspalter) -> .col__media--contain: Bild wird
   per CONTAIN vollstaendig eingepasst statt per cover beschnitten. Deckt beide Beschnitt-Pfade ab:
   die Mehrspalter-Regel direkt hierueber UND den Bild-Text-Fall (.has-bildtext, Zeile ~48 setzt
   img cover/100%) - dessen Selektor .has-bildtext .col--type-image img verliert gegen die
   spezifischere --contain-Regel. Hoehendeckel 500px bleibt in Kraft, es wird nur nicht mehr
   geschnitten. Default (Checkbox aus) = unveraendert cover. */
.module--spalter-2 .col--type-image .col__media--contain img,
.module--spalter-3 .col--type-image .col__media--contain img,
.module--spalter-4 .col--type-image .col__media--contain img,
.has-bildtext .col--type-image .col__media--contain img{object-fit:contain;}

/* ============ 11.09.2026 - "Modul Timeline" (Stefanie): Desktop-Punkte, CTA, Pfeile, Mobile ============ */
/* 1) Desktop-Navigation auf dem Kreis: 13.09. ("Modul Timeline", Punkte 1-3) uebernehmen die
   per-Eintrag-Punkte selbst wieder die Navigation - als Morph-Stationen bei -16/0/+16 Grad
   (Geometrie wie zuvor bei den statischen odots: Ring 1080px, Kontur-Radius 538.5px, ~150px
   Bogenabstand). Die statischen .stm-tl__odot-Buttons sind aus dem Template entfernt: weil an
   den Enden GAR KEIN Punkt mehr stehen darf (vorher :disabled opacity .25 = "transparent"),
   und ohne Vorgaenger/Nachfolger existiert schlicht kein Eintrags-Element an der Station.
   is-near ist wieder SICHTBAR (100% Deckkraft, klein/blau, klickbar = prev/next); nur die
   Aussenstationen (is-off, +-32 Grad) stehen auf opacity 0 fuer das Rein-/Rausschieben.
   Punktlabels bleiben aus. */
.stm-tl__dotlabel{display:none;}
/* 2) Optionaler CTA horizontal zentriert unter der TEXTBOX (nicht unter der vollen Slide-Breite
   inkl. Bildspalte): gleicher Links-Shift wie .stm-tl__text; bei Slides MIT Bild reserviert
   margin-right die Bildspalte (min(420px,38%) + 48px Gap), damit die Zentrierachse exakt der
   Textblock ist. Gemessen vorher: CTA-Mitte 782 vs. Text-Mitte 614. */
.stm-tl__ctawrap{margin-left:clamp(-270px,calc((1440px - 100vw)/2),0px);}
.stm-tl__slide:has(.stm-tl__media) .stm-tl__ctawrap{margin-right:calc(min(420px,38%) + 48px);}
/* 3) Blaetterpfeile: vertikale Lage kommt vom JS (placeArrows in initTimeline). 13.09.
   (Zusatzkorrektur): IMMER direkt unter das Bild der aktiven Slide (top = Bildunterkante+16px)
   statt buendig zur Slide-/CTA-Unterkante - mit CTA standen sie aus dem Bild raus, ohne CTA
   sogar IM Bild. Nur der (Redaktions-)Sonderfall ohne Bild faellt auf die alte
   Slide-Unterkante zurueck. */
@media (max-width:919px){
	/* "Content auf Satzspiegelbreite": --st-gutter ist in main.css DOPPELT auf :root definiert
	   (24px, dann 60px - die 60 gewinnen IMMER, der Mobile-Wert ist toter Code). Der normale
	   Satzspiegel kommt mobil aus eigenen 24px-Regeln der Module, die Timeline haengt aber an
	   var(--st-gutter,24px) und stand damit 60px eingerueckt (gemessen: Text 60..315 statt
	   24..351 bei 390px). Fix BEWUSST nur im Timeline-Scope - :root anzufassen wuerde u. a.
	   die --nkarbleed-Formeln der Karusselle verschieben. Deckt mnav, marc, slides UND die
	   Blaetterpfeile in einem ab. */
	.stm-tl-mod{--st-gutter:24px;}
	/* Mobile (Stefanie): gelieferte Timeline-Arrow-Icons (Default+Hover, 34px-Kreis) statt der
	   verzerrten Eigenbau-Kreise; Hover-Variante als geparkte zweite Background-Ebene vorgeladen
	   (Preload-Muster wie stm-il/stm-sarr). ::before-Maskenpfeil entfaellt - der Pfeil steckt im Icon.
	   padding:0 zwingend: ein globales Button-Padding (12px 24px) wuerde die 34px-Box per
	   border-box sonst auf 48px Mindestbreite aufpumpen (gemessen). */
	/* 14.09. (Kunde, "Timeline"): Icon-Tausch bei Hover ENTFERNT ("Pfeil wird transparent"). ->
	   18.09. (Stefanie, "Hover-Farbe aus den Timeline Arrows weg"): auf Kundenwunsch WIEDER AKTIV -
	   Default #002F5D-Kreis, Hover/Tap = geliefertes Hover-Asset (#034B91-Kreis), Hover-Variante
	   als geparkte Zweitebene vorgeladen (Preload-Muster R40). Richtungswechsel im Asana-Thread
	   dokumentiert. */
	.stm-tl__marrow{width:34px;height:34px;padding:0;background-color:transparent;border-radius:0;background-image:url("../img/icons/Timeline%20Arrow%20left%20default.svg"),url("../img/icons/Timeline%20Arrow%20left%20hover.svg");background-position:center,-60px -60px;background-size:contain,1px 1px;background-repeat:no-repeat;}
	.stm-tl__marrow:hover,.stm-tl__marrow:active{background-image:url("../img/icons/Timeline%20Arrow%20left%20hover.svg"),url("../img/icons/Timeline%20Arrow%20left%20default.svg");}
	.stm-tl__marrow::before{display:none;}
	.stm-tl__marrow--next{background-image:url("../img/icons/Timeline%20Arrow%20right%20default.svg"),url("../img/icons/Timeline%20Arrow%20right%20hover.svg");}
	.stm-tl__marrow--next:hover,.stm-tl__marrow--next:active{background-image:url("../img/icons/Timeline%20Arrow%20right%20hover.svg"),url("../img/icons/Timeline%20Arrow%20right%20default.svg");}
	/* CTA-Zentrierung: Desktop-Spaltenreservierung mobil zuruecknehmen (Bild steht im Stapel) */
	.stm-tl__ctawrap{margin-left:0;}
	.stm-tl__slide:has(.stm-tl__media) .stm-tl__ctawrap{margin-right:0;}
	/* Blaetterpfeile wie beim Karussell links/rechts AUSSEN am Satzspiegel + 50% mehr Abstand
	   nach oben (1.6 -> 2.4rem) */
	.stm-tl__arrows{justify-content:space-between;margin-top:2.4rem;padding:0 var(--st-gutter,24px);}
}
/* 14.09.: (hover:hover)-Icon-Tausch der mobilen Slider-Pfeile entfernt - Pfeile behalten immer
   das Default-Icon (Kunde: "bei Hover nicht transparent, immer 100% Deckkraft"). */

/* ============ 13.09.2026 - "Modul Termin Kacheln" (Maik) ============ */
/* Kachelansicht (/veranstaltungen?ansicht=raster + events-Modul "blog"): der TEXT-CONTAINER
   uebernimmt Typogroesse + Abstaende der Termin-Karussell-Karte (.nkar-card: when .92rem/1.3
   mit .27rem Abstand zum Bild, Titel .9rem/1.35, Teaser .85rem/1.4, Abstaende .3rem =
   Flex-Gap der Karussell-Karte). NUR Text-Container - Bildgroesse/Raster bleiben. Farben/
   Gewichte bleiben aus den Basisregeln (blau/rot/700 wie gehabt). Der Text-Link kommt jetzt
   als Komponente btn--text btn--sm aus dem Template (manuelles › entfernt). */
.stm-evl-tile__date{margin:.57rem 0 .3rem;font-family:var(--st-font-head,inherit);font-size:.92rem;line-height:1.1;} /* 14.09. (Kunde, "Termin Kacheln"/"Karussell Termine"): Abstand Bild -> Datum auf das News-Karussell-Mass (9.1px = .3rem Gap + .27rem Margin der Karussell-Karte -> hier .57rem, kein Flex-Gap) - war .27rem und damit nur halb so gross wie in den Karussells */ /* 15.09. (Kunde, Wdh. "noch nicht deckungsgleich"): lh 1.3 -> 1.1 wie der News-Karussell-Titel - das restliche "paar Pixel zu viel" war reines Zeilenbox-Leading der Datumszeile. Ink-gemessen jetzt 6.1 / 1.0 / 6.2 == News-Karussell (identisch auch im Termin-Karussell via .nkar-card__when). */
.stm-evl-tile__title{margin:0 0 .3rem;font-size:.9rem;line-height:1.35;}
.stm-evl-tile__text{margin:0 0 .3rem;font-size:.85rem;line-height:1.4;}
.stm-evl-tile .stm-evl__more{display:flex;width:fit-content;} /* 14.09. (Kunde, "Termin Kacheln"): Abstand Titel -> Textlink auf das News-Karussell-Mass 4.8px (war 6.8) - der inline-flex-Link sass in einer Zeilenbox, deren Strut 2px Eigenluft brachte (margin-top an Inline-Boxen wirkt vertikal nicht); als Block-Level-Flex entfaellt die Zeilenbox, fit-content haelt die Klickflaeche kompakt */

/* ============ 13.09.2026 - Ticket "Karussell Termine" (Maik): Pfeile bei wenigen Terminen + Musik-Variante ============ */
/* "Wenn nur 1 Termin (Mobile) bzw. 2 Termine (Desktop) angezeigt werden, bitte die ausgegrauten
   Slider-Pfeile gar nicht erst anzeigen." Das JS (syncUI in buildCards) setzt is-fewcards auf dem
   Karussell-Root, sobald <=1 (mobil) / <=2 (Desktop) SICHTBARE Kacheln da sind - hier wird nur im
   Termine-Karussell ausgeblendet (0-4-0 schlaegt auch die mobile Grid-Regel .stm-nkar .stm-cards__arrows). */
.nkar--events .nkar__main.is-fewcards .stm-cards__arrows{visibility:hidden;} /* 15.09. (Kunde, "Karussell Termine"): visibility statt display:none - das display:none liess die Topbar bei Datumsauswahl von 24 auf 22px schrumpfen (Pfeile = hoechstes Topbar-Kind): "Bevorstehend" rueckte 1px hoch (Flex-Zentrierung) und das Karussell 2px (gemessen) = der beanstandete Mini-Versprung. visibility reserviert den Platz - Desktop ist die leere Pfeil-Ecke unsichtbar, nichts springt. */
@media(max-width:700px){ .nkar--events .nkar__main.is-fewcards .stm-cards__arrows{display:none;} } /* mobil BLEIBT display:none - dort sind die Pfeile eine eigene Zeile zwischen Kopf und Kacheln (Grid-Regel ~3175), visibility:hidden liesse ein sichtbares Loch stehen */

/* "WICHTIG: Es soll das Termin-Karussell auch speziell in den Farben des Musik-Designs geben."
   Alles ROTE wird BLAU: Topline/Headline erledigt der globale .is-musik-Block (Zeile ~330),
   hier die restlichen Rot-Traeger des Termin-Karussells: rote Termin-Titel in den Karten,
   die Zeile Heute/Bevorstehend/Kalender + Datumsauswahl. NUR der HOVER der Tabs/des Kalenders
   darf rot sein, der Active-State faellt auf Blau zurueck. Kategorie-Badges behalten ihre
   semantischen Farben (Gottesdienste/Musik/Vortrag). Die News-Intro-Variante (.nkar--news6040)
   ist ausgenommen - das Ticket meint das TERMIN-Karussell. */
.is-musik .nkar--events:not(.nkar--news6040) .nkar-card__evtitle{color:var(--st-color-primary,#002F5D);}
.is-musik .nkar--events:not(.nkar--news6040) .nkar-card__inner:hover .nkar-card__title{color:var(--st-color-primary,#002F5D);} /* Karten-Hover-Rot ist ebenfalls "Rotes" - nur Tabs/Kalender-Hover darf rot */
.is-musik .nkar__tab{color:var(--st-color-primary,#002F5D);}
.is-musik .nkar__tab.is-active{color:var(--st-color-primary,#002F5D);} /* Active-State wieder blau (schlaegt die Kombi-Regel is-active/hover, 0-3-0 vs 0-2-0) */
.is-musik .nkar__tab:hover{color:var(--st-color-accent,#B51F29);} /* Hover darf rot (0-3-0, steht bewusst NACH der Active-Blau-Zeile gleicher Spezifitaet) */
.is-musik .nkar__tab.is-active:hover{color:var(--st-color-accent,#B51F29);} /* explizit: aktiver Tab unter dem Cursor -> rot (0-4-0, keine Reihenfolge-Abhaengigkeit) */
.is-musik .nkar__cal.is-active .nkar__calbtn{color:var(--st-color-primary,#002F5D);} /* aktives Kalender-Icon blau statt rot */
.is-musik .nkar__cal.is-active .nkar__calbtn:hover{color:var(--st-color-accent,#B51F29);} /* Hover bleibt rot */
.is-musik .nkar__caldate{color:var(--st-color-primary,#002F5D);} /* gewaehltes Datum blau */

/* ============ 13.09.2026 R2 - Ticket "Modul News Kacheln" (Kunde) ============ */
/* "die News-Kacheln bitte im Text genauso kuerzen wie im Karussell" - identischer Stapel wie
   in beiden News-Karussellen (R4d/R4e-Runde): Headline max. 2 Zeilen, roter Vorschautext max.
   2 Zeilen, grauer Teasertext aus, "Mehr erfahren" an der gemeinsamen Unterkante (margin-top:auto
   der Basiskomponente + Grid-Item-Stretch). Scope .nnews-grid = Kachel-Raster des News-Moduls
   ("Neuigkeiten"/"Alle News"); die Karusselle haben ihre eigenen, identischen Clamp-Regeln oben. */
.nnews-grid .nkar-card__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.nnews-grid .nkar-card__sub{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.nnews-grid .nkar-card__desc{display:none;}

/* ============ 13.09.2026 R3 - Ticket "Modul Musik Design" (Kunde): Rot GLOBAL eliminieren ============ */
/* "Es werden nicht ueberall alle Texte rot gefaerbt ... Bekommst Du die global eleminiert (blau
   eingefaerbt) oder muessen wir alle Module in allen Varianten durchtesten?" -> STRUKTURELL statt
   Einzelregeln: Praktisch jedes Design-Rot des Themes laeuft ueber var(--st-color-accent) (und
   Copy-Links ueber --st-color-link). Innerhalb von .is-musik werden beide Variablen auf das
   Primaerblau umgelegt - damit sind Parallax-Topline, Termin-Titel, News-Sublines, gewaehltes
   Kalenderdatum usw. in ALLEN Modulen und kuenftigen Varianten automatisch blau, ohne Modul-
   Durchtesten. Die enumerierten Altregeln (Kicker/Headline-Block oben, nkar-Musik-Block) bleiben
   als Gurt bestehen. Danach werden die Stellen, an denen Rot BLEIBEN soll, per lokalem
   Variablen-Re-Pin wiederhergestellt: */
.is-musik{--st-color-accent:var(--st-color-primary,#002F5D);--st-color-link:var(--st-color-primary,#002F5D);}
.is-musik .btn{--st-color-accent:#B51F29;} /* CTAs hovern ROT "wie alle anderen CTAs auch" (Kundenticket) - Buttons behalten ihr normales Farbverhalten */
.is-musik .btn--primary:hover,.is-musik .btn--primary:focus-visible{background:#B51F29;color:#fff;box-shadow:none;} /* "falscher Hover" im Musik-Design: jetzt exakt der Standard-Hover (rote Flaeche, weisse Schrift, kein Ring) */ /* 14.09. ("Musik Design", CTA-Blau-Ticket): HART #B51F29 statt var(--st-color-accent) - die Var ist im is-musik-Scope auf Primaerblau remappt (Z.~3404), der Hover loeste damit unsichtbar BLAU auf. Gleiche Re-Pin-Technik wie die uebrigen bewusst roten Elemente des Musik-Blocks. */
.is-musik .nkar-card__badge,.is-musik .stm-evl__badge,.is-musik [class*="is-cat-"]{--st-color-accent:#B51F29;} /* Kategorie-Farben bleiben semantisch (Badges/is-cat-Farblogik: Gottesdienste-Gold/Musik-Blau/Sonstiges-Rot) */
.is-musik .stm-cards__arrows{--st-color-accent:#B51F29;} /* Slider-Pfeile hovern rot wie ueberall */
.is-musik .nkar__tabs,.is-musik .nkar__cal{--st-color-accent:#B51F29;} /* Maik ("Karussell Termine"): NUR der Hover der Tabs/des Kalenders darf rot - die Blau-Regeln fuer Active/Datum (oben, via --st-color-primary) bleiben davon unberuehrt */

/* ===== 05.10.2026 R73 (Maren/Johann, "Modul Map"): Live-Google-Karte =====
   .stm-map (Figur, Dummy-Bild) bestand schon (Z.~1378); hier die Live-Variante:
   Canvas im 16:9 des Figma-Dummys (2560x1439), Mobile hoeher (420px), damit
   die Karte bedienbar bleibt. Consent-Platzhalter liegt ueber dem Canvas. */
.stm-map--live{position:relative;max-width:1320px;}
.stm-map__canvas{width:100%;aspect-ratio:16/9;min-height:320px;background:var(--st-color-mist,#CAD9E0);}
@media (max-width:640px){
	.stm-map__canvas{aspect-ratio:auto;height:420px;}
}
.stm-map__consent{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;text-align:center;background:#F2F2F2;padding:2rem;}
.stm-map__consent[hidden]{display:none;}
.stm-map__consent-inner{max-width:460px;}
.stm-map__consent-txt{margin:0 0 1.2rem;}
/* InfoWindow-Inhalt (WYSIWYG "Info-Box"): Theme-Typo statt Google-Defaults */
.stm-map__iw{font-family:var(--st-font-body,inherit);font-size:.95rem;line-height:1.5;color:#222;max-width:260px;padding:4px 6px 2px 2px;}
.stm-map__iw p{margin:0 0 .5em;}
.stm-map__iw p:last-child{margin-bottom:0;}
.stm-map__iw a{color:var(--st-color-primary,#002F5D);}

/* ===== 05.10.2026 R75 (Dirk, "Modul Maps im 2-Spalter"): Live-Karte als =====
   Inhaltstyp in den Spalten. Die Spalten-Hoehe macht weiter .col__media--map
   (min 340px, s. Z.~517) - die Live-Variante fuellt sie statt des iframes;
   das 16:9 des grossen Moduls gilt hier bewusst NICHT (Spalte = hochkantiger). */
.col__media--maplive .stm-map--live{height:100%;min-height:340px;max-width:none;}
.col__media--maplive .stm-map__canvas{aspect-ratio:auto;height:100%;min-height:340px;}

/* ===== 07.10.2026 R76 (Maik, "spenden popup"): Twingle-Layer scrollt jetzt =====
   im EIGENEN Container statt im Iframe (Sprung-zu-Unterstuetzern-Fix, s. JS).
   Box/Masse unveraendert; neu ist nur der Scroller zwischen Box und Iframe.
   Das Iframe bekommt seine Hoehe per JS aus Twingles size-Message; bis zur
   ersten Message traegt der 100%-Fallback. overscroll-behavior stoppt das
   Weiterscrollen der Seite hinter dem Layer am Listenende. */
.stm-spb-ov__scroll{height:100%;overflow-y:auto;overscroll-behavior:contain;}
.stm-spb-ov__frame{height:100%;} /* Fallback vor der ersten size-Message; JS setzt px */

/* ===== 07.10.2026 R80b (Maik, "Modul Maps": Bold weiter unsichtbar): ===========
   Der DOM-Node-Fix (R80) war live, die Fettung fehlte trotzdem in allen Browsern.
   Ursache-Klasse: Googles InfoWindow-Wrapper (.gm-style/.gm-style-iw) setzen eigene
   font-Werte; strong/b sind im Browser-Stylesheet nur RELATIV ("bolder") - auf einer
   300/400er-Basis loest das zu 400/normal auf. Deshalb ABSOLUTE Gewichte mit
   !important direkt auf unserem Wrapper + font-synthesis explizit an (falls die
   Kit-Schrift einzelne Schnitte nicht laedt, synthetisiert der Browser). */
.stm-map__iw{font-weight:400;font-synthesis:weight style;}
.stm-map__iw strong,.stm-map__iw b{font-weight:700 !important;}
.stm-map__iw em,.stm-map__iw i{font-style:italic !important;}
.stm-map__iw u{text-decoration:underline;}

/* ==== 12.10.2026 R85 (Dirk, "Konzertkarten Web-Shop immer noch mit roten Headlines"):
   Der Veranstaltungs-Hero (page-veranstaltungen.php, .stm-evl__*) ignorierte die
   Hero-Eigenschaften "Musik-Design" (ohne roten Text, Klasse is-musik) und
   "Musik-Bilder" (weisses M, has-musik-m) - die bestehenden Regeln zielen nur auf
   .hero__*. Headline (.stm-hl__last) deckt der globale .is-musik-Block bereits ab;
   hier Kicker + M-Clip + Box analog zum Hero-Modul. ==== */
.stm-evl__hero.is-musik .stm-evl__kicker{color:var(--st-color-primary,#002F5D)!important;}
.stm-evl__hero.has-musik-m .stm-evl__hero-img{clip-path:polygon(25% 0,75% 0,50% 100%);}
.stm-evl__hero--m.has-musik-m .stm-evl__hero-img{clip-path:polygon(29% 0,71% 0,50% 100%);}
.stm-evl__hero--s.has-musik-m .stm-evl__hero-img{clip-path:polygon(34% 0,66% 0,50% 100%);}
.stm-evl__hero.has-musik-m .stm-evl__hero-box{background:transparent;}

/* ==== 12.10.2026 R88 (Maik, "Datenfelder ChurchTools - Ueberpruefung, Mapping, Ausgabe"):
   Status-Flags (saleStatus) als hellblaue Chips in Listenzeile/Kachel/Einzelseite,
   Werke-Block in Liste + Einzelseite, CT-Infoblock Einzelseite. ==== */
.stm-evl__flag{display:inline-flex;align-items:center;gap:.6rem;padding:.55rem .9rem;background:#E8EEF4;color:var(--st-color-primary,#002F5D);font-size:.95rem;line-height:1.25;border-radius:2px;}
.stm-evl__flag--dark{background:var(--st-color-primary,#002F5D);color:#fff;}
.stm-evl__flag--warn{background:#F3F3F3;}
.stm-evl__flag--warn .stm-evl__flag-ico{color:var(--st-color-accent,#B51F29);}
.stm-evl__flag .stm-evl__btn-txt{display:flex;flex-direction:column;}
.stm-evl__flag .stm-evl__btn-txt small{font-size:.8rem;opacity:.85;}
.stm-evl-row__actions .stm-evl__flag{justify-content:flex-start;}
.stm-evl-tile .stm-evl__flag{margin:.35rem 0 .1rem;align-self:flex-start;}
.stm-evl-row__works{margin:.35rem 0 .15rem;font-size:.95rem;line-height:1.5;color:var(--st-color-text,#1a1a1a);}
.sgt-body__works{margin:1rem 0 .4rem;}
.sgt-body__works-hl{margin:0 0 .15rem;font-weight:700;color:var(--st-color-primary,#002F5D);}
.sgt-body__works p{margin:0;}
.sgt-body__ctinfo{margin:.7rem 0;padding-left:1.1rem;}
.sgt-body__ctinfo li{margin:.1rem 0;}
.sgt-body__vvk{margin:.7rem 0 .4rem;}
.sgt-body__vvk p{margin:0;}
.sgt-body__closing{margin:.7rem 0 0;font-size:.95rem;color:#555;}

/* 13.10.2026 R90b (Eye-Able): Standard-Screenreader-Klasse fuer die Paginierungs-Pfeile
   (Vorherige/Naechste Seite) - visuell versteckt, fuer Vorlesesoftware lesbar. */
.screen-reader-text{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;white-space:nowrap;}

/* ==== 13.10.2026 R93 (Maik, "Veranstaltung Karussell"): bei <=2 sichtbaren Terminen keine
   Nav-Dots (JS raeumt sie, Klasse is-nodots), bei nur 1 Termin auch keine Slider-Pfeile;
   mobil waechst dann der Abstand Tab-Zeile -> Terminkachel von .4rem auf 1rem (+150%). ==== */
/* 14.10.2026 R98 (Maik, "Introbild/CTA/Karussell verspringen je nach Tab-Wahl"): Desktop
   visibility:hidden statt display:none - das display:none dieser R93-Regel hat den
   dokumentierten 15.09.-Fix (is-fewcards, Z.~3628) wieder ausgehebelt: die Pfeile sind das
   HOECHSTE Topbar-Kind (24px vs. Tabs 22px); ohne sie schrumpft die Topbar 2px, die Kacheln
   ruecken 2px hoch, und das --introbtm-JS (stm-modules.js, fit()) misst gegen die verschobene
   Kachel-Unterkante neu -> Freisteller + CTA springen beim Tab-Wechsel 2px mit (Maiks Video,
   gemessen: Headline/Statue/CTA/Kacheln exakt 2px). visibility reserviert den Platz, nichts
   springt. Mobil BLEIBT display:none - dort sind die Pfeile eine eigene Zeile, visibility
   liesse ein sichtbares Loch (gleiche Begruendung wie das fewcards-Regelpaar). */
.stm-cards-carousel.is-single .stm-cards__arrows{visibility:hidden;}
@media (max-width: 700px){
	.stm-cards-carousel.is-single .stm-cards__arrows{display:none;}
	.nkar--events .nkar__main.is-nodots .nkar__topbar{margin-bottom:1rem;}
}
/* 14.10. R98 Teil 2: Dots-Zeile im is-nodots-Zustand (z.B. Tab "Heute" mit <=2 Terminen)
   behaelt auf dem Desktop ihre 8px Hoehe (das JS raeumt nur die Buttons) - sonst ist der
   Karussell-Strang je Tab 8px verschieden hoch und die Grid-Zeile (align-items:stretch)
   wackelt an breiten Viewports, sobald der Strang die 420px-Intro-Mindesthoehe uebersteigt.
   Mobil nicht reservieren (dort stapelt das Layout, die R93-Abstandsregel oben regelt die Luft). */
@media (min-width: 701px){
	.nkar--events .nkar__main.is-nodots .stm-cards__dots{min-height:8px;}
}

/* ==== 14.10.2026 R100 (Kunde, "Modulabstaende auf dem Smartphone"): Der Moduloptions-Wert
   "Abstand unten" (25-250px, Default 100) wirkt auf dem SMARTPHONE HALBIERT - "statt den 100
   Standardpixeln nur 50px". Nur <=700px (Haus-Breakpoint der Modul-Layouts; Tablet/Desktop
   explizit unveraendert lt. Ticket). Die Basisregeln (.module.spacer--X, main.css) bleiben
   unangetastet - dieses Blatt laedt danach und gewinnt bei gleicher Spezifitaet.
   ACHTUNG Breadcrumb-Kalibrierung: nach einem Hero sitzt der Breadcrumb fix 10px unter der
   Hero-Kante (Margin-Collapse Hero-mb + negatives bc-mt, s. Block ~Z.1169/1187) und TRAEGT
   dann selbst den "Abstand unten" (Kundenregel 31.07.). Halbiert sich der Hero-Abstand, muessen
   bc-margin-top (= -(X/2 - 10)) und bc-margin-bottom (= X/2) mitziehen, sonst kippt die 10px-Kante. */
@media (max-width: 700px){
	.module.spacer--25{margin-bottom:13px;}
	.module.spacer--50{margin-bottom:25px;}
	.module.spacer--75{margin-bottom:38px;}
	.module.spacer--100{margin-bottom:50px;}
	.module.spacer--150{margin-bottom:75px;}
	.module.spacer--200{margin-bottom:100px;}
	.module.spacer--250{margin-bottom:125px;}
	/* Hero + Breadcrumb: 10px-Kante halten, Abstand-unten-Anteil halbieren */
	.module--hero + .stm-bc{margin-top:-15px;margin-bottom:25px;} /* Default-Spacer 50 -> 25 */
	.module--hero.spacer--0 + .stm-bc{margin-top:10px;margin-bottom:0;}
	.module--hero.spacer--25 + .stm-bc{margin-top:-3px;margin-bottom:13px;}
	.module--hero.spacer--50 + .stm-bc{margin-top:-15px;margin-bottom:25px;}
	.module--hero.spacer--75 + .stm-bc{margin-top:-28px;margin-bottom:38px;}
	.module--hero.spacer--100 + .stm-bc{margin-top:-40px;margin-bottom:50px;}
	.module--hero.spacer--150 + .stm-bc{margin-top:-65px;margin-bottom:75px;}
	.module--hero.spacer--200 + .stm-bc{margin-top:-90px;margin-bottom:100px;}
	.module--hero.spacer--250 + .stm-bc{margin-top:-115px;margin-bottom:125px;}
}

/* ==== 14.10.2026 R101 (Maik, "Musik-Design funktioniert nicht mobil"): Der Desktop-"M"-Clip
   (polygon 25/75 bzw. 29/71 / 34/66, Z.~135ff) blieb mobil aktiv - bei 360-430px Viewport wird
   aus dem V ein schmaler KEIL (Screenshot Kantorei-Seite: Bildsplitter statt Motiv). Im Figma-
   Mobile (Frames 8024:751 L / 8024:806 M, 360er) ist das V eine FIXE, groessenunabhaengige Form:
   Oberkante von x=23.7 bis 336.3 (6.6%% / 93.4%%), Spitze mittig bei y=267px (Maskengruppe
   identisch fuer L und M; S nutzt dieselbe, unten minimal beschnitten). Die Spitzen-Hoehe
   skaliert mit der Viewportbreite (267/360 = 74.2vw), damit der Oeffnungswinkel auf allen
   Phones dem Figma entspricht; min(...,100%%) laesst die Spitze auf sehr breiten "Mobile"-
   Viewports hoechstens auf der Media-Unterkante aufsetzen. Breakpoint 782px = der Hero-
   Mobil-Breakpoint der Fixhoehen (31.07.). Selektor bewusst 0-3-0 (.hero-slider...), damit er
   die groessenspezifischen Desktop-Regeln (--m/--s, ebenfalls 0-3-0) per Reihenfolge schlaegt. */
@media (max-width: 782px){
	.hero-slider.has-musik-m .hero__media{clip-path:polygon(6.6% 0,93.4% 0,50% min(74.2vw,100%));}
}

/* ==== 14.10.2026 R102 (Johann, "Musik-Design mobil: ist die Headline so umgesetzt wie in
   Figma?"): Abgleich gegen die Figma-Mobile-Frames (Typo-Flaeche Musik 8024:765, generisch
   8018:640 - die Typo ist dort fuer ALLE Mobile-Heros identisch spezifiziert):
   (1) Headline mobil 54px bei Zeilenhoehe 48 (Faktor .889) - live griff das clamp-Minimum
       (40px). Topline 18px (live 16.8). Gilt fuer alle Heros (Figma-Mobile-Typo ist generisch),
       Musik unterscheidet sich nur in den Farben (alles blau, bestehende is-musik-Regeln).
   (2) Im Figma-MOBILE traegt auch der MUSIK-Hero die weisse Typo-Flaeche (80% Deckung) UEBER
       dem V - die Desktop-M-Look-Regel ".has-musik-m .hero__box{background:transparent}"
       (31.07., "ragte ins V-Dreieck") gilt nur fuer die Desktop-Komposition. Mobil liegt die
       Flaeche im Mock bewusst auf dem V (Lesbarkeit auf dem Motiv).
   Breakpoint 782px wie die Hero-Fixhoehen/R101. Box-Padding (1.75rem, Maik 28.08.) und
   Linksbuendigkeit bleiben unveraendert - abgenommene Mobile-Kalibrierung. */
@media (max-width: 782px){
	.hero__headline{font-size:2.8688rem;} /* 54px; line-height .9 der Basisregel ergibt die 48er Zeile */ /* 15.10. R116 Punkt 2 (Kunde): alle Headlines mobil ~15% kleiner - 3.375rem (54px) x0.85 = 45.9px; der Hero ist typografisch die H2 ("Headline", Mobile 54/48), daher mitskaliert wie die globalen Tokens in main.css */
	.stm-evl__title{font-size:clamp(2.125rem,4.42vw,4.25rem);} /* 15.10. R116 Punkt 2: Termin-/Veranstaltungs-Hero (eigene clamp seit R58) ebenfalls x0.85 - das Ticket-Beispiel ("Gespraechskreis Lebendige Liturgie") ist genau dieser Hero; 40px -> 34px am 390er */
	.hero__topline{font-size:1.125rem;}
	.hero-slider.has-musik-m .hero__box{background:rgba(255,255,255,.8);}
}

/* ==== 14.10.2026 R107 (Kunde, "Modulabstaende Smartphone", Beispiel /engagement/spenden/):
   Nach R100 stimmte der Margin (100 -> 50px), sichtbar waren aber 114px - URSACHE ist eine
   Mobile-Altregel in main.css (@media max-width:900px): .module{padding:var(--st-space-m)
   var(--st-pad)} gibt JEDEM Modul mobil 32px vertikales Innen-Padding. Das widerspricht der
   31.07.-Entscheidung im selben Blatt ("KEIN vertikales Padding mehr - der gewaehlte Abstand
   unten ist der EINZIGE Abstand zwischen Modulen") - Desktop haelt sich daran (0), nur mobil
   kamen 32+32px obendrauf. Hier genullt (dieses Blatt laedt nach main.css); damit gilt mobil
   wie am Desktop: sichtbarer Abstand = Spacer-Wert, bei 100er-Einstellung exakt 50px.
   RE-PINS: Der Hero behaelt sein Mobil-Padding (Fixhoehen/Typo-Kalibrierung 31.07./R102
   wurden MIT den 32px vermessen); .module.has-bg/.theme--dark/quote.is-musik (4rem-Regel,
   0-2-0) gewinnen ohnehin per Spezifitaet; die .stm-bc-Mobilkalibrierung (padding-top:0)
   bleibt unberuehrt. */
@media (max-width: 900px){
	.module{padding-top:0;padding-bottom:0;}
	.module--hero{padding-top:var(--st-space-m,2rem);padding-bottom:var(--st-space-m,2rem);}
}

/* ==== 16.10.2026 R118b (Kunde/Meike, "Musik Layout mobil" - finale Ansage Johann): Beim
   Musik-M-Hero steht die Headline mobil UNTER dem M (an der Stelle des bisherigen Weissraums),
   nicht mehr als transparente Flaeche auf dem Bild. Der grosse Weissraum unter dem V entfaellt,
   weil die Hero-Hoehe jetzt an die V-Spitze gekoppelt ist (Spitze bei 74.2vw, R101) plus fester
   230px-Textzone - am 390er-Viewport ergibt das ~519px, praktisch die bisherigen 520px, nur
   sinnvoll gefuellt. Die uebrigen Heros bleiben UNVERAENDERT (Projekt pausiert; Anschnitt-
   Varianten-Entscheidung des Kunden steht aus, s. R118-Rueckfrage). */
@media (max-width:782px){
	.hero-slider--m.has-musik-m,
	.hero-slider--s.has-musik-m{height:calc(74.2vw + 230px);} /* Fallback fuer SLIDER-Heros (absolute Slides koennen keine auto-Hoehe) */
	.hero-slider--m.has-musik-m.is-single,
	.hero-slider--s.has-musik-m.is-single{height:auto;min-height:calc(74.2vw + 60px);}
	.hero-slider--m.has-musik-m.is-single .hero,
	.hero-slider--s.has-musik-m.is-single .hero{height:auto;} /* R118c: die Basisregel .hero-slider .hero{height:100%} wuerde den Slide auf die min-height klemmen und die Box liefe unten raus (gemessen: Box 435 bei Slide 349) - auto laesst den Slide mit dem Inhalt wachsen, media (inset:0) folgt */
	.hero-slider--m.has-musik-m.is-single .hero-slider__track,
	.hero-slider--s.has-musik-m.is-single .hero-slider__track{position:relative;inset:auto;} /* R118c: der Track ist absolut (inset:0) und traegt nie zur Hoehe bei - fuer die inhaltsgetriebene Hoehe muss er in den Fluss */
	.module--hero.hero-slider--m.has-musik-m.is-single,
	.module--hero.hero-slider--s.has-musik-m.is-single{padding-top:0;padding-bottom:0;} /* R118c: das R107-Hero-Mobilpadding (2rem) galt der ALTEN Kalibrierung (Bild fuellte den Hero via absolutem Track, Padding unsichtbar uebermalt); im Fluss-Layout erzeugte es 32px-Weissbaender ueber dem Bild und unter der Box (gemessen) - hier genullt, Bild sitzt wieder buendig unter dem Header */ /* 16.10. R118c (Kunde, "viel Weissraum zwischen Headline und Breadcrumb"): Figma Mobile - Hero M Musik (8024:806) ist INHALTSGETRIEBEN - die Typo-Flaeche beginnt 11px unter der V-Spitze (Apex 267 bei 360w = 74.2vw, Flaeche y278) und der Hero endet mit dem Text; keine feste Leerzone. is-single-Slides sind position:relative -> auto-Hoehe traegt */
	.hero-slider.has-musik-m .hero-slider__slide.hero{align-items:flex-start;}
	.hero-slider.has-musik-m .hero__box{margin-top:calc(74.2vw + 7px);background:transparent;} /* Text beginnt an der V-Spitze; Flaeche (R102 rgba .8) entfaellt - Text steht auf Weiss */ /* R118c: +7px - Figma-Gesamtabstand Apex->Typo = 11 + 24 = 35px; Haus-Box-Padding 28px + 7 = 35 */
}

/* 19.10. R127: Twingle-Inline-Einbettung ([twingle project="..."]) - volle Breite,
   Starthoehe bis Twingles erste size-Meldung das Iframe exakt ausfaehrt (R76-Protokoll). */
.stm-twingle-embed{margin:var(--stm-sp-6,2rem) 0;}
.stm-twingle-embed__frame{display:block;width:100%;border:0;height:620px;}
.stm-twingle-embed__hinweis{color:#c00;font-style:italic;}
