/* Komponente: KI-Hinweis auf Bildern (ai-media.php) – bewusst dezent: kleines Overlay-Badge oben rechts.
 * Rahmen so groß wie das Bild (inline-block); füllt das Bild seinen Container (Karten-Medien, Seitenverhältnis),
 * füllt der Rahmen ihn ebenfalls. Ausrichtungsklassen wandern vom Bild auf den Rahmen. */
.sg-ai-media{position:relative;display:inline-block;vertical-align:top;max-width:100%}
.sg-ai-media.alignleft{float:left}.sg-ai-media.alignright{float:right}
.sg-ai-media.aligncenter{display:block;width:fit-content;margin-inline:auto}
:where(.sg-card__media, figure, picture) > .sg-ai-media{display:block;width:100%;height:100%}
.sg-ai-badge{position:absolute;top:var(--sg-space-2);right:var(--sg-space-2);z-index:var(--sg-z-raised);pointer-events:none}

/* Komponente: Badge (.sg-badge) – kurze, nicht klickbare Kennzeichnung. Doku: /styleguide/#sgd-badge
 * Töne:     (neutral) · --brand · --brand-solid · --sale · --success · --warning · --danger
 *           · --inverse · --overlay (auf Bildern) · --gold · --partner (+ data-brand="esn" …)
 * Größe:    --sm · (Standard) · --lg      Form: --square (statt Pille)
 * Position: --pin (oben links auf einem Bild/einer Medien-Karte)
 * Jede Schrift-/Flächen-Kombination ist ein geprüftes Token-Paar (WCAG 2.2 AA, 4,5 : 1). */
.sg-badge{display:inline-flex;align-items:center;gap:var(--sg-space-1);max-width:100%;
  padding:var(--sg-space-1) var(--sg-space-2);border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-pill);
  background:var(--sg-color-bg-subtle);color:var(--sg-color-text-muted);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold);
  line-height:1.2;letter-spacing:.01em;white-space:nowrap;vertical-align:middle;text-decoration:none}
.sg-badge svg{width:1em;height:1em;flex:0 0 auto}
.sg-badge img{width:auto;height:1em;flex:0 0 auto}

.sg-badge--brand{background:var(--sg-color-primary-soft);color:var(--sg-color-primary-text);border-color:transparent}
.sg-badge--brand-solid{background:var(--sg-color-primary);color:var(--sg-color-on-primary);border-color:transparent}
.sg-badge--sale{background:var(--sg-color-sale);color:var(--sg-color-on-sale);border-color:transparent;font-weight:var(--sg-font-weight-heavy)}
.sg-badge--success{background:var(--sg-color-success-soft);color:var(--sg-color-success);border-color:transparent}
.sg-badge--warning{background:var(--sg-color-warning-soft);color:var(--sg-color-warning);border-color:transparent}
.sg-badge--danger{background:var(--sg-color-danger-soft);color:var(--sg-color-danger);border-color:transparent}
.sg-badge--inverse{background:var(--sg-color-text);color:var(--sg-color-bg);border-color:transparent}
.sg-badge--overlay{background:var(--sg-color-surface);color:var(--sg-color-text);border-color:transparent;box-shadow:var(--sg-shadow-sm)}
.sg-badge--gold{background:var(--sg-color-gold);color:var(--sg-color-on-gold);border-color:transparent}
.sg-badge--partner{background:var(--sg-color-text);color:var(--sg-color-bg);border-color:transparent}
.sg-badge--partner[data-brand="more-nutrition"]{background:var(--sg-partner-more-nutrition);color:var(--sg-partner-more-nutrition-on)}
.sg-badge--partner[data-brand="more-taste"]{background:var(--sg-partner-more-taste);color:var(--sg-partner-more-taste-on)}
.sg-badge--partner[data-brand="esn"]{background:var(--sg-partner-esn);color:var(--sg-partner-esn-on)}
.sg-badge--partner[data-brand="oace"]{background:var(--sg-partner-oace);color:var(--sg-partner-oace-on)}
.sg-badge--partner[data-brand="ninja"]{background:var(--sg-partner-ninja);color:var(--sg-partner-ninja-on)}
.sg-badge--partner[data-brand="vorpack"]{background:var(--sg-partner-vorpack);color:var(--sg-partner-vorpack-on)}

.sg-badge--sm{font-size:var(--sg-font-size-2xs);padding:var(--sg-space-0-5) var(--sg-space-1-5)}
.sg-badge--lg{font-size:var(--sg-font-size-sm);padding:var(--sg-space-1-5) var(--sg-space-3)}
.sg-badge--square{border-radius:var(--sg-radius-sm)}
.sg-badge--pin{position:absolute;top:var(--sg-space-3);left:var(--sg-space-3);z-index:2;pointer-events:none}
.sg-badge--pin-end{left:auto;right:var(--sg-space-3)}

/* Alte Modul-Badges auf .sg-badge-Maße (nur Schrift/Form – Farben bleiben im Modul) */
body .sg-cp-badge[class]{padding:var(--sg-space-1-5) var(--sg-space-3);border-radius:var(--sg-radius-pill);font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-bold);line-height:1.2}   /* = --lg */
body .sg-cp-feat-badge[class]{padding:var(--sg-space-1) var(--sg-space-2);border-radius:var(--sg-radius-pill);font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold);line-height:1.2;letter-spacing:.01em}   /* = Standard */

/* Komponente: Button (.sg-btn) – nur Tokens. Doku: /styleguide/#sgd-button
 * Varianten: --primary (Standard-Aktion) · --secondary (Kontur) · --ghost (nur Text) · --danger (tonal)
 *            · --partner (+ data-brand="esn|more-nutrition|more-red|more-white|more-taste|vorpack|whatsapp")
 * Größen:    --sm (32 px) · (Standard 40 px) · --lg (48 px)      Breite: --block
 * Alle Größen ≥ 24 px Klickfläche (WCAG 2.5.8); --lg erfüllt 44 px für Touch.
 * Zustände:  :hover, :focus-visible (Fokusring), [disabled]/[aria-disabled="true"]. */
.sg-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sg-space-2);
  min-height:2.5rem;padding:0 var(--sg-space-5);border:var(--sg-size-border) solid transparent;border-radius:var(--sg-radius-pill);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-base);font-weight:var(--sg-font-weight-bold);
  line-height:1.2;text-align:center;text-decoration:none;white-space:nowrap;cursor:pointer;
  -webkit-appearance:none;appearance:none;
  transition:background-color var(--sg-motion-fast) var(--sg-motion-easing),border-color var(--sg-motion-fast) var(--sg-motion-easing),color var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-btn svg,.sg-btn img{width:1.15em;height:1.15em;flex:0 0 auto}
.sg-btn:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}

.sg-btn--primary{background:var(--sg-color-primary);color:var(--sg-color-on-primary)}
.sg-btn--primary:hover{background:var(--sg-color-primary-hover);color:var(--sg-color-on-primary)}
.sg-btn--secondary{background:var(--sg-color-surface);color:var(--sg-color-text);border-color:var(--sg-color-border-field)}
.sg-btn--secondary:hover{border-color:var(--sg-color-primary-text);color:var(--sg-color-primary-text)}
.sg-btn--ghost{background:transparent;color:var(--sg-color-primary-text)}
.sg-btn--ghost:hover{background:var(--sg-color-primary-soft)}
.sg-btn--danger{background:var(--sg-color-danger-soft);color:var(--sg-color-danger)}
.sg-btn--danger:hover{border-color:var(--sg-color-danger)}
.sg-btn--partner{background:var(--sg-color-text);color:var(--sg-color-bg)}
.sg-btn--partner[data-brand="more-nutrition"]{background:var(--sg-partner-more-nutrition);color:var(--sg-partner-more-nutrition-on)}
.sg-btn--partner[data-brand="more-taste"]{background:var(--sg-partner-more-taste);color:var(--sg-partner-more-taste-on)}
.sg-btn--partner[data-brand="more-red"]{background:var(--sg-partner-more-nutrition-deep);color:var(--sg-partner-more-nutrition-deep-on)} /* More rot/weiß (Vorpacklink-Seite) */
.sg-btn--partner[data-brand="more-white"]{background:var(--sg-partner-more-nutrition-deep-on);color:var(--sg-partner-more-nutrition-deep)} /* weiß auf More-Rot */
.sg-btn--partner[data-brand="esn"]{background:var(--sg-partner-esn);color:var(--sg-partner-esn-on)}
.sg-btn--partner[data-brand="oace"]{background:var(--sg-partner-oace);color:var(--sg-partner-oace-on)}
.sg-btn--partner[data-brand="ninja"]{background:var(--sg-partner-ninja);color:var(--sg-partner-ninja-on)}
.sg-btn--partner[data-brand="vorpack"]{background:var(--sg-partner-vorpack);color:var(--sg-partner-vorpack-on)}
.sg-btn--partner[data-brand="whatsapp"]{background:var(--sg-partner-whatsapp);color:var(--sg-partner-whatsapp-on)}
.sg-btn--partner:hover{filter:brightness(.93)}

.sg-btn--sm{min-height:2rem;padding:0 var(--sg-space-3);font-size:var(--sg-font-size-sm)}
.sg-btn--lg{min-height:3rem;padding:0 var(--sg-space-6);font-size:var(--sg-font-size-md)}
.sg-btn--block{display:flex;width:100%}

/* Nur-Symbol-Button (icon_only): quadratisch, Name nur für Screenreader */
.sg-btn--icon{padding:0;width:2.5rem}
.sg-btn--icon.sg-btn--sm{width:2rem}
.sg-btn--icon.sg-btn--lg{width:3rem}
/* Umschalter (pressed): gedrückt = gefülltes Symbol; Merken-Herz (.sg-btn--fav) zusätzlich in Gefahr-Rot (AA-Paar danger/bg, danger/surface) */
.sg-btn[aria-pressed="true"] .sg-icon__heart{fill:currentColor}
.sg-btn--fav[aria-pressed="true"]{color:var(--sg-color-danger)}
.sg-btn--fav .sg-icon{transition:transform var(--sg-motion-base) var(--sg-motion-easing)}
.sg-btn--fav[aria-pressed="true"] .sg-icon{transform:scale(1.12)}

.sg-btn[disabled],.sg-btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed;pointer-events:none}
@media (forced-colors:active){.sg-btn{border-color:ButtonText}}

/* Alte Modul-Buttons auf die zwei Größen des Design Systems (Andreas 09.10.2026: „jedes UI-Element einheitlich“).
 * Nur Maße/Schrift/Form – Farben bleiben im Modul (Varianten). „body“ davor: Modul-Styles laden nach dem Design System.
 * Höhe über padding-block, damit auch inline-block/block-Elemente den Text mittig behalten. */
/* groß (= .sg-btn--lg, 48 px): Haupt-Aktionen */
body :is(.pd-buy, .sg-cp-redeem, .sg-nw-btn, .sg-acc-btn, .sg-rs-more, .sg-rs-wabtn, .sg-hp-btn, .sg-daily-btn, .sg-mp-btn)[class]{
  min-height:3rem;padding-block:calc((3rem - 1.2em - 2px) / 2);padding-inline:var(--sg-space-6);border-radius:var(--sg-radius-pill);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-md);font-weight:var(--sg-font-weight-bold);line-height:1.2}
/* Standard (= .sg-btn, 40 px): Neben-Aktionen in Karten und Abschnitten */
body :is(.pd-rate, .sg-hs-cta, .sg-nw-channel-btn, .sg-pv-seo-link, .sgn-cta-btn, .sg-rs-btn)[class]{
  min-height:2.5rem;padding-block:calc((2.5rem - 1.2em - 2px) / 2);padding-inline:var(--sg-space-5);border-radius:var(--sg-radius-pill);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-base);font-weight:var(--sg-font-weight-bold);line-height:1.2}

/* Komponente: Karte (.sg-card) – nur Tokens. Doku + Beispiele: /styleguide/#sgd-card
 * Grundtypen:  .sg-card                 Panel mit Innenabstand
 *              .sg-card--media          Bild oben, Inhalt in .sg-card__body (kein Innenabstand außen)
 * Optionen:    --subtle (graue Fläche, ohne Rand) · --elevated (Schatten) · --interactive (Hover/Fokus)
 * Ganze Karte klickbar: genau EIN Link mit .sg-card__link (meist im Titel); er spannt sich per
 * ::after über die Karte. So gibt es nur einen Tab-Stopp und einen kurzen Linknamen (WCAG 2.4.4). */
.sg-card{position:relative;display:flex;flex-direction:column;gap:var(--sg-space-3);min-width:0;
  background:var(--sg-color-surface);color:var(--sg-color-text);
  border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-lg);
  padding:var(--sg-space-5);text-decoration:none}
.sg-card[hidden]{display:none!important}
.sg-card--subtle{background:var(--sg-color-bg-subtle);border-color:transparent}
.sg-card--elevated{box-shadow:var(--sg-shadow-md)}
.sg-card--media{padding:0;gap:0;overflow:hidden}
.sg-card--plain{background:none;border:0;padding:0;border-radius:var(--sg-radius-md)} /* ohne Fläche/Rand – z. B. Bild + Titel in Reihen */
.sg-card--plain.sg-card--interactive:hover{box-shadow:none}

.sg-card__media{position:relative;display:block;margin:0;background:var(--sg-color-bg-subtle);overflow:hidden}
.sg-card__media img{display:block;width:100%;height:100%;object-fit:cover}
.sg-card__media--4x3{aspect-ratio:4/3}
.sg-card__media--16x9{aspect-ratio:16/9}
.sg-card__media--1x1{aspect-ratio:1/1}
.sg-card__media img.sg-card__img--contain{object-fit:contain;padding:var(--sg-space-3);box-sizing:border-box} /* Packshots: ganzes Produkt zeigen */
.sg-card__media--fit > img:not(.sg-card__media-bg){position:relative;z-index:1;object-fit:contain} /* ganzes Bild (Aktionsbanner 4:1, Logos, Hochformat) */
.sg-card__media--fit > .sg-card__media-bg{position:absolute;inset:-10%;width:120%;height:120%;object-fit:cover;filter:blur(1.5rem) saturate(1.15);opacity:.9;pointer-events:none} /* Rand: unscharfe Kopie statt leerer Balken */
.sg-card__overlay{position:absolute;top:var(--sg-space-2);left:var(--sg-space-2);z-index:var(--sg-z-raised);pointer-events:none} /* Badge über dem Bild */
.sg-card__body{display:flex;flex-direction:column;gap:var(--sg-space-2);flex:1 1 auto;padding:var(--sg-space-4)}
.sg-card__eyebrow{font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-semibold);letter-spacing:.04em;text-transform:uppercase;color:var(--sg-color-primary-text)}
.sg-card .sg-card__title{margin:0;font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-lg);font-weight:var(--sg-font-weight-bold);line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text)}
.sg-card__text{margin:0;font-size:var(--sg-font-size-base);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-card__meta{font-size:var(--sg-font-size-sm);color:var(--sg-color-text-subtle)}
.sg-card__body > .sg-badge,.sg-card > .sg-badge{align-self:flex-start}
.sg-card__footer{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-2);margin-top:auto}

/* Klickbare Karte */
.sg-card__link{color:inherit;text-decoration:none}
.sg-card__link::after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit}
.sg-card :is(a,button,input,select,textarea,summary,label,[role="button"],[tabindex]):not(.sg-card__link){position:relative;z-index:2} /* weitere Bedienelemente bleiben klickbar */
.sg-card--interactive{transition:box-shadow var(--sg-motion-base) var(--sg-motion-easing),transform var(--sg-motion-base) var(--sg-motion-easing),border-color var(--sg-motion-base) var(--sg-motion-easing)}
.sg-card--interactive:hover{box-shadow:var(--sg-shadow-lg)}
.sg-card--interactive:hover .sg-card__title{color:var(--sg-color-primary-text)}
@media (prefers-reduced-motion:no-preference){.sg-card--interactive:hover{transform:translateY(-2px)}}
.sg-card--interactive:focus-within:has(.sg-card__link:focus-visible),
a.sg-card--interactive:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
.sg-card__link:focus-visible{outline:none}
/* Fallback ohne :has(): Fokusring am Link selbst */
@supports not selector(:has(*)){.sg-card__link:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}}

/* Kartentitel: zwei Stufen (Andreas 09.10.2026). Standard = .sg-card__title (lg, 700); kompakt = dichte Raster
 * (Produkt-, Aktions-, Marken-, Restock-, Kategorie-Karten) md, 700. Farbe bleibt im Modul (z. B. weiß auf Bild). */
body :is(.dl3-title, .pd-bn-title, .sg-pv-card-title, .sg-mk-name, .sg-hp-dcard-t, .sg-rs-card-name, .sg-hp-cat-name, .sg-pv-cat-name)[class]{
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-md);font-weight:var(--sg-font-weight-bold);line-height:var(--sg-font-line-height-snug)}
body :is(.sg-dx-card-title, .sg-hp-ncard-title, .sg-nw-card-title)[class]{
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-lg);font-weight:var(--sg-font-weight-bold);line-height:var(--sg-font-line-height-snug)}

/* ===== Karten-Innenabstände einheitlich (Andreas 09.10.2026: „Abstände überall absolut korrekt und gleichmäßig“) =====
 * Zwei Stufen: Karte/Panel = space-5 (20 px) rundum, Radius lg · kompakte Zeile/Kachel = space-3 × space-4 (12/16 px), Radius md
 * (wie .sg-notice). Vorher 14–28 px bzw. 8–14 px und Radien 11–20 px je Modul. Medien-/Plain-Karten bleiben ohne Innenabstand.
 * Hinweis: Ein künftiger .sg-card--*-Modifier mit eigenem Padding muss hier in :not() ergänzt werden. */
body :is(.sg-card:not(.sg-card--media, .sg-card--plain), .sg-pv-start-card, .sg-pv-filter, .sg-mp-filters, .sg-mp-empty, .sg-mk-btile,
  .sg-cp-brandcard, .sg-cp-sec, .sg-cp-feat, .sg-cp-tile, .sg-cp-step, .sg-daily, .sg-quests, .sg-wc, .sg-hs, .sg-hs-empty,
  .sg-nw-channel, .sg-rs-filter, .sg-rs-wa)[class]{padding:var(--sg-space-5);border-radius:var(--sg-radius-lg)}
body :is(.sg-pv-brandtile, .sg-pv-seo-cat, .dl3-rs__item, .sg-hs-you, .sg-cp-hdeal, .sg-suppbar-set, .sg-cteaser-set)[class]{
  padding:var(--sg-space-3) var(--sg-space-4);border-radius:var(--sg-radius-md)}
body :is(.sg-cp-faq-i, .sg-pv-faq-item, .sg-nw-faq-item, .sg-rs-faq-item)[class]{border-radius:var(--sg-radius-md)}
body .sg-cp-howto > li{padding:var(--sg-space-3) var(--sg-space-4);border-radius:var(--sg-radius-md)}

/* Komponente: Chip / Filter (.sg-chip) – nur Tokens. Doku: /styleguide/#sgd-chip
 * Umschalt-Filter: <button class="sg-chip" aria-pressed="true|false">Text <span class="sg-chip__n">12</span></button>
 * Navigations-Filter (Link): <a class="sg-chip" aria-current="true"> für den aktiven.
 * Gruppe: <div class="sg-chips" role="group" aria-label="…"> · Wischleiste: .sg-chips--scroll
 * Zustand kommt aus aria-pressed / aria-current – nie nur aus einer Klasse (WCAG 4.1.2). */
.sg-chips{display:flex;flex-wrap:wrap;gap:var(--sg-space-2)}
.sg-chips--scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:var(--sg-space-1)}
.sg-chips--scroll::-webkit-scrollbar{display:none}
.sg-chip{display:inline-flex;align-items:center;gap:var(--sg-space-1-5);flex:0 0 auto;min-height:2.25rem;padding:0 var(--sg-space-4);
  border:var(--sg-size-border) solid var(--sg-color-border-strong);border-radius:var(--sg-radius-pill);background:var(--sg-color-surface);color:var(--sg-color-text);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);line-height:1.2;
  text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-appearance:none;appearance:none;
  transition:background-color var(--sg-motion-fast) var(--sg-motion-easing),border-color var(--sg-motion-fast) var(--sg-motion-easing),color var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-chip:hover{border-color:var(--sg-color-primary-text);color:var(--sg-color-primary-text)}
.sg-chip:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
.sg-chip[aria-pressed="true"],.sg-chip[aria-current]:not([aria-current="false"]),
.sg-chip:is(.is-on,.is-active){ /* zweite Zeile: Brücke für Modul-Filter, bis das Skript aria-pressed gesetzt hat */
  background:var(--sg-color-primary);border-color:var(--sg-color-primary);color:var(--sg-color-on-primary)}
.sg-chip__n{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;padding:0 var(--sg-space-1-5);border-radius:var(--sg-radius-pill);
  background:var(--sg-color-bg-subtle);color:var(--sg-color-text-muted);font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold);font-variant-numeric:tabular-nums}
.sg-chip[aria-pressed="true"] .sg-chip__n,.sg-chip[aria-current]:not([aria-current="false"]) .sg-chip__n,.sg-chip:is(.is-on,.is-active) .sg-chip__n{background:var(--sg-color-on-primary);color:var(--sg-color-primary-text)}
.sg-chip--icon{padding-left:var(--sg-space-1-5)} /* Chip mit Symbol vorne */
.sg-chip svg,.sg-chip img{width:1.1em;height:1.1em;flex:0 0 auto}
.sg-chip[disabled],.sg-chip[aria-disabled="true"]{opacity:.5;cursor:not-allowed;pointer-events:none}
@media (forced-colors:active){.sg-chip[aria-pressed="true"]{outline:2px solid Highlight}}

/* Alte Modul-Chips (Produkt-Tags, KI-Vorschläge der Startseite) auf .sg-chip-Maße */
body :is(.pd-tag, .sg-hp-ai-chip)[class]{min-height:2.25rem;padding-block:calc((2.25rem - 1.2em - 2px) / 2);padding-inline:var(--sg-space-4);border-radius:var(--sg-radius-pill);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);line-height:1.2}

/* Komponente: Kontaktformular (contact.php) – nur Tokens. Doku: /styleguide/#sgd-contact */
.sg-contact{position:relative;display:flex;flex-direction:column}
.sg-contact__status:focus{outline:none}
.sg-contact__status:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-md)}
.sg-contact__consent .sg-check{font-size:var(--sg-font-size-sm);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-contact__consent a{color:var(--sg-color-primary-text)}
.sg-contact__hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.sg-contact__actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-3)}

/* Komponente: Inhalt (.sg-ranklist, .sg-prose) – nur Tokens. Doku: /styleguide/#sgd-ranklist
 * Rangliste: <ol class="sg-ranklist"><li class="sg-ranklist__row"><span class="sg-ranklist__n">1</span><span class="sg-ranklist__body">
 *            <a class="sg-ranklist__title">…</a><span class="sg-ranklist__sub">…</span></span><span class="sg-ranklist__aside">Badge</span></li></ol>
 * Fließtext: <div class="sg-prose"> – Lesebreite ~48rem, Absatz- und Listenabstände.
 * rem-Breiten (48/64rem, 2rem Platz-Kreis) sind Layout-Maße für Lesbarkeit, bewusst ohne Token. */
.sg-ranklist{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sg-space-2) var(--sg-space-6);max-width:64rem}
.sg-ranklist__row{display:flex;align-items:center;gap:var(--sg-space-3);padding:var(--sg-space-3) var(--sg-space-4);border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-md);background:var(--sg-color-surface)}
.sg-ranklist__n{flex:0 0 auto;width:2rem;height:2rem;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--sg-radius-pill);background:var(--sg-color-primary-soft);color:var(--sg-color-primary-text);font-weight:var(--sg-font-weight-bold);font-variant-numeric:tabular-nums}
.sg-ranklist__body{display:flex;flex-direction:column;min-width:0;flex:1 1 auto}
.sg-ranklist__title{font-weight:var(--sg-font-weight-bold);color:var(--sg-color-text);text-decoration:none}
a.sg-ranklist__title:hover{color:var(--sg-color-primary-text);text-decoration:underline}
a.sg-ranklist__title:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-sm)}
.sg-ranklist__sub{font-size:var(--sg-font-size-sm);color:var(--sg-color-text-muted);overflow-wrap:anywhere}
.sg-ranklist__aside{flex:0 0 auto}
@media (max-width:640px){.sg-ranklist{grid-template-columns:minmax(0,1fr)}}

.sg-prose{max-width:48rem;font-size:var(--sg-font-size-md);line-height:var(--sg-font-line-height-relaxed);color:var(--sg-color-text)}
.sg-prose p{margin:0 0 var(--sg-space-4)}
.sg-prose ul,.sg-prose ol{margin:0 0 var(--sg-space-4);padding-left:var(--sg-space-5)}
.sg-prose li{margin-bottom:var(--sg-space-2)}
.sg-prose > :last-child{margin-bottom:0}
.sg-prose a{color:var(--sg-color-primary-text);text-decoration:underline;text-underline-offset:var(--sg-space-1)}

/* Komponente: Formularfeld (.sg-field + .sg-input/.sg-select/.sg-textarea/.sg-check) – nur Tokens.
 * Doku: /styleguide/#sgd-field
 * Aufbau:  .sg-field > label.sg-field__label[for] + p.sg-field__hint + Steuerelement + p.sg-field__error
 * Zustände: :focus-visible (Fokusring), [aria-invalid="true"] / .sg-field--error, :disabled, [readonly] */

/* --- Sicherheitsnetz: Jedes Formularfeld zeigt bei Tastatur-/Eingabe-Fokus einen sichtbaren Ring –
 *     auch dort, wo Modul-CSS outline:none setzt (WCAG 2.4.7). Gilt nur auf Seiten mit Tokens. */
:is(input:not([type="hidden"]),select,textarea):focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus)!important;outline-offset:var(--sg-size-focus-offset)!important}

.sg-field{display:flex;flex-direction:column;gap:var(--sg-space-1-5);min-width:0;margin:0 0 var(--sg-space-4)}
.sg-field__label{font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-text)}
.sg-field__req{color:var(--sg-color-danger);margin-left:2px}
.sg-field__hint{margin:0;font-size:var(--sg-font-size-sm);color:var(--sg-color-text-muted)}
.sg-field__error{display:flex;align-items:flex-start;gap:var(--sg-space-1);margin:0;font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-danger)}
.sg-field__error[hidden]{display:none}
.sg-field__error svg{width:1em;height:1em;flex:0 0 auto;margin-top:.15em}

.sg-input,.sg-select,.sg-textarea{width:100%;min-height:2.75rem;box-sizing:border-box;
  padding:var(--sg-space-2) var(--sg-space-3);border:var(--sg-size-border) solid var(--sg-color-border-field);border-radius:var(--sg-radius-md);
  background:var(--sg-color-surface);color:var(--sg-color-text);
  font-family:var(--sg-font-family-body);font-size:max(16px,var(--sg-font-size-md));line-height:1.4;
  transition:border-color var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-input::placeholder,.sg-textarea::placeholder{color:var(--sg-color-text-subtle);opacity:1}
.sg-input:hover,.sg-select:hover,.sg-textarea:hover{border-color:var(--sg-color-text-muted)}
.sg-textarea{min-height:6rem;resize:vertical}
.sg-select{-webkit-appearance:none;appearance:none;padding-right:var(--sg-space-10);
  background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);
  background-position:calc(100% - 20px) 55%,calc(100% - 15px) 55%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.sg-input[readonly],.sg-textarea[readonly]{background:var(--sg-color-bg-subtle);color:var(--sg-color-text-muted)}
.sg-input:disabled,.sg-select:disabled,.sg-textarea:disabled{opacity:.55;cursor:not-allowed}
.sg-field--error :is(.sg-input,.sg-select,.sg-textarea),:is(.sg-input,.sg-select,.sg-textarea)[aria-invalid="true"]{border-color:var(--sg-color-danger);border-width:var(--sg-size-border-strong)}

/* Checkbox / Radio mit Label rechts – ganze Zeile klickbar, Klickfläche ≥ 24 px */
.sg-check{display:flex;align-items:flex-start;gap:var(--sg-space-2);min-height:var(--sg-size-target-min);cursor:pointer;font-size:var(--sg-font-size-base);color:var(--sg-color-text)}
.sg-check input{width:1.125rem;height:1.125rem;margin:.15em 0 0;flex:0 0 auto;accent-color:var(--sg-color-primary)}

/* Suchfeld mit Icon (Label unsichtbar, aber vorhanden) */
.sg-search{position:relative;display:flex;align-items:center}
.sg-search__icon{position:absolute;left:var(--sg-space-3);width:1.1em;height:1.1em;color:var(--sg-color-text-muted);pointer-events:none}
.sg-search .sg-input{padding-left:var(--sg-space-10)}

/* ===== Modul-Felder auf den Feld-Standard (Andreas 09.10.2026: „alles einheitlich“) =====
 * Gleiche Maße wie .sg-input/.sg-select: 44 px hoch, Radius md, Rahmen border-field, Schrift ≥ 16 px
 * (unter 16 px zoomt iOS beim Antippen ins Feld). Kopfzeilen-Suche und KI-Eingabe der Startseite bleiben eigene Varianten.
 * Spezifität über body … [class] bzw. body … :is(), damit Modul-CSS (wird später ausgegeben) nicht gewinnt. */
/* Suchfeld/Feld mit Symbol: Rahmen sitzt am Wrapper, das Eingabefeld darin ist randlos */
body :is(.sg-pv-search, .sg-nw-search, .sg-rs-search, .sg-mp-search, .sg-acc-field)[class]{
  min-height:2.75rem;box-sizing:border-box;padding:0 var(--sg-space-3);
  border:var(--sg-size-border) solid var(--sg-color-border-field);border-radius:var(--sg-radius-md);background:var(--sg-color-surface)}
body :is(.sg-pv-search, .sg-nw-search, .sg-rs-search, .sg-mp-search, .sg-acc-field) :is(input, select)[class],
body :is(.sg-pv-search, .sg-nw-search, .sg-rs-search, .sg-mp-search, .sg-acc-field) :is(input, select){
  min-height:calc(2.75rem - 2 * var(--sg-size-border));padding-block:0;font-size:max(16px,var(--sg-font-size-md));line-height:1.4;color:var(--sg-color-text)}
/* Einzelne Auswahl- und Eingabefelder in Modulen */
body :is(.sg-pv-sortwrap select, .sg-rs-sortwrap select, .sg-mp-fgroup-sort select,
  .sg-mp-lbl :is(input[type=text], input[type=email], input[type=search], select, textarea), .sg-mp-reply input[type=text], .sg-acc-field textarea){
  min-height:2.75rem;box-sizing:border-box;padding:var(--sg-space-2) var(--sg-space-3);
  border:var(--sg-size-border) solid var(--sg-color-border-field);border-radius:var(--sg-radius-md);background:var(--sg-color-surface);color:var(--sg-color-text);
  font-size:max(16px,var(--sg-font-size-md));line-height:1.4}
body :is(.sg-mp-lbl textarea, .sg-acc-field textarea){min-height:6rem}
/* Textfeld im Konto-Wrapper: Rahmen nur am Textfeld selbst (vorher doppelter Rahmen) */
body .sg-acc-field:has(textarea)[class]{min-height:0;padding:0;border:0;background:none}

/* Komponente: Kartenraster (.sg-grid) – nur Tokens + Token-Breakpoints. Doku: /styleguide/#sgd-grid
 * --products  Produkt-/Rezept-/Deal-Kacheln: 5 · 4 (≤1199) · 3 (≤900) · 2 (≤640)
 * --articles  Artikel-/Deal-Karten mit Text:  3 · 2 (≤900) · 1 (≤640)
 * Spalten immer minmax(0,1fr): lange Wörter sprengen die Spalten nicht. */
.sg-grid{display:grid;gap:var(--sg-space-4);align-items:start;min-width:0}
.sg-grid--products{grid-template-columns:repeat(5,minmax(0,1fr))}
.sg-grid--articles{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sg-space-6)}
@media (max-width:1199px){.sg-grid--products{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:900px){
  .sg-grid--products{grid-template-columns:repeat(3,minmax(0,1fr))}
  .sg-grid--articles{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sg-space-4)}
}
@media (max-width:640px){
  .sg-grid{gap:var(--sg-space-3)}
  .sg-grid--products{grid-template-columns:repeat(2,minmax(0,1fr))}
  .sg-grid--articles{grid-template-columns:minmax(0,1fr)}
}

/* Komponente: Hero-Panel (.sg-hero-panel) – Kopfbereich von Detailseiten (Deal, Gutschein). Nur Tokens.
 * Doku: /styleguide/#sgd-hero · Dunkelmodus automatisch über die Tokens.
 * Marken-Heros (z. B. Vorpacklink in More-Orange) dürfen eigene Flächen haben, nutzen aber
 * Radius/Abstände aus den Tokens. */
.sg-hero-panel{background:linear-gradient(180deg,var(--sg-color-surface),var(--sg-color-bg-subtle));border:var(--sg-size-border) solid var(--sg-color-border);
  border-radius:var(--sg-radius-xl);padding:var(--sg-space-8) var(--sg-space-8);box-shadow:var(--sg-shadow-md)}
@media (max-width:640px){.sg-hero-panel{padding:var(--sg-space-6) var(--sg-space-5)}}

/* Komponente: Icons (icon.php) – SVG in der Schriftfarbe, Größe relativ zur Schrift. Doku: /styleguide/#sgd-icon */
.sg-icon{display:inline-block;width:1.15em;height:1.15em;flex:none;vertical-align:-.2em}

/* Komponenten: Seiten-Container, Seitenkopf, Breadcrumbs – nur Tokens. Doku: /styleguide/#sgd-layout
 * .sg-container: EINE Breite für alle Seiten = Header-Breite (1240 px inkl. Seitenrand → 1192 px Inhalt),
 *   gleicher Abstand oben (20 px) → Breadcrumb und Titel stehen auf jeder Seite an derselben Stelle.
 *   --medium / --narrow ändern NICHT die Position, nur die maximale Zeilenbreite des Inhalts (linksbündig).
 * .sg-page-header > nav.sg-breadcrumbs + p.sg-page-eyebrow + h1.sg-page-title + p.sg-page-lead + .sg-page-actions */
.sg-container{box-sizing:border-box;width:100%;max-width:var(--sg-layout-container-wide);margin-inline:auto;
  padding-inline:var(--sg-layout-gutter);padding-block:var(--sg-space-5) var(--sg-space-20)}
.sg-container--medium > *{max-width:var(--sg-layout-container-medium)}
.sg-container--narrow > *{max-width:var(--sg-layout-container-narrow)}
@media (max-width:640px){.sg-container{padding-inline:var(--sg-layout-gutter-sm)}}

.sg-page-header{display:flex;flex-direction:column;gap:var(--sg-space-2);margin:0 0 var(--sg-space-6)}
/* Breadcrumb im Seitenkopf: zusammen mit dem Flex-Abstand genau so weit vom Titel wie überall (16 px) */
.sg-page-header > .sg-breadcrumbs{margin-bottom:var(--sg-space-2)}
.sg-page-eyebrow{margin:0;font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold);letter-spacing:.06em;text-transform:uppercase;color:var(--sg-color-primary-text)}
.sg-page-title{margin:0;font-family:var(--sg-font-family-display);font-size:var(--sg-font-size-4xl);font-weight:var(--sg-font-weight-semibold);
  line-height:var(--sg-font-line-height-tight);letter-spacing:-.01em;color:var(--sg-color-text);text-wrap:balance}
/* Abschnittsüberschrift (h2 unter dem Seitentitel) – einheitlich für alle Seiten */
.sg-section-title{margin:0;font-family:var(--sg-font-family-display);font-size:var(--sg-font-size-2xl);font-weight:var(--sg-font-weight-semibold);line-height:var(--sg-font-line-height-tight);letter-spacing:-.005em;color:var(--sg-color-text);text-wrap:balance}
.sg-page-lead{margin:0;max-width:64ch;font-size:var(--sg-font-size-lg);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-page-actions{display:flex;flex-wrap:wrap;gap:var(--sg-space-2);margin-top:var(--sg-space-2)}
/* Seitenkopf mit Bild (sg_ui_page_header 'media', z. B. /wiki/): Text links, Bild rechts ab 901 px; darunter gestapelt */
.sg-page-header--media{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sg-space-2) var(--sg-space-8);align-items:center}
.sg-page-header__text{display:flex;flex-direction:column;gap:var(--sg-space-2);min-width:0}
.sg-page-header__media{min-width:0;max-width:min(100%,28rem)}
.sg-page-header__media img{display:block;width:100%;height:auto;border-radius:var(--sg-radius-lg)}
.sg-page-header__media .sg-ai-media{display:block}
@media (min-width:901px){
  .sg-page-header--media{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}
  .sg-page-header--media > .sg-breadcrumbs{grid-column:1 / -1}
  .sg-page-header__media{justify-self:end;max-width:100%}
}

/* Breadcrumbs: <nav aria-label> > <ol> > <li>; aktuelle Seite mit aria-current="page", Trenner nur optisch */
.sg-breadcrumbs{margin:0 0 var(--sg-space-4);font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-sm);line-height:1.4}
.sg-breadcrumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-1) 0;list-style:none;margin:0;padding:0}
.sg-breadcrumbs li{display:inline-flex;align-items:center;min-width:0}
.sg-breadcrumbs__sep{margin:0 var(--sg-space-2);color:var(--sg-color-text-subtle)}
/* Links überall in Akzentfarbe (wie auf den internen Seiten), aktuelle Seite in Textfarbe + halbfett */
.sg-breadcrumbs a{color:var(--sg-color-primary-text);text-decoration:underline;text-decoration-color:transparent;text-underline-offset:3px;
  padding-block:var(--sg-space-0-5);transition:text-decoration-color var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-breadcrumbs a:hover{text-decoration-color:currentColor}
.sg-breadcrumbs a:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-sm)}
.sg-breadcrumbs [aria-current="page"]{color:var(--sg-color-text);font-weight:var(--sg-font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:min(60ch,70vw)}
/* Mobil (bis 640 px): Breadcrumb immer EINE Zeile, seitlich wischbar statt Umbruch (Andreas 09.10.2026), auf allen Seiten.
 * Scrollleiste ausgeblendet; Links bleiben per Tab erreichbar (der Browser scrollt den fokussierten Link ins Bild).
 * Innenabstand + gleich großer negativer Rand: Fokusring wird nicht abgeschnitten, Position und Abstand zum Titel bleiben gleich.
 * nav.… (höhere Spezifität) setzt sich gegen Modul-Klassen wie .dl-crumbs durch. sg_ui_breadcrumbs() scrollt beim Laden ans Ende. */
@media (max-width:640px){
  nav.sg-breadcrumbs{overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none;
    padding:var(--sg-space-2);margin:calc(var(--sg-space-2) * -1) calc(var(--sg-space-2) * -1) calc(var(--sg-space-4) - var(--sg-space-2))}
  .sg-page-header > nav.sg-breadcrumbs{margin-bottom:0}
  .sg-breadcrumbs::-webkit-scrollbar{display:none}
  .sg-breadcrumbs ol{flex-wrap:nowrap;width:max-content;white-space:nowrap}
  .sg-breadcrumbs li{flex:0 0 auto}
  .sg-breadcrumbs [aria-current="page"]{max-width:none;overflow:visible;text-overflow:clip}
}

/* Breite Tabellen: scrollen innerhalb ihres Rahmens statt die ganze Seite zu verbreitern.
 * <div class="sg-table-scroll" tabindex="0" role="region" aria-label="…"><table>…</table></div>
 * tabindex + Name: per Tastatur scrollbar (WCAG 2.1.1) */
.sg-table-scroll{position:relative;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}   /* relative: absolut positionierte Kinder (z. B. .sg-visually-hidden) bleiben im Scroll-Bereich – sonst verlängern sie die Seite (Migration 11.10.2026) */
.sg-table-scroll:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-sm)}
/* Einheitliche Überschriften (Andreas 09.10.2026: „Jede Schrift, jedes UI-Element einheitlich“).
 * Alte Modul-Klassen werden hier auf die zwei Stufen des Styleguides gezogen – nur Schrift/Größe/Stärke/Farbe,
 * Abstände bleiben in den Modulen. „body“ davor, weil Modul-Styles nach dem Design System geladen werden.
 * Ausnahmen bewusst: Startseiten-Hero/-Kacheln/App-Banner (Bühnen-Typo), Karten-Titel (.sg-card__title). */
/* Stufe 1 – Abschnittsüberschrift = .sg-section-title */
body :is(.pd-h, .dl-h, .vp-info-h, .sg-cp-h2, .sg-cmp-h2, .sg-dx-sec__h, .sg-nw-h2, .sg-nw-channels-h, .sg-pv-seo-h, .sg-pv-rowh,
         .sg-mk-h2, .sg-lb-h2, .sg-hs-h2, .sg-mp-h2, .sg-az-sech, .sg-hp-h, .sg-hp-hub-h, .sg-fd-q, .sg-rp-h2){
  font-family:var(--sg-font-family-display);font-size:var(--sg-font-size-2xl);font-weight:var(--sg-font-weight-semibold);
  line-height:var(--sg-font-line-height-tight);letter-spacing:-.005em;color:var(--sg-color-text)}
/* Unterabschnitt (h3 in Fließtext-/SEO-Bereichen) */
body :is(.sg-pv-seo-h3, .sg-az-seo-h, .sg-rs-seo-h){
  font-family:var(--sg-font-family-display);font-size:var(--sg-font-size-xl);font-weight:var(--sg-font-weight-semibold);
  line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text)}
/* Stufe 2 – Titel von Widgets/Karten = .sg-card__title */
body :is(.sg-pv-start-h, .sg-daily-h, .sg-quests-h, .sg-wc-h, .sg-acc-sec, .sg-rcp-h, .sg-trend-h, .sg-cp-bname){
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-lg);font-weight:var(--sg-font-weight-bold);
  line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text)}
/* Seitenüberschrift (h1) = .sg-page-title – auch Rezept-Hero und Profilname */
body :is(.sg-rcp-hero-t, .sg-rp-name){
  font-family:var(--sg-font-family-display);font-size:var(--sg-font-size-4xl);font-weight:var(--sg-font-weight-semibold);line-height:var(--sg-font-line-height-tight)}
body .sg-rp-name{color:var(--sg-color-text)}   /* Rezept-Hero bleibt hell (liegt auf dem Foto) */
/* Überschrift auf farbigem Kasten (News-Kanäle, orange): Farbe vom Kasten erben, nicht Text-Token (sonst Weiß auf Orange im Dark Mode) */
body .sg-nw-channels-h{color:inherit}

/* ===== Einheitliche Abstände (Andreas 09.10.2026: „Abstände überall absolut korrekt und gleichmäßig“) =====
 * Drei Stufen: Seitenkopf/Block → Block 24 px · Hauptabschnitt → Hauptabschnitt 48 px · Überschrift → Inhalt 16 px
 * (mobil ≤ 640 px: 20 / 40 / 16). Alle beteiligten Elemente haben unten 24 px, das FOLGENDE Element oben 24 bzw. 48 px –
 * im Blockfluss gilt der größere Wert (Margin-Kollaps), und folgt ein unbekanntes Element, bleiben mindestens 24 px.
 * Nur für direkt aufeinanderfolgende Geschwister (+). Nicht nach Breadcrumb (bleibt 16 px), nach Abschnittsüberschriften
 * (bleibt 16 px) und nach unsichtbaren Elementen (script/style/template). */
/* Werte: design/tokens.json → layout.gap-*; auf dem Handy die -sm-Stufen */
@media (max-width:640px){:root{--sg-layout-gap-block:var(--sg-layout-gap-block-sm);--sg-layout-gap-section:var(--sg-layout-gap-section-sm)}}
body :is(
  .sg-page-header, .sg-cp-ihead, .sg-cp-hero, .sg-dx-head, .sg-nw-head, .sg-pv-head, .sg-mp-head, .sg-rs-head, .sg-fd-head, .sg-acc-head, .sg-mk-hero, .sg-lb-intro, .sg-mk-lead,
  .sg-dx-filters, .sg-nw-filter, .sg-nw-grid:not(.sg-nw-grid3), .sg-nw-more, .sg-pv-start, .sg-pv-cats-sec, .sg-pv-filter, .sg-pv-railwrap, .sg-pv-more,
  .vl-phase, .vl-kpis, .vl-sync, .sg-mp-filters, .sg-mp-empty, .sg-mp-disc, .sg-rs-wa, .sg-rs-filter, .sg-rs-list, .sg-rs-statusmsg, .sg-rs-morewrap, .sg-hub,
  .sg-mk-brands, .sg-cp-brands, .pd-dn, .pd-hero, .sg-cp-disc, .sg-acc-wrap > .sg-card,
  .sg-cp-sec, .sg-cp-tiles, .sg-cp-cta, .sg-dx-sec, .sg-nw-recipes, .sg-nw-channels, .sg-nw-faq, .pd-tabs, .sg-teasers, .pd-section,
  .sg-pv-seo, .sg-rs-seo, .sg-hs, .sg-lb-sec, .sg-mk-sec, .sg-xsec
)[class], body .vl > .sg-container > section{margin-bottom:var(--sg-layout-gap-block)}
/* Letztes sichtbares Element der Seite: kein Abstand zusätzlich zum Footer-Abstand */
body :is(
  .sg-page-header, .sg-cp-ihead, .sg-cp-hero, .sg-dx-head, .sg-nw-head, .sg-pv-head, .sg-mp-head, .sg-rs-head, .sg-fd-head, .sg-acc-head, .sg-mk-hero, .sg-lb-intro, .sg-mk-lead,
  .sg-dx-filters, .sg-nw-filter, .sg-nw-grid:not(.sg-nw-grid3), .sg-nw-more, .sg-pv-start, .sg-pv-cats-sec, .sg-pv-filter, .sg-pv-railwrap, .sg-pv-more,
  .vl-phase, .vl-kpis, .vl-sync, .sg-mp-filters, .sg-mp-empty, .sg-mp-disc, .sg-rs-wa, .sg-rs-filter, .sg-rs-list, .sg-rs-statusmsg, .sg-rs-morewrap, .sg-hub,
  .sg-mk-brands, .sg-cp-brands, .pd-dn, .pd-hero, .sg-cp-disc, .sg-acc-wrap > .sg-card,
  .sg-cp-sec, .sg-cp-tiles, .sg-cp-cta, .sg-dx-sec, .sg-nw-recipes, .sg-nw-channels, .sg-nw-faq, .pd-tabs, .sg-teasers, .pd-section,
  .sg-pv-seo, .sg-rs-seo, .sg-hs, .sg-lb-sec, .sg-mk-sec, .sg-xsec
)[class]:not(:has(~ :not(script, style, template, [hidden], .sg-visually-hidden))), body .vl > .sg-container > section:not(:has(~ :not(script, style, template, [hidden], .sg-visually-hidden))){margin-bottom:0}
/* Kopfbereiche: der letzte Absatz bringt keinen eigenen Außenabstand mit (sonst 30 px statt 24 px) */
body :is(.sg-page-header, .sg-cp-ihead, .sg-dx-head, .sg-nw-head, .sg-pv-head, .sg-mp-head, .sg-rs-head, .sg-fd-head, .sg-acc-head, .pd-dn) > :last-child[class]{margin-bottom:0}
/* Block → Block (zusammengehörig): 24 px */
body :not(.sg-breadcrumbs, script, style, template, .pd-h, .vp-info-h, .sg-cp-h2, .sg-cmp-h2, .sg-dx-sec__h, .sg-nw-h2, .sg-pv-seo-h, .sg-pv-rowh, .sg-mk-h2, .sg-lb-h2, .sg-hs-h2, .sg-mp-h2, .sg-az-sech, .sg-rp-h2, .sg-section-title, .sg-nw-rowhead) + :is(.sg-dx-filters, .sg-nw-filter, .sg-nw-grid:not(.sg-nw-grid3), .sg-nw-more, .sg-pv-start, .sg-pv-cats-sec, .sg-pv-filter, .sg-pv-railwrap, .sg-pv-more,
  .vl-phase, .vl-kpis, .vl-sync, .sg-mp-filters, .sg-mp-empty, .sg-mp-disc, .sg-rs-wa, .sg-rs-filter, .sg-rs-list, .sg-rs-statusmsg, .sg-rs-morewrap, .sg-hub,
  .sg-mk-brands, .sg-cp-brands, .pd-dn, .pd-hero, .sg-cp-disc, .sg-acc-wrap > .sg-card, .vl-note)[class]{margin-top:var(--sg-layout-gap-block)}
/* → Hauptabschnitt: 48 px */
body :not(.sg-breadcrumbs, .pd-h, .vp-info-h, .sg-cp-h2, .sg-cmp-h2, .sg-dx-sec__h, .sg-nw-h2, .sg-pv-seo-h, .sg-pv-rowh, .sg-mk-h2, .sg-lb-h2, .sg-hs-h2, .sg-mp-h2, .sg-az-sech, .sg-rp-h2, .sg-section-title, .sg-nw-rowhead) + :is(.sg-cp-sec, .sg-cp-tiles, .sg-cp-cta, .sg-dx-sec, .sg-nw-recipes, .sg-nw-channels, .sg-nw-faq, .pd-tabs, .sg-teasers, .pd-section,
  .sg-pv-seo, .sg-rs-seo, .sg-hs, .sg-lb-sec, .sg-mk-sec, .sg-xsec)[class], body .vl > .sg-container > section > h2:first-child{margin-top:var(--sg-layout-gap-section)}
/* Abschnittskopf am Anfang eines Hauptabschnitts: Abstand kommt vom Abschnitt, nicht vom Kopf */
body :is(.sg-nw-recipes, .sg-nw-channels, .sg-nw-faq) > .sg-nw-rowhead:first-child{margin-top:0;margin-bottom:var(--sg-layout-gap-heading)}
/* Abschnittsüberschrift → Inhalt: 16 px */
body :is(.pd-h, .vp-info-h, .sg-cp-h2, .sg-cmp-h2, .sg-dx-sec__h, .sg-nw-h2, .sg-pv-seo-h, .sg-pv-rowh, .sg-mk-h2, .sg-lb-h2, .sg-hs-h2,
  .sg-mp-h2, .sg-az-sech, .sg-rp-h2, .sg-section-title)[class]{margin-top:0;margin-bottom:var(--sg-layout-gap-heading)}
/* Seitentitel → Einleitung wie im Seitenkopf: 8 px */
body .sg-mk-title:has(+ .sg-mk-lead)[class]{margin-bottom:var(--sg-space-2)}
body .sg-mk-title + .sg-mk-lead[class]{margin-top:0}
/* Leere Flex-Boxen (Liste/„Mehr laden“ vor dem Nachladen oder ohne Treffer) kollabieren nicht und würden
 * ihre 24 px Abstand zusätzlich einbringen – ausblenden, solange nichts Sichtbares darin steht. */
body :is(.sg-rs-list, .sg-rs-morewrap):not(:has(> :not([hidden], script, template)))[class]{display:none}

/* Komponente: Motto-Look (motto.php) – nur aktiv mit body.sg-motto; Farben über --sg-motto-accent (Konfiguration).
 * Deko-Emojis als generierter Inhalt mit leerem Alternativtext (content: … / "") – Screenreader lesen sie nicht vor. */
.sg-motto-ribbon{background:color-mix(in srgb,var(--sg-motto-accent) 18%,var(--sg-color-surface));border-bottom:var(--sg-size-border) solid color-mix(in srgb,var(--sg-motto-accent) 45%,transparent)}
/* Band: Seitenbreite wie .sg-container, aber ohne dessen Seiten-Innenabstand oben/unten (20 / 80 px) */
.sg-motto-ribbon .sg-container{padding-block:0}
.sg-motto-ribbon__link{display:flex;align-items:center;gap:var(--sg-space-2);min-height:var(--sg-size-target-touch);padding:var(--sg-space-1) 0;color:var(--sg-color-text);text-decoration:none;font-weight:var(--sg-font-weight-semibold);font-size:var(--sg-font-size-sm)}
.sg-motto-ribbon__link:hover .sg-motto-ribbon__go{transform:translateX(var(--sg-space-1))}
.sg-motto-ribbon__link:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
.sg-motto-ribbon__icon{font-size:var(--sg-font-size-lg)}
.sg-motto-ribbon__go{margin-left:auto;transition:transform var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-motto .sg-hd-logo{position:relative}
.sg-motto .sg-hd-logo::after{content:var(--sg-motto-icon);content:var(--sg-motto-icon) / "";position:absolute;right:calc(-1 * var(--sg-space-2));top:calc(-1 * var(--sg-space-1));font-size:var(--sg-font-size-lg);line-height:1;pointer-events:none}
.sg-motto .sg-hp-hero{position:relative}
.sg-motto .sg-hp-hero::after{content:var(--sg-motto-deco);content:var(--sg-motto-deco) / "";position:absolute;right:4%;top:14%;font-size:clamp(1.75rem,5vw,4rem);letter-spacing:.3em;opacity:.9;transform:rotate(-8deg);pointer-events:none;z-index:var(--sg-z-raised)}
.sg-motto-card{border-color:color-mix(in srgb,var(--sg-motto-accent) 55%,var(--sg-color-border))}
.sg-motto-tasks{list-style:none;margin:var(--sg-space-3) 0 0;padding:0;display:grid;gap:var(--sg-space-3)}
.sg-motto-task{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-2)}
.sg-motto-task .sg-progress{flex:1 0 100%}
.sg-motto-task.is-done > span:first-child{text-decoration:line-through;color:var(--sg-color-text-muted)}
@media (max-width:640px){.sg-motto .sg-hp-hero::after{top:6%;right:3%}}
@media (prefers-reduced-motion:reduce){.sg-motto-ribbon__go{transition:none}}

/* Komponente: Newsletter-Anmeldung (newsletter.php) – nur Tokens. Doku: /styleguide/#sgd-nlform */
.sg-nlform{display:flex;flex-direction:column;gap:var(--sg-space-4);max-width:34rem}
.sg-nlform--compact{gap:var(--sg-space-3)}
.sg-nlform__consent{align-items:flex-start;font-size:var(--sg-font-size-sm);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-nlform__consent a{color:var(--sg-color-primary-text)}
.sg-nlform__hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.sg-nlform__msg{margin:0;min-height:1.4em;font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-success)}
.sg-nlform__msg.is-error{color:var(--sg-color-danger)}
.sg-nl-page__lead{margin:0 0 var(--sg-space-6);max-width:40rem;font-size:var(--sg-font-size-lg);line-height:var(--sg-font-line-height-relaxed);color:var(--sg-color-text-muted)}

/* Komponente: Hinweis (.sg-notice) + Leer-Zustand (.sg-empty) – nur Tokens. Doku: /styleguide/#sgd-notice
 * Ton nie nur über Farbe: Rand links + Titel/Text sagen, worum es geht (WCAG 1.4.1). */
.sg-notice{display:flex;flex-direction:column;gap:var(--sg-space-1);margin:0 0 var(--sg-space-4);padding:var(--sg-space-3) var(--sg-space-4);
  border:var(--sg-size-border) solid var(--sg-color-border);border-left-width:var(--sg-size-border-accent);border-radius:var(--sg-radius-md);background:var(--sg-color-surface);color:var(--sg-color-text);
  font-size:var(--sg-font-size-sm);line-height:var(--sg-font-line-height-normal)}
.sg-notice__title{font-weight:var(--sg-font-weight-bold)}
.sg-notice__body > :last-child{margin-bottom:0}
.sg-notice--info{border-left-color:var(--sg-color-primary);background:var(--sg-color-primary-soft)}
.sg-notice--success{border-left-color:var(--sg-color-success);background:var(--sg-color-success-soft)}
.sg-notice--warning{border-left-color:var(--sg-color-warning);background:var(--sg-color-warning-soft)}
.sg-notice--danger{border-left-color:var(--sg-color-danger);background:var(--sg-color-danger-soft)}
.sg-notice a{color:inherit;text-decoration:underline}

.sg-empty{margin:var(--sg-space-2) 0;padding:var(--sg-space-6) var(--sg-space-5);border:var(--sg-size-border) dashed var(--sg-color-border-strong);border-radius:var(--sg-radius-lg);
  background:var(--sg-color-bg-subtle);color:var(--sg-color-text-muted);text-align:center;font-size:var(--sg-font-size-base)}
.sg-empty p{margin:0 0 var(--sg-space-3)}
.sg-empty p:last-child{margin:0}

/* Komponente: Preis (.sg-price) – nur Tokens. Doku: /styleguide/#sgd-price
 * Aufbau: .sg-price > [.sg-price__from] .sg-price__now [s.sg-price__old]
 * Schriftgröße erbt vom Umfeld (Karte, Produktseite), damit die Module ihre Hierarchie behalten. */
.sg-price{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:0 var(--sg-space-1-5);font-variant-numeric:tabular-nums;white-space:nowrap}
.sg-price__from{font-size:.85em;font-weight:var(--sg-font-weight-medium);color:var(--sg-color-text-muted)}
.sg-price__now{font-weight:var(--sg-font-weight-bold);color:var(--sg-color-text)}
.sg-price__old{font-size:.85em;font-weight:var(--sg-font-weight-medium);color:var(--sg-color-text-subtle);text-decoration:line-through}

/* Komponente: Fortschrittsbalken (.sg-progress) – nur Tokens. Doku: /styleguide/#sgd-progress */
.sg-progress{height:.5rem;border-radius:var(--sg-radius-pill);background:var(--sg-color-bg-subtle);box-shadow:inset 0 0 0 1px var(--sg-color-border);overflow:hidden}
.sg-progress__bar{display:block;height:100%;width:var(--sg-progress,0%);border-radius:inherit;background:var(--sg-color-primary);transition:width var(--sg-motion-base, .3s) var(--sg-motion-easing)}
.sg-progress--success .sg-progress__bar{background:var(--sg-color-success)}
@media (prefers-reduced-motion:reduce){.sg-progress__bar{transition:none}}
@media (forced-colors:active){.sg-progress__bar{background:Highlight}}

/* Komponente: Rail – waagerecht scrollende Leisten (Kacheln, Chips, Marken, Karten). Doku: /styleguide/#sgd-rail
 * Andreas 11.10.2026: „generell die Scrollbar nicht anzeigen“. Scrollleiste aus, Wischen/Trackpad/Tastatur bleiben;
 * auf Geräten mit Maus blendet rail.php Pfeile ein, sobald Inhalt übersteht. Bestehende Leisten sind hier gelistet,
 * neue Leisten bekommen einfach die Klasse .sg-rail. html-Präfix: schlägt die Modul-Styles, die später geladen werden. */
html :is(.sg-rail,.sg-pv-rail,.sg-pv-brandtiles,.is-rail,.dl3-rail,.sg-lb-ftypes,.sg-nw-rail,.sg-hp-rail,.rw-cal-scroll,.dl-tabnav,.sg-chips--scroll,.sg-chips){scrollbar-width:none;-ms-overflow-style:none}
html :is(.sg-rail,.sg-pv-rail,.sg-pv-brandtiles,.is-rail,.dl3-rail,.sg-lb-ftypes,.sg-nw-rail,.sg-hp-rail,.rw-cal-scroll,.dl-tabnav,.sg-chips--scroll,.sg-chips)::-webkit-scrollbar{display:none;width:0;height:0}
.sg-rail{display:flex;gap:var(--sg-space-3);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.sg-rail-wrap{position:relative;min-width:0}
.sg-rail-btn{position:absolute;top:50%;z-index:2;display:none;place-items:center;width:var(--sg-size-target-touch);height:var(--sg-size-target-touch);margin-top:calc(var(--sg-size-target-touch) / -2);padding:0;border:var(--sg-size-border) solid var(--sg-color-border-strong);border-radius:var(--sg-radius-pill);background:var(--sg-color-surface);color:var(--sg-color-text);font-size:var(--sg-font-size-lg);line-height:1;cursor:pointer;box-shadow:var(--sg-shadow-md)}
.sg-rail-btn[data-dir="-1"]{left:0}
.sg-rail-btn[data-dir="1"]{right:0}
.sg-rail-btn:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
@media (hover:hover) and (pointer:fine){.sg-rail-wrap.has-prev>.sg-rail-btn[data-dir="-1"],.sg-rail-wrap.has-next>.sg-rail-btn[data-dir="1"]{display:grid}}

/* Komponente: Sterne-Eingabe (.sg-rating-input) – nur Tokens. Doku: /styleguide/#sgd-rating
 * Aufbau: fieldset.sg-rating-input > legend + p.__hint + div.__row > (input.__radio + label.__star) × max + input + label.__none
 * Radios sind optisch versteckt, aber fokussierbar; der Fokusring sitzt am zugehörigen Label. Klickfläche 44 px.
 * Zustand über Form UND Farbe: leere Sterne ☆ (border-field), gewählte bis zum gewählten ★ (color.star). */
.sg-rating-input{margin:0 0 var(--sg-space-4);padding:0;border:0;min-width:0}
.sg-rating-input[hidden]{display:none}
.sg-rating-input__legend{padding:0;margin:0 0 var(--sg-space-1);font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-text)}
.sg-rating-input__opt{font-weight:var(--sg-font-weight-regular);color:var(--sg-color-text-muted)}
.sg-rating-input__hint{margin:0 0 var(--sg-space-1);font-size:var(--sg-font-size-xs);color:var(--sg-color-text-muted)}
.sg-rating-input__row{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-0-5)}
.sg-rating-input__radio{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}
.sg-rating-input__star{display:inline-flex;align-items:center;justify-content:center;min-width:var(--sg-size-target-touch);min-height:var(--sg-size-target-touch);
  font-size:var(--sg-font-size-2xl);line-height:1;color:var(--sg-color-border-field);cursor:pointer;border-radius:var(--sg-radius-sm);
  transition:color var(--sg-motion-fast) var(--sg-motion-easing)}
/* Leer = ☆, gefüllt = ★ (Zustand auch ohne Farbe erkennbar, WCAG 1.4.1): beide Zeichen stehen aria-hidden im Label,
 * sichtbar ist eins – umgeschaltet über --sg-ri-on / --sg-ri-off am Label */
.sg-rating-input__on{display:var(--sg-ri-on,none)}
.sg-rating-input__off{display:var(--sg-ri-off,inline)}
.sg-rating-input__star:hover,.sg-rating-input__radio:checked+.sg-rating-input__star{--sg-ri-on:inline;--sg-ri-off:none;color:var(--sg-color-star)}
.sg-rating-input__none{display:inline-flex;align-items:center;min-height:var(--sg-size-target-min);margin-left:var(--sg-space-2);padding:0 var(--sg-space-2);
  border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-pill);font-size:var(--sg-font-size-xs);color:var(--sg-color-text-muted);cursor:pointer}
.sg-rating-input__radio:checked+.sg-rating-input__none{border-color:var(--sg-color-text-muted);color:var(--sg-color-text);font-weight:var(--sg-font-weight-semibold)}
.sg-rating-input__radio:focus-visible+label{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
/* alle Sterne bis zum gewählten füllen (Browser mit :has) */
.sg-rating-input__row:has(.sg-rating-input__radio[value="2"]:checked) .sg-rating-input__star:is([data-v="1"]),
.sg-rating-input__row:has(.sg-rating-input__radio[value="3"]:checked) .sg-rating-input__star:is([data-v="1"],[data-v="2"]),
.sg-rating-input__row:has(.sg-rating-input__radio[value="4"]:checked) .sg-rating-input__star:is([data-v="1"],[data-v="2"],[data-v="3"]),
.sg-rating-input__row:has(.sg-rating-input__radio[value="5"]:checked) .sg-rating-input__star:is([data-v="1"],[data-v="2"],[data-v="3"],[data-v="4"]){--sg-ri-on:inline;--sg-ri-off:none;color:var(--sg-color-star)}
/* Hover: alle Sterne bis zum überfahrenen füllen */
.sg-rating-input__row:has(.sg-rating-input__star[data-v="2"]:hover) .sg-rating-input__star:is([data-v="1"]),
.sg-rating-input__row:has(.sg-rating-input__star[data-v="3"]:hover) .sg-rating-input__star:is([data-v="1"],[data-v="2"]),
.sg-rating-input__row:has(.sg-rating-input__star[data-v="4"]:hover) .sg-rating-input__star:is([data-v="1"],[data-v="2"],[data-v="3"]),
.sg-rating-input__row:has(.sg-rating-input__star[data-v="5"]:hover) .sg-rating-input__star:is([data-v="1"],[data-v="2"],[data-v="3"],[data-v="4"]){--sg-ri-on:inline;--sg-ri-off:none;color:var(--sg-color-star)}
@media (forced-colors: active){.sg-rating-input__radio:checked+.sg-rating-input__star{outline:var(--sg-size-border) solid CanvasText}}   /* Glyphe ☆/★ bleibt auch hier sichtbar */

/* Komponente: Suchergebnisse (.sg-results, .sg-result, .sg-mark, .sg-pager) – nur Tokens. Doku: /styleguide/#sgd-result
 * Liste:  <ol class="sg-results"><li class="sg-result sg-result--link"><span class="sg-result__media"><img alt=""></span>
 *         <span class="sg-result__body"><span class="sg-result__badges">Badges</span><h3 class="sg-result__title"><a class="sg-result__link">…</a></h3>
 *         <span class="sg-result__sub">…</span></span><span class="sg-result__meta">Score</span></li></ol>
 * Ganze Zeile klickbar über .sg-result__link::after (ein Link je Zeile). Bildfeld 4rem (Handy 3rem) ist ein Layout-Maß ohne Token.
 * Seitennavigation: <nav class="sg-pager"><ul><li><a class="sg-pager__num" aria-current="page">2</a></li></ul></nav> */
.sg-results{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--sg-space-2)}
.sg-result{position:relative;display:flex;align-items:center;gap:var(--sg-space-4);padding:var(--sg-space-3) var(--sg-space-4);
  border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-md);background:var(--sg-color-surface)}
.sg-result--link:hover{border-color:var(--sg-color-border-strong);box-shadow:var(--sg-shadow-sm)}
.sg-result__media{flex:0 0 auto;width:4rem;height:4rem;border-radius:var(--sg-radius-sm);background:var(--sg-color-bg-subtle);overflow:hidden;display:flex;align-items:center;justify-content:center}
.sg-result__media img{width:100%;height:100%;object-fit:contain}
.sg-result__media--empty{color:var(--sg-color-text-muted)}
.sg-result__media--empty svg{width:50%;height:50%}
.sg-result__body{display:flex;flex-direction:column;gap:var(--sg-space-1);min-width:0;flex:1 1 auto}
.sg-result__badges{display:flex;flex-wrap:wrap;gap:var(--sg-space-1)}
.sg-result__title[class]{margin:0;font-size:var(--sg-font-size-md);font-weight:var(--sg-font-weight-bold);line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text);overflow-wrap:anywhere}
.sg-result__link{color:inherit;text-decoration:none}
.sg-result__link::after{content:"";position:absolute;inset:0;border-radius:var(--sg-radius-md)}
.sg-result__link:hover{color:var(--sg-color-primary-text);text-decoration:underline}
.sg-result__link:focus-visible{outline:none}
.sg-result__link:focus-visible::after{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
.sg-result__sub{font-size:var(--sg-font-size-sm);color:var(--sg-color-text-muted);overflow-wrap:anywhere}
.sg-result__meta{flex:0 0 auto;display:flex;align-items:center;gap:var(--sg-space-2)}
@media (max-width:480px){
  .sg-result{gap:var(--sg-space-3);padding:var(--sg-space-3)}
  .sg-result__media{width:3rem;height:3rem}
  .sg-result{flex-wrap:wrap}
  .sg-result__body{flex:1 1 0}   /* lange Titel bleiben neben dem Bild, statt darunter zu rutschen */
  .sg-result__meta{width:100%;padding-left:calc(3rem + var(--sg-space-3))}
}

.sg-mark{background:var(--sg-color-primary-soft);color:inherit;border-radius:var(--sg-radius-sm);padding:0;box-shadow:0 0 0 var(--sg-space-0-5) var(--sg-color-primary-soft)}   /* Fläche per Schatten, damit kein zusätzlicher Wortabstand entsteht */

.sg-pager ul{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-2);margin:var(--sg-space-6) 0 0;padding:0;list-style:none}
.sg-pager a{display:inline-flex;align-items:center;justify-content:center;min-width:var(--sg-size-target-touch);min-height:var(--sg-size-target-touch);padding:0 var(--sg-space-3);
  border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-md);background:var(--sg-color-surface);color:var(--sg-color-text);text-decoration:none;font-weight:var(--sg-font-weight-semibold)}
.sg-pager a:hover{border-color:var(--sg-color-border-strong);color:var(--sg-color-primary-text)}
.sg-pager a[aria-current="page"]{background:var(--sg-color-primary);border-color:var(--sg-color-primary);color:var(--sg-color-on-primary)}
.sg-pager a:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
.sg-pager__gap{color:var(--sg-color-text-muted)}

/* Suchformular (sg_ui_search mit 'action'): Feld + Absenden-Knopf in einer Zeile */
.sg-search--form{gap:var(--sg-space-2)}
.sg-search--form .sg-search__field{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0}
.sg-search--form .sg-input{width:100%}
.sg-search--form .sg-btn{flex:0 0 auto}

/* Komponente: Abzeichen mit Grafik (reward.php) – Raster aus Medaillen-Grafiken mit Namen darunter. Nur Tokens. Doku: /styleguide/#sgd-reward */
.sg-reward-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(6.5rem,1fr));gap:var(--sg-space-4) var(--sg-space-3)}
.sg-reward{display:flex;flex-direction:column;align-items:center;gap:var(--sg-space-1-5);min-width:0;text-align:center}
.sg-reward__art{display:grid;place-items:center;width:4.5rem;height:4.5rem;flex:none}
.sg-reward__img{display:block;width:100%;height:100%;object-fit:contain}
.sg-reward__emoji{display:grid;place-items:center;width:100%;height:100%;border-radius:var(--sg-radius-round);background:var(--sg-color-bg-subtle);box-shadow:inset 0 0 0 var(--sg-size-border) var(--sg-color-border);font-size:var(--sg-font-size-2xl);line-height:1}
.sg-reward__label{font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold);line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text);overflow-wrap:anywhere}
.sg-reward.is-off .sg-reward__art{opacity:.35;filter:grayscale(1)}
.sg-reward.is-off .sg-reward__label{color:var(--sg-color-text-muted)}
.sg-reward--sm .sg-reward__art{width:3rem;height:3rem}
.sg-reward--sm .sg-reward__emoji{font-size:var(--sg-font-size-lg)}
.sg-reward--lg .sg-reward__art{width:8rem;height:8rem}
.sg-reward-note{margin:var(--sg-space-3) 0 0;font-size:var(--sg-font-size-2xs);color:var(--sg-color-text-muted)}

/* Komponente: Bewertung (.sg-score, .sg-stars) – nur Tokens. Doku: /styleguide/#sgd-score
 * .sg-score--supp  Suppligator-Score (Gator, /10)    .sg-score--comm  Community (Stern, /5)
 * Varianten: (inline) · --badge · --large
 * Zahl immer in Textfarbe (4,5 : 1); Icons/Sterne als Grafik mit ≥ 3 : 1 (color.star, color.brand). */
.sg-score{display:inline-flex;align-items:center;gap:var(--sg-space-1);white-space:nowrap;
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-heavy);
  line-height:1.2;color:var(--sg-color-text);font-variant-numeric:tabular-nums}
.sg-score__icon{display:inline-flex;align-items:center;flex:0 0 auto}
.sg-score__icon img,.sg-score__icon svg{width:1.15em;height:1.15em;display:block}
.sg-score--comm .sg-score__icon{color:var(--sg-color-star)}
.sg-score--supp .sg-score__value{color:var(--sg-color-primary-text)}
.sg-score__max{font-weight:var(--sg-font-weight-semibold);font-size:.85em;color:var(--sg-color-text-muted);margin-left:1px}
.sg-score__count{font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-text-muted)}

.sg-score--badge{padding:var(--sg-space-1) var(--sg-space-2);border-radius:var(--sg-radius-pill);font-size:var(--sg-font-size-xs)}
.sg-score--badge.sg-score--supp{background:var(--sg-color-primary-soft)}
.sg-score--badge.sg-score--comm{background:var(--sg-color-warning-soft)}
.sg-score--badge .sg-score__max{color:var(--sg-color-text)}

.sg-score--large{gap:var(--sg-space-2);font-size:var(--sg-font-size-3xl);font-weight:var(--sg-font-weight-bold);line-height:1}
.sg-score--large .sg-score__max{font-size:.5em}

/* Sterne-Reihe: graue Basis + farbige Füllung per Breite */
.sg-stars{position:relative;display:inline-block;line-height:1;font-size:var(--sg-font-size-md);letter-spacing:1px;white-space:nowrap;vertical-align:middle}
.sg-stars__base{color:var(--sg-color-border-field)}
.sg-stars__fill{position:absolute;inset:0 auto 0 0;overflow:hidden;color:var(--sg-color-star)}

/* Komponente: Anzeige / Partner-Platz (.sg-ad, .sg-ad-coop) – nur Tokens. Doku: /styleguide/#sgd-sponsored
 * Kennzeichnung „Anzeige“ immer sichtbar oben links (Badge neutral, geprüftes Kontrast-Paar) + „Partner: Name“.
 * Fläche bewusst ruhig (Rand + bg-subtle), damit sie sich vom redaktionellen Inhalt abhebt, ohne ihn zu imitieren.
 * Varianten: --banner (Startseite) · --hero (Markenseite) · --card (Aktionen-Übersicht) · --inline (News-Artikel). */
.sg-ad{position:relative;display:flex;flex-direction:column;gap:var(--sg-space-3);min-width:0;margin:0 0 var(--sg-layout-gap-block);
  padding:var(--sg-space-4);border:var(--sg-size-border) solid var(--sg-color-border-strong);border-radius:var(--sg-radius-lg);
  background:var(--sg-color-bg-subtle);color:var(--sg-color-text);font-family:var(--sg-font-family-body)}
.sg-ad[data-brand]{border-top-width:var(--sg-size-border-accent)}
.sg-ad[data-brand="ninja"]{border-top-color:var(--sg-partner-ninja)}
.sg-ad[data-brand="esn"]{border-top-color:var(--sg-partner-esn)}
.sg-ad[data-brand="more-nutrition"]{border-top-color:var(--sg-partner-more-nutrition)}
.sg-ad[data-brand="more-taste"]{border-top-color:var(--sg-partner-more-taste)}
.sg-ad[data-brand="oace"]{border-top-color:var(--sg-partner-oace)}
.sg-ad__head{display:flex;align-items:center;gap:var(--sg-space-2);min-width:0}
.sg-ad__label{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-2);min-width:0}
.sg-ad__badge{border:var(--sg-size-border) solid var(--sg-color-border-strong)}
.sg-ad__partner{font-size:var(--sg-font-size-sm);color:var(--sg-color-text-muted)}
.sg-ad__body{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sg-space-4);align-items:center}
.sg-ad__media{display:block;overflow:hidden;border-radius:var(--sg-radius-md);background:var(--sg-color-surface)}
.sg-ad__img{display:block;width:100%;height:auto;object-fit:cover}
.sg-ad__copy{display:flex;flex-direction:column;gap:var(--sg-space-2);min-width:0}
.sg-ad .sg-ad__title{margin:0;font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-lg);font-weight:var(--sg-font-weight-bold);line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text)}
.sg-ad__text{margin:0;font-size:var(--sg-font-size-base);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-ad__code{margin:0;font-size:var(--sg-font-size-sm);color:var(--sg-color-text-muted)}
.sg-ad__code b{color:var(--sg-color-text);letter-spacing:.02em}
.sg-ad__cta{margin:var(--sg-space-1) 0 0}
/* ganze Fläche klickbar, ein Tab-Stopp (wie .sg-card__link) */
.sg-ad__link::after{content:"";position:absolute;inset:0;z-index:var(--sg-z-raised);border-radius:var(--sg-radius-lg)}
.sg-ad__link:focus-visible{outline:none}
.sg-ad:focus-within:has(.sg-ad__link:focus-visible){outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
@supports not selector(:has(*)){.sg-ad__link:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}}
.sg-ad:hover .sg-ad__title{color:var(--sg-color-primary-text)}

/* Banner (Startseite) + Hero (Markenseite): Bild 4:1 neben/über dem Text */
@media (min-width:901px){
  .sg-ad--banner .sg-ad__body,.sg-ad--hero .sg-ad__body{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
  .sg-ad--banner .sg-ad__body:not(:has(.sg-ad__media)),.sg-ad--hero .sg-ad__body:not(:has(.sg-ad__media)){grid-template-columns:minmax(0,1fr)}
}
.sg-ad--hero{margin-top:calc(var(--sg-space-2) * -1)}
/* Karte (Aktionen-Übersicht): Bild oben 16:9 */
.sg-ad--card .sg-ad__img{aspect-ratio:16/9}
@media (min-width:641px){.sg-ad--card .sg-ad__body{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
/* Inline (News-Artikel): kleines Bild links, Text rechts */
.sg-ad--inline{margin:var(--sg-space-6) 0}
@media (min-width:641px){.sg-ad--inline .sg-ad__body{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}}
.sg-ad--inline .sg-ad__title{font-size:var(--sg-font-size-md)}

/* Kooperations-Label (gesponsertes Rezept / gesponserter Artikel) */
.sg-ad-coop{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-2);margin:0 0 var(--sg-space-4);
  padding:var(--sg-space-2) var(--sg-space-3);border:var(--sg-size-border) solid var(--sg-color-border-strong);border-radius:var(--sg-radius-md);
  background:var(--sg-color-bg-subtle);font-size:var(--sg-font-size-sm);color:var(--sg-color-text)}
.sg-ad-coop__link{color:var(--sg-color-primary-text);font-weight:var(--sg-font-weight-semibold)}

/* Bewertung aus einer Partner-Aktion (sg_ui_review_disclosure): ruhige Zeile unter dem Bewertungstext bzw. der Zusammenfassung */
.sg-ad-review{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-1) var(--sg-space-2);margin:var(--sg-space-2) 0 0;
  font-size:var(--sg-font-size-xs);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-ad-review__link{color:var(--sg-color-primary-text);font-weight:var(--sg-font-weight-semibold)}

@media print{.sg-ad{break-inside:avoid}.sg-ad__link::after{display:none}}

/* Komponente: Schritt-Erklärung als Karten (steps.php) – je Schritt eine Karte (.sg-card, Schatten md) mit kleinem Bild
 * oben auf getönter Fläche, Nummer auf der Bildkante, darunter Titel und Text (zentriert). Nur Tokens.
 * Doku: /styleguide/#sgd-steps · ab 901 px N Karten nebeneinander, bis 900 px gestapelt (Karte bleibt gleich aufgebaut).
 * Dunkelmodus automatisch über die Tokens; die Bilder behalten ihren hellen Grund und sitzen in einem Rahmen. */
.sg-steps{display:flex;flex-direction:column;gap:var(--sg-space-3)}
.sg-steps__list{display:grid;grid-template-columns:repeat(var(--sg-steps-n,3),minmax(0,1fr));gap:var(--sg-space-5);list-style:none;margin:0;padding:0}
.sg-steps .sg-steps__item{align-items:center;text-align:center;gap:var(--sg-space-2);padding:var(--sg-space-6) var(--sg-space-5) var(--sg-space-5)}
/* Bild: kleines Quadrat auf getönter Fläche (Container), Nummer mittig auf der Unterkante */
.sg-steps__media{position:relative;margin-bottom:var(--sg-space-4)}
.sg-steps__thumb{display:block;width:9rem;aspect-ratio:1/1;padding:var(--sg-space-2);box-sizing:border-box;
  background:var(--sg-color-primary-soft);border-radius:var(--sg-radius-lg)}
.sg-steps__thumb .sg-ai-media{display:block;width:100%;height:100%}
.sg-steps__thumb img{display:block;width:100%;height:100%;object-fit:cover;border-radius:var(--sg-radius-md);
  border:var(--sg-size-border) solid var(--sg-color-border);box-sizing:border-box;background:var(--sg-color-surface)}
.sg-steps__thumb .sg-steps__crop{object-position:var(--sg-steps-pos,50%) 50%} /* Ausschnitt aus der Sammelgrafik */
.sg-steps__media .sg-steps__num{position:absolute;left:50%;bottom:0;transform:translate(-50%,50%);
  box-shadow:0 0 0 var(--sg-size-border-indicator) var(--sg-color-surface)}
.sg-steps__num{display:inline-grid;place-items:center;flex:none;width:var(--sg-size-target-touch);height:var(--sg-size-target-touch);border-radius:var(--sg-radius-round);
  background:var(--sg-color-primary);color:var(--sg-color-on-primary);font-size:var(--sg-font-size-md);font-weight:var(--sg-font-weight-bold);line-height:1}
.sg-steps__title{margin:0;font-family:var(--sg-font-family-display);font-size:var(--sg-font-size-lg);font-weight:var(--sg-font-weight-semibold);line-height:var(--sg-font-line-height-snug);color:var(--sg-color-text)}
.sg-steps__text{margin:0;font-size:var(--sg-font-size-md);line-height:var(--sg-font-line-height-normal);color:var(--sg-color-text-muted)}
.sg-steps__note{margin:0;font-size:var(--sg-font-size-2xs);color:var(--sg-color-text-muted)}
@media (max-width:900px){
  .sg-steps__list{grid-template-columns:minmax(0,1fr);gap:var(--sg-space-4)}
  .sg-steps .sg-steps__item{max-width:32rem;width:100%;margin-inline:auto;box-sizing:border-box}
}
@media (max-width:480px){
  .sg-steps__thumb{width:8rem}
}

/* Komponente: Suchvorschläge (.sg-suggest) – Combobox-Popup unter einem Suchfeld. Nur Tokens. Doku: /styleguide/#sgd-suggest
 * <div class="sg-suggest [sg-suggest--inline]"><form>…</form><div class="sg-suggest__pop"><ul class="sg-suggest__list" role="listbox">
 *   <li class="sg-suggest__opt" role="option" aria-selected><span class="sg-suggest__media"><img alt=""></span>
 *   <span class="sg-suggest__body"><span class="sg-suggest__title">…<mark class="sg-mark"></span>
 *   <span class="sg-suggest__meta">Badges <span class="sg-suggest__sub">…</span></span></span></li>
 *   <li class="sg-suggest__opt sg-suggest__opt--all">Alle Ergebnisse …</li></ul><p class="sg-suggest__empty"></p></div>
 * Standard: Dropdown unter dem Feld (absolut, kein Layout-Sprung), mindestens so breit wie das Feld, höchstens Viewport − Rand.
 * --inline: im Fluss in voller Breite (mobiles Menü). Gewählte Zeile: Fläche + Balken links (nicht nur Farbe).
 * Bildfeld 2.5rem ist ein Layout-Maß ohne Token (wie .sg-result__media). */
.sg-suggest{position:relative}
.sg-suggest__pop{position:absolute;top:calc(100% + var(--sg-space-2));left:0;z-index:var(--sg-z-dropdown);
  min-width:100%;width:max-content;max-width:min(30rem,calc(100vw - 2 * var(--sg-layout-gutter-sm)));
  max-height:min(70vh,34rem);overflow-y:auto;overscroll-behavior:contain;
  background:var(--sg-color-surface);color:var(--sg-color-text);border:var(--sg-size-border) solid var(--sg-color-border);
  border-radius:var(--sg-radius-md);box-shadow:var(--sg-shadow-lg);padding:var(--sg-space-1);text-align:left}
.sg-suggest__pop[hidden],.sg-suggest__list[hidden],.sg-suggest__empty[hidden]{display:none}
.sg-suggest__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sg-space-0-5)}
.sg-suggest__opt{position:relative;display:flex;align-items:center;gap:var(--sg-space-3);min-height:var(--sg-size-target-touch);
  padding:var(--sg-space-2) var(--sg-space-3);border-radius:var(--sg-radius-sm);cursor:pointer;
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-sm);line-height:var(--sg-font-line-height-snug)}
.sg-suggest__opt:hover{background:var(--sg-color-bg-subtle)}
.sg-suggest__opt[aria-selected="true"]{background:var(--sg-color-primary-soft);box-shadow:inset var(--sg-size-border-indicator) 0 0 var(--sg-color-primary)}
.sg-suggest__media{flex:0 0 auto;width:2.5rem;height:2.5rem;border-radius:var(--sg-radius-sm);background:var(--sg-color-bg-subtle);overflow:hidden;
  display:flex;align-items:center;justify-content:center}
.sg-suggest__media img{width:100%;height:100%;object-fit:contain}
.sg-suggest__media--empty{color:var(--sg-color-text-muted)}
.sg-suggest__media--empty svg{width:50%;height:50%}
.sg-suggest__body{display:flex;flex-direction:column;gap:var(--sg-space-1);min-width:0;flex:1 1 auto}
.sg-suggest__title{font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-text);overflow-wrap:anywhere;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
.sg-suggest__meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sg-space-1) var(--sg-space-2);min-width:0}
.sg-suggest__sub{font-size:var(--sg-font-size-xs);color:var(--sg-color-text-muted);overflow-wrap:anywhere}
.sg-suggest__opt--all{border-top:var(--sg-size-border) solid var(--sg-color-border);border-radius:0 0 var(--sg-radius-sm) var(--sg-radius-sm);margin-top:var(--sg-space-1)}
.sg-suggest__opt--all .sg-suggest__media{background:transparent;color:var(--sg-color-primary-text)}
.sg-suggest__opt--all .sg-suggest__title{color:var(--sg-color-primary-text)}
.sg-suggest__empty{margin:0;padding:var(--sg-space-3);font-size:var(--sg-font-size-sm);color:var(--sg-color-text-muted)}
/* im Fluss, volle Breite (mobiles Menü): nicht überlagern, das Menü scrollt mit */
.sg-suggest--inline .sg-suggest__pop{position:static;width:auto;min-width:0;max-width:none;max-height:none;overflow:visible;
  margin:var(--sg-space-2) 0 0;box-shadow:none}
@media (prefers-reduced-motion:no-preference){.sg-suggest__opt{transition:background-color var(--sg-motion-fast) var(--sg-motion-easing)}}

/* Komponente: Tabs (.sg-tabs > .sg-tab) – nur Tokens. Doku: /styleguide/#sgd-tabs
 * Inhalts-Tabs mit Unterstrich. Zustand aus aria-selected (Brücke: .is-active). */
.sg-tabs{display:flex;flex-wrap:wrap;gap:var(--sg-space-6);border-bottom:var(--sg-size-border) solid var(--sg-color-border);margin:0 0 var(--sg-space-6)}
.sg-tab{display:inline-flex;align-items:center;gap:var(--sg-space-2);min-height:2.75rem;margin:0 0 calc(-1 * var(--sg-size-border));padding:0 0 var(--sg-space-3);
  border:0;border-bottom:var(--sg-size-border-indicator) solid transparent;background:none;color:var(--sg-color-text-subtle);
  font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-lg);font-weight:var(--sg-font-weight-semibold);cursor:pointer;
  transition:color var(--sg-motion-fast) var(--sg-motion-easing),border-color var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-tab:hover{color:var(--sg-color-text)}
.sg-tab:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-sm)}
.sg-tab[aria-selected="true"],.sg-tab.is-active,.sg-tab.is-on{color:var(--sg-color-text);border-bottom-color:var(--sg-color-primary)}
.sg-tab .sg-chip__n{margin-left:var(--sg-space-1)}
@media (forced-colors:active){.sg-tab[aria-selected="true"]{border-bottom-color:Highlight}}

/* Segment-Schalter (.sg-segmented > .sg-segmented__btn): kleine Umschalter mit 2–4 Optionen
 * (z. B. Zeitraum, Sortierung). Zustand aus aria-selected (Tabs) bzw. aria-pressed (Umschalter). */
.sg-segmented{display:inline-flex;gap:var(--sg-space-1);padding:var(--sg-space-1);border-radius:var(--sg-radius-pill);background:var(--sg-color-bg-subtle);border:var(--sg-size-border) solid var(--sg-color-border)}
.sg-segmented__btn{display:inline-flex;align-items:center;gap:var(--sg-space-1-5);min-height:2rem;padding:0 var(--sg-space-4);border:0;border-radius:var(--sg-radius-pill);background:transparent;
  color:var(--sg-color-text-muted);font-family:var(--sg-font-family-body);font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-bold);cursor:pointer;
  transition:background-color var(--sg-motion-fast) var(--sg-motion-easing),color var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-segmented__btn:hover{color:var(--sg-color-text)}
.sg-segmented__btn:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset)}
.sg-segmented__btn:is([aria-selected="true"],[aria-pressed="true"],.is-active){background:var(--sg-color-surface);color:var(--sg-color-text);box-shadow:var(--sg-shadow-sm)}
.sg-segmented__btn svg,.sg-segmented__btn img{width:1.1em;height:1.1em}
@media (forced-colors:active){.sg-segmented__btn:is([aria-selected="true"],[aria-pressed="true"]){outline:2px solid Highlight}}

/* Komponente: Geführte Tour (.sg-tour) – Spotlight + Sprechblase, nur Tokens. Doku: /styleguide/#sgd-tour */
.sg-tour__block{position:fixed;inset:0;z-index:var(--sg-z-modal);background:transparent}
.sg-tour__block.is-dim{background:var(--sg-color-scrim)}
.sg-tour__spot{position:fixed;z-index:var(--sg-z-modal);border-radius:var(--sg-radius-md);pointer-events:none;
  box-shadow:0 0 0 var(--sg-size-border-strong) var(--sg-color-primary),0 0 0 200vmax var(--sg-color-scrim)} /* 200vmax: Abdunklung deckt jede Bildschirmgröße */
.sg-tour{position:fixed;z-index:calc(var(--sg-z-modal) + 1);width:min(360px,/* ds-ok: Lesebreite der Sprechblase */calc(100vw - 2 * var(--sg-space-4)));box-sizing:border-box;
  padding:var(--sg-space-4) var(--sg-space-4) var(--sg-space-3);border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-lg);
  background:var(--sg-color-surface);color:var(--sg-color-text);box-shadow:var(--sg-shadow-overlay);font-size:var(--sg-font-size-sm);line-height:var(--sg-font-line-height-normal)}
.sg-tour--center{top:50%;left:50%;transform:translate(-50%,-50%)}
.sg-tour--sheet{top:auto;left:var(--sg-space-4);right:var(--sg-space-4);bottom:var(--sg-space-4);width:auto;transform:none}
.sg-tour__x{position:absolute;top:var(--sg-space-2);right:var(--sg-space-2);width:var(--sg-size-target-min);height:var(--sg-size-target-min);border:0;border-radius:var(--sg-radius-round);background:transparent;color:var(--sg-color-text-muted);font-size:var(--sg-font-size-md);cursor:pointer}
.sg-tour__x:hover{background:var(--sg-color-bg-subtle);color:var(--sg-color-text)}
.sg-tour__x:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-primary);outline-offset:var(--sg-size-focus-offset)}
.sg-tour__step{margin:0 0 var(--sg-space-1);color:var(--sg-color-text-muted);font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold);text-transform:uppercase;letter-spacing:.04em}
.sg-tour__h{margin:0 var(--sg-space-8) var(--sg-space-2) 0;font-size:var(--sg-font-size-lg);line-height:var(--sg-font-line-height-tight)}
.sg-tour__tx{margin:0 0 var(--sg-space-3)}
.sg-tour__prog{margin:0 0 var(--sg-space-3)}
.sg-tour__acts{display:flex;justify-content:flex-end;gap:var(--sg-space-2)}
.sg-tour [hidden]{display:none}
/* Abschluss: Abzeichen + Konfetti */
.sg-tour--finale{text-align:center}
.sg-tour--finale .sg-tour__h{margin:var(--sg-space-2) 0}
.sg-tour--finale .sg-tour__acts{justify-content:center;flex-wrap:wrap}
.sg-tour__badge{display:block;width:128px;height:128px;margin:0 auto;animation:sg-tour-pop .7s var(--sg-motion-easing) both} /* ds-ok: Abzeichen-Größe wie sg-reward--lg */
.sg-tour__count{margin:0 0 var(--sg-space-1);color:var(--sg-color-text-muted);font-size:var(--sg-font-size-xs);font-weight:var(--sg-font-weight-bold)}
.sg-tour__confetti{position:fixed;inset:0;width:100%;height:100%;z-index:calc(var(--sg-z-modal) + 2);pointer-events:none}
@keyframes sg-tour-pop{0%{transform:scale(.3) rotate(-12deg);opacity:0}60%{transform:scale(1.12) rotate(4deg);opacity:1}100%{transform:scale(1) rotate(0)}}
@media (prefers-reduced-motion:reduce){.sg-tour__badge{animation:none}}
/* Schwebende Knöpfe (KI-Chat) würden die Sprechblase überdecken → während der Tour ausblenden */
.sg-tour-on .sgai-fab{visibility:hidden}

/* Einladung für neue Nutzer (sg-tour.php) */
.sg-tour-invite{position:fixed;left:var(--sg-space-4);bottom:var(--sg-space-4);z-index:var(--sg-z-toast);width:min(340px,/* ds-ok: Kartenbreite */calc(100vw - 2 * var(--sg-space-4)));box-sizing:border-box;
  padding:var(--sg-space-4);border:var(--sg-size-border) solid var(--sg-color-border);border-left:var(--sg-size-border-accent) solid var(--sg-color-primary);border-radius:var(--sg-radius-lg);
  background:var(--sg-color-surface);color:var(--sg-color-text);box-shadow:var(--sg-shadow-lg);font-size:var(--sg-font-size-sm)}
.sg-tour-invite[hidden]{display:none}
.sg-tour-invite__h{margin:0 0 var(--sg-space-1);font-size:var(--sg-font-size-md)}
.sg-tour-invite p{margin:0 0 var(--sg-space-3)}
.sg-tour-invite__acts{display:flex;flex-wrap:wrap;gap:var(--sg-space-2)}

/* Hilfsklassen des Design Systems. */
/* Nur für Screenreader sichtbar (z. B. „Rabatt:“ vor „−20 %“). */
.sg-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
/* hidden-Attribut gewinnt immer: Komponenten mit eigenem display (inline-flex …) würden es sonst überschreiben
 * (z. B. Status-Badges der Aktionsseite: nur der passende Zustand ist sichtbar). */
.sg-badge[hidden],.sg-btn[hidden],.sg-chip[hidden],.sg-notice[hidden]{display:none!important}

/* Komponente: Querverlinkung (.sg-xsec, .sg-linktiles, .sg-linkchips, .sg-faq) – nur Tokens. Doku: /styleguide/#sgd-xlink
 * Abschnitt:   <section class="sg-xsec"><div class="sg-xsec__head"><h2 class="sg-section-title">…</h2><a class="sg-xsec__more">Alle ansehen →</a></div>…</section>
 * Kacheln:     <ul class="sg-linktiles"><li class="sg-card sg-card--interactive sg-linktile">… (ganze Kachel klickbar über .sg-card__link)
 * Link-Chips:  <nav class="sg-linkchips" aria-label="…"><div class="sg-chips"><a class="sg-chip" …></div></nav>
 * rem-Breiten (Kachel-Mindestbreite 15rem, FAQ-Lesebreite 52rem, Pfeil-Icon .6rem) sind Layout-Maße, bewusst ohne Token.
 * FAQ:         <div class="sg-faq"><details class="sg-faq__item"><summary class="sg-faq__q">…</summary><div class="sg-faq__a">…</div></details></div> */
.sg-xsec__head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--sg-space-2) var(--sg-space-4);margin-bottom:var(--sg-layout-gap-heading,var(--sg-space-4))}
.sg-xsec__head .sg-xsec__title[class]{margin:0}
.sg-xsec__more{font-size:var(--sg-font-size-sm);font-weight:var(--sg-font-weight-semibold);color:var(--sg-color-primary-text);text-decoration:none;white-space:nowrap}
.sg-xsec__more:hover{text-decoration:underline}
.sg-xsec__more:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-sm)}
.sg-xsec__lead{margin:0 0 var(--sg-space-4);max-width:48rem;color:var(--sg-color-text-muted);font-size:var(--sg-font-size-md);line-height:var(--sg-font-line-height-relaxed)}

.sg-linktiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:var(--sg-space-4);margin:0;padding:0;list-style:none}
.sg-linktile{position:relative;display:flex;flex-direction:column;gap:var(--sg-space-1-5);padding-right:var(--sg-space-10)}
.sg-linktile .sg-card__text{margin:0;color:var(--sg-color-text-muted);font-size:var(--sg-font-size-sm);line-height:var(--sg-font-line-height-normal)}
.sg-linktile__media{display:block;aspect-ratio:16/9;margin-bottom:var(--sg-space-1-5);border-radius:var(--sg-radius-md);overflow:hidden;background:var(--sg-color-bg-subtle)}
.sg-linktile__media .sg-ai-media{display:block;width:100%;height:100%}
.sg-linktile__media img{display:block;width:100%;height:100%;object-fit:cover}
.sg-linktile--media .sg-linktile__arrow{top:auto;bottom:var(--sg-space-5);transform:none}
.sg-linktile__arrow{position:absolute;top:50%;right:var(--sg-space-5);transform:translateY(-50%);color:var(--sg-color-primary-text);font-weight:var(--sg-font-weight-bold)}

.sg-linkchips .sg-chips{gap:var(--sg-space-2)}
@media (max-width:640px){.sg-linkchips--scroll .sg-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-block:var(--sg-space-1);margin-inline:calc(-1 * var(--sg-layout-gutter-sm));padding-inline:var(--sg-layout-gutter-sm)}.sg-linkchips--scroll .sg-chips::-webkit-scrollbar{display:none}}

.sg-faq{display:flex;flex-direction:column;gap:var(--sg-space-2);max-width:52rem}
.sg-faq__item{border:var(--sg-size-border) solid var(--sg-color-border);border-radius:var(--sg-radius-md);background:var(--sg-color-surface)}
.sg-faq__q{display:flex;align-items:center;justify-content:space-between;gap:var(--sg-space-3);min-height:var(--sg-size-target-touch);padding:var(--sg-space-3) var(--sg-space-4);
  cursor:pointer;list-style:none;font-weight:var(--sg-font-weight-semibold);font-size:var(--sg-font-size-md);color:var(--sg-color-text)}
.sg-faq__q::-webkit-details-marker{display:none}
.sg-faq__q:focus-visible{outline:var(--sg-size-focus-width) solid var(--sg-color-focus);outline-offset:var(--sg-size-focus-offset);border-radius:var(--sg-radius-md)}
.sg-faq__ic{flex:0 0 auto;width:.6rem;height:.6rem;border-right:var(--sg-size-border-strong) solid currentColor;border-bottom:var(--sg-size-border-strong) solid currentColor;transform:rotate(45deg);transition:transform var(--sg-motion-fast) var(--sg-motion-easing)}
.sg-faq__item[open] .sg-faq__ic{transform:rotate(-135deg)}
.sg-faq__a{padding:0 var(--sg-space-4) var(--sg-space-4);color:var(--sg-color-text-muted);line-height:var(--sg-font-line-height-relaxed)}
.sg-faq__a p{margin:0}