/* ============================================================
   Vino e Gusto — Stylesheet der Startseite
   Ausgelagert aus index.html: 27 KB, die sonst bei JEDEM Aufruf
   neu geladen würden. Als Datei ist es cachebar und beim zweiten
   Besuch (und auf Unterseiten) sofort da.
   ============================================================ */
/* ============================================================
   Vino e Gusto — Majolika
   Farben aus dem handgemalten Kachelbild entnommen.
   ============================================================ */
html{scroll-behavior:smooth}
body{
  margin:0;color:var(--ink);background:var(--ceramic);
  font-family:var(--body);font-size:17px;line-height:1.65;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
a{color:inherit}

.wrap{max-width:1180px;margin:0 auto;padding-inline:var(--edge)}
.sec{padding-block:clamp(4.5rem,10vw,8.5rem)}

/* ---------- Typografie ---------- */
.eyebrow{
  font-family:var(--body);font-weight:500;font-size:.7rem;
  letter-spacing:.32em;text-transform:uppercase;color:var(--blu-mid);margin:0 0 1rem;
}
.title{
  font-family:var(--display);font-weight:400;font-size:clamp(2.5rem,6vw,4.2rem);
  line-height:1.04;color:var(--blu);margin:0;letter-spacing:-.015em;
}
.title em{font-style:italic;font-weight:500}
.lede{font-size:clamp(1.05rem,2vw,1.2rem);color:var(--ink-2);max-width:56ch;margin:1.4rem 0 0}
.center{text-align:center}
.center .lede{margin-inline:auto}

/* ---------- Kachel-Fries ---------- */
.frieze{
  height:clamp(96px,13vw,168px);
  background:url("az_wide.webp") repeat-x center/auto 100%;
  border-block:3px solid var(--blu);position:relative;
}
.frieze::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(255,255,255,.5),transparent 42%,rgba(18,38,106,.12));
  pointer-events:none;
}

/* ---------- Kopfzeile ---------- */
.topbar{
  position:sticky;top:0;z-index:80;
  background:rgba(247,241,228,.9);backdrop-filter:blur(14px) saturate(1.3);
  border-bottom:1px solid var(--grout);
}
.topbar-in{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-block:.8rem}
.mark{display:flex;align-items:center;gap:.7rem;text-decoration:none}
.mark img{width:42px;height:42px;border-radius:3px;box-shadow:0 2px 8px rgba(18,38,106,.22)}
.mark span{font-family:var(--display);font-style:italic;font-weight:500;font-size:1.3rem;color:var(--blu)}
.menu{display:flex;gap:1.9rem;list-style:none;margin:0;padding:0}
.menu a{
  font-size:.76rem;font-weight:500;letter-spacing:.13em;text-transform:uppercase;
  text-decoration:none;color:var(--ink-2);position:relative;padding-block:.3rem;
}
.menu a::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:2px;background:var(--lemon);transition:right .3s ease}
.menu a:hover::after,.menu a:focus-visible::after{right:0}
.menu a:hover,.menu a:focus-visible{color:var(--blu)}
.burger{display:none;background:none;border:1px solid var(--blu);color:var(--blu);
  min-width:44px;min-height:44px;border-radius:3px;cursor:pointer;font-size:1.1rem;line-height:1}

/* ---------- Hero ---------- */
.hero{
  position:relative;overflow:hidden;padding-block:clamp(3.5rem,9vw,7rem) 0;
  isolation:isolate;background:#0a536b;
}
.hero-coast{
  position:absolute;z-index:0;inset:-7% 0 -12%;pointer-events:none;
  background:url('hero-amalfi-coast.webp') center/cover no-repeat;
  transform:translate3d(0,var(--coast-y,0),0) scale(1.075);
  transform-origin:50% 60%;will-change:transform;
}
.hero::before{
  content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  background:radial-gradient(circle at 50% 24%,rgba(191,239,231,.08),transparent 28%),linear-gradient(180deg,rgba(1,30,43,.08),rgba(1,32,43,.28) 56%,rgba(2,52,65,.66));
}
.hero-in{position:relative;z-index:3;display:grid;justify-items:center;text-align:center}
.plaque-motion{
  display:block;line-height:0;
  animation:logo-float 7s ease-in-out infinite;
  will-change:transform;
}
.plaque{
  display:block;width:min(74vw,330px);border-radius:4px;
  box-shadow:0 2px 0 rgba(255,255,255,.85),0 0 60px rgba(234,179,8,.3),0 24px 55px rgba(18,38,106,.3),0 6px 16px rgba(18,38,106,.14);
  animation:set 1.05s cubic-bezier(.2,.75,.25,1) both;
}
.hero h1{
  font-family:var(--display);font-weight:400;font-size:clamp(2.9rem,9vw,6rem);
  line-height:.98;color:#fff;margin:1.7rem 0 0;letter-spacing:-.02em;text-shadow:0 3px 24px rgba(0,25,39,.55);
  animation:set 1.05s .12s cubic-bezier(.2,.75,.25,1) both;
}
.hero h1 em{display:block;font-style:italic;font-weight:500;color:var(--lemon)}
.pills{
  display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;list-style:none;
  margin:1.5rem 0 0;padding:0;animation:set 1.05s .24s cubic-bezier(.2,.75,.25,1) both;
}
.pills li{
  font-size:.68rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--blu);background:rgba(255,255,255,.75);
  border:1px solid var(--grout);border-radius:999px;padding:.42rem 1rem;
}
.hero .lede{
  font-size:clamp(1.05rem,2.2vw,1.28rem);margin-top:1.5rem;max-width:38ch;
  animation:set 1.05s .34s cubic-bezier(.2,.75,.25,1) both;color:#fff;text-shadow:0 2px 18px rgba(0,25,39,.7);
}
.actions{display:flex;gap:.8rem;flex-wrap:wrap;justify-content:center;margin-top:2.2rem;
  animation:set 1.05s .44s cubic-bezier(.2,.75,.25,1) both;padding-bottom:clamp(3rem,7vw,5rem)}
@keyframes set{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
@keyframes logo-float{
  0%,100%{transform:translateY(0) rotate(-1deg)}
  50%{transform:translateY(-10px) rotate(1deg)}
}

.btn{
  font-family:var(--body);font-size:.78rem;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;text-decoration:none;padding:1rem 1.9rem;border-radius:2px;
  border:1.5px solid var(--blu);color:var(--blu);background:transparent;
  transition:background .25s,color .25s,transform .25s,box-shadow .25s;display:inline-block;
}
.btn:hover,.btn:focus-visible{background:var(--blu);color:var(--ceramic);transform:translateY(-2px);box-shadow:0 12px 26px rgba(18,38,106,.26)}
.btn--fill{background:var(--blu);color:var(--ceramic);box-shadow:0 8px 20px rgba(18,38,106,.24)}
.btn--fill:hover,.btn--fill:focus-visible{background:#0c1c50;border-color:#0c1c50}
.hero .btn{border-color:rgba(255,255,255,.88);color:#fff;background:rgba(0,27,43,.28);box-shadow:0 8px 24px rgba(0,18,29,.18)}
.hero .btn:hover,.hero .btn:focus-visible{background:#fff;border-color:#fff;color:var(--blu)}
.hero .btn--fill{background:var(--kunde-gelb);border-color:var(--kunde-gelb);color:var(--blu)}
.hero .btn--fill:hover,.hero .btn--fill:focus-visible{background:#fff;border-color:#fff;color:var(--blu)}

/* ---------- Handwerk ---------- */
.craft{background:var(--ceramic-2)}
/* Bezugspunkt fuer das absolut gesetzte Bild. */
.craft .wrap{position:relative}
.craft-grid{display:grid;grid-template-columns:1.02fr .98fr;gap:clamp(2.2rem,6vw,5rem);align-items:center}
.craft p{color:#413a31;margin:0 0 1.15rem;font-size:1.06rem}
.quote{
  font-family:var(--display);font-style:italic;font-weight:400;
  font-size:clamp(1.45rem,3.2vw,2.1rem);line-height:1.3;color:var(--blu);
  margin:2rem 0;padding-left:1.5rem;border-left:3px solid var(--lemon);
}
.quote footer{
  font-family:var(--body);font-style:normal;font-size:.7rem;font-weight:600;
  letter-spacing:.2em;text-transform:uppercase;color:var(--blu-soft);margin-top:.85rem;
}
.framed{
  /* Messingrahmen statt weissem Passepartout — passt zur Schaukasten-Tafel
     der Karte. Der Verlauf gibt dem Metall Tiefe: hell an der Lichtkante,
     dunkel in der Schattenkante. */
  /* Feine Goldlinie statt breitem Rahmen: 7px Verlauf wirkten als Flaeche
     und billig. Eine 1px-Kontur plus ein Hauch Abstand liest sich als
     Fassung, nicht als Passepartout. */
  padding:0;
  background:none;
  border:1px solid #c9a349;
  border-radius:2px;
  box-shadow:
    0 0 0 1px rgba(255,255,255,.5) inset,
    0 18px 40px rgba(18,38,106,.16);
  transform:rotate(-1.2deg);
  line-height:0;
}
.framed > *{display:block;margin:0}
.framed:has(img[height="1604"]) img{
  height:100%;
  object-fit:cover;
  object-position:center 38%;
  /* 374px bei 1180px Inhalt = 32% — schmaler als zuvor (446). */
  width:100%;
  max-width:none;
  border:1px solid #c9a349;
  border-radius:2px;
  box-shadow:0 0 0 1px rgba(255,255,255,.5) inset,0 18px 40px rgba(18,38,106,.16);
  transform:rotate(-1.2deg);
}
.framed img{
  border:0;
  display:block;
  width:100%;
  height:auto;
}
/* Hochformatiges Bild: Der RAHMEN wird begrenzt, nicht das Bild. Vorher
   stand max-height am img mit width:auto — dadurch wurde das Bild schmaler
   als seine Fassung und links/rechts blieb heller Grund stehen. Jetzt
   schrumpft die Fassung mit, das Bild fuellt sie randlos. */
.framed:has(img[height="1604"]){
  /* Absolut zum .wrap positioniert. Grund: Als Grid-Kind veraenderte jeder
     margin-Wert die Spaltenbreite gleich mit — der Zusammenhang war nicht
     linear, fuenf Anlaeufe trafen die Vorgabe nicht. Absolut positioniert
     ist der Wert direkt der Abstand.
     Vorgabe des Kunden: Bild von 701 bis 1074 bei 1180px Inhaltsbreite
     -> rechter Abstand 106px, Breite 373px. */
  position:absolute;
  right:106px;
  /* Oben buendig zum Text statt mittig: Bei 50% ragte das Bild unten in
     die Kaesten der naechsten Sektion. Die Hoehe folgt jetzt der
     Textspalte (827px), das Seitenverhaeltnis bleibt gewahrt. */
  top:26px;
  transform:none;
  width:373px;
  height:min(827px,calc(100% - 52px));
  object-fit:cover;
  max-width:none;
  margin:0;
  display:block;
  background:none;
  border:0;
  box-shadow:none;
}
.facts{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--grout);
  border:1px solid var(--grout);margin-top:2.4rem}
.fact{background:var(--ceramic-2);padding:1.3rem 1rem;text-align:center}
.fact b{display:block;font-family:var(--display);font-size:1.85rem;color:var(--blu);font-weight:500;line-height:1}
.fact span{font-size:.68rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);margin-top:.4rem;display:block}

/* ---------- Küchen-Philosophie (3 Schritte) ---------- */
.craftsteps{display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:1px;
  background:var(--grout);border:1px solid var(--grout);margin-top:clamp(3rem,7vw,5rem)}
.step{background:var(--ceramic);padding:2.2rem 1.8rem}
.step .n{
  font-family:var(--display);font-style:italic;font-size:2.4rem;color:var(--lemon-deep);
  line-height:1;margin-bottom:.8rem;display:block;
}
.step h3{font-family:var(--display);font-size:1.3rem;font-weight:600;color:var(--blu);margin:0 0 .6rem}
.step p{margin:0;font-size:.96rem;color:var(--ink-2);line-height:1.6}

/* ---------- Signature-Gerichte ---------- */
.signature{background:var(--ceramic-2)}
.signature.marine-host{
  --marine-overlap:clamp(180px,34vh,320px);
  isolation:isolate;overflow:visible;background:#063b4e;
}
.signature.marine-host::before{
  z-index:2;top:calc(-1 * var(--marine-overlap));opacity:1;
  background:linear-gradient(180deg,rgba(7,79,91,.06),rgba(1,32,45,.34) 24%,rgba(1,22,34,.72));
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 18%,#000 100%);
  mask-image:linear-gradient(to bottom,transparent 0,#000 18%,#000 100%);
}
.signature.marine-host>.wrap{position:relative;z-index:3}
.marine-stage{position:absolute;z-index:0;overflow:hidden;pointer-events:none;left:0;right:0;top:calc(-1 * var(--marine-overlap));bottom:0}
.marine-stage>span,.marine-stage canvas{position:absolute;inset:0;width:100%;height:100%}
.marine-underwater{
  background:url('hero-mediterranean-underwater.webp') center top/cover no-repeat;
  transform:scale(1.035);transform-origin:50% 12%;
  filter:saturate(.82) brightness(.78) hue-rotate(-4deg);opacity:var(--marine-reveal,.35);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 18%,#000 100%);
  mask-image:linear-gradient(to bottom,transparent 0,#000 18%,#000 100%);
}
.marine-light{
  z-index:1;opacity:var(--marine-reveal,.35);
  background:radial-gradient(ellipse at 50% 5%,rgba(164,230,220,.28),transparent 43%),linear-gradient(180deg,rgba(77,169,174,.16),transparent 42%);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 18%,#000 100%);
  mask-image:linear-gradient(to bottom,transparent 0,#000 18%,#000 100%);
}
#heroMarineCanvas{
  z-index:2;top:var(--marine-overlap);height:calc(100% - var(--marine-overlap));
  opacity:var(--fish-reveal,0);filter:saturate(.86) contrast(.94);
}
/* --- Signature-Slider --- */
.slider{position:relative;margin-top:3rem}
.rail{
  display:flex;gap:1.6rem;overflow-x:auto;scroll-snap-type:x mandatory;
  scroll-behavior:smooth;padding:.5rem .25rem 1.6rem;
  scrollbar-width:none;-ms-overflow-style:none;
}
.rail::-webkit-scrollbar{display:none}
.sig{
  flex:0 0 clamp(268px,31%,340px);scroll-snap-align:start;
  background:var(--ceramic);border:1px solid var(--grout);
  position:relative;overflow:hidden;
  transition:transform .35s cubic-bezier(.2,.7,.3,1),box-shadow .35s,border-color .35s;
}
.sig-body{padding:1.5rem 1.6rem 2rem}
.sig-shot{
  aspect-ratio:4/3;overflow:hidden;background:var(--ceramic-2);
  border-bottom:1px solid var(--grout);
}
.sig-shot img{
  width:100%;height:100%;object-fit:cover;
  transition:transform .7s cubic-bezier(.2,.7,.3,1);
}
.sig:hover .sig-shot img{transform:scale(1.07)}
.sig:hover{transform:translateY(-6px);box-shadow:0 22px 46px rgba(18,38,106,.16);border-color:var(--blu-soft)}
.sig::after{ /* Zitronen-Akzent, wächst bei Hover */
  content:"";position:absolute;left:1.6rem;right:1.6rem;bottom:1.1rem;height:2px;
  background:var(--lemon);transform:scaleX(0);transform-origin:left;
  transition:transform .4s cubic-bezier(.2,.7,.3,1);
}
.sig:hover::after{transform:scaleX(1)}

.slider-ui{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:.4rem}
.dots{display:flex;gap:1.1rem}
.dot{
  width:8px;height:8px;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:var(--grout);transition:background .25s,width .25s;
  position:relative;
}
/* Sichtbar bleibt der 8px-Punkt, treffbar sind 44px (WCAG 2.5.8) */
.dot::before{content:"";position:absolute;left:50%;top:50%;
  width:44px;height:44px;transform:translate(-50%,-50%)}
.dot[aria-current="true"]{background:var(--blu);width:24px;border-radius:4px}
.arrows{display:flex;gap:.5rem}
.arrow{
  width:44px;height:44px;border-radius:50%;cursor:pointer;
  background:transparent;border:1px solid var(--grout);color:var(--blu);
  font-size:1rem;line-height:1;display:grid;place-items:center;
  transition:background .25s,color .25s,border-color .25s,transform .25s;
}
.arrow:hover:not(:disabled){background:var(--blu);border-color:var(--blu);color:var(--ceramic);transform:scale(1.06)}
.arrow:disabled{opacity:.3;cursor:default}
.sig .kind{font-size:.66rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:#2f4fb0}
.sig h3{font-family:var(--display);font-size:1.42rem;font-weight:600;color:var(--blu);margin:.7rem 0 .5rem;line-height:1.2}
.sig p{margin:0;font-size:.95rem;color:var(--ink-2);line-height:1.6}
.sig .price{
  display:inline-block;margin-top:1.1rem;font-family:var(--display);font-size:1.3rem;
  font-weight:600;color:var(--lemon-deep);
}

/* ---------- Speisekarte ---------- */
.tabs{display:flex;flex-wrap:wrap;gap:.45rem;justify-content:center;margin-bottom:3rem}
.tab{
  font-family:var(--body);font-size:.75rem;font-weight:500;letter-spacing:.13em;
  text-transform:uppercase;padding:.85rem 1.3rem;min-height:44px;cursor:pointer;border-radius:2px;
  background:#fff;border:1px solid var(--grout);color:var(--ink-2);transition:all .22s;
}
.tab:hover{border-color:var(--blu-soft);color:var(--blu)}
.tab[aria-selected="true"]{background:var(--blu);border-color:var(--blu);color:var(--ceramic)}
.panel{display:none}
.panel.on{display:block;animation:in .4s ease both}

.course{
  font-family:var(--display);font-style:italic;font-weight:500;font-size:1.75rem;color:var(--blu);
  margin:3rem 0 1.2rem;padding-bottom:.7rem;border-bottom:1px solid var(--grout);
  display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;
}
.course:first-child{margin-top:0}
.course small{font-family:var(--body);font-style:normal;font-size:.66rem;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;color:var(--blu-soft)}
.course-note{color:var(--ink-2);font-size:.97rem;margin:-.4rem 0 1.4rem;max-width:70ch;font-style:italic}

.dishes{display:grid;grid-template-columns:repeat(auto-fit,minmax(345px,1fr));gap:0 3.4rem}
.dish{padding:1.1rem 0;border-bottom:1px solid var(--grout)}
.dish-head{display:flex;align-items:baseline;gap:.6rem}
.dish-name{font-family:var(--display);font-size:1.22rem;font-weight:600;color:var(--blu);letter-spacing:-.005em}
.dish-fill{flex:1;height:1px;background:repeating-linear-gradient(90deg,var(--grout) 0 3px,transparent 3px 7px);transform:translateY(-3px)}
.dish-price{
  font-family:var(--body);font-size:.86rem;font-weight:600;color:var(--blu);
  background:#fff;border:1px solid var(--grout);border-radius:2px;
  padding:.22rem .55rem;white-space:nowrap;box-shadow:0 1px 0 rgba(255,255,255,.9) inset;
}
.dish-desc{margin:.4rem 0 0;font-size:.95rem;color:var(--ink-2);line-height:1.55;max-width:52ch}
.tag{display:inline-block;margin-top:.5rem;font-size:.62rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--lemon-deep)}
.tag::before{content:"◆ ";color:var(--lemon)}


/* --- Allergene: aufklappbar, damit die Karte nicht erschlagen wird --- */
.allergene{margin-top:3.2rem;border:1px solid var(--grout);background:#fff}
.allergene summary{
  cursor:pointer;padding:1.15rem 1.4rem;list-style:none;
  font-family:var(--display);font-style:italic;font-weight:600;font-size:1.2rem;color:var(--blu);
  display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:44px;
}
.allergene summary::-webkit-details-marker{display:none}
.allergene summary::after{content:"+";font-family:var(--body);font-style:normal;font-weight:400;
  font-size:1.5rem;color:var(--lemon-deep);transition:transform .3s}
.allergene[open] summary::after{transform:rotate(45deg)}
.allergene summary:hover{background:var(--ceramic)}
.alg-body{padding:0 1.4rem 1.5rem;border-top:1px solid var(--grout)}
.alg-hinweis{
  margin:1.2rem 0 1.4rem;padding:.9rem 1.1rem;background:#fff8e3;
  border-left:3px solid var(--lemon-deep);font-size:.94rem;color:#5c4a1c;line-height:1.6;
}
.alg-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.4rem 2.4rem}
.alg-cols h4{
  grid-column:1/-1;font-family:var(--body);font-size:.68rem;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;color:var(--blu-soft);
  margin:1.2rem 0 .5rem;padding-bottom:.4rem;border-bottom:1px solid var(--grout);
}
.alg-cols h4:first-child{margin-top:0}
.alg-item{display:flex;gap:.7rem;padding:.32rem 0;font-size:.93rem;color:var(--ink-2);line-height:1.45}
.alg-item b{
  flex:none;min-width:1.9rem;height:1.45rem;display:grid;place-items:center;
  background:var(--blu);color:var(--ceramic);border-radius:2px;
  font-size:.72rem;font-weight:600;font-family:var(--body);
}

/* ---------- Enoteca ---------- */
.cellar{background:var(--blu);color:var(--ceramic);position:relative;overflow:hidden}
.cellar::before{
  content:"";position:absolute;inset:0;opacity:.055;pointer-events:none;
  background:url("az_corner.webp") repeat;background-size:210px;
}
.cellar::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(90% 60% at 50% 0%,rgba(255,255,255,.16),transparent 60%);
}
.cellar .wrap{position:relative;z-index:1}
.cellar .eyebrow{color:var(--lemon)}
.cellar .title{color:var(--ceramic)}
.cellar .lede{color:rgba(247,241,228,.78)}
.cellar .course{color:var(--lemon);border-bottom-color:rgba(242,194,48,.28)}
.cellar .course small{color:rgba(247,241,228,.6)}
.cellar .course-note{color:rgba(247,241,228,.72)}
.cellar .dish{border-bottom-color:rgba(247,241,228,.16)}
.cellar .dish-name{color:#fff}
.cellar .dish-desc{color:rgba(247,241,228,.68)}
.cellar .dish-fill{background:repeating-linear-gradient(90deg,rgba(242,194,48,.4) 0 3px,transparent 3px 7px)}
.cellar .dish-price{background:rgba(255,255,255,.08);border-color:rgba(242,194,48,.4);color:var(--lemon)}

/* ---------- Events ---------- */
.events{background:var(--ceramic)}
.ev-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,4rem);align-items:center;margin-top:2.6rem}
.ev-list{display:grid;gap:1px;background:var(--grout);border:1px solid var(--grout)}
.ev{background:var(--ceramic);padding:1.5rem 1.6rem;display:flex;gap:1.3rem;align-items:flex-start}
.ev .when{
  font-family:var(--display);font-style:italic;font-weight:600;font-size:1.05rem;
  color:var(--lemon-deep);min-width:6.5rem;line-height:1.3;
}
.ev h3{font-family:var(--display);font-size:1.18rem;font-weight:600;color:var(--blu);margin:0 0 .3rem}
.ev p{margin:0;font-size:.94rem;color:var(--ink-2);line-height:1.55}





/* ---------- Kopfbild einer Unterseite ---------- */
.seiten-bild{
  margin:0;overflow:hidden;border-bottom:3px solid var(--blu);
  max-height:min(42vh,340px);
}
.seiten-bild img{width:100%;height:100%;object-fit:cover;object-position:center}


/* ---------- Weinregionen ---------- */
.wein-intro{max-width:64ch;margin:0 auto 2.6rem;text-align:center}
.wein-intro p{color:var(--ink-2);font-size:1.02rem;line-height:1.7;margin:0 0 .8rem}
.wein-intro strong{color:var(--blu);font-weight:600}
.cellar .wein-intro p{color:rgba(247,241,228,.78)}
.cellar .wein-intro strong{color:var(--lemon)}
.regionen{background:var(--ceramic-2)}
.reg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1px;
  background:var(--grout);border:1px solid var(--grout);max-width:1000px;margin:0 auto}
.reg{background:var(--ceramic);padding:1.7rem 1.6rem}
.reg h3{font-family:var(--display);font-size:1.25rem;font-weight:600;color:var(--blu);margin:0 0 .3rem}
.reg-weine{font-size:.78rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--lemon-deep);margin:0 0 .8rem}
.reg p:last-child{margin:0;font-size:.95rem;color:var(--ink-2);line-height:1.65}
.wein-hinweis{max-width:1000px;margin:2rem auto 0;padding:1.3rem 1.5rem;text-align:center;
  background:#fff8e3;border-left:3px solid var(--lemon-deep)}
.wein-hinweis p{margin:0;color:#5c4a1c;font-size:.98rem;line-height:1.65}

/* ---------- Küchen-Prinzipien ---------- */
.kueche:not(.wand){background:var(--ceramic)}
.prinzip-liste{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:1.5rem;max-width:1000px;margin:0 auto;align-items:stretch}
/* Gleiche Höhe je Reihe: unterschiedlich lange Texte ließen die Karten
   sonst wie ein Treppenmuster aussehen. */
.prinzip{display:flex;flex-direction:column}
/* Vierter Kasten ueber die volle Breite: Bei drei Spalten stand er allein
   links und liess rechts zwei leere Felder stehen. Als durchgehende Zeile
   schliesst er den Block ab. Gilt nur, wenn es GENAU vier sind — bei
   anderer Anzahl bleibt das Raster wie es ist. */
.prinzip-liste > .prinzip:nth-child(4):nth-last-child(1){
  grid-column:1 / -1;
}
/* Quer statt hoch: Ueberschrift links, Text daneben — sonst wirkt die
   breite Karte oben leer. */
@media (min-width:760px){
  .prinzip-liste > .prinzip:nth-child(4):nth-last-child(1){
    display:grid;
    grid-template-columns:minmax(0,18rem) 1fr;
    gap:0 clamp(1.5rem,4vw,3rem);
    align-items:start;
  }
}
.prinzip{background:#fff;border:1px solid var(--grout);border-top:3px solid var(--lemon);
  padding:1.7rem 1.6rem}
.prinzip h3{font-family:var(--display);font-size:1.22rem;font-weight:600;color:var(--blu);
  margin:0 0 .6rem;line-height:1.3}
.prinzip p{margin:0;font-size:.96rem;color:var(--ink-2);line-height:1.68}
.kueche-schluss{max-width:1000px;margin:2.2rem auto 0;text-align:center}
.kueche-schluss p{color:var(--ink-2);font-size:1.02rem;line-height:1.7;margin:0}
.kueche-schluss a{color:var(--blu-mid);border-bottom:1px solid rgba(27,58,143,.35);text-decoration:none}

/* ---------- Anfahrt (Kontakt) ---------- */
.anfahrt{background:var(--ceramic-2)}
.weg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1px;
  background:var(--grout);border:1px solid var(--grout);max-width:960px;margin:0 auto}
.weg{background:var(--ceramic);padding:1.8rem 1.6rem}
.weg-icon{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;
  background:rgba(18,38,106,.07);color:var(--blu);margin-bottom:1rem}
.weg h3{font-family:var(--display);font-size:1.2rem;font-weight:600;color:var(--blu);margin:0 0 .5rem}
.weg p{margin:0;font-size:.96rem;color:var(--ink-2);line-height:1.6}
.kontakt-hinweis{max-width:960px;margin:2rem auto 0;padding:1.3rem 1.5rem;
  background:#fff8e3;border-left:3px solid var(--lemon-deep)}
.kontakt-hinweis p{margin:0;color:#5c4a1c;font-size:.98rem;line-height:1.6}
.kontakt-hinweis a{color:var(--blu-mid)}

/* ---------- Ablauf einer Feier (Events) ---------- */
.feiern{background:var(--ceramic-2)}
.ablauf{list-style:none;margin:0 auto;padding:0;max-width:820px;display:grid;gap:1px;
  background:var(--grout);border:1px solid var(--grout)}
.ablauf li{background:var(--ceramic);padding:1.6rem;display:flex;gap:1.3rem;align-items:flex-start}
.schritt{flex:none;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;
  background:var(--blu);color:var(--ceramic);font-family:var(--display);font-size:1.25rem;font-weight:600}
.ablauf h3{font-family:var(--display);font-size:1.2rem;font-weight:600;color:var(--blu);margin:0 0 .4rem}
.ablauf p{margin:0;font-size:.96rem;color:var(--ink-2);line-height:1.6}
.ablauf a{color:var(--blu-mid)}
.feier-hinweis{max-width:820px;margin:2rem auto 0;text-align:center}
.feier-hinweis p{color:var(--ink-2);font-size:.98rem;line-height:1.65}
.feier-hinweis strong{color:var(--blu)}




/* ---------- Dunkler Abschnitt, leichte Variante ----------
   Die Kundenseite wechselt zwischen zwei Blautönen (#1E3A5F / #0F2340) und
   hellem Creme — sie macht NICHT alles dunkel. Diesen Rhythmus übernehmen
   wir: .karte-dunkel ist das tiefe Blau für die Karten, .wand-hell das
   ruhigere für erzählende Abschnitte. So bleibt der Wechsel erhalten und
   die Seite wird nicht monoton. */
.wand-hell{background:#1e3a5f;color:var(--ceramic);position:relative;overflow:hidden}
.wand-hell::before{
  content:"";position:absolute;inset:0;opacity:.05;pointer-events:none;
  background:url("az_corner.webp") repeat;background-size:210px;
}
.wand-hell .wrap{position:relative;z-index:1}
.wand-hell .eyebrow{color:var(--kunde-gelb)}
.wand-hell .title{color:var(--ceramic)}
.wand-hell .title em{color:var(--kunde-gelb)}
.wand-hell .lede{color:rgba(247,241,228,.8)}
.wand-hell p{color:rgba(247,241,228,.8)}

/* Kennzahlen */
.wand-hell .facts{background:rgba(234,179,8,.25);border-color:rgba(234,179,8,.3)}
.wand-hell .fact{background:rgba(15,35,64,.85)}
.wand-hell .fact b{color:var(--kunde-gelb)}
.wand-hell .fact span{color:rgba(247,241,228,.7)}

/* Bildrahmen */
.wand-hell .framed{background:rgba(255,255,255,.06);border-color:rgba(234,179,8,.25)}

/* Veranstaltungsliste */
.wand-hell .ev-list{background:rgba(234,179,8,.25);border-color:rgba(234,179,8,.3)}
.wand-hell .ev{background:rgba(15,35,64,.85)}
.wand-hell .ev h3{color:var(--kunde-gelb)}
.wand-hell .ev p{color:rgba(247,241,228,.75)}
.wand-hell .when{color:rgba(247,241,228,.6)}

/* Ablauf einer Feier */
.wand-hell .ablauf{background:rgba(234,179,8,.25);border-color:rgba(234,179,8,.3)}
.wand-hell .ablauf li{background:rgba(15,35,64,.85)}
.wand-hell .ablauf h3{color:var(--kunde-gelb)}
.wand-hell .ablauf p{color:rgba(247,241,228,.75)}
.wand-hell .ablauf a{color:var(--kunde-gelb)}
.wand-hell .schritt{background:var(--kunde-gelb);color:var(--blu)}
.wand-hell .feier-hinweis p{color:rgba(247,241,228,.8)}
.wand-hell .feier-hinweis strong{color:var(--kunde-gelb)}

/* Karte und Signature-Slider auf dunklem Grund */
.wand-hell .map{background:rgba(255,255,255,.06);border-color:rgba(234,179,8,.25)}
.wand-hell .map figcaption strong{color:var(--kunde-gelb)}
.wand-hell .map figcaption span{color:rgba(247,241,228,.72)}
.wand-hell .sig{background:rgba(15,35,64,.85);border-color:rgba(234,179,8,.25)}
.wand-hell .sig h3{color:var(--kunde-gelb)}
.wand-hell .sig p{color:rgba(247,241,228,.75)}
.wand-hell .sig .kind{color:rgba(247,241,228,.55)}
.wand-hell .sig .price{color:var(--kunde-gelb)}
.wand-hell .sig::after{background:var(--kunde-gelb)}
.wand-hell .dot{background:rgba(247,241,228,.3)}
.wand-hell .dot[aria-current="true"]{background:var(--kunde-gelb)}
.wand-hell .arrow{border-color:rgba(234,179,8,.4);color:var(--kunde-gelb)}
.wand-hell .arrow:hover:not(:disabled){background:var(--kunde-gelb);color:var(--blu);border-color:var(--kunde-gelb)}

/* Schaltflächen */
.wand-hell .btn--ink{border-color:var(--kunde-gelb);color:var(--kunde-gelb)}
.wand-hell .btn--ink:hover{background:var(--kunde-gelb);color:var(--blu)}
.wand-hell .btn--fill{background:var(--kunde-gelb);border-color:var(--kunde-gelb);color:var(--blu)}
.wand-hell .btn--fill:hover{background:#f6cf4a;border-color:#f6cf4a}

/* ---------- Karte auf der Kachelwand ----------
   Vorbild ist die Kundenseite vinoegusto-alzey.de: Gerichtnamen in Gelb
   (#EAB308) auf dunkelblauem Grund, Beschreibung hell, Preis gelb.
   Der Kunde hat genau diese Kombination als seine Textfarbe benannt. */
.karte-dunkel{background:var(--blu);color:var(--ceramic);position:relative;overflow:hidden}
.karte-dunkel::before{
  content:"";position:absolute;inset:0;opacity:.055;pointer-events:none;
  background:url("az_corner.webp") repeat;background-size:210px;
}
.karte-dunkel .wrap{position:relative;z-index:1}
.karte-dunkel .eyebrow{color:var(--kunde-gelb)}
.karte-dunkel .title{color:var(--kunde-gelb)}
.karte-dunkel .title em{color:var(--ceramic)}
.karte-dunkel .lede{color:rgba(247,241,228,.78)}

/* Reiter */
.karte-dunkel .tab{
  background:transparent;border-color:rgba(234,179,8,.35);color:rgba(247,241,228,.85);
}
.karte-dunkel .tab:hover{border-color:var(--kunde-gelb);color:var(--kunde-gelb)}
.karte-dunkel .tab[aria-selected="true"]{
  background:var(--kunde-gelb);border-color:var(--kunde-gelb);color:var(--blu);font-weight:600;
}

/* Gerichte: Name GELB — das ist der Kern des Kundenwunsches */
.karte-dunkel .course{color:var(--kunde-gelb);border-bottom-color:rgba(234,179,8,.3)}
.karte-dunkel .course small{color:rgba(247,241,228,.6)}
.karte-dunkel .course-note{color:rgba(247,241,228,.72)}
.karte-dunkel .dish{border-bottom-color:rgba(247,241,228,.14)}
.karte-dunkel .dish-name{color:var(--kunde-gelb)}
.karte-dunkel .dish-desc{color:rgba(247,241,228,.72)}
.karte-dunkel .dish-fill{background:repeating-linear-gradient(90deg,rgba(234,179,8,.35) 0 3px,transparent 3px 7px)}
.karte-dunkel .dish-price{
  background:transparent;border-color:rgba(234,179,8,.4);color:var(--kunde-gelb);
}
.karte-dunkel .dish:hover .dish-name{color:#f6cf4a}
.karte-dunkel .tag{color:rgba(247,241,228,.62)}
.karte-dunkel .tag::before{color:var(--kunde-gelb)}

/* Allergene und Aufklapper */
.karte-dunkel .allergene{background:rgba(255,255,255,.05);border-color:rgba(234,179,8,.28)}
.karte-dunkel .allergene summary{color:var(--kunde-gelb)}
.karte-dunkel .allergene summary:hover{background:rgba(255,255,255,.05)}
.karte-dunkel .alg-body{border-top-color:rgba(234,179,8,.22)}
.karte-dunkel .alg-cols h4{color:var(--kunde-gelb);border-bottom-color:rgba(234,179,8,.25)}
.karte-dunkel .alg-item{color:rgba(247,241,228,.78)}
.karte-dunkel .alg-item b{background:var(--kunde-gelb);color:var(--blu)}
.karte-dunkel .btn{border-color:var(--kunde-gelb);color:var(--kunde-gelb)}
.karte-dunkel .btn:hover{background:var(--kunde-gelb);color:var(--blu)}

/* Regionen auf dunklem Grund */
.karte-dunkel .reg-grid{background:rgba(234,179,8,.25);border-color:rgba(234,179,8,.28)}
.karte-dunkel .reg{background:rgba(18,38,106,.75)}
.karte-dunkel .reg h3{color:var(--kunde-gelb)}
.karte-dunkel .reg-weine{color:rgba(247,241,228,.65)}
.karte-dunkel .reg p:last-child{color:rgba(247,241,228,.75)}
.karte-dunkel .wein-hinweis{background:rgba(234,179,8,.12);border-left-color:var(--kunde-gelb)}
.karte-dunkel .wein-hinweis p{color:rgba(247,241,228,.85)}
.karte-dunkel .wein-intro p{color:rgba(247,241,228,.78)}
.karte-dunkel .wein-intro strong{color:var(--kunde-gelb)}

/* ---------- Kachelwand für die Restaurant-Seite ----------
   Wunsch des Kunden: Im Lokal hängen genau solche Fliesen an der Wand.
   Derselbe Aufbau wie .cellar (Enoteca), damit beide Bereiche als
   ein Material gelesen werden. Schriftfarbe ist das Gelb der
   Kundenseite (#EAB308) — dort für Überschriften bereits im Einsatz. */
.wand{background:var(--blu);color:var(--ceramic);position:relative;overflow:hidden}
.wand::before{
  content:"";position:absolute;inset:0;opacity:.055;pointer-events:none;
  background:url("az_corner.webp") repeat;background-size:210px;
}
.wand::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(90% 60% at 50% 0%,rgba(255,255,255,.16),transparent 60%);
}
.wand .wrap{position:relative;z-index:1}
.wand .eyebrow{color:var(--kunde-gelb)}
.wand .title{color:var(--ceramic)}
.wand .title em{color:var(--kunde-gelb)}
.wand .lede{color:rgba(247,241,228,.78)}

/* Küchen-Prinzipien auf der Kachelwand */
.wand .prinzip{
  background:rgba(255,255,255,.055);
  border:1px solid rgba(234,179,8,.28);
  border-top:3px solid var(--kunde-gelb);
}
.wand .prinzip h3{color:var(--kunde-gelb)}
.wand .prinzip p{color:rgba(247,241,228,.82)}
.wand .kueche-schluss p{color:rgba(247,241,228,.78)}
.wand .kueche-schluss a{color:var(--kunde-gelb);border-bottom-color:rgba(234,179,8,.45)}

/* Zitat und Fakten auf der Wand */
.wand .zitat-gross{border-left-color:var(--kunde-gelb)}
.wand .zitat-gross blockquote{color:var(--ceramic)}
.wand .z-wer{color:rgba(247,241,228,.6)}
.wand .z-quelle{color:var(--kunde-gelb);border-bottom-color:rgba(234,179,8,.4)}
.wand .presse-fakten{background:rgba(234,179,8,.22);border-color:rgba(234,179,8,.28)}
.wand .pf{background:transparent}
.wand .pf b{color:var(--kunde-gelb)}
.wand .pf span{color:rgba(247,241,228,.78)}

/* ---------- In der Presse ---------- */
.presse:not(.wand){background:var(--ceramic)}
.zitat-gross{
  max-width:860px;margin:0 auto;padding:0;
  border-left:3px solid var(--lemon);padding-left:clamp(1.2rem,3vw,2.2rem);
}
.zitat-gross blockquote{
  margin:0;font-family:var(--display);font-style:italic;font-weight:400;
  font-size:clamp(1.35rem,3.2vw,2rem);line-height:1.35;color:var(--blu);
}
/* Der Zeilenumbruch im HTML rendert als Leerzeichen — ohne dieses margin
   stünde ein sichtbarer Abstand zwischen Anführungszeichen und Text. */
.zitat-gross blockquote::before{content:"„";margin-right:-.12em}
.zitat-gross blockquote::after{content:"“";margin-left:-.22em}
.zitat-gross figcaption{
  margin-top:1.2rem;display:flex;gap:.6rem 1.4rem;flex-wrap:wrap;align-items:baseline;
}
.z-wer{
  font-size:.72rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-2);
}
.z-quelle{
  font-size:.84rem;color:var(--blu-mid);text-decoration:none;
  border-bottom:1px solid rgba(27,58,143,.35);
}
.z-quelle:hover{border-color:var(--blu-mid)}

.presse-fakten{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
  gap:1px;background:var(--grout);border:1px solid var(--grout);
  max-width:860px;margin:clamp(2.4rem,5vw,3.4rem) auto 0;
}
.pf{background:var(--ceramic);padding:1.5rem 1.4rem}
.pf b{
  display:block;font-family:var(--display);font-size:1.15rem;font-weight:600;
  color:var(--blu);margin-bottom:.45rem;line-height:1.25;
}
.pf span{font-size:.94rem;color:var(--ink-2);line-height:1.6}

/* ---------- Gut zu wissen (FAQ) ---------- */
.faq{background:var(--ceramic-2)}
.faq-liste{
  max-width:860px;margin:0 auto;
  border:1px solid var(--grout);border-bottom:0;background:#fff;
}
.fq{border-bottom:1px solid var(--grout)}
.fq summary{
  cursor:pointer;list-style:none;padding:1.15rem 1.4rem;min-height:44px;
  font-family:var(--display);font-weight:600;font-size:1.08rem;color:var(--blu);
  display:flex;align-items:center;justify-content:space-between;gap:1rem;
  transition:background .2s;
}
.fq summary::-webkit-details-marker{display:none}
.fq summary::after{
  content:"+";font-family:var(--body);font-weight:400;font-size:1.45rem;
  color:var(--lemon-deep);flex:none;transition:transform .3s;line-height:1;
}
.fq[open] summary::after{transform:rotate(45deg)}
.fq summary:hover{background:var(--ceramic)}
.fq p{
  margin:0;padding:0 1.4rem 1.3rem;color:var(--ink-2);
  font-size:.97rem;line-height:1.65;max-width:68ch;
}
.fq a{color:var(--blu-mid);text-decoration:none;border-bottom:1px solid rgba(27,58,143,.35)}
.fq a:hover{border-color:var(--blu-mid)}
.faq-fuss{
  max-width:860px;margin:1.6rem auto 0;text-align:center;
  font-size:.94rem;color:var(--ink-2);
}
.faq-fuss a{color:var(--blu-mid)}

/* ---------- Besuch: Karte + Infos ---------- */
.visit-grid{display:grid;grid-template-columns:1.35fr 1fr;gap:1.6rem;align-items:start}
.map{margin:0;background:#fff;border:1px solid var(--grout);box-shadow:0 14px 34px rgba(18,38,106,.09)}
.map a{display:block;line-height:0;overflow:hidden}
.map img{width:100%;height:auto;transition:transform .6s cubic-bezier(.2,.7,.3,1)}
.map a:hover img{transform:scale(1.03)}
.map figcaption{padding:1.1rem 1.3rem;display:grid;gap:.3rem;line-height:1.5}
.map figcaption strong{color:var(--blu);font-size:1rem}
.map figcaption span{color:var(--ink-2);font-size:.92rem}
.map-links{display:flex;flex-wrap:wrap;gap:1.1rem;margin-top:.5rem}
.map-links a{
  color:var(--blu-mid);text-decoration:none;font-size:.86rem;font-weight:500;
  border-bottom:1px solid rgba(27,58,143,.35);padding:.5rem 0;
}
.map-links a:hover{border-color:var(--blu-mid)}
.visit-side{display:grid;gap:1.6rem}

/* ---------- Reservierung ---------- */
.reserve{background:var(--ceramic)}
.resv{
  max-width:760px;margin:0 auto;background:#fff;
  border:1px solid var(--grout);border-top:3px solid var(--blu);
  padding:clamp(1.6rem,4vw,2.4rem);box-shadow:0 14px 34px rgba(18,38,106,.09);
}
.resv-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem 1.4rem}
.f{margin:0;display:grid;gap:.4rem}
.f-voll{grid-column:1/-1}
.f label{
  font-size:.72rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
  color:var(--blu);display:flex;gap:.5rem;align-items:baseline;
}
.f label span[aria-hidden]{color:var(--lemon-deep)}
.opt{font-weight:400;letter-spacing:.04em;text-transform:none;color:#6f665a;font-size:.78rem}
.f input,.f textarea{
  font-family:var(--body);font-size:1rem;color:var(--ink);
  padding:.8rem .9rem;min-height:48px;background:var(--ceramic);
  border:1px solid var(--grout);border-radius:2px;width:100%;
  transition:border-color .2s,box-shadow .2s,background .2s;
}
.f textarea{min-height:96px;resize:vertical;line-height:1.55}
.f input:focus,.f textarea:focus{
  outline:none;background:#fff;border-color:var(--blu-soft);
  box-shadow:0 0 0 3px rgba(74,111,212,.16);
}
.f input[aria-invalid="true"]{border-color:#a3271f;background:#fdf4f3}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.resv-recht{
  margin:1.4rem 0 0;font-size:.86rem;color:var(--ink-2);line-height:1.6;
  padding-top:1.1rem;border-top:1px solid var(--grout);
}
.resv-recht a{color:var(--blu-mid)}
.resv-aktion{display:flex;align-items:center;gap:1.2rem;flex-wrap:wrap;margin-top:1.3rem}
.resv-status{font-size:.94rem;line-height:1.5}
.resv-status.ok{color:#2c5c33;font-weight:500}
.resv-status.err{color:#a3271f;font-weight:500}
button[disabled]{opacity:.55;cursor:progress}

/* ---------- Footer ---------- */
body > footer{background:var(--blu);color:rgba(247,241,228,.8);padding-block:3.4rem 2.4rem;text-align:left}
.f-top{
  display:grid;grid-template-columns:1.5fr 1fr 1.1fr;gap:2.4rem;text-align:left;
  padding-bottom:2.2rem;border-bottom:1px solid rgba(247,241,228,.18);
}
.f-top > *{text-align:left}
.f-brand{display:flex;gap:1rem;align-items:flex-start}
.f-brand img{border-radius:3px;flex:none;box-shadow:0 2px 10px rgba(0,0,0,.28)}
.fmark{font-family:var(--display);font-style:italic;font-weight:500;font-size:1.75rem;color:var(--ceramic);margin:0;line-height:1.1}
.f-claim{margin:.35rem 0 0;font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;color:rgba(247,241,228,.55)}
body > footer h2{
  font-family:var(--body);font-size:.7rem;font-weight:600;letter-spacing:.2em;
  text-transform:uppercase;color:var(--lemon);margin:0 0 .9rem;
}
.f-nav ul{list-style:none;margin:0;padding:0;display:grid;gap:.1rem}
.f-nav a,.f-kontakt a{color:rgba(247,241,228,.82);text-decoration:none;display:inline-block;padding:.4rem 0;transition:color .2s}
.f-nav a:hover,.f-kontakt a:hover{color:var(--lemon)}
.f-kontakt address{font-style:normal;color:rgba(247,241,228,.82);line-height:1.7;margin:0 0 .5rem}
.f-zeile{margin:.1rem 0;font-size:.92rem;color:rgba(247,241,228,.6)}
.f-bottom{
  display:flex;align-items:center;justify-content:space-between;gap:1.2rem;
  flex-wrap:wrap;padding-top:1.6rem;
}
.f-recht{display:flex;gap:1.6rem;margin:0}
.f-recht a{color:rgba(247,241,228,.7);text-decoration:none;font-size:.88rem;padding:.6rem 0}
.f-recht a:hover{color:var(--lemon)}
.credit{margin:0}

@media (max-width:880px){
  .visit-grid{grid-template-columns:1fr}
  .resv-grid{grid-template-columns:1fr}
  .f-top{grid-template-columns:1fr;gap:1.8rem}
  .f-bottom{flex-direction:column;align-items:flex-start}
}

/* ---------- Besuch (alt) ---------- */
.visit{background:var(--ceramic-2)}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(272px,1fr));gap:1.5rem}
.card{
  background:#fff;padding:2rem 1.8rem;border:1px solid var(--grout);
  border-top:3px solid var(--blu);box-shadow:0 14px 34px rgba(18,38,106,.09);
}
.card h3{font-family:var(--display);font-style:italic;font-weight:600;font-size:1.4rem;color:var(--blu);margin:0 0 1.1rem}
.card p{margin:0 0 .4rem;color:#413a31;font-size:.98rem}
.card a{color:var(--blu-mid);text-decoration:none;border-bottom:1px solid rgba(27,58,143,.35)}
.card a:hover{border-color:var(--blu-mid)}
.pending{color:#9d9486;font-style:italic}
.hours{width:100%;border-collapse:collapse;font-size:.95rem}
.hours th,.hours td{padding:.45rem 0;border-bottom:1px dotted var(--grout);text-align:left}
.hours th{font-weight:500;color:#413a31}
.hours td{text-align:right;color:#8a5f06;font-weight:600}
.hours tr:last-child th,.hours tr:last-child td{border-bottom:0}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.hint{margin-top:1.2rem;padding-top:1rem;border-top:1px solid var(--grout);font-size:.9rem;color:var(--ink-2)}

/* Die frühere Fassung dieser Regel (text-align:center, eigene .fmark-Größe)
   überschrieb die maßgebliche footer-Regel weiter oben und wurde nur durch
   ".f-top > *{text-align:left}" wieder geradegebogen. Entfernt — der Fuß
   wird oben definiert. Übrig bleibt allein die Linkfarbe. */
body > footer a{color:var(--lemon);text-decoration:none}

.rv{opacity:0;transform:translateY(26px);transition:opacity .75s ease,transform .75s ease}
.rv.seen{opacity:1;transform:none}

/* Gestaffelte Reveals: Gerichte erscheinen nacheinander */
.stagger > *{opacity:0;transform:translateY(18px);transition:opacity .55s ease,transform .55s ease}
.stagger.seen > *{opacity:1;transform:none}
.stagger.seen > *:nth-child(1){transition-delay:.04s}
.stagger.seen > *:nth-child(2){transition-delay:.10s}
.stagger.seen > *:nth-child(3){transition-delay:.16s}
.stagger.seen > *:nth-child(4){transition-delay:.22s}
.stagger.seen > *:nth-child(5){transition-delay:.28s}
.stagger.seen > *:nth-child(6){transition-delay:.34s}
.stagger.seen > *:nth-child(n+7){transition-delay:.40s}

/* Gericht: Hover hebt Namen und Preis */
.dish{transition:padding-left .3s cubic-bezier(.2,.7,.3,1)}
.dish:hover{padding-left:.7rem}
.dish-name,.dish-price{transition:color .25s,transform .25s}
.dish:hover .dish-name{color:var(--blu-mid)}
.dish:hover .dish-price{transform:scale(1.06)}

/* Kennzahlen zählen hoch */
.fact b{font-variant-numeric:tabular-nums}

/* Parallax-Fries */
.frieze{background-position-x:var(--px,0px)}

.skip{
  position:absolute;left:-9999px;top:0;z-index:200;
  background:var(--blu);color:var(--ceramic);padding:.9rem 1.4rem;
  font-size:.8rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;
}
.skip:focus{left:.6rem;top:.6rem}

/* Mobile Aktionsleiste: Anrufen + Route immer erreichbar.
   Auf dem Handy sucht man unterwegs Telefonnummer und Weg — nicht die Historie. */
.bar{
  position:fixed;left:0;right:0;bottom:0;z-index:70;display:none;
  background:rgba(247,241,228,.96);backdrop-filter:blur(12px);
  border-top:1px solid var(--grout);padding:.55rem .7rem;
  padding-bottom:calc(.55rem + env(safe-area-inset-bottom));
  gap:.5rem;
}
.bar a{
  flex:1;display:flex;align-items:center;justify-content:center;gap:.45rem;
  padding:.85rem .5rem;border-radius:3px;text-decoration:none;
  font-size:.76rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
}
/* Mobile Aktionsleiste: beide Knöpfe blau gefüllt mit gelber Schrift.
   .b-map trug blaue Schrift auf blauem Grund und war dadurch unsichtbar —
   diese Regel ist mit zwei Klassen spezifischer als die allgemeine
   .btn/.b-map-Regel weiter unten und muss daher hier selbst korrigiert
   werden, statt sie unten zu überschreiben. */
.bar .b-call{background:var(--blu);color:var(--kunde-gelb)}
.bar .b-map{background:var(--blu);border:1.5px solid var(--blu);color:var(--kunde-gelb)}
@media (max-width:760px){
  .bar{display:flex}
  body{padding-bottom:4.6rem}
}


/* Footer-Links: Trefferflaeche auf 44px, ohne die Optik zu aendern (WCAG 2.5.8) */
body > footer .fmeta a,footer p a{display:inline-block;padding:.7rem .35rem;margin:-.7rem 0}

/* Die Herkunfts-Blasen bringen ihre Hoehe selbst mit (min-height:44px) und
   duerfen das negative Margin von "footer p a" NICHT erben: es zieht sie
   um 11px zusammen, waehrend die Zeile nur mit 28px Zeilenhoehe rechnet.
   Beim Umbruch auf zwei Zeilen ragten sie dadurch messbar ineinander
   (webliq bei y=3458 +44px hoch, otaku begann schon bei y=3489).
   Margin zurueckgesetzt und der Zeile echten Abstand gegeben. */
.badge{
  min-height:44px;
  margin:0;
  padding:6px 13px;
}
.credit{
  gap:8px 9px;
  row-gap:10px;
  line-height:1.2;
}


/* Scroll-Fortschritt */
.progress{
  position:fixed;top:0;left:0;height:3px;width:0;z-index:100;
  background:linear-gradient(90deg,var(--lemon),var(--lemon-deep));
  transition:width .12s linear;pointer-events:none;
}

/* Tab-Wechsel: Panel gleitet ein */
@keyframes in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* Buttons: Glanz beim Hover */
.btn{position:relative;overflow:hidden}
.btn::before{
  content:"";position:absolute;inset:0;transform:translateX(-101%);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.28),transparent);
  transition:transform .55s ease;
}
.btn:hover::before{transform:translateX(101%)}

@media (max-width:880px){
  .craft-grid,.ev-grid{grid-template-columns:1fr}
  /* Einspaltig: Der negative Rand und die Spaltenlogik von oben gelten
     hier nicht mehr — das Bild klebte sonst rechts und schrumpfte auf
     152px. Zurueck auf schlichtes Zentrieren. */
  /* Bild NICHT mehr vor den Text ziehen: Auf schmalen Schirmen stand das
     Foto ueber der Ueberschrift, die es beschriftet. Ueberschrift zuerst,
     dann das Bild. */
  .framed{transform:none}
  .framed:has(img[height="1604"]){
    /* Absolute Positionierung AUFHEBEN — sie gilt nur fuers
       Zweispalten-Layout. Blieb sie stehen, legte sich das Bild
       auf schmalen Schirmen ueber Text und Kennzahlen. */
    position:static;
    right:auto;
    top:auto;
    grid-column:auto;
    width:auto;
    height:auto;
    margin:0 auto;
    justify-content:center;
  }
  .framed:has(img[height="1604"]) img{
    width:100%;
    height:auto;
    max-width:min(72vw,340px);
    object-fit:fill;
    margin-inline:auto;
  }
  .menu{
    display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;
    background:var(--ceramic);border-bottom:1px solid var(--grout);padding:.4rem var(--edge) 1.1rem;
  }
  .menu.open{display:flex}
  .menu a{display:block;padding:.9rem 0;border-bottom:1px solid var(--grout)}
  .menu a::after{display:none}
  .burger{display:block}
  .dishes{grid-template-columns:1fr;gap:0}
  .facts{grid-template-columns:1fr}
  .ev{flex-direction:column;gap:.4rem}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .rv{opacity:1;transform:none}
  html{scroll-behavior:auto}
}

/* ============================================================
   Druckansicht
   Die Speisekarte wird ausgedruckt — von Gästen und vom Restaurant
   selbst. Ohne diese Regeln kämen nur die Antipasti aufs Papier: die
   vier anderen Reiter sind per display:none versteckt, und der Drucker
   übernimmt das. Dazu Navigation, Footer-Badges und Aufklapper, die auf
   Papier nichts verloren haben.
   ============================================================ */
@media print{
  /* Alle Reiter-Inhalte zeigen — sonst fehlen 4 von 5 Kategorien */
  .panel{display:block!important;break-inside:auto}
  .tabs{display:none!important}
  /* Aufklapper geöffnet drucken */
  details{display:block!important}
  details > summary{list-style:none}
  details > summary::after{content:""!important}
  details:not([open]) > *:not(summary){display:block!important}

  /* Bildschirm-Zubehör weglassen */
  .topbar,.bar,.progress,.frieze,.slider-ui,.faq-fuss,
  .credit,.f-nav,.map-links,form,.resv{display:none!important}

  /* Ruhiges Schwarz auf Weiß, kein Farbverbrauch */
  body{background:#fff!important;color:#000;font-size:11pt}
  .sec{padding-block:0!important}
  .cellar,.faq,.presse,.visit,.craft,.signature{background:#fff!important}
  .cellar .title,.cellar .dish-name,.cellar .course h3,.cellar .dish-desc{color:#000!important}
  .title,.course h3,.dish-name,.fq summary{color:#000!important}
  .dish-price{color:#000!important;border-color:#999!important;background:transparent!important}

  /* Umbrüche dort, wo sie Sinn ergeben */
  .course{break-after:avoid;page-break-after:avoid}
  .dish,.fq,.pf{break-inside:avoid;page-break-inside:avoid}
  section{break-before:auto}

  /* Verweise ausschreiben — auf Papier ist ein Link ohne Adresse wertlos */
  main a[href^="http"]::after{content:" (" attr(href) ")";font-size:9pt;color:#555;word-break:break-all}
  main a[href^="#"]::after{content:""}

  /* Adresse auf jede Seite */
  @page{margin:16mm}
}

/* Öffnungszeiten im Footer — auf JEDER Seite erreichbar. Vorher standen sie
   nur auf der Kontaktseite; ein Gast auf der Speisekarte fand weder Zeiten
   noch Telefonnummer. Als <table>, damit Screenreader Tag und Zeit als Paar
   vorlesen. */
.f-zeiten{border-collapse:collapse;margin:.5rem 0 0;font-size:.86rem;width:100%;max-width:19rem}
.f-zeiten th,.f-zeiten td{text-align:left;padding:.2rem 0;font-weight:400;vertical-align:top}
.f-zeiten th{color:rgba(247,241,228,.6);padding-right:.9rem;white-space:nowrap}
.f-zeiten td{color:rgba(247,241,228,.85)}



/* ---------- Hero-Schriftfarbe ----------
   Das Gelb der Speisekarte (#EAB308) — ausdrücklicher Kundenwunsch.
   Damit es auf dem hellen Grund steht statt zu verschwinden, bekommt die
   Kursivzeile eine dunkle Kontur: text-shadow als feiner Umriss. Die
   Buchstabenkanten liegen damit auf Blau, die Fläche bleibt Gelb. */
.hero h1 em{
  color:var(--kunde-gelb);
  text-shadow:
    -1px -1px 0 rgba(18,38,106,.92),  1px -1px 0 rgba(18,38,106,.92),
    -1px  1px 0 rgba(18,38,106,.92),  1px  1px 0 rgba(18,38,106,.92),
     0    2px 6px rgba(18,38,106,.32);
}
/* Eyebrow und Chips sind klein — dort trägt reines Gelb nicht. Sie
   bekommen das Gelb als Fläche, mit dunkler Schrift darauf. */
.hero .eyebrow{color:var(--blu)}
.hero .chip{
  background:var(--kunde-gelb);
  border-color:var(--kunde-gelb);
  color:var(--blu);
  font-weight:600;
}

/* ---------- Überschriften seitenweit im Kundengelb ----------
   Ausdrücklicher Kundenwunsch: das Gelb der Speisekarte (#EAB308) als
   Schriftfarbe. Auf hellem Grund trägt reines Gelb nicht (Kontrast 1,7),
   deshalb bekommen Überschriften dort dieselbe dunkle Kontur wie die
   Hero-Zeile: Buchstabenkanten auf Blau, Fläche bleibt Gelb.
   Auf den dunklen Sektionen steht das Gelb ohnehin frei — dort ist die
   Kontur nicht nötig und wird ausdrücklich zurückgenommen. */
.title,
.sec .title,
.craft h2,.signature h2,.events h2,.regionen h2,.anfahrt h2,
.feiern h2,.faq h2,.reserve h2,.visit h2,
.craft h3,.signature h3,.events h3,.anfahrt h3,.faq h3,.visit h3,
.ev h3,.reg h3,.weg h3,.step h3,.fact b{
  color:var(--kunde-gelb);
  text-shadow:
    -1px -1px 0 rgba(18,38,106,.92),  1px -1px 0 rgba(18,38,106,.92),
    -1px  1px 0 rgba(18,38,106,.92),  1px  1px 0 rgba(18,38,106,.92),
     0    2px 6px rgba(18,38,106,.30);
}

/* Auf dunklem Grund: Gelb ohne Kontur — dort steht es frei. */
.karte-dunkel .title,.wand-hell .title,.cellar .title,.wand .title,
.karte-dunkel h2,.wand-hell h2,.cellar h2,.wand h2,
.karte-dunkel h3,.wand-hell h3,.cellar h3,.wand h3,
.karte-dunkel .course,.karte-dunkel .dish-name,
.wand-hell .ev h3,.wand-hell .ablauf h3,.wand-hell .sig h3,
.wand .prinzip h3,.wand-hell .fact b{
  color:var(--kunde-gelb);
  text-shadow:none;
}

/* Eyebrow-Zeilen ebenfalls gelb. Sie sind klein und gesperrt gesetzt —
   auf hellem Grund mit Kontur, sonst ohne. */
.sec .eyebrow{
  color:var(--kunde-gelb);
  text-shadow:
    -1px -1px 0 rgba(18,38,106,.9), 1px -1px 0 rgba(18,38,106,.9),
    -1px  1px 0 rgba(18,38,106,.9), 1px  1px 0 rgba(18,38,106,.9);
}
.karte-dunkel .eyebrow,.wand-hell .eyebrow,.cellar .eyebrow,.wand .eyebrow{
  text-shadow:none;
}

/* ---------- Wortmarke, Navigation, Adresse im Kundengelb ----------
   Ergänzt die Überschriften-Regel oben: auch die Textstellen, die keine
   Überschrift sind, tragen jetzt #EAB308. Auf der hellen Keramik-Fläche
   des Kopfbereichs mit derselben dunklen Kontur wie die Überschriften. */
.brand span,.nav a,.burger,.b-adr strong,.visit .b-adr strong{
  color:var(--kunde-gelb);
  text-shadow:
    -1px -1px 0 rgba(18,38,106,.92),  1px -1px 0 rgba(18,38,106,.92),
    -1px  1px 0 rgba(18,38,106,.92),  1px  1px 0 rgba(18,38,106,.92);
}
.burger{border-color:var(--kunde-gelb)}

/* Auf dunklem Grund keine Kontur nötig. */
.karte-dunkel .b-adr strong,.wand-hell .b-adr strong,
.cellar .b-adr strong,.wand .b-adr strong{text-shadow:none}

/* ---------- Helle Knöpfe: blau gefüllt, gelbe Schrift ----------
   Kundenwunsch „Text gelb" trifft bei den hellen Knöpfen auf ein
   Lesbarkeitsproblem: Gelb auf Weiß trägt nicht (Kontrast 1,7).
   Deshalb bekommen sie den blauen Grund, den .btn--fill schon hat —
   gelb auf Blau liegt bei ~8:1 und ist damit klar lesbar.
   Der Hover setzte color:var(--ceramic) — das würde die Schrift beim
   Überfahren wieder weiß machen und wird hier mit überschrieben. */
.btn,.b-map,.btn--ink{
  background:var(--blu);
  border-color:var(--blu);
  color:var(--kunde-gelb);
  text-shadow:none;
}
.btn:hover,.btn:focus-visible,
.b-map:hover,.b-map:focus-visible,
.btn--ink:hover,.btn--ink:focus-visible{
  background:#0c1c50;
  border-color:#0c1c50;
  color:var(--kunde-gelb);
}
/* Auf dunklen Sektionen sind die Knöpfe bereits hell abgesetzt —
   dort bleibt der bestehende Umkehr-Hover (gelber Grund, blaue Schrift). */
.karte-dunkel .btn:hover,.wand-hell .btn--ink:hover{
  background:var(--kunde-gelb);
  color:var(--blu);
}

/* ---------- Wortmarke im Kundengelb ----------
   Die Wortmarke im Kopf trägt die Klasse .mark (nicht .brand) — ein
   früherer Versuch über .brand span griff deshalb ins Leere.
   Kopfbereich steht auf heller Keramik: Kontur wie bei den Überschriften.
   Im Fuß (.fmark) steht sie auf Blau und braucht keine. */
.mark span{
  color:var(--kunde-gelb);
  text-shadow:
    -1px -1px 0 rgba(18,38,106,.92),  1px -1px 0 rgba(18,38,106,.92),
    -1px  1px 0 rgba(18,38,106,.92),  1px  1px 0 rgba(18,38,106,.92);
}
.fmark{color:var(--kunde-gelb);text-shadow:none}

/* ---------- Fußbereich kompakter ----------
   Am Handy stapelten sich Wortmarke, Menü, Adresse, Zeiten und Links auf
   ~950px — fast ein ganzer Bildschirm nur für den Fuß. Die Blöcke sind
   schmal genug, um paarweise nebeneinander zu stehen. */
body > footer{padding-block:2.6rem 1.8rem}
.f-top{gap:1.8rem;padding-bottom:1.6rem}
/* Tapp-Ziele: gemessen lagen die Links bei 33-37px, der Richtwert ist 44px.
   Statt über Polsterung (die den Fuß wieder aufbläht) über min-height mit
   zentriertem Text — kostet keine zusätzliche Höhe, weil die Zeilen ohnehin
   Abstand brauchen. */
.f-nav a,.f-kontakt a{
  padding:.2rem 0;
  /* Gleicher Zeilenabstand in "Entdecken" und "Besuch": Die 44px
     Mindesthoehe bleibt als bequemes Tippziel, line-height haelt
     beide Spalten gleich dicht. */
  min-height:44px;
.f-kontakt .f-zeile{margin:0}
  line-height:1.45;
  display:flex;
  align-items:center;
}
.f-nav ul{gap:0}
.f-zeiten{margin-top:.35rem;font-size:.82rem}
.f-zeiten th,.f-zeiten td{padding:.14rem 0}
.f-brand img{width:44px;height:44px}
.fmark{font-size:1.5rem}
.f-claim{margin-top:.25rem;font-size:.72rem;letter-spacing:.13em}

@media (max-width:900px){
  /* Gemessen bei 375px: Menülinks sind max. 103px breit, Kontaktinhalte
     max. 156px — zusammen 259px von 375px. Ein starres "1fr 1fr" verschenkte
     links ~142px. "auto 1fr" gibt dem Menü seine Inhaltsbreite und den Rest
     dem Kontakt, sodass beide bequem nebeneinander passen.
     Die Zeitentabelle (338px) sprengte jeden Zweispalter und steht deshalb
     seit diesem Commit als eigener Block darunter über die volle Breite. */
  .f-top{
    /* 1fr 1fr statt auto 1fr: Mit "auto" nahm die erste Spalte so viel
       Platz wie ihr breitester Inhalt und schnitt die Navigation rechts
       ab ("Spezialitäte…"). */
    grid-template-columns:1fr 1fr;
    gap:1.5rem 1.4rem;
    align-items:start;
  }
    .f-nav a{font-size:.94rem;line-height:1.9}
  .f-brand{grid-column:1 / -1;align-items:center}
  .f-zeitenblock{
    grid-column:1 / -1;
    padding-top:1rem;
    border-top:1px solid rgba(247,241,228,.15);
  }
  /* Die Zeiten sind kurz genug für zwei Paare nebeneinander — halbiert
     die Tabellenhöhe von ~130px auf ~70px. */
  .f-zeiten{
    max-width:none;
    display:grid;
    grid-template-columns:auto 1fr;
    gap:.32rem .9rem;
    font-size:.84rem;
  }
  .f-zeiten td{white-space:nowrap}
  .f-zeiten tbody{display:contents}
  .f-zeiten tr{display:contents}
  .f-zeiten th{padding-right:.4rem}
}
@media (max-width:360px){
  /* Sehr schmal: Zeiten wieder einspaltig, sonst brechen die Paare um. */
  .f-zeiten{grid-template-columns:auto 1fr}
}

/* Zeitenblock: auf breiten Schirmen sitzt er in der dritten Spalte beim
   Kontakt, am Handy (siehe 900px-Regel) über die volle Breite darunter. */
.f-zeitenblock{margin-top:.6rem}

/* ---------- Footer: Leerfläche unter der Wortmarke nutzen ----------
   Gemessen: .f-brand trug nur Logo + Namenszug (49px) und wurde von der
   Navigationsspalte auf 253px gezogen — 204px Leerfläche. Der Zeitenblock
   stand als VIERTES Kind eines Dreispalters und rutschte deshalb in eine
   eigene Zeile darunter, direkt neben diesen Leerraum.

   Statt Abstände zu verkleinern (behandelt das Symptom) wandert der
   Zeitenblock in die erste Spalte unter die Wortmarke: Er füllt den Raum,
   der ohnehin da war, und der Fuß verliert eine ganze Zeile.

   Gilt nur für Desktop — der Mobil-Zweig (max-width:640px) legt den Block
@media (min-width:641px){
  /* KEIN Zeilenraster.

     Denkfehler der Vorversuche: `grid-template-rows:min-content` heißt nicht
     "so hoch wie das kleinste Element", sondern "so hoch wie das GRÖSSTE der
     Zeile". Marke und Nav lagen in Zeile 1, also war sie stets 224px hoch —
     die Öffnungszeiten darunter starteten entsprechend tief, dazwischen
     klaffte Leerraum (gemessen 178px auf Desktop).

     Jetzt stehen Marke und Zeiten in EINER Rasterzelle und stapeln sich
     per Flex. Ohne zweite Zeile gibt es keine Fremdhöhe, auf die sie
     warten könnten. */
  .f-top{
    grid-template-columns:1.5fr 1fr 1.1fr;
    align-items:start;
  }
  .f-spalte-links{grid-column:1;display:flex;flex-direction:column;gap:.85rem}
  .f-nav{grid-column:2}
  .f-kontakt{grid-column:3}
  .f-zeitenblock{margin-top:0}
}


/* ---------- Kontrast-Nachzug in der Feiern-Sektion ----------
   Beim Messen des Musterwechsels aufgefallen, aber älteren Datums:

   1) Die Ablaufliste (.ablauf) steht als HELLE Karte innerhalb der dunklen
      .feiern-Sektion. Die seitenweite Gelb-Regel färbte ihre h3 gelb und
      der Ausschluss ".karte-dunkel h3 {text-shadow:none}" nahm zugleich die
      Kontur weg — Gelb auf Creme ergab Kontrast 1,70. Auf heller Karte
      gehört die Überschrift ins Tintenblau, nicht ins Gelb.

   2) Der Hinweisblock (.feier-hinweis) erbte die dunkle Grundschrift statt
      der hellen Sektionsfarbe: Grau auf Dunkelblau, Kontrast 1,95. */

/* Helle Karten in der dunklen Sektion: Überschrift blau, ohne Kontur. */
.feiern .ablauf h3,
.feiern .ablauf li h3{
  color:var(--blu);
  text-shadow:none;
}
.feiern .ablauf p{color:#3f3a33}

/* Der Kommentar hier behauptete "dunkler Grund" — .feiern hat aber
   background:var(--ceramic-2), also HELL. Die helle Schrift lag dadurch
   bei Kontrast 1,09 und war praktisch unsichtbar. */
.feiern .feier-hinweis p{color:#413a31}
.feiern .feier-hinweis strong{color:#7a5f06}

/* ---------- Kachel im Footer ----------
   Auf Wunsch zurück: Der Footer bleibt blau, bekommt aber wieder die
   Kachel-Struktur, damit er nicht als glatte Fläche abbricht.
   Kein Lichtschein, kein Verlauf — nur die Textur. */
body > footer{position:relative;overflow:hidden}
body > footer::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:url("az_corner.webp") repeat;background-size:210px;
  opacity:.055;
}
body > footer > *{position:relative;z-index:1}

/* ---------- Karte auf der Kontaktseite: volle Breite ----------
   Vorher teilte sich die Karte die Zeile mit den Kontaktdaten (1.35fr 1fr)
   und wurde nur ~420px breit — zu klein und bei doppelter Pixeldichte
   unscharf. Jetzt liegt sie über die ganze Breite, die Kontaktkarten
   darunter. Die Karte ist SVG, also in jeder Größe scharf. */
.visit-grid{grid-template-columns:1fr;gap:1.8rem}
.visit-grid > .map{order:-1}
/* Die .card-Blöcke (Kontakt, Öffnungszeiten) stehen jetzt UNTER der Karte
   nebeneinander statt daneben gestapelt. */
/* Kontakt und Öffnungszeiten stehen nebeneinander, nicht untereinander */
.visit-grid > .card{min-width:0}
@media (min-width:760px){
  .visit-grid{grid-template-columns:1fr 1fr}
  .visit-grid > .map{grid-column:1 / -1}
}

/* ================= Footer folgt der letzten Sektion =================
   Grundregel: Blau darf nicht auf Blau enden.

   Endet eine Seite mit einer dunklen Sektion (speisekarte, weine,
   restaurant, events), wird der Footer HELL — Keramik statt Blau.
   Endet sie hell (index, reservieren, kontakt), bleibt der Footer blau.
   So entsteht am Seitenende immer ein Farbwechsel, ohne dass etwas
   dazwischengeschoben werden muss.

   ~ statt +: zwischen main und footer liegt <nav class="bar">.
   body > footer, NICHT nur footer: .quote footer ist die Quellenangabe
   unter Zitaten — die bekam sonst Hintergrund und Padding des Seitenfußes
   und stand als blauer Kasten mitten im Text. */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer,
main:has(> section:last-of-type.cellar) ~ body > footer,
main:has(> section:last-of-type.wand-hell) ~ body > footer{
  background:var(--ceramic-2);
  color:#4a4238;
  border-top:1px solid var(--grout);
}

/* Kachel-Struktur: auf hellem Grund dunkel statt aufgehellt */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer::before,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer::before,
main:has(> section:last-of-type.cellar) ~ body > footer::before,
main:has(> section:last-of-type.wand-hell) ~ body > footer::before{
  opacity:.045;
}

/* Sämtliche Textfarben spiegeln — auf Creme braucht es dunkle Schrift */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .fmark,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .fmark,
main:has(> section:last-of-type.cellar) ~ body > footer .fmark,
main:has(> section:last-of-type.wand-hell) ~ body > footer .fmark{
  color:var(--blu);
  text-shadow:none;
}
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-claim,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-claim,
main:has(> section:last-of-type.cellar) ~ body > footer .f-claim,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-claim,
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-zeile,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-zeile,
main:has(> section:last-of-type.cellar) ~ body > footer .f-zeile,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-zeile,
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-zeiten th,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-zeiten th,
main:has(> section:last-of-type.cellar) ~ body > footer .f-zeiten th,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-zeiten th{
  color:#655c4d;
}
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-kontakt address,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-kontakt address,
main:has(> section:last-of-type.cellar) ~ body > footer .f-kontakt address,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-kontakt address,
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-zeiten td,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-zeiten td,
main:has(> section:last-of-type.cellar) ~ body > footer .f-zeiten td,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-zeiten td{
  color:#4a4238;
}
main:has(> section:last-of-type.karte-dunkel) ~ body > footer a,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer a,
main:has(> section:last-of-type.cellar) ~ body > footer a,
main:has(> section:last-of-type.wand-hell) ~ body > footer a,
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-nav a,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-nav a,
main:has(> section:last-of-type.cellar) ~ body > footer .f-nav a,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-nav a,
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-kontakt a,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-kontakt a,
main:has(> section:last-of-type.cellar) ~ body > footer .f-kontakt a,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-kontakt a,
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .f-recht a,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .f-recht a,
main:has(> section:last-of-type.cellar) ~ body > footer .f-recht a,
main:has(> section:last-of-type.wand-hell) ~ body > footer .f-recht a{
  color:var(--blu);
}
main:has(> section:last-of-type.karte-dunkel) ~ body > footer a:hover,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer a:hover,
main:has(> section:last-of-type.cellar) ~ body > footer a:hover,
main:has(> section:last-of-type.wand-hell) ~ body > footer a:hover{
  color:#b8890c;
}

/* ---------- Nachtrag: übersehene Elemente im hellen Footer ----------
   Beim Spiegeln der Textfarben hatte ich nur p/a/td/th geprüft und
   h2, span und b ausgelassen. Gemessen lagen sie bei 1,1 bis 1,35 —
   praktisch unlesbar. */

/* Spalten-Überschriften: waren Hellgelb (1,35) */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer h2,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer h2,
main:has(> section:last-of-type.cellar) ~ body > footer h2,
main:has(> section:last-of-type.wand-hell) ~ body > footer h2{
  color:#7a5f06;
}

/* "Erstellt mit" / "von": waren Creme auf Creme (1,1) */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .credit-word,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .credit-word,
main:has(> section:last-of-type.cellar) ~ body > footer .credit-word,
main:has(> section:last-of-type.wand-hell) ~ body > footer .credit-word{
  color:#655c4d;
}

/* Herkunftsvermerke: Text war Hellgelb bzw. Hellblau (1,33-1,35) */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .badge b,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .badge b,
main:has(> section:last-of-type.cellar) ~ body > footer .badge b,
main:has(> section:last-of-type.wand-hell) ~ body > footer .badge b{
  color:var(--blu);
}
main:has(> section:last-of-type.karte-dunkel) ~ body > footer .badge,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer .badge,
main:has(> section:last-of-type.cellar) ~ body > footer .badge,
main:has(> section:last-of-type.wand-hell) ~ body > footer .badge{
  background:rgba(18,38,106,.06);
  border-color:rgba(18,38,106,.18);
}

/* Die Kachel trägt auf hellem Grund viel stärker auf als auf Blau —
   das Ornament stand vor dem Text. Deutlich zurückgenommen. */
main:has(> section:last-of-type.karte-dunkel) ~ body > footer::before,
main:has(> section:last-of-type.wand:not(.kueche)) ~ body > footer::before,
main:has(> section:last-of-type.cellar) ~ body > footer::before,
main:has(> section:last-of-type.wand-hell) ~ body > footer::before{
  opacity:.022;
}

/* ================= Zwei dunkle Sektionen in Folge aufbrechen =========
   Grundregel wie beim Footer: dunkel darf nicht auf dunkel folgen.
   Von zwei aufeinanderfolgenden dunklen Sektionen wird die ZWEITE hell.
   Farbabstufung reicht nicht — es braucht den echten Wechsel. */
.karte-dunkel + .karte-dunkel,
.wand + .wand,
.wand-hell + .karte-dunkel,
.karte-dunkel + .wand-hell,
.cellar + .karte-dunkel,
.wand + .karte-dunkel,
.karte-dunkel + .wand{
  background:var(--ceramic-2);
  color:#413a31;
}
/* Kachel auf hellem Grund dunkel statt aufgehellt, deutlich zurückgenommen */
.karte-dunkel + .karte-dunkel::before,
.wand + .wand::before,
.wand-hell + .karte-dunkel::before,
.karte-dunkel + .wand-hell::before,
.cellar + .karte-dunkel::before,
.wand + .karte-dunkel::before,
.karte-dunkel + .wand::before{
  filter:none;
  opacity:.04;
}
/* Lichtschein der dunklen Sektion entfällt */
.wand + .wand::after,
.cellar + .karte-dunkel::after,
.wand + .karte-dunkel::after{
  background:none;
}
/* Textfarben spiegeln */
.karte-dunkel + .karte-dunkel .title,.wand + .wand .title,
.wand-hell + .karte-dunkel .title,.karte-dunkel + .wand-hell .title,
.cellar + .karte-dunkel .title,.wand + .karte-dunkel .title,.karte-dunkel + .wand .title,
.karte-dunkel + .karte-dunkel h2,.wand + .wand h2,
.wand-hell + .karte-dunkel h2,.karte-dunkel + .wand-hell h2,
.cellar + .karte-dunkel h2,.wand + .karte-dunkel h2,.karte-dunkel + .wand h2,
.karte-dunkel + .karte-dunkel h3,.wand + .wand h3,
.wand-hell + .karte-dunkel h3,.karte-dunkel + .wand-hell h3,
.cellar + .karte-dunkel h3,.wand + .karte-dunkel h3,.karte-dunkel + .wand h3{
  color:var(--blu);
  text-shadow:none;
}
.karte-dunkel + .karte-dunkel .title em,.wand + .wand .title em,
.wand-hell + .karte-dunkel .title em,.karte-dunkel + .wand-hell .title em,
.cellar + .karte-dunkel .title em,.wand + .karte-dunkel .title em,.karte-dunkel + .wand .title em,
.karte-dunkel + .karte-dunkel .eyebrow,.wand + .wand .eyebrow,
.wand-hell + .karte-dunkel .eyebrow,.karte-dunkel + .wand-hell .eyebrow,
.cellar + .karte-dunkel .eyebrow,.wand + .karte-dunkel .eyebrow,.karte-dunkel + .wand .eyebrow{
  color:#7a5f06;
  text-shadow:none;
}
.karte-dunkel + .karte-dunkel p,.wand + .wand p,
.wand-hell + .karte-dunkel p,.karte-dunkel + .wand-hell p,
.cellar + .karte-dunkel p,.wand + .karte-dunkel p,.karte-dunkel + .wand p,
.karte-dunkel + .karte-dunkel .lede,.wand + .wand .lede,
.wand-hell + .karte-dunkel .lede,.karte-dunkel + .wand-hell .lede,
.cellar + .karte-dunkel .lede,.wand + .karte-dunkel .lede,.karte-dunkel + .wand .lede,
.karte-dunkel + .karte-dunkel td,.wand + .wand td,
.cellar + .karte-dunkel td,.wand + .karte-dunkel td,
.karte-dunkel + .karte-dunkel .dish-desc,.cellar + .karte-dunkel .dish-desc{
  color:#413a31;
}
/* Karten/Kacheln in der umgefärbten Sektion: weiß mit Rahmen */
.karte-dunkel + .karte-dunkel .ev,.wand + .wand .ev,
.wand-hell + .karte-dunkel .ev,.karte-dunkel + .wand-hell .ev,
.cellar + .karte-dunkel .reg,.wand + .karte-dunkel .ev,
.karte-dunkel + .karte-dunkel .fact,.wand + .wand .fact,
.wand-hell + .karte-dunkel .fact,.karte-dunkel + .wand-hell .fact,
.wand + .wand .prinzip,.karte-dunkel + .karte-dunkel .reg,
.wand-hell + .karte-dunkel .ablauf li,.karte-dunkel + .wand-hell .ablauf li{
  background:#fff;
  border:1px solid var(--grout);
  box-shadow:0 2px 10px rgba(18,38,106,.06);
}
.karte-dunkel + .karte-dunkel .dish-name,.cellar + .karte-dunkel .dish-name,
.karte-dunkel + .karte-dunkel .course,.cellar + .karte-dunkel .course{
  color:var(--blu);
}
.karte-dunkel + .karte-dunkel .dish-price,.cellar + .karte-dunkel .dish-price{
  color:#7a5f06;
}

/* ---------- Restaurant: Küche-Sektion hell ----------
   presse und kueche waren beide blaue Kachelflächen direkt untereinander.
   kueche wird hell — die .prinzip-Karten darin sind ohnehin weiß mit
   Rahmen und funktionieren auf Creme. presse bleibt die eine blaue
   Fläche der Seite. Damit endet restaurant hell -> Footer bleibt blau
   (in den :has-Regeln oben per :not(.kueche) ausgenommen). */
.kueche.wand{background:var(--ceramic-2)}
.kueche.wand::before{filter:none;opacity:.05}
.kueche.wand::after{background:none}
.kueche .title{color:var(--blu)}
.kueche .title em{color:#b8890c}
.kueche .eyebrow{color:#7a5f06}
.kueche .lede,.kueche > .wrap > p{color:#413a31}

/* ---------- Kontakt: Kontakt + Öffnungszeiten nebeneinander ----------
   Die zwei .card-Blöcke liegen in .visit-side — mein früherer Selektor
   .visit-grid > .card ging deshalb ins Leere. */
@media (min-width:760px){
  .visit-side{display:grid;grid-template-columns:1fr 1fr;gap:1.6rem;align-items:start}
}

/* ---------- Zitat-Quellenangabe ----------
   Bekam durch die generische footer-Regel Grund und Innenabstand des
   Seitenfußes (der "blaue Kasten"). Nach dem Scoping oben wieder die
   kleine Zeile — auf Wunsch zentriert. */
.quote footer{background:transparent;padding-block:0;text-align:center}

/* ---------- Angebote (Mittagstisch, Außer Haus, Daydrinking) ---------- */
.angebote{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));
  gap:1.2rem;margin-bottom:2.4rem}
.ang{background:rgba(255,255,255,.07);border:1px solid rgba(234,179,8,.28);
  border-top:3px solid var(--kunde-gelb);padding:1.4rem 1.3rem;display:flex;
  flex-direction:column;gap:.5rem}
.ang-titel{font-family:var(--display);font-size:1.3rem;font-weight:600;
  color:var(--kunde-gelb);margin:0;letter-spacing:.02em}
.ang-text{margin:0;font-size:.95rem;color:rgba(247,241,228,.82);line-height:1.6;flex:1}
.ang-wert{margin:0;font-size:1.5rem;font-weight:700;color:var(--ceramic);line-height:1.2}
.ang-wert span{display:block;font-size:.8rem;font-weight:400;
  color:rgba(247,241,228,.65);letter-spacing:.04em;margin-top:.15rem}

/* ---------- Social-Buttons im Footer ----------
   Die Logos tragen ihre Markenfarben, deshalb KEIN eigener Rahmen und
   keine Einfärbung — ein zusätzlicher Kreis um ein Logo, das selbst
   schon rund bzw. abgerundet ist, wirkt doppelt gemoppelt.

   Sitzen linksbündig unter der Claim-Zeile, an derselben Textkante wie
   Wortmarke und "ENOTECA · TRATTORIA". Klickfläche 40x40 über Padding,
   damit das Fingermaß stimmt, ohne die Logos aufzublähen. */
.f-social{display:flex;gap:.5rem;margin:.85rem 0 0;align-items:center}
.f-social a{
  display:grid;place-items:center;
  width:40px;height:40px;margin:-7px;      /* Klickfläche ohne Layout-Sprung */
  border-radius:8px;
  transition:transform .2s,opacity .2s;
}
.f-social a:hover,.f-social a:focus-visible{transform:translateY(-2px);opacity:.85}
.f-social a:focus-visible{outline:2px solid var(--kunde-gelb);outline-offset:2px}
.f-social svg{display:block;filter:drop-shadow(0 1px 3px rgba(0,0,0,.22))}

/* Spendenhinweis unter der Kaffee-Überschrift (aus Speisekarte v13) */
.kaffee-hinweis{
  margin:-.4rem 0 1.1rem;font-size:.92rem;
  color:rgba(247,241,228,.72);
}
.kaffee-hinweis strong{color:var(--kunde-gelb);font-weight:600}
.terrasse .kaffee-hinweis{color:#5f574a}
.terrasse .kaffee-hinweis strong{color:#7a5f06}

/* ---------- Footer: Leerraum unter den Spalten schließen ----------
   Die 44px-Mindesthöhe je Link (Tap-Ziel) summiert sich bei 5 Nav-
   Einträgen auf 220px, während die Markenspalte nach den Social-Icons
   endet — darunter klaffte eine leere Fläche. 44px sind ein TOUCH-
   Richtwert; auf Zeigergeräten reicht Polsterung.

   Zusätzlich rücken die Spalten oben zusammen (align-items:start statt
   Dehnung) und die Öffnungszeiten schließen direkt an die Marke an. */
@media (hover:hover) and (pointer:fine){
  body > footer .f-nav a,
  body > footer .f-kontakt a{
    min-height:0;
    padding:.32rem 0;
  }
}
/* Der Leerraum kam nicht vom Raster (Marke oben, Zeiten darunter in
   Spalte 1 ist so gewollt), sondern von der Höhendifferenz: .f-brand ist
   ~108px, die Nav-Spalte daneben ~224px. Der Abstand zwischen Marke und
   Öffnungszeiten war zusätzlich auf 1.4rem gesetzt.

   Fix: Zeiten rücken direkt unter die Marke, die erste Rasterzeile
   bekommt nur so viel Höhe wie die Marke braucht. */
/* Kein zusätzlicher Außenabstand: Der Abstand zwischen Social-Icons und
   Öffnungszeiten kommt bereits aus der Flex-Lücke von .f-spalte-links.
   Beides zusammen ergab 32px und zog den Footer unnötig in die Höhe. */
@media (min-width:641px){
  body > footer .f-zeitenblock{margin-top:0}
}

/* ---------- Regionen-Karten: heller Grund braucht dunklen Text ----------
   Die Sektion trägt BEIDE Klassen: .regionen setzt den hellen Keramikgrund
   (Zeile 356), .karte-dunkel setzt helle Schrift für dunklen Grund
   (Zeile 534/535). Zusammen ergab das hell auf hell — der
   Beschreibungstext lag bei Kontrast 1,00, war also exakt unsichtbar.

   Die Grundfarbe gewinnt, also folgen die Textfarben ihr. */
.regionen.karte-dunkel .reg{
  background:var(--ceramic);
  border:1px solid var(--grout);
}
.regionen.karte-dunkel .reg h3{color:var(--blu)}
.regionen.karte-dunkel .reg-weine{color:#7a5f06}
.regionen.karte-dunkel .reg p:last-child{color:#4a4238}
.regionen.karte-dunkel .title{color:var(--blu)}
.regionen.karte-dunkel .title em{color:#7a5f06}
.regionen.karte-dunkel .eyebrow{color:#7a5f06}
.regionen.karte-dunkel .lede{color:#413a31}
.regionen.karte-dunkel .wein-hinweis p{color:#413a31}

/* ---------- Kontrast-Nachzug: gemessene Unterschreitungen ----------
   Alle Werte gegen den TATSÄCHLICHEN Hintergrund gemessen (Alpha-Ebenen
   gestapelt), Grenzen nach WCAG: 4,5 für normalen Text, 3,0 ab 24px.

   .step .n   Schrittziffern i/ii/iii — 2,52 bei 38px (Grenze 3,0). Sie
              tragen Bedeutung (Reihenfolge), sind also kein reines Dekor.
   .presse a  Quellenlink "Alzeyer Zeitung" — 3,75 bei 11px
   .legal code / .code  URL-Beispiele und Fehlercode — 2,28 bzw. 4,13 */
.step .n{color:#8a6a07}
/* Der Quellenlink steht in zwei verschiedenen Umgebungen:
   - blockquote.quote > footer  auf HELLEM Grund (craft-Sektion)
   - figure.zitat-gross .z-quelle auf BLAUEM Grund (presse-Sektion)
   Deshalb zwei Richtungen statt einer Farbe. */
.quote footer a{color:#2f4a9e}
.zitat-gross .z-quelle{color:var(--kunde-gelb)}

/* ---------- Küche-Sektion: Schlussabsatz nach dem Hellzug ----------
   .kueche trägt weiterhin die Klasse .wand, deren Regeln (Zeile 598/599)
   helle Schrift für dunklen Grund setzen. Seit die Sektion auf
   --ceramic-2 umgestellt ist, lag der Text bei 1,55 (gelb auf creme).
   Gemessen mobil wie Desktop. */
.kueche .kueche-schluss p{color:#413a31}
.kueche .kueche-schluss a{
  color:#2f4a9e;
  border-bottom-color:rgba(47,74,158,.4);
}

/* ================= Kontaktseite: Karten aufgeräumt =================
   Befund am gerenderten Zustand:
   - .visit h3 gab den Kartenüberschriften eine dunkle Kontur (gedacht
     für gelbe Schrift auf farbigem Grund). Auf weißen Karten wirkte das
     schmutzig.
   - Die Kontaktdaten standen als Absätze ("Telefon 06731…") ohne
     Struktur, Bezeichnung und Wert liefen ineinander.
   - Beide Karten waren unterschiedlich hoch, darunter blieb Leerraum. */

/* Überschriften auf weißen Karten: kein Konturschatten, kein Gelb. */
.visit .card h3{
  color:var(--blu);
  text-shadow:none;
  font-size:1.28rem;
  margin:0 0 1.2rem;
  padding-bottom:.7rem;
  border-bottom:1px solid var(--grout);
}

/* Kontaktdaten als zweispaltige Liste: Bezeichnung links in ruhigem
   Grau, Wert rechtsbündig — dieselbe Anmutung wie die Öffnungszeiten
   daneben, damit die beiden Karten als Paar lesen. */
.kontaktliste{
  display:grid;
  grid-template-columns:auto 1fr;
  gap:.5rem 1.2rem;
  margin:0;
  align-items:baseline;
}
.kontaktliste dt{
  color:#6f665a;
  font-size:.9rem;
}
.kontaktliste dd{
  margin:0;
  text-align:right;
}
.kontaktliste dd a{
  color:var(--blu-mid);
  text-decoration:none;
  border-bottom:1px solid rgba(27,58,143,.28);
  transition:border-color .2s;
}
.kontaktliste dd a:hover{border-color:var(--blu-mid)}

/* Beide Karten auf gleiche Höhe, Hinweiszeile jeweils unten bündig. */
/* Die Seitenspalte saß nur in Spalte 1 des äußeren Rasters (584px von
   1100px) — die zweite Spalte blieb leer, die Infokarten dadurch schmal
   und schmaler als die Karte darüber. Jetzt über die volle Breite. */
.visit-grid > .visit-side{grid-column:1 / -1}
.visit-side{align-items:stretch}
.visit .card{
  display:flex;
  flex-direction:column;
}
.visit .card .hint{margin-top:auto}

/* Die Kartengrafik und die Infokarten als eine Einheit: gleicher Rahmen,
   gleicher Schatten, gleiche blaue Oberkante. */
.map{border-top:3px solid var(--blu)}

/* ---------- Kartenüberschriften auf hellem Grund ----------
   Gemessen: gelbe Schrift (#eab308) auf Keramik liegt bei Kontrast
   1,55-1,70. Lesbar wird sie nur durch die dunkle Kontur — und die
   macht aus der Schrift einen unruhigen Umriss statt klarer Buchstaben.
   Auf FARBIGEM Grund ist die Kontur richtig (Kundenwunsch), auf hellen
   Karten nicht.

   Betroffen: .fact (Start/Restaurant), .step (Restaurant), .weg (Kontakt).
   Alle drei liegen auf --ceramic bzw. --ceramic-2. */
.fact b,
.step h3,
.weg h3{
  color:var(--blu);
  text-shadow:none;
}
/* Die Schrittziffern (i, ii, iii) bleiben golden — sie sind Schmuck,
   nicht Text, und stehen ohne Kontur ausreichend ab. */
.step .n{text-shadow:none}

/* ================= Sektion mit Foto statt Fliesenmuster ==============
   Zusatzklasse zu .wand-hell, NICHT als Ersatz: so gelten alle
   Dunkel-Farbregeln von .wand-hell unverändert weiter. Ein Austausch der
   Klasse hätte 54 Regeln umschreiben müssen — genau das hat schon einmal
   die halbe Datei zerschossen.

   Achtung: .wand-hell belegt ::before bereits mit dem Fliesenmuster und
   setzt einen eigenen background. Beides muss hier überschrieben werden —
   das Muster wird zum Schleier, der background zum Foto. */
.wand-foto{
  /* Einzeleigenschaften statt Kurzform: In der Kurzform verwirft der Browser
     bei einem Problem mit der Variablen die GANZE Deklaration — dann fehlt
     nicht nur das Bild, sondern auch die Grundfarbe. */
  background-color:#0d2033;
  /* Pfad relativ zu DIESER Datei (assets/) — nicht zum HTML. */
  background-image:url("innenraum.jpg");
  background-position:center;
  background-size:cover;
  background-repeat:no-repeat;
}
.wand-foto::before{
  /* Ersetzt das Fliesenmuster durch den Schleier. Dunkler Verlauf ist
     Pflicht, nicht Deko: an der HELLSTEN Fotostelle fällt Gelb sonst auf
     1,88 (nötig 3,0). Die .67 sind gemessen — nicht ohne erneute Messung
     aufhellen. */
  background:linear-gradient(180deg,rgba(8,26,45,.80),rgba(8,26,45,.67) 45%,rgba(8,26,45,.80));
  background-size:auto;
  opacity:1;
}

/* ================= Kontaktsektion mit Außenansicht ===================
   Die Fassade als Grund, die Karte als Schaukasten-Tafel darüber.
   Die Vorlage ist nur 275px breit gewesen — der Weichzeichner ist deshalb
   Absicht, nicht Deko: hochskaliert wäre sie sonst sichtbar verpixelt. */
.visit--foto{
  position:relative;
  background:#1b2a3d;
  isolation:isolate;
  /* Schneidet den Ueberstand der Blur-Ebene ab — sonst ragt das Foto in
     die Nachbarsektionen. */
  overflow:hidden;
  padding-block:clamp(3rem,7vw,5.5rem);
}
.visit--foto::before{
  content:"";
  position:absolute;
  /* NEGATIVES inset statt transform:scale — die Blur-Ebene ragt echt ueber
     die Sektionskante hinaus. scale() skaliert um die Mitte, die Kante
     bleibt Kante: dort hatte der Weichzeichner keine Pixel zum Verrechnen
     und hinterliess oben einen hellen Saum. Der Ueberstand muss groesser
     sein als der Blur-Radius. */
  inset:-24px;
  z-index:-2;
  background:url("aussen.jpg") center/cover no-repeat;
  filter:blur(2.5px) saturate(.95);
}
.visit--foto::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  /* Heller als zuvor (war .62/.46/.66) — die Fassade soll wirken.
     ACHTUNG: Der Himmel im Foto ist fast reinweiss (254,255,252). Rein
     rechnerisch traegt Gelb hier NICHT (2,0 statt 3,0 noetig) — die
     Ueberschrift haelt allein durch ihren Textschatten unten. Nicht weiter
     aufhellen, ohne den Schatten mitzudenken. */
  background:linear-gradient(180deg,rgba(12,26,42,.50),rgba(12,26,42,.34) 40%,rgba(12,26,42,.56));
}
.visit--foto > .wrap{position:relative;z-index:1}
.visit--foto .center .title{
  color:var(--ceramic);
  /* Der Himmel oben im Foto ist hell — dort fällt das Gelb auf 2,27
     (nötig 3,0). Statt den ganzen Grund abzudunkeln bekommt nur die
     Überschrift einen weichen dunklen Halt. */
  /* Traegt die Ueberschrift auf dem hellen Himmel: enger Kern gegen die
     Buchstabenkante, weiter Hof gegen die Flaeche. */
  text-shadow:0 1px 3px rgba(4,14,26,.95),0 2px 14px rgba(4,14,26,.9),0 0 44px rgba(4,14,26,.85);
}
.visit--foto .center .title em{color:var(--kunde-gelb)}
/* Umriss-Button hat dunkle Schrift für hellen Grund — auf dem Foto
   unsichtbar (gemessen 1,05). */
/* Umriss-Button steht direkt auf dem Foto und haette dort nur 1,77
   Kontrast. Ein halbtransparenter dunkler Grund gibt ihm eine eigene
   Flaeche — damit liegt Gelb wieder bei ueber 7. */
.visit--foto .btn--ink{
  border-color:var(--kunde-gelb);
  color:var(--kunde-gelb);
  background:rgba(9,20,36,.82);
  backdrop-filter:blur(2px);
}
.visit--foto .btn--ink:hover{background:var(--kunde-gelb);color:var(--blu)}

/* Die Tafel bringt Trapezform und Messingrahmen im SVG selbst mit —
   hier nur Größe und der Schatten, der sie von der Wand abhebt.
   Kein clip-path: der würde den Rahmen abschneiden. */
.map--tafel{
  width:min(52vw,620px);
  margin:0 auto;
  background:none;
  border:0;
  border-radius:0;
  filter:drop-shadow(0 18px 26px rgba(0,10,20,.55));
}
.map--tafel img{display:block;width:100%;height:auto}
.map--tafel figcaption{display:none}
@media (max-width:900px){
  .map--tafel{width:100%}
}

/* Erste Sektion einer Seite: weniger Luft nach oben. Der grosse Abstand
   aus .sec trennt zwei Sektionen voneinander — direkt unter der Navigation
   wirkt er als leere Flaeche. Unten bleibt er unveraendert. */
main > .sec:first-child{
  padding-top:clamp(2rem,4.5vw,3.4rem);
}
/* Ausgenommen: Sektionen mit Bildhintergrund brauchen die Hoehe, damit
   das Foto nicht zum Streifen wird. */
main > .sec:first-child.wand-foto,
main > .sec:first-child.visit--foto{
  padding-top:clamp(3rem,7vw,5.5rem);
}

/* ================= Footer-Klappmenues (mobil) ========================
   Die Klasse .f-klappbar setzt site.js nur auf schmalen Schirmen. Ohne JS
   bleibt alles offen sichtbar — Inhalt darf nie von einem Skript abhaengen. */
@media (max-width:640px){
  .f-klappbar{grid-column:1 / -1}
  .f-klappbar h2{
    position:relative;
    cursor:pointer;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:1rem;
    margin:0;
    padding:.85rem 0;
    border-top:1px solid rgba(247,241,228,.15);
    user-select:none;
  }
  /* Pfeil aus zwei Strichen — dreht sich beim Aufklappen. */
  .f-klappbar h2::after{
    content:"";
    width:.55rem;height:.55rem;
    border-right:2px solid rgba(247,241,228,.6);
    border-bottom:2px solid rgba(247,241,228,.6);
    transform:rotate(45deg) translateY(-2px);
    transition:transform .25s ease;
    flex:0 0 auto;
  }
  .f-klappbar.f-offen h2::after{transform:rotate(-135deg) translateY(-2px)}
  /* Zugeklappt: alles ausser der Ueberschrift verbergen. */
  .f-klappbar > *:not(h2){display:none}
  .f-klappbar.f-offen > *:not(h2){display:block}
  .f-klappbar.f-offen ul{display:block}
  /* Aufgeklappt haben die Bloecke die volle Breite — kein Abschneiden mehr. */
  .f-klappbar .f-zeile,
  .f-klappbar address{max-width:none}
  .f-klappbar:last-of-type h2{border-bottom:1px solid rgba(247,241,228,.15)}
}


/* ================= Pizza-Cursor ======================================
   Das freigestellte Pizzastueck als Mauszeiger. Als Data-URI eingebettet,
   damit beim Zeigen kein zusaetzlicher Abruf noetig ist.

   Wichtig: Der Rueckfallwert nach dem Komma ist Pflicht — lehnt ein Browser
   das Bild ab (zu gross, Format, Richtlinie), gilt sonst gar kein Cursor.
   Die Zahlen dahinter sind der Klickpunkt: hier die Spitze rechts (38 2),
   damit gezeigt wird, worauf die Spitze deutet. */
body{
  cursor:url("data:image/png;base64,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") 53 19, auto;
}
/* Auf Klickzielen bleibt die Hand — sonst weiss niemand, was anklickbar ist. */
a,button,summary,[role="button"],input,textarea,select,label{
  cursor:url("data:image/png;base64,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") 53 19, pointer;
}
input[type="text"],input[type="email"],input[type="tel"],textarea{
  cursor:text;
}
/* Zeigegeraete ohne Mauszeiger (Touch) brauchen keinen Cursor. */
@media (hover:none){
  body,a,button,summary,[role="button"]{cursor:auto}
}

/* ================= Footer mobil: zentriert ===========================
   Linksbuendig blieb die rechte Haelfte leer und wirkte unfertig. Mittig
   gesetzt liest sich der Fuss ruhiger und geschlossener. */
@media (max-width:640px){
  footer .f-top{
    grid-template-columns:1fr;
    text-align:center;
    justify-items:center;
  }
  footer .f-brand,
  footer .f-spalte-links,
  footer .f-zeitenblock{align-items:center;text-align:center}
  footer .f-social{justify-content:center}
  /* Die Zeitentabelle behaelt zwei Spalten, wird aber als Block zentriert:
     Tag und Zeit bleiben als Paar lesbar, statt beide mittig zu flattern. */
  footer .f-zeiten{
    justify-content:center;
    width:max-content;
    max-width:100%;
    margin-inline:auto;
    text-align:left;
  }
  /* Klapp-Ueberschriften: Text mittig, Pfeil rechts daneben statt am Rand —
     sonst wirkt die Zeile auseinandergezogen. */
  .f-klappbar h2{justify-content:center;gap:.6rem}
  .f-klappbar > *:not(h2){text-align:center}
  .f-klappbar ul{padding:0;list-style:none}
  footer .f-bottom,
  footer .f-recht,
  footer .credit{text-align:center;justify-content:center}
  footer address{font-style:normal}
}

/* ================= Abschnittszähler ==================================
   Rechts am Rand, auf jeder Seite: "03 / 07". Zählt die Hauptabschnitte —
   auf der Startseite zusätzlich die Kapitel des Scroll-Kinos einzeln,
   weil man sie beim Scrollen nacheinander durchläuft. */
.sektionszaehler{
  position:fixed;
  z-index:40;
  right:clamp(.7rem,2.2vw,2rem);
  top:50%;
  transform:translateY(-50%);
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:.85rem;
  pointer-events:none;
  color:var(--blu);
}
.sz-spur{
  position:relative;
  display:block;
  width:2px;
  height:clamp(64px,11vh,110px);
  background:currentColor;
  opacity:.28;
  border-radius:2px;
}
.sz-spur i{
  position:absolute;
  inset:0;
  display:block;
  background:var(--kunde-gelb);
  border-radius:2px;
  transform-origin:top center;
  transform:scaleY(0);
}
.sz-zahl{
  font-family:var(--display,Georgia,serif);
  font-size:.72rem;
  letter-spacing:.16em;
  font-variant-numeric:tabular-nums;
  opacity:.85;
  writing-mode:vertical-rl;
}
/* Über dunklen Sektionen muss die Spur hell sein — welche gerade dahinter
   liegt, entscheidet das Skript beim Scrollen. */
.sektionszaehler.sz-auf-dunkel{color:var(--ceramic)}
.sz-ruhig .sz-spur i{transition:none}

@media (max-width:700px){
  /* Schmal: nur die Zahl, die Spur nimmt sonst Textbreite weg. */
  .sz-spur{display:none}
  .sektionszaehler{right:.45rem;gap:0}
  .sz-zahl{font-size:.62rem;opacity:.7}
}
@media print{ .sektionszaehler{display:none} }

/* ================= Gerichtefotos in der Karte =========================
   Nur bei wenigen Aushaengeschildern — die Karte soll eine Karte bleiben,
   kein Bilderkatalog. Das Foto steht rechts neben Name und Preis. */
.dish--mitBild{
  display:grid;
  grid-template-columns:1fr auto;
  grid-template-areas:"kopf bild" "text bild";
  column-gap:clamp(.9rem,2.5vw,1.6rem);
  align-items:start;
}
.dish--mitBild .dish-head{grid-area:kopf}
.dish--mitBild .dish-desc{grid-area:text}
.dish-bild{
  grid-area:bild;
  margin:0;
  width:clamp(92px,13vw,132px);
  aspect-ratio:3/4;
  overflow:hidden;
  border-radius:6px;
  /* Feine Goldkante wie bei der Karten-Tafel — haelt die Bildsprache
     zusammen, ohne aufzutragen. */
  box-shadow:0 0 0 1px rgba(201,163,73,.55),0 6px 16px rgba(18,38,106,.14);
}
.dish-bild img{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
}
@media (max-width:560px){
  /* Schmal: Bild unter den Text, sonst bleibt fuer den Namen zu wenig. */
  .dish--mitBild{grid-template-columns:1fr;grid-template-areas:"kopf" "text" "bild"}
  .dish-bild{width:100%;aspect-ratio:16/10;margin-top:.7rem}
}

/* ================= Stimmungsbild pro Seite ============================
   Ein einzelnes Foto als Auflockerung — bewusst nicht mehr, sonst wird
   die Seite zum Katalog. Hochformat vom Kunden, deshalb begrenzte Hoehe
   und Ausschnitt statt Verzerrung. */
.seiten-bild{
  margin:clamp(2rem,5vw,3.2rem) auto 0;
  width:min(100%,760px);
  max-height:clamp(280px,42vh,440px);
  overflow:hidden;
  border-radius:10px;
  box-shadow:0 0 0 1px rgba(201,163,73,.5),0 18px 40px rgba(18,38,106,.18);
}
.seiten-bild img{
  display:block;
  width:100%;
  height:100%;
  /* Hochformat in einen Querstreifen: Ausschnitt aus der oberen Haelfte,
     dort liegt bei allen drei Bildern das Motiv. */
  object-fit:cover;
  object-position:center 32%;
}
/* Auf dunklen Sektionen die Goldkante etwas zurueckhaltender. */
.karte-dunkel .seiten-bild,
.wand-hell .seiten-bild{box-shadow:0 0 0 1px rgba(201,163,73,.38),0 18px 40px rgba(0,10,20,.4)}

/* Kopfbild der Speisekarte: Kundenfoto im Hochformat. Der Ausschnitt zeigt
   die obere Bildhaelfte mit der Margherita — object-position statt Zuschnitt,
   damit die volle Aufloesung erhalten bleibt. */
.seiten-bild--kopf{
  width:min(100%,1100px);
  max-height:clamp(300px,46vh,480px);
  margin-top:0;
}
.seiten-bild--kopf img{object-position:center 18%}

/* ================= Cookie-Hinweis =====================================
   Informiert, holt KEINE Einwilligung ein — die Seite setzt keine Cookies.
   Grundzustand SICHTBAR: Der Einblende-Effekt haengt an .hinweis--start,
   das nur bei sichtbarem Dokument gesetzt wird. Zeitgeber laufen in
   verborgenen Tabs nicht — sonst bliebe der Hinweis dauerhaft unsichtbar. */
.hinweis{
  position:fixed;
  left:clamp(.7rem,3vw,1.6rem);
  right:clamp(.7rem,3vw,1.6rem);
  bottom:clamp(.7rem,3vw,1.6rem);
  z-index:60;
  /* width:auto ist bei position:fixed mit left+right noetig — sonst
     bestimmt der Inhalt die Breite und der Kasten schrumpft auf 40px. */
  width:auto;
  max-width:44rem;
  margin-inline:auto;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.9rem 1.2rem;
  padding:1rem 1.2rem;
  background:rgba(9,20,50,.96);
  backdrop-filter:blur(6px);
  border:1px solid rgba(234,179,8,.34);
  border-radius:8px;
  box-shadow:0 18px 44px -14px rgba(0,10,25,.6);
  opacity:1;
  transform:none;
  transition:opacity .32s ease,transform .32s ease;
}
.hinweis--start{opacity:0;transform:translateY(14px)}
.hinweis--weg{opacity:0;transform:translateY(14px)}

/* Zwischen 700 und 760px ist die Aktionsleiste .bar bereits eingeblendet,
   die Handy-Regeln des Hinweises greifen aber erst ab 700px. In diesem
   Streifen sass der Hinweis sonst wieder unter der Leiste. */
@media (max-width:760px){
  .hinweis{bottom:calc(4.6rem + env(safe-area-inset-bottom, 0px) + .5rem)}
}

.hinweis-text{
  flex:1 1 20rem;
  margin:0;
  font-size:.9rem;
  line-height:1.55;
  color:rgba(247,241,228,.92);
}
.hinweis-text b{color:var(--kunde-gelb,#eab308);font-weight:600}
.hinweis-text a{color:var(--kunde-gelb,#eab308);text-decoration:underline}
.hinweis-text a:hover{text-decoration:none}

.hinweis-weg{
  flex:0 0 auto;
  font:600 .78rem/1 var(--body,sans-serif);
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--blu,#12266a);
  background:var(--kunde-gelb,#eab308);
  border:0;
  border-radius:4px;
  min-height:44px;
  padding:.7rem 1.4rem;
  cursor:pointer;
  transition:background .2s;
}
.hinweis-weg:hover{background:#f5c421}
.hinweis-weg:focus-visible{outline:2px solid var(--ceramic,#f4ecdc);outline-offset:2px}

@media (max-width:700px){
  /* Handy: Der Kasten sass am unteren Rand oft unter der Systemleiste und
     die beiden Verweise klebten mitten im Fliesstext aneinander — schwer
     zu treffen. Jetzt untereinander, mit echten Tippzielen. */
  .hinweis{
    flex-direction:column;
    align-items:stretch;
    text-align:left;
    left:.6rem; right:.6rem;
    /* Der Abstand muss ueber die feste Aktionsleiste .bar hinausreichen,
       nicht nur ueber den Geraeterand: .bar ist 69px hoch und liegt mit
       z-index 70 UEBER dem Hinweis (60). Gemessen sass der
       "Verstanden"-Knopf bei 735..785 — ein Tipp auf seine Mitte traf
       NAV.bar, loeste also eine Reservierung aus statt den Hinweis zu
       schliessen. Der Kasten ueberlagerte zudem die Hero-Schaltflaechen.
       4.6rem ist derselbe Wert, den body in der .bar-Media-Query als
       padding-bottom nutzt — damit laufen die beiden nicht auseinander. */
    bottom:calc(4.6rem + env(safe-area-inset-bottom, 0px) + .5rem);
    gap:.85rem;
    padding:1.1rem 1.15rem 1rem;
    border-radius:12px;
    max-height:min(62vh, 30rem);
    overflow-y:auto;
  }
  .hinweis-text{
    flex:none;
    font-size:.94rem;
    line-height:1.6;
  }
  /* Die Verweise bekommen eigene Zeilen statt im Textfluss zu kleben —
     nebeneinander waren sie auf schmalen Schirmen kaum zu treffen. */
  .hinweis-text a{
    display:inline-block;
    padding:.35rem 0;
    margin-right:1rem;
    text-underline-offset:3px;
  }
  .hinweis-weg{
    width:100%;
    min-height:50px;
    font-size:.85rem;
    padding:.9rem 1.2rem;
    border-radius:8px;
  }
}
@media (max-width:380px){
  /* Sehr schmal: kleinere Schrift, damit der Kasten nicht die halbe
     Bildschirmhoehe einnimmt. */
  .hinweis-text{font-size:.88rem}
  .hinweis{padding:1rem}
}
@media (prefers-reduced-motion:reduce){
  .hinweis{transition:none}
}
