# Emma's Schatzkiste — Design-System Live-Dateien: `index.html`, `hilfe-verein.html`, `shop.html`, `assets/site.css`. Stand 2026-09-21. Offene Punkte: [`README.md`](README.md). ## Benannte Referenz Workspace-Regel: *kein UI-Code ohne benannte Referenz*. Diese Seiten stehen auf einer: **[`emmas-schatzkiste-ds.md`](../design-references/entries/emmas-schatzkiste-ds.md)** — das mitgelieferte, gebundene Handoff-Design-System. Neue Familie *Warm Local Retail / Handmade Consumer*; vorher hatte die Bibliothek für ein Projekt dieser Art keinen Eintrag. **Übernommen:** die handgelegte Headline (jede Zeile eigenes Grid-Item mit eigener Rotation), die Zwei-Farbwelten-Trennung Shop = blau / Verein = gelb, die eigene Kante der Vereinsseite (gelbe 6px-Unterkante, rotierte Pille statt Eyebrow-Text, zwei Buttons statt einem, freies Logo unten rechts), durchgehende Pill-Rundung, blaustichige Schatten, 4px-Raster, Motion ausschließlich als Zustandsfeedback, Sprache und Tonalität. **Nicht übernommen:** Dreifach-Akzent, neunstufige Typo-Skala, die durchgefallenen Textkontraste, die fixen Pixel-Stopps im Hero-Scrim, `mix-blend-mode` auf den Logos, Pexels-Hotlinks. Begründung je unten. ## Produktwahrheit Baby- und Kinder-Second-Hand-Laden in **84056 Rottenburg a.d. Laaber**, seit September in neuer Hand. Dazu der **Hilfe Verein** („Hilfe. Herz. Hoffnung."), **noch nicht eingetragen** — deshalb keine Spendenstufen, kein Zahlungsformular, kein Mitgliedschafts-Flow. Drei Hilfearten, genau wie vom Kunden benannt: Geldspenden, ehrenamtliche Helfer, Weitersagen. Kontakt nur über `tel:` und `mailto:`. **Opa Martin** ist der Inhaber; Bild und Name, kein Bildtext — Kundenvorgabe. Foto seit 2026-09-24 in `assets/opa-martin.jpg`, 4:5 zugeschnitten, gleich behandelt wie das Story-Bild (gekippt, weiß gerahmt). Der Online-Shop ist bewusst geparkt. Tonalität: **Du-Form**, Satzkleinschreibung, keine Emoji. ## Drei Abweichungen vom Handoff Alle drei freigegeben. Der Handoff erklärt Farben und Typo für final; diese drei Punkte kollidieren mit den [Guardrails](../design-references/GUARDRAILS.md), zwei davon sind zusätzlich messbare Fehler. ### 1. Farbe — Guardrail bewusst gelockert Guardrail: *„Ein einziger Akzent-Ton pro Seite."* Die erste Fassung hielt ihn streng ein und wurde vom Auftraggeber am 2026-09-21 als **zu blass** zurückgewiesen. Der Guardrail ist damit bewusst gelockert — dasselbe Vorgehen wie bei Hypno Active, wo die drei Logofarben ebenfalls gegen den Guardrail stehen und im CSS-Kopf dokumentiert sind. Damit die Hierarchie trotzdem trägt, gilt eine harte Ersatzregel: > **Farbe lebt in Flächen und in Display-Typo — nie im Fließtext.** Alle drei Buntfamilien laufen wieder, aber ausschließlich als Sektionsflächen, Kachelfüllungen, Icon-Chips und H1-Zeilen. Jeder Fließtext bleibt `--ink-500` oder `--ink-700`. So konkurrieren die Farben nie auf derselben Leseebene. Die Seitenidentität bleibt: `--accent*` ist weiter pro Seite gesetzt und regiert Icons, Rahmen, Kontaktkarten, Footer-Kante und den aktiven Nav-Zustand. | Seite | `--accent` | `--accent-text` | `--accent-soft` | `--accent-line` | |---|---|---|---|---| | Startseite, Shop (`.page-shop`) | `--sky-500` | `--sky-600` | `--sky-50` | `--sky-400` | | Hilfe Verein (`.page-verein`) | `--sun-600` | `--sun-700` | `--sun-100` | `--sun-400` | **H1 wieder dreifarbig,** Reihenfolge pro Seite gespiegelt: Startseite Sky → Sun → Coral, Verein Sun → Coral → Sky. Zulässig, weil Display-Typo ab 24px die Large-Text-Schwelle 3.0 nutzt und alle drei Werte darüber liegen (auf Weiß 3.86 / 3.92 / 4.00, auf Creme 3.52 / 3.57 / 3.65). Im Fließtext wäre keiner davon erlaubt. **Ein gesättigtes Vollflächen-Band pro Seite.** Pastelltöne allein trugen die Seite nicht, sie verschwinden gegen Weiß. Startseite: „Für Familien" auf `--sky-500` mit weißer Überschrift und weißen Kacheln. Verein: „Wir brauchen Hilfe" auf `--sun-400` mit `--ink-700`. Weiß auf `--sky-500` misst 3.86 und reicht nur für Überschriften ab 24px — deshalb steht auf dem blauen Band **kein** Fließtext, der sitzt in den weißen Kacheln. `--ink-700` auf `--sun-400` misst 8.67 und ist überall zulässig. Der Seitenrhythmus ist damit: Foto-Hero → Weiß → Creme → gesättigtes Band → Weiß → Creme-Band → Footer. Coral bleibt unverändert **ausschließlich** Handlungsfarbe der primären Buttons. Eine bewusste Ausnahme: das Band *„Wo alles angefangen hat"* auf der Vereinsseite steht im Blau der Shop-Welt. Es verweist auf den Laden; die Tönung markiert den Themenwechsel. ### 1b. Kräftigere Tönungen (2026-09-24) Zweite Rückmeldung des Auftraggebers: die Farben wirken **„zu transparent"**. Gemessen lag das an drei Stellen: den 50/100-Pastellen (`--sky-50`, `--sun-100`, `--coral-50`) mit Leuchtdichte nahe Weiß, dem halbtransparenten Weißschleier im Hero, der bis 820px über dem Foto lag, und dem durchscheinenden Header (`rgba(255,255,255,.92)`). Begründung aus derselben Referenz: [`emmas-schatzkiste-ds.md`](../design-references/entries/emmas-schatzkiste-ds.md) hält bereits fest, dass *Pastell allein in dieser Familie nicht trägt*. Das wird jetzt eine Stufe weiter gezogen, ohne neue Farbfamilie: | Rolle | vorher | jetzt | |---|---|---| | Creme-Flächen, Footer, Verein-Hero | `--sun-100` `#FDF4DC` | `--sun-200` `#FBE3A0` (neu) | | Blaue Flächen, Shop-Hero | `--sky-50` / Weiß | `--sky-100` `#CFE6F8` | | Rosa Kachel | `--coral-50` | `--coral-100` `#FFD8CE` (neu) | | Icon-Chips | Pastell mit farbigem Icon | Vollton `--accent`, weißes Icon (3.86 / 3.92) | | Hero-Verlauf | Weiß bis 430px, Schleier bis 820px | Fläche bis zur Textspalte, 90px Kante | | Header | 92 % Weiß mit Blur | deckend Weiß | Die Kacheln im gelben Band der Vereinsseite tragen jetzt ihre Tönung (rosa, blau, gelb) statt einheitlich Weiß. **Kontrast neu gerechnet.** Auf den kräftigeren Gründen fallen die hellen Buntwerte auf ~3.0–3.1. Deshalb stehen H1-Zeilen, Band-Überschriften und der Name unter dem Porträt dort in der dunkleren Stufe derselben Familie: auf `--sun-200` `--sky-600` 4.43 · `--sun-700` 4.11 · `--coral-600` 3.93; auf `--sky-100` 4.35 · 4.04 · 3.87. Fließtext auf getöntem Grund ist `--ink-700` (≥ 11.0). **Gelb als Schrift (2026-09-24, dritte Rückmeldung: „geht mehr auf Braun als Gelb").** Ein Gelb, das auf hellem Grund 3:1 erreicht, liegt bei Leuchtdichte ≤ 0.3 — und das ist bei diesem Farbton zwangsläufig Ocker/Braun (`--sun-600`, `--sun-700`). Heller geht nur, wenn nicht die Füllung den Kontrast trägt. Lösung aus dem Logo übernommen: helles Markengelb `--sun-400` mit dunkler Kontur (`-webkit-text-stroke` in `--ink-700`, `paint-order: stroke fill`), wie die umrandeten Buchstaben der Wortmarke. Gilt nur für Displaygrößen (H1-Zeile, Band-Überschrift Verein). Kleinere gelbe Texte gibt es nicht mehr: `Lied vom Hilfe Verein` steht in Ink, Links auf der Vereinsseite in Ink mit 3px gelber Unterstreichung. Icon-Chips auf der Vereinsseite: `--sun-400` mit Ink-Icon (8.67). ### 2. Kontrast Guardrail: *„Graue Schrift auf farbigem Grund."* Gemessen statt geschätzt: | Paar | Verhältnis | | |---|---|---| | `--ink-300` `#8B94A0` auf `--sun-100` `#FDF4DC` | **2.80** | durchgefallen — das war die §19-Zeile | | weiß auf `--coral-400` `#F4715A` | **2.85** | durchgefallen | | weiß auf `--sky-400` `#4A9FE0` | **2.87** | durchgefallen — Header-Farbe des Handoffs | | `--ink-500` `#4A5560` auf `--sun-100` | 6.94 | bestanden | Der Fließtext auf Creme bestand also; dort war der Guardrail stilistisch. Die §19-Zeile und die beiden weiß-auf-bunt-Fälle waren echte Fehler. Geändert: Text auf farbigem Grund steht in `--ink-700` (13.20 auf Creme). Der Header ist weiß mit `--ink-700`-Navigation statt `--sky-400` mit Weiß. Für den Primärbutton kamen drei Stufen dazu, die bei jedem Zustand nachdunkeln und nie heller werden: | Zustand | Füllung | Weiß darauf | |---|---|---| | Ruhe | `--coral-600` `#C8402B` | 4.97 | | Hover | `--coral-700` `#B03422` | 6.25 | | Press | `--coral-800` `#A82F1E` | 6.80 | Dazu `--sun-700` `#8F6510` für gelben Text in Body-Größe (4.74 auf Creme); `--sun-600` bleibt für Displaygrößen. `--coral-400` und `--sky-400` bleiben als Flächen im System, nicht mehr als Grund für weißen Text. **Alle drei Seiten sind gegen WCAG AA geprüft, inklusive der Large-Text-Schwellen (≥24px, oder ≥18.66px ab Weight 700). Keine Verstöße.** Eine Stelle fiel dabei auf, die im Handoff nicht sichtbar war: `Lied vom Laden` stand in `--accent` bei 20px/600 — 3.86 bei verlangten 4.5, weil 20px/600 die Large-Text-Ausnahme nicht erreicht. Steht jetzt in `--accent-text`. ### 3. Typo-Skala Guardrail: *„Typo-Extreme (groß oder klein, kein Mittelmaß)."* Neun gleichmäßige Stufen (56 · 42 · 32 · 24 · 19 · 17 · 15 · 13 · 11) sind genau das Mittelmaß — 24/19/17/15 liegen so dicht, dass der Unterschied nicht mehr liest. Auf sechs reduziert, gestrichen sind 42, 24, 19 und 15: | Token | Wert | Face | |---|---|---| | `--t-display` | `clamp(34px, 7.2vw, 60px)` / 1.02 | Fredoka 700 | | `--t-h2` | `clamp(24px, 3.1vw, 30px)` / 1.12 | Fredoka 600 | | `--t-h3` | 20px / 1.3 | Fredoka 600 | | `--t-body` | 17px / 1.65 | Nunito 400 | | `--t-small` | 13px / 1.5 | Nunito 400 | | `--t-label` | 11px / 1.4, `+0.08em`, versal | Nunito 700 | Display-Tracking `-0.01em`. **Fredoka** und **Nunito** sind laut Handoff Platzhalter für einen nicht gelieferten Markenfont — ersetzen, sobald echte Binaries da sind. Kein Inter, kein System-Font. ## Weitere Korrekturen **Hero unter 820px.** Der Handoff markiert die fixen Gradient-Stopps (430/560/820px) selbst als Schwachstelle: unter ~820px deckt der Scrim das Foto fast vollständig zu. Ab 820px bleibt der Scrim wie spezifiziert; darunter stapelt der Hero — Foto oben, Text darunter auf voller Fläche, Scrim aus. **Mobile Header.** Wortmarke plus vier Nav-Items passen unter 640px nicht nebeneinander; die Nav brach aus den 64px heraus und legte sich über den Hero. Unter 640px ist die Wortmarke auf das Zeichen reduziert, die Nav enger und notfalls horizontal scrollbar statt umbrechend. **Logos freigestellt.** Die Client-JPEGs haben einen eingebackenen weißen Kasten, im Handoff per `mix-blend-mode: multiply` kaschiert — das bricht auf jedem dunkleren Grund und ließ auf der Vereinsseite sichtbar Weiß stehen. Beide sind jetzt echt freigestellt (Flood-Fill über randverbundenes Nahe-Weiß plus weiche Kante, 800px, 96-Farben-Palette) und liegen als `assets/logo-*.png`, zusammen 135 KB statt 326 KB. Blend-Mode ist raus. **Fokusring.** `--ring-focus` stand im Base-Block **vor** den Button-Regeln. Bei gleicher Spezifität gewinnt die spätere Regel, also überschrieb `.btn--primary` ihre eigene `box-shadow` über den Ring: auf Buttons war für Tastaturnutzer gar kein Fokus sichtbar. Der Fokus-Block steht jetzt am Dateiende, und `.btn:focus-visible` setzt Ring **und** eigenen Schatten. Geprüft mit echter Tab-Navigation. **Keine Hotlinks.** Die beiden Pexels-Fotos waren auf ein fremdes CDN verlinkt. Statt sie zu übernehmen liegen beschriftete Platzhalter in `assets/`, die unübersehbar als solche lesen. Ersetzen, siehe README. ## Bilder Alle Fotos von **Pexels**, [Lizenz](https://www.pexels.com/license/) am 2026-09-21 geprüft: kommerzielle Nutzung frei, keine Namensnennung nötig, Selbsthosting erlaubt. Sie sind **heruntergeladen und selbst gehostet**, nicht vom fremden CDN verlinkt wie im Handoff. | Datei | Pexels-ID | Motiv | |---|---|---| | `assets/hero-start.jpg` | 10831693 | bunte Holzfahrzeuge auf Holz | | `assets/hero-verein.jpg` | 34148341 | Kindersachen auf der Kleiderstange | **Bewusst keine Kinderfotos.** Pexels gibt für erkennbare Personen **kein Model Release**; für eine deutsche Gewerbeseite wäre das ein unnötiges Risiko. Deshalb Sachmotive und, beim Story-Bild, Hände ohne Gesicht. Aus demselben Grund aussortiert: Motive mit klar erkennbaren Personen und englischen Aufdrucken („VOLUNTEER", „DONATE") sowie die generischen Hände-im-Kreis-Klischees. Beim Verein-Hero war im ersten Zuschnitt ein fremdes Kleidungs-Etikett sichtbar — weg geschnitten, weil die Pexels-Lizenz Darstellungen untersagt, die eine Markenempfehlung nahelegen. Zuschnitte sind rechtsbetont: die Textspalte sitzt links unter dem Scrim, das Motiv muss im rechten Drittel liegen. Alle 2000×1100, progressives JPEG, Qualität 76. Das Vereinslogo im Hero liegt auf einer weißen Karte — auf dem gemusterten Stoff war die feine Schrift darin sonst nicht lesbar. ## Decor-Muster Kundenwunsch 2026-09-24: die farbigen Flächen wirkten leer. Referenz ist die Handoff-Komponente **`Decor` — „flat decorative layer" (`variant`, `opacity`)**; sie steht in der Komponentenliste des Handoffs, wurde dort aber nie ausgeführt. `assets/decor/source.svg` ist eine nahtlose Kachel mit elf flachen Spielzeug-Silhouetten (Teddy, Ente, Auto, Ball, Bauklotz, Rassel, Stern, Ballon, Stapelturm, Herz, Segelboot), selbst gezeichnet. Daraus sind sieben vorgefärbte Varianten erzeugt (`warm`, `cool`, `rose`, `sky`, `sun`, `hero-shop`, `hero-verein`), eingebunden als normales Hintergrundbild: immer der Ton der Fläche, eine Stufe dunkler — ein Schatten, kein zweites Motiv. Kachel 600px, auf dem Handy 440px (auf Kundenwunsch größer, gleich kräftig). **Nicht als CSS-Maske.** Die erste Fassung färbte eine einzige SVG per `mask` ein und war in Safari (Mac) komplett unsichtbar. Vorgefärbte Dateien sind etwas redundanter, laufen aber in jedem Browser. Den Hero-Übergang zur Fotokante macht nur noch eine reine Verlaufsmaske. Liegt auf: Heros (Desktop nur über der Farbfläche, zur Fotokante ausgeblendet), allen getönten und gesättigten Feldern, den Bändern und dem Footer. Weiße Sektionen bleiben leer, damit der Rhythmus Weiß ↔ Farbe erhalten bleibt. Kontrast gegen die **dunklere** Musterfarbe gemessen, nicht gegen den Grund: `--ink-700` 7.41–9.71, Weiß auf dem Blau-Band 4.65. ## Anfahrt und Karte (2026-09-25) Adresse und Öffnungszeiten von Google Maps übernommen: **Hollerstraße 2, 84056 Rottenburg a.d. Laaber**, **Mo–Fr 9:00–13:00**, Sa/So geschlossen. Stehen jetzt im Footer aller Seiten, in der Kontaktkarte der Vereinsseite, auf der Shop-Seite und in der neuen Sektion „So findest du uns" (`index.html#anfahrt`). **Die Karte ist eine Zwei-Klick-Lösung.** Ein Google-Maps-iframe beim Seitenaufruf würde die IP jedes Besuchers an Google übertragen und bräuchte eine Einwilligung nach § 25 TDDDG — also ein Banner. Stattdessen steht dort eine getönte Fläche mit „Karte laden"; erst der Klick setzt das iframe ein (Inline-Skript am Ende von `index.html`, das einzige JavaScript der Site). Gemessen: vor dem Klick keine einzige Anfrage an Google. Datenschutzerklärung Abschnitt 4a beschreibt das. „Route planen" ist ein normaler Link. Die Aussage „null Anfragen an Dritte" aus dem Abschnitt Recht gilt damit weiter für den Seitenaufruf, nicht mehr nach dem Klick auf die Karte. Header: beide Zeichen (Laden und Hilfe Verein) nebeneinander auf allen Seiten. ## Ladenfoto und Lieder (2026-09-26) Das Story-Bild ist jetzt das echte Schaufenster (Kundenfoto, `assets/laden-front.jpg`, 3:2 mit Schild, Ballonbogen und Eingang) statt des Pexels-Motivs; `.story__img` dafür von 4:3 auf 3:2. Bildnachweis im Impressum angepasst. Die Player spielen echte Lieder: `assets/audio/lied-laden.mp3` (2:12, Startseite) und `lied-verein.mp3` (3:21, Vereinsseite) — ein Lied pro Seite, wie vorgegeben. Kein Autoplay. Fortschritt ist ein echter ``, per Tastatur bedienbar. **Abweichung vom Handoff:** keine gemerkte Abspielposition in `localStorage` — das wäre Speicherung auf dem Endgerät (§ 25 TDDDG) und widerspräche dem Versprechen der Datenschutzerklärung, das die Seite bannerfrei hält. ## Motion Nur Zustandsfeedback, wie im Handoff: 120ms Farbe, 200ms Lift, 340ms alles Größere, `--ease: cubic-bezier(.2,.6,.3,1)`. Hover hebt 3px und vertieft den Schatten, Press `scale(.97)` mit `--shadow-xs`. Kein Load-Fade, kein Parallax, keine Loop-Animation, kein Bounce-Easing. `prefers-reduced-motion: reduce` schaltet Transitions ab und stellt Headline, Pille und Logo aufrecht. ## Recht und Datenschutz Kein Anwaltsersatz — aber die technische Seite ist so gebaut, dass möglichst wenig zu regeln bleibt. **Die Seite macht null Anfragen an Dritte.** Gemessen im Browser: keine Cookies, kein Local oder Session Storage, keine Skripte, keine Iframes, keine Fremd-Origins. Damit ist § 25 TDDDG nicht berührt und **ein Einwilligungsbanner ist nicht erforderlich** — es gibt nichts, wozu man einwilligen könnte. Das ist die bessere Lösung als ein aufgesetztes Banner: kein Klickhindernis, keine Consent-Logik, nichts, was falsch konfiguriert sein kann. **Schriften selbst gehostet.** Vorher kamen Fredoka und Nunito von `fonts.googleapis.com` / `fonts.gstatic.com`. Das überträgt die IP jedes Besuchers an Google; das LG München I hat darin am 20.01.2022 (3 O 17493/20) eine Verletzung des Persönlichkeitsrechts gesehen. Beide liegen jetzt als woff2 in `assets/fonts/`, eingebunden über `assets/fonts.css`. Es sind Variable Fonts — alle Schnitte einer Familie in einer Datei, deshalb je eine `@font-face`-Deklaration mit Gewichtsbereich statt sechs. Nur die Subsets `latin` und `latin-ext`, zusammen 106 KB. Lizenz SIL OFL 1.1, Lizenztexte liegen daneben. **Was bewusst fehlt:** die OS-Plattform. Sie wurde zum 20.07.2025 abgeschaltet (VO (EU) 2024/3228), die Hinweispflicht ist entfallen, und ein stehengebliebener Link darauf ist inzwischen selbst abmahnfähig. Beim Übernehmen alter Rechtstexte ist das der erste Punkt, den man rauswerfen muss. **Zwei neue Seiten:** `impressum.html` (§ 5 DDG — nicht mehr § 5 TMG, das ist seit Mai 2024 abgelöst) und `datenschutz.html`. Beide nutzen die `.prose`-Klassen. Offene Angaben stehen als `.todo`-Felder mit gestricheltem Coral-Rahmen im Fließtext, damit nichts davon versehentlich live geht, plus ein `.prose__warn`-Kasten oben auf jeder Seite. ## Mobil und Touch **Überarbeitung 2026-09-24** (Kundenrückmeldung: Einstieg schwach, Header klobig, zu lang, Headline zu klein). Referenz unverändert das Handoff-DS, geändert sind nur Verhältnisse: - **Header** wieder einzeilig und sticky: Zeichen links (Name bleibt für Screenreader im Link), vier Punkte rechts, aktiv als 3px-Akzentkante statt Pille. Ziele weiter ≥ 44px, passt bis 320px. - **Hero** stapelt Text zuerst, Foto danach als gekipptes, gerahmtes Bild wie `.story__img`. Die Headline beginnt bei 212px statt ~560px. - **Headline** so groß, wie das längste Wort in die Spalte passt: `min(48px, Spalte / 7.4)`, Verein `/ 8.1` wegen „zusammenhalten!". 45px statt 34px bei 375. Kontur .075em. - **Rhythmus** gestrafft: Abstände 64 → 40px, Porträt max. 260px, Story-Bild 3:2. Startseite bei 375px 4936 → 4260px hoch. Die Angaben unten zum zweizeiligen, nicht-stickigen Header sind damit überholt. Geprüft bei 320 · 375 · 390 · 640 · 768 · 1024 · 1440 · 1920 px, auf allen fünf Seiten, jeweils auf horizontalen Overflow, Zielgrößen, Schriftgrößen und Randabstände. Alles sauber. Gefunden und behoben wurde dabei: **Der Header war auf dem Handy kaputt.** Nav-Links 28px hoch, Wortmarken-Link 32px breit, und unter 400px scrollte die Navigation seitlich weg, ohne dass es jemand sieht. Jetzt unter 640px zwei Zeilen: Wortmarke mittig, darunter die vier Punkte als Viererraster über die volle Breite, jedes Ziel 44px. „Hilfe Verein" bricht bei 320px sauber um. Der Header ist auf dem Handy dafür **nicht mehr sticky** — zwei Zeilen würden dauerhaft ein Sechstel des Displays wegnehmen, und bei fünf Unterseiten ist eine mitlaufende Navigation kein Verlust. **Zielgrößen nach WCAG.** Zwei Schwellen, bewusst getrennt: | Element | vorher | jetzt | Maßstab | |---|---|---|---| | Nav-Links, Wortmarke | 28–34px | 44px | 2.5.5 (AAA) | | Telefon/E-Mail in Kontaktkarten | 23px | 44px | wichtigste Links der Seite | | Telefon/E-Mail im Impressum | 23px | 44px | stehen allein, nicht im Satz | | Footer-Links | 21px | 30px Desktop, 44px Handy | 2.5.8 (AA) verlangt 24px | Links **mitten im Fließtext** (etwa der Pexels-Verweis) bleiben unverändert — für die gilt die Inline-Ausnahme von WCAG 2.5.8. **Schriftgrößen.** Die 11px-Versallabels gehen auf dem Handy auf 12px hoch. Auf dem Desktop bleiben sie bei 11px, so wie das Handoff-DS es vorgibt. **Versionierte Stylesheets.** Die CSS-Links tragen einen Hash des Dateiinhalts (`site.css?v=…`). Ändert sich das CSS, ändert sich die URL, und Besucher mit altem Browser-Cache bekommen zwingend die neue Datei. `deploy.sh` setzt den Hash bei jedem Deploy automatisch neu. Das war keine Theorie: beim Testen hat der Panel-Cache mehrfach veraltetes CSS ausgeliefert und Korrekturen als „nicht gewirkt" erscheinen lassen. ## Technik Statische Seiten ohne Build, wie die übrigen `Websites/*` im Workspace. Eine Abweichung vom Hausmuster: das CSS liegt als `assets/site.css` statt inline, weil es drei Seiten trägt. Icons sind als Lucide-Pfade inline gesetzt — kein CDN-UMD-Build, keine Netzabhängigkeit. Fonts über Google Fonts mit `preconnect`. Lokal ansehen: ```bash cd "/Users/andrej/ASX Studio/Emmas schatzkiste" && python3 -m http.server 4173 ```