/* ==========================================================================
   SCHAMLOS Design-System
   Farben, Fonts und Bausteine aus den Mockups (v6 / v15)
   ========================================================================== */

/* --------------------------------------------------------------------------
   Lokal gehostete Schriften (DSGVO)
   --------------------------------------------------------------------------
   Ersetzen das frühere <link> auf fonts.googleapis.com in
   schamlos-event-design.php (Handle sed-google-fonts) und in
   templates/maintenance-page.php. Beide luden die Schriften ungated VOR
   jeder Consent-Entscheidung und übertrugen damit die IP jedes Besuchers an
   Google. Lokal gehostet entfällt das komplett: keine Einwilligung nötig,
   kein Content-Blocker, kein FOUT durch eine Blockade.

   Es sind exakt die Schnitte, die vorher auch von Google angefordert wurden
   (Anton 400; Plus Jakarta Sans 400–800; IBM Plex Mono 400/500/600;
   Permanent Marker 400) — nicht mehr, nicht weniger, damit sich am
   Schriftbild nichts ändert.

   Subsets: nur latin + latin-ext. Google lieferte zusätzlich cyrillic,
   cyrillic-ext und vietnamese aus, die für eine deutschsprachige Seite ohne
   Nutzen sind. Per unicode-range lädt der Browser latin-ext ohnehin nur
   dann, wenn ein Zeichen aus diesem Bereich tatsächlich vorkommt — für rein
   deutschen Text bleibt es bei den latin-Dateien.

   font-display:swap entspricht dem &display=swap der alten Google-URL.
   Alle vier Familien stehen unter der SIL Open Font License 1.1, das
   Selbsthosten ist also ausdrücklich erlaubt.
   -------------------------------------------------------------------------- */

/* Anton */
@font-face{
  font-family:'Anton';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/anton-latin-400.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Anton';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/anton-latin-ext-400.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Plus Jakarta Sans */
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-400.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-ext-400.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-500.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-ext-500.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-600.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-ext-600.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-700.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-ext-700.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:800;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-800.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:800;
  font-display:swap;
  src:url('../fonts/plus-jakarta-sans-latin-ext-800.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* IBM Plex Mono */
@font-face{
  font-family:'IBM Plex Mono';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/ibm-plex-mono-latin-400.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Mono';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/ibm-plex-mono-latin-ext-400.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'IBM Plex Mono';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('../fonts/ibm-plex-mono-latin-500.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Mono';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('../fonts/ibm-plex-mono-latin-ext-500.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'IBM Plex Mono';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('../fonts/ibm-plex-mono-latin-600.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Mono';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('../fonts/ibm-plex-mono-latin-ext-600.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Permanent Marker */
@font-face{
  font-family:'Permanent Marker';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../fonts/permanent-marker-latin-400.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root{
  --sed-bg:#120A17;
  --sed-bg-panel:#1D1023;
  --sed-bg-panel-2:#2B1530;
  --sed-coral:#FF4F3F;
  --sed-pink:#FF2E7E;
  --sed-cyan:#3FF0D6;
  --sed-purple:#B23FF0;
  --sed-cream:#FFF6EC;
  --sed-muted:#C7B4CE;
  --sed-line: rgba(255,246,236,0.14);
  --sed-grid: repeating-radial-gradient(circle at 0 0, rgba(255,246,236,0.025) 0px, rgba(255,246,236,0.025) 1px, transparent 1px, transparent 8px);

  /* Gesamthöhe der klebenden Kopfzeile: 72px Mindesthöhe (.sed-nav-inner)
     plus 2px untere Linie (.sed-nav). Daran hängt der Ticker, der sich
     direkt darunter festsetzt — siehe .sed-ticker. Fest verdrahtet und
     nicht per JavaScript gemessen, weil die Höhe rein aus diesen beiden
     CSS-Werten folgt: Der Inhalt der Kopfzeile (Logo 36px, Menüpunkte 39px,
     Ticket-Button ~40px) bleibt unter der Mindesthöhe und kann sie nicht
     aufdrücken. Ändert sich eine der beiden Zahlen, gehört dieser Wert
     mitgeändert. */
  --sed-nav-h:74px;
}

/* Ursache des horizontalen Wackelns auf Mobile (live per Browser-Inspektion
   verifiziert, nicht geraten): .sed-hero-bg blutet per Design absichtlich
   über den Hero-Rand hinaus (inset:-20% -10% auto -10%, weiter unten in
   dieser Datei) für den weichen Verlauf-Glow-Effekt — .sed-hero selbst hat
   overflow:visible (ebenfalls Absicht, sonst würde der Glow oben/unten
   abgeschnitten). Kein Vorfahre hat bislang overflow-x:hidden, wodurch
   dieser gewollte Rand-Überstand die gesamte Seite horizontal aufgezogen
   hat (bestätigt: Ausblenden von .sed-hero-bg allein brachte scrollWidth
   exakt auf Viewport-Breite zurück). Die Ticker-Leiste (.sed-ticker-track)
   war NICHT die Ursache — sie wird bereits korrekt von .sed-ticker (hat
   eigenes overflow:hidden) auf Viewport-Breite geclippt. overflow-x:hidden
   hier auf html/body ist daher kein Kaschieren, sondern die korrekte,
   übliche Lösung für absichtlich über den Rand hinausblutende Deko-Elemente
   wie diesen Glow.

   NACHTRAG (Sticky-Kopfzeile): "hidden" war hier die falsche Zutat und hat
   die klebende Navigation stillgelegt. overflow-x:hidden zwingt die andere
   Achse auf overflow-y:auto — damit wird <body> selbst zu einem
   Scroll-Container. position:sticky richtet sich immer nach dem NÄCHSTEN
   scrollenden Vorfahren, und der war ab da nicht mehr das Fenster, sondern
   dieser body-Kasten, der von sich aus nie scrollt (er wächst einfach mit
   dem Inhalt). Ergebnis: .sed-nav blieb nirgends kleben, obwohl
   position:sticky sauber gesetzt war — live nachgemessen, die Kopfzeile
   wanderte beim Scrollen um exakt den Scrollweg nach oben aus dem Bild.

   overflow-x:clip schneidet genauso ab, erzeugt dabei aber KEINEN
   Scroll-Container und lässt die andere Achse in Ruhe. Beide Zeilen bleiben
   bewusst stehen: Browser ohne "clip" (Safari vor 16) verwerfen die zweite
   Deklaration und behalten das bisherige Verhalten — dort ist die Kopfzeile
   dann wie bisher nicht klebend, aber nichts wird schlechter. */
html, body{ overflow-x:hidden; overflow-x:clip; }

/* Weißer Rand oben + "durchscheinendes" Weiß beim Overscroll-Bounce auf
   iOS Safari: Unser dunkler Seiten-Ton (var(--sed-bg)) war bislang NUR
   auf den inneren Wrapper (.sed-event/.sed-home) gesetzt, nicht auf
   html/body selbst. iOS Safari zeigt beim Bounce (elastisches
   Überscrollen oben/unten) und in schmalen Rand-Bereichen aber den
   Hintergrund von html/body, nicht den eines inneren Divs — ohne eigene
   Hintergrundfarbe dort blitzt der Browser-Standard (Weiß) durch.
   min-height:100% (body) bzw. 100% (html) stellt zusätzlich sicher, dass
   der Hintergrund auch dann die volle sichtbare Höhe abdeckt, wenn der
   eigentliche Seiteninhalt kürzer ist als der Viewport.
   !important nötig: live geprüft, das Theme setzt body{ background:#fff }
   selbst über eine spezifischere Regel — unsere einfache body{}-Deklaration
   wurde dadurch überschrieben (computed background blieb rgb(255,255,255)
   trotz dieser Regel). Gleiches Muster wie bei den bereits bestehenden
   Theme-Override-Schutz-Regeln weiter unten in dieser Datei. */
html{ background-color:var(--sed-bg) !important; min-height:100% !important; }
body{ background-color:var(--sed-bg) !important; min-height:100vh !important; }

/* Typografie */
.sed-h1, .sed-h2, .sed-h3,
.sed-event h1, .sed-event h2, .sed-event h3,
.sed-home h1, .sed-home h2, .sed-home h3,
.sed-maintenance h1, .sed-maintenance h2, .sed-maintenance h3,
.sed-404 h1, .sed-404 h2, .sed-404 h3{
  font-family:'Anton', sans-serif; font-weight:400; line-height:1.04;
  letter-spacing:-0.01em; text-transform:uppercase;
}
.sed-eyebrow{
  font-family:'IBM Plex Mono', monospace; font-size:12px; font-weight:700;
  letter-spacing:0.16em; text-transform:uppercase; color:var(--sed-cyan);
}
.sed-marker{ font-family:'Permanent Marker', cursive; }

/* Buttons */
.sed-btn{
  display:inline-flex; align-items:center; gap:8px; padding:16px 32px;
  font-weight:700; font-size:15px; cursor:pointer; border:none;
  transition:transform 0.15s ease; text-decoration:none;
}
.sed-btn:hover{ transform:translateY(-2px) scale(1.02); }
.sed-btn-primary{
  background:linear-gradient(120deg, var(--sed-coral), var(--sed-pink));
  color:#1A0806 !important; border-radius:4px 22px 4px 22px; transform:rotate(-1deg);
}
.sed-btn-primary:hover{ transform:rotate(-1deg) translateY(-2px) scale(1.02); }
.sed-btn-ghost{
  border:1.5px solid var(--sed-line); color:var(--sed-cream) !important; border-radius:100px;
}

/* Regenbogen-Ticker

   Klebt zusammen mit der Navigation: Die Kopfzeile setzt sich bei 0 fest,
   das Laufband exakt eine Kopfzeilenhöhe darunter. Damit bleibt die
   Reihenfolge Navigation → Laufband beim Scrollen unverändert erhalten und
   beide wandern als ein Block mit.

   Bewusst hier am Ticker selbst statt über einen gemeinsamen Rahmen um
   beide Elemente: Das Laufband steht in den Vorlagen INNERHALB von
   .sed-home bzw. .sed-event (auf der Event-Seite mit eigenem, aus Titel und
   Datum gebautem Text) und ist dort jeweils das erste Element. Es in die
   Kopfzeilen-Funktion zu ziehen, hätte es auf allen übrigen Seiten
   (Galerie, Rechtstexte, /tickets/) neu erscheinen lassen, wo es bisher
   keins gibt.

   z-index knapp unter .sed-nav (1000): Klappt auf schmalen Bildschirmen das
   Burger-Menü auf, wächst die Kopfzeile über das Laufband hinweg und soll
   es dabei verdecken, nicht darunter durchscheinen lassen. */
.sed-ticker{
  background:linear-gradient(90deg, #FF4F3F, #FF9F3F, #FFE93F, #3FF07A, #3FA0F0, #B23FF0, #FF2E7E);
  background-size:200% 100%; animation:sed-ticker-hue 12s linear infinite;
  color:#1A0806; overflow:hidden; white-space:nowrap;
  position:sticky; top:var(--sed-nav-h); z-index:999;
  padding:9px 0; font-family:'IBM Plex Mono', monospace; font-weight:700; font-size:13px;
}
@keyframes sed-ticker-hue{ 0%{background-position:0% 0;} 100%{background-position:200% 0;} }
.sed-ticker-track{ display:inline-block; padding-left:100%; animation:sed-scroll-left 42s linear infinite; }
.sed-ticker-track span{ margin:0 28px; }
@keyframes sed-scroll-left{ 0%{transform:translateX(0);} 100%{transform:translateX(-100%);} }

/* Event-Hero-Bereich (auch Basis für die Startseite, siehe .sed-home, für
   die /tickets/-Übergangsseite, siehe .sed-tickets, für die
   Rechtstext-Seiten, siehe .sed-legal, und für die Wartungsseite, siehe
   .sed-maintenance — jeweils weiter unten) */
.sed-event, .sed-home, .sed-tickets, .sed-legal, .sed-maintenance, .sed-404, .sed-contact{ background:var(--sed-bg); color:var(--sed-cream); font-family:'Plus Jakarta Sans', sans-serif; line-height:1.6; }
.sed-wrap{ max-width:1100px; margin:0 auto; padding:0 32px; }

/* padding-bottom auf Desktop reduziert (war 48px) — Teil der Feinjustierung
   der rechten Plakat-Spalte (siehe .sed-poster-frame weiter unten): das
   Plakat ist per aspect-ratio:3/4 spürbar höher als die linke Textspalte,
   wodurch die (durch CSS Grid auf die höhere Spalte gestreckte) Zeile
   unterhalb des "Tickets sichern"-Buttons deutlich mehr Leerraum ließ, als
   nötig — live gemessen (getBoundingClientRect): Abstand Button→Datum-Box
   schrumpfte dadurch von 357px auf 228px bei 1280px Viewport-Breite. Auf
   Mobile per Media Query weiter unten bewusst auf die ursprünglichen 48px
   zurückgesetzt, siehe dortige Begründung. */
.sed-hero{ position:relative; padding:64px 0 24px; overflow:visible; }
.sed-hero-bg{
  position:absolute; inset:-20% -10% auto -10%; height:120%;
  background:
    radial-gradient(circle at 20% 20%, rgba(255,79,63,0.4), transparent 42%),
    radial-gradient(circle at 80% 10%, rgba(255,46,126,0.35), transparent 38%),
    radial-gradient(circle at 60% 80%, rgba(63,240,214,0.26), transparent 42%);
  z-index:0;
}
/* Event-Detailseite: flache, einfarbige Hero-Fläche statt des mehrfarbigen
   Verlaufs oben — NUR body.single-event überschrieben, damit .sed-hero-bg
   auf der Startseite (front-page.php nutzt dieselbe Klasse für ihren
   eigenen Hero, siehe .sed-home-hero) unangetastet beim bisherigen
   Mehrfarb-Verlauf bleibt. Farbwert bewusst identisch zu var(--sed-bg)
   (der Hintergrundfarbe von .sed-event selbst) statt z. B.
   var(--sed-bg-panel), damit sie nahtlos mit dem übrigen Seitenhintergrund
   verschmilzt.

   inset/height zusätzlich auf 0/100% zurückgesetzt (Bugfix): Die
   Basisregel oben lässt .sed-hero-bg absichtlich über den Hero-Rand
   bluten (inset:-20% -10% auto -10%; height:120%) — bei den früheren,
   fast komplett transparenten Verlaufs-Blobs unsichtbar, aber bei einer
   VOLL DECKENDEN Flächenfarbe reicht dieser Bleed live nachweislich
   (Y-Achse gemessen: Box von ca. -178px bis 1124px) bis über den
   Ticker (.sed-ticker, 0-38.8px) hinaus nach oben. Da .sed-hero-bg im
   DOM später steht als der Ticker und beide im selben Stacking-Kontext
   landen (weder .sed-wrap noch .sed-hero spannen einen eigenen auf),
   malt sich die Fläche über den Ticker statt dahinter — Ticker wirkt
   "unterbrochen". Fix: kein Bleed mehr auf Event-Seiten (inset:0;
   height:100% deckt exakt die Fläche von .sed-hero ab, die bereits
   oberhalb von .sed-wrap liegende Ticker-Zeile wird geometrisch gar
   nicht mehr erreicht). Bei einer FLACHEN, zu ihrer Umgebung
   identischen Farbe hat der Bleed ohnehin keinen sichtbaren Zweck mehr
   (anders als beim weichen Verlauf-Glow auf der Startseite, dort
   bewusst unverändert gelassen) — der Verzicht darauf hat also auch
   keine optische Nebenwirkung im Hero-Bereich selbst. */
body.single-event .sed-hero-bg{
  background:var(--sed-bg);
  inset:0;
  height:100%;
}
.sed-hero-grid{ display:grid; grid-template-columns:1fr 1fr; gap:48px; align-items:start; position:relative; z-index:2; }
.sed-hero h1{ font-size:clamp(38px, 6.4vw, 68px); margin:6px 0 8px; }
.sed-hero .sed-sub-h1{ font-size:clamp(15px, 2.4vw, 26px); color:var(--sed-muted); font-family:'Anton', sans-serif; text-transform:uppercase; margin-bottom:20px; white-space:nowrap; }
.sed-hero p.sed-sub{ font-size:17px; font-weight:600; color:var(--sed-muted); max-width:520px; margin-bottom:30px; }
.sed-hero-top{ display:flex; align-items:center; gap:14px; margin-bottom:16px; }
.sed-live-dot{ width:9px; height:9px; border-radius:50%; background:var(--sed-pink); box-shadow:0 0 0 5px rgba(255,46,126,0.25); animation:sed-pulse-dot 1.4s ease-in-out infinite; }
@keyframes sed-pulse-dot{ 0%,100%{ opacity:1; } 50%{ opacity:0.4; } }

@media (max-width:860px){ .sed-hero-grid{ grid-template-columns:1fr; } }

/* Plakat-Rahmen
   Größe bewusst über width:100% + aspect-ratio:3/4 gelöst, NICHT über
   einen festen max-height-Wert (wie zuvor: max-height:660px + width:auto)
   — width:auto kombiniert mit aspect-ratio ließ die Box in der rechten
   Grid-Spalte auf Desktop kleiner rendern, als die Spalte tatsächlich
   hergibt (die Höhen-Obergrenze griff, bevor die Spaltenbreite
   ausgeschöpft war, dadurch die gemeldete ungenutzte Fläche daneben/
   darunter). width:100% füllt dagegen IMMER exakt die verfügbare
   Spaltenbreite von .sed-hero-grid (1fr-Spur, durch .sed-wrap
   max-width:1100px ohnehin nach oben begrenzt, siehe dortige Regel) —
   kein zusätzlicher fester max-width/-height-Wert nötig, die Größe
   skaliert dadurch automatisch mit dem tatsächlich verfügbaren Platz statt
   mit einer geschätzten Pixelzahl. Da .sed-hero-grid { align-items:start }
   nutzt, können beide Spalten unterschiedlich hoch werden (z. B. bei
   langen Headlines) — das erzeugt keine Überschneidung, CSS-Grid-Spalten
   können sich nicht gegenseitig überlappen. margin-left:auto entfällt,
   da die Box bei 100% Breite ohnehin keinen Rand-Spielraum mehr hat.

   Feinjustierung: width auf 85% reduziert (war 100%) — bei voller
   Spaltenbreite wirkte das Plakat im direkten Vergleich zur linken
   Textspalte zu dominant/groß. 85% lokal mit echtem Millennium-Edition-
   Inhalt gegen 88%/90%/100% verglichen (Screenshots + gemessene Höhen bei
   1280px Breite: 100% → 759px, 90% → 688px, 85% → 653px Plakat-Höhe
   gegenüber 440px linker Spalte) — 85% war der niedrigste getestete Wert
   aus der vorgegebenen 85–90%-Spanne, reduziert also zugleich den
   Höhenüberschuss (und damit den Leerraum vor der Datum-Box, siehe
   .sed-hero oben) am stärksten, wirkt dabei aber weiterhin als
   eigenständiges, prominentes Plakat statt zu klein. */
.sed-poster-frame{
  position:relative; aspect-ratio:3/4; width:85%;
  border-radius:4px; border:2px solid var(--sed-cream);
  background:var(--sed-grid), linear-gradient(160deg, rgba(255,79,63,0.35), rgba(178,63,240,0.3)), var(--sed-bg-panel);
  display:flex; align-items:flex-end; padding:22px; overflow:hidden;
  box-shadow:0 24px 50px rgba(0,0,0,0.4); transform:rotate(1deg);
}
.sed-poster-frame img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
/* Mobile bewusst unverändert gelassen (betrifft nur Desktop, s.o.):
   width hier wieder explizit auf auto zurückgesetzt, damit exakt dieselbe
   max-height-gesteuerte Größenberechnung wie vor dieser Änderung greift
   (.sed-hero-grid bricht ab 860px auf eine Spalte um, die Box stünde ohne
   dieses Reset sonst plötzlich auf 85% der vollen Spaltenbreite statt
   der bisherigen, kompakteren Größe). padding-bottom von .sed-hero (s.o.)
   hier ebenfalls auf den ursprünglichen Wert zurückgesetzt, da die
   Desktop-Reduzierung nur die zweispaltige Ansicht betrifft — auf Mobile
   liegt das Plakat im normalen Textfluss zwischen Button und Datum-Box,
   dort war der bisherige Abstand nicht Teil der Beschwerde. */
@media (max-width:860px){
  .sed-poster-frame{ width:auto; max-width:320px; max-height:420px; margin:0 auto; }
  .sed-hero{ padding-bottom:48px; }
}

/* Tape-Sticker (DIY-Optik) */
.sed-tape{
  position:absolute; background:rgba(255,246,236,0.9); color:#120A17;
  font-family:'IBM Plex Mono', monospace; font-weight:700; font-size:10px;
  letter-spacing:0.06em; text-transform:uppercase; padding:5px 14px;
  box-shadow:1px 2px 6px rgba(0,0,0,0.35); z-index:10; text-align:center;
}

/* Meta-Infos (Datum/Einlass/Location/Preis) */
.sed-meta-row{ display:flex; gap:14px; flex-wrap:wrap; margin-bottom:28px; }
.sed-meta-pill{
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line); border-radius:14px;
  padding:12px 18px;
}
.sed-meta-pill .sed-label{ font-size:11px; font-weight:600; color:var(--sed-muted); font-family:'IBM Plex Mono', monospace; letter-spacing:0.05em; text-transform:uppercase; }
.sed-meta-pill .sed-value{ font-size:16px; font-weight:800; margin-top:2px; }

/* Countdown-Widget */
.sed-countdown-wrap{
  display:flex; align-items:center; gap:22px; flex-wrap:wrap;
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line); border-radius:20px;
  padding:22px 28px; margin-bottom:28px;
}
.sed-countdown-label{ font-family:'IBM Plex Mono', monospace; font-size:12px; font-weight:600; color:var(--sed-muted); letter-spacing:0.05em; }
.sed-countdown-nums{ display:flex; gap:10px; }
.sed-cd-box{ text-align:center; min-width:58px; }
.sed-cd-box .sed-n{ font-family:'Anton', sans-serif; font-size:30px; color:var(--sed-cyan); }
.sed-cd-box .sed-u{ font-size:10px; color:var(--sed-muted); text-transform:uppercase; letter-spacing:0.08em; }

.sed-hero-actions{ display:flex; gap:14px; flex-wrap:wrap; }

/* Detail-Bereich unterhalb des Hero-Grids (Datum/Einlass-, Location- und
   Preis-Boxen sowie die Veranstaltungstext-Box, siehe single-event.php).
   Bewusst AUSSERHALB von .sed-hero-grid platziert (eigener Block nach
   </header>), nicht innerhalb von .sed-hero-inner: Auf Mobile (Grid bricht
   ab 860px auf eine Spalte um, siehe .sed-hero-grid-Regel oben) steht das
   Plakat als zweites Grid-Kind sonst NACH dem gesamten Hero-Inner-Inhalt —
   läge dieser Block noch in .sed-hero-inner, würde die lange
   Veranstaltungstext-Box das Plakat auf Mobile weit nach unten schieben.
   Als eigenständiger Block nach dem Grid erscheint er auf Mobile dagegen
   sauber NACH dem Plakat (Badge/Headline/Countdown/Button, dann Plakat,
   dann diese Detail-Boxen) — auf Desktop bleibt das Plakat unverändert
   rechts neben Headline/Countdown/Button stehen. */
.sed-event-details{ padding-top:4px; }

/* Veranstaltungstext-Box: gleicher Karten-Hintergrund/-Radius wie
   .sed-meta-pill (Datum/Location-Box), nur mit mehr Innenabstand für
   längeren Fließtext. */
.sed-event-text{
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line); border-radius:14px;
  padding:32px 28px; font-size:15px; line-height:1.75; color:var(--sed-cream); margin-bottom:28px;
}
.sed-event-text p{ margin:0 0 20px; }
.sed-event-text p:last-child{ margin-bottom:0; }
/* Sicherheitsnetz gegen versehentlich mitgeschleppte <blockquote>-Tags in
   den WYSIWYG-Feldern (z. B. beim Einfügen von Text aus einer bereits
   formatiert dargestellten Quelle wie einer gerenderten Chat-Antwort — der
   Rich-Paste übernimmt dabei die HTML-Formatierung inklusive blockquote).
   Das Theme stylt blockquote global mit farbigem Rand/Einzug; innerhalb
   dieser Box soll ein blockquote optisch nicht von einem normalen Absatz
   zu unterscheiden sein. !important nötig, da die Theme-Regel eine
   unbekannte Spezifität hat. */
.sed-event-text blockquote{
  margin:0 0 20px !important; padding:0 !important; border:0 !important;
  background:none !important; color:inherit !important; font:inherit !important;
  font-style:normal !important; quotes:none !important;
}
.sed-event-text blockquote:last-child{ margin-bottom:0 !important; }
.sed-event-text blockquote > p{ margin:0 !important; }
/* Intro-Absätze (bis "...wie du bist.") etwas prominenter als der übrige
   Fließtext gesetzt, damit der Text erkennbar in Abschnitte gegliedert
   wirkt — kein --sed-font-voice im Design-System vorhanden, daher wie im
   Auftrag als Fallback vorgesehen über eine leicht größere Schriftgröße
   plus etwas mehr Gewicht gelöst, statt einer eigenen Font-Family. */
.sed-event-text-intro p{ font-size:17px; font-weight:600; line-height:1.7; }
/* Floor-Namen farblich an die 4 Floor-Karten der Startseite angelehnt
   (.sed-cl1-4 / .sed-floor-note--*, siehe Abschnitt "Startseite" weiter
   unten in dieser Datei): Halle=Coral, Club=Cyan, Kneipe=Pink,
   Biergarten=Purple — dieselben CSS-Variablen, kein neuer Farbton. Auch
   als Titelfarbe der Floor-Karten unten wiederverwendet. */
.sed-text-floor-halle{ color:var(--sed-coral); font-weight:700; }
.sed-text-floor-club{ color:var(--sed-cyan); font-weight:700; }
.sed-text-floor-kneipe{ color:var(--sed-pink); font-weight:700; }
.sed-text-floor-biergarten{ color:var(--sed-purple); font-weight:700; }
/* Floor-Übersicht als kompaktes 2x2-Karten-Raster statt reiner
   Fließtext-Zeilen — aus dem Fließtext herausgehoben, damit Genre und
   DJ-Namen auf einen Blick erfassbar sind. Eigene, seitenlokale Klassen
   (statt der bestehenden .sed-floor-row/-item/-name/-genre von der
   Startseiten-Event-Karte): dort ist der Titel einheitlich cremefarben
   und das Raster 3-spaltig — beides passt nicht zu den hier geforderten
   4 farbcodierten Karten in 2x2, eine Wiederverwendung hätte entweder die
   Startseiten-Klassen verändert oder viele Overrides gebraucht. */
.sed-event-text-floors{
  display:grid; grid-template-columns:1fr 1fr; gap:14px;
  margin:20px 0;
}
.sed-event-text-floor-card{
  background:rgba(255,246,236,0.03); border:1px solid var(--sed-line); border-radius:10px;
  padding:18px 18px 16px;
}
/* Schriftgrößen gegenüber der ersten Version spürbar angehoben (15/13/10.5px
   waren in der Karte kaum lesbar) — Karten-Padding leicht erhöht, damit der
   größere Text nicht beengt wirkt; 2x2-Raster bleibt bis 480px erhalten
   (Breakpoint unverändert, s.u.), Anton ist als schmale Display-Schrift auch
   bei "BIERGARTEN" bei dieser Größe noch problemlos einspaltig lesbar. */
.sed-event-text-floor-name{
  font-family:'Anton', sans-serif; font-size:19px; text-transform:uppercase; letter-spacing:0.01em; margin-bottom:5px;
}
.sed-event-text-floor-genre{ font-size:15px; font-weight:600; color:var(--sed-muted); margin-bottom:4px; line-height:1.3; }
.sed-event-text-floor-dj{
  font-family:'IBM Plex Mono', monospace; font-size:12px; color:rgba(199,180,206,0.65);
  text-transform:uppercase; letter-spacing:0.03em; line-height:1.4;
}
/* Schlusssatz ("Wir sehen uns am 26. September.") optisch abgesetzt: der
   Zeilenumbruch davor kommt aus einem <br> im Template (siehe
   single-event.php), diese Klasse sitzt auf dem danach folgenden <span>
   und ergänzt Trennlinie + dieselbe prominentere Typografie wie
   .sed-event-text-intro. display:inline-block statt block, damit
   border-top nur über die Breite des Satzes selbst läuft (schmale,
   editorial wirkende Linie) statt über die volle Boxbreite. */
.sed-event-text-signoff{
  display:inline-block; margin-top:16px; padding-top:14px; border-top:1px solid var(--sed-line);
  font-size:17px; font-weight:600;
}
@media (max-width:600px){
  .sed-event-text{ padding:24px 20px; font-size:14.5px; }
  .sed-event-text-intro p{ font-size:16px; }
  .sed-event-text-signoff{ font-size:16px; }
}
@media (max-width:480px){
  .sed-event-text-floors{ grid-template-columns:1fr; }
}

/* ==========================================================================
   Startseite (front-page.php)
   ========================================================================== */

/* Hero-Titelbild: volle Breite, festes Standbild als dauerhafter Fallback
   unter/hinter dem Hero-Video (siehe .sed-hero-video). min-height zusätzlich
   zu aspect-ratio, damit auch bei schmaleren Seitenverhältnissen (Mobile)
   genug Raum für das Text-Overlay bleibt, ohne dass etwas abgeschnitten
   wirkt. Reduzierte Höhe auf kleinen Screens, damit der "Tickets
   sichern"-Button auf dem Smartphone nicht zu weit unten landet. */
.sed-hero-image{
  width:100%; aspect-ratio:16/9; min-height:460px; border-radius:8px; overflow:hidden;
  margin-bottom:32px; border:2px solid var(--sed-line); position:relative; z-index:2;
}
.sed-hero-image img{ width:100%; height:100%; object-fit:cover; display:block; }

/* Hero-Hintergrundvideo (Desktop UND Mobile, wird per hero-video.js
   erzeugt und eingefügt): liegt exakt wie das Bild an, object-fit:cover
   für dieselbe Ausfüllung/Positionierung auf jeder Breite. Startet
   unsichtbar (opacity:0) und wird erst eingeblendet, sobald hero-video.js
   das Video für bereit hält (.is-loaded — siehe dort für die Trigger:
   'loadeddata', 'playing' oder Timeout-Fallback), damit bis dahin
   weiterhin das statische Bild darunter sichtbar bleibt. z-index zwischen
   Bild (static, unten) und Scrim (z-index:1, oben) einsortiert. */
.sed-hero-video{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover; display:block;
  z-index:0; opacity:0; transition:opacity 0.4s ease;
}
.sed-hero-video.is-loaded{ opacity:1; }

/* Dunkler Verlauf über dem gesamten Titelbild, damit der helle Text-Overlay
   unabhängig vom Bildinhalt (hell oder dunkel) immer gut lesbar bleibt. */
.sed-hero-image-scrim{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg, transparent 0%, rgba(18,10,23,0.35) 45%, rgba(18,10,23,0.9) 100%);
}

/* Text-Overlay: liegt unten links auf dem Titelbild/-video statt danach
   im Fließtext. */
.sed-hero-image-text{
  position:absolute; left:0; right:0; bottom:0; z-index:2;
  padding:28px 32px 32px;
}

@media (max-width:860px){
  .sed-hero-image{ aspect-ratio:21/9; min-height:420px; margin-bottom:20px; }
  .sed-hero-image-text{ padding:22px 24px 26px; }
  .sed-home-hero .sed-hero-image-text .sed-home-statement{ font-size:clamp(34px, 7vw, 70px); margin:8px 0 10px; }
  .sed-home-hero .sed-hero-image-text p.sed-sub{ margin-bottom:0; }
}
@media (max-width:600px){
  .sed-hero-image{ aspect-ratio:16/7; min-height:400px; margin-bottom:16px; }
  .sed-hero-image-text{ padding:18px 18px 22px; }
  .sed-home-hero .sed-hero-image-text .sed-home-statement{ font-size:clamp(28px, 9vw, 48px); margin:6px 0 8px; }
  .sed-home-hero .sed-hero-image-text p.sed-sub{ font-size:14px; margin-bottom:0; }
}

/* Hero-Statement ("Sei schamlos." / "Ohne Kompromisse.")
   Selektor bewusst mit .sed-home-hero-Präfix statt nur .sed-home-statement:
   .sed-hero h1 (Event-Detailseite-Regel, siehe oben) hat sonst durch den
   zusätzlichen Tag-Selektor höhere Spezifität und würde die hier gesetzte
   Schriftgröße auf der Startseite überschreiben, da unser h1 ebenfalls
   innerhalb von .sed-hero verschachtelt ist (gemeinsame Hero-Basiskomponente).
   Margin bewusst kompakter als früher (10px/14px statt 14px/26px), da das
   Statement jetzt als Overlay auf dem Titelbild sitzt statt freistehend.
   "Ohne Kompromisse." ist EIN <span> (beide Wörter gehören zum zweiten
   Satz und sollen komplett pink sein) — der Extra-Abstand zum ersten Satz
   kommt über margin-top auf genau dieses Element, ohne den (engen)
   Wortabstand innerhalb von "Ohne Kompromisse." selbst zu beeinflussen,
   da das nur ein einziger Textlauf ist. */
.sed-home-hero .sed-home-statement{ font-size:clamp(44px, 9vw, 108px); line-height:0.96; margin:10px 0 14px; }
.sed-home-statement span{ display:block; }
.sed-home-statement .sed-accent{ color:var(--sed-pink) !important; margin-top:0.25em; }
.sed-home-actions{ display:flex; gap:14px; flex-wrap:wrap; margin-top:4px; }

/* Countdown-Label auf der Startseite an die Button-Schriftgröße (.sed-btn:
   font-size:15px) angleichen — wirkte sichtbar kleiner als "Tickets sichern".
   Kontextspezifisch über .sed-home-hero skaliert, damit die Event-
   Detailseite (nutzt dieselbe .sed-countdown-label-Klasse) unverändert
   bei 12px bleibt. */
.sed-home-hero .sed-countdown-label{ font-size:15px; }
/* Non-breaking Space zwischen "Jahre" und "Schamlos" im Template
   verhindert bereits, dass "Schamlos" isoliert auf einer eigenen Zeile
   landet. Auf sehr schmalen Screens zusätzlich etwas kleiner, damit der
   gesamte Text insgesamt komfortabler umbricht. */
@media (max-width:400px){ .sed-home-hero .sed-countdown-label{ font-size:13px; } }

/* Gezielter 3-zeiliger Umbruch NUR auf Mobile ("Countdown" / "Millennium
   Edition -" / "20 Jahre Schamlos") über zwei <br class="sed-mobile-break">
   im Template — auf Desktop per display:none unsichtbar (Text bleibt dort
   einzeilig, br erzeugt dann keinen Umbruch), ab 600px per display:block
   sichtbar und erzwingt den Zeilenumbruch an genau dieser Stelle. Die
   Leerzeichen direkt nach jedem <br> im Template sorgen dafür, dass auf
   Desktop trotzdem ein normaler Wortabstand steht (br selbst fügt keinen
   Leerraum ein) — am Zeilenanfang auf Mobile wird dieses Leerzeichen von
   allen gängigen Browsern automatisch ignoriert. */
.sed-countdown-label .sed-mobile-break{ display:none; }
@media (max-width:600px){
  .sed-countdown-label .sed-mobile-break{ display:block; }
}

/* Mehr Weißraum zwischen Label und Countdown-Zahlen, UND der rechte Rand
   der Zahlengruppe näher am rechten Rand des Headline-Texts ("Ohne
   Kompromisse.") statt am Kartenrand. Live vermessen bei 1280px: der
   Headline-Text endet bei ca. 82,9% der Kartenbreite — zusätzliches
   padding-right von ~17% (statt der bisherigen festen 28px) auf die
   Karte zieht den verfügbaren Innenraum entsprechend zusammen; Prozent
   statt fixer px, weil H1-Schriftgröße UND Kartenbreite im "fluiden"
   Bereich des H1-clamp() beide mit der Viewport-Breite mitskalieren
   (9vw) und ein Prozentwert dieses Verhältnis über mehrere Breakpoints
   robuster abbildet als ein fixer Pixelwert.
   WICHTIG: margin-left:auto auf .sed-countdown-nums selbst (statt nur
   justify-content:space-between auf dem Wrap) — Grund: das Label ist
   lang ("Countdown Millennium Edition - 20 Jahre Schamlos") und bricht
   bei schmaleren Breiten (z. B. Tablet 768px) auf eine eigene Zeile um;
   bei space-between richtet sich ein EINZELNES Element auf seiner Zeile
   per CSS-Spezifikation aber links aus (kein "between" ohne zweites
   Element) — das riss die Zahlengruppe beim Live-Test auf Tablet nach
   links. margin-left:auto auf das Element selbst funktioniert dagegen
   zuverlässig rechtsbündig, ob mit Label auf einer Zeile oder alleine
   auf der zweiten. Keine hundertprozentige Fluchtlinie bei jeder
   Fensterbreite garantiert (abweichende vw-Faktoren im mobilen
   H1-clamp()), aber spürbar näher an der Headline als vorher. */
.sed-home-hero .sed-countdown-wrap{ padding-right:17%; }
.sed-home-hero .sed-countdown-nums{ margin-left:auto; }

/* Die 17%-Näherung passt gut im Desktop-Fluidbereich (H1 clamp() mit
   9vw), aber die H1-Regel wechselt unterhalb 860px auf eine ANDERE
   Formel (clamp(34px, 7vw, 70px) bzw. clamp(28px, 9vw, 48px) ab 600px,
   siehe .sed-hero-image-text-Media-Queries weiter oben) — die Headline
   nimmt dort proportional WENIGER Breite ein. Live am Tablet-Breakpoint
   (768px) geprüft: mit den 17% ragte die Zahlengruppe sichtbar über den
   Headline-Rand hinaus; 36% bringt sie wieder in dieselbe Nähe wie am
   Desktop. */
@media (max-width:860px){
  .sed-home-hero .sed-countdown-wrap{ padding-right:36%; }
}

/* Social-Proof-Zeile unter den Hero-CTAs */
.sed-social-proof{
  display:flex; justify-content:center; gap:36px; flex-wrap:wrap; margin-top:44px; padding-top:28px;
  border-top:1px solid var(--sed-line);
}
.sed-social-proof-item{ font-family:'IBM Plex Mono', monospace; font-size:13px; font-weight:600; color:var(--sed-muted); max-width:180px; text-align:center; }
.sed-social-proof-item strong{
  display:block; font-family:'Anton', sans-serif; font-size:28px; font-weight:400;
  color:var(--sed-cyan); text-transform:uppercase; letter-spacing:-0.01em; margin-bottom:2px;
}

/* Abschnitt "Die Floors": 4 rotierte, überlappende Farbflächen als
   Foto-Platzhalter (eigenständiger Abschnitt, nicht mehr im Hero — siehe
   front-page.php). Werte 1:1 aus dem Mockup übernommen. Größerer Abstand
   zur Headline als bei den anderen Section-Heads: .sed-section-head hat
   bereits margin-bottom:44px — zwei benachbarte Block-Margins (dieses
   margin-bottom UND ein margin-top auf .sed-collage) collapsen in CSS
   aber zum GRÖSSEREN der beiden Werte, statt sich zu addieren. Ein
   kleinerer margin-top (z. B. 32px) hätte also gar keine sichtbare
   Wirkung gehabt — deshalb hier bewusst 80px, klar über den 44px, damit
   der Abstand tatsächlich wächst. */
.sed-floors{ padding:56px 0 64px; }
.sed-floors .sed-collage{ margin-top:80px; }
.sed-collage{ position:relative; height:440px; }
.sed-collage-item{
  position:absolute; border-radius:4px; border:2px solid var(--sed-cream);
  display:flex; align-items:flex-end; padding:12px; overflow:hidden;
}
/* Rahmenfarbe je Karte auf die eigene Akzentfarbe umgestellt (statt
   einheitlich Creme), damit jede Karte auch nach Foto-Upload klar ihrer
   Farbfamilie zuordenbar bleibt — dieselben Akzentfarben wie bei den
   Why-Cards (.sed-why-coral/-cyan/-pink/-purple). */
.sed-cl1{ width:36%; height:250px; left:-2%; top:6px; background:linear-gradient(150deg,#FF4F3F,#3d0f0a); border-color:var(--sed-coral); transform:rotate(-7deg); z-index:3; }
.sed-cl2{ width:32%; height:200px; left:26%; top:150px; background:linear-gradient(150deg,#3FF0D6,#0c332e); border-color:var(--sed-cyan); transform:rotate(6deg); z-index:2; }
.sed-cl3{ width:30%; height:240px; left:52%; top:-14px; background:linear-gradient(150deg,#FF2E7E,#3a0a20); border-color:var(--sed-pink); transform:rotate(-4deg); z-index:4; }
.sed-cl4{ width:28%; height:180px; left:73%; top:210px; background:linear-gradient(150deg,#8c6bff,#20153f); border-color:var(--sed-purple); transform:rotate(9deg); z-index:1; }
/* Foto füllt die Karte, sobald im ACF-Feld hinterlegt (siehe
   sed_get_floor_image_url() in schamlos-event-design.php); der
   Farbverlauf der jeweiligen .sed-cl1-4-Klasse bleibt als Hintergrund
   erhalten und ist damit automatisch der Fallback, solange kein Bild
   gesetzt ist. Scrim sorgt für Label-Kontrast auf echten Fotos. */
.sed-collage-photo{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0; }
.sed-collage-scrim{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg, transparent 40%, rgba(18,10,23,0.85) 100%);
}
.sed-collage-image-placeholder{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); z-index:1;
  font-family:'IBM Plex Mono', monospace; font-size:11px; font-weight:600;
  letter-spacing:0.06em; text-transform:uppercase; color:var(--sed-cream); opacity:0.7;
  white-space:nowrap;
}
.sed-collage-label{
  position:relative; z-index:2;
  font-family:'IBM Plex Mono', monospace; font-size:11px; font-weight:600;
  color:var(--sed-cream); text-transform:uppercase; letter-spacing:0.04em;
}
/* Je Karte eine eigene handschriftliche Notiz — echte Handschrift-Optik
   (.sed-marker: Permanent Marker, kursiv) statt der vorherigen soliden
   Tape-Box, nur der Text selbst in der jeweiligen Akzentfarbe der Kachel,
   kein Hintergrundkasten mehr. Halle/Kneipe bleiben oberhalb ihrer Karte
   (dort ist Platz); Club/Biergarten sitzen UNTERHALB ihrer Karte, damit
   sie nicht mit der jeweils überlappenden Nachbarkarte kollidieren:
   Club-Karte (cl2) endet bei top 150px + height 200px = 350px, Biergarten
   (cl4) bei top 210px + height 180px = 390px — beide Notizen starten
   knapp darunter. */
.sed-collage-note{ position:absolute; z-index:5; font-size:18px; line-height:1.25; max-width:210px; }
.sed-floor-note--halle{ top:-14px; left:-2%; transform:rotate(-6deg); color:var(--sed-coral); }
.sed-floor-note--club{ top:358px; left:26%; transform:rotate(5deg); color:var(--sed-cyan); }
.sed-floor-note--kneipe{ top:-34px; left:52%; transform:rotate(-4deg); color:var(--sed-pink); }
.sed-floor-note--biergarten{ top:398px; left:73%; transform:rotate(7deg); color:var(--sed-purple); }
@media (max-width:860px){ .sed-collage{ height:340px; margin-top:8px; } }

/* Auf schmalen Mobile-Breiten funktioniert die diagonale, überlappende
   Foto-Collage nicht — Karten und Notizen verdecken sich gegenseitig.
   Ab hier stattdessen ein gerader, senkrechter Stapel ohne Rotation.
   .sed-collage-item bleibt bewusst position:relative (nicht static),
   damit es weiterhin als Containing Block für sein eigenes Foto/Scrim/
   Platzhalter (position:absolute; inset:0) funktioniert — nur die
   Positionierung RELATIV ZUR COLLAGE (top/left/rotate) wird entfernt.
   Die handschriftlichen Notizen liegen dank der bestehenden Dokument-
   Reihenfolge (Karte, dann ihre Notiz, dann die nächste Karte, ...) im
   Template bereits automatisch direkt nach der passenden Karte —
   position:static reicht, keine Umsortierung im PHP nötig. Das behebt
   nebenbei auch die Kollision der Biergarten-Notiz mit dem "Nicht
   verpassen"-Badge der darunterliegenden Event-Karte: als normales
   Blockelement im Dokumentfluss kann nichts mehr absolut in die nächste
   Sektion hineinragen. */
@media (max-width:600px){
  .sed-collage{ height:auto; }
  .sed-collage-item,
  .sed-cl1, .sed-cl2, .sed-cl3, .sed-cl4{
    position:relative; width:100%; height:220px; left:0; top:0; transform:none;
  }
  .sed-collage-note{
    position:static; display:block; max-width:none; transform:none;
    margin:10px 0 28px;
  }
}

/* Pitch-Strip: dreispaltige Kernaussagen-Zeile direkt unter dem Hero */
.sed-pitch-strip{ border-top:1px solid var(--sed-line); padding:26px 0; }
.sed-pitch-strip-inner{ display:flex; flex-wrap:wrap; }
/* Die drei Sätze stehen mittig in ihrer Spalte, nicht mehr linksbündig:
   justify-content zentriert den Satz als Ganzes in der Spalte,
   text-align:center fängt den Fall ab, dass er auf zwei Zeilen umbricht.

   Alle drei Spalten haben denselben Innenabstand (0 28px). Früher stand
   hier zusätzlich padding-left:0 auf der ersten und padding-right:0 auf
   der letzten Spalte — sinnvoll, solange der Text LINKSBÜNDIG war (so
   begann der erste Satz bündig mit dem Seitenraster). Mit der Zentrierung
   kehrt sich das ins Gegenteil: justify-content zentriert im INHALTS-
   kasten, und der saß bei den äußeren Spalten um die fehlenden 28px
   versetzt zur sichtbaren Zelle. Nachgemessen waren die beiden äußeren
   Sätze dadurch 29px bzw. 28px aus der Mitte, nur der mittlere stimmte.
   Deshalb sind die beiden Ausnahmen weg — bis auf border-right:none, das
   die Trennlinie hinter der letzten Spalte weiterhin unterdrückt. */
.sed-pitch-item{
  flex:1 1 0; min-width:220px; padding:0 28px;
  display:flex; align-items:baseline; justify-content:center; gap:10px;
  border-right:1px solid var(--sed-line); text-align:center;
}
.sed-pitch-item:last-child{ border-right:none; }
.sed-pitch-text{ font-size:14px; font-weight:600; color:var(--sed-muted); }
@media (max-width:760px){
  .sed-pitch-item{ flex:1 1 100%; border-right:none; border-bottom:1px solid var(--sed-line); padding:14px 0; }
  .sed-pitch-item:last-child{ border-bottom:none; }
}

/* Nächstes-Event-Card (Abschnitt 2) */
.sed-next-event{ padding:64px 0 88px; }
.sed-next-event-card{
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line); border-radius:24px;
  padding:40px; display:grid; grid-template-columns:1fr auto; gap:32px; align-items:center;
  position:relative;
}
.sed-next-event-card h2{ font-size:clamp(28px, 4vw, 44px); margin:6px 0 4px; }
/* Größerer Abstand unter der Unterzeile (.sed-sub-h1) als auf der
   Event-Detailseite — kontextspezifisch über den Karten-Selektor gelöst,
   ohne die Regel .sed-hero .sed-sub-h1 (Event-Detailseite) anzufassen. */
.sed-next-event-card .sed-sub-h1{
  font-size:clamp(15px, 2.4vw, 26px); color:var(--sed-muted); font-family:'Anton', sans-serif;
  text-transform:uppercase; margin-bottom:28px; white-space:nowrap;
}
.sed-next-event-cta{ flex-shrink:0; }
.sed-next-event-empty{
  text-align:center; padding:60px 20px; color:var(--sed-muted);
  font-family:'IBM Plex Mono', monospace; font-size:14px;
  background:var(--sed-grid), var(--sed-bg-panel); border:1px dashed var(--sed-line); border-radius:24px;
}
/* Floor-Row innerhalb der Event-Card (verschachtelt in .sed-next-event-info) */
.sed-floor-row{ display:grid; grid-template-columns:repeat(3, 1fr); gap:16px; margin-top:20px; }
.sed-floor-item{ background:var(--sed-grid), rgba(255,246,236,0.03); border:1px solid var(--sed-line); border-radius:10px; padding:12px 14px; }
.sed-floor-name{ font-family:'Anton', sans-serif; font-size:15px; text-transform:uppercase; color:var(--sed-cream); }
.sed-floor-genre{ font-family:'IBM Plex Mono', monospace; font-size:11px; color:var(--sed-muted); margin-top:2px; }
/* Genre-Text und DJ-Namen sind zwei <span> statt eines durchgehenden
   Strings — auf Desktop bleiben sie inline (Standard-span-Verhalten,
   unverändertes Umbruchverhalten wie bisher), erst ab 600px erzwingt
   display:block auf .sed-floor-genre-artists einen sauberen, immer
   gleichen Umbruch vor "mit [DJ-Name(n)]". */
@media (max-width:600px){
  .sed-floor-genre-artists{ display:block; margin-top:2px; }
}
.sed-next-event-tape{ position:absolute; top:-12px; left:32px; transform:rotate(-5deg); z-index:5; }
.sed-next-event-marker{ position:absolute; top:-30px; right:32px; z-index:5; transform:rotate(-3deg); color:var(--sed-pink); font-size:16px; }
@media (max-width:760px){
  .sed-next-event-card{ grid-template-columns:1fr; text-align:center; }
  .sed-social-proof{ gap:24px; }
  .sed-floor-row{ grid-template-columns:1fr; }
  .sed-next-event-marker{ right:50%; transform:translateX(50%) rotate(-3deg); }
}

/* Rotations-Utilities für den DIY-Look (Stat-Boxen, Why-Cards, Partner-Strip) */
.sed-rotate-1{ transform:rotate(-2deg); }
.sed-rotate-2{ transform:rotate(1.5deg); }
.sed-rotate-3{ transform:rotate(-1deg); }
.sed-rotate-4{ transform:rotate(2deg); }

/* Wiederverwendbarer, zentrierter Section-Head (Eyebrow + Überschrift) */
.sed-section-head{ text-align:center; max-width:640px; margin:0 auto 44px; }
.sed-section-head h2{ margin:8px 0 0; font-size:clamp(30px, 4.5vw, 48px); }

/* Abschnitt 3: Story ("Mehr als eine Party") */
.sed-story{ padding:64px 0; }
.sed-story-grid{ display:grid; grid-template-columns:1.2fr 1fr; gap:56px; align-items:start; }
.sed-story-text h2{ margin:8px 0 18px; font-size:clamp(30px, 4.5vw, 48px); }
.sed-pull-quote{
  margin:28px 0 0; padding-left:20px; border-left:3px solid var(--sed-pink);
  font-size:19px; font-style:italic; color:var(--sed-cream); line-height:1.5;
}
.sed-stat-grid{ display:grid; grid-template-columns:1fr 1fr; gap:20px; }
.sed-stat-box{
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line); border-radius:16px;
  padding:26px 20px; text-align:center;
}
.sed-stat-num{ font-family:'Anton', sans-serif; font-size:clamp(30px, 4vw, 44px); color:var(--sed-cyan); line-height:1; margin-bottom:8px; }
.sed-stat-label{ font-family:'IBM Plex Mono', monospace; font-size:11px; font-weight:600; color:var(--sed-muted); text-transform:uppercase; letter-spacing:0.05em; }
@media (max-width:860px){ .sed-story-grid{ grid-template-columns:1fr; } }

/* Abschnitt 4: Warum dabei sein.
   Karten enthalten jetzt nur noch eine kurze Headline (keine Nummer, kein
   Subtext mehr) — display:flex + align-items:center zentriert die
   Headline vertikal in der Karte. Gleiche Kartenhöhe trotz
   unterschiedlich langer Texte kommt automatisch vom umgebenden CSS-Grid
   (.sed-why-grid): Grid-Items strecken sich per Default auf die Höhe des
   höchsten Items in der Zeile (align-items:stretch), die längste Karte
   (aktuell "Günstiger kommst du an kein Bier...") bestimmt also die Höhe
   für alle vier. Padding und Schriftgröße gegenüber vorher leicht erhöht,
   damit die jetzt textärmeren Karten nicht zu leer wirken (live geprüft). */
.sed-why{ padding:64px 0; }
.sed-why-grid{ display:grid; grid-template-columns:repeat(4, 1fr); gap:24px; }
.sed-why-card{
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line);
  border-left:3px solid var(--sed-coral); border-radius:4px 18px 4px 18px; padding:34px 26px;
  display:flex; align-items:center;
}
/* Textfarbe auf dasselbe Pink wie die Hero-Headline ("Ohne Kompromisse.")
   umgestellt — dieselbe Variable var(--sed-pink), kein neuer Ton. Der
   linke Akzentrand (Coral/Cyan/Pink/Purple je Karte) bleibt unverändert,
   da border-left-color über die separaten .sed-why-coral/-cyan/-pink/
   -purple-Klassen gesetzt wird, hier nicht angefasst. Selektor bewusst
   mit .sed-why-Präfix (2 Klassen + Tag) statt nur .sed-why-card h3,
   damit die Regel zuverlässig gegen den globalen Theme-Override-Schutz
   (.sed-home h3{ color:var(--sed-cream) !important }) gewinnt, statt sich
   auf die Reihenfolge im Stylesheet zu verlassen. */
.sed-why .sed-why-card h3{ font-size:24px; line-height:1.3; margin:0; color:var(--sed-pink) !important; }
.sed-why-coral{ border-left-color:var(--sed-coral); }
.sed-why-cyan{ border-left-color:var(--sed-cyan); }
.sed-why-pink{ border-left-color:var(--sed-pink); }
.sed-why-purple{ border-left-color:var(--sed-purple); }
@media (max-width:960px){ .sed-why-grid{ grid-template-columns:1fr 1fr; } }
@media (max-width:600px){ .sed-why-grid{ grid-template-columns:1fr; } }

/* Abschnitt 5: Galerie-Teaser (Platzhalter-Karten im Plakat-Rahmen-Stil) */
.sed-gallery{ padding:64px 0; }

/* Instagram/Facebook mittig zwischen Headline und Kacheln, mit Abstand zu
   beiden Seiten. Diese Klasse regelt NUR Ausrichtung und Außenabstand der
   Leiste — wie die Knöpfe selbst aussehen, steht bei .sed-social-pill und
   gilt seitenweit gleich. Bis 08/2026 standen hier nackte 44px-Icons ohne
   Beschriftung; ein Icon allein sagt aber nicht, wohin es führt. Die
   Kontaktseite hatte die Pille bereits, sie ist jetzt der Standard. */
.sed-gallery-social{ display:flex; justify-content:center; flex-wrap:wrap; gap:12px; margin:36px 0 40px; }

.sed-gallery-grid{ display:grid; grid-template-columns:repeat(4, 1fr); gap:20px; }
.sed-gallery-card{
  aspect-ratio:3/4; border-radius:4px; border:2px solid var(--sed-line); position:relative; overflow:hidden;
  background:var(--sed-grid), linear-gradient(160deg, rgba(255,79,63,0.35), rgba(178,63,240,0.3)), var(--sed-bg-panel);
  display:flex; align-items:flex-end; padding:16px; text-decoration:none; color:inherit;
  transition:border-color 0.18s ease, transform 0.18s ease;
}
/* Überfahr-Zustand bewusst identisch zu den Zeilen der Galerie-Übersicht
   (.sed-gal-row in gallery.css): rosa Rand, zwei Pixel anheben, Foto zieht
   leicht an. Beide führen an dasselbe Ziel — sie sollten sich auch gleich
   anfühlen. Bis 08/2026 hatten die Kacheln gar keinen Überfahr-Zustand;
   dass sie überhaupt anklickbar sind, war nur am Zeiger zu erkennen. */
.sed-gallery-card:hover{
  border-color:rgba(255,46,126,0.55); transform:translateY(-2px);
}
.sed-gallery-card:hover .sed-gallery-photo{ transform:scale(1.04); }
/* Vier leicht unterschiedliche Verläufe (Coral/Pink, Cyan/Purple, Pink/Purple,
   Coral/Cyan) statt eines identischen Gradients, damit die Platzhalter-Karten
   optisch auseinanderzuhalten sind, in Anlehnung an die Why-Card-Akzentfarben.
   :nth-child zählt nach Position, nicht nach Tag — greift also unverändert,
   ob die Kachel als <a> (mit Link) oder <div> (ohne Link) gerendert wird. */
.sed-gallery-card:nth-child(1){ background:var(--sed-grid), linear-gradient(160deg, rgba(255,79,63,0.4), rgba(255,46,126,0.3)), var(--sed-bg-panel); }
.sed-gallery-card:nth-child(2){ background:var(--sed-grid), linear-gradient(160deg, rgba(63,240,214,0.35), rgba(178,63,240,0.3)), var(--sed-bg-panel); }
.sed-gallery-card:nth-child(3){ background:var(--sed-grid), linear-gradient(160deg, rgba(255,46,126,0.4), rgba(178,63,240,0.3)), var(--sed-bg-panel); }
.sed-gallery-card:nth-child(4){ background:var(--sed-grid), linear-gradient(160deg, rgba(255,79,63,0.35), rgba(63,240,214,0.3)), var(--sed-bg-panel); }
/* Foto füllt die Kachel, sobald die Galerie ein Titelbild hat (Meta
   sed_cover_attachment_id, siehe sed_gallery_get_cover_id()); der
   Farbverlauf der jeweiligen :nth-child-Regel bleibt als Hintergrund
   erhalten und ist damit automatisch der Fallback. Scrim sorgt für Label-Kontrast auf echten
   Fotos — identisches Prinzip wie bei den Floor-Karten. */
.sed-gallery-photo{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0; transition:transform 0.4s ease; }
.sed-gallery-scrim{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg, transparent 40%, rgba(18,10,23,0.85) 100%);
}
.sed-gallery-image-placeholder{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); z-index:1;
  font-family:'IBM Plex Mono', monospace; font-size:11px; font-weight:600;
  letter-spacing:0.06em; text-transform:uppercase; color:var(--sed-cream); opacity:0.7;
  white-space:nowrap;
}
.sed-gallery-label{
  position:relative; z-index:2;
  font-family:'IBM Plex Mono', monospace; font-size:12px; font-weight:600;
  text-transform:uppercase; letter-spacing:0.04em; color:var(--sed-cream);
}
.sed-gallery-more{ text-align:center; margin-top:32px; }
@media (max-width:860px){ .sed-gallery-grid{ grid-template-columns:1fr 1fr; } }

/* Abschnitt 6: Partner-Strip */
.sed-partner-strip{ padding:40px 0; border-top:1px solid var(--sed-line); border-bottom:1px solid var(--sed-line); }
/* Eyebrow-Überschrift im selben Stil wie andere kleine Sektions-Labels
   (z. B. "STIMMUNGSBILD", "ÜBER UNS") — bewusst dieselbe .sed-eyebrow-
   Klasse wiederverwendet statt eines neuen Stils, für Konsistenz.
   Zentriert, da der Partner-Strip selbst zentriert ausgerichtet ist. */
.sed-partner-strip-head{ display:block; text-align:center; margin-bottom:24px; }
/* row-gap: 28px statt der ursprünglichen 22px — nötig für die 44px-Touch-
   Targets weiter unten (WCAG 2.5.5). Rechnung: Zeilenbox 20,8px + 2 × 12px
   Padding = 44,8px hohe Trefferzone; das Zeilenraster muss mindestens so
   groß sein, sonst überlappen sich die Zonen vertikal benachbarter Partner.
   20,8 + 24 = 44,8 wäre exakt bündig — reicht aber NICHT, weil die Labels
   per .sed-rotate-* gekippt sind und ihre gedrehten Ecken bis zu 3,9px über
   die eigene Zeile hinausragen (gemessen: -3,91px Überlappung bei gap 24).
   Erst 28px ergibt durchgehend Abstand ≥ 0 (gemessen: +0,09px im engsten
   Paar ZAKK/Metropol). Kostet auf Mobile 12px Gesamthöhe im Strip.
   Auf Desktop ohne jede Wirkung: dort läuft der Strip einzeilig. */
.sed-partner-strip-inner{
  display:flex; flex-wrap:wrap; justify-content:center; align-items:center;
  column-gap:36px; row-gap:28px;
}
/* Sechs Partner passen auf Desktop noch in eine Zeile. Sobald der Platz nicht
   mehr reicht, bewusst auf ein gerades Raster umschalten (3+3, dann 2+2+2)
   statt den Flex-Umbruch laufen zu lassen: der würde bei sechs Elementen eine
   5+1-Zeile mit einzelnem "Waisen"-Partner erzeugen. justify-items:center hält
   die unterschiedlich breiten Labels in ihrer Spalte mittig. */
@media (max-width:960px){
  .sed-partner-strip-inner{
    display:grid; grid-template-columns:repeat(3, auto);
    justify-content:center; justify-items:center;
  }
}
@media (max-width:600px){
  .sed-partner-strip-inner{ grid-template-columns:repeat(2, auto); }
}
.sed-partner-strip-inner span,
.sed-partner-strip-inner a{
  display:inline-block; font-family:'IBM Plex Mono', monospace; font-size:13px; font-weight:600;
  letter-spacing:0.06em; color:var(--sed-muted); text-transform:uppercase; text-decoration:none;
  transition:color 0.15s ease;
}
.sed-partner-strip-inner a:hover{ color:var(--sed-cream); }
/* Touch-Target 44 × 44px (WCAG 2.5.5 / Apple HIG) OHNE sichtbare Änderung:
   Das Padding vergrößert die Trefferfläche auf 20,8 + 24 = 44,8px Höhe, das
   exakt gegengleiche negative Margin nimmt diesen Zuwachs für das Layout
   wieder heraus — Flex-/Grid-Zeile bleibt 20,8px hoch, die Labels stehen
   pixelgenau dort, wo sie vorher standen. Nur auf <a>, nicht auf <span>:
   Partner ohne hinterlegten ACF-Link werden als <span> gerendert und sind
   gar nicht klickbar. Breite braucht kein Padding — das schmalste Label
   (InQueery) ist bereits 68,6px breit. */
.sed-partner-strip-inner a{ padding:12px 0; margin:-12px 0; }

/* Abschnitt 7: Footer-CTA + Kontakt-Footer */
.sed-footer-cta{ padding:80px 0; text-align:center; }
.sed-footer-cta-inner h2{ font-size:clamp(32px, 6vw, 64px); margin:0 0 28px; line-height:1.08; }

/* Newsletter-Anmeldung. Absichtlich generisch nach Element-Typ statt nach
   Klassennamen gestylt (input[type=email]/[type=submit]) — stammt noch aus
   der MC4WP-Zeit, in der das Markup je nach Plugin-Version variieren konnte.
   Das plugin-eigene Formular (sed_render_newsletter_form(), Abschnitt 9b in
   schamlos-event-design.php) ist genau auf diese Selektoren hin gebaut und
   kommt deshalb ohne eigene Regeln aus; einzig die Statusmeldung unten ist
   neu hinzugekommen. */
.sed-newsletter{ padding:56px 0; text-align:center; border-top:1px solid var(--sed-line); }
.sed-newsletter-inner{ max-width:520px; margin:0 auto; }
.sed-newsletter-inner h2{ font-size:clamp(26px, 4vw, 38px); margin:0 0 10px; }
.sed-newsletter-inner .sed-sub{ margin:0 auto 24px; }
.sed-newsletter-form{ display:flex; flex-wrap:wrap; justify-content:center; gap:12px; }
.sed-newsletter-form form{ display:flex; flex-wrap:wrap; justify-content:center; gap:12px; width:100%; }
.sed-newsletter-form input[type="email"],
.sed-newsletter-form input[type="text"]{
  flex:1 1 260px; min-width:0; padding:14px 18px; border-radius:100px;
  border:1.5px solid var(--sed-line); background:var(--sed-bg-panel);
  color:var(--sed-cream); font-family:'Plus Jakarta Sans', sans-serif; font-size:15px;
}
.sed-newsletter-form input[type="email"]::placeholder,
.sed-newsletter-form input[type="text"]::placeholder{ color:var(--sed-muted); }
.sed-newsletter-form input[type="submit"],
.sed-newsletter-form button[type="submit"]{
  flex:0 0 auto; display:inline-flex; align-items:center; gap:8px; padding:14px 30px;
  font-weight:700; font-size:15px; cursor:pointer; border:none; text-decoration:none;
  background:linear-gradient(120deg, var(--sed-coral), var(--sed-pink));
  color:#1A0806; border-radius:4px 22px 4px 22px; transform:rotate(-1deg);
  transition:transform 0.15s ease;
}
.sed-newsletter-form input[type="submit"]:hover,
.sed-newsletter-form button[type="submit"]:hover{ transform:rotate(-1deg) translateY(-2px) scale(1.02); }
.sed-newsletter-missing{ color:var(--sed-muted); font-family:'IBM Plex Mono', monospace; font-size:13px; }
/* Statusmeldung nach dem Absenden ("bitte E-Mail bestätigen", "du bist
   dabei", Fehler). Sitzt im selben Flex-Container wie das Formular, daher
   flex-basis 100%: die Meldung nimmt immer eine eigene Zeile ein, auch wenn
   bei einem Fehler zusätzlich das Formular darunter stehen bleibt. Der
   Farbakzent liegt bewusst nur auf dem Rahmen — Fläche und Textfarbe bleiben
   wie bei den übrigen Panels der Seite. */
.sed-newsletter-notice{
  flex:1 1 100%; margin:0; padding:14px 20px; border-radius:14px;
  border:1px solid var(--sed-line); background:var(--sed-grid), var(--sed-bg-panel);
  color:var(--sed-cream); font-size:15px; line-height:1.5; text-align:center;
}
.sed-newsletter-notice-confirmed{ border-color:rgba(63,240,214,0.45); }
.sed-newsletter-notice-error{ border-color:rgba(255,79,63,0.55); }
.sed-newsletter-privacy{ margin:18px 0 0; font-size:12px; color:var(--sed-muted); }
.sed-newsletter-privacy a{ color:var(--sed-muted); text-decoration:underline; }
.sed-newsletter-privacy a:hover{ color:var(--sed-cream); }
@media (max-width:600px){
  .sed-newsletter-form input[type="submit"],
  .sed-newsletter-form button[type="submit"]{ flex:1 1 100%; justify-content:center; }
}

/* ==========================================================================
   "Tickets noch nicht verfügbar"-Übergangsseite (/tickets/, siehe
   templates/tickets-placeholder.php). .sed-tickets selbst teilt sich
   background/color/font-family bereits mit .sed-event/.sed-home (siehe
   Regel ganz oben in dieser Datei) — hier nur die seitenspezifische
   Struktur (Logo, Text, hervorgehobene Zeile). Social-Icons
   (.sed-gallery-social) und Newsletter (.sed-newsletter) sind 1:1
   wiederverwendete Startseiten-Komponenten, brauchen daher keine eigenen
   Regeln hier.
   ========================================================================== */
.sed-tickets-inner{ padding:96px 32px 72px; text-align:center; }
/* width bewusst deutlich unter der Quellbild-Breite (1000px, siehe
   logo-schamlos-einhorn.png) gehalten, damit auch bei 2x-Retina-Displays
   (effektive Pixelbreite = width*2) keine sichtbare Unschärfe entsteht.
   max-width als Sicherheitsnetz für sehr schmale Screens, nicht als
   primäre Steuerung der Größe (siehe Mobile-Override unten). */
.sed-tickets-logo{ width:340px; max-width:80%; height:auto; margin:0 auto 32px; display:block; }
.sed-tickets-inner h1{ font-size:clamp(34px, 6vw, 56px); margin:0 0 28px; }
.sed-tickets-text{ max-width:560px; margin:0 auto; }
.sed-tickets-text p{ font-size:17px; color:var(--sed-muted); margin:0 0 18px; }
.sed-tickets-text p:last-child{ margin-bottom:0; }
/* "Instagram. Facebook. Newsletter." als eigener, hervorgehobener Absatz —
   analog zum Karten-Stil der "Warum Schamlos"-Karten (.sed-why-card):
   gleicher Grid-Textur-/Panel-Hintergrund, linker Akzentrand, abgerundete
   Ecke unten rechts, knapper Stakkato-Satz in der Anton-Display-Schrift.

   GEMEINSAM GENUTZT mit der Wartungsseite (.sed-maintenance-highlight,
   siehe eigener Block weiter unten): dort steht derselbe Satz im selben
   Stil, deshalb eine gemeinsame Regel statt zweier identischer Kopien —
   wer den Look hier ändert, ändert ihn bewusst auf beiden Seiten. */
.sed-tickets-highlight,
.sed-maintenance-highlight{
  background:var(--sed-grid), var(--sed-bg-panel); border:1px solid var(--sed-line); border-left:3px solid var(--sed-coral);
  border-radius:4px 18px 4px 18px; padding:18px 22px; margin:8px 0 22px;
  font-family:'Anton', sans-serif; font-size:22px; text-transform:uppercase; letter-spacing:0.01em; color:var(--sed-pink);
}
@media (max-width:600px){
  .sed-tickets-inner{ padding:64px 24px 56px; }
  .sed-tickets-logo{ width:240px; margin-bottom:24px; }
  .sed-tickets-text p{ font-size:16px; }
  .sed-tickets-highlight,
  .sed-maintenance-highlight{ font-size:19px; padding:16px 18px; }
}

/* ==========================================================================
   Wartungsseite (siehe templates/maintenance-page.php und Abschnitt 12 im
   Plugin-Hauptfile). Optisch bewusst die kleine Schwester der
   /tickets/-Seite: gleicher Aufbau (Logo -> Headline -> hervorgehobener
   CTA-Balken -> Fließtext -> Social-Icons), gleiche Maße, gleicher
   CTA-Balken (gemeinsame Regel, siehe oben).

   Anders als alle übrigen Vorlagen läuft diese Seite OHNE Theme (kein
   get_header()/get_footer(), Begründung im Template) — deshalb hier zwei
   Dinge, die sonst das Theme mitbringt:
   1. .sed-maintenance-body{ margin:0 } gegen den Browser-Standardrand von
      8px am <body>. Bewusst über eine eigene Klasse am <body>-Tag statt
      über :has() — dieses Template setzt den <body>-Tag selbst, die Klasse
      ist also garantiert vorhanden und wirkt in jedem Browser.
   2. Kein einziges !important im ganzen Block: die Theme-Override-Regeln
      weiter unten in dieser Datei brauchen es, weil dort Theme-CSS
      dagegenhält. Hier gibt es kein Theme-CSS, gegen das anzukommen wäre.
   ========================================================================== */
.sed-maintenance-body{ margin:0; }

/* Vertikal zentriert über die volle Bildschirmhöhe (ohne Header/Footer
   wirkt die Seite sonst nach oben gerutscht). margin:auto auf dem
   Flex-Kind statt align-items:center auf dem Container: bei Inhalten, die
   höher sind als der Viewport (schmale Handys, geöffnete Tastatur beim
   Newsletter-Feld), bleibt so der obere Rand erreichbar, statt
   abgeschnitten zu werden — der bekannte Fallstrick von zentrierten
   Flex-Containern. */
.sed-maintenance{ min-height:100vh; display:flex; }
.sed-maintenance-inner{ margin:auto; padding:72px 32px; text-align:center; }

/* Maße 1:1 von .sed-tickets-logo übernommen (dort steht die Begründung zur
   Breite gegenüber der Quellbild-Auflösung). */
.sed-maintenance-logo{ width:340px; max-width:80%; height:auto; margin:0 auto 32px; display:block; }
.sed-maintenance-inner h1{ font-size:clamp(34px, 6vw, 56px); margin:0 0 20px; }
.sed-maintenance-lead{ font-size:19px; color:var(--sed-muted); margin:0 auto 26px; max-width:560px; }

/* Gemeinsame Breite für CTA-Balken, Formular und Fließtext, damit die drei
   Blöcke eine saubere Mittelachse bilden. margin hier vollständig
   ausgeschrieben, weil die gemeinsame Regel oben margin:8px 0 22px setzt —
   die seitlichen "auto" müssen die 0 überschreiben. */
.sed-maintenance-highlight{ max-width:560px; margin:8px auto 22px; }
.sed-maintenance-form{ max-width:560px; margin:0 auto; }
.sed-maintenance-legal{ max-width:560px; margin:14px auto 0; }
.sed-maintenance-legal-sep{ margin:0 6px; opacity:0.6; }
.sed-maintenance-text{ max-width:560px; margin:30px auto 0; }
.sed-maintenance-text p{ font-size:17px; color:var(--sed-muted); margin:0 0 18px; }
.sed-maintenance-text p:last-child{ margin-bottom:0; }
.sed-maintenance .sed-gallery-social{ margin:32px 0 0; }

@media (max-width:600px){
  .sed-maintenance-inner{ padding:56px 24px; }
  .sed-maintenance-logo{ width:240px; margin-bottom:24px; }
  .sed-maintenance-lead{ font-size:17px; }
  .sed-maintenance-text p{ font-size:16px; }
}

.sed-home-footer{ padding:56px 0 28px; }
.sed-home-footer-grid{
  display:grid; grid-template-columns:repeat(3, 1fr); gap:40px; margin-bottom:36px;
  max-width:820px; margin-left:auto; margin-right:auto; text-align:center;
}
.sed-home-footer-title{ font-size:16px; margin:0 0 12px; }
.sed-home-footer-col p{ font-size:13px; font-weight:500; color:var(--sed-muted); line-height:1.7; margin:0; }
/* Touch-Target 44 × 44px für die Social-Spalte (Instagram, Facebook,
   Impressum, Datenschutz, Cookie-Einstellungen). Hier ist der Zuwachs
   BEWUSST sichtbar und nicht per negativem Margin kaschierbar: die fünf
   Links stehen durch <br> getrennt untereinander im 22,1px-Zeilenraster
   (line-height 1.7 × 13px). Zonen von 44px hätten sich dort zu je 50%
   überlappt — jeder zweite Tap wäre beim Nachbarlink gelandet, also
   schlechter als der Zustand vorher. Der Zeilenabstand MUSS also mit
   wachsen; die Spalte wird dadurch von 110px auf 220px hoch.

   inline-flex + min-height statt Padding, weil die Zeilenbox dadurch
   automatisch exakt 44px hoch wird (die Baseline des zentrierten Textes
   zieht die Zeile auf die Boxhöhe) — Raster und Trefferzone sind so
   deckungsgleich: 44px Zone bei 44px Raster, bündig ohne Überlappung.
   min-width ist reine Absicherung, das schmalste Label (Instagram) ist
   bereits 62,6px breit. Schriftgröße, Farbe und Textinhalt unverändert.

   Gilt automatisch auch für die Rechtstext-Seiten: legal-page.php nutzt
   denselben Footer-Block mit denselben Klassen (siehe Kommentar dort). */
/* Der Cookie-Knopf MUSS hier mitgenannt werden: Er ist ein <button>
   (Complianz hört nur auf button.cmplz-manage-consent), die Regel darüber
   trifft aber nur <a>. Ohne ihn blieb seine Zeilenbox bei 22,1px statt
   44px — der Abstand zwischen "Datenschutz" und "Cookie-Einstellungen"
   war dadurch halb so groß wie alle anderen Zeilenabstände der Spalte,
   und seine Trefferfläche verfehlte die 44px, die hier sonst überall
   gelten. Klassenselektor schlägt das padding:0 aus
   cookie-banner-cmplz.css (0,2,0 gegen 0,1,0), unabhängig von der
   Ladereihenfolge. */
.sed-home-footer-col a,
.sed-home-footer-col .sed-cmplz-consent-link{
  color:var(--sed-muted); text-decoration:none;
  display:inline-flex; align-items:center; justify-content:center;
  min-width:44px; min-height:44px;
}
.sed-home-footer-col a:hover{ color:var(--sed-cream); }
.sed-home-footer-copyright{
  font-family:'IBM Plex Mono', monospace; font-size:12px; color:var(--sed-muted);
  text-align:center; border-top:1px solid var(--sed-line); padding-top:24px;
}
@media (max-width:760px){ .sed-home-footer-grid{ grid-template-columns:1fr; gap:28px; } }

/* Team-Login im Fuß der Kontaktseite (sed_einlass_render_footer_login()
   in includes/akkreditierung-einlass.php — nur dort eingebunden).
   -------------------------------------------------------------------------
   Bewusst in der Optik der Copyright-Zeile direkt darüber (12px Mono,
   gedämpfte Farbe): Zugeklappt ist es nur ein Wort und liest sich wie ein
   weiterer Rechtstext-Link, nicht wie ein Nutzerkonto-Feature. Der
   Marker des <details> ist ausgeblendet — der Pfeil würde das Wort als
   aufklappbares Element verraten und Neugier wecken; wer den Zugang
   kennt, findet ihn auch so. Knopf und Eingaben bekommen ihre Farben
   ausdrücklich gesetzt statt geerbt — dieselbe Lehre wie bei den
   Fuß-Knöpfen der Galerie: Theme-Resets mit eigenen hover-Farben auf
   nackten Elementselektoren schlagen sonst zu. */
.sed-team-login{
  margin-top:14px; text-align:center;
  font-family:'IBM Plex Mono', monospace; font-size:12px; color:var(--sed-muted);
}
.sed-team-login summary{
  display:inline-block; cursor:pointer; padding:10px 12px;
  list-style:none;
}
.sed-team-login summary::-webkit-details-marker{ display:none; }
.sed-team-login summary:hover{ color:var(--sed-cream); }
.sed-team-login a{ color:var(--sed-muted); text-decoration:underline; display:inline-block; padding:10px 12px; }
.sed-team-login a:hover{ color:var(--sed-cream); }
.sed-team-login-form{
  margin:8px 0 0; display:flex; gap:8px; justify-content:center;
  align-items:center; flex-wrap:wrap;
}
.sed-team-login-form input{
  width:170px; padding:9px 12px; border-radius:8px; box-sizing:border-box;
  background:var(--sed-bg-panel); color:var(--sed-cream);
  border:1px solid var(--sed-line); font:inherit;
}
.sed-team-login-form button{
  padding:9px 16px; border-radius:100px; cursor:pointer; font:inherit;
  background:none; color:var(--sed-muted); border:1px solid var(--sed-line);
}
.sed-team-login-form button:hover{ color:var(--sed-cream); border-color:var(--sed-cream); }
.sed-team-login-notice{ margin:10px 0 0; color:#FF4F3F; }

/* Zeilenabstand der Spalten Schamlos + Kontakt (nur im 3-spaltigen Layout).
   -------------------------------------------------------------------------
   Die Social-Spalte ist durch die 44px-Touch-Targets (siehe oben) 220px
   hoch, Schamlos und Kontakt standen weiter im 22,1px-Raster bei 66,3
   bzw. 88,4px — die ersten beiden Spalten wirkten dadurch oben
   zusammengedrängt. 26px öffnet die Fließtexte spürbar (genau das
   2,0-fache der 13px Schriftgröße), ohne dass der Schamlos-Satz in drei
   lose Zeilen zerfällt. Schriftgröße und Textinhalt bleiben unverändert.

   Bewusst NICHT auf exakte Spaltengleichheit gerechnet. Das war die
   vorherige Fassung (73,33px bzw. 55px = 220px geteilt durch die
   Zeilenzahl) — sie traf die Höhe auf 0,1px genau, ließ den
   Schamlos-Absatz aber wie drei unzusammenhängende Zeilen wirken.
   Drei Zeilen können 220px bei lesbarem Abstand nicht füllen: der
   Leerraum unter dem Text sinkt von 153,7px (Ausgangszustand) nur auf
   142,0px. Dieser Rest bleibt bewusst stehen.

   Kein padding-bottom und kein Spacer nötig: die Spalten sind
   Grid-Items, deren Zeilenhöhe die höchste Spalte (Social) bestimmt.
   Schamlos und Kontakt werden auf diese Höhe gestreckt, ihr Text sitzt
   oben, der Rest steht von selbst leer.

   Ein Festwert für beide Spalten, deshalb genügt eine Media Query: die
   frühere Fassung brauchte einen zweiten Breakpoint bei 761–777px, weil
   die Kontakt-Spalte dort auf 5 Zeilen umbricht und für exakt 220px
   einen anderen Teiler gebraucht hätte. Ohne Höhenrechnung ist die
   Zeilenzahl gleichgültig.

   Unter 761px greift nichts davon: dort stapelt das Grid auf eine
   Spalte (Media Query direkt darüber), die Spalten stehen also gar
   nicht mehr nebeneinander.

   Gilt wie der restliche Footer-Block auch für legal-page.php: gleiche
   Klassen, gleiche Spaltenreihenfolge, gleiche Texte. */
@media (min-width:761px){
  .sed-home-footer-col:nth-child(1) p,
  .sed-home-footer-col:nth-child(2) p{ line-height:26px; }
}

/* ==========================================================================
   Rechtstext-Seiten: Impressum + Datenschutzerklärung
   (siehe templates/legal-page.php und sed_legal_page_template() im
   Plugin-Hauptfile). Ruhige, gut lesbare Lesekarte auf dem üblichen dunklen
   Seitenhintergrund — bewusst OHNE Anton-Display-Schrift, Rainbow-Ticker
   oder Akzentfarben: hier soll niemand "angeschrien", sondern ein
   Rechtstext gelesen werden.

   Die Hex-Werte in diesem Block stammen 1:1 aus dem abgestimmten Mockup und
   stehen deshalb ausnahmsweise direkt statt als var(--sed-*). Sie liegen
   sehr nah an den bestehenden Tokens (#F9E9D9 ~ --sed-cream, #D9C9CE ~
   --sed-muted, #1E1123 ~ --sed-bg-panel, #57D9D4 ~ --sed-cyan) — wer das
   später vereinheitlichen will, kann sie gefahrlos gegen die Variablen
   tauschen, der Unterschied ist minimal.

   Zum !important: Der Seiteninhalt kommt aus dem WordPress-Editor und
   besteht aus nackten h1/h2/h3/p/a-Tags — also genau den Selektoren, die
   das Yoox-Theme site-weit mit eigener Typografie und teils selbst mit
   !important belegt (z. B. color:#737980 !important). Ohne Gegenwehr würde
   der Rechtstext dieselbe dunkle Theme-Schriftfarbe erben, die auf dem
   dunklen Untergrund praktisch unsichtbar ist — exakt der Fehler, den
   diese Vorlage behebt. Gleiches Muster wie beim bereits bestehenden
   "Theme-Override-Schutz" weiter unten in dieser Datei.
   ========================================================================== */

/* padding-top hält die Karte unter dem Theme-Header frei: der ist
   position:absolute (steht also NICHT im Textfluss) und live gemessen
   151px hoch auf Desktop bzw. 100px auf Mobile — die Werte hier mit etwas
   Luft darüber. */
.sed-legal{ padding:190px 20px 8px; }
.sed-legal-card{
  max-width:680px; margin:0 auto;
  background:#1E1123; border-radius:12px; padding:2.5rem 2rem;
}

.sed-legal-kicker{
  font-size:12px; color:#B8A8AE; text-transform:uppercase; letter-spacing:0.14em;
  font-weight:600; margin-bottom:10px;
}

.sed-legal-title{
  font-family:'Plus Jakarta Sans', sans-serif !important;
  font-size:26px !important; font-weight:500 !important; color:#F9E9D9 !important;
  text-transform:none !important; letter-spacing:0; line-height:1.3;
  margin:0 0 24px;
}

/* Überschriften INNERHALB des gepflegten Seiteninhalts (z. B. "Kontakt",
   "Handelsregister"): alle Ebenen gleich behandelt — die Rechtstexte nutzen
   h2 und h3 gemischt und ohne echte Hierarchie, unterschiedliche Größen
   würden dort nur unruhig wirken. */
.sed-legal-content h1,
.sed-legal-content h2,
.sed-legal-content h3,
.sed-legal-content h4,
.sed-legal-content h5,
.sed-legal-content h6{
  font-family:'Plus Jakarta Sans', sans-serif !important;
  font-size:15px !important; font-weight:500 !important; color:#F9E9D9 !important;
  text-transform:none !important; letter-spacing:0; line-height:1.45;
  margin:28px 0 8px;
}
.sed-legal-content h1:first-child,
.sed-legal-content h2:first-child,
.sed-legal-content h3:first-child{ margin-top:0; }

.sed-legal-content,
.sed-legal-content p,
.sed-legal-content li{
  font-family:'Plus Jakarta Sans', sans-serif !important;
  font-size:14px !important; line-height:1.7 !important; color:#D9C9CE !important;
  text-align:left !important;
}
.sed-legal-content p{ margin:0 0 14px; }
.sed-legal-content p:last-child{ margin-bottom:0; }
.sed-legal-content ul,
.sed-legal-content ol{ margin:0 0 14px; padding-left:20px; }
.sed-legal-content li{ margin-bottom:6px; }
.sed-legal-content strong,
.sed-legal-content b{ color:#F9E9D9; font-weight:600; }
/* overflow-wrap, weil die Datenschutzerklärung lange, nicht umbrechbare
   URLs als Linktext enthält (z. B. Google-Datenschutzlinks) — ohne das
   würden sie auf Mobile aus der Karte laufen und von dem globalen
   html/body{overflow-x:hidden} weiter oben schlicht abgeschnitten. */
.sed-legal-content a{
  color:#57D9D4 !important; text-decoration:underline;
  overflow-wrap:anywhere; word-break:break-word;
}
.sed-legal-content a:hover{ color:#F9E9D9 !important; }

.sed-legal-back{
  margin-top:32px; padding-top:20px; border-top:1px solid #3A2740;
}
.sed-legal-back a{
  font-size:13px; color:#57D9D4 !important; text-decoration:underline;
}
.sed-legal-back a:hover{ color:#F9E9D9 !important; }

@media (max-width:600px){
  .sed-legal{ padding:130px 16px 4px; }
  .sed-legal-card{ padding:2rem 1.25rem; border-radius:10px; }
  .sed-legal-title{ font-size:23px !important; }
}

/* ==========================================================================
   Kontaktseite (siehe templates/contact-page.php)

   Aufbau: eine schmale, linksbündige Spalte aus gleich gebauten Karten.
   Die Karten teilen sich bis auf zwei Ausnahmen alle Werte (.sed-contact-card);
   hervorgehoben wird allein die Gästelisten-Karte über die Zusatzklasse
   .sed-contact-card-highlight.

   ZUR SPEZIFITÄT DER LINKFARBEN: Die reset.css des Themes bringt
   "a:active, a:hover{ color:#336 }" mit (Dunkelblau) — das wiegt 0-1-1 und
   schlägt damit jede reine Klassenregel. Deshalb steht bei den Links dieser
   Seite die Farbe mit !important, und zwar bei Grundzustand UND Hover: Ein
   !important im Grundzustand allein würde den eigenen Hover mit erschlagen
   (eine !important-Deklaration gewinnt gegen jede normale, unabhängig von
   der Spezifität) — der Zustand wäre dann zwar nicht dunkelblau, aber eben
   auch tot. Gleiches Vorgehen wie bei .sed-legal-content a weiter oben.
   ========================================================================== */

.sed-contact{ padding:72px 0 8px; }
.sed-contact-inner{ max-width:680px; margin:0 auto; text-align:left; }

/* Schriftart, Gewicht, Großschreibung, Laufweite und Zeilenhöhe kommen aus
   .sed-h1 (Anton, siehe Typografie-Block ganz oben) — dieselbe Aufteilung,
   die die Galerie-Vorlagen mit .sed-h1 + .sed-gal-page-title fahren: die
   generische Klasse macht die Optik, die seiteneigene nur Größe und
   Abstände. Hier standen diese fünf Eigenschaften bis zum 18.08.2026 mit
   !important drin und hätten .sed-h1 wirkungslos gemacht — beide wiegen
   0-1-0, und diese Regel steht später in der Datei.

   color behält !important: Es kommt NICHT aus .sed-h1 (die setzt keine
   Farbe), und Theme-Typografie greift Überschriften mit eigener Spezifität
   an — siehe den Theme-Override-Schutz weiter unten. */
.sed-contact-title{
  font-size:clamp(32px, 5vw, 48px); color:var(--sed-cream) !important;
  margin:10px 0 28px;
}

/* Der einheitliche Abstand zwischen den Karten steckt bewusst im
   margin-bottom der Karte selbst und nicht in einem Flex-/Grid-gap am
   Container: Die Newsletter-Karte enthält mit dem Formular ein fremdes,
   an anderer Stelle gepflegtes Markup (sed_render_newsletter_form()) —
   ein Grid-Container würde dessen Innenleben mitlayouten. */
.sed-contact-card{
  background:var(--sed-bg-panel); border-radius:12px; padding:20px 22px;
  margin-bottom:16px;
}
.sed-contact-card:last-child{ margin-bottom:0; }

/* Abschnittsbeschriftung: dieselbe .sed-eyebrow wie überall auf der
   Website (Mono, Cyan, gesperrt), in den Karten nur eine Spur kleiner als
   das seitenweite Eyebrow über der Überschrift. */
.sed-contact-card .sed-eyebrow{ font-size:11px; display:block; margin-bottom:14px; }

.sed-contact-headline{
  font-family:'Plus Jakarta Sans', sans-serif !important;
  font-size:19px !important; font-weight:700 !important; color:var(--sed-cream) !important;
  text-transform:uppercase !important; letter-spacing:0.01em; line-height:1.25;
  margin:0 0 8px;
}
/* Nur die Newsletter-Headline. Sie ist wortgleich mit der Headline über dem
   Newsletter der Startseite und soll genauso aussehen, bekommt die
   Anton-Optik daher über .sed-h2. Hier steht deshalb ausschließlich, was
   .sed-h2 nicht liefert.

   Warum nicht .sed-contact-headline erweitern: Die trägt dieselben
   Schriftfestlegungen mit !important und wird von der Gästelisten-Headline
   weiter unten weiterhin gebraucht — dort bleibt es bewusst bei Plus
   Jakarta Sans, damit nicht zwei gleich laute Überschriften auf der Seite
   stehen. Eine gemeinsame Klasse könnte beides nicht auseinanderhalten.

   ZUR GRÖSSE — 23px, obwohl die Nachbar-Headline (.sed-contact-headline,
   Gästeliste) auf 19px steht: Anton läuft schmal und trägt über .sed-h2
   eine Zeilenhöhe von 1.04. Bei gleichen 19px belegte diese Zeile deshalb
   spürbar weniger Fläche als ihre Nachbarin (gemessen: Zeilenkasten 20 statt
   24px, Satzbreite 187 statt 255px) und wirkte dadurch untergeordnet,
   obwohl beide auf derselben Ebene stehen. 23px gleicht den Zeilenkasten
   praktisch exakt an: 23 × 1.04 = 23,91px gegenüber 19 × 1.25 = 23,75px.

   Nicht die Startseiten-Größe für dieselbe Zeile (clamp(26px, 4vw, 38px)):
   Die gilt für eine freistehende Sektion, nicht für eine Karte mit 20px
   Innenabstand. */
.sed-contact-headline-display{
  font-size:23px; color:var(--sed-cream) !important;
  margin:0 0 8px;
}
.sed-contact-text{
  font-size:14px; line-height:1.6; color:var(--sed-muted); margin:0 0 18px;
}

/* --- Adresse ------------------------------------------------------------ */

/* Umbruch auf schmalen Karten: Der Route-Knopf rutscht unter die Anschrift,
   statt sie zusammenzuquetschen. gap greift in beiden Zuständen. */
.sed-contact-address{
  display:flex; flex-wrap:wrap; align-items:center;
  justify-content:space-between; gap:16px;
}
.sed-contact-address-text{ display:flex; align-items:flex-start; gap:12px; }
.sed-contact-icon{ flex:0 0 auto; color:var(--sed-cyan); margin-top:1px; }
.sed-contact-venue{ font-size:15px; font-weight:700; color:var(--sed-cream); line-height:1.4; }
.sed-contact-street{ font-size:14px; color:var(--sed-muted); line-height:1.5; }

/* Outline-Knopf. Bewusst NICHT .sed-btn .sed-btn-ghost: deren Polsterung
   (16px 32px) ist auf freistehende Handlungsaufforderungen ausgelegt und
   würde die Kartenzeile auf mehr als die doppelte Höhe treiben. Rahmen,
   Radius und Farbe sind von dort übernommen, nur die Maße sind kleiner. */
.sed-contact-route{
  flex:0 0 auto; display:inline-flex; align-items:center; gap:6px;
  padding:9px 18px; border:1.5px solid var(--sed-line); border-radius:100px;
  font-size:14px; font-weight:700; text-decoration:none;
  color:var(--sed-cream) !important;
  transition:border-color 0.15s ease, transform 0.15s ease;
}
.sed-contact-route:hover{
  color:var(--sed-cream) !important; border-color:var(--sed-cyan); transform:translateY(-1px);
}

/* --- Social Media ------------------------------------------------------- */

.sed-contact-pills{ display:flex; flex-wrap:wrap; gap:12px; }
/* NICHT MEHR "contact": Diese Pille ist seit 08/2026 der seitenweite
   Standard für Social-Knöpfe (Startseite, Event-, Ticket- und
   Wartungsseite rufen dasselbe Markup über sed_render_social_pills()
   auf). Der Name der UMGEBENDEN Leiste bleibt dagegen kontextabhängig
   (.sed-contact-pills hier, .sed-gallery-social dort) — sie trägt nur
   Ausrichtung und Außenabstand, und die unterscheiden sich je Umfeld. */
.sed-social-pill{
  display:inline-flex; align-items:center; gap:10px;
  padding:8px 18px 8px 8px; border-radius:100px;
  background:rgba(255,246,236,0.03); border:1px solid var(--sed-line);
  font-size:14px; font-weight:600; text-decoration:none;
  color:var(--sed-cream) !important;
  transition:border-color 0.15s ease, transform 0.15s ease;
}
.sed-social-pill:hover{
  color:var(--sed-cream) !important; border-color:var(--sed-cyan); transform:translateY(-1px);
}
/* Instagram bringt seine Ecken im SVG selbst mit (rx=6), Facebook ist ein
   randloser Kreis — beide brauchen daher keine eigene Maske hier. */
.sed-social-pill-icon{ flex:0 0 auto; display:block; }

/* --- Anfragen und Kooperationen ----------------------------------------- */

.sed-contact-mail{ display:flex; align-items:center; gap:12px; }
.sed-contact-mail-link{
  font-size:16px; font-weight:700; text-decoration:none;
  color:var(--sed-coral) !important;
  overflow-wrap:anywhere;
}
.sed-contact-mail-link:hover{ color:var(--sed-cream) !important; text-decoration:underline; }
.sed-contact-company{
  margin:10px 0 0; font-size:13px; line-height:1.6; color:var(--sed-muted);
}

/* --- Newsletter --------------------------------------------------------- */

/* Die Komponente ist für die zentrierte Sektion der Startseite gebaut und
   wird hier nur umgestellt, nicht nachgebaut — siehe .sed-newsletter-form
   weiter oben, das Markup bleibt identisch.

   Zum Eingabefeld: Es trägt ab Werk background:var(--sed-bg-panel) — exakt
   die Farbe dieser Karte. Auf der Startseite sitzt das Formular auf dem
   Seitenhintergrund und hebt sich dadurch ab; in der Karte wäre nur noch
   der Rahmen zu sehen. Deshalb hier der dunklere Seitenton als Füllung,
   der das Feld in die Karte einsenkt statt es darauf zu legen. */
.sed-contact .sed-newsletter-form,
.sed-contact .sed-newsletter-form form{ justify-content:flex-start; }
.sed-contact .sed-newsletter-form input[type="email"]{ background:var(--sed-bg); }
.sed-contact .sed-newsletter-notice{ background:var(--sed-bg); text-align:left; }
.sed-contact .sed-newsletter-privacy{ margin:14px 0 0; text-align:left; }

/* --- Gästeliste --------------------------------------------------------- */

.sed-contact-card-highlight{
  background:var(--sed-bg-panel-2); border:1px solid var(--sed-cyan);
}
/* Der Knopf selbst kommt unverändert aus .sed-btn .sed-btn-primary. Einzig
   der Abstand nach oben gehört zur Karte und nicht zur Knopfklasse — die
   sitzt auf der ganzen Website in unterschiedlichen Umgebungen. */
.sed-contact-card-highlight .sed-btn{ margin-top:4px; }

@media (max-width:600px){
  .sed-contact{ padding:48px 0 4px; }
  .sed-contact-card{ padding:18px 18px; border-radius:10px; }
  /* Route-Knopf über die volle Breite, sobald er ohnehin umbrochen ist —
     sonst steht ein schmaler Knopf allein links unter der Anschrift. */
  .sed-contact-address{ align-items:flex-start; }
  .sed-contact-route{ width:100%; justify-content:center; }
}

/* Unter 600px stehen die Pillen über die volle Breite untereinander —
   bewusst an ALLEN Stellen gleich (vorher nur auf der Kontaktseite): Zwei
   Pillen nebeneinander passen dort zwar knapp, brechen aber je nach
   Schriftbreite unvorhersehbar um. Steht außerhalb des Kontaktseiten-
   Blocks darüber, weil die Regel nicht mehr an diese Seite gebunden ist. */
@media (max-width:600px){
  .sed-social-pill{ flex:1 1 100%; justify-content:center; padding:8px 18px; }
}

/* --- Akkreditierungs-Pop-up (Gästeliste) ---------------------------------

   Das Formular hinter dem Knopf "Jetzt akkreditieren". Markup und Logik
   stehen in includes/akkreditierung.php, das Verhalten in
   assets/js/akkreditierung-modal.js.

   ZWEI ÖFFNUNGSWEGE, UND DAS IST ABSICHT: Der Knopf ist ein echter Link auf
   die Kennung des Fensters. Ohne JavaScript öffnet allein der Zustand
   :target das Fenster — das Formular bleibt also benutzbar, wenn das Skript
   nicht geladen hat. Sobald das Skript läuft, setzt es die Klasse "sed-js"
   auf <html> und übernimmt mit .is-open. Der :target-Weg wird dann
   ABGESCHALTET, denn er ließe sich vom Schließen per Escape nicht
   beeindrucken: Die Kennung stünde weiter in der Adresse, und das Fenster
   ginge sofort wieder auf. Die Reihenfolge der vier Regeln unten ist
   deshalb nicht beliebig — "html.sed-js .sed-akkr-overlay" (0-2-1) muss
   ":target" (0-2-0) überstimmen, und ".is-open" (0-3-1) wiederum jene.

   ZU DEN FARBEN: Kartenhintergrund und Rahmen kommen aus dem abgenommenen
   Entwurf. #1D1023 ist zeichengleich mit var(--sed-bg-panel) und wird
   deshalb als Variable geschrieben, nicht als neuer Hex-Wert. #3F2C48 gibt
   es im Farbsatz bislang nicht — der Wert steht nur an dieser einen Stelle
   und bekommt keine eigene Variable, solange ihn nichts anderes braucht.

   ZU DEN !important BEI DEN LINKFARBEN: gleiche Begründung wie im
   Kontaktseiten-Block darüber — die reset.css des Themes bringt
   "a:active, a:hover{ color:#336 }" mit. */

.sed-akkr-overlay{
  display:none;
  position:fixed; inset:0; z-index:99000;
  align-items:flex-start; justify-content:center;
  padding:24px 16px;
  /* Abdunklung dunkler als der Seitenton, damit die Karte darunter nicht
     mehr mitliest. overscroll-behavior verhindert, dass die Seite hinter
     dem Fenster weiterscrollt, sobald das Formular an seinem Ende ist. */
  background:rgba(9,4,12,0.78);
  overflow-y:auto; overscroll-behavior:contain;
}
.sed-akkr-overlay:target{ display:flex; }
html.sed-js .sed-akkr-overlay{ display:none; }
html.sed-js .sed-akkr-overlay.is-open{ display:flex; }

/* Scrollsperre für die Seite dahinter, gleiche Machart wie bei der
   Galerie-Lightbox (body.sed-lb-open). */
body.sed-akkr-open{ overflow:hidden; }

.sed-akkr-modal{
  position:relative; width:100%; max-width:560px; margin:auto;
  background:var(--sed-bg-panel); border:1px solid #3F2C48; border-radius:16px;
  padding:28px 28px 24px;
  /* Farbe ausdrücklich gesetzt: Das Fenster hängt zwar in der Kontaktseite,
     die Schriftfarbe kommt dort aber von .sed-contact — bei einer künftigen
     Einbindung an anderer Stelle erbte es sonst das body{color:#333} des
     Themes und stünde dunkel auf dunkel. */
  color:var(--sed-cream); font-family:'Plus Jakarta Sans', sans-serif;
  box-shadow:0 24px 60px rgba(0,0,0,0.55);
}

.sed-akkr-close{
  position:absolute; top:10px; right:12px;
  display:inline-flex; align-items:center; justify-content:center;
  width:36px; height:36px; border-radius:50%;
  font-size:26px; line-height:1; text-decoration:none;
  color:var(--sed-muted) !important;
  transition:color 0.15s ease, background 0.15s ease;
}
.sed-akkr-close:hover,
.sed-akkr-close:focus-visible{
  color:var(--sed-cream) !important; background:rgba(255,246,236,0.08);
}

/* Gleiche Optik wie .sed-contact-headline, damit die Überschrift im Fenster
   und die auf der Karte dahinter auf derselben Ebene stehen. Eigene Klasse
   statt Mitbenutzung: .sed-contact-headline gehört zur Karte und soll nicht
   plötzlich zwei Orte bedienen. */
.sed-akkr-title{
  font-family:'Plus Jakarta Sans', sans-serif !important;
  font-size:19px !important; font-weight:700 !important; color:var(--sed-cream) !important;
  text-transform:uppercase !important; letter-spacing:0.01em; line-height:1.25;
  margin:0 44px 8px 0;
}
.sed-akkr-intro{ font-size:14px; line-height:1.6; color:var(--sed-muted); margin:0 0 20px; }

/* Zeile mit zwei Feldern. Nur column-gap, kein row-gap: Der senkrechte
   Abstand steckt im margin-bottom der Felder und gilt damit unverändert,
   sobald die beiden Felder auf schmalen Bildschirmen untereinander stehen.
   Der Umbruch braucht keine eigene Medienabfrage — flex-basis:200px sorgt
   dafür, dass zwei Felder unterhalb von rund 420px Fensterbreite von selbst
   umbrechen. */
.sed-akkr-row{ display:flex; flex-wrap:wrap; column-gap:14px; }
.sed-akkr-row .sed-akkr-field{ flex:1 1 200px; min-width:0; }

.sed-akkr-field{ margin-bottom:14px; }
/* Absicherung wie bei .sed-lb-nav[hidden] (gallery.css): Das Skript blendet
   das Begleitungsnamen-Feld über das hidden-Attribut aus. Heute setzt keine
   Regel ein display auf .sed-akkr-field, das Attribut wirkt also von selbst —
   aber jede später ergänzte display-Regel würde es lautlos überstimmen. */
.sed-akkr-field[hidden]{ display:none; }
.sed-akkr-field label,
.sed-akkr-fieldset legend{
  display:block; padding:0; margin-bottom:6px;
  font-family:'IBM Plex Mono', monospace; font-size:11px; font-weight:600;
  letter-spacing:0.05em; text-transform:uppercase; color:var(--sed-muted);
}
.sed-akkr-req{ color:var(--sed-pink); }
.sed-akkr-opt{ text-transform:none; letter-spacing:0; opacity:0.75; }

.sed-akkr-field input,
.sed-akkr-field select,
.sed-akkr-field textarea{
  width:100%; box-sizing:border-box; display:block;
  padding:11px 13px;
  background:var(--sed-bg); color:var(--sed-cream);
  border:1px solid var(--sed-line); border-radius:8px;
  font-family:'Plus Jakarta Sans', sans-serif; font-size:15px; line-height:1.4;
  -webkit-appearance:none; appearance:none;
}
.sed-akkr-field textarea{ resize:vertical; min-height:84px; }
.sed-akkr-field input::placeholder,
.sed-akkr-field textarea::placeholder{ color:var(--sed-muted); opacity:0.7; }
.sed-akkr-field input:focus,
.sed-akkr-field select:focus,
.sed-akkr-field textarea:focus{
  outline:none; border-color:var(--sed-cyan); box-shadow:0 0 0 3px rgba(63,240,214,0.18);
}

/* Der eigene Pfeil ersetzt den, den appearance:none entfernt hat. Als
   data:-URI und nicht als Datei: kein zusätzlicher Request, und die Farbe
   (%23C7B4CE = var(--sed-muted)) steckt direkt darin. Steht NACH der
   gemeinsamen Regel oben, weil deren background-Kurzschreibweise ein
   background-image sonst wieder zurücksetzen würde. */
.sed-akkr-field select{
  padding-right:36px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%23C7B4CE' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 13px center;
}
/* Das Auswahlmenü selbst zeichnet das Betriebssystem, nicht die Seite —
   ohne diese Zeile stünde in manchen Browsern heller Text auf hellem Grund. */
.sed-akkr-field select option{ background:var(--sed-bg); color:var(--sed-cream); }

/* --- Umschalter (Gast/Presse, Begleitung) ---
   Im Markup sind das echte Radiogruppen (fieldset + legend + input). Das
   Optionsfeld wird hier NUR unsichtbar gemacht, nicht entfernt: kein
   display:none und kein visibility:hidden, denn beides nähme ihm den Fokus
   und damit die Bedienung per Tastatur. Sichtbar ist die Beschriftung, die
   über ihr for-Attribut ohnehin das zugehörige Feld schaltet. */
.sed-akkr-fieldset{ border:none; margin:0 0 14px; padding:0; min-width:0; }
.sed-akkr-toggle{ display:flex; gap:8px; }
.sed-akkr-toggle input{
  position:absolute; width:1px; height:1px; opacity:0; margin:0; pointer-events:none;
}
.sed-akkr-toggle label{
  flex:1 1 0; margin:0; cursor:pointer; text-align:center;
  padding:11px 14px; border-radius:8px;
  border:1px solid var(--sed-line); background:var(--sed-bg);
  font-family:'Plus Jakarta Sans', sans-serif; font-size:14px; font-weight:600;
  text-transform:none; letter-spacing:0; color:var(--sed-muted);
  transition:border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
}
.sed-akkr-toggle label:hover{ border-color:var(--sed-cyan); color:var(--sed-cream); }
.sed-akkr-toggle input:checked + label{
  border-color:var(--sed-cyan); background:rgba(63,240,214,0.12); color:var(--sed-cream);
}
/* Der Fokusrahmen sitzt auf der Beschriftung, weil das Feld selbst
   unsichtbar ist — ohne diese Regel wäre bei Tastaturbedienung nicht zu
   erkennen, wo man gerade steht. */
.sed-akkr-toggle input:focus-visible + label{ outline:2px solid var(--sed-cyan); outline-offset:2px; }

.sed-akkr-submit{ margin-top:6px; }

.sed-akkr-privacy{ margin:14px 0 0; font-size:12px; line-height:1.6; color:var(--sed-muted); }
.sed-akkr-privacy a{ color:var(--sed-muted) !important; text-decoration:underline; }
.sed-akkr-privacy a:hover{ color:var(--sed-cream) !important; }

/* Statusmeldung auf der Karte nach dem Absenden (tritt bei Erfolg an die
   Stelle des Knopfes, siehe sed_render_akkreditierung_form()). Der
   dunklere Seitenton senkt sie in die Karte ein — dieselbe Überlegung wie
   beim Newsletter-Eingabefeld auf dieser Seite. */
.sed-akkr-notice{
  margin:0 0 14px; padding:12px 14px; border-radius:8px;
  background:var(--sed-bg); border:1px solid var(--sed-line);
  font-size:14px; line-height:1.6; color:var(--sed-cream);
}
.sed-akkr-notice-eingegangen{ border-color:var(--sed-cyan); }
.sed-akkr-notice-unvollstaendig,
.sed-akkr-notice-limit,
.sed-akkr-notice-fehler{ border-color:var(--sed-coral); }

@media (max-width:600px){
  /* Weniger Rand, damit auf 375px so viel Fensterbreite wie möglich für
     die Felder bleibt. align-items:flex-start steht schon oben — das
     Fenster wächst nach unten und der Rand bleibt scrollbar, statt dass
     der obere Teil aus dem Bild rutscht. */
  .sed-akkr-overlay{ padding:12px 10px; }
  .sed-akkr-modal{ padding:22px 18px 20px; border-radius:12px; }
  .sed-akkr-title{ font-size:17px !important; }
  .sed-akkr-submit{ width:100%; justify-content:center; }
}

/* Community-Sektion (Social/Newsletter-Hinweis) auf der Event-Detailseite,
   siehe single-event.php — sitzt zwischen Haupt-Content und der CTA-Zeile,
   gilt fürs Template und damit für JEDES Event, nicht nur einen einzelnen
   Beitrag. Bewusst KEIN eigener Kartenhintergrund/keine feste Hex-Farbe:
   erbt background/color von .sed-event (var(--sed-bg)/var(--sed-cream),
   siehe Regel weiter oben) und nutzt sonst nur var(--sed-muted)/
   var(--sed-line) — passt sich dadurch automatisch an ein etwaiges
   künftiges Farbschema an, ohne eigene Overrides zu brauchen. Bewusst
   kleinere Schrift, mehr Weißraum, kein knalliger Ton (anders als
   Ticker/Countdown) — dezent im Stil der Story-/Werte-Bereiche der
   Startseite statt FOMO. */
/* padding-bottom deutlich erhöht (war 4px, wirkte gegen die direkt
   folgende .sed-event-cta-bar zu knapp) — auf Mobile etwas moderater,
   damit dort nicht unnötig viel Leerraum vor der CTA-Zeile entsteht. */
.sed-event-community{ padding:40px 0 48px; border-top:1px solid var(--sed-line); text-align:center; }
/* font-size auf denselben Wert wie regulärer Fließtext im
   Veranstaltungstext-Bereich angehoben (.sed-event-text: 15px Desktop /
   14.5px ab max-width:600px, siehe Regel weiter oben) — vorher 14px,
   wirkte kleiner als der übrige Absatztext auf derselben Seite. */
.sed-event-community-lead{ font-size:15px; color:var(--sed-muted); max-width:480px; margin:0 auto 6px; line-height:1.6; }
.sed-event-community-lead:last-of-type{ margin-bottom:22px; }
/* .sed-gallery-social wird 1:1 wiederverwendet (siehe front-page.php/
   tickets-placeholder.php) — hier nur der Außenabstand an den ruhigeren
   Kontext angepasst (kleiner als der dortige 36px/40px-Standardabstand).
   Der gap darf seit der Umstellung auf Pillen nicht mehr unter 12px
   fallen: Pillen tragen anders als die früheren nackten Icons einen
   sichtbaren Rand, der bei zu engem Abstand zusammenläuft. */
.sed-event-community .sed-gallery-social{ margin:0 0 22px; }
.sed-event-community-form{ max-width:420px; margin:0 auto; }
@media (max-width:600px){
  .sed-event-community{ padding:32px 0 36px; }
  .sed-event-community-lead{ font-size:14.5px; }
  .sed-event-community .sed-gallery-social{ gap:12px; }
}

/* Event-Zusammenfassungszeile am Seitenende (vormals fixierte Sticky-CTA
   am unteren Bildschirmrand — jetzt ein normaler, nicht-fixierter Abschnitt
   direkt vor dem Footer, siehe single-event.php). Klassenname entsprechend
   umbenannt (sed-sticky-cta -> sed-event-cta-bar), da "sticky" nicht mehr
   zutrifft; kein position/bottom/z-index mehr nötig, bewegt sich normal
   im Dokumentfluss mit. */
.sed-event-cta-bar{
  background:rgba(18,10,23,0.95); border-top:1px solid var(--sed-line);
  padding:20px; display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap;
}
.sed-event-cta-bar .sed-info{ font-size:13px; font-weight:600; color:var(--sed-muted); }
.sed-event-cta-bar .sed-info strong{ color:var(--sed-cream); display:block; font-size:18px; font-family:'Anton', sans-serif; text-transform:uppercase; }

/* Schlichter Footer (Impressum/Datenschutz) für die Event-Detailseite,
   direkt nach der CTA-Zeile — analog zu .sed-home-footer-copyright auf der
   Startseite, da der globale Theme-Footer auf Event-Einzelseiten weiterhin
   bewusst ausgeblendet bleibt (siehe Regel weiter unten). */
.sed-event-footer{
  padding:20px 0; text-align:center; border-top:1px solid var(--sed-line);
  font-family:'IBM Plex Mono', monospace; font-size:12px; color:var(--sed-muted);
}
/* Touch-Target 44 × 44px, hier wieder unsichtbar machbar (anders als in der
   Social-Spalte oben): die drei Links stehen NEBENeinander in einer einzigen
   Zeile — auch bei 375px, gemessen 64,8 + 79,2 + 144px bei 27,2px Abstand —
   haben also keine vertikalen Nachbarn, mit denen eine höhere Zone
   kollidieren könnte. Padding zieht die Fläche auf 19,2 + 28 = 47,2px Höhe,
   das negative vertikale Margin nimmt den Zuwachs fürs Layout zurück, der
   Footer bleibt exakt 60px hoch. Die 10px Seitenabstand bleiben unverändert
   erhalten (im Margin-Shorthand mitgeführt), Breite braucht kein Padding. */
/* Cookie-Knopf mitgenannt, gleiche Ursache wie in der Social-Spalte
   oben, hier nur waagerecht sichtbar: Ihm fehlte der eigene 10px-Rand,
   er saß dadurch um 10px enger an "Datenschutz" (17,2px statt 27,2px
   Abstand, jeweils samt dem Leerzeichen aus dem Markup), und die
   Trefferfläche blieb bei 19,2px Höhe statt 47,2px. */
.sed-event-footer a,
.sed-event-footer .sed-cmplz-consent-link{
  color:var(--sed-muted); text-decoration:none;
  display:inline-block; padding:14px 0; margin:-14px 10px;
}
.sed-event-footer a:hover{ color:var(--sed-cream); }

/* Globalen Theme-/Elementor-Footer auf Event-Einzelseiten UND der
   Startseite ausblenden. Bewusst per CSS statt durch Weglassen von
   get_footer() im Template: get_footer() feuert weiterhin wp_footer()
   (wichtig für Tracking-Scripts, Elementor-Pro-JS und andere Plugins)
   und schließt </body></html> korrekt. Das per Hand nachzubauen wäre
   fehleranfälliger als den sichtbaren Footer-Container einfach zu
   verstecken. Deckt sowohl klassische Theme-Footer (<footer>) als auch
   Elementor-Pro-Theme-Builder-Footer (.elementor-location-footer) ab.
   Auf der Startseite bauen wir jetzt einen eigenen Footer (.sed-home-footer,
   ein <div>, kein <footer>-Tag) — kollidiert daher nicht mit dieser Regel. */
body.single-event footer,
body.home footer,
body:has(.sed-home) footer,
body:has(.sed-tickets) footer,
body:has(.sed-ticketscan) footer,
body:has(.sed-legal) footer,
body.single-event .elementor-location-footer,
body.home .elementor-location-footer,
body:has(.sed-home) .elementor-location-footer,
body:has(.sed-tickets) .elementor-location-footer,
body:has(.sed-ticketscan) .elementor-location-footer,
body:has(.sed-legal) .elementor-location-footer{
  display:none !important;
}

/* Zusätzlicher schwarzer Balken ganz unten (Impressum/Datenschutzerklärung)
   auf Startseite UND Event-Einzelseiten ausblenden. Kommt NICHT aus dem
   Theme-Footer oder Elementor, sondern aus einem hart codierten
   <div style="background:#000"> ohne Klasse/ID, direktes Kind von <body> —
   vermutlich über das Plugin "Insert Headers and Footers" site-weit
   eingefügt. Da kein Klassen-Selektor verfügbar ist, wird hier über ein
   Attribut-Selektor auf einen Teilstring des inline style-Attributs
   gezielt. Redundant zu unserem eigenen Footer (.sed-home-footer bzw.
   .sed-event-footer), der dieselben Links bereits enthält — lief bislang
   nur für body.home/:has(.sed-home), fehlte aber für body.single-event
   (Ursache des doppelten Footers auf der Event-Detailseite: unser neuer
   .sed-event-footer UND dieser site-weite schwarze Balken erschienen
   direkt untereinander, sobald die Sticky-CTA nicht mehr fixiert war und
   den Balken beim Scrollen nicht mehr optisch überdeckte).

   .sed-contact kam am 18.08.2026 dazu, und zwar aus genau demselben
   Grund: Auf der neuen Kontaktseite stand der Balken direkt unter dem
   eigenen Footer (live gemessen — eigener Fuß endete bei y=1488, der
   Balken begann bei y=1524). Wer hier eine weitere Vorlage ergänzt, muss
   an diese Liste denken; die Klasse allein reicht nicht. Zur Abgrenzung:
   Die beiden Listen darunter (Theme-<footer> und Theme-<header>) brauchen
   .sed-contact NICHT — auf dieser Seite ist nachgemessen kein fremder
   Kopf und kein fremder Fuß im Dokument, weil Hello Elementors eigener
   Kopf/Fuß über hello_elementor_header_footer abgeschaltet ist. */
body.single-event > div[style*="background:#000"],
body.home > div[style*="background:#000"],
body:has(.sed-home) > div[style*="background:#000"],
body:has(.sed-tickets) > div[style*="background:#000"],
body:has(.sed-legal) > div[style*="background:#000"],
body:has(.sed-contact) > div[style*="background:#000"]{
  display:none !important;
}

/* Weißen Theme-/Elementor-Header-Hintergrund auf Event-Einzelseiten entfernen.
   Deckt klassische Theme-Header (<header>, außer unseren eigenen, siehe
   unten), Elementor-Pro-Theme-Builder-Header (.elementor-location-header)
   und gängige Theme-Container-Klassen (#masthead, .site-header) ab.
   HINWEIS: Falls das Logo selbst als Bild einen weißen Hintergrund
   eingebrannt hat statt transparent zu sein, hilft diese Regel nicht —
   das wäre dann ein Logo-Asset-Problem, kein CSS-Problem.

   :not(.sed-nav) IST PFLICHT, NICHT KOSMETIK. Unsere Hauptnavigation ist
   selbst ein <header> (siehe sed_render_site_header() in
   includes/navigation.php) und wurde vom nackten "header" hier
   mitgenommen — mit !important, das schlug .sed-nav{background:
   var(--sed-bg-panel)} weiter unten aus. Sichtbare Folge: Die Navigation
   klebte zwar korrekt oben (position:sticky war nie das Problem), aber
   ohne Fläche — der Seiteninhalt scrollte hinter der Schrift durch, die
   cremefarbene Trennlinie stand allein in der Luft. Getroffen hat es alle
   Event-Seiten, /tickets/ und die Rechtstexte; die Startseite blieb
   heil, weil "body:has(.sed-home) header" in dieser Liste fehlt — daher
   der irreführende Eindruck, es läge an der Event-Vorlage.
   Diagnose-Falle für das nächste Mal: getBoundingClientRect() der Nav
   meldet in diesem Zustand einwandfreie Sticky-Werte (top bleibt 0), der
   Fehler steckt ausschließlich in backgroundColor (rgba(0,0,0,0) statt
   rgb(29,16,35)) — bei "Navigation scrollt weg" also immer BEIDES messen.
   Es gibt insgesamt nur drei <header> im Plugin: .sed-hero (Startseite),
   .sed-hero (Event) und .sed-nav. Auf /tickets/ und den Rechtstexten traf
   "header" deshalb sogar ausschließlich die eigene Navigation. */
body.single-event header:not(.sed-hero):not(.sed-nav),
body.single-event .elementor-location-header,
body.single-event #masthead,
body.single-event .site-header,
body:has(.sed-tickets) header:not(.sed-nav),
body:has(.sed-tickets) .elementor-location-header,
body:has(.sed-tickets) #masthead,
body:has(.sed-tickets) .site-header,
body:has(.sed-legal) header:not(.sed-nav),
body:has(.sed-legal) .elementor-location-header,
body:has(.sed-legal) #masthead,
body:has(.sed-legal) .site-header{
  background:transparent !important;
  background-color:transparent !important;
}

/* Theme-Override-Schutz für Event-Titel UND SÄMTLICHE Startseiten-
   Überschriften (h1-h3): manche Themes greifen Überschriften mit eigener
   Spezifität/späterer Ladereihenfolge an (schwarzer/dunkler Text statt
   heller Anton-Schrift in --sed-cream) — beobachtet bisher bei h1 im
   Hero und h2 in der Next-Event-Card. Statt jede neue Überschrift
   einzeln nachzuflicken, deckt diese Regel pauschal ALLE h1/h2/h3
   innerhalb von .sed-home ab (Story, Why-Cards, Galerie, Footer-CTA,
   Footer-Spalten). body.single-event erhöht die Spezifität gezielt nur
   auf der Event-Einzelseite. !important nur hier als letzte Absicherung
   gegen Theme-Typography-Regeln — die Pink-Akzentfarbe im Hero-Statement
   (.sed-accent) hat deshalb ebenfalls !important, damit sie gegen diese
   Regel gewinnt statt überschrieben zu werden. */
body.single-event .sed-event h1,
body.single-event .sed-hero h1,
.sed-home h1,
.sed-home h2,
.sed-home h3,
.sed-tickets h1,
.sed-tickets h2,
.sed-tickets h3,
/* Nur die Spaltenüberschriften des wiederverwendeten Kontakt-/Social-
   Footers auf den Rechtstext-Seiten — damit dieser Footer dort exakt so
   aussieht wie auf der Startseite. Die Überschriften INNERHALB der
   Rechtstext-Karte sind bewusst NICHT enthalten: sie folgen der ruhigen
   Lesetypografie der Designvorgabe (Plus Jakarta Sans, gemischte
   Schreibweise), nicht der lauten Anton-Display-Schrift, siehe eigener
   .sed-legal-Block weiter oben. */
.sed-legal .sed-home-footer-title{
  font-family:'Anton', sans-serif !important;
  color:var(--sed-cream) !important;
  text-transform:uppercase !important;
}

/* ==========================================================================
   Seite nicht gefunden (404) — siehe templates/error-404.php

   Nutzt bewusst die vorhandenen Bausteine weiter: .sed-hero-bg für den
   Farbschleier im Hintergrund, .sed-eyebrow für die Zeile darüber,
   .sed-home-footer für den Fuß. Eigene Regeln gibt es nur für die große
   Zahl und die vier Weiterführungs-Kacheln.
   ========================================================================== */

.sed-404-hero{ position:relative; padding:72px 0 96px; overflow:hidden; }
.sed-404-inner{ position:relative; z-index:2; text-align:center; }

/* Die 404 selbst als Blickfang: groß, aber im Verlauf der Marke statt in
   Volltonfarbe, damit sie nicht wie eine Fehlermeldung schreit.
   background-clip:text braucht den transparenten Text darüber — der
   color-Wert davor ist die Rückfallebene für Browser, die das nicht
   können. */
.sed-404-code{
  font-size:clamp(84px, 18vw, 190px); line-height:0.9; margin:14px 0 6px;
  color:var(--sed-coral);
  background:linear-gradient(120deg, var(--sed-coral), var(--sed-pink), var(--sed-purple));
  -webkit-background-clip:text; background-clip:text;
  -webkit-text-fill-color:transparent;
}
.sed-404-title{ font-size:clamp(24px, 4.4vw, 40px); margin:0 0 14px; }
.sed-404-text{
  font-size:17px; font-weight:600; color:var(--sed-muted);
  max-width:560px; margin:0 auto 38px;
}

.sed-404-links{
  display:grid; gap:14px; max-width:760px; margin:0 auto;
  grid-template-columns:repeat(auto-fit, minmax(220px, 1fr));
}
.sed-404-link{
  display:flex; flex-direction:column; gap:4px; text-align:left;
  padding:18px 20px; text-decoration:none;
  background:var(--sed-grid), var(--sed-bg-panel);
  border:1px solid var(--sed-line); border-radius:14px;
  transition:transform 0.15s ease, border-color 0.15s ease;
}
.sed-404-link:hover, .sed-404-link:focus-visible{
  transform:translateY(-3px); border-color:var(--sed-cyan);
}
.sed-404-link-title{
  font-family:'Anton', sans-serif; text-transform:uppercase;
  font-size:19px; letter-spacing:0.01em; color:var(--sed-cream);
}
.sed-404-link-sub{
  font-family:'IBM Plex Mono', monospace; font-size:12px; color:var(--sed-muted);
}

@media (max-width:760px){
  .sed-404-hero{ padding:48px 0 64px; }
}
@media (prefers-reduced-motion:reduce){
  .sed-404-link{ transition:none; }
}

/* ==========================================================================
   Hauptnavigation (plugin-eigen, siehe includes/navigation.php)

   Löst den bisherigen Block ab, der am Overlay-Menü des Yoox-Themes hing
   (.dl-menu li.sed-nav-cta usw.). Diese Selektoren sind mit dem Wechsel auf
   Hello Elementor gegenstandslos geworden: Das Markup kommt jetzt aus
   sed_render_site_header() und trägt durchgehend eigene sed-Klassen. Damit
   hängt hier nichts mehr an einem Theme.

   Ohne !important, anders als vorher: Wir gestalten kein fremdes
   Theme-Markup mehr gegen dessen eigene Regeln an, sondern unser eigenes.
   ========================================================================== */

/* Für Screenreader sichtbar, optisch versteckt. Bringt sonst das Theme mit
   (Yoox wie Hello Elementor definieren die Klasse) — hier trotzdem selbst
   definiert, damit die Navigation von keinem Theme mehr etwas braucht. */
.screen-reader-text{
  position:absolute !important; width:1px; height:1px; overflow:hidden;
  clip:rect(1px,1px,1px,1px); clip-path:inset(50%); white-space:nowrap;
}

.sed-nav{
  position:sticky; top:0; z-index:1000;
  background:var(--sed-bg-panel);
  border-bottom:2px solid var(--sed-cream);
}
.sed-nav-inner{
  max-width:1100px; margin:0 auto; padding:0 32px;
  display:flex; align-items:center; gap:24px; min-height:72px;
}

/* Wortmarke als Bild (siehe sed_render_site_header()). display:block am
   <img> nimmt die Zeilenabstands-Lücke unter Inline-Bildern weg, sonst wäre
   das Logo minimal aus der Mitte nach oben versetzt. */
.sed-nav-logo{
  display:flex; align-items:center; margin-right:auto;
  text-decoration:none; line-height:0;
}
.sed-nav-logo-img{
  display:block; height:36px; width:auto;
  transition:filter 0.2s ease;
  /* Die Datei ist reinweiß auf transparent. Diese Kette färbt sie exakt auf
     das Creme der Navigationsschrift (#FFF6EC) — gerechnet, nicht geraten:
     Die Kurzformen brightness/invert/sepia/saturate/hue-rotate/contrast sind
     in der Filter-Effects-Spezifikation als feste Kanal- bzw.
     Matrix-Operationen definiert, damit lässt sich das Ergebnis vorher
     ausrechnen. Trefferabweichung hier: #FFF6EE statt #FFF6EC, ΔE 1,1 —
     unterhalb dessen, was das Auge im Vergleich nebeneinander bemerkt.
     Warum überhaupt ein Filter und nicht einfach das weiße Bild: daneben
     stehen die Menüpunkte in Creme, und reines Weiß wirkt daneben kühl. */
  filter:brightness(0) saturate(100%) invert(60%) sepia(1%) saturate(883%)
         hue-rotate(-14deg) brightness(114%) contrast(254%);
}
/* Hover: dasselbe Verfahren auf das Pink der Marke (#FF2E7E — dieselbe
   Akzentfarbe wie "Ohne Kompromisse." im Hero und der pulsierende Punkt
   daneben). Im Browser nachgemessen wird exakt #FF2E7E, ΔE 0. Damit zieht
   das Logo beim Überfahren mit den Menüpunkten gleich, die über
   .sed-nav-link:hover ebenfalls auf var(--sed-pink) gehen.

   Beide Ketten haben absichtlich denselben Aufbau in derselben Reihenfolge
   — nur dann rechnet der Browser die 0,2s Übergang Wert für Wert durch,
   statt hart umzuschalten.

   ZWEI FALLSTRICKE, falls das hier je neu gerechnet wird:

   1. Es genügt NICHT, nur die Endfarbe zu treffen. Der Browser blendet die
      sechs Zahlen einzeln ineinander, und der Weg dazwischen kann dabei
      aus dem Ruder laufen. Eine Kette mit hue-rotate(310deg) traf die
      Endfarbe sogar genauer, drehte auf dem Weg dorthin aber einmal durch
      den ganzen Farbkreis (Gelb → Grün → Cyan → Magenta) — als Blende
      unbrauchbar. Der Wert hier bleibt deshalb dicht am hue-rotate der
      Grundkette (-14deg), damit die Blende ein reines Aufwärmen bleibt:
      Creme → #FFC8AD → #FF9489 → #FF617B → Pink, Helligkeit durchgehend
      fallend, ohne Delle.
   2. Die Werte sind bewusst NICHT auf ganze Prozent gerundet. Gerundet
      (invert 57% / sepia 21% / saturate 809% / contrast 294%) kommt
      #FF317E heraus, ΔE 0,8 — sichtbar wird das zwar nicht, aber es gibt
      keinen Grund, Genauigkeit gegen glattere Zahlen zu tauschen.

   Ermittelt wurden sie nicht mehr am Rechenmodell, sondern direkt in der
   Engine: das Logo in ein 1×1-Canvas zeichnen, vorher ctx.filter auf die
   Kandidatenkette setzen, den Pixel auslesen und danach suchen. Alle hier
   benutzten Filter arbeiten rein pro Pixel, deshalb reicht ein einziger
   Bildpunkt und die Suche läuft in Sekunden. Das Modell allein lag um
   ΔE 2 daneben. */
.sed-nav-logo:hover .sed-nav-logo-img,
.sed-nav-logo:focus-visible .sed-nav-logo-img{
  filter:brightness(0) saturate(100%) invert(56.7%) sepia(20.7%) saturate(808.5%)
         hue-rotate(-72deg) brightness(78.9%) contrast(294.3%);
}

/* Abstände deutlich luftiger als zuvor (war fest 28px). clamp() statt eines
   festen Werts, damit die vier Punkte plus Ticket-Button auch knapp
   oberhalb der Burger-Grenze (901px) sicher nebeneinander passen: dort
   greift der untere Anschlag, ab ca. 1150px Fensterbreite der obere. */
.sed-nav-menu{ display:flex; align-items:center; gap:clamp(28px, 3.4vw, 52px); }
.sed-nav-list{
  display:flex; align-items:center; flex-wrap:nowrap; gap:clamp(26px, 3vw, 46px);
  list-style:none; margin:0; padding:0;
}
.sed-nav-item{ position:relative; }
.sed-nav-link{
  font-family:'Plus Jakarta Sans', sans-serif; font-weight:600; font-size:15px;
  color:var(--sed-cream); text-decoration:none; white-space:nowrap;
  padding:8px 0; display:inline-block;
}
.sed-nav-link:hover, .sed-nav-link:focus-visible{ color:var(--sed-pink); }

/* Aufklapp-Pfeil neben "Nächste Events". Bleibt beim Überfahren cyan, auch
   wenn die Beschriftung daneben auf Pink wechselt: Er ist ein Hinweis auf
   das Untermenü, kein Teil der Beschriftung — und Cyan ist in diesem
   Design durchgehend die Farbe für genau solche Hinweise (.sed-eyebrow). */
.sed-nav-chevron{
  color:var(--sed-cyan); margin-left:7px; vertical-align:middle;
  transition:transform 0.2s ease;
}
.sed-nav-has-children:hover .sed-nav-chevron,
.sed-nav-has-children:focus-within .sed-nav-chevron{ transform:rotate(180deg); }

/* Tickets-Button: identisch zu .sed-btn-primary (Verlauf Koralle→Pink,
   angeschnittene Ecke, leichte Schräglage), nur mit knapperem Innenabstand,
   damit die Kopfzeile ihre 72px Höhe behält. Vorher stand hier bewusst ein
   ruhigerer, flach-pinker Knopf; der einheitliche Ticket-Button über die
   ganze Seite hinweg ist die neuere Entscheidung und ersetzt sie. */
.sed-nav-cta{
  display:inline-flex; align-items:center; justify-content:center;
  background:linear-gradient(120deg, var(--sed-coral), var(--sed-pink));
  color:#1A0806; border-radius:4px 22px 4px 22px; transform:rotate(-1deg);
  font-family:'Plus Jakarta Sans', sans-serif; font-weight:700; font-size:15px;
  padding:11px 22px; text-decoration:none; white-space:nowrap;
  transition:transform 0.15s ease, filter 0.15s ease;
}
.sed-nav-cta:hover{ transform:rotate(-1deg) translateY(-2px) scale(1.02); filter:brightness(1.08); color:#1A0806; }

/* --- Untermenü "Nächste Events" --- */

.sed-nav-sub-toggle{
  display:none; background:none; border:none; cursor:pointer; padding:8px;
}
.sed-nav-sub{
  list-style:none; margin:0; padding:8px;
  position:absolute; top:100%; left:-12px; min-width:270px;
  background:var(--sed-bg-panel-2);
  border:1px solid var(--sed-line); border-radius:6px;
  opacity:0; visibility:hidden; transform:translateY(-6px);
  transition:opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
}
.sed-nav-has-children:hover > .sed-nav-sub,
.sed-nav-has-children:focus-within > .sed-nav-sub,
.sed-nav-item.is-open > .sed-nav-sub{
  opacity:1; visibility:visible; transform:translateY(0);
}
.sed-nav-sub a{
  display:flex; flex-direction:column; gap:2px;
  padding:9px 12px; border-radius:4px; text-decoration:none;
}
.sed-nav-sub a:hover, .sed-nav-sub a:focus-visible{ background:rgba(255,246,236,0.07); }
.sed-nav-sub-title{
  font-family:'Plus Jakarta Sans', sans-serif; font-weight:600; font-size:14px;
  color:var(--sed-cream);
}
.sed-nav-sub-meta{
  font-family:'IBM Plex Mono', monospace; font-size:12px; color:var(--sed-muted);
}
/* Kein anstehender Termin: Elternpunkt bleibt als normaler Link stehen,
   das leere <ul> wird von navigation.php gar nicht erst ausgegeben. */

/* --- Burger --- */

.sed-nav-toggle{
  display:none; background:none; border:none; cursor:pointer;
  padding:10px; margin-right:-10px;
}
.sed-nav-burger,
.sed-nav-burger::before,
.sed-nav-burger::after{
  display:block; width:24px; height:2px; background:var(--sed-cream);
  transition:transform 0.2s ease, opacity 0.2s ease;
}
.sed-nav-burger{ position:relative; }
.sed-nav-burger::before, .sed-nav-burger::after{ content:''; position:absolute; left:0; }
.sed-nav-burger::before{ top:-7px; }
.sed-nav-burger::after{ top:7px; }
.sed-nav.is-open .sed-nav-burger{ background:transparent; }
.sed-nav.is-open .sed-nav-burger::before{ top:0; transform:rotate(45deg); }
.sed-nav.is-open .sed-nav-burger::after{ top:0; transform:rotate(-45deg); }

/* --- Schmale Bildschirme --- */

@media (max-width:900px){
  /* 64px Mindesthöhe + 2px Linie, siehe --sed-nav-h oben. Der Ticker
     darunter zieht automatisch mit. Aufgeklappt wird die Kopfzeile höher
     als dieser Wert und legt sich dabei über das Laufband — gewollt: das
     Menü soll den Blick nicht mit dem laufenden Text teilen. */
  :root{ --sed-nav-h:66px; }

  .sed-nav-inner{ padding:0 20px; min-height:64px; flex-wrap:wrap; }
  .sed-nav-logo-img{ height:30px; }
  .sed-nav-toggle{ display:block; }

  /* Der Pfeil im Link entfällt hier: Auf Touch-Geräten klappt das Untermenü
     über die Schaltfläche .sed-nav-sub-toggle auf, die rechts am Rand ihren
     eigenen Pfeil zeichnet (::after weiter unten). Beide gleichzeitig wären
     zwei Pfeile für dieselbe Sache. */
  .sed-nav-chevron{ display:none; }

  .sed-nav-menu{
    display:none; order:3; width:100%;
    flex-direction:column; align-items:stretch; gap:0;
    padding:8px 0 20px;
  }
  .sed-nav.is-open .sed-nav-menu{ display:flex; }

  .sed-nav-list{ flex-direction:column; align-items:stretch; gap:0; width:100%; }
  .sed-nav-item{ border-top:1px solid var(--sed-line); }
  .sed-nav-link{ padding:14px 0; font-size:16px; }

  /* Auf Touch-Geräten gibt es kein Hover — das Untermenü klappt hier per
     Button auf und steht dann im Fluss statt über dem Inhalt. */
  .sed-nav-has-children{ display:flex; flex-wrap:wrap; align-items:center; }
  .sed-nav-has-children > .sed-nav-link{ margin-right:auto; }
  .sed-nav-sub-toggle{ display:block; position:relative; width:34px; height:34px; }
  .sed-nav-sub-toggle::after{
    content:''; position:absolute; top:12px; left:11px;
    width:8px; height:8px; border-right:2px solid var(--sed-cream);
    border-bottom:2px solid var(--sed-cream); transform:rotate(45deg);
    transition:transform 0.2s ease;
  }
  .sed-nav-item.is-open .sed-nav-sub-toggle::after{ transform:rotate(-135deg); top:15px; }

  .sed-nav-sub{
    position:static; width:100%; min-width:0; left:auto;
    border:none; border-radius:0; background:none;
    padding:0 0 10px 12px; transform:none;
    display:none; opacity:1; visibility:visible;
  }
  .sed-nav-has-children:hover > .sed-nav-sub,
  .sed-nav-has-children:focus-within > .sed-nav-sub{ display:none; }
  .sed-nav-item.is-open > .sed-nav-sub{ display:block; }

  .sed-nav-cta{ margin-top:18px; align-self:stretch; }
}

@media (prefers-reduced-motion:reduce){
  .sed-nav-sub, .sed-nav-cta, .sed-nav-burger,
  .sed-nav-burger::before, .sed-nav-burger::after,
  .sed-nav-sub-toggle::after, .sed-nav-chevron, .sed-nav-logo-img{ transition:none; }
}

/* ==========================================================================
   Motto-Farbschema "Millennium Edition" — NUR Beitrag 1593
   ("Schamlos 20 Jahre – Millennium Edition"), bewusst an body.postid-1593
   statt body.single-event gebunden, damit ausschließlich dieser eine
   Event-Beitrag betroffen ist und alle anderen Events beim normalen Design
   bleiben. Blau-chromfarbenes Sci-Fi-Tunnel-Schema für Hero-Hintergrund,
   Countdown- und Datum/Location/Preis-Boxen sowie die Unterzeile
   ("Millennium Edition"). Pink-Akzent (Live-Dot, CTA-Button) und die
   Floor-Karten im Veranstaltungstext-Bereich (.sed-event-text-floor-*)
   bleiben bewusst unangetastet — eigener Block, komplett eigenständig
   entfernbar ohne Auswirkung auf den Rest des Designs.
   Selektoren/Klassen live gegen die aktuelle Vorlage (templates/
   single-event.php, dieselbe Datei wie für alle anderen Events) und das
   bestehende body.single-event .sed-hero-bg-Override (weiter oben in
   dieser Datei) geprüft — gleiche Spezifität (0,2,0), gewinnt hier durch
   spätere Position in der Datei. */

/* Seitenhintergrund: elektrisches Blau, hellster Punkt bei 30%/50%.
   .sed-event ist das äußere Element, das für die GESAMTE Event-Seite
   (Ticker, Hero, Datum/Countdown/Preis-Boxen, Veranstaltungstext, CTA-Bar,
   Footer) var(--sed-bg) setzt (Zeile ~97 oben in dieser Datei), NICHT
   .sed-hero-bg (das ist nur eine dekorative Ebene innerhalb des
   Hero-Bereichs). Hier überschrieben statt dort, damit der Verlauf bis
   zum Footer runterreicht statt an der Hero-Box zu enden.
   KORREKTUR (vorherige Version): eine feste "100vh"-Größe plus separate
   Fallback-Flächenfarbe darunter erzeugte an der 100vh-Kante eine
   sichtbare Farbkante — der radiale Verlauf hatte an dieser Stelle seinen
   eigenen 100%-Farbton (#051B33) noch nicht vollständig erreicht (Ellipse
   reicht rechnerisch bis zur am weitesten entfernten Ecke, nicht bis zur
   unteren Kante), während direkt darunter schon die reine Flächenfarbe
   begann — zwei leicht unterschiedliche Töne trafen aufeinander. Fix:
   KEINE zweite Ebene mehr, keine feste Höhe — der Verlauf wird ohne
   eigene background-size angegeben und deckt dadurch automatisch genau
   die tatsächliche Höhe von .sed-event ab (die Box ist exakt so hoch wie
   der Seiteninhalt) — ein einziges durchgehendes Bild, an keiner Stelle
   kann eine Kante zwischen zwei Ebenen entstehen. Live mit realistischer
   Seitenlänge (Fließtext + Floor-Karten + CTA-Bar + Footer) gerendert und
   per Screenshot über die komplette Länge geprüft. */
body.postid-1593 .sed-event{
  background: radial-gradient(ellipse at 30% 50%,
    #4FA8D8 0%,
    #2870A8 25%,
    #144E7E 50%,
    #0A2E52 75%,
    #051B33 100%);
}
/* .sed-hero-bg transparent: die dekorative Ebene läge sonst als zweite,
   separat berechnete Kopie über dem oberen Seitenbereich und könnte dort
   wieder eine minimale Kante zum darunterliegenden .sed-event-Verlauf
   erzeugen. Mit nur einer Quelle für den gesamten Verlauf ist das
   ausgeschlossen. */
body.postid-1593 .sed-hero-bg{
  background: transparent;
}

/* Countdown-Box, Datum/Einlass/Location/Preis-Boxen UND die
   Veranstaltungstext-Box (Intro/Floor-Karten/Signoff): auf die
   URSPRÜNGLICHE Optik von vor dem Motto-Umbau zurückgesetzt (siehe
   Basis-Regeln .sed-meta-pill/.sed-countdown-wrap/.sed-event-text weiter
   oben in dieser Datei — identischer Aufbau: Rasterlinien-Textur
   var(--sed-grid) über einer VOLL DECKENDEN Flächenfarbe, dünner
   1px-Rand). Die letzte Version hatte stattdessen einen hellen,
   transluzenten Glas-Look eingeführt (padding-box/border-box-Verlaufsrand
   + halbtransparenter heller Hintergrund) — das war nicht gewünscht und
   ist hier komplett entfernt.
   Einzige tatsächliche Änderung gegenüber dem echten Original: die
   Flächenfarbe wechselt von var(--sed-bg-panel) (#1D1023, Lila) auf
   #051B33 — denselben dunkelblauen Ton, der im Verlauf oben ohnehin schon
   als äußerster/dunkelster Farbwert und in der CTA-Bar (weiter unten)
   verwendet wird, für einen in sich stimmigen Blauton statt eines neu
   erfundenen Werts. Textur, Deckkraft (100%, kein rgba) und Randfarbe
   (var(--sed-line), war schon vorher neutral cremefarben, nicht lila)
   bleiben exakt wie im Original. Die Floor-Karten selbst
   (.sed-event-text-floor-card, eigene fast-transparente Fläche
   rgba(255,246,236,0.03), schon vorher farbneutral) sind davon nicht
   betroffen — nur die äußere Textbox ändert sich. */
body.postid-1593 .sed-meta-pill,
body.postid-1593 .sed-countdown-wrap,
body.postid-1593 .sed-event-text{
  background: var(--sed-grid), #051B33;
  border: 1px solid var(--sed-line);
}

/* Unterzeile "Millennium Edition": Chrome-Text-Verlauf. Der Titel wird nur
   einmal am "–" gesplittet (siehe sed_split_event_title() in
   schamlos-event-design.php), "Millennium Edition" ist dadurch EIN
   zusammenhängender Block (.sed-sub-h1) statt einzelner Wörter — der
   Verlauf gilt daher auf den gesamten Block, nicht nur auf "Edition"
   (mit Nutzer abgestimmt, statt das Template dafür zu verändern). */
body.postid-1593 .sed-hero .sed-sub-h1{
  background: linear-gradient(180deg,
    #FFFFFF 0%,
    #CFEFFC 30%,
    #6FB8DE 50%,
    #CFEFFC 70%,
    #FFFFFF 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
}

/* CTA-Leiste ganz unten ("Tickets sichern"-Balken vor dem Footer): hatte
   eine EIGENE, von .sed-event unabhängige Lila-Füllung
   (rgba(18,10,23,0.95) = var(--sed-bg) als rgba, siehe .sed-event-cta-bar
   weiter oben in dieser Datei) — dadurch sprang exakt dort, wo der
   Nutzer es als "Footer" beschrieben hat, die Seite auf den alten Farbton
   zurück, obwohl der .sed-event-Hintergrund selbst schon korrigiert war.
   Live per computed style geprüft (getComputedStyle(...).backgroundColor
   ergab rgba(18, 10, 23, 0.95) für .sed-event-cta-bar trotz bereits
   blauem .sed-event darunter), nicht geraten. Gleicher Alpha-Wert (0.95),
   nur der Farbton auf den dunkelsten Verlaufston (#051B33) umgestellt. */
body.postid-1593 .sed-event-cta-bar{
  background: rgba(5,27,51,0.95);
}


/* --------------------------------------------------------------------------
   TICKET-SCAN-SEITE (/ticket/<QR-Inhalt>)

   Die Seite, auf der ein Gast landet, der seinen eigenen Ticket-QR-Code
   mit der Kamera-App scannt (templates/ticket-scan-page.php). Aufbau wie
   die "Chill mal."-Übergangsseite: eine einzige, mittige Aussage auf
   dunklem Grund, ohne Navigation und ohne Weiterführungen — wer hier
   steht, hat eine einzige Frage, und die wird in zwei Sätzen beantwortet.

   Bewusst KEIN Logo: Der Zustand (Haken oder Kreuz) ist die Botschaft und
   soll das erste sein, was ins Auge fällt. Das Einhorn stünde darüber und
   würde genau diesen Blick abfangen.

   Eigene Hintergrundfarbe statt --sed-bg: Die Seite wird oft bei
   schlechtem Licht vor einer Tür gelesen, auf einem Handy mit
   heruntergeregelter Helligkeit. #120A17 ist der dunkelste Ton des
   Systems und gibt Haken und Kreuz den größten Kontrast.
   -------------------------------------------------------------------------- */
.sed-ticketscan{
  background:#120A17; color:var(--sed-cream);
  min-height:100vh; display:flex; align-items:center; justify-content:center;
  font-family:'Plus Jakarta Sans', sans-serif;
  padding:48px 24px;
}
.sed-ticketscan-inner{ max-width:460px; text-align:center; }

/* Zeichen: 48px-SVG in einem Kreis aus der eigenen Farbe mit 12% Deckung —
   dieselbe Machart wie die Statusfelder der Einlass-Oberfläche. */
.sed-ticketscan-zeichen{
  width:88px; height:88px; margin:0 auto 24px;
  display:flex; align-items:center; justify-content:center;
  border-radius:50%;
}
.sed-ticketscan-zeichen.ist-ok{ color:#3FF0A8; background:rgba(63,240,168,0.12); }
.sed-ticketscan-zeichen.ist-fehler{ color:#FF4F3F; background:rgba(255,79,63,0.12); }

.sed-ticketscan-eyebrow{
  font-family:'IBM Plex Mono', monospace; font-size:13px; font-weight:600;
  letter-spacing:0.12em; text-transform:uppercase; margin-bottom:14px;
}
.sed-ticketscan-eyebrow.ist-ok{ color:#3FF0A8; }
.sed-ticketscan-eyebrow.ist-fehler{ color:#FF4F3F; }

.sed-ticketscan-titel{
  font-family:'Anton', sans-serif; font-weight:400; text-transform:uppercase;
  letter-spacing:-0.01em; line-height:1.05;
  font-size:clamp(30px, 7vw, 46px);
  margin:0 0 18px; color:var(--sed-cream);
}
.sed-ticketscan-text{ font-size:17px; line-height:1.6; color:var(--sed-muted); margin:0 0 32px; }
/* Farbe ausdrücklich gesetzt und nicht geerbt: Theme-Resets bringen für
   nackte a/a:hover eigene Farben mit (#336 bzw. #c36) und schlagen reine
   Klassenregeln — dieselbe Falle wie bei den Fuß-Knöpfen der Galerie. */
.sed-ticketscan-text a{ color:var(--sed-cyan) !important; text-decoration:underline; overflow-wrap:anywhere; }
.sed-ticketscan-text a:hover{ color:var(--sed-cream) !important; }

/* Fußzeile als Pille: hebt den Markennamen vom Fließtext ab, ohne ein
   zweites Logo einzuführen. */
.sed-ticketscan-fuss{
  display:inline-block; padding:8px 16px; border-radius:100px;
  border:1px solid var(--sed-line); background:rgba(255,246,236,0.03);
  font-family:'IBM Plex Mono', monospace; font-size:12px; font-weight:600;
  letter-spacing:0.08em; text-transform:uppercase; color:var(--sed-muted);
}

@media (max-width:600px){
  .sed-ticketscan{ padding:40px 20px; }
  .sed-ticketscan-text{ font-size:16px; }
}
