{
 "$schema": "../../schema.json",
 "schema": "fundus/1",
 "id": "kapitel-kante-signatur",
 "name": "Kapitel-Kante als Signatur",
 "name_en": "Signature chapter edge (scroll-driven brand divider)",
 "kurz": "Die Kante zwischen zwei Kapiteln trägt die Leitidee: ein Bleistiftstrich, eine Wölbung wie ein Atemzug, eine Treppe mit Höhenkote oder eine Uhrzeit, die über Nacht weiterläuft, gezeichnet vom Scroll.",
 "kategorie": "Scroll & Section-Animationen",
 "kategorie_slug": "scroll",
 "kategorie_nr": 5,
 "bau_chat": "C2",
 "prioritaet": "A",
 "trendstatus": "aufsteigend",
 "belegstatus": "quellenbelegt",
 "website_belege": 0,
 "stimmung": [
  "filmisch",
  "warm"
 ],
 "stimmung_roh": [
  "warm",
  "handwerklich",
  "erzählend"
 ],
 "technik": [
  "css",
  "scroll-driven-css",
  "@property",
  "svg",
  "vanilla-js",
  "clip-path"
 ],
 "technik_gruppen": [
  "css",
  "js",
  "canvas"
 ],
 "leistungskosten": "niedrig",
 "steckbrief": {
  "beschreibung": "Die Kante zwischen zwei Kapiteln trägt die Leitidee der Marke über die ganze Seite. Bei der Tischlerei ist es ein Bleistiftstrich mit Anrissmarke, bei der Bäckerei eine Uhrzeit, die über Nacht weiterläuft, beim Bauunternehmen eine Treppe mit Höhenkote, beim Yogastudio eine Fläche, die sich wie ein Atemzug aufwölbt. Die Kante entsteht beim Scrollen (scroll-getrieben, mit Rückfall für ältere Browser), trägt auf Wunsch ein Kapitel-Wort oder eine Uhrzeit und sieht auf jeder Seite gleich aus. So wird aus einer Idee im Hero ein Ordnungsprinzip.",
  "warum_es_wirkt": "Eine Leitidee, die nur im Hero steht, ist nach dem ersten Bildschirm vergessen. Kehrt dieselbe Form an jeder Kapitelgrenze wieder, wird sie zur Handschrift: Man erkennt die Seite an der Kante wieder, nicht an einer Karte. Die Bewegung ist an den Scroll gebunden und damit an die Lesegeschwindigkeit. Sie zeigt den Übergang genau dann, wenn er passiert, und steht danach still. Trägt die Kante eine Station oder Uhrzeit, ordnet sie den Inhalt zusätzlich als Geschichte (erst das, dann das).",
  "wann_einsetzen": "Wenn das Rezept oder die Probe eine Leitidee hat, die eine Form hergibt: Strich, Wölbung, Stufe, Uhrzeit, Station. Für Startseiten und Kapitelseiten mit drei bis sechs Kapiteln. Handwerk, Bäckerei und Lebensmittelhandwerk, Bau und Immobilien, Praxis und Yoga, Weingut, Gebäudedienste. Die Variante zeitachse für Betriebe mit einem Tagesablauf oder Arbeitsgang (Backstube, Brauerei, Pflege, Hofladen).",
  "wann_nicht": "Nicht als Schmuck zwischen jeder Sektion einer langen Seite: höchstens eine Kante je Kapitelgrenze, auf Unterseiten sparsam. Nicht in Formularen, Preislisten und Rechtstexten. Nicht, wenn die Form nichts bedeutet; dann reicht sektionskante-shape als stille Kante ohne Bewegung. Die Kante schneidet nie Überschriften oder Bilder an: der Abschnitt davor braucht unten so viel Abstand, wie die Kante hoch ist. Keine erfundenen Uhrzeiten oder Arbeitsschritte, die Abläufe kommen vom Betrieb.",
  "varianten": [
   "linie: ein gezeichneter Strich (Bleistift, Kreide, Abzieher) läuft beim Scrollen über die Breite, an der Spitze ein kleines Werkzeug, mit Anrissmarke und Kapitel-Wort",
   "woelbung: die Fläche des nächsten Kapitels wölbt sich auf (Atemzug, Laib, Kissen), mit kurzem Überschwingen und Kapitel-Wort auf dem Scheitel",
   "stufe: die Kante tritt Stufe für Stufe heraus (Treppe, Raster, Terrasse), an der obersten Stufe eine Höhenkote",
   "zeitachse: jede Kante trägt eine fortlaufende Uhrzeit oder Station, eine mitlaufende Uhr zählt zwischen den Kapiteln weiter, die Flächen wechseln von Nacht zu Morgen"
  ],
  "umsetzung": "1) Kante als eigenes Element am Anfang jedes Kapitels (<div class=\"kante\" aria-hidden=\"true\"> plus ein sichtbares Kapitel-Wort als echter Text). Sie ragt mit negativem Abstand in den Abschnitt davor; der Abschnitt davor hat unten mindestens Kantenhöhe plus Luft. 2) Ein registrierter Fortschritt @property --kp (<number>, 0 bis 1). Er wird per animation: kante-kp linear both; animation-timeline: view(); animation-range-start: cover 5%; animation-range-end: cover 50% gesetzt. Wichtig: animation-range immer als Langform und nach der Kurzschreibweise animation, sonst setzt animation sie auf normal zurück. 3) Alle Teile der Kante rechnen nur aus --kp: stroke-dashoffset (linie), transform: scaleY (woelbung), scaleY je Stufe mit clamp(0, --kp * n − i, 1) (stufe), Strichlänge und Uhrzeit (zeitachse). Nur transform, opacity und stroke, kein Layout. 4) Rückfall ohne animation-timeline: ein passiver Scroll-Listener mit requestAnimationFrame rechnet denselben Fortschritt aus getBoundingClientRect und setzt --kp je Kante. 5) Reduzierte Bewegung: --kp: 1, die Kante steht fertig da. 6) zeitachse: die mitlaufende Uhr liest den Fortschritt der Kapitel und schreibt die Zeit per textContent, aria-hidden; die echte Uhrzeit steht als <time> in jeder Kante.",
  "mobil": "Gleiche Kante, flacher: Höhe per clamp() mit der Breite. Kapitel-Wort und Uhrzeit bleiben lesbar (mindestens 0,875 rem). Der Scroll-Bereich hängt an der Bildschirmhöhe, die Kante ist also auch am Telefon fertig, bevor sie die Mitte erreicht.",
  "reduzierte_bewegung": "Die Kante steht fertig da (--kp: 1), ohne Zeichnen, Wölben oder Stufen. Die Uhr zeigt die Uhrzeit des Kapitels.",
  "barrierefreiheit": "Die Form ist Dekoration (aria-hidden). Kapitel-Wort und Uhrzeit sind echter Text, der jederzeit vollständig im DOM steht und nach dem Bereich ganz sichtbar ist. Überschriften liegen nie unter der Kante. Kontrastmodus: Kante als 2 px CanvasText-Linie."
 },
 "messwerte": {
  "easing": "linear (an den Scroll gekoppelt); Wölbung mit Überschwingen 1,12 bei 70 % des Bereichs",
  "dauer_ms": "keine feste Dauer: Bereich cover 5 % bis cover 50 % der Kante (rund die halbe Bildschirmhöhe Scrollweg)",
  "stagger_ms": "Stufen: je Stufe ein Siebtel des Bereichs versetzt",
  "distanz": "Kantenhöhe 48 bis 120 px je nach Variante",
  "sonstiges": "Regeln: animation-range als Langform nach animation; Kante nie über Überschriften; reduziert steht sie fertig",
  "herkunft": "eigene Festlegung",
  "quelle": "Bäckerei-Probe 04.11.2026 (Jury), Starter praxis, immobilien, weingut, gebaeudedienste"
 },
 "kurve": {
  "bezier": [
   0,
   0,
   1,
   1
  ],
  "css": "cubic-bezier(0, 0, 1, 1)",
  "name": "linear",
  "dauer_ms": null
 },
 "gesehen_bei": [
  {
   "seite": "MDN: animation-range-start",
   "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-range-start",
   "auszeichnung": "",
   "beobachtung": "Abgerufen 04.11.2026: animation-range-start steckt in der Kurzschreibweise animation als reset-only-Wert. Die Kurzschreibweise setzt einen vorher gesetzten Wert gleicher oder niedrigerer Spezifität auf normal zurück, deshalb animation-range nach animation deklarieren. Genau dieser Fehler hat in der Bäckerei-Probe die Signatur zerstört.",
   "art": "artikel"
  },
  {
   "seite": "MDN: Firefox 159 release notes",
   "url": "https://developer.mozilla.org/Firefox/Releases/159",
   "auszeichnung": "",
   "beobachtung": "Laut Recherche Runde 4 (geöffnet 04.11.2026): scroll-getriebene Animationen ab Firefox 159 (27.10.2026) standardmäßig an, damit in allen Engines. Der JS-Rückfall bleibt für ältere Browser.",
   "art": "artikel"
  },
  {
   "seite": "MDN: Scroll-driven animation timelines",
   "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Scroll-driven_animations/Timelines",
   "auszeichnung": "",
   "beobachtung": "Gefunden 04.11.2026: Leitfaden zu scroll() und view() als Zeitleiste; Grundlage für view() je Kante mit benannten Bereichen wie cover.",
   "art": "artikel"
  }
 ],
 "tutorials": [
  {
   "titel": "MDN: animation-range-start",
   "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-range-start"
  },
  {
   "titel": "MDN: Scroll-driven animation timelines",
   "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Scroll-driven_animations/Timelines"
  }
 ],
 "kombinierbar_mit": [
  "sektionskante-shape",
  "theme-farbwechsel-scroll",
  "svg-pfad-zeichnen-scroll",
  "prozess-timeline-wachsende-linie",
  "scrollspy-kapitelnavigation",
  "section-overlap-uebergang",
  "foto-hero-wortmarke",
  "vt-cross-document-mpa"
 ],
 "urls": {
  "detail": "https://cecodesign.de/lab/fundus/scroll/kapitel-kante-signatur/",
  "meta": "https://cecodesign.de/lab/fundus/scroll/kapitel-kante-signatur/meta.json",
  "demo": "https://cecodesign.de/lab/fundus/scroll/kapitel-kante-signatur/demo"
 },
 "herkunft": {
  "quelldateien": [
   "Recherche Runde 4, 04.11.2026",
   "Bäckerei-Probe 04.11.2026 (JURY.md, PROBE-PROTOKOLL.md)",
   "Tischlerei-Probe 04.11.2026 (PROBE-PROTOKOLL.md)"
  ],
  "pruefnotizen": [
   "Zwei Probe-Agenten (Tischlerei „Anriss“, Bäckerei „Laibkante“) haben das Muster unabhängig vermisst und von Hand gebaut. Die Starter praxis (Uferlinie), immobilien (Stufenkante), weingut (Terrassen) und gebaeudedienste (Fuge mit Abzieher) lösen es je einzeln.",
   "Jury Bäckerei 04.11.2026: Die Signatur war kaputt, weil die Kurzschreibweise animation die gestaffelten animation-range-Werte überschrieb (gemessen normal / normal). Die Demo prüft deshalb getComputedStyle(el).animationRangeStart.",
   "Kein Website-Beleg mit Messwerten. Bereiche und Höhen sind eigene Festlegung."
  ]
 },
 "bau": {
  "status": "fertig",
  "kurz": "Die Kante zwischen zwei Kapiteln trägt die Leitidee: ein Bleistiftstrich, eine Wölbung wie ein Atemzug, eine Treppe mit Höhenkote oder eine Uhrzeit, die über Nacht weiterläuft, gezeichnet vom Scroll.",
  "demo": true,
  "abhaengigkeiten": [],
  "werte": {
   "fortschritt": "@property --kp { syntax: '<number>'; inherits: true; initial-value: 0 } auf jeder .kante; alle Teile rechnen nur aus --kp (stroke-dashoffset, transform, translate, opacity, clip-path)",
   "zeitleiste": "animation: kante-kp linear both; animation-timeline: view(); animation-range-start: cover 5%; animation-range-end: cover 50% (die Kante selbst ist das Subjekt)",
   "regel_langform": "animation-range und animation-timeline immer als Langform NACH der Kurzschreibweise animation; Varianten tauschen nur animation-name und animation-timing-function. Gemessen in Chromium 04.11.2026: animationRangeStart cover 5%, animationRangeEnd cover 50%, animationTimeline view() in allen vier Varianten",
   "lage": "Kante absolut am Anfang des Kapitels, bottom: 100%, ragt in den Abschnitt davor; dieser hat unten --kh plus 2,75 bis 6,5 rem Luft, keine Kante liegt über einer Überschrift",
   "erste_kante": "Auftakt min-height: min(80svh, 860px), damit die erste Kante am unteren Bildrand beginnt (auch am Telefon)",
   "linie": "--kh clamp(64px, 7vw, 92px); Strich als SVG-Pfad mit pathLength 1, stroke-dasharray 1 1, stroke-dashoffset calc(1 - --kp), stroke 2.6, #2E2C29, Graphitkorn feTurbulence 0.9/0.35 + feDisplacementMap scale 2.2; kein vector-effect: non-scaling-stroke (bricht pathLength); Stift translate calc(--kp * 100cqw), rotate -24deg; Krähenfuß bei 7 %, gezeichnet ab --kp 0,05 (Faktor 9); Kapitel-Wort clip-path ab --kp 0,06 (Faktor 6); Maß rechts ab --kp 0,82",
   "woelbung": "--kh clamp(56px, 9vw, 132px); Fläche des nächsten Kapitels als quadratische Kurve M-20 10 Q50 -10 120 10 (Fuß außerhalb des Bildes), scaleY(--kp) von unten; Atemlinie scaleY(--kp * 1.18), 1.5px #4C5B47; Keyframes kante-atem 0 → 1.12 (70 %) → 1, animation-timing-function cubic-bezier(0.37, 0, 0.63, 1); Wort auf dem Scheitel, sichtbar ab --kp 0,25 (Faktor 2,5); 2 px Überlapp gegen die Haarfuge",
   "stufe": "--kh clamp(60px, 10vw, 150px); 6 Stufen, Höhe (i+1)/6, translate calc((1 - clamp(0, --kp * 8 - i, 1)) * 104%), border-top 2px Textfarbe; Höhenkote über der obersten Stufe ab --kp * 8 - 5.2; Kapitel unten --kh + clamp(5rem, 8vw, 6.5rem)",
   "zeitachse": "Kante im Fluss oben im Kapitel: Skala 1px + 16 Striche (8px), clip-path inset(… calc((1 - --kp) * 100%) …), Zeiger left calc(--kp * 100%); Uhrzeit Shrikhand clamp(2.5rem, 1.6rem + 4vw, 5rem) sichtbar mit --kp * 2.4; Fläche läuft unten über --verlauf clamp(7rem, 14vw, 11rem) in die Farbe des nächsten Kapitels (#1C1511, #2B211B, #3B2A1F, #6E4429, #EBD8BB, #F7F1E6); mitlaufende Uhr 21:30 → 06:15 interpoliert aus dem Fortschritt der Kanten, erscheint erst unter dem Kopf (300 ms cubic-bezier(0.16, 1, 0.3, 1), weg 200 ms cubic-bezier(0.7, 0, 0.84, 0))",
   "rueckfall": "ohne animation-timeline: passiver Scroll-Listener + requestAnimationFrame, cover = (vh - top) / (vh + Höhe), --kp = (cover - 0.05) / 0.45; Wölbung mit Sinus-Überschwingen 1,12; Knopf „JS-Rückfall zeigen“ im Pult",
   "vorfuehrung": "Selbst-Scroll von oben nach unten, Sinus, max(9000 ms, Kanten × 2200 ms), 1200 ms Halt, Schleife; reduziert Sprünge je Kapitel alle 1800 ms",
   "ui": "150 ms cubic-bezier(0.16, 1, 0.3, 1)",
   "schriften": "linie Special Gothic + Atkinson Hyperlegible Next, woelbung Fraunces + Familjen Grotesk, stufe Big Shoulders + Google Sans Flex + Geist Mono, zeitachse Shrikhand + Onest"
  },
  "ausloeser": "scroll",
  "touch": "Gleiches Verhalten wie am Desktop, Kanten flacher per clamp(). Die Bereiche hängen an der Bildschirmhöhe, die Kante ist am Telefon vor der Mitte fertig. Maß-Beschriftung der Linie unter 520 px aus, die Uhr sitzt unten links ohne Ortszusatz. Geprüft bei 390 × 844 an sechs Scrollständen.",
  "reduziert": "--kp: 1 ohne Animation: Strich, Wölbung, Treppe und Skala stehen fertig, Kapitel-Wörter voll sichtbar; die Uhr zeigt die Zeit des zuletzt erreichten Kapitels. Vorführung springt je Kapitel.",
  "korrekturen": {},
  "geprueft": "04.11.2026",
  "notiz": "Vier Welten: linie handwerk-werkstatt-klartext, Tischlerei Brümmer, Soltau; woelbung yoga-studio-achtsamkeit, Atemraum, Bad Harzburg; stufe bau-unternehmen-projekt, Heitmüller Bau, Lippstadt; zeitachse lebensmittelhandwerk-theke, Backstube Ohlendorf, Peine. Bewegung live geprüft (Chromium headless, 1280 × 800 und 390 × 844, sechs Scrollstände je Variante ohne angehaltene Bewegung, getComputedStyle animationRangeStart/End = cover 5% / cover 50%). pruef.sh ok, pruef-zugang alle vier Varianten ohne Befund. Antwort auf Jury Bäckerei 04.11.2026 (Leitidee nicht spürbar, Spezifitätsfehler animation vs. animation-range). Selbsturteil 4.",
  "varianten": [
   {
    "id": "linie",
    "name": "Linie (Tischlerei, Bleistift)",
    "wann": "Handwerk, Tischlerei, Malerbetrieb, Gebäudedienste: ein Werkzeugstrich (Bleistift, Kreide, Abzieher) zieht die Kapitelgrenze, Kapitel auf gleichem Grund.",
    "werte": {
     "kh": "clamp(64px, 7vw, 92px)",
     "form": "SVG-Strich pathLength 1 + Stift an der Spitze + Krähenfuß",
     "rezept": "handwerk-werkstatt-klartext"
    }
   },
   {
    "id": "woelbung",
    "name": "Wölbung (Yoga, Atemzug)",
    "wann": "Yoga, Praxis, Bäckerei (Laib), Hotel (Kissen): die nächste Fläche hebt sich mit kurzem Überschwingen, das Kapitel-Wort sitzt auf dem Scheitel.",
    "werte": {
     "kh": "clamp(56px, 9vw, 132px)",
     "keyframes": "kante-atem 0 → 1.12 (70 %) → 1, cubic-bezier(0.37, 0, 0.63, 1)",
     "rezept": "yoga-studio-achtsamkeit"
    }
   },
   {
    "id": "stufe",
    "name": "Stufe (Bau, Höhenkote)",
    "wann": "Bau, Immobilien, Architektur, Weingut (Terrassen): die Kante tritt Stufe für Stufe heraus, oben eine Höhenkote oder Station.",
    "werte": {
     "kh": "clamp(60px, 10vw, 150px)",
     "stufen": "6, je clamp(0, --kp * 8 - i, 1)",
     "rezept": "bau-unternehmen-projekt"
    }
   },
   {
    "id": "zeitachse",
    "name": "Zeitachse (Bäckerei, über Nacht)",
    "wann": "Betriebe mit Tagesablauf oder Arbeitsgang (Backstube, Brauerei, Pflege, Hofladen): jede Kante trägt Uhrzeit und Station, die Uhr läuft mit, die Flächen gehen von Nacht zu Morgen.",
    "werte": {
     "form": "Skala mit 16 Strichen + Uhrzeit, Kante im Fluss",
     "verlauf": "clamp(7rem, 14vw, 11rem)",
     "uhr": "21:30 → 06:15 aus dem Fortschritt",
     "rezept": "lebensmittelhandwerk-theke"
    }
   }
  ]
 }
}
