{
 "$schema": "../../schema.json",
 "schema": "fundus/1",
 "id": "foto-hero-mit-leiste",
 "name": "Foto-Hero mit Leiste, Karte oder Weiche",
 "name_en": "Photo hero with booking bar, info card or location switch",
 "kurz": "Am Foto hängt schon die erste Handlung: eine Buchungsleiste im Bild, eine Karte mit dem echten Öffnungsstatus oder zwei bis drei gleichwertige Wege zu den Filialen.",
 "kategorie": "Hero & Section-Layouts",
 "kategorie_slug": "hero-layouts",
 "kategorie_nr": 4,
 "bau_chat": "C2",
 "prioritaet": "B",
 "trendstatus": "etabliert",
 "belegstatus": "belegt",
 "website_belege": 7,
 "stimmung": [
  "ruhig",
  "präzise",
  "warm"
 ],
 "stimmung_roh": [
  "warm",
  "ruhig",
  "präzise"
 ],
 "technik": [
  "css",
  "vanilla-js",
  "dialog",
  "form",
  "form-validation",
  "intl-datetimeformat",
  "container-queries"
 ],
 "technik_gruppen": [
  "css",
  "js"
 ],
 "leistungskosten": "niedrig",
 "steckbrief": {
  "beschreibung": "Ein Foto-Hero, an dem die erste Handlung schon hängt. Leiste: Buchungs- oder Anfrageleiste im unteren Bilddrittel über 10 bis 12 Spalten, das Foto mit sichtbarem Rand auf Markengrund (Terreno). Karte: eine deckende Karte unten links im Bild mit dem echten Öffnungsstatus, „Jetzt geöffnet, Küche bis 22 Uhr“ (Le Petit Bleu). Weiche: zwei bis drei gleichwertige Wege zu Filialen oder Häusern mit Ortsname und Status, ohne Rangfolge und ohne Karussell (Union Boulangerie). Leiste und Karte fallen auf dem Telefon in den Fluss unter dem Bild; die Leiste öffnet sich dort als Dialog.",
  "warum_es_wirkt": "Gäste kommen mit einer Frage: Ist ein Zimmer frei? Hat das Lokal jetzt offen? Welche Filiale ist meine? Hängt die Antwort am Foto, ist sie im ersten Bildschirm, ohne dass das Bild an Wirkung verliert. Der Rand um das Foto, die deckende Karte und die gleich großen Wege halten Bild und Bedienung auseinander, darum bleibt beides lesbar.",
  "wann_einsetzen": "Leiste: Hotel, Pension, Ferienwohnung (Anreise, Abreise, Gäste) und Eventlocation (Wunschdatum, Anlass, Gäste). Karte: Restaurant, Café, Bar (Öffnungsstatus), Handwerk (aktuelles Projekt), Kultur (laufende Ausstellung), Praxis (Urlaub, Vertretung). Weiche: Bäckerei oder Café mit Filialen, Gastro mit zwei Häusern, Hotelgruppe, Praxis mit zwei Standorten.",
  "wann_nicht": "Leiste nicht für Tische (Datum, Uhrzeit, Personen gehören in termin-buchung-zwei-klick) und nicht ohne Buchungssystem oder gepflegte Belegung. Karte nie dekorativ: ohne echte Zeiten oder Daten keine Karte. Weiche nicht ab fünf Standorten (dann standortfinder-liste) und nie als Karussell oder mit hervorgehobenem Haupthaus. Auf dem Telefon keine zweite feste Leiste über einer unteren Navigation.",
  "varianten": [
   "leiste: Foto mit 40 px Rand auf Markengrund, Buchungs- oder Anfrageleiste im unteren Bilddrittel über 10 bis 12 Spalten; unter 40rem ein Knopf, der die Leiste im nativen dialog öffnet (Terreno)",
   "karte: deckende Karte unten links im Bild, höchstens 22rem, mit echtem Öffnungsstatus nach oeffnungszeiten-status (Europe/Berlin); mobil unter dem Bild (Le Petit Bleu, Goodman Gallery)",
   "weiche: zwei bis drei gleichwertige Wege mit Ortsname, Adresse und Status als Band am Bildrand, keine Rangfolge, kein Karussell (Union Boulangerie, The Devonshire)"
  ],
  "umsetzung": "Ein Foto-Hero (<picture>, LCP-Bild mit fetchpriority=\"high\", feste aspect-ratio), daran ein eigenes Element. Leiste: <form> mit Anreise, Abreise (type=date mit min), Gästen (Erwachsene, Kinder) und Aktionscode; absolut im unteren Bilddrittel über 10 bis 12 Rasterspalten, das Foto mit 24 bis 40 px Rand auf dem Markengrund. Prüfen nach dem Absenden: Abreise nach Anreise, Mindestaufenthalt, Code; Fehler am Feld (aria-invalid, aria-describedby) und gesammelt in einer role=\"alert\"-Zeile. Erst „Verfügbarkeit prüfen“ zeigt Nächte und Richtpreis, erst der zweite Klick übergibt per URL an das Buchungssystem. Den vollen Kalender mit Belegung liefert buchungsleiste-datumsbereich. Unter 40rem steht statt der Leiste ein Knopf mit der Zusammenfassung; er hängt dasselbe Formular in einen <dialog> (showModal) und beim Schließen zurück, die Eingaben bleiben erhalten. Karte: <aside> unten links im Bild, deckend, max-width 22rem; Status nach oeffnungszeiten-status mit Intl.DateTimeFormat('de-DE', { timeZone: 'Europe/Berlin', hourCycle: 'h23' }).formatToParts(), Wochenplan plus Sonderzeiten, Küchenschluss als eigene Zeit, Aktualisierung zur vollen Minute; mobil im Fluss unter dem Bild. Weiche: <nav aria-label> mit zwei bis drei gleich breiten Links (Raster mit gleichen Spalten), je Ortsname, Adresse und Status aus derselben Zeitlogik; Reihenfolge nach Lage oder Alphabet, nie nach Wichtigkeit.",
  "mobil": "Foto oben im Hochformat. Leiste: ein Knopf mit Zusammenfassung („Anreise wählen · 2 Gäste“) öffnet das Formular im Dialog von unten. Karte: im Fluss direkt unter dem Bild, volle Breite. Weiche: Wege als Zeilen untereinander, volle Breite, Status rechts.",
  "reduzierte_bewegung": "Foto steht ab dem ersten Bild. Dialog und Fehlerzeilen erscheinen ohne Weg. Statuspunkt ohne Puls.",
  "barrierefreiheit": "Leiste als <form> mit sichtbaren <label>, Fehler am Feld und gesammelt angesagt, Fokus nach dem Öffnen des Dialogs auf das erste Feld und nach dem Schließen zurück auf den Knopf. Status nie nur als Farbe: Punkt plus Wort („Jetzt geöffnet“). Die Karte ist deckend, damit der Text nicht vom Foto abhängt (4,5:1). Weiche als <nav> mit aria-label, Links mit Ortsnamen als Text; der Status steht im Linktext oder per aria-describedby. Bei 320 px brechen Leiste und Wege um."
 },
 "messwerte": {
  "easing": "Rezept-Token; UI cubic-bezier(0.16, 1, 0.3, 1) auf, cubic-bezier(0.7, 0, 0.84, 0) zu (token-toggle-asymmetrisch)",
  "dauer_ms": "UI 150 bis 300, Schließen 200; Auftritt des Fotos 900 bis 1200",
  "stagger_ms": "",
  "distanz": "Rand um das Foto 24 bis 40 px (Terreno 40 px gemessen); Karte höchstens 22rem",
  "sonstiges": "Terreno: Bild 1345 × 870 bei 40 px Rand, Lindgrün rgb(236, 255, 179), Radius 0, Leiste When / Who / Promotion / Search, Hero-Swiper speed 500 ohne Autoplay.",
  "herkunft": "beobachtet",
  "quelle": "Live-Messung 03.11.2026 auf terrenohotel.com und lepetitbleucafe.com (Varianten-Recherche Hero/Slider)"
 },
 "kurve": {
  "bezier": [
   0.37,
   0.0,
   0.63,
   1.0
  ],
  "css": "cubic-bezier(0.37, 0, 0.63, 1)",
  "name": "sine.inOut",
  "dauer_ms": 150
 },
 "gesehen_bei": [
  {
   "seite": "Terreno Barrio Hotel",
   "url": "https://www.terrenohotel.com/en/",
   "auszeichnung": "CSS Design Awards, nominiert 06.10.2026",
   "beobachtung": "Live geprüft und gemessen 03.11.2026: Bild 1345 × 870 px bei 40 px Rand auf Lindgrün rgb(236, 255, 179), Radius 0. Schreibschrift-Wortmarke im Kopf über dem Bild, Versal-Headline mittig, Buchungsleiste „When / Who / Promotion / Search“ im unteren Bilddrittel. Hero-Swiper speed 500, ohne Autoplay.",
   "art": "website"
  },
  {
   "seite": "Le Petit Bleu",
   "url": "https://www.lepetitbleucafe.com/",
   "auszeichnung": "One Page Love 15.11.2024",
   "beobachtung": "Live geprüft 03.11.2026: umrandete Textkarte mit Logo, Serif-Satz und zwei Service-Blöcken (Abholung, Catering); in der Karte „We're open! 7:00 AM – 7:00 PM“.",
   "art": "website"
  },
  {
   "seite": "Goodman Gallery",
   "url": "https://goodman-gallery.com/",
   "auszeichnung": "Land-book 05.08.2026",
   "beobachtung": "Galerie-Screenshot: Foto mit Satz und kleiner Karte unten links.",
   "art": "website"
  },
  {
   "seite": "Designhotel Laurichhof, Pirna",
   "url": "https://www.laurichhof.de",
   "auszeichnung": "CSS Design Awards Special Kudos 13.07.2025",
   "beobachtung": "Nur als Text geprüft: Leiste „Deine Buchung – Anreise / Abreise“ am Banner, Bildwechsel mit sechs Bildern.",
   "art": "website"
  },
  {
   "seite": "Union Boulangerie",
   "url": "https://unionboulangerie.com",
   "auszeichnung": "Siteinspire 30.09.2026",
   "beobachtung": "Nur als Text geprüft: Knöpfe „Union 09 Arr.“ und „Union 11 Arr.“ als gleichwertige Wege.",
   "art": "website"
  },
  {
   "seite": "The Devonshire",
   "url": "https://devonshiresoho.co.uk",
   "auszeichnung": "One Page Love 12.05.2025",
   "beobachtung": "Nur als Text geprüft: Umschalter „Public House / Restaurant“.",
   "art": "website"
  },
  {
   "seite": "Tripletta",
   "url": "https://triplettapizza.com",
   "auszeichnung": "Siteinspire 23.05.2025",
   "beobachtung": "Nur als Text geprüft: vier Fotokacheln als Weiche zu den Häusern.",
   "art": "website"
  }
 ],
 "tutorials": [
  {
   "titel": "MDN: <dialog>",
   "url": "https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dialog"
  },
  {
   "titel": "MDN: Intl.DateTimeFormat.formatToParts()",
   "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts"
  },
  {
   "titel": "web.dev: Optimize LCP",
   "url": "https://web.dev/articles/optimize-lcp"
  }
 ],
 "kombinierbar_mit": [
  "foto-hero",
  "buchungsleiste-datumsbereich",
  "oeffnungszeiten-status",
  "termin-verfuegbarkeit-anfrage",
  "standortfinder-liste",
  "live-uhr-und-standort",
  "dialog-modal-nativ",
  "termin-buchung-zwei-klick",
  "intro-ohne-wartezeit",
  "clip-path-bild-reveal"
 ],
 "urls": {
  "detail": "https://cecodesign.de/lab/fundus/hero-layouts/foto-hero-mit-leiste/",
  "meta": "https://cecodesign.de/lab/fundus/hero-layouts/foto-hero-mit-leiste/meta.json",
  "demo": "https://cecodesign.de/lab/fundus/hero-layouts/foto-hero-mit-leiste/demo"
 },
 "herkunft": {
  "quelldateien": [
   "Varianten-Recherche Hero/Slider 03.11.2026"
  ],
  "pruefnotizen": [
   "Varianten-Recherche Hero/Slider 03.11.2026, Teil 1, Varianten 7 (info-karte), 8 (leiste-unterkante) und 11 (weiche) als eigenes Muster neben foto-hero.",
   "Terreno und Le Petit Bleu live geprüft (03.11.2026). Goodman Gallery als Galerie-Screenshot. Laurichhof, Union Boulangerie, The Devonshire und Tripletta nur als Text.",
   "Die Weiche ist nur textlich belegt; Aufbau und Statuszeile sind eigene Festlegung nach standortfinder-liste und oeffnungszeiten-status.",
   "Preise, Mindestaufenthalt und Kurtaxe in der Leiste sind Beispielwerte. Preisangaben (Gesamtpreis, Kurtaxe getrennt) und Storno vom Kunden prüfen lassen.",
   "Ergänzt foto-hero (Varianten randlos-unten-links, split-randabfallend, inset-rahmen, passepartout, bildunterschrift): dort die Grundkompositionen, hier die Formen mit Wortmarke bzw. mit Anhängsel am Bild."
  ]
 },
 "bau": {
  "status": "fertig",
  "kurz": "Am Foto hängt schon die erste Handlung: eine Buchungsleiste im Bild, eine Karte mit dem echten Öffnungsstatus oder zwei bis drei gleichwertige Wege zu den Filialen.",
  "demo": true,
  "abhaengigkeiten": [],
  "werte": {
   "leiste_rahmen": "Foto mit 40 px Rand links, rechts, unten auf Holz #6E5A47, Kopf 76 px darüber, Radius 0 (Terreno)",
   "leiste_lage": "absolut, bottom clamp(24px, 7%, 64px), Breite min(100 % − 48px, 1120px) ≈ 10 von 12 Spalten, Creme #FEF2E3, Radius 6px",
   "leiste_felder": "Raster 1fr 1fr 1.3fr .9fr auto: Anreise, Abreise (type=date, min = heute in Europe/Berlin, Anzeige „Fr., 13. Nov.“ über dem nativen Feld, beim Fokus das native Feld), Gäste (Popover mit Erwachsene 1 bis 4, Kinder 0 bis 3, zusammen höchstens 4, Alter je Kind Pflicht), Aktionscode, Knopf",
   "leiste_pruefen": "nach dem Absenden: Anreise fehlt oder liegt zurück, Abreise fehlt oder nicht nach Anreise, Mindestaufenthalt 2 Nächte bei Anreise Fr/Sa, höchstens 21 Nächte, Kinderalter, unbekannter Code; Fehler am Feld (aria-invalid, rote Linie 2px #B3261E) und gesammelt mit Sprunglinks (role=alert)",
   "leiste_ergebnis": "Nächte, Gäste, „ab … € gesamt“ inkl. Frühstück und MwSt., Kurabgabe getrennt (Beispielwerte 128 € So bis Do, 158 € Fr/Sa, 35 € je weiterer Person, Kurabgabe 2 € je Erwachsene:n und Nacht); zweiter Klick „Weiter zur Buchung“ baut ?arrival=…&departure=…&adults=…&children=…&childAges=…&promo=…",
   "leiste_telefon": "unter 40rem: Knopf mit Zusammenfassung („Fr. 13.11. – Mo. 16.11. · 3 Gäste“), öffnet dasselbe Formular in dialog.showModal() als Blatt von unten (max-height 92svh, ::backdrop rgba(30, 28, 26, .5)); beim Schließen wandert das Formular zurück, Fokus auf den Knopf",
   "leiste_bild": "hotel-haus-am-see.webp, object-position 50% 0%, Titel einzeilig im Himmel (Newsreader 300, clamp(2rem, 1rem + 2.6vw, 3.4rem)), oben Verlauf rgba(232, 222, 222, .5) über 22 %",
   "karte_lage": "Foto Spalte 1 bis 7 bis an den linken Rand, Text Spalte 8 bis 12; Karte absolut unten links (clamp(16px, 2.4vw, 32px)), Breite min(22rem, 100 % − 32px), deckend #FBF8F1, Radius 12px",
   "karte_status": "Intl.DateTimeFormat('de-DE', { timeZone: 'Europe/Berlin', hourCycle: 'h23' }).formatToParts(); Intervalle gestern bis +14 Tage mit eigener Küchenzeit; Zustände Jetzt geöffnet („Küche bis 22 Uhr, Bar bis 23 Uhr“), Küche zu ab Küchenschluss, Schließt bald ab 30 Min., Pause zwischen zwei Zeiträumen am selben Tag, Öffnet ab 60 Min. vorher, Geschlossen bzw. Heute Ruhetag; Sonderzeit der nächsten 21 Tage als Hinweis; neu zur vollen Minute und bei visibilitychange",
   "karte_zeiten": "Di bis Do 17.30 bis 23 (Küche bis 22), Fr/Sa 17.30 bis 24 (Küche bis 22.30), So 12 bis 15 und 17.30 bis 22, Mo Ruhetag; Sonderzeiten 24.11., 24. bis 26.12., 31.12.",
   "karte_telefon": "Kopf, Foto 4:5, Karte darunter (48 px ins Foto gezogen), dann Titel und Wege",
   "weiche_lage": "Foto randlos 100svh, Titel oben links über hellem radialem Verlauf rgba(240, 236, 224, .94) → 0; Wege als Band unten: Raster repeat(3, minmax(0, 1fr)), 1px Fugen, Radius 12px, #FBF8F1",
   "weiche_wege": "je Ortsname (Fraunces 500), Adresse, ein Merkmal, Status mit Punkt und Wort; Reihenfolge nach Alphabet, gleiche Breite, kein hervorgehobenes Haus; Telefon als Zeilen untereinander, Status rechts",
   "statusfarben": "offen #2C6E49 mit Ring 5px rgba(44, 110, 73, .16), Küche zu/bald #EAC16E, Pause Ring ohne Füllung, zu #7A7C7B; immer mit Wort",
   "easing": "Foto Hotel cubic-bezier(0.37, 0, 0.63, 1) 1200 ms (scale 1.06 → 1); Gastro cubic-bezier(0.16, 1, 0.3, 1): Foto scale .96 → 1 mit opacity 700 ms, h1 ein Masken-Reveal 1000 ms",
   "ui": "auf cubic-bezier(0.16, 1, 0.3, 1) 300 ms, zu cubic-bezier(0.7, 0, 0.84, 0) 200 ms (Gäste-Popover, Dialog), Hover 200 bis 220 ms",
   "bilder": "hotel-haus-am-see.webp (+ -hoch), zitronen-tisch.jpg, medien/foto-hero-mit-leiste-backstube.webp (three.js, 42 KB)",
   "vorfuehrung": "Leiste: Freitag mit einer Nacht → Fehler Mindestaufenthalt → zwei Nächte, Kind mit 6 Jahren, Code SEESAUNA → Ergebnis → Übergabe-URL (ca. 13 s); Karte und Weiche: simulierte Uhr durch die Zustände, je 1,9 s"
  },
  "ausloeser": "klick",
  "touch": "Leiste: unter 40rem ein Knopf mit Zusammenfassung, der das Formular als Blatt von unten im nativen Dialog öffnet; Gäste-Auswahl darin aufgeklappt statt als Popover. Karte: unter dem Foto im Fluss, volle Breite. Weiche: Wege als Zeilen untereinander, Status rechts, Pfeil entfällt.",
  "reduziert": "Foto, Titel und Leiste stehen sofort; Popover, Dialog und Meldungen erscheinen ohne Weg; Statuspunkt ohne Ring. Die Uhr-Vorführung wechselt die Zustände ohne Übergang.",
  "korrekturen": {},
  "geprueft": "03.11.2026",
  "notiz": "Drei Welten. Leiste: Rezept boutique-hotel-gastgeber, erfundenes Hotel Ufermann in Plau am See (Newsreader, Mona Sans, Holz #6E5A47 als Markengrund statt Terrenos Lindgrün), Felder nach buchungsleiste-datumsbereich, aber ohne eigenen Kalender (native Datumsfelder mit deutscher Anzeige); den Belegungskalender liefert buchungsleiste-datumsbereich. Karte: Rezept gastro-warm-appetitlich, erfundene Wirtschaft Fenchel in Freiburg-Wiehre, Zeitlogik nach oeffnungszeiten-status mit Küchenschluss als eigener Zeit. Weiche: Rezept gastro-warm-appetitlich, erfundene Bäckerei Kornhaus in Münster mit drei Filialen (Hafen, Hiltrup, Kreuzviertel), Backstuben-Bild neu mit three.js gerendert. Pult unten links, eingeklappt (?v=leiste|karte|weiche), Uhr mit Echtzeit und Zuständen, Leiste mit „Leeren“ und „Beispiel ausfüllen“. Leiste per Playwright geprüft (leer, drei Fehler, Ergebnis 549 €, Übergabe-URL, Dialog auf dem Telefon mit Fokus hin und zurück). Preise, Kurabgabe, Mindestaufenthalt und Zeiten sind Beispielwerte; Preisangaben und Storno vom Kunden prüfen lassen. Zugang: ohne Befund außer Text über Bild (Titel im Himmel, von Hand etwa 10:1). Selbsturteil 4.",
  "varianten": [
   {
    "id": "leiste",
    "name": "Buchungsleiste im Bild",
    "wann": "Hotel, Pension, Ferienwohnung, Eventlocation: Foto mit Rand auf Markengrund, Anreise, Abreise, Gäste und Code im unteren Bilddrittel, mobil im Dialog (Terreno).",
    "werte": {
     "rezept": "boutique-hotel-gastgeber",
     "rand_px": 40,
     "breite": "10 von 12 Spalten, max. 1120px",
     "telefon": "unter 40rem Knopf + dialog.showModal()",
     "uebergabe": "zweiter Klick, Parameter per URL"
    }
   },
   {
    "id": "karte",
    "name": "Karte mit Öffnungsstatus",
    "wann": "Restaurant, Café, Bar: deckende Karte unten links im Foto mit echtem Status (Jetzt geöffnet, Küche bis 22 Uhr), heute und morgen, nächste Sonderzeit; mobil unter dem Bild (Le Petit Bleu).",
    "werte": {
     "rezept": "gastro-warm-appetitlich",
     "breite": "max. 22rem, deckend #FBF8F1",
     "zeitzone": "Europe/Berlin über formatToParts",
     "zustaende": "offen, Küche zu, schließt bald (30 Min.), Pause, öffnet (60 Min.), geschlossen/Ruhetag"
    }
   },
   {
    "id": "weiche",
    "name": "Weiche zu den Filialen",
    "wann": "Bäckerei, Café oder Gastro mit zwei bis drei Häusern, Praxis mit zwei Standorten: gleich breite Wege mit Ortsname, Adresse und Status, ohne Rangfolge und ohne Karussell (Union Boulangerie).",
    "werte": {
     "rezept": "gastro-warm-appetitlich (Bäckerei)",
     "wege": 3,
     "ordnung": "Alphabet, gleiche Breite",
     "status": "je Filiale aus derselben Zeitlogik, Schließt in … ab 60 Min."
    }
   }
  ]
 }
}
