/* ==========================================================================
   GOOD FUTURE — interaction layer
   --------------------------------------------------------------------------
   theme.json carries the tokens. This file carries what it cannot express:
   hover/focus transitions, card states, the gold underline, the sticky header,
   the mobile drawer breakpoint, and the section components.

   Grown from the package's wordpress/gf-tokens.css. Everything is written
   against CORE BLOCK CLASSES (.wp-block-*) or the `gf-*` classes the patterns
   put on core blocks — never against markup this theme does not control.

   Enqueued last (see functions.php), so it wins on equal specificity over
   every parent layer.
   ========================================================================== */

:root {
  --gf-ink:       #16201C;
  --gf-ink-deep:  #0B110F;
  --gf-paper:     #F6F4EF;
  --gf-card:      #FCFBF8;
  --gf-gold:      #C9A961;
  --gf-gold-deep: #B2924C;
  --gf-nebel:     #5A625C;
  --gf-glet:      #DCE3DF;
  --gf-line:      #E3E7E3;
  --gf-line-dk:   #3A4640;

  --gf-radius:      2px;
  --gf-transition:  180ms cubic-bezier(.2, 0, 0, 1);
  --gf-ring:        2px;
  --gf-ring-offset: 2px;
  --gf-header-h:    88px;
  --gf-content:     1200px;
}

/* ------------------------------------------------------------------ base -- */
body {
  overflow-x: hidden;               /* the hero flower bleeds past the edge */
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* One ring everywhere. Never remove it — it is the only state a keyboard
   user has. Declared here so it beats the parent's neutral-grey ring. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: var(--gf-ring) solid var(--gf-gold);
  outline-offset: var(--gf-ring-offset);
  border-radius: var(--gf-radius);
}

.gf-skip {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 100;
  padding: 12px 20px;
  background: var(--gf-ink);
  color: var(--gf-paper);
  text-decoration: none;
}
.gf-skip:focus { left: 0; }

.gf-visually-hidden {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ------------------------------------------------------------ full bleed --
   The parent's ds.css clamps EVERY .wp-block-post-content to content-size:

       .wp-block-post-content { max-width: var(--wp--style--global--content-size); }

   That is right for a prose page and wrong for a composed one: with it in
   force an `alignfull` section can only break out as far as the root padding,
   so the ink band and the Gletscher band rendered 1248px wide inside a 1440px
   viewport instead of edge to edge. Released only where this theme has
   explicitly marked the content area full-width, so ordinary prose pages keep
   the parent's measure.

   The blanket top margin goes with it: sections carry their own 96/128/160
   padding and must butt against each other, not sit 24px apart. */
.wp-block-post-content.alignfull {
  max-width: none;
  margin-inline: 0;
}
.wp-block-post-content.alignfull > * { margin-block-start: 0; }

/* Core gives every root-level block a block-gap top margin, which put a 24px
   strip of Papier between <main> and the ink <footer> — a pale seam across the
   bottom of every page. Sections own their own rhythm, so the root gap goes. */
.wp-site-blocks > * { margin-block-start: 0; }

/* Core's constrained layout sets `margin-left/right: auto !important` on every
   child, which CENTRES any child that has a max-width of its own. The hero
   headline (11em) and the lead (560px) both do, so both drifted to the middle
   of the column.

   Zeroing the margin is not the fix — it aligns the children to the section's
   24px root padding instead of to the 1200px content column, dragging the hero
   to the viewport edge. Nor is widening the section's padding: a percentage
   there resolves against the containing block, which is already inset by the
   root padding, so the sum lands 24px short.

   The fix is structural and is what Gutenberg's own layouts do: ONE inner
   group. It is the constrained parent's only child, so it becomes the centred
   1200px column; its own layout is flow, which sets no inline margins, so a
   child with a max-width of its own simply sits at the column's left edge. */
.gf-hero__inner > *,
.gf-page-head__inner > * { margin-block-start: 0; }

/* --------------------------------------------------------------- sections --
   Vertical rhythm is 96 / 128 / 160 and nothing else. */
.gf-section  { padding-block: 128px; }
.gf-section--tight { padding-block: 96px; }
.gf-section--tall  { padding-block: 160px; }
.gf-section--flush-top { padding-top: 0; }

.gf-section-head { margin-bottom: 48px; }

/* --------------------------------------------------------------- typography */
.gf-eyebrow,
p.gf-eyebrow {
  display: block;
  font-size: 11.5px;
  font-weight: 500;
  letter-spacing: 0.4em;
  text-transform: uppercase;
  color: var(--gf-nebel);
  line-height: 1.4;
  margin-bottom: 16px;
}
.gf-eyebrow--gold, .has-ink-background-color .gf-eyebrow { color: var(--gf-gold); }

/* Headings on a dark ground.
   theme.json pins elements.heading to Tinte, which is right on Papier and
   catastrophic on Tinte: the Spittelau H2 rendered ink-on-ink and was
   completely invisible on the live page while the markup, the outline and
   every automated check stayed perfectly green. A group's textColor does not
   reach headings, because the element style is more specific than inheritance.
   Only a render caught this. */
.has-ink-background-color :is(h1, h2, h3, h4, h5, h6),
.gf-footer :is(h1, h3, h4, h5, h6) { color: var(--gf-paper); }

.gf-lead, p.gf-lead {
  font-size: 19px;
  line-height: 1.68;
  color: var(--gf-nebel);
  max-width: 34em;
}
.has-ink-background-color .gf-lead { color: var(--gf-glet); }

.gf-display { font-size: 60px; line-height: 1.08; letter-spacing: -0.022em; }

/* --------------------------------------------------------------- buttons -- */
.wp-block-button__link,
.gf-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 52px;
  padding: 0 32px;
  border-radius: var(--gf-radius);
  border: 1px solid var(--gf-ink);
  background: var(--gf-ink);
  color: var(--gf-paper);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: .06em;
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
  transition: background var(--gf-transition), color var(--gf-transition),
              border-color var(--gf-transition);
}
.wp-block-button__link:hover,
.gf-btn:hover { background: var(--gf-ink-deep); border-color: var(--gf-ink-deep); color: var(--gf-paper); }

.is-style-gf-secondary .wp-block-button__link,
.gf-btn--secondary {
  background: transparent;
  color: var(--gf-ink);
  border-color: var(--gf-ink);
}
.is-style-gf-secondary .wp-block-button__link:hover,
.gf-btn--secondary:hover { background: var(--gf-glet); color: var(--gf-ink); border-color: var(--gf-ink); }

/* small — header CTA and the row-level Anmelden */
.gf-btn--sm .wp-block-button__link { min-height: 44px; padding: 0 24px; }

/* on dark sections the primary inverts to paper */
.has-ink-background-color .wp-block-button__link {
  background: var(--gf-paper);
  color: var(--gf-ink);
  border-color: var(--gf-paper);
}
.has-ink-background-color .wp-block-button__link:hover { background: #fff; border-color: #fff; color: var(--gf-ink); }
.has-ink-background-color .is-style-gf-secondary .wp-block-button__link {
  background: transparent;
  color: var(--gf-paper);
  border-color: var(--gf-paper);
}
.has-ink-background-color .is-style-gf-secondary .wp-block-button__link:hover {
  background: rgba(246, 244, 239, .12);
}

.wp-block-button__link[aria-disabled="true"],
.gf-btn[disabled] {
  background: var(--gf-glet);
  border-color: var(--gf-glet);
  color: var(--gf-nebel);
  cursor: not-allowed;
}

/* filter chips — real links styled as the comp's pressed/unpressed pills */
.gf-chips .wp-block-buttons,
.gf-chips { gap: 10px; }
.is-style-gf-chip .wp-block-button__link {
  min-height: 38px;
  padding: 0 20px;
  background: transparent;
  border: 1px solid var(--gf-line);
  color: var(--gf-ink);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0;
}
.is-style-gf-chip .wp-block-button__link:hover {
  background: transparent;
  border-color: var(--gf-nebel);
  color: var(--gf-ink);
}
.is-style-gf-chip.gf-chip--on .wp-block-button__link,
.is-style-gf-chip .wp-block-button__link[aria-current="page"] {
  background: var(--gf-ink);
  border-color: var(--gf-ink);
  color: var(--gf-paper);
}

/* ----------------------------------------------------------------- links --
   The gold rule grows in on hover. Underline, never a colour change: the ink
   stays put so the text never flickers. */
.gf-link a,
a.gf-link {
  position: relative;
  display: inline-block;
  color: var(--gf-ink);
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  /* The arrow is decoration, so it lives in CSS, not in the markup. That keeps
     the link a plain core/paragraph an editor can retype, instead of a
     core/html block nobody dares touch. */
  padding-right: 26px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10' fill='none'%3E%3Cpath d='M0 5h13.4M9.6 1l4 4-4 4' stroke='%2316201C' stroke-width='1.4' stroke-linecap='square'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0 center;
  background-size: 16px 10px;
}
.gf-link--lg a, a.gf-link--lg { font-size: 15px; }
.has-ink-background-color .gf-link a {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10' fill='none'%3E%3Cpath d='M0 5h13.4M9.6 1l4 4-4 4' stroke='%23F6F4EF' stroke-width='1.4' stroke-linecap='square'/%3E%3C/svg%3E");
}
.gf-link a::after,
a.gf-link::after {
  content: "";
  position: absolute;
  left: 0; right: 26px; bottom: -6px;
  height: 2px;
  background: var(--gf-gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--gf-transition);
}
.gf-link a:hover::after,
a.gf-link:hover::after { transform: scaleX(1); }
.has-ink-background-color .gf-link a { color: var(--gf-paper); }

/* ----------------------------------------------------------------- cards -- */
.gf-card,
.gf-tier,
.gf-event {
  background: var(--gf-card);
  border: 1px solid var(--gf-line);
  border-radius: var(--gf-radius);
  box-shadow: none;
  transition: border-color var(--gf-transition);
}
.gf-card:hover,
.gf-tier:hover,
.gf-event:hover { border-color: var(--gf-gold); }

.gf-card {
  display: flex;
  flex-direction: column;
  padding: 32px;
  height: 100%;
}
.gf-card > * { margin-block: 0; }
.gf-card .gf-markbox { width: 28px; margin-bottom: 22px; }
.gf-card h3 { margin-bottom: 10px; }
.gf-card p:not(.gf-link) { color: var(--gf-nebel); font-size: 15px; line-height: 1.66; }
.gf-card .gf-link { margin-top: auto; padding-top: 26px; }

/* the mark, inline. Bracts take currentColor, florets are always gold. */
.gf-mark { display: block; width: 100%; height: auto; }
.gf-mark__bracts  { fill: currentColor; }
.gf-mark__florets { fill: var(--gf-gold); }
.gf-mark--tint .gf-mark__bracts,
.gf-mark--tint .gf-mark__florets { fill: var(--gf-glet); }
.gf-markbox { width: 30px; flex: 0 0 auto; line-height: 0; }
.gf-markbox svg { display: block; width: 100%; height: auto; }

/* ----------------------------------------------------------------- stats -- */
.gf-stats { border-block: 1px solid var(--gf-line); }
.gf-stats.wp-block-columns { gap: 0; margin-block: 0; flex-wrap: nowrap; }
.gf-stats .wp-block-column {
  padding: 40px 16px;
  text-align: center;
}
.gf-stats .wp-block-column + .wp-block-column { border-left: 1px solid var(--gf-line); }
.gf-stats .wp-block-column > * { margin-block: 0; }
.gf-stat__value {
  display: block;
  font-size: 40px;
  font-weight: 350;
  line-height: 1;
  letter-spacing: -0.02em;
  margin-bottom: 14px !important;
}
.gf-stat__label {
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.4em;
  text-transform: uppercase;
  color: var(--gf-nebel);
  line-height: 1.4;
}

/* ------------------------------------------------------------ event rows -- */
.gf-event {
  display: grid;
  grid-template-columns: 76px 1fr auto;
  align-items: center;
  gap: 28px;
  padding: 20px 32px 20px 28px;
  border-left: 4px solid var(--gf-gold);
}
.gf-event > * { margin-block: 0 !important; }
.gf-events > .gf-event + .gf-event,
.gf-events .wp-block-post + .wp-block-post { margin-top: 16px; }
.gf-events.wp-block-post-template { gap: 16px; }

.gf-event__date {
  border-right: 1px solid var(--gf-line);
  padding-right: 28px;
  align-self: stretch;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.gf-event__date > * { margin-block: 0 !important; }
.gf-event__day {
  display: block;
  font-size: 30px;
  font-weight: 350;
  line-height: 1.1;
  letter-spacing: -0.02em;
}
.gf-event__month {
  display: block;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gf-nebel);
  line-height: 1.4;
}
.gf-event__body > * { margin-block: 0 !important; }
.gf-event__title,
.gf-event__title a { font-size: 19px; font-weight: 500; line-height: 1.35; text-decoration: none; }
.gf-event__title { margin-bottom: 6px !important; }
.gf-event__meta  { font-size: 14px; color: var(--gf-nebel); line-height: 1.5; }
.gf-event__aside {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 24px;
  font-size: 13px;
  color: var(--gf-nebel);
}
.gf-event__aside > * { margin-block: 0 !important; }

/* "Anmelden" — core/read-more, so it always points at the event's own
   permalink. Styled as the comp's small secondary button. */
.gf-event__signup,
a.gf-event__signup {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 0 24px;
  border: 1px solid var(--gf-ink);
  border-radius: var(--gf-radius);
  background: transparent;
  color: var(--gf-ink);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: .06em;
  text-decoration: none;
  white-space: nowrap;
  transition: background var(--gf-transition);
}
.gf-event__signup:hover { background: var(--gf-glet); color: var(--gf-ink); }
.gf-events .wp-block-query-pagination { font-size: 15px; }

/* ------------------------------------------------------- membership tiers -- */
.gf-tier {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: 32px;
  height: 100%;
}
.gf-tier > * { margin-block: 0; }
.gf-tier--featured { border-color: var(--gf-gold); }
.gf-tier--featured::before {
  content: "";
  position: absolute;
  inset: -1px -1px auto -1px;
  height: 3px;
  background: var(--gf-gold);
}
.gf-tier__flag {
  position: absolute;
  top: 30px; right: 32px;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--gf-gold);
  margin: 0 !important;
}
.gf-tier__name  { font-size: 22px; font-weight: 500; line-height: 1.35; }
.gf-tier__price { font-size: 44px; font-weight: 350; line-height: 1.1; letter-spacing: -0.025em; margin-top: 18px !important; }
.gf-tier__per   { font-size: 13px; color: var(--gf-nebel); margin-top: 6px !important; }
.gf-tier__desc  { font-size: 15px; color: var(--gf-nebel); margin-top: 20px !important; line-height: 1.6; }
.gf-tier__list  { margin-top: 24px !important; padding-top: 24px; border-top: 1px solid var(--gf-line); list-style: none; padding-left: 0; }
.gf-tier__list li {
  position: relative;
  padding-left: 20px;
  font-size: 14px;
  line-height: 1.5;
}
.gf-tier__list li + li { margin-top: 16px; }
.gf-tier__list li::before {
  content: "";
  position: absolute;
  left: 0; top: 8px;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--gf-gold);
}
.gf-tier .wp-block-buttons { margin-top: auto !important; padding-top: 32px; }
.gf-tier .gf-link { margin-top: auto !important; padding-top: 28px; }

/* ----------------------------------------------------------------- forms -- */
.gf-field {
  width: 100%;
  min-height: 52px;
  padding: 0 18px;
  background: var(--gf-card);
  border: 1px solid var(--gf-line);
  border-radius: var(--gf-radius);
  color: var(--gf-ink);
  font-family: inherit;
  font-size: 15px;
  transition: border-color var(--gf-transition);
}
.gf-field::placeholder { color: var(--gf-nebel); }
.gf-field:hover { border-color: var(--gf-nebel); }
.gf-field:focus { border-color: var(--gf-ink); }

.gf-form-inline {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}
.gf-form-inline .gf-field { width: 360px; }
.gf-form-inline .gf-btn { min-height: 52px; }

/* ------------------------------------------------------------ split media -- */
.gf-split.wp-block-columns { gap: 120px; align-items: flex-start; }
.gf-media {
  display: grid;
  place-items: center;
  aspect-ratio: 4 / 3;
  background: var(--gf-glet);
  border-radius: var(--gf-radius);
  overflow: hidden;
  color: var(--gf-nebel);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.4em;
  text-transform: uppercase;
  text-align: center;
}
.gf-media > * { margin: 0 !important; }
.gf-media img { width: 100%; height: 100%; object-fit: cover;
                transition: transform 400ms cubic-bezier(.2, 0, 0, 1); }
.gf-media:hover img { transform: scale(1.02); }
.gf-figcaption { margin-top: 14px !important; font-size: 12px; color: var(--gf-glet); }

/* -------------------------------------------------------------- page head -- */
.gf-page-head { padding-block: 72px 48px; }
.gf-page-head h1 { margin-bottom: 26px; }

.gf-cta { text-align: center; }
.gf-cta h2 { margin-bottom: 14px; }
.gf-cta p { color: var(--gf-nebel); margin-bottom: 30px; }
.gf-cta .wp-block-buttons { justify-content: center; }

.gf-listhead.wp-block-columns { align-items: flex-end; margin-bottom: 48px; }
.gf-listhead > .wp-block-column > * { margin-block: 0; }

.gf-incl > .wp-block-column { border-top: 1px solid var(--gf-line); padding-top: 22px; }
.gf-incl > .wp-block-column > * { margin-block: 0; }
.gf-incl h3 { font-size: 18px; font-weight: 500; margin-bottom: 10px !important; }
.gf-incl p  { font-size: 15px; color: var(--gf-nebel); line-height: 1.6; }

/* ------------------------------------------------------------------ hero -- */
.gf-hero { position: relative; padding-block: 112px 128px; }
.gf-hero > * { position: relative; z-index: 1; }
.gf-hero h1 { max-width: 11em; margin-bottom: 30px; }
.gf-hero .gf-lead { max-width: 560px; margin-bottom: 42px; }
.gf-hero .wp-block-buttons { gap: 16px; }
.gf-hero__note {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 34px !important;
  font-size: 14px;
  color: var(--gf-nebel);
}
.gf-hero__note::before {
  content: "";
  flex: 0 0 auto;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--gf-gold);
}

/* the decorative flower, bleeding off the right edge */
.gf-bloom {
  position: absolute !important;
  top: 40px;
  right: -190px;
  width: 700px;
  z-index: 0 !important;
  margin: 0 !important;
  pointer-events: none;
  user-select: none;
}
.gf-bloom svg { width: 100%; height: auto; display: block; }

/* ---------------------------------------------------------------- header -- */
.gf-header {
  position: sticky;
  top: 0;
  z-index: 30;
  background: var(--gf-paper);
  border-bottom: 1px solid var(--gf-line);
  padding-block: 0 !important;
}
.gf-header__inner {
  min-height: var(--gf-header-h);
  gap: 32px;
  flex-wrap: nowrap;
}
.gf-brand {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  flex-wrap: nowrap;
}
/* The brand's auto margin is what pushes the navigation and the CTA to the
   right edge of the content column. It needs this specificity: core's flex
   layout ships `.is-layout-flex > :is(*, div) { margin: 0 }` at (0,1,1), which
   out-specifies a bare `.gf-brand` and silently packed the whole header left. */
.gf-header .gf-header__inner > .gf-brand { margin-right: auto; }
.gf-brand .gf-markbox { width: 30px; }
.gf-brand .wp-block-site-title { margin: 0; }
.gf-brand .wp-block-site-title a { text-decoration: none; white-space: nowrap; }

.gf-header .wp-block-navigation { --wp--style--block-gap: 32px; }
.gf-header .wp-block-navigation .wp-block-navigation-item__content {
  position: relative;
  font-size: 15px;
  font-weight: 400;
  text-decoration: none;
  padding-bottom: 6px;
}
.gf-header .wp-block-navigation .wp-block-navigation-item__content::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 2px;
  background: var(--gf-gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--gf-transition);
}
.gf-header .wp-block-navigation .wp-block-navigation-item__content:hover::after,
.gf-header .wp-block-navigation .current-menu-item .wp-block-navigation-item__content::after {
  transform: scaleX(1);
}

/* the drawer's own CTA + contact lines: only inside the open overlay */
.gf-header .wp-block-navigation__responsive-container:not(.is-menu-open) .gf-nav__extra { display: none; }

/* ---------------------------------------------------------------- footer -- */
.gf-footer {
  background: var(--gf-ink);
  color: var(--gf-glet);
  padding-block: 64px !important;
}
.gf-footer, .gf-footer p, .gf-footer li, .gf-footer a { color: var(--gf-glet); }
.gf-footer .wp-block-site-title a { color: var(--gf-paper); }
.gf-footer a { text-decoration: none; }
.gf-footer a:hover { color: var(--gf-paper); }
.gf-footer__top.wp-block-columns { gap: 32px; margin-bottom: 0; }
.gf-footer__tagline { margin-top: 22px !important; font-size: 14px; line-height: 1.6; }
.gf-footer h2 {
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.4em;
  text-transform: uppercase;
  color: var(--gf-gold);
  margin-bottom: 20px !important;
  line-height: 1.4;
}
.gf-footer ul { list-style: none; padding-left: 0; margin: 0; font-size: 15px; }
.gf-footer li + li { margin-top: 8px; }
.gf-footer__bottom {
  margin-top: 48px !important;
  padding-top: 24px;
  border-top: 1px solid var(--gf-line-dk);
  font-size: 12px;
}
.gf-footer__bottom.wp-block-columns { gap: 16px; }
.gf-footer__bottom p { font-size: 12px; margin: 0; }
.gf-footer__bottom .gf-footer__legal { text-align: right; }

/* --------------------------------------------------------------- images -- */
figure.wp-block-image { margin-block: 0; }

/* =========================================================== responsive == */

/* Move the navigation overlay from core's 600px to the design's 900px.
   Core only hides the inline list below 600px, so between 600 and 900 the
   full desktop nav would still render over a 64px bar. These four rules
   re-assert the "closed overlay" state in that band. */
@media (min-width: 600px) and (max-width: 899.98px) {
  .gf-header .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
    display: none;
  }
  .gf-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
    display: flex;
  }
}

@media (max-width: 899.98px) {
  .gf-header__cta { display: none !important; }
  .gf-header__inner { min-height: 64px; }
  :root { --gf-header-h: 64px; }

  .gf-hero  { padding-block: 56px 72px; }
  .gf-hero .wp-block-buttons .wp-block-button { flex: 1 1 100%; }
  .gf-hero .wp-block-buttons .wp-block-button__link { width: 100%; }
  .gf-bloom { width: 300px; right: -110px; top: 24px; }

  .gf-section { padding-block: 80px; }
  .gf-section--tight { padding-block: 64px; }
  .gf-section--tall { padding-block: 96px; }
  .gf-section--flush-top { padding-top: 0; }

  .gf-display { font-size: 40px; }
  .gf-page-head { padding-block: 48px 32px; }
  .gf-lead, p.gf-lead { font-size: 17px; }

  .gf-split.wp-block-columns { gap: 48px; }

  /* Stats fold to 2x2. Grid, not flex-basis: the columns block carries
     `flex-basis:0;flex-grow:1` from core plus its own stacking rules, and a
     50% basis lost to them — all four stacked in one column instead. Grid
     ignores both and is deterministic. */
  .gf-stats.wp-block-columns {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0;
  }
  .gf-stats .wp-block-column {
    flex-basis: auto !important;
    border-left: 0;
  }
  .gf-stats .wp-block-column:nth-child(2n) { border-left: 1px solid var(--gf-line); }
  .gf-stats .wp-block-column:nth-child(n+3) { border-top: 1px solid var(--gf-line); }

  /* The headline sets at 34px on mobile, not the 40px in the package's gf.css:
     at 40px in a 366px column "Wiener Betriebe." cannot hold together and the
     headline breaks into FOUR lines where the mobile artboard sets three. 34px
     is the size the artboard is drawn at (~33px in a 390px frame). Where the
     stylesheet and the comp disagree, the comp wins.

     Re-pointed as a VARIABLE, not as a font-size rule. WordPress emits preset
     size classes as `.has-display-font-size{font-size:var(...)!important}`, so
     a plain `.gf-hero h1{font-size:34px}` is silently discarded no matter how
     specific it is — which is exactly what happened on the first attempt. */
  :root { --wp--preset--font-size--display: 34px; }
  .gf-hero h1 { max-width: none; }

  /* "VERANSTALTUNGEN IM JAHR" is wider than half a 414px screen once 0.4em of
     tracking is added, and broke mid-word as "VERANSTALTUNGE / N IM JAHR". The
     mobile comp shortens the copy instead; the copy is the Verein's to choose,
     so the tracking gives way here rather than the words. */
  .gf-stat__label { font-size: 10px; letter-spacing: 0.22em; }

  .gf-event { grid-template-columns: 64px 1fr; gap: 20px; padding: 20px; }
  .gf-event__aside { grid-column: 1 / -1; justify-content: space-between; }
  .gf-event__date  { padding-right: 20px; }

  .gf-listhead.wp-block-columns { align-items: flex-start; }
  .gf-footer__bottom .gf-footer__legal { text-align: left; }
}

/* The drawer itself: ink ground, paper type, hairline dividers — comp 07. */
/* The drawer's geometry is stated outright rather than inherited.
   Core sizes the open overlay with `background-color: inherit`, which resolves
   against whatever the navigation happens to sit in; on this header it painted
   a translucent veil and the page showed straight through the menu. An opaque
   ground is not a detail on a navigation overlay, so it is pinned here. */
.wp-block-navigation__responsive-container.is-menu-open {
  position: fixed;
  inset: 0;
  z-index: 100;
  background-color: var(--gf-ink) !important;
  padding: 32px 24px;
  overflow-y: auto;
}
/* The desktop nav is justified right and core stamps `items-justified-right`
   onto the <ul>, which the overlay inherits — the drawer opened with every item
   flush right where comp 07 is left-aligned. Laying the list out as blocks
   makes the flex justification inert rather than fighting it. */
.wp-block-navigation__responsive-container.is-menu-open ul.wp-block-navigation__container {
  display: block !important;
  width: 100%;
  text-align: left !important;
  justify-content: flex-start !important;
  align-items: flex-start !important;
}
.wp-block-navigation__responsive-container.is-menu-open ul.wp-block-navigation__container > li {
  display: block !important;
  width: 100% !important;
  text-align: left !important;
}

/* The brand, drawer-only. NOTE: core puts a site-title's className on the <p>
   it renders, not on the <li> it wraps it in — unlike a navigation-link, whose
   className does land on the <li>. Selectors here must therefore be element-
   agnostic; an `li.gf-nav__brand` matches nothing and silently hides the mark. */
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__brand {
  display: block;
  margin: 0 0 22px;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--gf-line-dk);
}
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__brand a {
  color: var(--gf-paper);
  font-size: 15px;
  font-weight: 350;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  text-decoration: none;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
  border-bottom: 1px solid var(--gf-line-dk);
  width: 100%;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
  display: block;
  padding: 22px 0 !important;
  font-size: 26px !important;
  font-weight: 350;
  letter-spacing: -0.01em;
  color: var(--gf-paper);
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content::after {
  display: none;
}
/* The drawer's tail: the CTA and the two contact lines from comp 07. They are
   navigation-links (valid <li> children) rather than a Buttons block, because
   core/navigation renders any non-navigation inner block raw inside its <ul>. */
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__extra {
  display: block;
  border-bottom: 0;
}
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__cta {
  margin-top: 44px;
}
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__cta .wp-block-navigation-item__content {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 52px;
  padding: 0 32px;
  background: var(--gf-paper);
  border: 1px solid var(--gf-paper);
  border-radius: var(--gf-radius);
  color: var(--gf-ink);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: .06em;
}
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__extra:not(.gf-nav__cta) .wp-block-navigation-item__content {
  padding: 9px 0 0;
  font-size: 14px;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--gf-glet);
}
.wp-block-navigation__responsive-container.is-menu-open .gf-nav__extra:not(.gf-nav__cta):first-of-type {
  margin-top: 18px;
}
/* the burger sits above the drawer so it can close it */
.gf-header .wp-block-navigation__responsive-container-open { z-index: 50; }

@media (max-width: 599.98px) {
  .gf-form-inline .gf-field,
  .gf-form-inline .gf-btn { width: 100%; }
  .gf-stats .wp-block-column { padding: 28px 8px; }
  .gf-card, .gf-tier { padding: 24px; }
  .gf-split.wp-block-columns { gap: 40px; }
}

/* Columns fold at core's own 781px breakpoint; make the folded state calm. */
@media (max-width: 781px) {
  /* Two columns, not four and not one. `50%` alone still wraps to one per row,
     because the 32px column gap is added on top of the basis and 50+50+32 > 100.
     The gap has to come out of the basis. */
  .gf-footer__top.wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column {
    flex-basis: calc(50% - 16px) !important;
    flex-grow: 0 !important;
  }
  /* The brand column carries an inline flex-basis:34% from the block editor.
     At 414px that is 140px — narrower than the wordmark, which then ran over
     the "VEREIN" heading beside it. It takes the whole first row instead. */
  .gf-footer__top.wp-block-columns > .wp-block-column:first-child {
    flex-basis: 100% !important;
    margin-bottom: 16px;
  }
  .gf-listhead.wp-block-columns > .wp-block-column { flex-basis: 100% !important; }
  .gf-listhead .gf-listhead__link { text-align: left !important; }
}

/* ---------------------------------------------------------- reduced motion --
   Calm is the default; for anyone who asks for stillness, it is absolute. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }
}
