/* ==========================================================================
   Nevio Siragusa — Design System
   ==========================================================================
   HOW THIS FILE IS ORGANIZED
   1. Fonts + :root design tokens  <- change colors/fonts/spacing HERE ONLY,
      everything below reads from these variables, so one edit here updates
      the whole site consistently.
   2. Base element styles (body, headings, links, .container, .section)
   3. Reusable components (.btn, .eyebrow) used across every section
   4. One block per page section, in the same top-to-bottom order they
      appear in index.html: Header, Hero, Logo marquee, About, Testimonials,
      Gallery, Contact, Footer, Reveal-on-scroll animation, Legal pages
   5. Responsive overrides at the very bottom (mobile breakpoints)

   Brand: deep blue #0008A8, near-black #181818, white.
   Headings: Caudex. Body: Roboto. Accent/quote: Libre Baskerville.
   UI/eyebrow: Euclid Flex Medium Regular (falls back to Roboto).
   ========================================================================== */

@font-face {
  font-family: "Euclid Flex Medium Regular";
  src: url("https://assets.zyrosite.com/LIOGPHfHGlBWzwQx/Euclid Flex Medium Regular.woff2") format("woff2");
  font-display: swap;
}

:root {
  /* ── BRAND COLORS ──────────────────────────────────────────────────────
     --blue is Nevio's one brand color (buttons, links, section backgrounds,
     the "unvergesslich" highlight in the hero). Change it here and it
     updates everywhere at once. --gold is a small warm accent used only
     for star ratings and eyebrow labels on dark backgrounds — delete every
     var(--gold) usage below if you'd rather keep it strictly blue/black/white. */
  --blue: #0008a8;
  --blue-bright: #151ed9;   /* brighter blue, used for header nav hover + hero headline highlight */
  --blue-hover: #8489ed;    /* lighter blue, used for hover states on dark backgrounds */
  --dark: #181818;          /* the site's near-black, matches the original brand dark */
  --dark-2: #0c0c0d;        /* slightly deeper black, used only for the footer */
  --white: #ffffff;
  --off-white: #f6f6f4;     /* soft off-white for the contact section background */
  --gold: #d9b45e;          /* used sparingly, as a warm accent on the dark sections */

  --text-on-dark: rgba(255, 255, 255, 0.92);
  --text-on-dark-muted: rgba(255, 255, 255, 0.66);
  --text-on-light: #181818;
  --text-on-light-muted: rgba(24, 24, 24, 0.64);

  /* ── FONTS ─────────────────────────────────────────────────────────────
     Loaded via Google Fonts <link> in the <head> of each HTML page, plus
     the custom Euclid Flex @font-face declared at the top of this file. */
  --font-heading: "Caudex", serif;                              /* all h1–h4 */
  --font-body: "Roboto", sans-serif;                            /* paragraphs */
  --font-accent: "Libre Baskerville", serif;                    /* quotes, "Illusion" callout */
  --font-ui: "Euclid Flex Medium Regular", "Roboto", sans-serif; /* buttons, eyebrow labels, nav, form labels */

  /* ── LAYOUT ────────────────────────────────────────────────────────────
     --container caps how wide the page content gets on large screens.
     --pad is the left/right breathing room, scales automatically with
     screen width via clamp() so you don't need separate mobile rules. */
  --container: 1180px;
  --pad: clamp(20px, 5vw, 64px);
  --radius: 14px;      /* corner rounding for cards, buttons, image blocks */
  --radius-sm: 8px;    /* corner rounding for smaller elements (gallery tiles, form inputs) */

  --ease: cubic-bezier(0.22, 1, 0.36, 1); /* the "smooth premium" easing curve used on every hover/reveal animation */
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
}

body {
  margin: 0;
  background: var(--white);
  color: var(--text-on-light);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; display: block; }

h1, h2, h3, h4 {
  font-family: var(--font-heading);
  font-weight: 400;
  line-height: 1.15;
  margin: 0 0 0.5em;
  letter-spacing: 0.005em;
}
h1 { font-size: clamp(2.4rem, 6vw, 4.6rem); }
h2 { font-size: clamp(1.9rem, 4.2vw, 3rem); }
h3 { font-size: clamp(1.3rem, 2.4vw, 1.7rem); }

p { margin: 0 0 1em; }
a { color: inherit; text-decoration: none; }

.container {
  max-width: var(--container);
  margin: 0 auto;
  padding-left: var(--pad);
  padding-right: var(--pad);
}

.section { padding: clamp(64px, 10vw, 140px) 0; position: relative; }
.section--dark { background: var(--dark); color: var(--text-on-dark); }
.section--blue { background: var(--blue); color: var(--white); }
.section--light { background: var(--white); color: var(--text-on-light); }
.section--offwhite { background: var(--off-white); color: var(--text-on-light); }

/* Eyebrow kicker label ----------------------------------------------- */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-ui);
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--blue);
  margin-bottom: 18px;
}
.section--dark .eyebrow,
.section--blue .eyebrow { color: var(--gold); }
.eyebrow::before {
  content: "";
  width: 28px;
  height: 1px;
  background: currentColor;
  opacity: 0.7;
}

/* Buttons -------------------------------------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: var(--font-ui);
  font-size: 0.95rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  padding: 14px 30px;
  border-radius: 999px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: transform 0.25s var(--ease), background-color 0.25s var(--ease), color 0.25s var(--ease), border-color 0.25s var(--ease), box-shadow 0.25s var(--ease);
  white-space: nowrap;
}
.btn:active { transform: scale(0.97); }
.btn--primary {
  background: var(--blue);
  color: var(--white);
  border-color: var(--blue);
  box-shadow: 0 8px 24px -8px rgba(0, 8, 168, 0.55);
}
.btn--primary:hover { background: var(--white); color: var(--blue); box-shadow: 0 10px 30px -8px rgba(0, 8, 168, 0.5); }
.btn--ghost-light {
  background: transparent;
  color: var(--white);
  border-color: rgba(255, 255, 255, 0.5);
}
.btn--ghost-light:hover { background: rgba(255, 255, 255, 0.12); border-color: var(--white); }
.btn--sm { padding: 10px 20px; font-size: 0.85rem; }

/* ==========================================================================
   Header
   ==========================================================================
   Fixed/sticky at all times. Starts transparent over the hero photo (logo
   and nav text are forced white via the `:not(.is-scrolled)` rules below),
   then gets a white blurred background once you scroll — that swap is
   triggered by script.js adding/removing the .is-scrolled class. */
.site-header {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 100;
  padding: 22px 0;
  transition: padding 0.35s var(--ease), background-color 0.35s var(--ease), box-shadow 0.35s var(--ease);
}
.site-header .container { display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.site-header.is-scrolled {
  padding: 12px 0;
  background: rgba(255, 255, 255, 0.86);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  box-shadow: 0 8px 30px -12px rgba(0, 0, 0, 0.18);
}
.brand { display: flex; align-items: center; gap: 12px; }
.brand img { height: 40px; width: auto; transition: filter 0.35s var(--ease); }
.site-header:not(.is-scrolled) .brand img { filter: brightness(0) invert(1); }

.main-nav { display: flex; align-items: center; gap: 40px; }
.main-nav a {
  font-family: var(--font-ui);
  font-size: 0.95rem;
  font-weight: 500;
  color: var(--white);
  position: relative;
  padding: 4px 0;
  transition: color 0.3s var(--ease);
}
.site-header.is-scrolled .main-nav a { color: var(--dark); }
.main-nav a::after {
  content: "";
  position: absolute; left: 0; right: 100%; bottom: -2px;
  height: 2px; background: var(--blue-hover);
  transition: right 0.3s var(--ease);
}
.site-header:not(.is-scrolled) .main-nav a::after { background: var(--white); }
.main-nav a:hover::after { right: 0; }

.header-actions { display: flex; align-items: center; gap: 18px; }
.header-tel {
  font-family: var(--font-ui);
  font-size: 0.9rem;
  color: var(--white);
  transition: color 0.3s var(--ease);
  display: none;
}
.site-header.is-scrolled .header-tel { color: var(--dark); }

.nav-toggle {
  display: none;
  width: 40px; height: 40px;
  border: none; background: transparent; cursor: pointer;
  flex-direction: column; align-items: center; justify-content: center; gap: 5px;
}
.nav-toggle span { width: 22px; height: 2px; background: var(--white); transition: 0.3s var(--ease); }
.site-header.is-scrolled .nav-toggle span { background: var(--dark); }

/* ==========================================================================
   Hero
   ==========================================================================
   TO SWAP THE HERO PHOTO: just change the background-image URL on the
   .hero__bg element in index.html — no CSS edit needed. The dark gradient
   (.hero__scrim) sits on top of every photo automatically so the white
   headline text always stays readable, regardless of how bright the photo
   is. --gold star row + trust badge text live in index.html too. */
.hero {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
  color: var(--white);
  overflow: hidden;
}
.hero__bg {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center 30%;
  transform: scale(1.06);
}
.hero__scrim {
  position: absolute; inset: 0;
  background:
    linear-gradient(180deg, rgba(12,12,13,0.55) 0%, rgba(12,12,13,0.15) 30%, rgba(12,12,13,0.35) 60%, rgba(12,12,13,0.94) 100%);
}
.hero__content {
  position: relative;
  width: 100%;
  padding-bottom: clamp(56px, 9vw, 110px);
  padding-top: 160px;
  text-align: center;
}
.hero__badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-ui);
  font-size: 0.82rem;
  letter-spacing: 0.08em;
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.28);
  padding: 8px 18px 8px 14px;
  border-radius: 999px;
  backdrop-filter: blur(6px);
  margin-bottom: 28px;
}
.hero__badge .stars { color: var(--gold); letter-spacing: 2px; font-size: 0.9rem; }
.hero h1 {
  max-width: 16ch;
  margin-left: auto; margin-right: auto;
  text-shadow: 0 4px 30px rgba(0,0,0,0.35);
}
.hero h1 .hl {
  color: var(--white);
  background: linear-gradient(180deg, transparent 62%, var(--blue-bright) 62%);
  padding: 0 0.05em;
}
.hero__sub {
  max-width: 46ch;
  margin: 22px auto 36px;
  font-size: clamp(1.02rem, 1.6vw, 1.2rem);
  color: rgba(255, 255, 255, 0.86);
}
.hero__ctas { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
.hero__scrolldown {
  position: absolute; bottom: 22px; left: 50%; transform: translateX(-50%);
  width: 1px; height: 46px;
  background: linear-gradient(180deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.7) 60%, rgba(255,255,255,0) 100%);
}
.hero__scrolldown::after {
  content: "";
  position: absolute; top: 0; left: -3px;
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--white);
  animation: scrolldown 2.2s ease-in-out infinite;
}
@keyframes scrolldown { 0% { top: 0; opacity: 0; } 20% { opacity: 1; } 90% { opacity: 1; } 100% { top: 40px; opacity: 0; } }

/* ==========================================================================
   Logo marquee ("Vertraut von" client-logo strip)
   ==========================================================================
   Pure CSS animation, no JavaScript — it works by duplicating the whole
   logo list once in index.html and sliding the combined track exactly
   -50% to the left on a loop, so the seam is invisible.
   TO ADD/REMOVE A CLIENT LOGO: edit the two matching <a><img> pairs in
   index.html (the marquee has the real list, then an aria-hidden="true"
   copy of the same list right after it — always keep both copies in sync,
   or the loop will visibly jump).
   TO CHANGE SPEED: lower `32s` below = faster scroll, higher = slower. */
.marquee-wrap {
  overflow: hidden;
  -webkit-mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
          mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
}
.marquee {
  display: flex;
  align-items: center;
  gap: clamp(48px, 7vw, 90px);
  width: max-content;
  animation: marquee 32s linear infinite; /* <- scroll speed: lower = faster */
}
.marquee-wrap:hover .marquee { animation-play-state: paused; }
@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
.marquee img {
  height: 34px; width: auto; max-width: 140px;
  object-fit: contain;
  filter: brightness(0) invert(1);
  opacity: 0.72;
  transition: opacity 0.3s var(--ease);
}
.marquee a:hover img { opacity: 1; }

/* ── Awards / press row — a static, centered row (NOT the marquee above).
   A scrolling marquee needs a lot of items to read as "ongoing"; with
   only a handful of award/press marks it looked sparse and never
   centered right. Two of these three item types exist because a single
   flattened-to-white treatment doesn't suit every logo — see the big
   comment above the "Ausgezeichnet von" section in index.html for which
   award uses which and why. */
.press-block { margin-bottom: 40px; }
.press-block--last { margin-bottom: 0; }
.press-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: clamp(28px, 5vw, 56px);
}
.press-item { transition: transform 0.3s var(--ease); }
.press-item:hover { transform: scale(1.06); }

/* Clean line-art marks (Circusfreunde Schweiz, TVO-Online): flattened to
   a plain white silhouette, exactly like the client-logo marquee above. */
.press-mark img, .press-mark svg {
  height: 32px; width: auto; max-width: 130px;
  object-fit: contain;
  filter: brightness(0) invert(1);
  fill: var(--white);
  opacity: 0.85;
}

/* Colorful circular badge logos (MZvD, Magic Alon Society): flattening
   these to white turned them into indistinguishable white circles, so
   instead they keep their real color and sit on a small white chip for
   contrast — the badge detail stays legible. Placeholder until real SVG
   wordmarks for these two are found.
   The logo itself renders at 40px (chip size minus 2× padding) — that's
   the size to keep if you tweak this further. Only the white ring
   (padding) got thinner here, from the original 10px down to 3px; the
   chip's outer width/height is just padding × 2 + that fixed 40px logo
   size, so it shrinks along with the ring automatically. */
.press-chip {
  width: 46px; height: 46px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.96);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 3px;
}
.press-chip img { width: 40px; height: 40px; object-fit: contain; }

/* Outlets with no clean hotlinkable logo (Tagblatt renders theirs via
   JavaScript): a plain text wordmark instead of a guessed/fake logo.
   Boxed to the same 32px height as .press-mark's icons (TVO-Online) so
   the two sit at matching visual size in the row, with the font-size
   picked so the actual glyphs (not just the box) look comparable in
   weight to the TVO mark next to it — a text baseline always looks a
   little different from an icon's bounding box, so this is eyeballed
   rather than a strict formula. */
.press-text {
  height: 32px;
  display: flex;
  align-items: center;
  font-family: var(--font-heading);
  font-size: 1.55rem;
  line-height: 1;
  color: var(--white);
  opacity: 0.85;
}
.press-mark:hover img, .press-mark:hover svg { opacity: 1; }
.press-text:hover { opacity: 1; }

/* ==========================================================================
   About
   ==========================================================================
   .stat-row is the "4 / 14 / 2025" number row under the bio text — add or
   remove a <div class="stat"> in index.html and this grid (currently
   `repeat(3, 1fr)`) will need its column count updated to match.
   .definition styles the "Illusion /ɪluˈzi̯oːn/ ..." pull-quote box. */
.about-grid {
  display: grid;
  grid-template-columns: 0.95fr 1.05fr;
  gap: clamp(36px, 6vw, 90px);
  align-items: center;
}
.about-photo {
  position: relative;
  border-radius: var(--radius);
  overflow: hidden;
  aspect-ratio: 4 / 5;
}
.about-photo img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform 0.6s var(--ease);
}
.about-photo:hover img { transform: scale(1.05); }
.about-photo::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(0deg, rgba(0,8,168,0.28), transparent 55%);
  pointer-events: none;
}
.about-copy p { color: var(--text-on-dark-muted); }
.about-copy p:first-of-type { color: var(--text-on-dark); font-family: var(--font-accent); font-size: 1.15rem; line-height: 1.6; }

.stat-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 18px;
  margin-top: 40px;
  padding-top: 32px;
  border-top: 1px solid rgba(255, 255, 255, 0.14);
}
.stat b {
  display: block;
  font-family: var(--font-heading);
  font-size: clamp(1.7rem, 3vw, 2.3rem);
  color: var(--white);
}
.stat span { font-family: var(--font-ui); font-size: 0.8rem; letter-spacing: 0.03em; color: var(--text-on-dark-muted); }

/* Credential kicker — one quiet line naming his awards, not a badge or
   card. .cred-label is the small gold tag on the left (Caudex site's
   "eyebrow" idea, shrunk to sit inline instead of stacked above a
   heading), the rest is plain text you can extend with more " · "
   separated award names as they happen. */
.credential-line {
  margin: 18px 0 0;
  font-family: var(--font-ui);
  font-size: 0.86rem;
  color: var(--text-on-dark-muted);
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.cred-label {
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gold);
  padding-right: 12px;
  border-right: 1px solid rgba(255, 255, 255, 0.2);
}

/* Illusion definition callout (and, further down in index.html, a second
   identical block spotlighting the CVA Special Award — same classes,
   same look, deliberately no photo/card/shadow for either one). */
.definition {
  margin: 56px 0 0;
  padding: 32px clamp(24px, 4vw, 48px);
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: var(--radius);
  background: rgba(255, 255, 255, 0.03);
}
.definition .word {
  font-family: var(--font-accent);
  font-style: italic;
  font-size: clamp(1.5rem, 3vw, 2rem);
  color: var(--white);
}
.definition .ipa { font-family: var(--font-ui); font-size: 0.9rem; color: var(--gold); margin-left: 10px; }
.definition p { margin-top: 10px; color: var(--text-on-dark-muted); font-family: var(--font-accent); font-size: 1.05rem; }

/* ==========================================================================
   Testimonials
   ==========================================================================
   TO ADD/REMOVE A TESTIMONIAL: copy or delete a whole .testi-card block in
   index.html — the grid (repeat(3, 1fr)) auto-wraps into new rows of 3, so
   any number of cards works without touching this CSS. Stars are plain
   text (★) not real ratings data — five stars on every card is a
   deliberate, honest design convention (it signals "positive testimonial",
   not a claimed average rating), edit/remove them if you'd rather not use it. */
.testi-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; margin-bottom: 48px; }
.testi-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.testi-card {
  background: var(--white);
  border: 1px solid rgba(24, 24, 24, 0.08);
  border-radius: var(--radius);
  padding: 30px;
  box-shadow: 0 20px 40px -28px rgba(24, 24, 24, 0.18);
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
  display: flex;
  flex-direction: column;
}
.testi-card:hover { transform: translateY(-6px); box-shadow: 0 26px 50px -22px rgba(0, 8, 168, 0.22); }
.testi-card .stars { color: var(--gold); letter-spacing: 3px; font-size: 0.95rem; margin-bottom: 14px; }
.testi-card blockquote {
  margin: 0 0 20px;
  font-family: var(--font-accent);
  font-size: 1.02rem;
  line-height: 1.6;
  color: var(--text-on-light);
  flex-grow: 1;
}
.testi-card .who { display: flex; flex-direction: column; font-family: var(--font-ui); }
.testi-card .who b { font-size: 0.92rem; font-weight: 500; }
.testi-card .who span { font-size: 0.8rem; color: var(--text-on-light-muted); }

/* ==========================================================================
   Gallery
   ==========================================================================
   A 6-image mosaic on a 6-column grid. Each image gets a size class
   (.g1 … .g6 below) controlling how many columns/rows it spans — that's
   what creates the "some tiles bigger than others" collage look.
   TO REPLACE A PHOTO: swap the URL(s) on the matching <a>/<img> in
   index.html — no CSS change needed as long as you keep 6 images.
   TO ADD A 7TH+ IMAGE: give it a new class here (e.g. .g7 { grid-column:
   span 2; grid-row: span 2; }) and use it in index.html. */
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-auto-rows: 130px;
  gap: 14px;
}
.gallery-grid a {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius-sm);
  display: block;
}
.gallery-grid img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s var(--ease), filter 0.6s var(--ease); }
.gallery-grid a:hover img { transform: scale(1.08); }
.gallery-grid a::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 55%, rgba(0,8,168,0.35));
  opacity: 0; transition: opacity 0.4s var(--ease);
}
.gallery-grid a:hover::after { opacity: 1; }
.g1 { grid-column: span 3; grid-row: span 3; }
.g2 { grid-column: span 3; grid-row: span 2; }
.g3 { grid-column: span 2; grid-row: span 2; }
.g4 { grid-column: span 2; grid-row: span 2; }
.g5 { grid-column: span 2; grid-row: span 2; }
.g6 { grid-column: span 3; grid-row: span 2; }

/* ==========================================================================
   Contact
   ==========================================================================
   Left column: pitch copy + .benefits checklist (add/remove <li> freely,
   the ✓ badge is just a styled <span class="tick">). Right column:
   .form-card, the dark contact form. IMPORTANT — this form has NO backend:
   submitting it just shows a "thanks" message via the small <script> at
   the bottom of index.html, nothing is actually emailed anywhere yet.
   To make it really send messages you'd need a form-handling service
   (Formspree, Cloudflare Workers + Resend/SendGrid, etc.) wired to its
   `action` attribute — ask if you want that built. */
.contact-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(36px, 6vw, 90px);
  align-items: start;
}
.benefits { list-style: none; margin: 28px 0 0; padding: 0; display: flex; flex-direction: column; gap: 16px; }
.benefits li {
  display: flex; align-items: flex-start; gap: 14px;
  font-size: 1.02rem;
}
.benefits li .tick {
  flex: none;
  width: 26px; height: 26px;
  border-radius: 50%;
  background: var(--blue);
  color: var(--white);
  display: flex; align-items: center; justify-content: center;
  font-size: 0.8rem;
  margin-top: 2px;
}
.contact-note {
  margin-top: 36px;
  padding: 20px 22px;
  border-radius: var(--radius);
  background: var(--off-white);
  font-family: var(--font-ui);
  font-size: 0.9rem;
  color: var(--text-on-light-muted);
}

.form-card {
  background: var(--dark);
  color: var(--white);
  border-radius: var(--radius);
  padding: clamp(28px, 4vw, 44px);
}
.field { margin-bottom: 20px; }
.field label {
  display: block;
  font-family: var(--font-ui);
  font-size: 0.78rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--text-on-dark-muted);
  margin-bottom: 8px;
}
.field input, .field textarea {
  width: 100%;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: var(--radius-sm);
  padding: 13px 16px;
  color: var(--white);
  font-family: var(--font-body);
  font-size: 0.98rem;
  transition: border-color 0.25s var(--ease), background 0.25s var(--ease);
}
.field textarea { resize: vertical; min-height: 110px; }
.field input:focus, .field textarea:focus {
  outline: none;
  border-color: var(--blue-hover);
  background: rgba(255, 255, 255, 0.1);
}
.field input::placeholder, .field textarea::placeholder { color: rgba(255,255,255,0.35); }
.form-card .btn { width: 100%; margin-top: 6px; }

/* ==========================================================================
   Footer
   ==========================================================================
   Three columns: brand blurb + social icons, nav links, contact details.
   Social icons are inline SVGs in index.html (Instagram, Facebook, Mail) —
   duplicate one <a><svg> block and swap the path data to add another
   network (e.g. WhatsApp/TikTok), or delete a block to remove one. */
.site-footer { background: var(--dark-2); color: var(--text-on-dark-muted); padding: 72px 0 32px; }
.footer-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  gap: 40px;
  padding-bottom: 44px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.footer-brand img { height: 34px; margin-bottom: 18px; filter: brightness(0) invert(1); }
.footer-brand p { max-width: 32ch; font-size: 0.92rem; }
.footer-col h4 {
  font-family: var(--font-ui);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--white);
  margin-bottom: 18px;
}
.footer-col a, .footer-col p {
  display: block;
  font-size: 0.92rem;
  margin-bottom: 12px;
  transition: color 0.25s var(--ease);
}
.footer-col a:hover { color: var(--white); }
.social-row { display: flex; gap: 14px; margin-top: 18px; }
.social-row a {
  width: 38px; height: 38px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.2);
  display: flex; align-items: center; justify-content: center;
  transition: border-color 0.25s var(--ease), background 0.25s var(--ease);
}
.social-row a:hover { background: var(--blue); border-color: var(--blue); }
.social-row svg { width: 16px; height: 16px; fill: currentColor; }
.footer-bottom {
  display: flex; justify-content: space-between; align-items: center;
  flex-wrap: wrap; gap: 12px;
  padding-top: 28px;
  font-size: 0.82rem;
}
.footer-bottom .legal { display: flex; gap: 22px; }

/* ==========================================================================
   Reveal-on-scroll animation
   ==========================================================================
   Any element with class="reveal" starts invisible + shifted down 24px;
   script.js watches for it entering the viewport and adds .is-visible,
   which this transition then fades/slides into place. To make a new
   section animate in, just add class="reveal" to it in the HTML — nothing
   else to wire up. Respects prefers-reduced-motion (see top of file).
   The hero content uses "reveal is-visible" together (already-visible) so
   it doesn't wait for a scroll event that will never happen above the fold. */
.reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.8s var(--ease), transform 0.8s var(--ease); }
.reveal.is-visible { opacity: 1; transform: translateY(0); }
.reveal-stagger > * { transition-delay: calc(var(--i, 0) * 90ms); }

/* ==========================================================================
   Quick-form section (buchung.html only)
   ==========================================================================
   buchung.html is otherwise a near-identical copy of index.html — same
   header/nav, same sections, same content — it's the ad-traffic landing
   page, and per direct instruction it should look and feel like the main
   site, just with one extra conversion point: this compact 3-field form
   (Name/E-Mail/Telefon, no message field — fewer fields = less friction)
   sits directly after the hero, so it's visible right as you scroll past
   the fold, well before the full contact form further down the page.
   Reuses .form-card (the same dark card component the main contact
   section already uses) — .quick-form-wrap here only narrows the
   container so the card doesn't stretch full-width. */
.quick-form-wrap { max-width: 520px; }

/* ==========================================================================
   Simple pages (Impressum / Datenschutz)
   ========================================================================== */
.simple-page { padding-top: 170px; padding-bottom: 100px; }
.simple-page h1 { margin-bottom: 34px; }
.simple-page h2 { font-size: 1.3rem; margin-top: 2em; }
.simple-page .prose { max-width: 74ch; color: var(--text-on-light-muted); font-size: 1.02rem; }
.simple-page .prose strong { color: var(--text-on-light); }
.simple-page .prose a { color: var(--blue); text-decoration: underline; text-underline-offset: 3px; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 980px) {
  .about-grid, .contact-grid { grid-template-columns: 1fr; }
  .about-photo { max-width: 420px; margin: 0 auto; }
  .testi-grid { grid-template-columns: repeat(2, 1fr); }
  .header-tel { display: none !important; }
  .gallery-grid { grid-template-columns: repeat(4, 1fr); grid-auto-rows: 110px; }
  .g1, .g2, .g6 { grid-column: span 4; }
  .g3, .g4, .g5 { grid-column: span 2; }
}

@media (max-width: 760px) {
  .main-nav { display: none; }
  .nav-toggle { display: flex; }
  .header-tel { display: none; }
  .footer-grid { grid-template-columns: 1fr; }
  .testi-grid { grid-template-columns: 1fr; }
  .stat-row { grid-template-columns: repeat(3, 1fr); gap: 10px; }
  .gallery-grid { grid-template-columns: repeat(2, 1fr); }
  .g1, .g2, .g3, .g4, .g5, .g6 { grid-column: span 2; grid-row: span 2; }
}

/* Mobile nav drawer */
.mobile-nav {
  position: fixed; inset: 0;
  background: var(--dark);
  z-index: 99;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 30px;
  transform: translateY(-100%);
  transition: transform 0.45s var(--ease);
}
.mobile-nav.is-open { transform: translateY(0); }
.mobile-nav a { font-family: var(--font-heading); font-size: 1.9rem; color: var(--white); }
.mobile-nav .btn { margin-top: 10px; }
