/*!
 * mv-anchor-offset.css – Musikverein Wien
 * Anlass: Sprungziel „Abo bestellen" (#formular) landet hinter der fixierten
 * Kopfleiste. Befund 2026-09-04, siehe Sprungziel-Anker-Offset.md.
 *
 * Zwei getrennte Wege führen zu einem Anker:
 *   1. Klick auf einen Link im Dokument  -> mv-anchor-offset.js rechnet
 *   2. Aufruf mit #hash in der URL       -> der Browser springt selbst,
 *      noch bevor JavaScript läuft. Dafür ist scroll-margin-top zuständig.
 * Nur beide zusammen ergeben ein verlässliches Sprungziel.
 *
 * Beide springen ohne Animation (Vorgabe 04.09.2026) – siehe html:root unten.
 *
 * --mv-header-h wird von mv-anchor-offset.js zur Laufzeit auf die gemessene
 * Höhe der fixierten Kopfleiste gesetzt (gemessen 2026-09-04: 145 px auf den
 * Abo-Seiten, 99 px auf /konzertbesuch/ – ein fester Wert kann nicht stimmen).
 * Der Startwert hier gilt nur für die Millisekunden vor dem ersten Messen und
 * für den Fall, dass das Skript nicht lädt.
 */

:root {
  --mv-header-h: 100px;   /* wird per JS überschrieben */
  --mv-anchor-gap: 24px;  /* Luft zwischen Kopfleiste und Sprungziel */
}

/* Kein animiertes Scrollen (Vorgabe 04.09.2026). Oxygens normalize.min.css
   setzt html { scroll-behavior: smooth } – das animiert auch den nativen
   Sprung beim Aufruf mit #hash, bevor JavaScript überhaupt läuft.
   `html:root` hat Spezifität 0-1-1 und schlägt damit `html` (0-0-1),
   unabhängig von der Ladereihenfolge der Stylesheets. Das ist hier der
   entscheidende Punkt: eigenes CSS lädt auf dieser Site VOR Oxygen, über
   die Reihenfolge wäre die Regel also nicht zu gewinnen.
   Das Dots-Menü in idl-code.js ruft behavior:"smooth" explizit in JS auf und
   bleibt davon unberührt. */
html:root {
  scroll-behavior: auto;
}

/* :target greift beim Aufruf mit #hash in der URL, die ID-Liste zusätzlich
   für Browser/Zeitpunkte, in denen :target noch nicht gesetzt ist.
   Bewusst keine Pauschalregel auf [id] – die Site hat tausende Oxygen-IDs,
   und scroll-margin-top wirkt auch auf scrollIntoView() an anderer Stelle. */
:target,
#inhalt,
#formular,
#spielplan,
#kartenkauf,
#agb,
#datenschutz,
#nachhaltigkeit {
  scroll-margin-top: calc(var(--mv-header-h) + var(--mv-anchor-gap));
}

/* Ausnahme: Das Dots-Menü scrollt Sektionen mit block:"center" an
   (idl-code.js, Block „Dots Menu"). Dort würde ein Kopfleisten-Offset die
   Zentrierung verschieben. Spezifität 0-1-1 schlägt :target (0-1-0),
   verliert aber gegen die ID-Liste – eine Sektion mit eigener Anker-ID
   behält also ihren Offset. */
div.page-section {
  scroll-margin-top: 0;
}
