/* Root-Schriftgröße erzwingen: Das gesamte D35-CSS rechnet in rem gegen einen
   16px-Root (z. B. Nav 0.95rem = 15px). Bricks setzt die Root-Größe per Default
   aber auf 62.5% (1rem = 10px) — ohne dieses Override schrumpft die ganze Seite
   auf ~62.5% (Nav ~9px, Layout „fliegt auseinander"). Plugin-seitig garantiert,
   unabhängig davon, ob das (Child-)Theme das Override mitbringt. */
html {
  font-size: 100% !important;
}

:root {
  --d35-color-primary: #0088cc;
  --d35-color-primary-hover: #0070a7;
  --d35-color-text: #011724;
  --d35-color-muted: #52616a;
  --d35-color-surface: #ffffff;
  --d35-color-dark: #011724;
  --d35-color-light: #f8fafc;
  --d35-color-body-bg: #f8fafc;
  --d35-color-border: rgb(15 23 42 / 0.12);
  --d35-color-error: #dc2626; /* overridden by ThemeTokens inline CSS */
  --d35-radius: 0.75rem;
  --d35-radius-button: 999px;
  --d35-container: 1200px;
  --d35-container-wide: 1440px;
  --d35-gap: clamp(1rem, 2vw, 2rem);
  --d35-section-y: 60px;
  /* Höhe des fixen Headers. Single Source: .d35-header erbt diesen Wert und
     scroll-padding-top (unten) hält #-Anker-Ziele darunter frei. */
  --d35-header-height: 70px;
  /* Zusatzhöhen fürs scroll-padding-top: je 0, solange nicht aktiv — die
     jeweilige Body-Klasse (d35-has-topbar / admin-bar) setzt sie unten. So
     werden Top-Leiste UND Admin-Bar summiert, statt sich per :has() bei
     gleicher Spezifität gegenseitig zu überschreiben. */
  --d35-topbar-height: 0px;
  --d35-adminbar-height: 0px;
}

html,
body {
  background-color: var(--d35-color-body-bg);
}

/* Sanftes, natives #-Anker-Scrollen — rein über CSS (kein JS, kein Scroll-
   Hijacking): läuft auf dem Compositor, kostet keine Performance. scroll-
   behavior nur bei erlaubter Bewegung (Accessibility / prefers-reduced-motion),
   scroll-padding-top immer, damit das Ziel nicht unter dem fixen Header landet. */
/* Eine Regel summiert Header + Top-Leiste + Admin-Bar. Die Zusatzhöhen sind
   Variablen (oben 0), die die jeweilige Body-Klasse per :has() setzt — dadurch
   kombinieren sie sich, statt sich zu überschreiben. Ohne :has()-Support
   bleiben die Zusätze 0 (progressiv, kein Bruch). */
html {
  scroll-padding-top: calc(
    var(--d35-header-height) + var(--d35-topbar-height) + var(--d35-adminbar-height) + 1rem
  );
}

/* Aktive Top-Leiste (Body-Klasse d35-has-topbar) → ihre Höhe einrechnen. */
html:has(body.d35-has-topbar) {
  --d35-topbar-height: 34px;
}

/* Mobil ist die Top-Leiste ausgeblendet (navigation.css) — Höhe dann 0.
   ACHTUNG: 800px-Breakpoint mit der display:none-Regel dort synchron halten. */
@media (max-width: 800px) {
  html:has(body.d35-has-topbar) {
    --d35-topbar-height: 0px;
  }
}

/* WP-Admin-Bar schiebt den fixen Header nach unten (.admin-bar .d35-header):
   32px (Desktop) bzw. 46px (≤782px) — als eigene Variable, damit sie sich mit
   der Top-Leiste summiert. Body-Klasse liegt auf <body>, scroll-padding gehört
   auf <html> → :has(). */
html:has(body.admin-bar) {
  --d35-adminbar-height: 32px;
}

@media screen and (max-width: 782px) {
  html:has(body.admin-bar) {
    --d35-adminbar-height: 46px;
  }
}

@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}

body.brx-body,
body.brx-boxed,
#brx-content {
  background-color: var(--d35-color-body-bg);
}

body.brx-boxed {
  margin-right: auto;
  margin-left: auto;
}

/* Globale Heading-Skala: h1–h4 rund 8px kleiner als die Bricks-Defaults
   (2.4/2.1/1.8/1.6em), h5/h6 nur bis knapp an die Body-Größe abgesenkt —
   volle −8px würden sie unter die Lesbarkeitsgrenze drücken. Der
   body-Präfix schlägt die Element-Selektoren des Themes unabhängig von
   der Ladereihenfolge; Komponenten-Headings mit eigenen Klassen-Größen
   (z. B. SectionHeader) bleiben unberührt. */
body h1 {
  font-size: 1.9em;
}

body h2 {
  font-size: 1.6em;
}

body h3 {
  font-size: 1.3em;
}

body h4 {
  font-size: 1.1em;
}

body h5 {
  font-size: 1em;
}

body h6 {
  font-size: 0.95em;
}

.d35-container,
.d35-container--wide {
  width: min(100%, var(--d35-container));
  margin-inline: auto;
  padding-inline: var(--d35-gap);
}

.d35-container--wide {
  width: min(100%, var(--d35-container-wide));
}

/* The single source of vertical section rhythm: every full-width section
   (light or dark) carries .d35-section so top/bottom spacing is consistent and
   driven by one token. */
.d35-section {
  padding-block: var(--d35-section-y);
}

/* Dark section treatment: colours only. Always paired with .d35-section, which
   supplies the padding — so spacing stays defined in exactly one place. */
.d35-section-dark {
  background: var(--d35-color-dark, #000);
  color: #fff;
}

.d35-grid {
  display: grid;
  gap: var(--d35-gap);
  align-items: stretch;
}

.d35-grid > * {
  min-width: 0;
  align-self: stretch;
}

.d35-grid--2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.d35-grid--3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.d35-grid--4 {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.d35-stack {
  display: grid;
  gap: var(--d35-gap);
}

.d35-cluster {
  display: flex;
  flex-wrap: wrap;
  gap: var(--d35-gap);
  align-items: center;
}

.d35-query-empty {
  margin: 0;
  color: var(--d35-color-muted);
  font-size: 1rem;
  line-height: 1.6;
}

@media (max-width: 768px) {
  .d35-grid--2,
  .d35-grid--3,
  .d35-grid--4 {
    grid-template-columns: minmax(0, 1fr);
  }
}
