{
 "$schema": "../../schema.json",
 "schema": "fundus/1",
 "id": "karussell-steuerung",
 "name": "Karussell-Steuerung und Anzeige",
 "name_en": "Carousel controls and indicators (counter, progress, thumbnails, autoplay, deep links)",
 "kurz": "Fünf Steuerungen für ein natives Scroll-Snap-Karussell in fünf Branchen: Zähler „03 / 08“, Fortschrittsleiste per scroll-timeline, Daumen als ::scroll-marker, Selbstlauf mit Restzeit-Ring und Pause, Anker-Links mit eigener URL je Folie.",
 "kategorie": "Galerien & Slider",
 "kategorie_slug": "galerien-slider",
 "kategorie_nr": 12,
 "bau_chat": "C6",
 "prioritaet": "A",
 "trendstatus": "etabliert",
 "belegstatus": "teilbelegt",
 "website_belege": 1,
 "stimmung": [
  "ruhig",
  "editorial",
  "präzise"
 ],
 "stimmung_roh": [
  "ruhig",
  "präzise",
  "editorial"
 ],
 "technik": [
  "css",
  "scroll-snap",
  "scroll-driven-css",
  "vanilla-js"
 ],
 "technik_gruppen": [
  "css",
  "js"
 ],
 "leistungskosten": "niedrig",
 "steckbrief": {
  "beschreibung": "Die Bedienung und Anzeige für ein natives Scroll-Snap-Karussell, getrennt von seinem Aufbau. Fünf belegte Formen: Zähler „03 / 08“ neben den Pfeilen, eine 2-px-Fortschrittsleiste unter der Reihe, Vorschaubilder als Marker, Selbstlauf mit sichtbarer Restzeit und Pause-Knopf, und Anker-Links, mit denen jede Folie eine eigene Adresse bekommt. Das Band selbst bleibt ein echter Scroller nach css-native-karussell. Alle Formen nutzen dieselben Rollen nach dem WAI-ARIA-Karussellmuster.",
  "warum_es_wirkt": "Punkte sind ein schwacher Hinweis: Sie sagen weder, wie viel noch kommt, noch was. Ein Zähler nennt die Menge, eine Leiste zeigt die Strecke, Vorschaubilder zeigen den Inhalt, eine Adresse macht eine Folie teilbar. Selbstlauf ist nur mit sichtbarer Restzeit und Pause erträglich. Wer die Steuerung nach Inhalt wählt statt nach Gewohnheit, macht aus einem Karussell eine lesbare Strecke.",
  "wann_einsetzen": "Überall, wo css-native-karussell steht und die Punkte nicht reichen. Zähler für Zimmer, Serien und ruhige Reihen. Fortschrittsleiste ab etwa 6 Karten (Lagen, Produkte, Objekte). Vorschaubilder für Bildgalerien eines Objekts oder Produkts. Selbstlauf nur auf dem Desktop für Programm- oder Bildbühnen mit höchstens 5 Folien. Anker-Links, wenn einzelne Folien verschickt werden (Wohnung im Exposé, Zimmer, Lage).",
  "wann_nicht": "Nicht mehrere Anzeigen stapeln (Punkte plus Zähler plus Leiste). Kein Selbstlauf auf dem Telefon, kein Selbstlauf ohne Pause-Knopf, kein Intervall unter 5 Sekunden. Keine abgeschnittene Daumenleiste. Keine Anker-Links, die bei jedem Wechsel einen neuen Verlaufseintrag anlegen. Wenn der Inhalt in ein Raster passt, lieber raster-zu-wischreihe oder gar kein Karussell.",
  "varianten": [
   "zaehler: „03 / 08“ in Tabellenziffern zwischen den Pfeilen, die Ziffer rollt in einer Maske von 1lh; Folien heißen „3 von 8“",
   "fortschrittsleiste: 2-px-Balken unter der Reihe, Füllung vom sichtbaren Anteil bis 1 per scroll-timeline und timeline-scope, JS-Rückfall",
   "daumen: Vorschaubilder als Marker, ::scroll-marker mit Bild in Chromium, sonst Buttons mit aria-current; alle Daumen sichtbar, mobil 4 × 2",
   "autoplay-pause: Selbstlauf ab 5000 ms (Demo 6000) mit Restzeit-Ring, Pause-Knopf zuerst, Hover pausiert, Fokus stoppt, kein Start auf dem Telefon",
   "ankerlinks: jede Folie mit eigener URL (#wohnung-3), Marker als Links, history.replaceState nach dem Einrasten, hashchange springt"
  ],
  "umsetzung": "Basis ist ein echter Scroller nach css-native-karussell (overflow-x auto, scroll-snap-type x mandatory). Die Steuerung liest den Zustand aus der Scrollposition: aktive Folie = nächster Einrastpunkt, aktualisiert bei scroll und scrollend. Pfeile und Marker rufen eine Gleitfunktion mit der Kurve des Rezepts auf (Snap während der Bewegung aus, danach wieder an). Zähler: zwei Zahlen in tabular-nums, die Ziffer rollt in einer Maske in lh. Fortschrittsleiste: scroll-timeline am Band, timeline-scope am gemeinsamen Vorfahren, animation-timeline an der Füllung (scale 0 auf 1); ohne Unterstützung setzt ein Scroll-Handler die Skalierung. Daumen: per @supports selector(::scroll-marker) ::scroll-marker mit background-image aus einer Variable je Folie, sonst eine Reihe Buttons mit aria-current. Selbstlauf: setTimeout-Kette mit Restzeit, die bei Hover anhält und weiterläuft, bei Fokus endet; Pause-Knopf als erstes Element mit aria-pressed. Anker-Links: Folien mit id, Marker als a href=\"#id\", Klick gleitet und setzt history.replaceState, beim Laden und bei hashchange springt das Band.",
  "mobil": "Wischen bleibt die Hauptbedienung. Zähler und Leiste bleiben sichtbar, Pfeile 44 px. Daumen brechen in zwei Reihen um statt abgeschnitten zu werden. Selbstlauf startet auf dem Telefon nie von selbst, der Knopf bleibt da.",
  "reduzierte_bewegung": "Pfeile und Marker springen ohne Gleiten, die Zähler-Ziffer rollt nicht. Selbstlauf startet nicht, der Pause-Knopf steht auf „angehalten“. Die Fortschrittsleiste folgt weiter der Position, weil sie keine eigene Bewegung ist.",
  "barrierefreiheit": "Container als region (section mit aria-label) oder group, aria-roledescription „Karussell“; Folien role group, aria-roledescription „Folie“, Name „3 von 8: Seezimmer“. Pfeile mit aria-label und aria-controls. Zähler als Live-Region nur im Stand, Fortschrittsleiste aria-hidden. Daumen mit Namen und aria-current. Selbstlauf: Pause-Knopf zuerst, aria-pressed, aria-live des Bands off während der Rotation, polite im Stand, Folien außerhalb der Sicht inert. Anker-Links mit aria-current und sprechendem Text."
 },
 "messwerte": {
  "easing": "Kurve des Rezepts, z. B. cubic-bezier(0.25, 1, 0.5, 1) (Splide-Standard = token-swiss-knackig)",
  "dauer_ms": "Gleiten 400 bis 900 je Rezept; Selbstlauf-Intervall mindestens 5000",
  "stagger_ms": "",
  "distanz": "eine Folie je Pfeil; Fortschrittsleiste 2 px hoch",
  "sonstiges": "Doku-Standards: Splide speed 400, interval 5000, pauseOnHover und pauseOnFocus true; Glide 400 ms cubic-bezier(0.165, 0.84, 0.44, 1), rewindDuration 800; Swiper speed 300, delay 3000, pauseOnMouseEnter false; Embla delay 4000, stopOnMouseEnter false",
  "herkunft": "eigene Festlegung",
  "quelle": "Varianten-Recherche Hero/Slider 03.11.2026 (Doku Splide, Glide, Swiper, Embla; Terreno live)"
 },
 "kurve": {
  "bezier": [
   0.25,
   1.0,
   0.5,
   1.0
  ],
  "css": "cubic-bezier(0.25, 1, 0.5, 1)",
  "name": "power3.out",
  "dauer_ms": 400
 },
 "gesehen_bei": [
  {
   "seite": "Terreno Barrio Hotel",
   "url": "https://www.terrenohotel.com/en/",
   "auszeichnung": "CSS Design Awards, nominiert 06.10.2026",
   "beobachtung": "Live geprüft 03.11.2026 (Varianten-Recherche): Zimmer-Slider mit Zähler „1/1“ statt Punkten; Hero-Swiper speed 500 ohne Autoplay, Inhalts-Swiper speed 1000 mit fade.",
   "art": "website"
  },
  {
   "seite": "Swiper Demos: Pagination fraction, progressbar, Hash navigation",
   "url": "https://swiperjs.com/demos",
   "auszeichnung": "",
   "beobachtung": "Zähler und Fortschrittsleiste als fertige Pagination-Typen, Hash-Navigation pro Folie. Standardwerte laut Doku: speed 300 ms, Autoplay delay 3000 ms, pauseOnMouseEnter false.",
   "art": "demo"
  },
  {
   "seite": "Embla Carousel: Beispiele (Progress, Autoplay, Thumbnails)",
   "url": "https://www.embla-carousel.com/docs/examples/predefined",
   "auszeichnung": "",
   "beobachtung": "Fortschrittsleiste aus scrollProgress, Autoplay mit timeUntilNext für eine Restzeit-Anzeige, delay 4000 ms und stopOnMouseEnter false als Standard.",
   "art": "demo"
  },
  {
   "seite": "Splide: Autoplay, Gallery, URL Hash",
   "url": "https://splidejs.com",
   "auszeichnung": "",
   "beobachtung": "Laut Doku speed 400 ms, cubic-bezier(0.25, 1, 0.5, 1), interval 5000 ms, pauseOnHover und pauseOnFocus true, bei reduzierter Bewegung speed 0. Galerie mit Vorschaubildern als zweitem Slider, URL-Hash als Erweiterung.",
   "art": "demo"
  },
  {
   "seite": "Flickity: Optionen (hash)",
   "url": "https://flickity.metafizzy.co/options",
   "auszeichnung": "",
   "beobachtung": "Option hash: Folien mit id bekommen eine Adresse, Links auf #id wählen die Folie.",
   "art": "demo"
  },
  {
   "seite": "Chrome for Developers: Carousels with CSS",
   "url": "https://developer.chrome.com/blog/carousels-with-css",
   "auszeichnung": "",
   "beobachtung": "Artikel vom 20.03.2025: ::scroll-button und ::scroll-marker ab Chrome 135, Marker dürfen Bilder sein. Firefox und Safari fehlen, deshalb immer eigene Buttons als Rückfall.",
   "art": "artikel"
  },
  {
   "seite": "Baymard Institute: Truncating Product Gallery Thumbnails",
   "url": "https://baymard.com/research-articles/truncating-product-gallery-thumbnails",
   "auszeichnung": "",
   "beobachtung": "Artikel vom 10.06.2026: Abgeschnittene Daumenleisten verstecken Bilder, Nutzer übersehen sie. 75 % der Mobilseiten zeigen nur Punkte.",
   "art": "artikel"
  },
  {
   "seite": "Nielsen Norman Group: Designing Effective Carousels",
   "url": "https://www.nngroup.com/articles/designing-effective-carousels/",
   "auszeichnung": "",
   "beobachtung": "Stand 07.08.2026: höchstens 5 Folien, kein Autoplay auf dem Telefon, etwa 3 Wörter pro Sekunde Lesezeit, sichtbare Steuerung, Punkte sind ein schwacher Hinweis.",
   "art": "artikel"
  },
  {
   "seite": "WAI-ARIA APG: Carousel Pattern",
   "url": "https://w3.org/WAI/ARIA/apg/patterns/carousel",
   "auszeichnung": "",
   "beobachtung": "Container region oder group mit aria-roledescription, Folien als group. Rotationsknopf zuerst in der Tab-Reihenfolge, Stopp bei Hover und Fokus, nach Fokus kein Neustart, aria-live während der Rotation off.",
   "art": "artikel"
  }
 ],
 "tutorials": [
  {
   "titel": "WAI-ARIA APG: Carousel Pattern",
   "url": "https://w3.org/WAI/ARIA/apg/patterns/carousel"
  },
  {
   "titel": "Chrome for Developers: Carousels with CSS",
   "url": "https://developer.chrome.com/blog/carousels-with-css"
  },
  {
   "titel": "MDN: timeline-scope",
   "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/timeline-scope"
  },
  {
   "titel": "MDN: History.replaceState()",
   "url": "https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState"
  }
 ],
 "kombinierbar_mit": [
  "css-native-karussell",
  "bewegung-pausieren-schalter",
  "objekt-steckbrief-expose",
  "lagen-steckbrief-karte",
  "programm-kalender",
  "galerie-shared-element-vollbild",
  "kopieren-feedback"
 ],
 "urls": {
  "detail": "https://cecodesign.de/lab/fundus/galerien-slider/karussell-steuerung/",
  "meta": "https://cecodesign.de/lab/fundus/galerien-slider/karussell-steuerung/meta.json",
  "demo": "https://cecodesign.de/lab/fundus/galerien-slider/karussell-steuerung/demo"
 },
 "herkunft": {
  "quelldateien": [
   "Varianten-Recherche Hero/Slider 03.11.2026"
  ],
  "pruefnotizen": [
   "Aus css-native-karussell ausgegliedert, damit das Muster nicht mehr als 5 Varianten bekommt. Aufbau (Reihe, Bühne, Peek, Fenster) bleibt dort, Steuerung und Anzeige stehen hier.",
   "Website-Beleg nur Terreno (Zähler, live). Die übrigen Formen sind über Bibliotheks-Doku und UX-Quellen belegt, nicht über gemessene Kundenseiten.",
   "::scroll-marker mit Bild ist nur in Chrome und Edge ab 135 belegt. Die Demo schaltet ohne Unterstützung auf eigene Buttons.",
   "Standards von Swiper und Embla pausieren nicht bei Hover. Wer sie statt der nativen Lösung nutzt, muss Pause bei Hover und Fokus und den Pause-Knopf aktiv setzen."
  ]
 },
 "bau": {
  "status": "fertig",
  "kurz": "Fünf Steuerungen für ein natives Scroll-Snap-Karussell in fünf Branchen: Zähler „03 / 08“, Fortschrittsleiste per scroll-timeline, Daumen als ::scroll-marker, Selbstlauf mit Restzeit-Ring und Pause, Anker-Links mit eigener URL je Folie.",
  "demo": true,
  "abhaengigkeiten": [],
  "werte": {
   "band": "overflow-x auto, scroll-snap-type x mandatory, scroll-behavior auto, snap-align start; volle Folien (Daumen, Selbstlauf, Anker) zusätzlich scroll-snap-stop always",
   "gleiten": "Pfeile, Marker und Tastatur gleiten per requestAnimationFrame mit der Kurve des Rezepts; scroll-snap-type während der Kurve none, danach wieder an; Wheel, Touch und Zeiger brechen das Gleiten ab",
   "aktive_folie": "nächster Einrastpunkt (offsetLeft minus scroll-padding-inline-start, auf 0 bis scrollWidth minus clientWidth begrenzt); Ruhe 140 ms nach dem letzten scroll-Ereignis",
   "rollen": "section aria-roledescription „Karussell“ mit aria-label (region), Folien role group, aria-roledescription „Folie“, aria-label „3 von 8: Name“; Band tabindex 0 mit aria-label; Pfeile aria-label und aria-controls",
   "ansage": "sr-Zeile aria-live polite, erst nach dem Einrasten („Zimmer 3 von 8: Kaminstube“); sichtbarer Zähler aria-hidden",
   "tastatur": "Pfeil links/rechts eine Folie, Pos1/Ende erste/letzte; Pfeilknöpfe am Anfang/Ende disabled",
   "vorfuehrung": "Zeiger 700 ms cubic-bezier(0.33, 1, 0.68, 1) zum Ziel, Druck 170 ms scale 0,92, Pause 1300 bis 1900 ms; echte Eingabe beendet die Vorführung"
  },
  "ausloeser": "klick",
  "touch": "Wischen mit Einrasten bleibt die Hauptbedienung. Pfeile (44 bis 48 px) bleiben auf dem Telefon sichtbar, weil die Steuerung das Muster ist. Daumen brechen in 4 × 2 um, nichts wird abgeschnitten. Selbstlauf startet ohne Zeiger mit Hover (hover: hover und pointer: fine, ab 761 px) nicht, der Knopf steht auf angehalten. Anker-Links: Gebäudeschnitt über dem Grundriss.",
  "reduziert": "Alle Gleitbewegungen springen, die Zähler-Ziffer rollt nicht, Übergänge der Knöpfe aus. Selbstlauf startet nicht; die Vorführung blättert dann per Zeiger von Hand. Die Fortschrittsleiste folgt weiter der Position (keine eigene Bewegung).",
  "korrekturen": {
   "varianten": [
    "zaehler: „03 / 08“ in Tabellenziffern zwischen den Pfeilen, die Ziffer rollt in einer Maske von 1lh; Folien heißen „3 von 8“",
    "fortschrittsleiste: 2-px-Balken unter der Reihe, Füllung vom sichtbaren Anteil bis 1 per scroll-timeline und timeline-scope, JS-Rückfall",
    "daumen: Vorschaubilder als Marker, ::scroll-marker mit Bild in Chromium, sonst Buttons mit aria-current; alle Daumen sichtbar, mobil 4 × 2",
    "autoplay-pause: Selbstlauf ab 5000 ms (Demo 6000) mit Restzeit-Ring, Pause-Knopf zuerst, Hover pausiert, Fokus stoppt, kein Start auf dem Telefon",
    "ankerlinks: jede Folie mit eigener URL (#wohnung-3), Marker als Links, history.replaceState nach dem Einrasten, hashchange springt"
   ]
  },
  "geprueft": "03.11.2026",
  "notiz": "Fünf Welten in einer Demo, je Variante ein Rezept. Zähler: boutique-hotel-gastgeber, Haus Wiek, Seehotel in Zarrentin am Schaalsee, 8 Zimmer (Newsreader + Mona Sans). Fortschrittsleiste: weingut-hofladen-herkunft, Weingut Kalkofen in Sommerach am Main, 12 Flurstücke mit den Lagen-Geländemodellen (EB Garamond + DM Mono). Daumen: immobilien-diskret-hochwertig, Vonderau Immobilien Mainz, Exposé Holzhaus in Ingelheim, 8 Bilder (Libre Caslon Display + Hanken Grotesk). Selbstlauf: kultur-programm-haltung, Kulturhaus Ziegelei in Rendsburg, 5 Folien je Sparte (Schibsted Grotesk + Atkinson Hyperlegible Next + IBM Plex Mono). Anker-Links: immobilien-diskret-hochwertig, Vonderau, Neubau Am Kornhaus in Mainz-Gonsenheim, 7 Wohnungen mit SVG-Grundrissen aus einem eigenen Generator und Gebäudeschnitt als Navigation. Bilder nur aus medien/ (selbst erzeugt) und eigenem SVG. Fallstrick Chrome 153: ::scroll-marker-group ohne feste Höhe nimmt keinen Platz ein (Höhe = Daumenhöhe bzw. 2 Reihen gesetzt). Prüfung 03.11.2026: pruef-demo ohne Fehler (Detailseite: 404 fundus-bilder/daten.js betrifft die Seite, nicht die Demo), kein Querscrollen bei 320/390 in allen Varianten, pruef-zugang je Variante ohne echten Befund; Fehlalarme: „kein Fokusstil“ am Band der Daumen-Variante ist der fokussierte ::scroll-marker (hat Rahmen 2 px), Kontrast von Hand im Gebäudeschnitt (Statuspunkt ::after und Schraffur „verkauft“, Text 5,2:1). Selbsturteil 4.",
  "varianten": [
   {
    "id": "zaehler",
    "name": "Zähler",
    "wann": "Hotel (Zimmer), Fotograf, Kultur, Kanzlei: ruhige Reihen mit 5 bis 10 Folien, bei denen die Menge zählt.",
    "werte": {
     "rezept": "boutique-hotel-gastgeber",
     "zaehler": "„01 / 08“ Mona Sans 300 46px wdth 112, tabular-nums; Gesamt 0.75rem wdth 125 versal; Trenner 26 × 1 px, -58°",
     "rolle": "Ziffer rollt translateY ±105 % in einer Maske height 1lh, 600 ms cubic-bezier(0.37, 0, 0.63, 1), Richtung folgt der Laufrichtung",
     "gleiten": "900 ms cubic-bezier(0.37, 0, 0.63, 1)",
     "folie": "clamp(280px, 44vw, 640px), Telefon 82vw; 3:2-Bild; Endabstand padding-inline-end 100 % minus Folienbreite, damit jede Folie einrasten und gezählt werden kann",
     "pfeile": "48 px rund, 1 px Rand, Hover Holz #6E5A47"
    }
   },
   {
    "id": "fortschritt",
    "name": "Fortschrittsleiste",
    "wann": "Weingut, D2C, Mode, Immobilien: Reihen ab etwa 6 Karten, bei denen die Strecke wichtiger ist als die Nummer.",
    "werte": {
     "rezept": "weingut-hofladen-herkunft",
     "leiste": "2 px, Spur #D8CFC0, Füllung Schiefer #2F3236, transform-origin links",
     "fuellung": "@keyframes scale von var(--anteil) 1 auf 1 1; --anteil = clientWidth / scrollWidth (ResizeObserver); animation-timeline: --flur; scroll-timeline: --flur x am Band, timeline-scope: --flur am gemeinsamen Vorfahren",
     "rueckfall": "ohne animation-timeline: Scroll-Handler setzt scale = Anteil + (1 − Anteil) × scrollLeft / Max",
     "bereich": "Text „05–08 / 12“ in DM Mono, aria-hidden; Ansage „Flurstück 5 bis 8 von 12“",
     "gleiten": "700 ms cubic-bezier(0.37, 0, 0.63, 1)",
     "karte": "clamp(232px, 21.5vw, 330px), Telefon 72vw"
    }
   },
   {
    "id": "daumen",
    "name": "Daumen",
    "wann": "Immobilien-Exposé, D2C, Mode, Hotel, Handwerk (Referenzen): Bildgalerien eines Objekts, in denen man ein bestimmtes Bild sucht.",
    "werte": {
     "rezept": "immobilien-diskret-hochwertig",
     "nativ": "scroll-marker-group: after; ::scroll-marker content '' / attr(data-titel), background var(--daumen) center/cover (url je Folie inline), height var(--daumen-h) = clamp(44px, 4.6vw, 64px), opacity .72, :target-current Rahmen 2 px #02385C",
     "gruppe": "grid 8 Spalten, Telefon 4 × 2; feste Höhe der Gruppe (Chrome 153 rechnet sonst 0)",
     "rueckfall": "ohne ::scroll-marker (oder per Pult): 8 Buttons mit Bild, aria-label „Bild 3: Treppe“, aria-current",
     "buehne": "100 % breit, 16:10, max-height 54svh, Telefon 4:3",
     "gleiten": "900 ms cubic-bezier(0.16, 1, 0.3, 1)",
     "zaehler": "„02 / 08 · Diele mit Südlicht“ über dem Bild"
    }
   },
   {
    "id": "autoplay",
    "name": "Selbstlauf mit Pause",
    "wann": "Kultur, Gastro, Hotel auf dem Desktop: Programm- oder Bildbühne mit höchstens 5 Folien, die von selbst wechseln darf.",
    "werte": {
     "rezept": "kultur-programm-haltung",
     "intervall": "6000 ms (mindestens 5000; Vorführung 3200)",
     "restzeit": "Ring 44 px, r 20, stroke 2, stroke-dashoffset = Umfang × (1 − Rest / Intervall)",
     "wechsel": "400 ms cubic-bezier(0.25, 1, 0.5, 1) (Splide-Standard), Rücklauf 5 → 1 800 ms (Glide rewindDuration)",
     "pause_knopf": "erstes Element der Region, fester Name „Wechsel anhalten“, aria-pressed; gedrückt = gefüllter Ring",
     "hover": "pausiert, Restzeit bleibt stehen, läuft beim Verlassen weiter",
     "fokus": "stoppt ohne Neustart, außer auf dem selbst gedrückten Startknopf",
     "aria_live": "Band off während der Rotation, polite im Stand",
     "start": "nur bei hover: hover, pointer: fine, ab 761 px und ohne reduzierte Bewegung",
     "folien": "nicht sichtbare Folien inert; Auswahl 5 Buttons mit aria-current"
    }
   },
   {
    "id": "ankerlinks",
    "name": "Anker-Links",
    "wann": "Immobilien-Exposé, Hotel (Zimmer), Weingut (Lagen): wenn einzelne Folien per Link verschickt werden.",
    "werte": {
     "rezept": "immobilien-diskret-hochwertig",
     "adresse": "Folie id=\"wohnung-3\"; Marker a href=\"#wohnung-3\" mit aria-current; history.replaceState nach dem Einrasten, kein Verlaufseintrag je Folie",
     "laden": "Hash beim Start lesen und ohne Gleiten springen; hashchange gleitet; ohne v-Parameter öffnet #wohnung-n diese Variante",
     "marker": "Gebäudeschnitt: Etagen DG bis EG, je Wohnung ein Link mit Nummer, Zimmer, m² und Status (verfügbar, reserviert, verkauft)",
     "direktlink": "Anzeige vonderau-immobilien.de/am-kornhaus#wohnung-3, Knopf „Link kopieren“ per navigator.clipboard, Rückfall Markieren; Meldung role status 3 s",
     "grundriss": "SVG aus Raumliste: Außenwand 7, Innenwand 2,6, Fenster dreifach 0,9, Türen als Viertelkreis, Freifläche schraffiert",
     "gleiten": "900 ms cubic-bezier(0.16, 1, 0.3, 1)",
     "folien": "nicht sichtbare Folien inert"
    }
   }
  ]
 }
}
