/* ==========================================================================
   GOLFO DI NAPOLI — Design-System (production-grade)
   Pizzeria Napoletana · Köln-Weiden
   Editoriales Gastro-Magazin · Ink/Cream-Kapitelwechsel · Gold-Faden
   --------------------------------------------------------------------------
   INHALT
   00  @font-face (8 self-hosted woff2, font-display:swap)
   01  Design-Tokens (Custom Properties: Palette · Type · Space · Motion · Layer)
   02  Reset & Base
   03  Typografie-Utilities (Eyebrow, Lead, Headlines, Body)
   04  Layout-Container & Sektions-Grundwechsel (Ink ↔ Cream)
   05  Wortmarke (Split: "di Napoli" in Gold)
   06  Header & Desktop-Navigation
   07  Nav-Toggle & Mobile-Overlay-Nav
   08  Buttons (primary / ghost / text / sm · Trailing-Icon)
   09  Sticky-Reserve-Pill
   10  Hero (Cinematic, Duoton-Wash)
   11  Manifest (schmale Lese-Kolumne)
   12  Speisekarte (editoriale Linien-Liste, Push-Hover)
   13  Speisekarte-Seite (Kategorie-Subnav)
   14  Heritage-Full-Bleed-Spread
   15  Öffnungszeiten — Signatur-Gold-Block (Live-Heute)
   16  Galerie — Magazine-Spread (12-col ungleich)
   17  Media-Slots (Inline-SVG-Platzhalter "Foto folgt")
   18  Reservieren / Bestellen — Embeds & Hairline-Layout
   19  Map-Platzhalter
   20  NAP-Block & Lese-Sektionen (Impressum/Datenschutz)
   21  Footer
   22  Reveal-Animationen (IntersectionObserver-Klassen)
   23  Responsive (375 / 768 / 1024 / 1440 — mobile-first)
   24  prefers-reduced-motion
   25  Print
   ========================================================================== */


/* ==========================================================================
   00 · @FONT-FACE — self-hosted (DSGVO, kein Google-CDN)
   Pfade relativ zu css/styles.css → ../assets/fonts/
   ========================================================================== */

/* Fraunces — Editorial-Display (Sektions-Headlines, Hero). Variable opsz+wght. */
@font-face {
  font-family: "Fraunces";
  src: url("../assets/fonts/fraunces-var.woff2") format("woff2");
  font-weight: 300 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Fraunces";
  src: url("../assets/fonts/fraunces-var-italic.woff2") format("woff2");
  font-weight: 300 700;
  font-style: italic;
  font-display: swap;
}

/* Cormorant Garamond — Wortmarke (eleganter High-Contrast-Serif). Variable 300–700. */
@font-face {
  font-family: "Cormorant Garamond";
  src: url("../assets/fonts/cormorant-var.woff2") format("woff2");
  font-weight: 300 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Lora";
  src: url("../assets/fonts/lora-400.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Lora";
  src: url("../assets/fonts/lora-400italic.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Lora";
  src: url("../assets/fonts/lora-500.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Lora";
  src: url("../assets/fonts/lora-600.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Work Sans";
  src: url("../assets/fonts/worksans-400.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Work Sans";
  src: url("../assets/fonts/worksans-500.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Work Sans";
  src: url("../assets/fonts/worksans-600.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Pinyon Script";
  src: url("../assets/fonts/pinyon-script.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}


/* ==========================================================================
   01 · DESIGN-TOKENS
   ========================================================================== */

:root {
  /* ===== PALETTE — Creme-Editorial + neapolitanisches Vietri-Blau (Signatur) =====
     Anti-KI Fine-Dining. Basis Creme/Espresso, EIN Star-Akzent: Vietri-Blau (aus den
     echten Tellerfotos). Warme Stützfarben nur sparsam, nie Fließtext. */
  --creme:      #EFE4D4;   /* Naturpapier warm — Carta di Napoli (Hassans Inspo 16.07.) */
  --espresso:   #33261A;   /* Espresso-TINTE: Primär-Text — nie mehr #000 (Druckfarbe auf Papier) */
  --paper:      #FFFFFF;
  /* Signatur-Akzent = GOLD/Bronze (ersetzt Vietri-Blau). Token-Namen --blue* bleiben,
     damit der ganze Bestand ohne Find-Replace auf Gold kippt. */
  --blue:       #A5854F;   /* Antik-Gold — NUR Linien/Script/Strokes, nie Flächenfüllung (kein Text!) */
  --blue-deep:  #75592C;   /* Gold-Deep — Text-Gold auf Creme/Band (AA-fest) */
  --blue-light: #96703C;   /* Gold-Rich — Display-Akzente, CTA-Konturen (Hover #8A6228) */
  --blue-soft:  #E4D3C0;   /* Papier-Stufe 2 — Zonen-Bänder statt Farbwechsel */
  --wein:       #7A2E3A;   /* warme Stütze: Akzent-Headline möglich (8:1) */
  --terrakotta: #B5502B;   /* warme Stütze: Großschrift/Icons/Trenner — kein Body-Text */
  --oliv:       #48523E;   /* Oliv-Tief — Stempel/Badge-Solitär (VERA-ITALIA-Prinzip) */
  --ocker:      #C68A3E;   /* nur Flächen/Linien/Hover */
  --grey:       #6E6046;   /* Meta/Caption auf Papier */

  /* Alt-Token-Aliase → ganze Bestands-CSS kippt ohne Find-Replace auf die neue Palette */
  --ink:        #E4D3C0;   /* DIE INVERSION: Ex-Dunkelflächen werden Papier-Bänder */
  --cream:      var(--creme);
  --gold:       var(--blue);       /* Akzent war Gold → jetzt Vietri-Blau */
  --gold-deep:  var(--blue-deep);
  --bordeaux:   var(--wein);

  /* Fließtext-Farben pro Grund */
  --text-on-ink:   #33261A;  /* Bänder sind hell -> Tinte darauf dunkel */
  --text-on-cream: var(--espresso);
  --muted-on-ink:  #6E6046;
  --muted-on-cream:#6B6256;

  /* Hairlines (grund-abhängig) */
  --hairline-ink:   rgba(51, 38, 26, 0.18);
  --hairline-cream: rgba(51, 38, 26, 0.14);
  --hairline-blue:  rgba(184, 146, 74, 0.34);
  --gold-line:      var(--blue);

  /* Duoton-Wash für Bild-Slots (Espresso mit Vietri-Blau-Tiefe statt Bordeaux) */
  --wash-hero:     linear-gradient(180deg, rgba(51,38,26,0.30) 0%, rgba(51,38,26,0.20) 55%, rgba(51,38,26,0.50) 100%);
  --wash-heritage: linear-gradient(0deg, rgba(51,38,26,0.62) 0%, rgba(51,38,26,0.18) 55%, rgba(51,38,26,0.38) 100%);

  /* --- Typografie-Familien --- */
  --font-display:  "Fraunces", Georgia, "Times New Roman", serif;
  --font-wordmark: "Cormorant Garamond", Georgia, "Times New Roman", serif;
  --font-serif:    "Lora", Georgia, "Times New Roman", serif;
  --font-ui:       "Work Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-script:   "Pinyon Script", "Cormorant Garamond", Georgia, cursive;

  /* --- Typo-Skala (clamp mobil → desktop) --- */
  --fs-hero:       clamp(3.4rem, 9vw, 6rem);
  --fs-display-xl: clamp(2.6rem, 6vw, 4.5rem);
  --fs-display:    clamp(2rem, 4vw, 3rem);
  --fs-h2-serif:   clamp(2.1rem, 4vw, 3.4rem);
  --fs-h3:         clamp(1.15rem, 1.8vw, 1.4rem);
  --fs-lead:       clamp(1.25rem, 2.4vw, 1.7rem);
  --fs-body:       clamp(0.9375rem, 2vw, 1.0625rem); /* 15→17px (Mobile-Lesbarkeit) */
  --fs-ui:         0.9375rem;                         /* 15px */
  --fs-meta:       0.8125rem;                         /* 13px */
  --fs-eyebrow:    0.75rem;                           /* 12px */

  /* --- Spacing (8px-Basis) --- */
  --space-3xs: 4px;
  --space-2xs: 8px;
  --space-xs:  12px;
  --space-sm:  16px;
  --space-md:  24px;
  --space-lg:  40px;
  --space-xl:  64px;
  --space-2xl: 96px;
  --space-3xl: 128px;
  --space-4xl: 160px;

  /* Section-Padding-Varianten (NICHT uniform) */
  --section-pad:        clamp(64px, 9vw, 128px);
  --section-pad-manifest: clamp(96px, 12vw, 160px);
  --section-pad-teaser: clamp(64px, 8vw, 96px);
  --section-pad-reserve: clamp(64px, 7vw, 96px);
  --overlay-pad:        clamp(40px, 7vw, 96px);

  /* --- Container --- */
  --container:        1240px;
  --container-narrow: 780px;
  --container-wide:   1440px;
  --container-text:   68ch;
  --container-pad:    clamp(24px, 5vw, 64px);

  /* --- Radius --- */
  --radius-pill: 999px;
  --radius-sm:   10px;
  --radius-md:   16px;

  /* --- Motion --- */
  --ease-out:  cubic-bezier(0.22, 1, 0.36, 1);
  --ease-soft: cubic-bezier(0.32, 0.72, 0, 1);
  --dur-fast: 0.25s;
  --dur:      0.45s;
  --dur-slow: 0.7s;

  /* --- Layer --- */
  --z-base:    1;
  --z-overlay: 50;
  --z-header:  100;
  --z-mobile-nav: 200;
  --z-sticky:  300;

  /* Header-Höhe für scroll-padding & sticky-Offsets */
  --header-h: 76px;

  /* Duoton-Slot-Tiefen (Media-/Embed-Platzhalter auf dunklem Grund) */
  --slot-dark:     #E4D3C0;   /* Media-Slot = Papier-Fenster statt Schwarz-Loch */
  --slot-darkest:  #D8C6AE;   /* unterer Papier-Ton */
  --embed-dark:    #131313;   /* Embed-Mount-Grund auf Ink */

  /* Form-Fehlerfarben (Status-/Inline-Feedback) */
  --error-on-ink: #8C2F39;  /* gedämpftes Rot auf Espresso */
  --error-on-cream: var(--wein);  /* Wein als Fehlerton auf Creme (8:1) */

  /* Print-Override-Töne (intentional hardcoded für Druck-Klarheit) */
  --print-bg:   #FFFFFF;
  --print-text: #000000;
}


/* ==========================================================================
   02 · RESET & BASE
   ========================================================================== */

*, *::before, *::after { box-sizing: border-box; }

* { margin: 0; }

html {
  -webkit-text-size-adjust: 100%;
  -moz-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + var(--space-md));
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

body {
  background: var(--ink);
  color: var(--text-on-ink);
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.68;
  min-height: 100vh;
  /* KEIN overflow-x:hidden hier — macht body zum Scroll-Container und bricht
     position:sticky (Sticky-Galerie). Horizontalen Überlauf an der Quelle clippen. */
}

/* Body-Lock wenn Mobile-Nav offen */
body.nav-open { overflow: hidden; }

img, svg, video {
  display: block;
  max-width: 100%;
  height: auto;
}

a {
  color: inherit;
  text-decoration: none;
}

ul, ol { list-style: none; padding: 0; }

button {
  font: inherit;
  color: inherit;
  background: none;
  border: none;
  cursor: pointer;
}

p { text-wrap: pretty; }

:where(h1, h2, h3, h4) { text-wrap: balance; }

/* Sichtbare Fokus-Ringe (Tastatur)
   Default = dunkles Bronze (6,1:1 auf Creme) — Seiten-Grund ist hell.
   Auf dunklen Flächen (Ink-Sektionen, Header, Footer, Hero) heller Gold-Ton (~8:1). */
:focus-visible {
  outline: 2px solid #6E5629;
  outline-offset: 3px;
  border-radius: 2px;
}
.section--ink :focus-visible,
.site-header :focus-visible,
.site-footer :focus-visible,
.hero :focus-visible {
  outline-color: var(--blue-light);
}

/* Skip-Link — hart versteckt (clip-Pattern, übersteht transform-Resets),
   erscheint ausschließlich bei Tastatur-Fokus */
.skip-link {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}
.skip-link:focus-visible {
  position: fixed;
  top: var(--space-sm);
  left: var(--space-sm);
  z-index: 999;
  width: auto; height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
  background: var(--espresso);
  color: var(--creme);
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-ui);
  padding: 0.7rem 1.2rem;
  border-radius: 2px;
}

/* Screenreader-only */
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

::selection {
  background: var(--gold);
  color: var(--espresso);
}


/* ==========================================================================
   03 · TYPOGRAFIE-UTILITIES
   ========================================================================== */

/* Eyebrow — EIN Brand-System, max. 1 pro Section, an Kapitel-Anfängen.
   Work-Sans-Caps in Gold mit vorangestelltem 24px-Goldstrich. */
.eyebrow {
  display: inline-flex;
  align-items: center;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-eyebrow);
  text-transform: uppercase;
  letter-spacing: 0.22em;
  color: var(--blue-light);   /* Default = auf dunklem Espresso-Grund (hell genug) */
  line-height: 1;
}
.eyebrow::before {
  content: "";
  width: 1.5rem;
  height: 1px;
  background: var(--blue-light);
  margin-right: 0.75rem;
  flex: 0 0 auto;
}
.eyebrow--bordeaux { color: var(--wein); }
.eyebrow--bordeaux::before { background: var(--wein); }
/* Auf hellem Creme → tiefes Vietri-Blau für sauberen Kontrast der Eyebrow-Caps */
.section--cream .eyebrow { color: var(--blue-deep); }
.section--cream .eyebrow::before { background: var(--blue-deep); }

/* Display / Headlines */
.display-hero {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--fs-hero);
  line-height: 0.98;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.display-xl {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--fs-display-xl);
  line-height: 1.02;
  letter-spacing: 0.055em;
  text-transform: uppercase;
}
.display {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--fs-display);
  line-height: 1.04;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
/* Editorial-Headlines jetzt in Cormorant (elegant, hoher Kontrast) statt Lora */
.headline {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--fs-h2-serif);
  line-height: 1.06;
  letter-spacing: 0.005em;
}

/* Lead (Manifest) */
.lead {
  font-family: var(--font-serif);
  font-weight: 400;
  font-size: var(--fs-lead);
  line-height: 1.5;
}
.lead em,
.lead .accent {
  font-style: italic;
  color: var(--bordeaux);
}
/* Auf Ink-Grund Lead-Akzent → Gold (Bordeaux zu dunkel) */
.section--ink .lead em,
.section--ink .lead .accent {
  color: var(--blue-light);
  font-style: italic;
}

/* Fließtext-Block */
.prose {
  max-width: var(--container-text);
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.68;
}
.prose p + p { margin-top: 1.1em; }
.prose a {
  color: inherit;
  border-bottom: 1px solid var(--gold);
  transition: color var(--dur-fast) var(--ease-out);
}
.section--cream .prose a { border-color: var(--bordeaux); }
.prose a:hover { color: var(--bordeaux); }
.section--ink .prose a:hover { color: var(--gold-text); }

/* Meta / Caption */
.meta {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  letter-spacing: 0.04em;
  color: var(--muted-on-ink);
}
.section--cream .meta { color: var(--muted-on-cream); }

/* Signierte Zeile (Manifest "Familie + Steinofen") */
.signature {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: var(--fs-body);
  color: var(--muted-on-cream);
}
.section--ink .signature { color: var(--muted-on-ink); }


/* ==========================================================================
   04 · LAYOUT-CONTAINER & SEKTIONS-GRUNDWECHSEL
   Kein Trennlinien-System — Rhythmus = Grundwechsel + Padding-Varianz.
   ========================================================================== */

.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--container-pad);
}
.container--narrow { max-width: var(--container-narrow); }
.container--wide   { max-width: var(--container-wide); }

/* Sektion-Grund-Toggle */
.section {
  padding-block: var(--section-pad);
  position: relative;
}
.section--ink {
  background: var(--ink);
  color: var(--text-on-ink);
}
.section--cream {
  background: var(--cream);
  color: var(--text-on-cream);
}

/* Padding-Varianten (impeccable: vary spacing) */
.section--manifest { padding-block: var(--section-pad-manifest); }
.section--teaser   { padding-block: var(--section-pad-teaser); }
.section--reserve  { padding-block: var(--section-pad-reserve); }
.section--flush-bottom { padding-bottom: 0; }
.section--flush       { padding-block: 0; }

/* Sektions-Kopf (Eyebrow → Headline → Lead Rhythmus) */
.section-head { max-width: var(--container-text); }
.section-head .eyebrow + .headline,
.section-head .eyebrow + .display,
.section-head .eyebrow + .display-xl { margin-top: var(--space-md); }
.section-head .headline + .lead,
.section-head .display-xl + .lead,
.section-head .display + .lead { margin-top: var(--space-lg); }
.section-head--center {
  margin-inline: auto;
  text-align: center;
}


/* ==========================================================================
   05 · WORTMARKE (Split: "Golfo" + "di Napoli" in Gold)
   Ein-span-tauschbar für späteren Logo-Tausch.
   ========================================================================== */

.wordmark {
  display: inline-flex;
  flex-direction: column;
  line-height: 0.92;
  font-family: var(--font-wordmark);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--text-on-ink);
  transition: opacity var(--dur-fast) var(--ease-out);
}
.section--cream .wordmark,
.wordmark--on-cream { color: var(--espresso); }

.wordmark__line {
  font-size: clamp(1.5rem, 2.4vw, 1.85rem);
  display: block;
}
.wordmark__accent {
  font-size: clamp(0.95rem, 1.6vw, 1.15rem);
  color: var(--gold-text);
  display: block;
  letter-spacing: 0.06em;
}
.wordmark:hover { opacity: 0.85; }

/* --- Kopfzeilen-Marke: das Emblem statt der gesetzten Wortmarke -----------
   Kundenwunsch 08.08.: „Wir haben ja oben links so eine Schrift von GOLFO di
   NAPOLI, und da soll einfach das Logo hin."

   Fassung: die freigestellte Druckfassung. Die Gold-auf-Schwarz-Variante
   bringt ihre eigene schwarze Ellipse mit und säße als Fleck auf dem hellen
   Papierband der Leiste (--ink ist seit der Carta-Umstellung #E4D3C0, kein
   dunkler Ton). „druck" statt „hell", weil sie kräftigere Mindeststriche hat
   und bei rund 50 px Höhe deutlich standfester steht.

   Größe: das Oval ist 1,34-mal so breit wie hoch. Bei 52 px sind das 70 px
   Breite — schmaler als die getippte Wortmarke vorher (90 px), das enge
   mobile Breitenbudget bleibt also unangetastet. Der Kunde weiß, dass die
   Krone „TRATTORIA" in dieser Größe als Textur liest, nicht als Schrift
   (Versalhöhe 3,7 % der Logohöhe), und hat sich bewusst dafür entschieden. */
.brandmark {
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
  /* Ausgleich für die auslaufende Ovalflanke — optisch bündig mit dem
     Textsatz darunter, nicht mathematisch. */
  margin-left: -3px;
  transition: opacity var(--dur-fast) var(--ease-out);
}
.brandmark img {
  display: block;
  width: auto;
  height: clamp(46px, 5.4vw, 58px);
}
.brandmark:hover { opacity: 0.85; }

/* Hero-Variante (riesig) */
.wordmark--hero {
  line-height: 0.84;
  color: var(--text-on-ink);
}
.wordmark--hero .wordmark__line { font-size: var(--fs-hero); }
.wordmark--hero .wordmark__accent {
  /* Verhältnis Line:Accent auf ~1,4 austariert (mobil 54:38, optisch ausgewogen) */
  font-size: clamp(2.2rem, 5.5vw, 3rem);
  letter-spacing: 0.08em;
  color: var(--blue-light);   /* "di Napoli" auf dunklem Hero-Foto */
}

/* Footer-Variante */
.wordmark--footer .wordmark__line { font-size: 1.7rem; }
.wordmark--footer .wordmark__accent { font-size: 1.05rem; color: var(--blue-light); }


/* ==========================================================================
   06 · HEADER & DESKTOP-NAVIGATION
   ========================================================================== */

.site-header {
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  background: color-mix(in srgb, var(--ink) 88%, transparent);
  -webkit-backdrop-filter: blur(12px) saturate(1.2);
  backdrop-filter: blur(12px) saturate(1.2);
  border-bottom: 1px solid var(--hairline-ink);
  transition: background var(--dur) var(--ease-out),
              border-color var(--dur) var(--ease-out);
}
/* Header über Cream-Hero / nach Scroll fester */
.site-header[data-scrolled="true"] {
  background: color-mix(in srgb, var(--ink) 96%, transparent);
}

.site-header__inner {
  max-width: var(--container-wide);
  margin-inline: auto;
  padding-inline: var(--container-pad);
  min-height: var(--header-h);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-lg);
}

/* Desktop-Nav */
.site-nav__list {
  display: flex;
  align-items: center;
  gap: clamp(1.1rem, 2.2vw, 2.2rem);
}
.site-nav__link {
  position: relative;
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-ui);
  letter-spacing: 0.01em;
  color: var(--text-on-ink);
  padding-block: 0.4rem;
  transition: color var(--dur-fast) var(--ease-out);
}
/* Wachsende Gold-Unterstreichung von links */
.site-nav__link::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 1px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur) var(--ease-out);
}
.site-nav__link:hover { color: var(--gold-text); }
.site-nav__link:hover::after { transform: scaleX(1); }

/* Aktiver Punkt (data-nav-current Match via aria-current) */
.site-nav__link[aria-current="page"] { color: var(--gold-text); }
.site-nav__link[aria-current="page"]::after {
  transform: scaleX(1);
  transform-origin: left;
}

.site-header__actions {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
}


/* ==========================================================================
   07 · NAV-TOGGLE & MOBILE-OVERLAY-NAV
   ========================================================================== */

.nav-toggle {
  display: none;            /* nur < 1024px sichtbar */
  position: relative;
  width: 44px; height: 44px;
  border-radius: var(--radius-sm);
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  z-index: calc(var(--z-mobile-nav) + 1);
}
.nav-toggle__bar {
  display: block;
  width: 24px;
  height: 1.5px;
  background: var(--text-on-ink);
  border-radius: 2px;
  transition: transform var(--dur) var(--ease-out),
              opacity var(--dur-fast) var(--ease-out),
              background-color var(--dur-fast) var(--ease-out);
}
/* Hamburger → X */
.nav-toggle[aria-expanded="true"] .nav-toggle__bar:first-child {
  transform: translateY(3.75px) rotate(45deg);
  background: var(--espresso);
}
.nav-toggle[aria-expanded="true"] .nav-toggle__bar:last-child {
  transform: translateY(-3.75px) rotate(-45deg);
  background: var(--espresso);
}

/* Mobile-Overlay-Nav */
.mobile-nav {
  position: fixed;
  inset: 0;
  z-index: var(--z-mobile-nav);
  background: var(--ink);
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: var(--space-2xl);
  padding: clamp(2rem, 8vw, 4rem) var(--container-pad);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-1.5%);
  transition: opacity var(--dur) var(--ease-out),
              visibility var(--dur) var(--ease-out),
              transform var(--dur) var(--ease-out);
}
.mobile-nav[hidden] { display: flex; }   /* JS togglet .is-open statt hidden-Attr */
.mobile-nav.is-open {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.mobile-nav__list {
  display: flex;
  flex-direction: column;
  gap: var(--space-md);
}
.mobile-nav__list a {
  display: inline-block;
  font-family: var(--font-display);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-size: clamp(2rem, 9vw, 3rem);
  line-height: 1;
  color: var(--text-on-ink);
  /* Stagger-Start (JS setzt .is-open am Container) */
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--dur) var(--ease-out),
              transform var(--dur) var(--ease-out),
              color var(--dur-fast) var(--ease-out);
}
.mobile-nav.is-open .mobile-nav__list a { opacity: 1; transform: translateY(0); }
/* gestaffelte Delays */
.mobile-nav.is-open .mobile-nav__list li:nth-child(1) a { transition-delay: 0.06s; }
.mobile-nav.is-open .mobile-nav__list li:nth-child(2) a { transition-delay: 0.13s; }
.mobile-nav.is-open .mobile-nav__list li:nth-child(3) a { transition-delay: 0.20s; }
.mobile-nav.is-open .mobile-nav__list li:nth-child(4) a { transition-delay: 0.27s; }
.mobile-nav.is-open .mobile-nav__list li:nth-child(5) a { transition-delay: 0.34s; }
.mobile-nav.is-open .mobile-nav__list li:nth-child(6) a { transition-delay: 0.41s; }
.mobile-nav__list a:hover,
.mobile-nav__list a[aria-current="page"] { color: var(--gold-text); }

.mobile-nav__tel {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 1.25rem;
  color: var(--gold-text);
  letter-spacing: 0.02em;
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--dur) var(--ease-out),
              transform var(--dur) var(--ease-out);
  transition-delay: 0.48s;
}
.mobile-nav.is-open .mobile-nav__tel { opacity: 1; transform: translateY(0); }


/* ==========================================================================
   08 · BUTTONS
   ========================================================================== */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 0.8125rem;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  line-height: 1;
  padding: 1rem 1.9rem;
  border-radius: 2px;
  border: 1px solid transparent;
  white-space: nowrap;
  transition: transform var(--dur) var(--ease-out),
              background-color var(--dur) var(--ease-out),
              border-color var(--dur) var(--ease-out),
              color var(--dur) var(--ease-out);
  will-change: transform;
}
.btn:active { transform: scale(0.98); }

/* Primary (Gold) */
.btn--primary {
  background: var(--gold);
  color: var(--espresso);
}
.btn--primary:hover {
  transform: translateY(-1px);
  background: #A5813F;
}
.btn--primary:focus-visible {
  outline: 2px solid #6E5629;
  outline-offset: 2px;
}

/* Ghost (auf Ink) */
.btn--ghost {
  background: transparent;
  border-color: var(--hairline-cream);
  color: var(--espresso);
}
.btn--ghost:hover {
  border-color: var(--gold-text);
  color: var(--gold-text);
  transform: translateY(-2px);
}
/* Ghost auf Cream */
.section--cream .btn--ghost {
  border-color: var(--hairline-cream);
  color: var(--espresso);
}
.section--cream .btn--ghost:hover {
  border-color: var(--bordeaux);
  color: var(--bordeaux);
}

/* Small (Header) */
.btn--sm {
  padding: 0.6rem 1.1rem;
  font-size: 0.875rem;
}

/* Text-Button ("Ganze Karte ansehen →") mit wachsender Gold-Linie */
.btn--text {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  position: relative;
  padding: 0.4rem 0;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 0.8125rem;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: inherit;
  background: none;
  border: none;
  border-radius: 0;
}
.btn--text::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 1px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur) var(--ease-out);
}
.btn--text:hover::after { transform: scaleX(1); }
.btn--text .btn__arrow {
  transition: transform var(--dur) var(--ease-out);
}
.btn--text:hover .btn__arrow { transform: translateX(3px); }

/* Trailing-Pfeil — nackt, kein Icon-Kreis (Editorial-Linie statt App-Pille) */
.btn__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  transition: transform var(--dur) var(--ease-out);
}
.btn--primary:hover .btn__icon {
  transform: translateX(3px);
}
.btn__icon svg { width: 12px; height: 12px; }

/* Button-Reihe (NIE zwei fette nebeneinander im Hero — nur sekundär-Kontexte) */
.btn-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-md);
}


/* ==========================================================================
   09 · STICKY-RESERVE-PILL (Hero-Ersatz für Doppel-CTA)
   Erscheint per IntersectionObserver nach Hero-Austritt.
   ========================================================================== */

.reserve-pill {
  position: fixed;
  bottom: clamp(1rem, 3vw, 2rem);
  right: clamp(1rem, 3vw, 2rem);
  z-index: var(--z-sticky);
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
  background: var(--gold);
  color: var(--espresso);
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-ui);
  padding: 0.85rem 1.3rem;
  border-radius: var(--radius-pill);
  box-shadow: 0 8px 30px rgba(10, 10, 10, 0.25);
  /* Start: versteckt, slidet rein — visibility verhindert Tab-Fokus im
     unsichtbaren Zustand */
  opacity: 0;
  visibility: hidden;
  transform: translateY(12px);
  pointer-events: none;
  transition: opacity var(--dur-slow) var(--ease-out),
              transform var(--dur-slow) var(--ease-out),
              visibility 0s linear var(--dur-slow);
}
.reserve-pill[hidden] { display: none; }
.reserve-pill.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  pointer-events: auto;
  transition: opacity var(--dur-slow) var(--ease-out),
              transform var(--dur-slow) var(--ease-out),
              visibility 0s;
}
.reserve-pill__tel {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: var(--radius-pill);
  background: color-mix(in srgb, var(--espresso) 12%, transparent);
  color: var(--espresso);
  transition: background-color var(--dur-fast) var(--ease-out);
}
.reserve-pill__tel:hover { background: color-mix(in srgb, var(--espresso) 22%, transparent); }
.reserve-pill__tel svg { width: 16px; height: 16px; }
.reserve-pill__label { line-height: 1; }


/* ==========================================================================
   10 · HERO (Cinematic, ~90vh, Duoton-Wash)
   ========================================================================== */

.hero {
  position: relative;
  min-height: 90vh;
  display: flex;
  align-items: flex-end;
  padding: 0;
  background: var(--ink);
  overflow: hidden;
  isolation: isolate;
}
/* Bild-/Slot-Layer */
.hero__media {
  position: absolute;
  inset: 0;
  z-index: -2;
}
.hero__media .media-slot { width: 100%; height: 100%; }
.hero__media img, .hero__media video { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Duoton-Wash über Bild (Bebas-Weiß & Gold bleiben AA) */
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--wash-hero);
  pointer-events: none;
}
.hero__inner {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--container-pad);
  padding-bottom: clamp(4rem, 12vh, 8rem);
  padding-top: clamp(6rem, 14vh, 9rem);
}
.hero .eyebrow { color: var(--blue-light); }
.hero .eyebrow::before { background: var(--blue-light); }
.hero h1 {
  margin-top: var(--space-md);
}
.hero__lead {
  /* Mobile etwas breiter (sonst nur 3–4 Worte/Zeile), Desktop bei 46ch gedeckelt */
  max-width: clamp(35ch, 100%, 46ch);
  margin-top: var(--space-lg);
  color: var(--text-on-ink);
}
/* Hero auf Schmal-Viewports niedriger → schneller Scroll zum Inhalt */
@media (max-width: 600px) {
  .hero { min-height: 70vh; }
}

/* Scroll-Cue (dezent, kein Doppel-CTA) */
.hero__cue {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  margin-top: var(--space-xl);
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--muted-on-ink);
}
.hero__cue-line {
  display: inline-block;
  width: 1px;
  height: 2.4rem;
  background: linear-gradient(180deg, var(--gold), transparent);
  animation: cue-pulse 2.4s var(--ease-soft) infinite;
}
@keyframes cue-pulse {
  0%, 100% { opacity: 0.4; transform: scaleY(0.7); transform-origin: top; }
  50%      { opacity: 1;   transform: scaleY(1);   transform-origin: top; }
}


/* ==========================================================================
   11 · MANIFEST (schmale zentrierte Lese-Kolumne)
   ========================================================================== */

.manifest {
  text-align: center;
}
.manifest .lead {
  margin-inline: auto;
  max-width: 32ch;
}
.manifest .signature {
  margin-top: var(--space-lg);
  display: inline-block;
}
.manifest .eyebrow {
  margin-bottom: var(--space-lg);
  /* zentriert: Strich-Pseudo lässt inline-flex zu */
}


/* ==========================================================================
   12 · SPEISEKARTE — editoriale Linien-Liste (KEINE Cards) + Push-Hover
   ========================================================================== */

.menu-list {
  margin-top: var(--space-xl);
}
.menu-list__intro {
  margin-bottom: var(--space-lg);
  max-width: var(--container-text);
}

.menu-item {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  column-gap: var(--space-lg);
  padding-block: var(--space-md);
  padding-inline: var(--space-2xs);
  border-bottom: 1px solid var(--hairline-cream);
  transition: background-color var(--dur) var(--ease-out);
}
.section--ink .menu-item { border-bottom-color: var(--hairline-ink); }

/* stiller Hover — warmer Gold-Hauch, keine Layout-Bewegung */
.menu-item:hover,
.menu-item:focus-within {
  background-color: rgba(184, 146, 74, 0.05);
}
.section--ink .menu-item:hover,
.section--ink .menu-item:focus-within {
  background-color: rgba(212, 184, 150, 0.06);
}

/* Foto-Speisekarte: Bild je Gericht */
.menu-item--with-image {
  grid-template-columns: clamp(76px, 9vw, 104px) 1fr auto;
  align-items: center;
  column-gap: var(--space-md);
}
.menu-item__image {
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: rgba(0, 0, 0, 0.05);
}
.menu-item__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 600ms var(--ease-out);
}
.menu-item--with-image:hover .menu-item__image img { transform: scale(1.05); }
@media (max-width: 600px) {
  .menu-item--with-image {
    grid-template-columns: 64px 1fr auto;
    column-gap: var(--space-sm);
  }
}
@media (max-width: 375px) {
  .menu-item--with-image {
    grid-template-columns: 50px 1fr auto;
  }
}

.menu-item__body { min-width: 0; }
.menu-item__name {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: var(--fs-h3);
  line-height: 1.2;
  transition: color var(--dur) var(--ease-out);
}
.menu-item:hover .menu-item__name,
.menu-item:focus-within .menu-item__name { color: var(--bordeaux); }
.section--ink .menu-item:hover .menu-item__name,
.section--ink .menu-item:focus-within .menu-item__name { color: var(--gold-text); }

.menu-item__desc {
  margin-top: 0.35rem;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.95rem;
  line-height: 1.5;
  color: var(--muted-on-cream);
}
.section--ink .menu-item__desc { color: var(--muted-on-ink); }

.menu-item__price {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-h3);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: inherit;
}
/* optionale Tags (z.B. "vegetarisch") */
.menu-item__tag {
  display: inline-block;
  margin-left: 0.6rem;
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--bordeaux);
  vertical-align: middle;
}
.section--ink .menu-item__tag { color: var(--gold-text); }

/* Teaser-Footer (Text-Button "Ganze Karte ansehen") */
.menu-teaser__cta { margin-top: var(--space-xl); }


/* ==========================================================================
   13 · SPEISEKARTE-SEITE — Kategorie-Subnav (sticky, KEIN Tab-Schema)
   ========================================================================== */

.menu-page__header {
  padding-bottom: var(--section-pad-teaser);
}

.category-nav {
  position: sticky;
  top: var(--header-h);
  z-index: var(--z-overlay);
  background: color-mix(in srgb, var(--cream) 92%, transparent);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--hairline-cream);
}
.category-nav__list {
  display: flex;
  gap: clamp(1rem, 3vw, 2rem);
  overflow-x: auto;
  scrollbar-width: none;
  padding: var(--space-md) var(--container-pad);
  max-width: var(--container);
  margin-inline: auto;
}
.category-nav__list::-webkit-scrollbar { display: none; }
.category-nav__link {
  position: relative;
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-ui);
  letter-spacing: 0.04em;
  color: var(--muted-on-cream);
  white-space: nowrap;
  padding-block: 0.3rem;
  transition: color var(--dur-fast) var(--ease-out);
}
.category-nav__link::after {
  content: "";
  position: absolute;
  left: 0; bottom: 0;
  width: 100%; height: 2px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur) var(--ease-out);
}
.category-nav__link:hover,
.category-nav__link.is-active { color: var(--espresso); }
.category-nav__link.is-active::after { transform: scaleX(1); }

/* Kategorie-Sektion */
.menu-category { scroll-margin-top: calc(var(--header-h) + 4rem); }
.menu-category__title {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  letter-spacing: 0.02em;
  text-transform: uppercase;
}
.menu-category__intro {
  margin-top: var(--space-md);
  max-width: var(--container-text);
  color: var(--muted-on-cream);
  font-style: italic;
}
.section--ink .menu-category__intro { color: var(--muted-on-ink); }


/* ==========================================================================
   14 · HERITAGE — Full-Bleed-Spread (Text-Overlay über Gradient)
   ========================================================================== */

.heritage {
  position: relative;
  min-height: 70vh;
  display: flex;
  align-items: flex-end;
  padding: 0;
  background: var(--ink);
  overflow: hidden;
  isolation: isolate;
}
.heritage__media {
  position: absolute;
  inset: 0;
  z-index: -2;
}
.heritage__media .media-slot { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; }
.heritage::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--wash-heritage);
  pointer-events: none;
}
.heritage__inner {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding: var(--overlay-pad) var(--container-pad);
  color: var(--text-on-ink);
}
.heritage__inner .eyebrow { color: var(--blue-light); }
.heritage__inner .eyebrow::before { background: var(--blue-light); }
.heritage__title {
  margin-top: var(--space-md);
  font-family: var(--font-display);
  font-size: var(--fs-display-xl);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  line-height: 0.96;
}
.heritage__text {
  max-width: 54ch;
  margin-top: var(--space-md);
  color: var(--text-on-ink);
}


/* ==========================================================================
   15 · ÖFFNUNGSZEITEN — Signatur-Gold-Block (Live-Heute)
   ========================================================================== */

.hours {
  background: var(--ink);
  color: var(--text-on-ink);
  border: 1px solid var(--gold-line);
  border-radius: var(--radius-md);
  padding: clamp(1.75rem, 4vw, 2.75rem);
}
.hours__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  margin-bottom: var(--space-lg);
}
.hours__label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-eyebrow);
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--gold-text);
}
.hours-list { display: block; }
.hours-list > div {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  gap: var(--space-md);
  padding-block: 0.6rem;
  border-bottom: 1px solid var(--hairline-ink);
}
.hours-list > div:last-child { border-bottom: 0; }
.hours-list dt {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-ui);
  letter-spacing: 0.04em;
}
.hours-list dd {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-ui);
  font-variant-numeric: tabular-nums;
  color: var(--text-on-ink);
}

/* Ruhetag — sichtbar gedämpft */
.hours-list .is-closed dt,
.hours-list .is-closed dd {
  color: var(--muted-on-ink);
}
.hours-list .is-closed dd { font-style: italic; }

/* Heutiger Tag — Gold-Hervorhebung + Punkt (JS setzt .is-today via [data-day]) */
.hours-list .is-today {
  position: relative;
  padding-left: 1.1rem;
}
.hours-list .is-today dt,
.hours-list .is-today dd { color: var(--gold-text); }
.hours-list .is-today::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gold);
  transform: translateY(-50%);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--gold) 20%, transparent);
}
/* Ruhetag bleibt auch als "heute" gedämpft (ehrlich) */
.hours-list .is-today.is-closed dt,
.hours-list .is-today.is-closed dd { color: var(--grey); }

/* Auf Creme-Grund (z.B. reservieren.html): dunkle Text-Farben statt Off-White —
   sonst sind die Zeiten auf hellem Grund praktisch unsichtbar (Kontrast-Bug) */
.section--cream .hours-list dt { color: var(--text-on-cream); }
.section--cream .hours-list dd { color: rgba(30, 30, 31, 0.78); }
.section--cream .hours-list > div { border-bottom-color: var(--hairline-cream); }
.section--cream .hours-list .is-closed dt,
.section--cream .hours-list .is-closed dd { color: var(--muted-on-cream); }
.section--cream .hours-list .is-today dt,
.section--cream .hours-list .is-today dd { color: var(--blue-deep); }
.section--cream .hours-list .is-today::before { background: var(--blue-deep); }
.section--cream .hours-list .is-today.is-closed dt,
.section--cream .hours-list .is-today.is-closed dd { color: var(--muted-on-cream); }

/* NAP-Teaser neben/unter Hours */
.hours-block {
  display: grid;
  gap: var(--space-xl);
  align-items: start;
}


/* ==========================================================================
   16 · GALERIE — Magazine-Spread (12-col, ungleiche Spans)
   ========================================================================== */

.gallery {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: clamp(8px, 1.5vw, 16px);
  margin-top: var(--space-xl);
}
.gallery__item {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius-sm);
  isolation: isolate;
}
.gallery__item .media-slot,
.gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--dur-slow) var(--ease-soft);
}
.gallery__item:hover .media-slot,
.gallery__item:hover img { transform: scale(1.03); }

/* Gold-Hairline-Frame (fade-in bei Hover) */
.gallery__item::after {
  content: "";
  position: absolute;
  inset: 8px;
  border: 1px solid var(--gold);
  border-radius: calc(var(--radius-sm) - 4px);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur) var(--ease-out);
  z-index: 2;
}
.gallery__item:hover::after { opacity: 1; }

/* Ungleicher Spread (Desktop) — variable aspect-ratios */
.gallery__item--a { grid-column: 1 / 8;  aspect-ratio: 16 / 10; }
.gallery__item--b { grid-column: 8 / 13; aspect-ratio: 4 / 5; }
.gallery__item--c { grid-column: 1 / 5;  aspect-ratio: 1 / 1; }
.gallery__item--d { grid-column: 5 / 13; aspect-ratio: 16 / 9; }
.gallery__item--e { grid-column: 1 / 6;  aspect-ratio: 4 / 5; }
.gallery__item--f { grid-column: 6 / 13; aspect-ratio: 3 / 2; }


/* ==========================================================================
   17 · MEDIA-SLOTS — Inline-SVG-Platzhalter "Foto folgt"
   Warmer Duoton (Ink → Bordeaux → Gold-Andeutung).
   1:1 tauschbar gegen <img> gleicher Ratio.
   ========================================================================== */

.media-slot {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-sm);
  width: 100%;
  height: 100%;
  background:
    radial-gradient(120% 100% at 70% 20%, rgba(0,0,0,0.40) 0%, transparent 55%),
    radial-gradient(80% 80% at 20% 90%, rgba(143,182,218,0.10) 0%, transparent 50%),
    linear-gradient(160deg, var(--slot-dark) 0%, var(--slot-darkest) 100%);
  color: var(--muted-on-ink);
  overflow: hidden;
}
.media-slot__glyph {
  width: clamp(36px, 6vw, 56px);
  height: auto;
  color: var(--gold-text);
  opacity: 0.8;
}
.media-slot__label {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-on-ink);
  text-align: center;
  padding-inline: 1rem;
}
.media-slot__date {
  display: block;
  margin-top: 0.25rem;
  color: var(--gold-text);
  font-size: 0.7rem;
  letter-spacing: 0.16em;
}
/* feine Gold-Hairline innen (premium-Anmutung) */
.media-slot::after {
  content: "";
  position: absolute;
  inset: 10px;
  border: 1px solid rgba(143, 182, 218, 0.20);
  border-radius: 4px;
  pointer-events: none;
}


/* ==========================================================================
   18 · RESERVIEREN / BESTELLEN — Embeds & Hairline-Layout
   ========================================================================== */

/* Hairline-Split-Layout (NICHT Doppel-Card) */
.split {
  display: grid;
  gap: clamp(2rem, 5vw, 4rem);
  align-items: start;
}
@media (min-width: 768px) {
  .split--2 { grid-template-columns: 1.15fr 0.85fr; }
}
.split__col + .split__col {
  position: relative;
}
/* Hairline-Trenner zwischen Spalten (Desktop) */
@media (min-width: 768px) {
  .split--2.split--divided .split__col:first-child { padding-right: clamp(2rem, 4vw, 3.5rem); }
  .split--2.split--divided .split__col:last-child {
    padding-left: clamp(2rem, 4vw, 3.5rem);
    border-left: 1px solid var(--hairline-cream);
  }
  .section--ink .split--2.split--divided .split__col:last-child {
    border-left-color: var(--hairline-ink);
  }
}

/* Embed-Mount (resmio / GloriaFood) — lazy via IO, Skeleton-Shimmer */
.embed-mount {
  position: relative;
  min-height: 420px;
  border-radius: var(--radius-md);
  border: 1px solid var(--hairline-cream);
  overflow: hidden;
  background: color-mix(in srgb, var(--cream) 96%, var(--ink));
}
.section--ink .embed-mount {
  border-color: var(--hairline-ink);
  background: var(--embed-dark);
}
/* Skeleton-Shimmer bis JS lädt */
.embed-mount:not(.is-loaded)::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    100deg,
    transparent 20%,
    color-mix(in srgb, var(--gold) 8%, transparent) 50%,
    transparent 80%
  );
  background-size: 200% 100%;
  animation: shimmer 1.6s linear infinite;
}
.embed-mount:not(.is-loaded)::after {
  content: "Wird geladen …";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted-on-cream);
}
.section--ink .embed-mount:not(.is-loaded)::after { color: var(--muted-on-ink); }
.embed-mount.is-loaded::before,
.embed-mount.is-loaded::after { display: none; content: none; animation: none; }
@keyframes shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* tel-Fallback-Block (immer sichtbar über jedem Embed) */
.tel-fallback {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-sm) var(--space-md);
  padding: var(--space-md) 0;
  margin-bottom: var(--space-lg);
  border-top: 1px solid var(--hairline-cream);
  border-bottom: 1px solid var(--hairline-cream);
}
.section--ink .tel-fallback {
  border-color: var(--hairline-ink);
}
.tel-fallback__text {
  font-family: var(--font-serif);
  font-size: var(--fs-body);
}
.tel-fallback__num {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 1.15rem;
  letter-spacing: 0.01em;
  color: var(--bordeaux);
  transition: color var(--dur-fast) var(--ease-out);
}
.section--ink .tel-fallback__num { color: var(--gold-text); }
/* Icon folgt der Link-Farbe → klarere CTA-Affordance bei Hover */
.tel-fallback__num svg { transition: color var(--dur-fast) var(--ease-out); }
.tel-fallback__num:hover svg { color: var(--bordeaux); }
.section--ink .tel-fallback__num:hover svg { color: var(--gold-text); }
.tel-fallback__num:hover { text-decoration: underline; text-underline-offset: 3px; }


/* ==========================================================================
   19 · MAP-PLATZHALTER (statisches SVG + Maps-Links, KEIN iframe)
   ========================================================================== */

.map {
  position: relative;
  border-radius: var(--radius-md);
  overflow: hidden;
  border: 1px solid var(--hairline-cream);
  background: var(--ink);
  aspect-ratio: 16 / 9;
}
.section--ink .map { border-color: var(--hairline-ink); }
.map svg { width: 100%; height: 100%; display: block; }
.map__pin { color: var(--gold-text); }
.map__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-sm);
  margin-top: var(--space-md);
}


/* ==========================================================================
   20 · NAP-BLOCK & LESE-SEKTIONEN (Impressum / Datenschutz)
   ========================================================================== */

/* NAP (Name/Adresse/Telefon — pixelgleich überall) */
.nap {
  display: grid;
  gap: var(--space-md);
}
.nap__group {}
.nap__label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-eyebrow);
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--gold-text);
  margin-bottom: 0.4rem;
}
.section--cream .nap__label { color: var(--blue-deep); }
.nap__value {
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.5;
  font-style: normal;
}
.nap__value a { transition: color var(--dur-fast) var(--ease-out); }
.nap__value a:hover { color: var(--bordeaux); }
.section--ink .nap__value a:hover { color: var(--gold-text); }

/* Brotkrümel-Navigation (Lese-Seiten) */
.breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  max-width: var(--container-narrow);
  margin: 0 auto var(--space-lg);
  font-family: var(--font-ui);
  font-size: var(--fs-meta);
  letter-spacing: 0.02em;
}
.section--cream .breadcrumb { color: var(--muted-on-cream); }
.breadcrumb a {
  color: var(--blue);
  transition: color var(--dur-fast) var(--ease-out);
}
.breadcrumb a:hover { color: var(--bordeaux); }
.breadcrumb [aria-current="page"] { color: var(--espresso); }
.breadcrumb span[aria-hidden="true"] { color: var(--gold-text); }

/* Lese-Sektion (Impressum/Datenschutz) — schmal, Lora-Body */
.legal {
  max-width: var(--container-narrow);
  margin-inline: auto;
}
.legal h1 {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  margin-bottom: var(--space-lg);
}
.legal h2 {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: var(--fs-h3);
  line-height: 1.3;
  margin-top: var(--space-xl);
  margin-bottom: var(--space-sm);
}
.legal p,
.legal li {
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.7;
}
.legal p + p { margin-top: 1em; }
.legal ul {
  list-style: disc;
  padding-left: 1.4rem;
  margin-top: 0.6rem;
}
.legal li { margin-top: 0.3rem; }
.legal a {
  border-bottom: 1px solid var(--bordeaux);
  transition: color var(--dur-fast) var(--ease-out);
}
.legal a:hover { color: var(--bordeaux); }
.legal address { font-style: normal; }

/* Hervorgehobener Hinweis (z.B. § 19 UStG) */
.callout {
  margin-top: var(--space-lg);
  padding: var(--space-md) var(--space-lg);
  border: 1px solid var(--hairline-blue);
  background: color-mix(in srgb, var(--gold) 7%, transparent);
  font-family: var(--font-serif);
  font-size: var(--fs-body);
}
.section--ink .callout {
  border-color: var(--hairline-ink);
  background: color-mix(in srgb, var(--gold) 12%, transparent);
}

/* Inline-Code / Dateiname-Literale in Lese-Sektionen */
.legal code,
.callout code {
  font-family: Menlo, "Courier New", monospace;
  font-size: 0.92em;
  background: color-mix(in srgb, var(--gold) 8%, transparent);
  padding: 0.12em 0.38em;
  border-radius: var(--radius-sm);
  color: var(--blue-deep);
}


/* ==========================================================================
   21 · FOOTER
   ========================================================================== */

.site-footer {
  background: var(--ink);
  color: var(--text-on-ink);
  border-top: 1px solid var(--hairline-ink);
  padding-top: var(--section-pad);
}
.site-footer__inner {
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--container-pad);
  display: grid;
  gap: var(--space-xl);
  grid-template-columns: 1fr;
}

.site-footer__brand .wordmark { margin-bottom: var(--space-md); }
.site-footer__tagline {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--muted-on-ink);
  max-width: 38ch;
}

.site-footer__label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-eyebrow);
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--gold-text);
  margin-bottom: var(--space-sm);
}

.site-footer__nap { font-style: normal; }
.site-footer__nap p { font-family: var(--font-serif); line-height: 1.5; }
.site-footer__nap p + .site-footer__label { margin-top: var(--space-md); }
.site-footer__nap a { transition: color var(--dur-fast) var(--ease-out); }
.site-footer__nap a:hover { color: var(--gold-text); }

/* Footer-Öffnungszeiten (kompakte hours-list) */
.hours-list--footer > div {
  grid-template-columns: 2.5rem 1fr;
  padding-block: 0.35rem;
  border-bottom: 1px solid var(--hairline-ink);
  font-family: var(--font-ui);
  font-size: var(--fs-meta);
}
.hours-list--footer dt { color: var(--muted-on-ink); font-weight: 500; }
.hours-list--footer dd { font-variant-numeric: tabular-nums; }
.hours-list--footer .is-today dt,
.hours-list--footer .is-today dd { color: var(--gold-text); }
.hours-list--footer .is-today { padding-left: 0.9rem; }
.hours-list--footer .is-today::before {
  width: 6px; height: 6px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--gold) 20%, transparent);
}
.hours-list--footer .is-closed dt,
.hours-list--footer .is-closed dd { color: var(--muted-on-ink); font-style: italic; }

.site-footer__nav ul { display: grid; gap: 0.5rem; }
.site-footer__nav a {
  font-family: var(--font-ui);
  font-size: var(--fs-ui);
  color: var(--text-on-ink);
  transition: color var(--dur-fast) var(--ease-out);
}
.site-footer__nav a:hover { color: var(--gold-text); }

.site-footer__ig {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  font-family: var(--font-ui);
  font-size: var(--fs-ui);
  color: var(--text-on-ink);
  transition: color var(--dur-fast) var(--ease-out);
}
.site-footer__ig:hover { color: var(--gold-text); }

/* Footer-Bar (Copy / Legal / Tax) */
.site-footer__bar {
  max-width: var(--container);
  margin-inline: auto;
  margin-top: var(--section-pad);
  padding: var(--space-lg) var(--container-pad);
  border-top: 1px solid var(--hairline-ink);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm) var(--space-lg);
}
.site-footer__bar p {
  font-family: var(--font-ui);
  font-size: var(--fs-meta);
  color: var(--muted-on-ink);
}
.site-footer__legal { display: inline-flex; align-items: center; gap: 0.5rem; }
.site-footer__legal a { transition: color var(--dur-fast) var(--ease-out); }
.site-footer__legal a:hover { color: var(--gold-text); }
.site-footer__tax { flex-basis: 100%; }


/* ==========================================================================
   22 · REVEAL-ANIMATIONEN (IntersectionObserver setzt .is-in)
   WICHTIG: Inhalt startet SICHTBAR — Reveal nur als Enhancement.
   Kein opacity:0-Blank-Render (Headless/PDF-konform).
   ========================================================================== */

/* Default sichtbar; Reveal-Enhancement nur wenn JS .reveal-ready am <html> setzt.
   Markup: [data-reveal] auf jedem Element; optional [data-reveal-group] als
   Stagger-Container (JS setzt transition-delay per Kind-Index inline). */
.reveal-ready [data-reveal] {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity var(--dur-slow) var(--ease-out),
              transform var(--dur-slow) var(--ease-out);
  will-change: transform, opacity;
}
.reveal-ready [data-reveal].is-in {
  opacity: 1;
  transform: translateY(0);
  will-change: auto;
}


/* ==========================================================================
   23 · RESPONSIVE (mobile-first; Breakpoints 768 / 1024 / 1440)
   ========================================================================== */

/* --- < 1024px: Mobile-/Tablet-Navigation aktiv --- */
@media (max-width: 1023.98px) {
  .site-nav { display: none; }
  .site-header__actions .site-header__order { display: none; }
  .nav-toggle { display: inline-flex; }

  /* Galerie → 1-Spalte-Stack, gleiche Reihenfolge */
  .gallery { grid-template-columns: 1fr; }
  .gallery__item {
    grid-column: 1 / -1 !important;
    aspect-ratio: 4 / 3 !important;
  }
}

/* --- ≥ 768px: Tablet-Aufweitungen --- */
@media (min-width: 768px) {
  .hours-block { grid-template-columns: 1fr; }

  .site-footer__inner {
    grid-template-columns: 1.4fr 1fr 1fr;
    grid-template-areas:
      "brand nap  hours"
      "brand nav  social";
    column-gap: var(--space-2xl);
    row-gap: var(--space-xl);
  }
  .site-footer__brand  { grid-area: brand; }
  .site-footer__nap    { grid-area: nap; }
  .site-footer__hours  { grid-area: hours; }
  .site-footer__nav    { grid-area: nav; }
  .site-footer__social { grid-area: social; }
}

/* --- ≥ 1024px: Desktop-Nav, Hours neben NAP --- */
@media (min-width: 1024px) {
  .nav-toggle { display: none; }
  .site-nav { display: block; }

  .hours-block { grid-template-columns: 0.9fr 1.1fr; }
}

/* --- ≥ 1440px: großzügigere Lese-Achse --- */
@media (min-width: 1440px) {
  :root { --header-h: 84px; }
}

/* --- Sehr schmal (375px) — Pill & Buttons kompakter --- */
@media (max-width: 420px) {
  .reserve-pill { left: 0.75rem; right: 0.75rem; justify-content: space-between; }
  .reserve-pill__label { font-size: 0.875rem; }
  .btn { padding: 0.8rem 1.3rem; }
  .menu-item { column-gap: var(--space-md); }
  .site-footer__bar { flex-direction: column; align-items: flex-start; }
}


/* ==========================================================================
   24 · prefers-reduced-motion — alles instant / nur kurze opacity
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }

  /* Reveal: sofort sichtbar, kein translate */
  .reveal-ready [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }

  /* Sticky-Pill sofort sichtbar (kein Slide) */
  .reserve-pill {
    transition: opacity 0.12s linear !important;
    transform: none !important;
  }
  .reserve-pill.is-visible { transform: none !important; }

  /* Speisekarte-Push deaktiviert — nur Farbwechsel bleibt */

  /* Galerie kein Scale */
  .gallery__item:hover .media-slot,
  .gallery__item:hover img { transform: none !important; }

  /* Scroll-Cue Puls aus */
  .hero__cue-line { animation: none !important; opacity: 0.7; }

  /* Mobile-Nav-Links ohne Stagger-Transform */
  .mobile-nav.is-open .mobile-nav__list a,
  .mobile-nav.is-open .mobile-nav__tel {
    transform: none !important;
    transition-delay: 0s !important;
  }
}


/* ==========================================================================
   25 · PRINT
   ========================================================================== */

@media print {
  .site-header,
  .mobile-nav,
  .nav-toggle,
  .reserve-pill,
  .hero__cue,
  .embed-mount { display: none !important; }

  body {
    background: var(--print-bg);
    color: var(--print-text);
  }
  .section--ink,
  .section--cream,
  .hours,
  .heritage {
    background: var(--print-bg) !important;
    color: var(--print-text) !important;
  }
  .reveal-ready [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
  }
  a { color: var(--print-text); text-decoration: underline; }
}


/* ==========================================================================
   26 · INDEX-KOMPONENTEN — Trust-Zeile & Highlights (Signature-Karten)
   Erben Tokens aus 01. Genutzt auf index.html (Trust unter Hero, Highlights).
   ========================================================================== */

/* --- Trust-Zeile (kompakte 4-Zellen-Leiste auf Ink, unter dem Hero) --- */
.trust { padding-block: clamp(40px, 5vw, 64px); }
.trust__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg) var(--space-2xl);
}
.trust__cell {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  position: relative;
}
.trust__label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-eyebrow);
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--gold-text);
}
.trust__value {
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.4;
  color: var(--text-on-ink);
}
.trust__value a { transition: color var(--dur-fast) var(--ease-out); }
.trust__value a:hover { color: var(--gold-text); }

/* "Heute geöffnet"-Status — Punkt erbt Farbe aus JS-Status-Klasse */
.trust__dot {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
}
.trust__dot::before {
  content: "";
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--grey);
  flex: 0 0 auto;
  transition: background-color var(--dur-fast) var(--ease-out),
              box-shadow var(--dur-fast) var(--ease-out);
}
[data-hours].is-open-now .trust__dot::before,
.trust__dot.is-open-now::before {
  background: #4E7A50; /* GRUEN = geoeffnet (Hassan-Memo 20.07.) */
  box-shadow: 0 0 0 4px color-mix(in srgb, #4E7A50 22%, transparent);
}
[data-hours].is-closed-now .trust__dot::before,
.trust__dot.is-closed-now::before {
  background: #B8443C; /* ROT = geschlossen */
  box-shadow: 0 0 0 4px color-mix(in srgb, #B8443C 18%, transparent);
}

@media (min-width: 600px) {
  .trust__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .trust__grid {
    grid-template-columns: repeat(4, 1fr);
    gap: var(--space-lg);
  }
}

/* --- Highlights — Signature-Karten (3-spaltig, editorial, KEIN Card-Lift-Klischee) --- */
.highlight-grid {
  margin-top: var(--space-xl);
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(var(--space-lg), 4vw, var(--space-2xl));
}
.highlight-card { display: flex; flex-direction: column; }
.highlight-card__media {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius-sm);
  aspect-ratio: 4 / 3;
  isolation: isolate;
}
.highlight-card__media .media-slot,
.highlight-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--dur-slow) var(--ease-soft);
}
.highlight-card:hover .highlight-card__media img,
.highlight-card:hover .highlight-card__media .media-slot { transform: scale(1.03); }
/* Gold-Hairline-Frame bei Hover (Gold-Faden) */
.highlight-card__media::after {
  content: "";
  position: absolute;
  inset: 8px;
  border: 1px solid var(--gold);
  border-radius: calc(var(--radius-sm) - 4px);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur) var(--ease-out);
  z-index: 2;
}
.highlight-card:hover .highlight-card__media::after { opacity: 1; }

.highlight-card__body { padding-top: var(--space-md); }
.highlight-card__title {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  line-height: 1;
}
.highlight-card__text {
  margin-top: var(--space-sm);
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.6;
  color: var(--muted-on-cream);
  max-width: 38ch;
}
.section--ink .highlight-card__text { color: var(--muted-on-ink); }

@media (min-width: 768px) {
  .highlight-grid { grid-template-columns: repeat(3, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  .highlight-card:hover .highlight-card__media img,
  .highlight-card:hover .highlight-card__media .media-slot { transform: none !important; }
}


/* ==========================================================================
   25 · EDITORIAL-KOMPONENTEN (AP2 — baut auf AP1-Lock auf)
   Drop-Cap · Hairline-Divider · Vietri-Ornament · Hover-Dish-Preview ·
   asymmetrisches Editorial-Raster · ruhige Espresso-Outline-CTA.
   Alle token-basiert, keine Hex-Hardcodes, reduced-motion-sicher.
   ========================================================================== */

/* --- 25.1 Drop-Cap (Story-Abschnitt: erste Fraunces-Versalie) ----------- */
.dropcap::first-letter {
  float: left;
  font-family: var(--font-display);
  font-weight: 600;
  /* ~4 Zeilen hoch: line-height des Bodys (1.6) × 4 ≈ 6.4 → optisch via Größe + LH 0.82 */
  font-size: 4em;
  line-height: 0.82;
  padding-right: 0.08em;
  padding-top: 0.04em;
  margin-right: 0.04em;
  color: var(--blue-deep);
  /* leichte editoriale Charakter-Note der Versalie */
  font-feature-settings: "case" 1;
  -webkit-font-smoothing: antialiased;
}
/* Auf dunklem Espresso-Grund: hellerer Vietri-Ton */
.section--ink .dropcap::first-letter { color: var(--blue-light); }
/* Drop-Cap reduziert auf Schmal-Viewports (verhindert Reflow-Bruch) */
@media (max-width: 480px) {
  .dropcap::first-letter { font-size: 3.2em; line-height: 0.86; }
}


/* --- 25.2 Hairline-Divider-System (1px statt Card-Schatten) ------------- */
.rule-hairline {
  border: 0;
  height: 1px;
  width: 100%;
  margin: 0;
  background: var(--hairline-cream);
}
/* Auf dunklem Espresso/Ink-Grund */
.rule-hairline.rule--ink,
.section--ink .rule-hairline { background: var(--hairline-ink); }
/* Vietri-Blau-Akzentlinie (Signatur) */
.rule-hairline.rule--blue { background: var(--hairline-blue); }
/* Kurze, zentrierte Akzent-Hairline (z. B. unter Eyebrow/Section-Head) */
.rule-hairline.rule--short {
  width: clamp(48px, 8vw, 88px);
  margin-inline: auto;
}


/* --- 25.3 Vietri-Ornament (stroke-only, dezent, kleine Opacity) --------
   Nutzt das SVG als Mask → exakte Einfärbung über Tokens, kein <img>-Tint-Hack.
   Default: dezenter Section-Divider, horizontal zentriert.                 */
.ornament {
  --ornament-size: clamp(40px, 6vw, 72px);
  --ornament-color: var(--blue);
  --ornament-opacity: 0.22;
  display: block;
  width: var(--ornament-size);
  height: var(--ornament-size);
  margin-inline: auto;
  background-color: var(--ornament-color);
  opacity: var(--ornament-opacity);
  -webkit-mask: url("../assets/img/vietri-ornament.svg") center / contain no-repeat;
          mask: url("../assets/img/vietri-ornament.svg") center / contain no-repeat;
  pointer-events: none;
}
/* Auf dunklem Grund: hellerer Vietri-Ton, etwas präsenter */
.section--ink .ornament { --ornament-color: var(--blue-light); --ornament-opacity: 0.28; }

/* Als Section-Divider: mit vertikalem Rhythmus + flankierenden Hairlines */
.ornament--divider {
  --ornament-size: 13px;
  --ornament-opacity: 1;
  width: 13px;
  height: 13px;
  margin-block: var(--space-xl);
  position: relative;
  /* Outline-Raute (il-Tartufo-Look) statt Vietri-Kachel */
  -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M12%202L22%2012L12%2022L2%2012Z'%20fill='none'%20stroke='black'%20stroke-width='2.6'/%3E%3C/svg%3E") center/contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M12%202L22%2012L12%2022L2%2012Z'%20fill='none'%20stroke='black'%20stroke-width='2.6'/%3E%3C/svg%3E") center/contain no-repeat;
}
.ornament--divider::before,
.ornament--divider::after {
  content: "";
  position: absolute;
  top: 50%;
  width: clamp(40px, 14vw, 160px);
  height: 1px;
  background: var(--hairline-blue);
}
.ornament--divider::before { right: calc(100% + var(--space-md)); }
.ornament--divider::after  { left:  calc(100% + var(--space-md)); }

/* Als Eck-Akzent (Karten/Editorial-Sektion): absolut positioniert, sehr leise */
.ornament--corner {
  --ornament-size: clamp(72px, 10vw, 132px);
  --ornament-opacity: 0.10;
  position: absolute;
  top: var(--space-md);
  right: var(--space-md);
  margin: 0;
  z-index: 0;
}


/* --- 25.4 Hover-Dish-Preview (Thumbnail erscheint on hover/focus) -------
   WICHTIG: kein opacity:0-Default ohne Gate. Hidden-State NUR wenn Motion
   erlaubt ist (no-preference) — bei reduced-motion bleibt das Thumbnail
   statisch sichtbar/zugänglich.                                            */
.menu-item--with-image.menu-item--preview {
  /* erbt das Foto-Grid, aber Thumb-Spalte reserviert ihren Platz immer */
  grid-template-columns: clamp(76px, 9vw, 104px) 1fr auto;
}
.menu-item__thumb {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: var(--blue-soft);
}
.menu-item__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* Default (inkl. reduced-motion / kein Media-Support): voll sichtbar, ruhig */
@media (prefers-reduced-motion: no-preference) {
  .menu-item__thumb {
    opacity: 0;
    transform: translateX(-6px) scale(0.96);
    transition: opacity var(--dur) var(--ease-out),
                transform var(--dur) var(--ease-out);
    will-change: opacity, transform;
  }
  /* Erscheint bei Hover des Eintrags UND bei Tastatur-Fokus (focus-within) */
  .menu-item--preview:hover .menu-item__thumb,
  .menu-item--preview:focus-within .menu-item__thumb {
    opacity: 1;
    transform: translateX(0) scale(1);
  }
}
/* Touch/Mobil (kein Hover): Foto dauerhaft sichtbar — sonst bleibt die reservierte
   Thumb-Spalte als leere Lücke stehen (Verify-Defekt #1). Sanfte Reveal-Transition. */
@media (hover: none) {
  .menu-item__thumb {
    opacity: 1 !important;
    transform: none !important;
    transition: transform var(--dur-fast) var(--ease-out) !important;
  }
}


/* --- 25.5 Editorial-Raster (12-Spalten asymmetrisch, gespiegelt) -------
   Text 2/6 · Bild 7/12 — viel Creme-Weißraum, mobil gestapelt.            */
.editorial-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  align-items: center;
}
.editorial-grid__text,
.editorial-grid__media { min-width: 0; }
.editorial-grid__media img,
.editorial-grid__media .media-slot {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
@media (min-width: 880px) {
  .editorial-grid {
    grid-template-columns: repeat(12, 1fr);
    column-gap: var(--space-xl);
    row-gap: 0;
  }
  /* Standard: Text links (Spalten 2–6), Bild rechts (7–12) */
  .editorial-grid__text  { grid-column: 2 / 7; }
  .editorial-grid__media { grid-column: 7 / 13; }
  /* Gespiegelt: Bild links (1–6), Text rechts (8–12) */
  .editorial-grid--mirror .editorial-grid__media { grid-column: 1 / 7; }
  .editorial-grid--mirror .editorial-grid__text  { grid-column: 8 / 12; }
}


/* --- 25.6 Ruhige CTA-Variante (Espresso-Outline → Blau-Fill on hover) ---
   Ergänzt die bestehenden .btn-Varianten (keine Dublette).                */
.btn--quiet {
  background: transparent;
  border-color: var(--espresso);
  color: var(--espresso);
}
.btn--quiet:hover {
  background: var(--blue);
  border-color: var(--blue);
  color: var(--creme);
  transform: translateY(-2px);
}
.btn--quiet:focus-visible {
  outline: 2px solid var(--blue-deep);
  outline-offset: 2px;
}
/* Auf dunklem Espresso/Ink-Grund: heller Vietri-Outline → Blau-Fill */
.section--ink .btn--quiet {
  border-color: var(--blue-light);
  color: var(--blue-light);
}
.section--ink .btn--quiet:hover {
  background: var(--blue-light);
  border-color: var(--blue-light);
  color: var(--espresso);
}


/* --- 25.7 Reduced-Motion-Guard für AP2-Komponenten --------------------- */
@media (prefers-reduced-motion: reduce) {
  /* Thumb bleibt sichtbar (Hidden-State ist via no-preference gegatet,
     greift hier also gar nicht — diese Regel macht es explizit robust). */
  .menu-item__thumb { opacity: 1 !important; transform: none !important; }
  .btn--quiet:hover { transform: none !important; }
}


/* ==========================================================================
   26 · FOOTER-NEWSLETTER + FORMULAR-HELFER (Kunden-Mail-Capture)
   ========================================================================== */
.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}
.news-form__hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.site-footer__news{max-width:32ch}
.site-footer__news-lead{font-family:var(--font-serif);font-size:var(--fs-meta);color:var(--muted-on-ink);margin:.4rem 0 1rem;line-height:1.5}
.news-form .field{margin-bottom:.7rem}
.news-form input[type=email]{width:100%;font-family:var(--font-ui);font-size:var(--fs-ui);padding:.7rem .85rem;color:var(--text-on-ink);background:color-mix(in srgb, var(--creme) 12%, transparent);border:1.5px solid var(--blue-light);border-radius:var(--radius-sm);transition:border-color var(--dur-fast) var(--ease-out)}
.news-form input[type=email]::placeholder{color:var(--muted-on-ink)}
.news-form input[type=email]:hover{border-color:color-mix(in srgb, var(--blue-light) 80%, white)}
.news-form input[type=email]:focus,
.news-form input[type=email]:focus-visible{outline:2px solid var(--blue-light);outline-offset:2px;border-color:var(--blue-light)}
.news-form .field--check label{display:flex;gap:.5rem;align-items:flex-start;font-family:var(--font-ui);font-size:var(--fs-meta);line-height:1.45;color:var(--muted-on-ink);cursor:pointer}
.news-form .field--check a{color:var(--blue-light)}
.news-form .field--check input{margin-top:.2rem;accent-color:var(--blue);flex:0 0 auto}
.news-form .form-status{margin-top:.6rem;font-family:var(--font-ui);font-size:var(--fs-meta);color:var(--text-on-ink)}
.news-form .form-status[data-state=error]{color:var(--error-on-ink)}
.news-form .form-status[data-state=ok]{color:var(--blue-light)}


/* ==========================================================================
   27 · RESERVIERUNGS-FORMULAR (selbstgebaut, kein resmio) + Bestell-CTA
   Editorial-Form auf Creme: Lora-Labels, ruhige Vietri-Akzente, AA-Kontraste.
   Felder, Fehler-States, Status-Region, Honeypot, Multi-Spalten-Rows.
   ========================================================================== */

/* --- 27.1 Feld-Grundlayout (Top-Level, von reservieren.html genutzt) ----- */
.res-form .field {
  display: grid;
  gap: var(--space-3xs);
  margin-bottom: var(--space-md);
}
.res-form .field > label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-ui);
  color: var(--text-on-cream);
  letter-spacing: 0.01em;
}
.section--ink .res-form .field > label { color: var(--text-on-ink); }
.res-form .field > label .req { color: var(--blue-deep); margin-left: 0.2rem; }
.res-form .field__opt {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  color: var(--muted-on-cream);
  letter-spacing: 0.02em;
}
.section--ink .res-form .field__opt { color: var(--muted-on-ink); }

/* Multi-Feld-Reihe (Telefon/E-Mail · Datum/Uhrzeit/Personen) */
.res-form .res-form__row,
.res-form .field--row {
  display: grid;
  gap: var(--space-md);
  margin-bottom: var(--space-md);
}
.res-form .res-form__row .field { margin-bottom: 0; }
@media (min-width: 600px) {
  .res-form .res-form__row.field--row { grid-template-columns: 1fr 1fr; }
  /* Datum/Uhrzeit/Personen: drei Spalten ab Tablet */
  .res-form .res-form__row.field--row:has(.field:nth-child(3)) {
    grid-template-columns: 1fr 1fr 0.9fr;
  }
}

/* --- 27.2 Eingabe-Felder ------------------------------------------------- */
.res-form input[type="text"],
.res-form input[type="tel"],
.res-form input[type="email"],
.res-form input[type="date"],
.res-form input[type="time"],
.res-form select,
.res-form textarea {
  width: 100%;
  font-family: var(--font-serif);
  font-size: var(--fs-ui);
  line-height: 1.4;
  padding: 0.85rem 1rem;
  color: var(--text-on-cream);
  background: #FCF9F2;                /* warmes Papier statt Reinweiß */
  border: 1px solid rgba(30, 30, 31, 0.25);
  border-radius: 2px;
  color-scheme: light;
  transition: border-color var(--dur-fast) var(--ease-out),
              box-shadow var(--dur-fast) var(--ease-out);
  -webkit-appearance: none;
  appearance: none;
}
.res-form textarea { resize: vertical; min-height: 5.5rem; }
.res-form select {
  background-image:
    linear-gradient(45deg, transparent 50%, var(--blue) 50%),
    linear-gradient(135deg, var(--blue) 50%, transparent 50%);
  background-position:
    calc(100% - 1.15rem) 1.15rem,
    calc(100% - 0.8rem) 1.15rem;
  background-size: 0.35rem 0.35rem, 0.35rem 0.35rem;
  background-repeat: no-repeat;
  padding-right: 2.4rem;
}
.res-form input::placeholder,
.res-form textarea::placeholder { color: var(--muted-on-cream); }

.res-form input:hover,
.res-form select:hover,
.res-form textarea:hover { border-color: var(--blue); }
.res-form input:focus,
.res-form select:focus,
.res-form textarea:focus,
.res-form input:focus-visible,
.res-form select:focus-visible,
.res-form textarea:focus-visible {
  outline: none;
  border-color: var(--blue-deep);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 28%, transparent);
}
/* Forced-Colors / Windows-High-Contrast: box-shadow-Ring wird dort entfernt →
   sichtbaren Outline wiederherstellen (WCAG 2.4.7). Kein Effekt im Normalmodus. */
@media (forced-colors: active) {
  .res-form input:focus,
  .res-form select:focus,
  .res-form textarea:focus,
  .res-form input:focus-visible,
  .res-form select:focus-visible,
  .res-form textarea:focus-visible {
    outline: 2px solid Highlight;
    outline-offset: 2px;
  }
}

/* Dunkler Grund (falls Form mal auf Ink steht) */
.section--ink .res-form input[type="text"],
.section--ink .res-form input[type="tel"],
.section--ink .res-form input[type="email"],
.section--ink .res-form input[type="date"],
.section--ink .res-form input[type="time"],
.section--ink .res-form select,
.section--ink .res-form textarea {
  color: var(--text-on-ink);
  background: color-mix(in srgb, var(--creme) 8%, transparent);
  border-color: var(--blue-light);
}

/* --- 27.3 Fehler-State (forms.js setzt aria-invalid + .field-error) ------ */
.res-form [aria-invalid="true"] {
  border-color: var(--error-on-cream);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--error-on-cream) 22%, transparent);
}
.section--ink .res-form [aria-invalid="true"] {
  border-color: var(--error-on-ink);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--error-on-ink) 24%, transparent);
}
.field-error {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  color: var(--error-on-cream);
  margin-top: var(--space-3xs);
}
.section--ink .field-error { color: var(--error-on-ink); }

/* --- 27.4 Consent-Checkbox (Reservierung) -------------------------------- */
.res-form .form-consent {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.6rem;
  align-items: start;
  margin-bottom: var(--space-md);
}
.res-form .form-consent input[type="checkbox"] {
  margin-top: 0.2rem;
  width: 1.05rem;
  height: 1.05rem;
  accent-color: var(--blue);
  flex: 0 0 auto;
}
.res-form .form-consent label {
  font-family: var(--font-serif);
  font-size: var(--fs-meta);
  line-height: 1.5;
  color: var(--text-on-cream);
  cursor: pointer;
}
.section--ink .res-form .form-consent label { color: var(--text-on-ink); }
.res-form .form-consent a {
  color: var(--blue);
  border-bottom: 1px solid var(--blue);
  transition: color var(--dur-fast) var(--ease-out);
}
.res-form .form-consent a:hover { color: var(--blue-deep); }

/* --- 27.5 Hinweis-Zeile + Submit ----------------------------------------- */
.res-form__hint {
  margin-block: var(--space-xs) var(--space-md);
  color: var(--muted-on-cream);
}
.section--ink .res-form__hint { color: var(--muted-on-ink); }
.res-form .contact-form__hint {
  font-family: var(--font-ui);
  font-size: var(--fs-meta);
  line-height: 1.5;
  color: var(--muted-on-cream);
  margin-top: var(--space-md);
}
.section--ink .res-form .contact-form__hint { color: var(--muted-on-ink); }
.res-form .contact-form__hint .req { color: var(--blue-deep); }
.res-form__submit {
  margin-top: var(--space-sm);
  justify-self: start;
}

/* --- 27.6 Honeypot (display:none — WCAG-fest, SR ignoriert) -------------- */
.res-form__hp {
  position: absolute !important;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}
.res-form__fields { display: grid; }

/* --- 27.7 Globale Status-Region (aria-live; ok/error via data-state) ----- */
.form-status {
  margin-top: var(--space-md);
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-ui);
  line-height: 1.5;
  color: var(--text-on-cream);
}
.section--ink .form-status { color: var(--text-on-ink); }
.form-status[data-state="error"] { color: var(--error-on-cream); }
.section--ink .form-status[data-state="error"] { color: var(--error-on-ink); }
.form-status[data-state="ok"] { color: var(--blue-deep); }
.section--ink .form-status[data-state="ok"] { color: var(--blue-light); }

/* Submit-Button volle Breite auf Schmal-Viewports */
@media (max-width: 480px) {
  .res-form__submit { width: 100%; justify-self: stretch; }
}

/* Reduced-Motion: keine Feld-Transitions */
@media (prefers-reduced-motion: reduce) {
  .res-form input,
  .res-form select,
  .res-form textarea,
  .field-error,
  .form-status,
  .tel-fallback__num svg { transition: none !important; }
}


/* --- 27.8 Bestell-CTA (bestellen.html → Amigos-Link, kein Bestellsystem) - */
.order-direct {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-md);
  margin-top: var(--space-lg);
}
.order-direct__cta {
  align-self: flex-start;
}
.order-direct__note {
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.7;
  color: var(--muted-on-cream);
  max-width: 52ch;
}
.section--ink .order-direct__note { color: var(--muted-on-ink); }
@media (max-width: 480px) {
  .order-direct__cta { align-self: stretch; }
}

/* ==========================================================================
   27 · VIETRI-BORDÜRE (faithful Teller-Motiv) — Band/Divider
   ========================================================================== */
/* Signatur-Bordüre (Gold auf Espresso) — rationiert: max. 1x pro Seite, vor dem Footer */
.vietri-band{width:100%;height:24px;background:url(../assets/img/vietri-border.svg) repeat-x center / auto 24px}
.vietri-band--slim{height:18px;background-size:auto 18px}
.vietri-band--tall{height:30px;background-size:auto 30px}
@media (max-width:600px){.vietri-band{height:20px;background-size:auto 20px}}

/* Hero-Eck-Siegel — Arabesken-Medaillon (Teller-Mitte) */
.hero{position:relative}
.hero__seal{position:absolute;bottom:clamp(14px,4vw,40px);right:clamp(14px,4vw,46px);
  width:clamp(86px,11vw,150px);aspect-ratio:1;background:var(--text-on-ink);
  -webkit-mask:url(../assets/img/vietri-medallion.svg) no-repeat center/contain;
          mask:url(../assets/img/vietri-medallion.svg) no-repeat center/contain;
  opacity:.5;pointer-events:none;z-index:3}
@media (max-width:600px){.hero__seal{opacity:.38}}
/* Vietri-Band als Sektions-Divider: etwas Luft drumherum */
.vietri-band.is-divider{margin:0}


/* ==========================================================================
   28 · LOGO-INTRO — Wortmarken-Vorhang (Erstbesuch)
   --------------------------------------------------------------------------
   Markup-Vertrag (js/motion.js steuert):
     <div class="intro-overlay" data-intro>
       <div class="intro-overlay__inner">
         <span class="intro-overlay__seal" aria-hidden="true"><svg .../></span>
         <p class="intro-overlay__word">Golfo <em class="intro-overlay__accent">di Napoli</em></p>
       </div>
     </div>
   JS setzt <html class="intro-active"> beim Mount, fügt .is-leaving für den
   Wipe-up und entfernt das Overlay nach 'transitionend'. KEIN externes Bild.
   ========================================================================== */
/* Das Intro-Overlay ist KOMPLETT self-contained in js/intro.js (injiziert
   eigenes <style> inkl. html.intro-active). Die alten .intro-overlay-Regeln
   hier kollidierten mit den JS-Styles (clip-path leakte in .is-leaving und
   ließ den Vorhang ohne Transition springen) — deshalb entfernt. */


/* ==========================================================================
   29 · HERO — EDITORIAL (.hero--editorial)
   --------------------------------------------------------------------------
   Asymmetrisches Raster (Wortmarke links/groß · gerahmter Teller rechts/oval),
   texturierter Creme/Espresso-Grund (CSS-Papierkorn, KEIN Bild). Parallax-Hooks
   sind reine Transform-Klassen — KEIN opacity:0-Default (nur via reveal-ready
   gegated, s. §22), damit ohne JS alles sichtbar bleibt.
   Markup-Vertrag:
     <section class="hero hero--editorial">
       <span class="hero__sigil" aria-hidden="true"><svg medaillon /></span>
       <div class="hero__grid">
         <div class="hero__col hero__col--text" data-parallax="slow">
           <p class="hero__wordmark">Golfo<span class="hero__wordmark-sub">di Napoli</span></p>
           ... eyebrow / lead / cta ...
         </div>
         <figure class="hero__frame" data-parallax="rise"> <img ...> </figure>
       </div>
     </section>
   ========================================================================== */
.hero--editorial {
  min-height: auto;
  display: block;
  isolation: isolate;
  align-items: stretch;
  overflow: clip;
  background: var(--creme);
  color: var(--text-on-cream);
  padding-block: clamp(96px, 13vh, 168px) clamp(72px, 10vh, 128px);
  /* Creme-Papierkorn + warmer Espresso-Hauch oben rechts — rein CSS */
  background-image:
    radial-gradient(130% 100% at 88% 0%, rgba(30, 30, 31, 0.06) 0%, transparent 52%),
    radial-gradient(90% 80% at 6% 100%, rgba(184, 146, 74, 0.06) 0%, transparent 55%),
    repeating-linear-gradient(0deg, rgba(30, 30, 31, 0.018) 0 1px, transparent 1px 3px),
    repeating-linear-gradient(90deg, rgba(30, 30, 31, 0.014) 0 1px, transparent 1px 3px);
}
/* Editorial-Hero neutralisiert die dunkle Basis-Hero-Wash (§10) */
.hero--editorial::after { content: none; }

.hero--editorial .hero__grid {
  width: 100%;
  max-width: var(--container-wide);
  margin-inline: auto;
  padding-inline: var(--container-pad);
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  align-items: center;
  column-gap: clamp(var(--space-lg), 6vw, var(--space-3xl));
  row-gap: var(--space-xl);
}
.hero__col { min-width: 0; }
.hero__col--text {
  /* leichte optische Versetzung nach oben für Asymmetrie */
  align-self: start;
  padding-top: clamp(0px, 2vw, var(--space-lg));
}

/* Wortmarke als Grafik (Fraunces, sehr groß, neg. Tracking) */
.hero__wordmark {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(3rem, 9vw, 8rem);
  line-height: 0.94;
  letter-spacing: -0.025em;
  color: var(--espresso);
  text-wrap: balance;
}
.hero__wordmark-sub {
  display: block;
  font-style: italic;
  font-weight: 300;
  color: var(--blue-deep);             /* Vietri-Blau-deep auf Creme */
  font-size: 0.82em;
  letter-spacing: -0.02em;
  margin-top: 0.04em;
}
.hero--editorial .hero__lead {
  color: var(--muted-on-cream);
  max-width: 42ch;
  margin-top: var(--space-lg);
}
.hero--editorial .eyebrow { color: var(--blue); }
.hero--editorial .eyebrow::before { background: var(--blue); }

/* Gerahmter / ovaler Bild-Rahmen für den Vietri-Teller */
.hero__frame {
  position: relative;
  margin: 0;
  justify-self: center;
  width: min(100%, 540px);
  aspect-ratio: 4 / 5;
  border-radius: 50% / 46%;             /* oval */
  overflow: hidden;
  background: var(--blue-soft);
  border: 1px solid var(--hairline-cream);
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.5) inset,
    0 30px 60px -38px rgba(30, 30, 31, 0.45);
}
.hero__frame::after {            /* feiner Innen-Doppelrand (Editorial-Passepartout) */
  content: "";
  position: absolute;
  inset: clamp(10px, 1.4vw, 18px);
  border: 1px solid rgba(246, 238, 221, 0.55);
  border-radius: inherit;
  pointer-events: none;
  z-index: 2;
}
.hero__frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* Variante: rechteckiger Rahmen mit weichen Ecken statt Oval */
.hero__frame--rect { aspect-ratio: 3 / 4; border-radius: var(--radius-md); }

/* Vietri-Medaillon als Eck-Siegel des Editorial-Heros (kein Bild, SVG/Maske) */
.hero--editorial .hero__sigil {
  position: absolute;
  top: clamp(16px, 4vw, 48px);
  right: clamp(16px, 5vw, 64px);
  width: clamp(64px, 9vw, 132px);
  aspect-ratio: 1;
  color: var(--blue);
  opacity: 0.5;
  pointer-events: none;
  z-index: 0;
}
.hero--editorial .hero__sigil svg,
.hero--editorial .hero__sigil img { width: 100%; height: 100%; display: block; }

/* Parallax-Hooks — js/motion.js liest [data-parallax] und setzt --py inline.
   Default-Transform 0 → ohne JS keinerlei Versatz/Unsichtbarkeit. */
[data-parallax] {
  --py: 0px;
  transform: translate3d(0, var(--py), 0);
  will-change: transform;
}
@media (prefers-reduced-motion: reduce) {
  [data-parallax] { transform: none !important; }
}

/* Responsive: Editorial-Hero stapelt (Teller über Wortmarke) */
@media (max-width: 860px) {
  .hero--editorial .hero__grid {
    grid-template-columns: 1fr;
    row-gap: var(--space-lg);
  }
  .hero__col--text { order: 2; padding-top: 0; }
  .hero__frame { order: 1; width: min(100%, 420px); }
}
@media (max-width: 480px) {
  .hero__frame { aspect-ratio: 1 / 1; }
}


/* ==========================================================================
   30 · SPEISEKARTE VOLL — Food-Magazin-Zeilen (.menu-list / .menu-row)
   --------------------------------------------------------------------------
   Eigener Namespace neben dem Linien-Listen-System (§12 .menu-item) — beide
   koexistieren. Zeile = [Foto] | [Name+Allergene+Beschreibung] | [Preis].
   Foto optional: ohne .menu-row__media fällt das Grid sauber auf 2 Spalten.
   Editorial-Look: Hairlines statt Card-Schatten, dezenter Hover-Lift.
   Markup-Vertrag:
     <div class="menu-list menu-list--rows">
       <article class="menu-row">
         <div class="menu-row__media"><img src=... alt=...></div>   <!-- optional -->
         <div class="menu-row__body">
           <h3 class="menu-row__name">Margherita <span class="menu-row__allergens">(a, g)</span></h3>
           <p class="menu-row__desc">San-Marzano, Fior di Latte, Basilikum.</p>
         </div>
         <div class="menu-row__price">9,50 €</div>
       </article>
     </div>
   ========================================================================== */
.menu-list--rows {
  margin-top: var(--space-xl);
  display: flex;
  flex-direction: column;
}

.menu-row {
  display: grid;
  /* mit Foto: 3 Spalten. Ohne .menu-row__media greift unten der 2-Spalten-Fallback. */
  grid-template-columns: clamp(96px, 12vw, 160px) minmax(0, 1fr) auto;
  align-items: center;
  column-gap: clamp(var(--space-md), 3vw, var(--space-xl));
  row-gap: var(--space-xs);
  padding-block: clamp(var(--space-md), 2.4vw, var(--space-lg));
  padding-inline: var(--space-xs);
  border-bottom: 1px solid var(--hairline-cream);
  transition: background-color var(--dur) var(--ease-out);
}
.menu-list--rows .menu-row:first-child {
  border-top: 1px solid var(--hairline-cream);
}
.section--ink .menu-row,
.section--ink .menu-list--rows .menu-row:first-child {
  border-color: var(--hairline-ink);
}

/* Zeile OHNE Foto → 2-Spalten-Raster, keine leere Bildspalte */
.menu-row:not(:has(.menu-row__media)) {
  grid-template-columns: minmax(0, 1fr) auto;
}

/* stiller Hover — warmer Gold-Hauch statt Lift (Luxus-Karte, keine App-Liste) */
.menu-row:hover,
.menu-row:focus-within {
  background-color: rgba(184, 146, 74, 0.05);
}
.section--ink .menu-row:hover,
.section--ink .menu-row:focus-within {
  background-color: rgba(212, 184, 150, 0.06);
}

.menu-row__media {
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--blue-soft);
  border: 1px solid var(--hairline-cream);
}
.section--ink .menu-row__media { border-color: var(--hairline-ink); }
.menu-row__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;            /* retina-Crop */
  display: block;
  transition: transform 600ms var(--ease-out);
}
.menu-row:hover .menu-row__media img,
.menu-row:focus-within .menu-row__media img { transform: scale(1.05); }

.menu-row__body { min-width: 0; }
.menu-row__name {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: var(--fs-h3);
  line-height: 1.22;
  color: var(--text-on-cream);
  transition: color var(--dur) var(--ease-out);
}
.section--ink .menu-row__name { color: var(--text-on-ink); }
.menu-row:hover .menu-row__name,
.menu-row:focus-within .menu-row__name { color: var(--blue-deep); }
.section--ink .menu-row:hover .menu-row__name,
.section--ink .menu-row:focus-within .menu-row__name { color: var(--blue-light); }

.menu-row__allergens {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: var(--fs-meta);
  letter-spacing: 0.04em;
  color: var(--muted-on-cream);
  white-space: nowrap;
  text-transform: uppercase;
}
.section--ink .menu-row__allergens { color: var(--muted-on-ink); }

.menu-row__desc {
  margin-top: 0.4rem;
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.6;
  color: var(--muted-on-cream);
  max-width: 60ch;
  text-wrap: pretty;
}
.section--ink .menu-row__desc { color: var(--muted-on-ink); }

.menu-row__price {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.05rem;
  font-variant-numeric: tabular-nums lining-nums;
  color: var(--blue-deep);             /* Gold-Deep = Preis-Akzent, leiser als der Name */
  white-space: nowrap;
  align-self: start;
  padding-top: 0.35em;                 /* optisch auf der Namens-Zeile */
}
.section--ink .menu-row__price { color: var(--blue-light); }

/* Optionale Diät-/Signatur-Marker (Vietri-Punkt vor dem Namen) */
.menu-row__name .is-signature::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-right: 0.4em;
  border-radius: 50%;
  background: var(--blue);
  vertical-align: middle;
}

/* --- Speisekarte-Zeilen responsive: Foto klein oben links --- */
@media (max-width: 640px) {
  .menu-row {
    grid-template-columns: clamp(72px, 22vw, 104px) minmax(0, 1fr);
    grid-template-areas:
      "media body"
      "media price";
    align-items: start;
    column-gap: var(--space-md);
    row-gap: var(--space-2xs);
  }
  .menu-row:not(:has(.menu-row__media)) {
    grid-template-columns: 1fr auto;
    grid-template-areas: "body price";
  }
  .menu-row__media { grid-area: media; aspect-ratio: 1 / 1; }
  .menu-row__body  { grid-area: body; }
  .menu-row__price {
    grid-area: price;
    align-self: end;
    justify-self: start;
    padding-top: var(--space-2xs);
  }
  .menu-row:hover { transform: none; padding-left: 0; }
}
@media (max-width: 380px) {
  .menu-row {
    grid-template-columns: 1fr;
    grid-template-areas:
      "media"
      "body"
      "price";
  }
  .menu-row__media { width: clamp(96px, 40vw, 140px); }
  .menu-row__price { justify-self: start; }
}

/* Reduced-Motion: keine Hover-Transforms in der Voll-Speisekarte */
@media (prefers-reduced-motion: reduce) {
  .menu-row,
  .menu-row__media img,
  .intro-overlay { transition: none !important; }
}

/* ==========================================================================
   31 · SPEISEKARTE — öffenbares Gericht-Detail (Lightbox/Galerie)
   ========================================================================== */
.menu-row.is-openable{cursor:pointer}
/* stilles Foto-Signal: kleiner Gold-Diamant hinter dem Namen (echter Button) */
.menu-row__view{
  display:inline-flex;align-items:center;justify-content:center;
  margin-left:.5em;padding:.15em .3em;
  background:none;border:0;cursor:pointer;
  font-size:.78em;line-height:1;color:var(--blue-deep);opacity:.45;
  transition:opacity var(--dur) var(--ease-out);
  vertical-align:middle;
}
.section--ink .menu-row__view{color:var(--blue-light)}
.menu-row:hover .menu-row__view,
.menu-row__view:focus-visible{opacity:1}
.menu-row.is-openable .menu-row__media{position:relative;overflow:hidden}
.menu-row.is-openable .menu-row__media::after{content:"";position:absolute;inset:0;background:var(--blue-deep);opacity:0;transition:opacity .4s var(--ease-out)}
.menu-row.is-openable:hover .menu-row__media::after{opacity:.12}

/* Modal */
.dish-modal{position:fixed;inset:0;z-index:var(--z-mobile-nav,200);display:flex;align-items:center;justify-content:center;
  padding:clamp(16px,4vw,48px);opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .4s var(--ease-out),visibility 0s linear .4s}
/* visibility schaltet beim Oeffnen SOFORT um, beim Schliessen erst nach dem
   Ausblenden. Mit "visibility .4s" auf beiden Seiten blieb das Panel waehrend
   der Einblendung rechnerisch hidden — und ein hidden-Element nimmt keinen
   Fokus an, weshalb die Fokus-Falle nie griff.
   pointer-events erst beim Oeffnen: waehrend der Ausblendung lag das Panel
   sonst unsichtbar ueber der Seite und schluckte jeden Klick — wer direkt das
   naechste Gericht antippte, traf ins Leere. */
.dish-modal.is-open{opacity:1;visibility:visible;pointer-events:auto;
  transition:opacity .4s var(--ease-out),visibility 0s}
.dish-modal [hidden]{display:none}
/* Der Seiten-Scroll haengt an Lenis; die Klassen sind der Fallback fuer den
   Fall, dass der Motion-Layer nicht laeuft (reduced-motion, kein GSAP). */
html.dish-open,body.dish-open{overflow:hidden}
.dish-modal__scrim{position:absolute;inset:0;background:rgba(30, 30, 31,.74);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.dish-modal__panel{position:relative;z-index:1;width:min(960px,100%);max-height:90vh;overflow:auto;background:var(--creme);
  border-radius:14px;box-shadow:0 4vh 9vh rgba(30, 30, 31,.4);display:grid;grid-template-columns:1.05fr .95fr;
  transform:translateY(14px) scale(.975);transition:transform .45s var(--ease-out)}
.dish-modal.is-open .dish-modal__panel{transform:none}
@media (max-width:760px){.dish-modal__panel{grid-template-columns:1fr;max-height:92vh}}
/* Bild-Seite */
.dish-modal__media{position:relative;background:var(--blue-soft);padding:clamp(16px,2.4vw,26px)}
.dish-modal__stage{position:relative;border-radius:8px;overflow:hidden;background:var(--paper);
  box-shadow:0 1.6vh 4vh rgba(30, 30, 31,.22);aspect-ratio:4/5}
.dish-modal__stage img{width:100%;height:100%;object-fit:cover;display:block;opacity:1;transition:opacity .35s var(--ease-out)}
.dish-modal__frameline{position:absolute;inset:clamp(16px,2.4vw,26px);border:1px solid rgba(246,238,221,.5);border-radius:8px;pointer-events:none;mix-blend-mode:overlay}

/* --- Gericht ohne Foto ---------------------------------------------------
   20 der 73 Positionen haben kein Bild. Statt eines leeren Kastens steht dort
   dasselbe Papierfeld wie auf der Startseite (.pizza-card__media--empty), und
   das Panel wird einspaltig — sonst bliebe die halbe Breite ungenutzt und der
   Text stuende in einer schmalen Spalte neben nichts. */
.dish-modal__soon{position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:var(--space-sm);
  background:linear-gradient(160deg,var(--slot-dark) 0%,var(--slot-darkest) 100%)}
.dish-modal__soon .ornament{--ornament-size:clamp(52px,8vw,84px);--ornament-opacity:.3}
.dish-modal__soon-label{font-family:var(--font-ui);font-size:var(--fs-meta);
  letter-spacing:.16em;text-transform:uppercase;color:var(--blue-deep)}
.dish-modal__media.is-photoless{display:none}
.dish-modal__panel:has(.dish-modal__media.is-photoless){grid-template-columns:1fr;max-width:640px}
/* Ohne :has() bleibt die Bildspalte leer stehen — dann lieber das Papierfeld
   zeigen als eine tote Spalte. */
@supports not selector(:has(*)){
  .dish-modal__media.is-photoless{display:block}
}
/* Text-Seite */
.dish-modal__body{padding:clamp(26px,4vw,52px) clamp(24px,3.4vw,46px);display:flex;flex-direction:column}
.dish-modal__eyebrow{font-family:var(--font-ui);font-size:var(--fs-eyebrow);letter-spacing:.22em;text-transform:uppercase;color:var(--blue-deep);margin-bottom:1rem}
.dish-modal__title{font-family:var(--font-display);font-weight:600;font-size:clamp(1.9rem,3.4vw,2.8rem);line-height:1.05;color:var(--espresso)}
.dish-modal__allergens{font-family:var(--font-ui);font-size:var(--fs-meta);color:var(--muted-on-cream);margin-top:.5rem;letter-spacing:.06em}
/* Die Vietri-Bordüre stand hier als Trenner zwischen Allergenen und Text und
   ist auf Kundenwunsch raus. Sie war zugleich der einzige Abstandhalter —
   ohne diesen margin klebt die Beschreibung am Titel. Die Bordüre selbst
   bleibt, wo sie sonst auf der Seite steht. */
.dish-modal__desc{font-family:var(--font-serif);font-size:1.12rem;line-height:1.7;color:var(--espresso);margin-top:1.9rem}
.dish-modal__price{margin-top:auto;padding-top:1.6rem;font-family:var(--font-display);font-weight:600;font-size:1.9rem;color:var(--blue-deep)}
.dish-modal__close{position:absolute;top:12px;right:14px;z-index:3;width:42px;height:42px;border-radius:50%;border:none;
  background:rgba(30, 30, 31,.55);color:var(--creme);font-size:20px;line-height:1;cursor:pointer;transition:background .25s}
.dish-modal__close:hover{background:var(--espresso)}
@media (prefers-reduced-motion:reduce){.dish-modal,.dish-modal__panel,.dish-modal__stage img{transition:none}}

/* ==========================================================================
   32 · STICKY-SCROLL-GALERIE (3 Spalten, Mitte gepinnt) — "Ein Abend bei…"
   Reiner CSS-sticky-Effekt; Lenis (motion.js) liefert die seidige Bewegung.
   ========================================================================== */
.sticky-gallery-section{padding-bottom:0}
.sticky-gallery{display:grid;grid-template-columns:1fr 1fr 1fr;gap:clamp(8px,1vw,14px);
  align-items:start;max-width:1560px;margin:clamp(28px,4vw,56px) auto 0;
  padding:0 clamp(14px,3vw,40px) clamp(40px,6vw,90px)}
.sticky-gallery__col{display:grid;gap:clamp(8px,1vw,14px)}
.sticky-gallery__col--center{position:sticky;top:0;height:100vh;
  grid-template-rows:repeat(3,1fr);gap:clamp(8px,1vw,14px)}
.sticky-gallery figure{margin:0;overflow:hidden;border-radius:var(--radius-md);
  background:var(--blue-soft);box-shadow:0 1.4vh 3.4vh rgba(0,0,0,.22)}
.sticky-gallery__col:not(.sticky-gallery__col--center) figure{aspect-ratio:4/5}
.sticky-gallery__col--center figure{height:100%}
.sticky-gallery img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .7s var(--ease-out);will-change:transform}
.sticky-gallery figure:hover img{transform:scale(1.045)}

/* Tablet: kein Pinning, ruhiges 2-Spalten-Raster */
@media (max-width:960px){
  .sticky-gallery{grid-template-columns:1fr 1fr}
  .sticky-gallery__col--center{position:static;height:auto;grid-template-rows:none}
  .sticky-gallery__col--center figure{aspect-ratio:4/5;height:auto}
}
/* Mobil: eine Spalte */
@media (max-width:560px){ .sticky-gallery{grid-template-columns:1fr} }
@media (prefers-reduced-motion:reduce){ .sticky-gallery figure:hover img{transform:none} }

/* Horizontalen Überlauf nur dort clippen, wo KEIN sticky läuft (≤960px).
   Auf Desktop bleibt body overflow:visible, damit position:sticky greift. */
@media (max-width:960px){ body{ overflow-x:hidden } }

/* ==========================================================================
   33 · SCROLL-EXPAND VIDEO-HERO (Reel im Rahmen, Neapel-Video dahinter)
   Effekt via GSAP ScrollTrigger (pin+scrub) in js/hero-expand.js — kein Scroll-Hijack.
   Fallback ohne JS/GSAP: 100vh-Hero, Reel mittig sichtbar, Neapel-Video dahinter.
   ========================================================================== */
.hero-x{position:relative;height:100vh;background:var(--espresso)}
html.hx-ready .hero-x{height:220vh}              /* nur mit GSAP: Scroll-Strecke fürs Scrubbing */
.hero-x__pin{position:relative;height:100vh;width:100%;overflow:hidden;
  display:flex;align-items:center;justify-content:center}
/* Neapel-Hintergrundvideo */
.hero-x__bg{position:absolute;inset:0;z-index:0;will-change:opacity}
.hero-x__bg video,.hero-x__bg img{width:100%;height:100%;object-fit:cover;display:block}
.hero-x__bgwash{position:absolute;inset:0;background:linear-gradient(180deg,rgba(14,24,33,.22) 0%,rgba(14,24,33,.12) 42%,rgba(20,22,24,.66) 100%)}
/* Split-Titel */
.hero-x__title{position:absolute;z-index:2;inset:0;margin:0;display:flex;align-items:center;justify-content:center;
  gap:clamp(.4em,3vw,1.4em);pointer-events:none;font-family:var(--font-display);font-weight:600;
  font-size:clamp(2.8rem,8vw,7.5rem);line-height:1;color:var(--creme);
  text-shadow:0 2px 30px rgba(0,0,0,.45)}
.hero-x__word--r{color:var(--blue-light);font-style:italic}
/* Reel-Video — Rahmen, startet klein (GSAP skaliert), 9:16 */
.hero-x__media{position:relative;z-index:3;height:min(82vh,640px);aspect-ratio:9/16;max-width:92vw;
  border-radius:18px;overflow:hidden;box-shadow:0 30px 80px rgba(0,0,0,.45);will-change:transform;
  background:var(--blue-soft)}
.hero-x__media video{width:100%;height:100%;object-fit:cover;display:block}
.hero-x__cue{position:absolute;left:0;right:0;bottom:14px;z-index:4;text-align:center;
  font-family:var(--font-ui);font-size:var(--fs-meta);letter-spacing:.22em;text-transform:uppercase;
  color:rgba(246,238,221,.9);text-shadow:0 1px 8px rgba(0,0,0,.5)}
.hero-x__cue::after{content:"";display:block;width:1px;height:26px;margin:8px auto 0;background:rgba(246,238,221,.7)}
/* Mit GSAP: Reel klein starten (JS übernimmt das Scrubbing ab hier) */
html.hx-ready .hero-x__media{transform:scale(.34)}
@media (max-width:760px){ .hero-x__media{height:min(70vh,520px)} .hero-x__title{font-size:clamp(2rem,9vw,3.4rem)} }
@media (prefers-reduced-motion:reduce){
  html.hx-ready .hero-x{height:100vh}
  html.hx-ready .hero-x__media{transform:none}
}

/* ==========================================================================
   34 · FOOTER (Footer2-Layout: Marke+Tagline links, Link-Spalten rechts, Bar)
   ========================================================================== */
.site-footer--v2{background:var(--ink);color:var(--text-on-ink);border-top:1px solid var(--hairline-cream)}
.footer2__inner{padding-block:clamp(48px,6vw,84px) clamp(20px,2.4vw,30px)}
.footer2__top{display:grid;grid-template-columns:1.25fr 2fr;gap:clamp(32px,5vw,72px)}
@media (max-width:900px){ .footer2__top{grid-template-columns:1fr} }
/* Marke */
.footer2__brand{max-width:40ch}
.footer2__tagline{font-family:var(--font-serif);font-size:1.05rem;line-height:1.6;color:var(--muted-on-ink);margin:1rem 0 1.4rem;max-width:34ch}
.footer2__brand .news-form{margin-top:.4rem;max-width:30ch}
.footer2__social{display:flex;gap:.7rem;margin-top:1.4rem}
.footer2__social a{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;
  border:1px solid var(--hairline-ink);color:var(--text-on-ink);transition:border-color .25s,color .25s,background .25s}
.footer2__social a:hover{border-color:var(--blue-light);color:var(--blue-light);background:rgba(143,182,218,.08)}
/* Spalten */
.footer2__cols{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(20px,2.5vw,36px)}
@media (max-width:680px){ .footer2__cols{grid-template-columns:1fr 1fr} }
@media (max-width:420px){ .footer2__cols{grid-template-columns:1fr} }
.footer2__heading{font-family:var(--font-ui);font-weight:600;font-size:var(--fs-eyebrow);letter-spacing:.18em;
  text-transform:uppercase;color:var(--blue-light);margin-bottom:1rem}
.footer2__col ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.62rem}
.footer2__col a{color:var(--text-on-ink);text-decoration:none;font-family:var(--font-ui);font-size:var(--fs-ui);
  transition:color .2s}
.footer2__col a:hover{color:var(--blue-light)}
.footer2__col li{font-family:var(--font-ui);font-size:var(--fs-ui);color:var(--muted-on-ink);line-height:1.45}
/* Bottom-Bar */
.footer2__bar{display:flex;flex-wrap:wrap;gap:.8rem 1.4rem;justify-content:space-between;align-items:center;
  margin-top:clamp(36px,4vw,56px);padding-top:1.5rem;border-top:1px solid var(--hairline-ink);
  font-family:var(--font-ui);font-size:var(--fs-meta);color:var(--muted-on-ink)}
.footer2__legal{display:flex;gap:.7rem;align-items:center}
.footer2__legal a{color:var(--muted-on-ink);text-decoration:none;transition:color .2s}
.footer2__legal a:hover{color:var(--blue-light)}

/* Reservierungsseite — Formular zuerst, minimal */
.reserve-page__head{margin-bottom:clamp(24px,3.5vw,38px)}
.reserve-page__intro{font-family:var(--font-serif);font-size:1.1rem;line-height:1.6;color:var(--muted-on-cream);margin-top:.9rem;max-width:56ch}
.reserve-page .tel-fallback{margin:0 0 1.4rem}

.reserve-page{padding-top:clamp(34px,4vw,56px)}

/* ============================================================================
   §35 — MOBILE-ERGONOMIE (22.06.2026)
   Nur Telefon-Breite (max-width:600px). Vergroessert Touch-Targets auf >=44px
   (Apple/WCAG-Empfehlung). Aendert NICHTS am Desktop-Layout — alle Regeln
   stehen ausschliesslich in diesem Media-Query.
   ========================================================================== */
@media (max-width: 600px) {
  /* Footer2-Navspalten: 18px-Links -> tappbare 44px-Zeilen */
  .footer2__col ul { gap: .15rem; }
  .footer2__col a {
    display: flex; align-items: center; min-height: 44px; padding-block: 2px;
  }
  /* Footer2-Rechtszeile (Impressum/Datenschutz) tappbar */
  .footer2__bar { gap: .4rem 1.2rem; }
  .footer2__legal { gap: .2rem .8rem; flex-wrap: wrap; }
  .footer2__legal a {
    display: inline-flex; align-items: center; min-height: 40px; padding: 4px 2px;
  }
  /* Newsletter-Feld: volle Breite + bequeme Hoehe */
  .footer2__brand .news-form { max-width: none; }
  .news-form input[type=email] { min-height: 48px; padding: .85rem 1rem; }
  .news-form .field--check label { padding: 6px 0; }
  .news-form .field--check input { width: 20px; height: 20px; }
  /* "Ganze Karte ansehen" & andere Text-Links als 44px-Ziel */
  .btn--text { min-height: 44px; display: inline-flex; align-items: center; }
  /* Telefon-Fallback (Reservieren/Kontakt) als komfortables Ziel */
  .tel-fallback__num {
    display: inline-flex; align-items: center; min-height: 44px;
  }
  /* Hamburger-Menue: Telefon-Zeile gross genug */
  .mobile-nav__tel { min-height: 48px; display: inline-flex; align-items: center; }
  /* Alt-Footer (falls auf einzelnen Seiten) — Rechtslinks tappbar */
  .site-footer__legal a {
    display: inline-flex; align-items: center; min-height: 40px; padding: 2px 0;
  }
}

/* ===== §36 — "Komm vorbei" — Drohnen-Aufnahmen des Lokals (3x 9:16, kein Crop) ===== */
.visit-clips{
  display:grid; grid-template-columns:repeat(3,1fr);
  gap:clamp(14px,1.8vw,26px);
  margin-top:clamp(40px,5vw,56px);
  max-width:clamp(400px,94vw,1040px);
}
.visit-clip{
  position:relative; margin:0; border-radius:var(--radius-md); overflow:hidden;
  aspect-ratio:9 / 16; background:var(--espresso);
  box-shadow:0 24px 50px -35px rgba(30,30,31,.5);
  border:1px solid rgba(184,146,74,.32);
}
.visit-clip video{ width:100%; height:100%; object-fit:cover; display:block; }
.visit-clip__tag{
  position:absolute; left:12px; bottom:12px; z-index:2;
  font-family:var(--font-ui); font-weight:600; font-size:var(--fs-meta);
  letter-spacing:.14em; text-transform:uppercase; color:var(--creme);
  background:rgba(139,110,63,.82); padding:5px 11px; border-radius:999px;
  backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
}
@media (max-width:600px){ .visit-clips{ grid-template-columns:1fr; max-width:340px; margin-inline:auto; } }


/* ===== §37 — Ruhiger Vollbild-Hero (Hintergrundvideo, ohne Scroll-Expand-Reel) ===== */
.hero-x{ height:100vh; }
.hero-x__center{
  position:absolute; inset:0; z-index:2;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; padding:0 var(--container-pad); gap:clamp(14px,2vw,22px); pointer-events:none;
}
.hero-x__eyebrow{
  font-family:var(--font-ui); font-weight:600; font-size:var(--fs-eyebrow);
  letter-spacing:.22em; text-transform:uppercase; color:var(--creme); opacity:.92;
  text-shadow:0 1px 14px rgba(0,0,0,.55);
}
.hero-x__title{ position:static; inset:auto; display:block; }
.hero-x__accent{ color:var(--blue-light); font-style:italic; }
.hero-x__bgwash{ background:linear-gradient(180deg, rgba(14,24,33,.22) 0%, rgba(14,24,33,.12) 42%, rgba(20,22,24,.66) 100%); }

/* ===== §38 — Editorial-Typografie (il-Tartufo): Script-Lead + Versalien-Titel + Dish-Feature ===== */
.script-lead{
  display:block; font-family:var(--font-script); font-weight:400;
  font-size:clamp(1.6rem,3.4vw,2.6rem); line-height:1; color:var(--blue);
  margin:0 0 -0.06em;
}
.section--ink .script-lead{ color:var(--blue-light); }
.headline--caps{
  font-family:var(--font-wordmark); text-transform:uppercase;
  letter-spacing:0.07em; font-weight:700; line-height:1.06;
}
/* Editorial Dish-Feature: Text + grosses Foto, alternierend */
.dish-feat{ padding:clamp(48px,8vw,100px) 0; }
.dish-feat__grid{
  max-width:var(--container-wide,1180px); margin:0 auto; padding:0 var(--container-pad);
  display:grid; grid-template-columns:1fr 1.1fr; gap:clamp(32px,6vw,78px); align-items:center;
}
.dish-feat--reverse .dish-feat__media{ order:-1; }
.dish-feat__text{ display:flex; flex-direction:column; gap:14px; }
.dish-feat__title{
  font-family:var(--font-wordmark); text-transform:uppercase; letter-spacing:.07em;
  font-weight:700; font-size:clamp(2rem,4.2vw,3.2rem); line-height:1.04; margin:0; color:var(--espresso);
}
.section--ink .dish-feat__title{ color:#F3ECDD; }
.dish-feat__body{ font-family:var(--font-serif); font-size:1.04rem; line-height:1.75; margin:0; max-width:42ch; color:var(--text-on-cream); }
.section--ink .dish-feat__body{ color:var(--text-on-ink); }
.dish-feat__body strong{ font-weight:600; color:var(--blue-deep); }
.section--ink .dish-feat__body strong{ color:var(--blue-light); }
.dish-feat__price{ font-family:var(--font-wordmark); font-weight:700; font-size:1.6rem; color:var(--blue); margin-top:6px; }
.section--ink .dish-feat__price{ color:var(--blue-light); }
.dish-feat__figure{
  margin:0; border-radius:6px; overflow:hidden; aspect-ratio:4/5;
  box-shadow:0 40px 80px -52px rgba(30,30,31,.55); background:var(--paper);
}
.dish-feat__figure img{ width:100%; height:100%; object-fit:cover; display:block; }
.dish-feat__figure figcaption{ font-family:var(--font-ui); font-size:.7rem; letter-spacing:.06em; text-transform:uppercase; color:var(--grey); padding:9px 2px 0; }
@media(max-width:780px){
  .dish-feat__grid{ grid-template-columns:1fr; gap:26px; }
  .dish-feat--reverse .dish-feat__media{ order:0; }
  .dish-feat__figure{ aspect-ratio:3/4; max-width:430px; margin-inline:auto; width:100%; }
}


/* ==========================================================================
   33 · PREMIUM-PASS (Luxus-Detail-Pass 02.07.2026)
   Mobile-Display-Fixes, ruhige Kategorie-Zäsuren, Checkbox-Standards.
   ========================================================================== */

/* Checkboxen: Gold-Akzent + WCAG-Zielgröße */
input[type="checkbox"] {
  accent-color: var(--blue-deep);
  width: 1.35rem;
  height: 1.35rem;
}

/* Kategorie-Zäsur auf der Speisekarte: Gold-Diamant + Hairlines statt Bordüre */
.menu-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin: clamp(3rem, 7vw, 5.5rem) auto;
  max-width: 320px;
}
.menu-divider::before,
.menu-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: rgba(184, 146, 74, 0.32);
}
.menu-divider span {
  color: var(--blue);
  font-size: 0.7rem;
  line-height: 1;
}

/* Lange Caps-Headlines: nie clippen, nur kleiner werden (GOETHESTRASSE-Fix) */
@media (max-width: 600px) {
  .heritage__title {
    font-size: clamp(1.9rem, 8.8vw, 2.6rem);
    letter-spacing: 0.03em;
  }
  .headline--caps {
    letter-spacing: 0.04em;
    overflow-wrap: anywhere;
  }
}

/* Impressioni-Galerie mobil: kuratiertes 2er-Raster statt 13 gestapelter
   Full-Width-Bilder (halbiert die Seitenlänge, hält den Rhythmus) */
@media (max-width: 700px) {
  .sticky-gallery {
    display: grid !important;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
  }
  .sticky-gallery__col { display: contents; }
  .sticky-gallery figure {
    margin: 0;
    aspect-ratio: 4 / 5;
    overflow: hidden;
  }
  .sticky-gallery figure img { width: 100%; height: 100%; object-fit: cover; }
  /* Kuratierung: erstes Center-Bild als Full-Width-Hero, Rest 2-spaltig,
     hintere Seitenspalten-Bilder ausblenden */
  .sticky-gallery__col--center figure:first-child { grid-column: 1 / -1; aspect-ratio: 16 / 10; }
  .sticky-gallery__col:not(.sticky-gallery__col--center) figure:nth-child(n+3) { display: none; }
}

/* Magazine-Spread-Galerie (ueber-uns) mobil: dichtes 2er-Raster, keine Löcher */
@media (max-width: 700px) {
  .gallery {
    grid-template-columns: 1fr 1fr !important;
    gap: 10px;
  }
  .gallery__item {
    grid-column: span 1 !important;
    grid-row: auto !important;
    aspect-ratio: 4 / 5;
  }
  .gallery__item:nth-child(3n+1) { grid-column: 1 / -1 !important; aspect-ratio: 16 / 10; }
}

/* Eyebrow: Linie + Text bleiben bei Umbruch eine Einheit */
.eyebrow { text-wrap: balance; }
.eyebrow::before { flex: 0 0 auto; }

/* Dropcap-Absätze sind IMMER linksbündig (Editorial-Regel: nie zentriert um
   eine Float-Initiale herum flattern lassen) */
.dropcap {
  text-align: left !important;
}

/* Globaler Video-Pause-Schalter (WCAG 2.2.2) — dezent, stört das Bild nicht */
.video-toggle {
  position: fixed;
  left: clamp(0.9rem, 2.5vw, 1.6rem);
  bottom: clamp(0.9rem, 2.5vw, 1.6rem);
  z-index: 260;
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(30, 30, 31, 0.55);
  color: rgba(244, 239, 228, 0.85);
  border: 1px solid rgba(212, 184, 150, 0.4);
  border-radius: 50%;
  font-size: 0.65rem;
  cursor: pointer;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  transition: opacity var(--dur) var(--ease-out), border-color var(--dur) var(--ease-out);
  opacity: 0.55;
}
.video-toggle:hover,
.video-toggle:focus-visible { opacity: 1; border-color: var(--blue-light); }
.video-toggle:focus-visible { outline-color: var(--blue-light); }

/* Bestellen: kompakter Hero — der externe Bestell-CTA gehört above the fold */
body[data-page="bestellen"] .hero__media { height: min(55vh, 480px); }

/* Hinweis-Leiste (Backoffice-schaltbar): Gold auf Espresso, unterm Header */
.announce-bar {
  background: var(--paper-2, #E4D3C0);
  color: var(--espresso);
  border-bottom: 1px solid var(--hairline-cream);
  font-family: var(--font-ui);
  font-size: 0.85rem;
  letter-spacing: 0.04em;
  text-align: center;
  padding: 0.55rem 1rem;
  border-bottom: 1px solid rgba(212, 184, 150, 0.25);
}

/* Wochenkarte (Cucina della Settimana) */
.wochenkarte .section-head--center { text-align: center; }
.wochenkarte [data-wk-zeitraum] { margin-top: 0.6rem; color: var(--muted-on-cream); }
.wochenkarte__hinweis { margin-top: var(--space-md); text-align: center; color: var(--muted-on-cream); font-style: italic; }


/* ==========================================================================
   §39 · CARTA DI NAPOLI (19.07.2026) — Papier-Look-Overrides
   Struktur unverändert; nur Farben/Material. Referenz: 20-Redesign-Inspo/
   DESIGN-VISION.md. Dunkel existiert nur noch IN Fotos.
   ========================================================================== */
:root {
  --text-on-photo: #F2EADB;   /* helle Schrift AUF Fotos (Hero/Heritage) */
  --paper-2: #E4D3C0;
  --chip: #DDD0BB;
}

/* Text, der auf FOTOS liegt, bleibt hell (die Bänder-Inversion gilt nur für Flächen) */
.hero-x__center, .hero-x__center .wordmark--hero, .hero-x__eyebrow,
.heritage__inner, .heritage__title, .heritage__text,
.heritage__inner .eyebrow,
body[data-page="bestellen"] .hero__inner,
body[data-page="bestellen"] .hero__inner .eyebrow {
  color: var(--text-on-photo);
}
.heritage__inner .btn--ghost,
.hero-x__center .btn--ghost,
body[data-page="bestellen"] .hero__inner .btn--ghost {
  color: var(--text-on-photo);
  border-color: rgba(242, 234, 219, 0.55);
}

/* Buttons: Gold-Kontur statt Gold-Füllung (Inspo: Hairline-Pill) */
.btn--primary {
  background: transparent;
  border-color: var(--blue-light);
  color: var(--espresso);
}
.btn--primary:hover {
  background: transparent;
  border-color: #8A6228;
  color: #8A6228;
}

/* Reserve-Pill: Papier-Sticker statt Gold-Balken (bleibt über Fotos lesbar) */
.reserve-pill {
  background: var(--creme);
  border: 1px solid var(--blue-light);
  color: var(--espresso);
}
.reserve-pill:hover { background: var(--paper-2); }

/* Foto-Grade entfernt (Elian 19.07.): Bilder bleiben ORIGINAL — nur die
   Flächen-Farbwelt trägt den Carta-Look. */

/* Sonnengebleichte Papier-Vignette (Inspo: Rand-Drift ins Karamell) */
body::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  background: radial-gradient(115% 85% at 50% 42%, transparent 52%, rgba(140, 105, 60, 0.16) 100%);
}


/* §39b · Carta-Jury-Fixes (19.07.) — Kontrast + Inspo-Treue */
:root { --gold-text: #6E5629; }  /* Text-Gold AA auf Papier UND Band */

/* Offenes Mobile-Menü: Header (mit Toggle-X) liegt ÜBER dem Overlay */
html.nav-open .site-header, body.nav-open .site-header { z-index: calc(var(--z-mobile-nav) + 1); }
.mobile-nav__list a:hover,
.mobile-nav__list a[aria-current="page"],
.mobile-nav__tel { color: var(--gold-deep); }

.legal-crumb [aria-current="page"] { color: var(--espresso); }

/* Eyebrows/Preise/Links auf Papier-Gründen AA-fest */
.section--ink .eyebrow, .hero--editorial .eyebrow { color: var(--gold-text); }
.section--ink .menu-row__price, .section--ink .dish-feat__price { color: var(--gold-text); }
.res-form .form-consent a { color: var(--blue-deep); }
.news-form .field--check a { color: var(--gold-text); }
.news-form input::placeholder { color: #5F5442; }
.script-lead { color: #8A6228; }
.section--ink .script-lead { color: #75592C; }

/* Quiet-Button: Kontur-Prinzip auch im Hover */
.btn--quiet:hover { background: transparent; border-color: #8A6228; color: #8A6228; }
.section--ink .btn--quiet { color: var(--espresso); border-color: var(--blue-light); }

/* Hero-Fuß blendet ins Papier (keine Dunkel-an-Papier-Kante) */
.hero::after { background: var(--wash-hero), linear-gradient(180deg, transparent 84%, var(--creme) 100%); }

/* Media-Slots als Papier-Fenster */
.media-slot { border: 1px solid var(--hairline-blue); }
.media-slot__glyph, .media-slot__label, .media-slot__date { color: var(--blue-deep); }

/* Lesbarkeit auf aufgehellten Washes */
.heritage__title, .heritage__text, .hero-x__title { text-shadow: 0 1px 14px rgba(25, 17, 9, 0.35); }

/* Wortmarken-Akzent AUF Video bleibt hell-golden */
.hero-x__center .wordmark__accent { color: #E8C89A; }


/* §41 · Öffnungszeiten gruppiert + mittig (Hassan-Memo 20.07.) */
.hours-list--grouped {
  max-width: 380px;
  margin-inline: auto;
  text-align: center;
}
.hours-list--grouped > div {
  display: flex;
  justify-content: center;
  align-items: baseline;
  gap: 0.65rem;
}
.hours-list--grouped .hours-status {
  align-items: center;
  gap: 0.6rem;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: var(--fs-ui);
  letter-spacing: 0.04em;
  padding-bottom: 0.85rem;
  margin-bottom: 0.35rem;
  border-bottom: 1px solid var(--hairline-cream);
}
.hours-list--grouped[class] .hours-status { color: var(--espresso); }

/* ==========================================================================
   §40 · DESKTOP-HERO: DROHNEN-TRIPTYCHON (Elian 19.07.)
   Drei 9:16-Lokal-Clips nebeneinander auf Papier-Fugen (Carta-Collage) —
   man sieht sofort DAS Restaurant. Nur >= 768px; Mobile behaelt hero-loop.
   ========================================================================== */
.hero-strip {
  position: absolute;
  inset: 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  padding: 14px;
  background: var(--creme);
}
.hero-strip__panel {
  position: relative;
  margin: 0;
  overflow: hidden;
  background: var(--paper-2, #E4D3C0);
}
/* Mittleres Panel leicht eingerueckt — Editorial-Filmstreifen-Rhythmus */
.hero-strip__panel--mid { margin-block: clamp(20px, 4vh, 44px); }
.hero-strip__panel video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* leiser Carta-Wash pro Panel (statt globalem Dunkel-Wash) */
.hero-strip__panel::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(51,38,26,0.18) 0%, rgba(51,38,26,0.10) 55%, rgba(51,38,26,0.32) 100%);
  pointer-events: none;
}
/* Einblend-Choreografie: Panels steigen gestaffelt auf */
html.strip-on .hero-strip__panel {
  opacity: 0;
  transform: translateY(26px);
  animation: stripIn 0.9s cubic-bezier(.22,1,.36,1) forwards;
}
html.strip-on .hero-strip__panel:nth-child(1) { animation-delay: 0.05s; }
html.strip-on .hero-strip__panel:nth-child(2) { animation-delay: 0.22s; }
html.strip-on .hero-strip__panel:nth-child(3) { animation-delay: 0.39s; }
@keyframes stripIn { to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) {
  html.strip-on .hero-strip__panel { opacity: 1; transform: none; animation: none; }
}
/* Plakette + Wash-Ausblendung an den VIEWPORT gebunden (nicht an strip-on) —
   so ist der Look auch bei reduced-motion/no-JS konsistent Carta (Jury). */
@media (min-width: 768px) {
  .hero-x__center {
    inset: auto;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    max-width: clamp(480px, 42vw, 620px);
    background: var(--creme);
    /* Gold-Doppellinie wie die Flyer-Boxen der Inspo */
    border: 1px solid rgba(176, 141, 74, 0.65);
    box-shadow:
      inset 0 0 0 5px #F7EFDF,
      inset 0 0 0 6px rgba(176, 141, 74, 0.45),
      0 24px 60px -30px rgba(25, 17, 9, 0.45);
    padding: clamp(22px, 3.2vh, 34px) clamp(34px, 3.4vw, 56px) clamp(34px, 4.6vh, 48px);
  }
  .hero-x__center,
  .hero-x__center .wordmark--hero,
  .hero-x__title { color: var(--espresso); text-shadow: none; }
  .hero-x__center .wordmark__accent,
  .hero-x__title .hero-x__accent { color: var(--blue-light); }
  .hero-x__eyebrow { color: var(--gold-text); }
  .hero-x__bgwash { display: none; }

  /* Alt-Schild nur EINMAL zeigen: rechtes Panel auf Eingang/Licht reframen */
  .hero-strip__panel:nth-child(3) video { object-position: 50% 80%; }

  /* Scroll-Cue in der unteren Fuge */
  .hero-x__pin::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: 22px;
    width: 1.5px;
    height: 42px;
    background: var(--espresso);
    opacity: 0.55;
    transform: translateX(-50%);
    animation: stripCue 2.4s ease-in-out infinite;
    z-index: 3;
  }
  @keyframes stripCue {
    0%, 100% { transform: translateX(-50%) translateY(0); opacity: 0.55; }
    50% { transform: translateX(-50%) translateY(8px); opacity: 0.25; }
  }
  @media (prefers-reduced-motion: reduce) {
    .hero-x__pin::after { animation: none; }
  }
}

/* Mobile: Triptychon existiert nicht (hero-reel uebernimmt) */
@media (max-width: 767px) {
  .hero-strip { display: none; }
}

/* ==========================================================================
   §40b · DESKTOP-HERO: EMBLEM ÜBER DEM TRIPTYCHON (Elian 08.08.)
   Die Zentrierung macht bereits .hero-x__center (absolute, inset:0, flex).
   Hier wird NUR das Emblem eingeblendet und der Schriftzug weggenommen.
   ========================================================================== */
@media (min-width: 768px) {
  /* Kleiner als bis zum 08.08. (war clamp(300px, 26vw, 430px), gerendert
     374x279 px). Seit die Kopfzeile das Emblem führt, ist dieses hier nicht
     mehr der einzige Träger der Marke — es darf Signet sein statt Plakat.
     Gemessen bei 1440 px: 259x193 px. Bei clamp(200px, 18vw, 300px) füllt es
     das mittlere Panel noch spürbar, ohne die beiden Fassadenclips daneben
     zu erdrücken; darunter fiel es im Rendering gegen die Panel-Fugen ab. */
  html.strip-on .hero-x__logo {
    display: block !important;          /* schlägt das Inline-display:none */
    width: clamp(200px, 18vw, 300px);
    height: auto;
    filter: drop-shadow(0 26px 70px rgba(0, 0, 0, 0.45));
  }
  /* Schriftzug und Eyebrow weichen — der Name steht im Emblem.
     H1 bleibt für Suchmaschinen und Vorleser im Dokument. */
  html.strip-on .hero-x__center:has(.hero-x__logo) .hero-x__title,
  html.strip-on .hero-x__center:has(.hero-x__logo) .hero-x__eyebrow {
    position: absolute;
    width: 1px; height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }

  /* Die Papier-Plakette aus der Fassung vom 19.07. entfaellt: das Gold-Emblem
     traegt seinen schwarzen Grund selbst und braucht keinen zweiten Rahmen. */
  html.strip-on .hero-x__center::before,
  html.strip-on .hero-x__center::after,
  html.strip-on .hero-x__center .wordmark--hero {
    display: none !important;
    background: none !important;
    border: 0 !important;
    box-shadow: none !important;
  }
  html.strip-on .hero-x__center {
    background: none !important;
    border: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
  }
}


/* ==========================================================================
   40 · LE NOSTRE PIZZE — Signature-Raster auf der Startseite
   Vier Foto-Kacheln (Foto · Name · Beschreibung · Nummer · Preis) im
   Carta-di-Napoli-Rhythmus: Papierflaeche, Gold nur als Linie, Tinte statt
   Schwarz. Mobil einspaltig, ab 600px zweispaltig, ab 1024px vierspaltig.
   Kacheln ohne Foto (z. B. Nr. 94) fallen auf ein Papier-Feld mit
   Vietri-Ornament zurueck — nie ein Loch, nie ein falsches Bild.
   ========================================================================== */

.pizze-showcase__intro {
  margin-top: var(--space-md);
  margin-inline: auto;
}

.pizze-grid {
  margin-top: var(--space-xl);
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(var(--space-lg), 4vw, var(--space-2xl)) clamp(var(--space-md), 3vw, var(--space-xl));
}

.pizza-card {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

/* --- Bildfenster (Hochkant 3:4 wie die Gerichtsfotos) ------------------- */
.pizza-card__media {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  border-radius: var(--radius-sm);
  aspect-ratio: 3 / 4;
  background: var(--slot-dark);
}
.pizza-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--dur-slow) var(--ease-soft);
}
.pizza-card:hover .pizza-card__media img,
.pizza-card:focus-within .pizza-card__media img { transform: scale(1.03); }

/* Gold-Faden: Hairline-Rahmen erst bei Hover — gleiche Sprache wie .highlight-card */
.pizza-card__media::after {
  content: "";
  position: absolute;
  inset: 8px;
  border: 1px solid var(--gold);
  border-radius: calc(var(--radius-sm) - 4px);
  opacity: 0;
  pointer-events: none;
  z-index: 2;
  transition: opacity var(--dur) var(--ease-out);
}
.pizza-card:hover .pizza-card__media::after,
.pizza-card:focus-within .pizza-card__media::after { opacity: 1; }

/* --- Kachel ohne Foto: Papier-Feld statt Leerstelle --------------------- */
.pizza-card__media--empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-sm);
  background: linear-gradient(160deg, var(--slot-dark) 0%, var(--slot-darkest) 100%);
  border: 1px solid var(--hairline-blue);
}
.pizza-card__media--empty::after { display: none; }
.pizza-card__media--empty .ornament {
  --ornament-size: clamp(48px, 9vw, 76px);
  --ornament-opacity: 0.3;
}
.pizza-card__soon {
  font-family: var(--font-ui);
  font-size: var(--fs-meta);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--blue-deep);
}

/* --- Text ---------------------------------------------------------------- */
.pizza-card__body {
  padding-top: var(--space-md);
  flex: 1 1 auto;
}
.pizza-card__name {
  font-family: var(--font-display);
  font-size: var(--fs-h3);
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--text-on-cream);
}
.section--ink .pizza-card__name { color: var(--text-on-ink); }
/* Vietri-Punkt markiert das Namensgericht (gleiche Marke wie .menu-row__name) */
.pizza-card__name .is-signature::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-right: 0.4em;
  border-radius: 50%;
  background: var(--blue);
  vertical-align: middle;
}
.pizza-card__desc {
  margin-top: var(--space-2xs);
  font-family: var(--font-serif);
  font-size: var(--fs-body);
  line-height: 1.6;
  color: var(--muted-on-cream);
  text-wrap: pretty;
}
.section--ink .pizza-card__desc { color: var(--muted-on-ink); }

/* --- Fusszeile: Kartennummer links, Preis rechts, Gold-Hairline darueber -- */
.pizza-card__foot {
  margin-top: var(--space-sm);
  padding-top: var(--space-2xs);
  border-top: 1px solid var(--hairline-blue);
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-sm);
}
.pizza-card__no {
  font-family: var(--font-ui);
  font-size: var(--fs-meta);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted-on-cream);
}
.section--ink .pizza-card__no { color: var(--muted-on-ink); }
.pizza-card__price {
  font-family: var(--font-display);
  font-size: 1.0625rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--blue-deep);
  white-space: nowrap;
}
.section--ink .pizza-card__price { color: var(--blue-light); }

/* --- Button-Zeile zentriert (nur hier gebraucht) ------------------------- */
.btn-row--center {
  margin-top: var(--space-xl);
  justify-content: center;
}

/* --- Raster-Stufen ------------------------------------------------------- */
@media (min-width: 600px) {
  .pizze-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .pizze-grid { grid-template-columns: repeat(4, 1fr); }
}

/* --- Touch/Reduced-Motion: kein Zoom, kein Hover-Rahmen ------------------ */
@media (hover: none) {
  .pizza-card:hover .pizza-card__media img { transform: none; }
  .pizza-card:hover .pizza-card__media::after { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .pizza-card__media img { transition: none; }
  .pizza-card:hover .pizza-card__media img,
  .pizza-card:focus-within .pizza-card__media img { transform: none !important; }
}
