/* Startseite: inline Sprachauswahl unter dem Hero ausblenden */
.inline-language-menu { display: none !important; }
/* Hero-Cards: eigener weisser Hintergrund */
.multimedia-header .header-teaser { background: #fff; }
/* Blauer Container: verschachtelte Gradient-Kaesten der Kind-Elemente vermeiden */
.bg--blue .frame.bg { background: transparent !important; }
/* Entdecken Sie die Vielfalt: Cards in 2er-Grid (erst ab Tablet, mobil 1 Spalte) */
@media (min-width: 768px) {
  #c-teaser-layout-10-c15826 .teaser__block { grid-template-columns: repeat(2, 1fr) !important; }
}
/* Footer: Breadcrumb-Trennlinie genauso lang wie die Linie unter den Social-Icons (80rem statt 40rem) */
.footer .footer__breadcrumb { width: 80rem; }
/* Hero-Cards: alle Bilder gleiche Hoehe -> Bildunterkante auf einer Linie */
.multimedia-header__teaser .header-teaser__image { aspect-ratio: 3 / 2; height: auto; object-fit: cover; }
/* Hero-Bild-Slider: ueberblendende Hintergrundebenen */
.multimedia-header__media .hero-slideshow { position: absolute; inset: 0; z-index: 0; overflow: hidden; }
.multimedia-header__media .hero-slide { position: absolute; inset: 0; background-size: cover; background-position: center; opacity: 0; transition: opacity 1.4s ease-in-out; }
.multimedia-header__media .hero-slide.is-active { opacity: 1; }
/* Hauptmenue: Full-Width-Mega-Menue auf Desktop (wie altes Template, neues Design) */
@media (min-width: 993px) {
  /* Toolbar darf das Mega-Panel nach unten ueberlaufen lassen */
  .toolbar__wrap { overflow: visible; }
  /* Item statisch -> das absolute Panel verankert an .toolbar__wrap (fixed) = volle Breite */
  .main-menu__item--has-sub { position: static; }

  .main-menu__sub {
    position: absolute; top: 100%; left: 0; right: 0;
    background: #fff;
    border-top: 1px solid rgba(0,0,0,.08);
    box-shadow: 0 .9rem 1.75rem rgba(0,0,0,.16);
    opacity: 0; visibility: hidden; transform: translateY(.3rem);
    transition: opacity .18s ease, transform .18s ease, visibility .18s ease;
    z-index: 200;
  }
  /* unsichtbare Bruecke ueberbrueckt den Spalt zwischen Item und Panel (Hover bleibt) */
  .main-menu__sub::before {
    content: ""; position: absolute; left: 0; right: 0; top: -2.5rem; height: 2.5rem;
  }
  .main-menu__item--has-sub:hover > .main-menu__sub,
  .main-menu__item--has-sub:focus-within > .main-menu__sub,
  .main-menu__sub:hover {
    opacity: 1; visibility: visible; transform: translateY(0);
  }

  /* Inhalt auf Content-Breite (1280px), Spalten als Gruppe horizontal zentriert
     (statt links gepackt) -> wenige Spalten stehen mittig, breite Menues fuellen die Breite */
  .main-menu__mega {
    max-width: 80rem; margin: 0 auto; padding: 1.75rem 2rem 2rem;
    display: flex; flex-wrap: wrap; justify-content: center; align-items: flex-start;
    gap: 1.5rem 2rem;
  }
  .main-menu__col {
    flex: 0 0 12.5rem; width: 12.5rem;
    break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid;
    margin-bottom: 0;
  }
  .main-menu__col-title {
    display: block; padding: .35rem 0; margin-bottom: .35rem;
    border-bottom: 1px solid rgba(0,0,0,.12);
    color: #4d4d4d; text-decoration: none; line-height: 1.25;
    font-size: .95rem; font-weight: 700;
  }
  /* Hover: Schrift NICHT rot -> nur blaue Linie unter dem Text (wie altes Template) */
  .main-menu__col-title:hover,
  .main-menu__col-title:focus,
  .main-menu__col-title--active {
    text-decoration: underline; text-decoration-color: var(--col-blue, #2276d0);
    text-decoration-thickness: 2px; text-underline-offset: .25em;
  }
  .main-menu__col-list { margin: 0; padding: 0; list-style: none; }
  .main-menu__sub-item { margin: 0; }
  .main-menu__sub-link {
    display: block; padding: .3rem 0; white-space: normal;
    color: #1a1a1a; text-decoration: none; line-height: 1.3;
    font-size: .9rem;
  }
  .main-menu__sub-link:hover,
  .main-menu__sub-link:focus,
  .main-menu__sub-link--active {
    color: #1a1a1a;
    text-decoration: underline; text-decoration-color: var(--col-blue, #2276d0);
    text-decoration-thickness: 2px; text-underline-offset: .2em;
  }
}
/* Mobile/Tablet: keine Hover-Dropdowns -> Sub-Menues ausblenden, neues Mobile-Nav bleibt unveraendert */
@media (max-width: 992px) {
  .main-menu__sub { display: none; }
}

/* ── Themen-Dropdown auf Unterseiten entfernen (2026-06-16) ──
   Die Haupt-Navigation (Mega-Menue Desktop / Drill-Down Mobil) deckt die
   Unterseiten-Navigation komplett ab -> der separate Themen-Dropdown oben auf
   Unterseiten (.sub-menu__bar / .sub-menu__nav-wrap) ist redundant. Nur
   ausgeblendet -> das Scroll-Verhalten der Toolbar (submenu.js) bleibt aktiv,
   voll reversibel. */
.sub-menu__bar,
.sub-menu__nav-wrap { display: none !important; }

/* ── Mobile Drill-Down-Navigation im Hamburger-Drawer (2026-06-16) ──
   Ersetzt auf Mobil die flache Top-Level-Liste durch eine Ebenen-Navigation
   (wie der entfernte Themen-Dropdown): direkt aus dem Burger in die
   Unterpunkte, ohne erst eine Seite zu oeffnen. DOM per dresden.js
   (ddBuildMobileNav) aus dem vorhandenen Menuebaum erzeugt. */
.dd-mnav { display: none; }
@media (max-width: 992px) {
  /* flache Original-Liste im Drawer verstecken, Drill-Down zeigen */
  .main-menu__wrap .main-menu { display: none; }
  .dd-mnav { display: block; }
  /* Suchleiste IMMER oben halten: das Template haengt .global-search UND
     .main-menu per JS bei JEDEM resize ans Ende des Drawers (auf Mobil feuert
     schon das Ein-/Ausblenden der Browser-URL-Leiste ein resize) -> ohne feste
     Reihenfolge rutscht die Suche unter die Menuelinks. Flexbox + order
     erzwingt die visuelle Reihenfolge unabhaengig von der DOM-Reihenfolge. */
  /* !important + --open: schlaegt das inline display:block, das menu.js beim
     Oeffnen setzt; nur im offenen Zustand, damit das Schliessen (display:none)
     weiter funktioniert. */
  .main-menu__wrap--open { display: flex !important; flex-direction: column; }
  .main-menu__wrap { padding-top: .75rem; }
  .main-menu__wrap .global-search { order: 0; margin-bottom: 1.25rem; }
  .main-menu__wrap .dd-mnav { order: 1; }
}
.dd-mnav__viewport {
  position: relative;
  overflow: hidden;
  transition: height .3s ease;
}
/* Panels schieben horizontal. Wichtig: deckender Hintergrund, sonst scheint
   das darunterliegende Eltern-Panel durch (Text-Overlap). */
.dd-mnav__panel {
  position: absolute; top: 0; left: 0; width: 100%;
  margin: 0; padding: 0; list-style: none;
  background: var(--col-black-05, #f4f4f4);
  transform: translateX(100%);
  transition: transform .3s ease;
}
.dd-mnav__panel.is-active { transform: translateX(0); }
.dd-mnav__panel.is-left { transform: translateX(-100%); }
.dd-mnav__item {
  list-style: none; margin: 0;
  border-bottom: 1px solid var(--col-black-20, rgba(0,0,0,.12));
}
.dd-mnav__item--back { border-bottom: 0; }
/* Eine Zeile: Label nimmt den Platz, Chevron sitzt rechts (kein Overlap) */
.dd-mnav__entry {
  display: flex; align-items: center; justify-content: space-between; gap: .75rem;
  width: 100%; padding: 1rem; box-sizing: border-box;
  border: 0; background: transparent; cursor: pointer;
  font-family: inherit; font-size: 1rem; font-weight: 700; line-height: 1.25;
  text-align: left; text-decoration: none; color: var(--col-text, #1a1a1a);
}
.dd-mnav__label { flex: 1 1 auto; min-width: 0; }
.dd-mnav__entry--drill > svg { flex: 0 0 auto; width: 9px; height: 13px; }
.dd-mnav__entry.dd-mnav__link--active { color: var(--col-blue, #2276d0); }
.dd-mnav__back {
  display: flex; align-items: center; gap: .55rem; width: 100%;
  padding: .85rem 1rem; border: 0; background: var(--col-black-10, #ececec);
  color: #4d4d4d; font-weight: 600; font-size: .95rem; cursor: pointer;
  font-family: inherit;
}
.dd-mnav__back svg { width: 9px; height: 13px; transform: rotate(180deg); }

/* Lange URLs/Woerter im RTE-/Textmedia-Text umbrechen. Migrierte Inhalte haben
   Links deren sichtbarer Text die volle URL ist (z.B. https://www.radeberg.de/inhalte/...)
   -> ohne Umbruch sprengen sie auf Mobil die Seitenbreite (horizontaler Scroll). */
.o-cms-content__body,
.textmedia__text,
.ce-bodytext,
.rte-content,
.o-cms-content__body a,
.textmedia__text a,
.ce-bodytext a { overflow-wrap: break-word; word-break: break-word; }

/* RTE-Headlines (.o-cms-content__headline): hatten margin-top:0 + margin-bottom:1em
   -> Headline klebte am vorherigen Block und stand riesig weit ueber ihrem eigenen
   Text. Wie alte Seite: etwas Luft nach oben, eng an den folgenden Text. */
.o-cms-content__headline {
  margin-top: 1.6rem;
  margin-bottom: 0.4em;
  line-height: 1.2;
}
/* erste Headline direkt unter der Seiten-H1 / oben im Inhaltsbereich nicht extra einruecken */
.o-cms-content__body > .frame:first-child .o-cms-content__headline:first-child {
  margin-top: 0;
}

/* ============================================================================
   Ansprechpartner-Cards (einheitlich, eine Card pro Person)
   Struktur wird per dresden.js (initContactCards) aus den getippten
   Kontaktbloecken erzeugt: Foto-Placeholder + Name/Funktion/Telefon/E-Mail.
   Rein praesentativ, voll reversibel. */
.dd-cp-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(440px, 1fr));
  gap: 1.4rem;
  width: 100%;
  max-width: 1056px;
  margin: 1.4rem auto 2rem;
  align-items: stretch;
}
/* Theme-Frame-Margins der Cards nullen: sonst fressen sie (ungleich: erste Card
   ohne margin-top) unterschiedlich viel der Reihenhoehe -> Cards ungleich hoch.
   Abstaende kommen ausschliesslich aus dem Grid-gap. */
.dd-cp-grid > .dd-cp {
  margin: 0 !important;
}
/* Eine Card: Foto fuellt linke Spalte ueber die volle Hoehe (Stil Freiberg) */
.dd-cp,
.frame.dd-cp {
  /* display:flex -> der Body fuellt die min-height auch bei EINZEL-Cards (ohne
     Grid, das sonst die definite Hoehe liefert). Sonst bleibt der Body auf
     Inhaltshoehe und unter dem Foto klafft ein weisser Streifen bis min-height. */
  display: flex;
  min-height: 162px;
  background: #fff;
  border: 1px solid #e7e7e7;
  border-radius: 12px;
  box-shadow: 0 3px 14px rgba(0, 0, 0, .09);
  padding: 0;
  margin: 0;
  overflow: hidden;
}
/* Body fuellt die (per Grid gleich hohe) Card -> Foto/Placeholder ohne weisse
   Luecke darunter, alle Cards einer Reihe optisch identisch. */
.dd-cp__body {
  display: flex;
  align-items: stretch;
  /* KEIN height:100% -> das wuerde gegen die (inhaltshohe) Elternhoehe aufloesen
     und das flex align-items:stretch der Card aushebeln. Ohne definite Hoehe
     streckt die Card (display:flex) den Body auf ihre min-height (162px). */
  flex: 1 1 auto;
  gap: 0;
  width: 100% !important;
  max-width: none !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* Foto / Placeholder: linke Spalte. order:-1 -> Foto immer links. Bild absolut ->
   diktiert NICHT die Kartenhoehe (Hochformat wuerde die Karte sonst sprengen);
   Hoehe kommt aus der Info-Spalte. (Beside-Wrapper entfernt das JS in ddCardifyBox.) */
.dd-cp__photo {
  order: -1;
  flex: 0 0 38%;
  max-width: 38%;
  align-self: stretch;
  position: relative;
  min-height: 150px;
  background: #d9d9d9;
  overflow: hidden;
}
.dd-cp__photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 20%;
  display: block;
}
/* Meinhold: einziges vorhandenes Bild ist ein Quer-/Hero-Foto (Gesicht oben
   rechts). Ausschnitt darauf ausrichten, damit es im Card-Slot nicht abschneidet. */
#c18670 .dd-cp__photo img { object-position: 56% 50%; }
/* Tom Heintze: Foto formatfuellend (kein weisser Rand seitlich), Ausschnitt
   etwas tiefer ausgerichtet, damit Kopf nicht oben abschneidet. Stabil ueber
   den Dateinamen adressiert (CE-uid unterscheidet sich lokal/Server). */
.dd-cp__photo img[src*="heintze"] { object-position: center 32%; }
.dd-cp__photo--ph {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 120px;
  background: #e7e7e7;
}
.dd-cp__photo--ph svg {
  width: 46%;
  max-width: 72px;
  height: auto;
  fill: none;
  stroke: #8a8a8a;
  stroke-width: 4;
  stroke-linecap: round;
}
/* Mehrere Personen aus EINEM Textblock: untereinander, volle Breite */
.dd-cp-stack { grid-template-columns: 1fr; }

/* Einzelne Karte in einer Bereichs-Gruppe (z.B. Frank Sipply / Geschaefts-
   fuehrung, Mattes / RKD, Thomas / Haustechnik): mittig statt full width. */
.dd-cp-grid:not(.dd-cp-stack):has(> .dd-cp--frame:only-child) {
  grid-template-columns: minmax(0, 500px);
  justify-content: center;
}
/* Abstand zwischen Namens-/Funktionsgruppe und den Kontaktzeilen */
.dd-cp__sep { display: block; height: .85rem; }
/* Info-Spalte (rechts) mit Innenabstand; kleinerer, luftiger Text */
.dd-cp__info {
  flex: 1 1 auto;
  min-width: 0;
  font-size: .9rem;
  line-height: 1.7;
  padding: 1.3rem 1.5rem;
}
.dd-cp__info > .o-cms-content__headline,
.dd-cp__info > h2,
.dd-cp__info > h3,
.dd-cp__info > h4 {
  margin: 0 0 .45rem;
  font-size: 1.05rem;
  line-height: 1.2;
  color: var(--col-red, #e60005);
}
.dd-cp__info p { margin: 0 0 .35rem; }
.dd-cp__info p:last-child { margin-bottom: 0; }
.dd-cp__info b,
.dd-cp__info strong { font-weight: 600; }
.dd-cp__info a { word-break: break-word; }
/* Inline-Cards (mehrere Personen aus EINEM Textblock) tragen das <p> direkt */
.dd-cp--inline .dd-cp__info > p { margin: 0; }

/* "E-Mail schreiben"-Button (aus E-Mail-Adresse erzeugt) sowie der
   "Auf Google Maps oeffnen"-Button der Adress-Cards (.dd-cp-btn) */
.dd-cp .dd-cp-mail,
.dd-cp .dd-cp-btn {
  display: inline-block;
  margin: .55rem 0 0;
  padding: .45rem 1.05rem;
  font-size: .9rem;
  line-height: 1.2;
  white-space: nowrap;
  word-break: normal;
}

/* calltoaction-Kontakt-Card: einzelne, mittig im Inhalt ausgerichtete Card
   (nicht mehr am Seitenrand klebend). */
.dd-cp--cta {
  max-width: 40rem;
  margin: 1.4rem auto 2rem;
}

@media (max-width: 560px) {
  /* Einspaltig + seitliches Padding, damit die Cards nicht am Rand kleben
     (die 440px-Mindestbreite des Desktop-Grids wuerde sonst ueberlaufen). */
  .dd-cp-grid {
    grid-template-columns: 1fr;
    padding-inline: 1rem;
    gap: 1rem;
    margin-block: 1rem 1.5rem;
  }
  /* Foto bleibt LINKS (kompaktes, quadratisches Bild) statt riesigem
     Vollbreite-Banner -> Portraet-Gesichter wirken nicht abgeschnitten,
     Platzhalter-Karten keine grossen leeren Flaechen. */
  .dd-cp__photo { flex: 0 0 40%; max-width: 40%; }
  .dd-cp__info { padding: 1rem 1.1rem; }
  /* Einzelkarte mobil wieder volle (gepaddete) Breite, nicht 500px-zentriert */
  .dd-cp-grid:not(.dd-cp-stack):has(> .dd-cp--frame:only-child) {
    grid-template-columns: 1fr;
  }
}

/* Mobile: Card-Slider (menu_sitemap layout 10) mit gleichem Rand-Spacing wie "Aktuelles" (32px) */
@media (max-width: 767px) {
  .teaser__slider .swiper__teaser { padding-inline: 2rem; }
  .teaser__slider .swiper-slide { max-width: 310px; width: 100%; }
  /* blaue Section: doppeltes Innen-Padding der gridelements-Box fuer den Slider aufheben */
  .frame.bg--blue .teaser__wrapper { margin-inline: -2rem; }
}

/* ----------------------------------------------------------------------------
   Inhalts-Tabellen mobil-optimiert (wie alte Seite drk_template2016 .c-table)
   Das neue Template wrappt RTE-Tabellen per JS in .contenttable__wrap, liefert
   aber KEIN responsives CSS dazu -> breite Tabellen laufen ueber den Rand und
   erzeugen horizontalen Seiten-Scroll. Alte Seite stapelte die Zellen unter
   45em. Hier nachgebaut: unter 768px wird jede Zeile/Zelle zum Block (Label
   ueber Wert), Kopfzeile ausgeblendet -> kein Overflow, lesbar wie frueher. */
@media (max-width: 767px) {
  /* Als echte Tabelle rendern (nicht stapeln), aber sauber: geteilte Rahmen per
     border-collapse -> KEINE komischen Luecken/Doppelrahmen zwischen den Zellen.
     Label-Spalte dezent grau + fett, Wert-Spalte normal. Zu breite Tabellen
     scrollen im Wrap horizontal statt die Seite zu sprengen. */
  .contenttable__wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .contenttable {
    display: table;
    width: 100%;
    /* Theme setzt table-layout:fixed -> mit width:1% wuerde die Label-Spalte auf
       ~0 schrumpfen und der Text ueberlappen. auto: Spalten nach Inhalt. */
    table-layout: auto !important;
    border-collapse: collapse;
    border: 1px solid #e0e0e0;
    background: #fff;
    margin: 0;
  }
  .contenttable tbody { display: table-row-group; }
  .contenttable thead { display: table-header-group; }
  .contenttable tr { display: table-row; }
  .contenttable td,
  .contenttable th {
    display: table-cell;
    border: 1px solid #e0e0e0;
    padding: .5rem .65rem;
    text-align: left;
    vertical-align: top;
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  /* Label-Spalte (1. von zweien): schmal, grau hinterlegt, fett */
  .contenttable tr td:first-child:not(:only-child) {
    font-weight: 600;
    color: #333;
    background: #f4f4f4;
    white-space: nowrap;
    width: 1%;
  }

  /* Adress-Tabelle (drk-addresses, .c-addresses__table): nutzt intern Floats +
     feste 50%-Spalten mit nicht umbrechenden Header-Boxen -> laeuft mobil ueber.
     Daher mobil komplett stapeln (Block), Floats aufheben -> passt in Viewport. */
  .c-addresses__table,
  .c-addresses__table tbody,
  .c-addresses__table tr,
  .c-addresses__table td,
  .c-addresses__table th {
    display: block;
    width: 100% !important;
    box-sizing: border-box;
    float: none !important;
  }
  .c-addresses__table td,
  .c-addresses__table th { padding: .35rem 0; vertical-align: top; }
  .c-addresses__table tr { border-bottom: 1px solid rgba(0,0,0,.1); padding: .5rem 0; }
  .c-addresses__table tr:last-child { border-bottom: 0; }
  .c-addresses__table .header,
  .c-addresses__table h4 { width: auto !important; }
  .c-addresses__table td *,
  .c-addresses__table th * { max-width: 100%; overflow-wrap: anywhere; word-break: break-word; }
}

/* ── Absatz- & Listen-Abstände an die alte Seite angleichen (2026-06-09) ──
   Aufeinanderfolgende Text-Absätze sind je ein eigenes .frame mit margin-block
   4rem (64px Desktop) -> Absatzabstand viel größer als früher (~1 Leerzeile).
   Nur den Abstand ZWISCHEN zwei Text-Elementen verkleinern; Abstand zu Bildern/
   Teasern/Slidern bleibt unverändert (4rem). margin-block:577px-Regel des
   Templates -> hier ab 577px überschreiben. Beide Seiten setzen, sonst greift
   margin-collapse den größeren (4rem) Wert. */
@media (min-width: 577px) {
  .frame-type-textmedia:has(+ .frame-type-textmedia),
  .frame-type-text:has(+ .frame-type-text) {
    margin-block-end: 1.6rem;
  }
  .frame-type-textmedia + .frame-type-textmedia,
  .frame-type-text + .frame-type-text {
    margin-block-start: 1.6rem;
  }
}

/* RTE-Listen (.list) liefen mit .3em/.3em Polster pro <li> sehr luftig (Item 42px
   statt ~30px) -> enger wie früher: alte Seite hat 0 Polster, Bullets nur über
   line-height verteilt. Horizontale Polster (Bullet-Einzug) bleiben. */
.textmedia__text .list > li,
.csc-textpic-text .list > li {
  padding-top: 0;
  padding-bottom: 0;
}

/* RTE-Listen klebten ohne Abstand am umgebenden Text (margin oben/unten = 0px).
   Alte Seite: ~17px oben / ~17–25px unten. -> Abstand zwischen Text und Liste
   und zwischen Liste und Folgetext wiederherstellen. Universell für alle Seiten,
   da alle Inhalts-Listen die Klasse .list tragen (im .textmedia__text/.csc-Text). */
.textmedia__text ul.list,
.textmedia__text ol.list,
.csc-textpic-text ul.list,
.csc-textpic-text ol.list {
  margin-block: 1.1rem;
}

/* ── Hero-/Stage-Bilder: einheitliche, kleinere Höhe (2026-06-10) ──
   Bisher = volle Bildhöhe (Breite × natürliches Seitenverhältnis) -> bis 797px,
   pro Seite unterschiedlich je nach Bild. Feste Höhe + object-fit:cover macht
   alle Seiten-Heros gleich hoch und deutlich kompakter. */
.frame-type-drk_template_stage .stage-image img {
  width: 100%;
  height: 560px;
  object-fit: cover;
  object-position: center;
  display: block;
}
@media (max-width: 767px) {
  .frame-type-drk_template_stage .stage-image img {
    height: 300px;
  }
}

/* ── Inhaltsbilder „neben Text" (beside) verkleinern (2026-06-10) ──
   Migration verlor die imagewidth (alle 0); neues Template teilt beside 50/50
   -> Bildspalte 640px (riesig). Alte Seite zeigte diese Bilder klein (~271px)
   neben dem Text. -> Bildspalte deckeln, Text bekommt den Rest. Nur beside-
   Layout (oben/unten-Bilder bleiben unverändert). Erst ab Tablet (>=768px);
   darunter stapelt das Template ohnehin (Bild voll). */
@media (min-width: 768px) {
  .textmedia--orientation-beside .textmedia__figure {
    flex: 0 0 auto;
    width: 320px;
    max-width: 38%;
  }
  .textmedia--orientation-beside .textmedia__figure img {
    width: 100%;
    height: auto;
  }
}

/* ── Doppelte Kurslisten-Überschrift entfernen (2026-06-10) ──
   Die Extension drk/courseview rendert in ihrem Fluid-Template eine fest
   eingebaute Überschrift <header class="header"><h3>Kurse & Termine</h3>,
   ZUSÄTZLICH zur Element-Überschrift (Feld header, z.B. „Aktuelle
   Kurstermine"). Das alte smediacourse-Plugin hatte diese Zeile nicht ->
   doppelte Headline. Plugin-interne Überschrift ausblenden (Element-
   Überschrift bleibt, vom Redakteur steuerbar). */
.tx-drk-courseview > header.header {
  display: none;
}

/* ── ke_search: schönere „Keine Ergebnisse"-Anzeige (2026-06-11) ──
   Standard war das nackte englische Label „No results found". Text jetzt
   deutsch + freundlich (im Plugin-Flexform noResultsText), hier als ruhige
   Info-Box mit DRK-rotem Akzent. */
.ke-no-results {
  max-width: 640px;
  margin: 1.5rem 0 2.5rem;
  padding: 1.4rem 1.75rem;
  background: #f7f7f7;
  border: 1px solid #e6e6e6;
  border-left: 4px solid var(--col-red, #e60005);
  border-radius: 6px;
}
.ke-no-results__title {
  margin: 0 0 0.35rem;
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--col-red, #e60005);
}
.ke-no-results__hint {
  margin: 0;
  color: #555;
  line-height: 1.55;
}

/* ═══════════════════════════════════════════════════════════════════════
   Sammel-Fixes 2026-06-15 (Seiten-Review)
   ═══════════════════════════════════════════════════════════════════════ */

/* C2 — Formular-Select „Am Besten erreichbar…": doppelte Beschriftung.
   Bei <select>-Feldern wird die Frage SOWOHL als verschachtelter Klartext-Block
   ALS AUCH als absolutes Floating-Label gerendert (gleicher Text) → sie
   überlappen sich. Den redundanten Klartext-Block ausblenden; das Floating-
   Label (konsistent zu allen anderen Feldern) bleibt sichtbar. Zielgenau via
   :has() nur in Spalten, die direkt ein <select> enthalten. */
.o-form__item:has(> select.o-form__field--select) > .o-form__item {
  display: none;
}

/* D1 — Stellenbörse: Job-Einträge als Karten statt nackter „fetter" Textlinks. */
.tx-drk-jobboard .c-teaser-list__item {
  list-style: none;
  margin: 0 0 1rem;
  padding: 1.25rem 1.6rem;
  background: #fff;
  border: 1px solid rgba(0, 0, 0, .1);
  border-radius: 12px;
  box-shadow: 0 3px 14px rgba(0, 0, 0, .07);
  transition: box-shadow .15s ease;
}
.tx-drk-jobboard .c-teaser-list__item:hover {
  box-shadow: 0 6px 20px rgba(0, 0, 0, .12);
}
.tx-drk-jobboard .c-teaser-list__item .c-teaser__title {
  margin-top: 0;
}
/* Bullets in Job-Beschreibungen wiederherstellen (globaler Reset
   ol,ul{list-style:none} entfernt sie; Plugin-<ul> tragen keine .list-Klasse). */
.tx-drk-jobboard ul:not([class]) {
  list-style: disc;
  margin: .4em 0 .8em;
  padding-left: 1.4em;
}
.tx-drk-jobboard ul:not([class]) > li {
  list-style: disc;
  margin-left: .2em;
}
/* Leerer Zustand ("Es gibt kein Ergebnis") als ruhige Info-Karte mit Icon
   (analog zur Kursliste-"Keine Ergebnisse"-Karte), statt nackter Textzeile. */
.tx-drk-jobboard > p:only-child {
  max-width: 40rem;
  margin: 1.6rem auto 0;
  padding: 1.6rem 1.8rem;
  text-align: center;
  background: #f7f7f7;
  border: 1px solid #e7e7e7;
  border-radius: 12px;
  color: var(--col-text-shaded, #555);
  line-height: 1.5; }
.tx-drk-jobboard > p:only-child::before {
  content: "";
  display: block;
  width: 40px; height: 40px;
  margin: 0 auto 0.7rem;
  background: no-repeat center / contain
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a0140f' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='7' width='19' height='13' rx='2'/%3E%3Cpath d='M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M2.5 12.5h19'/%3E%3C/svg%3E"); }

/* B2 — DRK-vor-Ort Suchergebnisse: Treffer als einheitliche Karten. */
ul.tx-supplyfinder-search__result-list {
  list-style: none;
  margin: 1.5rem 0;
  padding: 0;
  display: grid;
  gap: 1rem;
}
.tx-supplyfinder-search__result-list .drk-supply-search__result-item,
.tx-supplyfinder-search__result-list .drk-supply-search-search__result-item {
  list-style: none;
  margin: 0;
  padding: 1.1rem 1.35rem;
  background: #fff;
  border: 1px solid rgba(0, 0, 0, .1);
  border-radius: 12px;
  box-shadow: 0 3px 14px rgba(0, 0, 0, .07);
}
.tx-supplyfinder-search__result-list .drk-supply-search_distance {
  margin-bottom: .6rem;
}

/* ------------------------------------------------------------------ *
 * A — Unterseiten: Content-Breite vergroessern (wie altes Template).
 * Das neue Template zentriert Text/Inhalt sehr schmal: Textspalte 640px
 * (.textmedia__text), Block 960px (.textmedia), generische Frames 640px
 * (main > :where(*)) -> viel leerer Rand. Auf Unterseiten wieder breiter,
 * naeher an der alten Seite (~1200px Wrapper). Nur `width` wird gesetzt;
 * die vom Template gesetzte `max-width: calc(client-vw - 2*pad)` deckelt
 * weiterhin auf schmalen Screens -> selbstbegrenzend, kein Overflow.
 * Scope ueber :has(.breadcrumb): nur echte Unterseiten, NICHT die Startseite
 * (gleiche body-/pagets-Klassen, aber Start hat keine Breadcrumb).
 * Tuning an EINER Stelle ueber die beiden Variablen.
 * ------------------------------------------------------------------ */
:root {
  --dd-sub-text: 48rem;  /* 768px — Lesetext (alt ~677px), war 640px */
  --dd-sub-wide: 66rem;  /* 1056px — Bloecke/Tabellen/Kursliste, war 960/640px */
}
@media (min-width: 64em) {
  /* Textmedia-Block: 960 -> wide */
  .body__wrapper:has(.breadcrumb) .textmedia { width: var(--dd-sub-wide); }
  /* Lesetext + Ueberschriften + Bildunterschrift: 640 -> text */
  .body__wrapper:has(.breadcrumb) .textmedia__text,
  .body__wrapper:has(.breadcrumb) .textmedia--orientation-above .textmedia__caption,
  .body__wrapper:has(.breadcrumb) .textmedia--orientation-below .textmedia__caption { width: var(--dd-sub-text); }
  /* Schmale Inhalts-Plugins (z.B. Kurstermin-Liste, die per Default nur 640px
     breit ist) auf Content-Breite ziehen. WICHTIG: gezielt nur diese Frames –
     NICHT der generische `main > *`-Selektor, der sonst auch Full-Bleed-Frames
     (Hero/Stage, CallToAction) auf 1056px zusammenstaucht. */
  .body__wrapper:has(.breadcrumb) .frame-type-drkcourseview_courseview { width: var(--dd-sub-wide); margin-inline: auto; }
}

/* Mobil: kleineres seitliches Content-Padding. Das Template setzt ueber
   $side-padding (32px) auf jeder Seite -> auf schmalen Screens verschenkt der
   Lesetext viel Breite. Hier auf ~16px/Seite reduziert. Nur Content
   (Unterseiten via :has(.breadcrumb), Textmedia) -> Full-Bleed-Elemente wie
   CallToAction bleiben unberuehrt. Greift nur, solange das calc() bindet
   (Viewport < ~700px), darueber ist die Regel ohne Wirkung. */
@media (max-width: 767px) {
  .body__wrapper:has(.breadcrumb) .textmedia,
  .body__wrapper:has(.breadcrumb) .textmedia__text {
    max-width: calc(var(--client-vw, 100vw) - 2rem); /* 16px je Seite statt 32px */
  }
}

/* -------------------------------------------------------------------------
   Gridelements-Container (frame-type-container_page_layout_100) rendern ihre
   Ueberschrift als blanke <header><h2 class=""> OHNE die Theme-Klasse .header.
   Regulaere Element-Ueberschriften (.header) sind zentriert, diese fielen auf
   browser-default linksbuendig zurueck und passten nicht ins Layout
   (geschichte, seg-sanitaet, pflegedienst-langebrueck/-hellerau u.a.).
   Hier wie die regulaeren Ueberschriften zentrieren. Scoped auf den
   Container-Frame-Typ, damit nur diese Header betroffen sind.
   ------------------------------------------------------------------------- */
.frame-type-container_page_layout_100 > header { text-align: center; }

/* (Hinweis: die fruehere doppelte .o-cms-content__headline-Regel mit margin-top:0
   wurde entfernt - sie ueberschrieb die Regel oben (Zeile ~174) und nahm den
   Abstand NACH OBEN weg -> Ueberschrift klebte am vorherigen Text ("keine
   Absaetze", z.B. schulsanitaetsdienst). Jetzt gilt nur noch die obige Regel.) */

/* -------------------------------------------------------------------------
   Klassenlose RTE-Ueberschriften (<h2>/<h3> ohne Theme-Klasse) aus migriertem
   Content bekommen vom Theme margin: 48.8px (3.05rem) oben UND unten -> wirkt
   sehr lose ("Spacing komisch", z.B. blut-spenden "Wer darf spenden?").
   Auf ein konsistentes Mass bringen (Abstand oben moderat, unten knapp am Text).
   Nur klassenlose Headings -> gestylte (.o-section__headline, .header__header,
   .o-cms-content__headline) bleiben unberuehrt. */
.textmedia__text > h2:not([class]),
.textmedia__text > h3:not([class]),
.textmedia__text > h4:not([class]) { margin-top: 1.6rem; margin-bottom: 0.7rem; }

/* -------------------------------------------------------------------------
   Karten-Scans in Akkordeons (o-accordion, z.B. registrierkarten) rendern
   sonst in voller Spaltenbreite (bis ~2000px hoch) -> man muss endlos scrollen.
   Auf sinnvolle Hoehe begrenzen; bleiben lesbar & anklickbar. NUR Einzel-Scans
   (kein Bilderkarussell/Swiper) -> Galerien (z.B. kita-radeberg) unberuehrt. */
details .o-accordion__content .textmedia:not(:has(.textmedia__gallery)) .textmedia__image { max-height: 70vh; width: auto; max-width: 100%; }

/* -------------------------------------------------------------------------
   Akkordeon-Inhalt: NICHT auf die festen Unterseiten-Content-Breiten zwingen.
   Die Breiten-Regel oben (.body__wrapper:has(.breadcrumb) .textmedia -> 1056px,
   .textmedia__text -> 768px) greift sonst auch INNERHALB von <details>, wo der
   o-accordion__content-Kasten nur ~640px breit ist -> Text/Textmedia laufen
   rechts ueber den Rahmen hinaus (kita-radeberg, registrierkarten u.a.).
   Hier hoehere Spezifitaet -> zurueck auf auto, passt sich dem Kasten an.
   ------------------------------------------------------------------------- */
.body__wrapper:has(.breadcrumb) details .o-accordion__content .textmedia,
.body__wrapper:has(.breadcrumb) details .o-accordion__content .textmedia__text {
  width: auto;
}

/* -------------------------------------------------------------------------
   Ausbildung in der Altenhilfe: das bundesweite Verzeichnis der DRK-Alten-
   pflegeschulen (CE 7877) war eine lange <br>-Textwueste mit unregelmaessigen
   Luecken. Inhalt unveraendert (alle Mails/Telefon/Links 1:1), aber als
   Karten-Raster pro Schule, gruppiert nach Bundesland. */
.dd-schools__state {
  margin: 2.2rem 0 1rem;
  padding-bottom: .35rem;
  border-bottom: 2px solid #e60005;
  color: #1a1a1a;
}
.dd-schools__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1rem;
}
.dd-school {
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid #e7e7e7;
  border-radius: 12px;
  padding: 1.1rem 1.2rem;
  box-shadow: 0 3px 14px rgba(0,0,0,.09);
}
.dd-school > p { margin: 0; }
.dd-school__name { font-weight: 700; color: #1a1a1a; line-height: 1.3; }
.dd-school__addr { margin-top: .35rem !important; color: #555; font-size: .94em; line-height: 1.4; }
.dd-school__contact { margin-top: .7rem !important; padding-top: .7rem; border-top: 1px solid #f0f0f0; font-size: .94em; line-height: 1.5; }
.dd-school__contact a { word-break: break-word; }
.dd-schools__footer { margin-top: 2rem; color: #555; font-size: .94em; }

/* -------------------------------------------------------------------------
   Sektions-Überschriften einheitlich zentrieren: die Header-CEs (.header__header)
   sind themeweit zentriert (.header{text-align:center}), die RTE-Inline-Headlines
   (.o-cms-content__headline) standen linksbündig -> Mix (z.B. kita-radebeul:
   "Krabbelgruppe" zentriert, "Öffnungszeiten"/"Lage" links). Auf zentriert
   angleichen. Nur im Fließtext (.textmedia__text) -> Card-Namen
   (.dd-cp__info .o-cms-content__headline) bleiben linksbündig. */
.textmedia__text .o-cms-content__headline { text-align: center; }

/* -------------------------------------------------------------------------
   Akkordeon-Galerie auf Mobil: .textmedia__gallery hat margin-left/right:-32px
   (Full-Bleed-Effekt) -> im abgerundeten Akkordeon-Kasten lief der Bild-Slider
   ~10px über den rechten/linken Rand (kita-radeberg "Kleingärtchen"/"Hühner").
   Negativ-Margins im Akkordeon neutralisieren -> Slider bleibt im Kasten. */
details .o-accordion__content .textmedia__gallery { margin-left: 0; margin-right: 0; }

/* -------------------------------------------------------------------------
   Einzelne Intro-/Caption-Texte zentrieren (passten linksbündig optisch nicht):
   - erste-hilfe (CE 95): "Navigieren Sie sich hier durch die Erste Hilfe Online"
   - erste-hilfe-online (CE 15523): PC-Banner-Download-Caption */
#c95 .textmedia__text,
#c95 .textmedia__text p,
#c15523 .textmedia__text { text-align: center; }

/* -------------------------------------------------------------------------
   Erste-Hilfe Step-Bilder als saubere 3er-Reihe statt rechts-umflossenem Zickzack
   (blutungen c3560/61/62, stichverletzungen c16703/16701/16702 — je 1 Bild,
   imageorient=25/"beside" mit leerem Textteil). Auf Mobil untereinander. */
#c3560, #c3561, #c3562,
#c16701, #c16702, #c16703 {
  display: inline-block; width: 32%; max-width: 336px; vertical-align: top; margin: 0 0 1rem; }
#c3561, #c16701 { margin-left: 1%; margin-right: 1%; }
/* Reihe als Gruppe auf die zentrierte Content-Breite (~1040px) ausrichten statt
   am linken Rand des vollbreiten <main> zu kleben (Wunsch "max-width fuer den
   Page-Container"). Auf schmalen Viewports faellt das Margin auf 0 zurueck. */
#c3560, #c16703 { margin-left: max(0px, calc((100% - 1040px) / 2)); }
#c3560 .textmedia, #c3561 .textmedia, #c3562 .textmedia,
#c16701 .textmedia, #c16702 .textmedia, #c16703 .textmedia,
#c3560 .textmedia__container, #c3561 .textmedia__container, #c3562 .textmedia__container,
#c16701 .textmedia__container, #c16702 .textmedia__container, #c16703 .textmedia__container { display: block; width: 100%; }
/* leerer Textteil dieser Bild-CEs (vom Breadcrumb-Breitenregel auf 768px gezwungen) raus */
#c3560 .textmedia__text, #c3561 .textmedia__text, #c3562 .textmedia__text,
#c16701 .textmedia__text, #c16702 .textmedia__text, #c16703 .textmedia__text { display: none; }
#c3560 .textmedia__figure, #c3561 .textmedia__figure, #c3562 .textmedia__figure,
#c16701 .textmedia__figure, #c16702 .textmedia__figure, #c16703 .textmedia__figure { float: none; width: 100%; margin: 0; }
#c3560 .textmedia__image, #c3561 .textmedia__image, #c3562 .textmedia__image,
#c16701 .textmedia__image, #c16702 .textmedia__image, #c16703 .textmedia__image { width: 100%; height: auto; max-height: none; }
/* Bildunterschrift (Foto-Credit) + ihre Trennlinie nur so breit wie das Bild.
   Theme + Breadcrumb-Regel (oben, .textmedia--orientation-above .textmedia__caption)
   zwingen sie sonst auf 40rem/768px -> Linie ragt weit ueber das ~336px-Bild hinaus. */
#c3560 .textmedia__caption, #c3561 .textmedia__caption, #c3562 .textmedia__caption,
#c16701 .textmedia__caption, #c16702 .textmedia__caption, #c16703 .textmedia__caption {
  width: 100%; max-width: none; margin-left: 0; margin-right: 0; }
@media (max-width: 768px) {
  #c3560, #c3561, #c3562, #c16701, #c16702, #c16703 { display: block; width: 100%; max-width: none; margin: 0 0 1rem; }
}

/* -------------------------------------------------------------------------
   Erste-Hilfe bewusstlosigkeit: Stabile-Seitenlage-Fotos liefen in voller
   Inhaltsbreite (~960px) und sind Hochformat (sehr hoch ~1075px) -> dominierten
   das Layout. Auf moderate Hoehe begrenzen + zentrieren -> kompakter, ruhiger. */
#c3551 .textmedia__figure, #c3548 .textmedia__figure { max-width: 60%; margin-left: auto; margin-right: auto; }
#c3551 .textmedia__image, #c3548 .textmedia__image { max-height: 520px; width: auto; margin-left: auto; margin-right: auto; }

/* -------------------------------------------------------------------------
   Kursliste (drk_courseview) IN einem Akkordeon (rotkreuzkurs-erste-hilfe):
   Die Breadcrumb-Regel oben zwingt den Courseview-Frame auf 1056px – im nur
   ~596px breiten Akkordeon-Kasten lief er dadurch rechts heraus, der
   float:right-"anmelden"-Button (und langer Text) landete ausserhalb des
   Rahmens. Im Akkordeon den Frame auf die Kastenbreite begrenzen. */
.o-accordion__content .frame-type-drkcourseview_courseview {
  width: auto !important; margin-inline: 0 !important; }
.o-accordion__content .tx-drk-courseview,
.o-accordion__content .c-courseview__list,
.o-accordion__content .c-courseview__list-item { max-width: 100%; }
/* Mobil: float:right-"anmelden"-Button (steckt im Markup IN der Kursnummer-Zeile)
   ganz ans Ende des Kurs-Eintrags (unter Adresse/"Plaetze vorhanden") und full-width.
   Da der Button nicht als eigenes li-Kind vorliegt, per absolutem Positionieren aus
   dem Fluss nehmen; das li reserviert unten Platz. Hoehere Spezifitaet noetig, weil
   die Vendor-Datei (drk-courseview/styles.css) NACH dresden.css laedt. */
@media (max-width: 768px) {
  .tx-drk-courseview .c-courseview__list-item { position: relative; padding-bottom: 4rem; }
  .tx-drk-courseview .c-courseview__course-register {
    float: none; display: block; box-sizing: border-box;
    position: absolute; left: 0; right: 0; bottom: 1.1rem;
    width: 100%; margin: 0; text-align: center; }
}

/* -------------------------------------------------------------------------
   Kursliste "Keine Ergebnisse gefunden"-Hinweis: stand linksbuendig am Rand
   des 1056px-Frames (wirkte verloren/zu weit links). Als zentrierte, ruhige
   Info-Karte mit Icon darstellen – konsistent auf allen Kurs-Detailseiten
   ohne Termine (eh-am-kind, fit-in-eh, eh-outdoor, am-hund ...). */
.tx-drk-courseview:not(:has(.c-courseview__list)) > p {
  max-width: 40rem;
  margin: 1.6rem auto 0;
  padding: 1.6rem 1.8rem;
  text-align: center;
  background: #f7f7f7;
  border: 1px solid #e7e7e7;
  border-radius: 12px;
  color: var(--col-text-shaded, #555);
  line-height: 1.5; }
.tx-drk-courseview:not(:has(.c-courseview__list)) > p::before {
  content: "";
  display: block;
  width: 40px; height: 40px;
  margin: 0 auto 0.7rem;
  background: no-repeat center / contain
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a0140f' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3Ccircle cx='12' cy='15.5' r='3.2'/%3E%3Cpath d='M14.3 17.8 16 19.5'/%3E%3C/svg%3E"); }

/* -------------------------------------------------------------------------
   "Fette Links": migrierter RTE-Content packt Anmelde-/Aktionslinks teils in
   eine ganze H2/H3-Ueberschrift (`<h2 class="o-section__headline"><a>…</a></h2>`)
   -> riesig + fett. Wenn eine Ueberschrift NUR aus einem Link besteht, als
   normalen, dezenten Link darstellen (kleiner, weniger fett, linksbuendig). */
.textmedia__text :is(h1,h2,h3,h4,h5,h6):is(.o-section__headline,.o-cms-content__headline):has(> a:only-child) {
  font-size: 1.15rem;
  font-weight: 500;
  line-height: 1.45;
  margin: 0.9rem 0;
  text-align: left; }

/* -------------------------------------------------------------------------
   Akkordeon-Dropdowns mit Kursliste/"Keine Ergebnisse"-Karte: Inhalt klebte
   unten am Rahmen (o-accordion__content padding-bottom:0). Etwas Luft geben. */
.o-accordion__content:has(.tx-drk-courseview) { padding-bottom: 1.5rem; }

/* -------------------------------------------------------------------------
   fortbildung-sanitaetsdienst (#c18433): klassenloser RTE-Intro (fetter Lead +
   <br>-Absaetze) wirkte oben gedraengt. Zeilenabstand etwas oeffnen, fetten
   Lead-Satz als eigenen Block mit Abstand darunter. */
/* Generisch fuer reine Text-CEs (text-only): Zeilenabstand etwas oeffnen und einen
   fetten Lead-Satz als eigenen Block mit Abstand darunter (fortbildung-sanitaetsdienst,
   blut-spenden u.a. — wiederkehrendes Migrations-Muster). */
.textmedia--text-only .textmedia__text { line-height: 1.6; }
.textmedia--text-only .textmedia__text > b:first-child { display: block; margin-bottom: 0.8rem; }

/* -------------------------------------------------------------------------
   Suche (ke_search): Ergebnisliste im Karten-Stil (wie .dd-cp) statt nackter
   Textliste. */
#kesearch_results .results-entry {
  background: #fff;
  border: 1px solid #e7e7e7;
  border-radius: 12px;
  box-shadow: 0 3px 14px rgba(0,0,0,.09);
  padding: 1.1rem 1.3rem;
  margin-bottom: 1rem; }
#kesearch_results .results-entry .gridblock__wrapper { margin: 0; }

/* -------------------------------------------------------------------------
   Suche (ke_search) Layout-Politur.
   1) Such-Section weniger seitlich einruecken (Desktop breiter, Mobil 16px). */
.tx-kesearch-pi1.med-content-width { max-width: 1056px; }
@media (max-width: 767px) {
  .tx-kesearch-pi1.med-content-width { max-width: calc(100% - 2rem); }
}
/* 2) Suchformular: Eingabe lang + Button rechts daneben (Desktop). */
.c-kesearch-form fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
.c-kesearch-form .o-form__item-group { display: flex; align-items: stretch; gap: 0.6rem; max-width: none; }
.c-kesearch-form .o-form__item { flex: 0 0 auto; width: auto; max-width: none; margin: 0; padding: 0; }
.c-kesearch-form .o-form__item:has(.kesearchbox) { flex: 1 1 auto; min-width: 0; }
.c-kesearch-form .kesearchbox,
.c-kesearch-form #ke_search_sword,
.c-kesearch-form .o-form__field--text { width: 100%; max-width: none; }
.c-kesearch-form input[type="submit"] { width: auto; white-space: nowrap; }
/* Desktop: Formular mittig (Heading/Intro/Ergebnisse sind zentriert -> Formular passte
   als einziges Element links nicht dazu). */
@media (min-width: 769px) {
  .tx-kesearch-pi1 form.c-kesearch-form { max-width: 40rem; margin-left: auto; margin-right: auto; }
}
/* Mobil: Eingabe volle Breite (Zeile 1), "Suchen" rechts darunter (Zeile 2). */
@media (max-width: 768px) {
  /* Formular volle Breite (Theme cappt .o-form auf ~326px -> rechts blieb Luft). */
  .c-kesearch-form { max-width: 100%; }
  .c-kesearch-form .o-form__item-group { flex-wrap: wrap; }
  .c-kesearch-form .o-form__item:has(.kesearchbox) { flex: 1 1 100%; }
  .c-kesearch-form .o-form__item:not(:has(.kesearchbox)) { flex: 1 1 100%; text-align: right; }
}
/* 3) Ergebniszaehler clean: redundantes "X Ergebnisse:" entfernen; Zaehlzeile
   links, Pagination rechts (mobil untereinander). */
.tx-kesearch-pi1 #kesearch_num_results { display: none; }
.tx-kesearch-pi1 .pages_total { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.5rem; }
.tx-kesearch-pi1 .result_txt { color: var(--col-text-shaded, #666); font-size: 0.95rem; }
.tx-kesearch-pi1 .kesearch_pagebrowser { margin: 0; }

/* Adressen-Suche (drkaddresses #adr-searchform_big) GENAU wie die ke_search-Suche:
   Eingabe lang + Button rechts daneben (Desktop, mittig), mobil Eingabe full width,
   Button rechts darunter. */
#adr-searchform_big fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
#adr-searchform_big .o-form__item-group { display: flex; align-items: stretch; gap: 0.6rem; max-width: none; }
#adr-searchform_big .o-form__item { flex: 0 0 auto; width: auto; max-width: none; margin: 0; padding: 0; }
#adr-searchform_big .o-form__item:has(.o-form__field--text) { flex: 1 1 auto; min-width: 0; }
#adr-searchform_big .o-form__field--text { width: 100%; max-width: none; }
#adr-searchform_big input[type="submit"] { width: auto; white-space: nowrap; }
@media (min-width: 769px) {
  #adr-searchform_big { max-width: 40rem; margin-left: auto; margin-right: auto; }
}
@media (max-width: 768px) {
  #adr-searchform_big { max-width: 100%; }
  #adr-searchform_big .o-form__item-group { flex-wrap: wrap; }
  #adr-searchform_big .o-form__item:has(.o-form__field--text) { flex: 1 1 100%; }
  #adr-searchform_big .o-form__item:not(:has(.o-form__field--text)) { flex: 1 1 100%; text-align: right; }
}

/* -------------------------------------------------------------------------
   Lange Ueberschriftswoerter (z.B. "Rettungsschwimmer*innen") liefen auf Mobil
   rechts aus dem Viewport -> horizontaler Overflow der ganzen Seite. Umbrechen.
   Kein `hyphens: auto` (erzeugte haessliche Silbentrennung mitten im Wort, z.B.
   "Spat-zennest"): overflow-wrap: break-word laesst ganze Woerter in die naechste
   Zeile springen und bricht nur ein einzelnes zu langes Wort notfalls hart um. */
.header__header,
.o-cms-content__headline,
.o-section__headline { overflow-wrap: break-word; hyphens: manual; }

/* Hero-Ueberschrift auf schmalen Screens fluid verkleinern: sehr lange deutsche
   Woerter (z.B. "Notfallversorgung", "Bevoelkerungsschutz") sind bei der grossen
   Hero-Schrift breiter als die Handy-Spalte und wurden sonst mitten im Wort hart
   umgebrochen ("Notfallversorgun/g"). Fluid-Groesse laesst sie als ganzes Wort in
   eine Zeile passen; Desktop-Groesse (48.8px) bleibt unveraendert. */
@media (max-width: 575.98px) {
  .header__header { font-size: clamp(1.5rem, 8vw, 2.25rem); line-height: 1.15; }
}

/* -------------------------------------------------------------------------
   Adressen-Seiten (drkaddresses A-Z-Tabelle, .tx-drk-addresses): die globale
   Teaser-Sidebar (.teaser__wrapper) liegt full-width auf gleicher Hoehe wie die
   breite Tabelle und ueberlappt sie ("Karten daneben"). Auf diesen Seiten die
   ueberlappende Sidebar ausblenden, Tabelle nutzt die volle Inhaltsbreite. */
.body__wrapper:has(.tx-drk-addresses .c-addresses__table) .teaser__wrapper,
.body__wrapper:has(.tx-drk-addresses .c-addresses__table) .teaser__slider { display: none; }
.body__wrapper:has(.tx-drk-addresses .c-addresses__table) .tx-drk-addresses,
.body__wrapper:has(.tx-drk-addresses .c-addresses__table) .c-addresses { width: 100%; max-width: 100%; }

/* =====================================================================
   Cookie-Consent (cf_cookiemanager): Button-Design wie DRK Freiberg.
   cf-Default sind flache graue 4px-Buttons; Freiberg nutzt Pill-Buttons:
   Primaer = blauer Farbverlauf + weiss, Sekundaer/Tertiaer = blaue Outline.
   Scope strikt auf die Cookie-Modals, daher !important gegen cf-Default.
   ===================================================================== */
/* Schliessen-Button (#s-c-bn) NICHT als Pill stylen -> bleibt graues Quadrat
   wie bei Freiberg (cf-Default). Daher per :not() ausgenommen. */
#cm .c-bn,
#s-inr .c-bn:not(#s-c-bn) {
  border-radius: 999px !important;
  background: transparent !important;
  color: #2276d0 !important;
  border: 2px solid #2276d0 !important;
  font-weight: 700 !important;
  /* etwas schlanker (wie Freiberg, ~39px hoch statt ~46px) */
  padding: .7em 1.4em !important;
  /* Scale-Animation wie Freiberg (transform 0.4s ease-in-out) */
  transition: transform .4s ease-in-out, background-color .25s ease, color .25s ease !important;
}
/* Primaerbutton ("Alles akzeptieren") = gefuellter blauer Verlauf, weiss */
#cm #c-bns button:first-child,
#s-inr #s-bns button:first-child {
  background: linear-gradient(135deg, #16335f 0%, #2570c4 100%) !important;
  color: #fff !important;
  border: 2px solid transparent !important;
}
/* Hover: dezenter Fill + Vergroesserung (scale 1.05) wie Freiberg */
#cm .c-bn:hover,
#s-inr .c-bn:not(#s-c-bn):hover {
  background: rgba(34, 118, 208, .08) !important;
  transform: scale(1.05) !important;
}
#cm #c-bns button:first-child:hover,
#s-inr #s-bns button:first-child:hover {
  background: linear-gradient(135deg, #12274a 0%, #1f63ad 100%) !important;
  color: #fff !important;
}

/* === Foerderpartner-Section (Startseite, per dresden.js unten in #main injiziert) === */
.dd-foerder {
  /* wie eine normale Theme-Frame volle Breite; Theme-Default fuer nackte
     <section> (max 640px, margin 0 320px 128px) ueberschreiben */
  width: auto !important;
  max-width: none !important;
  margin: 0 !important;
  padding: 3rem 1rem 3.5rem;
  background: #fff;
  border-top: 1px solid #ececec;
}
.dd-foerder__inner {
  max-width: 1170px;
  margin: 0 auto;
}
.dd-foerder__title {
  /* Weight/Font erbt von .o-cms-content__headline; Groesse wie Section drueber
     (~39px), responsiv nach unten skaliert */
  text-align: center;
  margin: 0 0 .6rem;
  color: #1a1a1a;
  font-size: clamp(1.75rem, 5vw, 2.44rem);
  line-height: 1.2;
}
.dd-foerder__sub {
  /* Groesse wie Body-Text der Section drueber (.textmedia__text, 20px/1.6) */
  text-align: center;
  margin: 0 auto 2rem;
  max-width: 720px;
  color: #1a1a1a;
  font-size: clamp(1.0625rem, 3.2vw, 1.25rem);
  line-height: 1.6;
}
.dd-foerder__grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 1.75rem;
}
.dd-foerder__item {
  flex: 0 0 auto;
  width: 210px;
  height: 120px;
  display: flex;
  align-items: center;      /* Logo vertikal mittig */
  justify-content: center;  /* Logo horizontal mittig */
  padding: 1.1rem 1.25rem;
  background: #fff;
  border: none;
  border-radius: 8px;
  transition: transform .3s ease, box-shadow .3s ease;
}
.dd-foerder__item:hover,
.dd-foerder__item:focus-visible {
  transform: scale(1.08);
  outline: none;
}
.dd-foerder__item img {
  display: block;
  margin: auto;
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
}
@media (max-width: 575.98px) {
  .dd-foerder { padding: 2.25rem 1rem 2.5rem; }
  .dd-foerder__grid { gap: 1rem; }
  .dd-foerder__item { width: 45%; height: 96px; padding: .85rem; }
}

/* === Spenden-CTA-Band (Startseite, unter Foerderpartner, wie Freiberg) === */
.dd-spenden {
  /* Theme-Default fuer nackte <section> ueberschreiben -> volle Breite */
  width: auto !important;
  max-width: none !important;
  margin: 0 !important;
  padding: 3.5rem 1rem 4rem;
  background: linear-gradient(135deg, #e60005 0%, #c10008 100%);
  color: #fff;
  text-align: center;
}
.dd-spenden__inner {
  max-width: 1170px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 2.5rem;
}
/* auf Desktop mehr Abstand zwischen Text-Spalte und Karte */
@media (min-width: 768px) {
  .dd-spenden__inner { gap: 5rem; }
}
.dd-spenden__main {
  flex: 1 1 460px;
  max-width: 620px;
  text-align: center;
}
.dd-spenden__illu {
  display: block;
  width: 100%;
  max-width: 420px;
  height: auto;
  margin: 0 auto 1.25rem;
}
.dd-spenden__title {
  color: #fff;
  margin: 0 0 1rem;
  font-size: clamp(1.75rem, 5vw, 2.44rem);
  line-height: 1.2;
}
.dd-spenden__text {
  color: #fff;
  margin: 0 auto 1.75rem;
  font-size: clamp(1.0625rem, 3.2vw, 1.25rem);
  line-height: 1.6;
}
.dd-spenden__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  justify-content: center;
  margin: 0;
}
/* weisse Spendenkonto-Karte (rechts) */
.dd-spenden__card {
  flex: 0 0 auto;
  width: 380px;
  max-width: 100%;
  background: #fff;
  border-radius: 12px;
  padding: 1.75rem 1.75rem;
  text-align: center;
  color: #333;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .15);
}
/* IBAN/BIC nie umbrechen */
.dd-spenden__acc { white-space: nowrap; }
.dd-spenden__card p { margin: 0 0 1rem; line-height: 1.5; }
.dd-spenden__card p:last-child { margin-bottom: 0; }
.dd-spenden__card-title {
  margin: 0 0 1.1rem;
  color: #e60005;
  font-size: 1.35rem;
  font-weight: 700;
}
.dd-spenden__card strong { font-weight: 700; }
.dd-spenden__card-note {
  font-size: .9rem;
  color: #666;
}
.dd-spenden__btn {
  display: inline-block;
  padding: .7rem 1.9rem;
  border-radius: 2rem;
  border: 2px solid #fff;
  font-weight: 700;
  font-size: 1.05rem;
  line-height: 1.3;
  text-decoration: none;
  transition: background-color .2s ease, color .2s ease;
}
.dd-spenden__btn--primary {
  background: #fff;
  color: #e60005;
}
.dd-spenden__btn--primary:hover,
.dd-spenden__btn--primary:focus-visible {
  background: rgba(255, 255, 255, .85);
  color: #e60005;
}
.dd-spenden__btn--secondary {
  background: transparent;
  color: #fff;
}
.dd-spenden__btn--secondary:hover,
.dd-spenden__btn--secondary:focus-visible {
  background: #fff;
  color: #e60005;
}
@media (max-width: 575.98px) {
  .dd-spenden { padding: 2.5rem 1rem 3rem; }
  .dd-spenden__btn { padding: .65rem 1.5rem; font-size: 1rem; }
}
