Craniosacrale Körperarbeit & Yoga
Stefanie Kaindl
Sanfte Berührung und Bewegung — Pfaffenhofen a. d. Ilm & Paunzhausen.
Papier statt Weiß, Tinte statt Schwarz, eine einzige Olive. Zwei gleichwertige Angebote, eine Person, ein leiser Ton — große Serif-Überschriften in niedrigem Gewicht, Haarlinien statt Rahmen, und Olive als einzige Akzentfarbe.
Diese Seite ist die Übersicht: Tokens, Typografie, Formen und alle achtzehn Komponenten der Website — jede mit ihrem Vertrag. Sie ist aus dem Bestand abgeleitet, nicht entworfen: jeder Wert hat eine Quelle im Repo.
#f3f0e9, Schrift ein warmes Tintenschwarz #1d1c17 (15,0:1). Reines Weiß und reines Schwarz kommen nicht vor.#616949. Olive ist Fläche (Bänder, Footer), Textlink auf Papier (5,1:1), Button-Variante und Fokusring. Es gibt keine zweite Markenfarbe — Türkis, Blau, Korall gab es einmal (Legacy-Tokens sage, therapeutic, taupe) und darf nicht zurückkommen.ink-60 ist rgba(29,28,23,.68), nicht ein neues Grau. Jede Textfarbe wird gegen die tatsächliche Fläche gemessen — gegen paper-deep, nicht nur gegen Papier.prefers-reduced-motion schaltet alles ab — verpflichtend.Links die Fläche, in der Mitte der Wert (Papier-Kontext), rechts der gemessene Kontrast. Die zweite Zeile jeder Zelle nennt den Wert für die inverse Fläche — Olive oder dunkles Foto. Es gibt keinen Dark-Mode: die „zweite Fläche" ist eine Bild- und Bandfläche, keine Umschaltung.
| Fläche | Token | Wert | Kontrast (gemessen) |
|---|---|---|---|
| Fläche | |||
--paperinvers: #241a11 | #f3f0e9 | — | |
--paper-softinvers: #f3f0e9 | #f8f6f1 | — | |
--paper-deepinvers: #eae6db | #eae6db | — | |
--paper-darkinvers: #ded9cb | #ded9cb | — | |
| Tinte | |||
--inkinvers: #f3f0e9 | #1d1c17 | 15,0:1 Papier · 13,7:1 paper-deep | |
--ink-80invers: rgba(243, 240, 233, 0.8) | rgba(29, 28, 23, 0.8) | 8,3:1 Papier | |
--ink-60invers: rgba(243, 240, 233, 0.72) | rgba(29, 28, 23, 0.68) | 5,5:1 Papier · 5,3:1 paper-deep | |
--ink-45invers: rgba(243, 240, 233, 0.45) | rgba(29, 28, 23, 0.65) | 5,0:1 Papier · 4,8:1 paper-deep | |
--ink-700invers: #f3f0e9 | #57554d | 6,6:1 Papier | |
--ink-600invers: #f3f0e9 | #5f5d56 | 5,8:1 Papier | |
--ink-500invers: #f3f0e9 | #67655d | 5,1:1 Papier · 4,7:1 paper-deep | |
--ink-400invers: #f3f0e9 | #8a877b | 3,2:1 Papier — nur große Schrift | |
| Olive | |||
--oliveinvers: #616949 | #616949 | 5,1:1 Papier | |
--olive-deepinvers: #4d5438 | #4d5438 | 7,0:1 Papier | |
--olive-softinvers: #8d9375 | #8d9375 | 2,8:1 Papier — nur Dekor | |
--olive-tintinvers: #3f4530 | #e5e7db | — | |
| Invers — auf Olive und dunklem Foto | |||
--creaminvers: #f3f0e9 | #f3f0e9 | 5,1:1 Olive · 15,0:1 Fotogrund | |
--cream-80invers: rgba(243, 240, 233, 0.92) | rgba(243, 240, 233, 0.92) | 4,6:1 Olive — kleinste AA-Stufe | |
--cream-70invers: rgba(243, 240, 233, 0.72) | rgba(243, 240, 233, 0.72) | 3,5:1 Olive · 8,3:1 Fotogrund | |
--cream-60invers: rgba(243, 240, 233, 0.6) | rgba(243, 240, 233, 0.6) | 2,9:1 Olive — Dekor | |
--cream-45invers: rgba(243, 240, 233, 0.45) | rgba(243, 240, 233, 0.45) | 2,3:1 Olive — Dekor | |
--cream-15invers: rgba(243, 240, 233, 0.15) | rgba(243, 240, 233, 0.15) | — | |
| Linien und Foto | |||
--lineinvers: rgba(243, 240, 233, 0.2) | rgba(29, 28, 23, 0.13) | — | |
--cream-lineinvers: rgba(29, 28, 23, 0.13) | rgba(243, 240, 233, 0.2) | — | |
--photo-groundinvers: #241a11 | #241a11 | — | |
--photo-veilinvers: #6b7250 | #6b7250 | — | |
cream-70 3,5:1 · cream-60 2,9:1 · cream-45 2,3:1 auf #616949. Im Footer tragen genau diese Werte Kleinschrift (Linktexte 14 px, Zeiten 13 px, Spaltenköpfe 11 px). Kleinste tragfähige Stufe auf Olive ist cream-80 (4,6:1), volles cream 5,1:1. Auf dem dunklen Fotogrund ist cream-70 dagegen mit 8,3:1 unbedenklich.
Hanken Grotesk für alles Lesbare, Cormorant Garamond für Wortmarke, große Überschriften, Preise und kursive Akzente. Cormorant hat eine kleine x-Höhe: große Grade brauchen sie, kleine nicht — deshalb steht sie auf 400/500 und immer eine Stufe größer als die Sans. In Zahlen immer lining-nums.
| Stil | Muster |
|---|---|
| Display (Serif) — serif | |
hero.d1-hero
60px · lh 1.1 · w 400 · clamp(1.95rem, 3.9vw, 3.75rem)
Hero-Headline, zwei <span>-Blöcke, je Zeile text-wrap: balance. Nie kürzen, nie fett. |
Raum, um anzukommen. |
display-1.d1
88px · lh 1.12 · w 400 · clamp(2.35rem, 6vw, 5.5rem)
Nur zusammen mit .d1-hero auf den Köpfen der Unterseiten (PageIntro). |
Craniosacrale Körperarbeit |
display-2.d2
46px · lh 1.12 · w 400 · clamp(1.7rem, 3vw, 2.9rem)
Sektions- und Kartenüberschrift. Der Standard nach dem Hero. |
Yoga am Donnerstag |
display-2-serif.display-serif.d2
64px · lh 1.12 · w 400 · clamp(2.15rem, 4.5vw, 4rem)
Die große Serif-Zeile auf einer Fläche (Footer-Aussage, CTA-Band). |
Zur Ruhe kommen. |
display-3.d3
29px · lh 1.15 · w 400 · clamp(1.3rem, 1.9vw, 1.8rem)
Kleinste Serif-Überschrift (Yoga-Day-Block, Nebenblöcke). |
Ein Tag nur für dich |
price
30px · lh 1 · w 500 · clamp(1.5rem, 2vw, 1.85rem)
Preiszeile in PriceRow und in der Kursliste. Immer lining-nums; die Einheit steht in 0.55em und ink-500. |
73 € |
serif-title
26px · lh 1.15 · w 500 · clamp(1.35rem, 1.8vw, 1.65rem)
Titel einer Preiszeile; Tage und Zeiten im Footer. |
Craniosacrale Behandlung |
brand-mark.serif (+ .footer-mark im Fuß)
21px · lh 1 · w 500 · ls 0.18em
Wortmarke: Kopfzeile 1.05rem mobil / 1.3rem ab md, im Footer über die volle Inhaltsbreite (Größe = Inhaltsbreite / 10,898). Immer uppercase. |
Stefanie Kaindl |
brand-sub
9px · lh 1 · w 500 · ls 0.36em
Zweite Zeile der Wortmarke: 0.5625rem mobil / 0.625rem ab md, im Footer 0.48 × Markengröße. |
CRANIO SACRAL |
| Text (Sans) — sans | |
quote.quote
43px · lh 1.26 · w 300 · clamp(1.45rem, 2.9vw, 2.7rem) · ls -0.01em
Zitat in der Sans, nicht in der Serif. Deutsche Anführung unten/oben. Auf Olive: .quote-cream. |
„Die Behandlung ist eine Wohltat für Körper, Geist und Seele.“ |
lead-lg.lead-lg
22px · lh 1.38 · w 400 · clamp(1.05rem, 1.5vw, 1.4rem)
Einstiegstext direkt unter einer Display-Headline, max ~46rem. Auf Olive oder Foto: .lead-lg-cream. |
Bei mir findest du zwei Wege, wieder bei dir anzukommen. |
lead.lead
18px · lh 1.65 · w 400 · clamp(0.95rem, 1vw, 1.125rem)
Vorlauf unter einem Seitenkopf. |
Kurs 1 startet um 17:30 Uhr, Kurs 2 um 19:00 Uhr. |
body.body-copy
15px · lh 1.75 · w 400
Standard-Fließtext der Sektionen. Im Bestand meist als text-[0.9375rem] mit ink-600. |
Eine sanfte, achtsame Berührung — mit einem Druck von nur etwa fünf Gramm. |
body-small
14px · lh 1.6 · w 400
Fußnoten, Rechtstext in Karten, Bildunterschriften. |
Matten und Hilfsmittel sind vor Ort. |
ui
13px · lh 1 · w 400
Button- und CTA-Beschriftung. Nie fett, nie uppercase. |
Termin online buchen |
nav
13px · lh 1 · w 400 · ls 0.01em
Menüpunkt der Kopfzeile. Kein uppercase, keine Sperrung. |
Cranio · Yoga · Über mich · Kontakt |
meta.meta-line
11px · lh 1.4 · w 400 · ls 0.02em
Metazeile über einem Wert (Facts, Formularbeschriftung, Kursdaten). |
Erwachsene · ca. 60 Min |
label.label
10px · lh 1.2 · w 400 · ls 0.055em
Eyebrow mit vorangestelltem Punkt (2,2 px, currentColor, 75 %). Als Sektionslabel zusätzlich .label-caps (0.18em, Versalien). |
01 · Cranio |
label-caps.label.label-caps
10px · lh — · w 400 · ls 0.18em
Versalien-Variante: Sektionslabel, Footer-Spaltenkopf, Gruppe im mobilen Menü. |
SEITEN |
marquee
11px · lh — · w 400 · ls 0.4em
Laufschrift am Fußrand. Dekor (aria-hidden), 42 s linear, bei prefers-reduced-motion aus. |
RAUM FÜR DICH |
max-width:1560px, zentriert, padding-inline 24 / 40 / 56 px. Kopfzeile und Sektionen teilen exakt dieses Raster.clamp(4rem, 8vw, 8.5rem) vertikal. .section-tight clamp(3rem, 5.5vw, 6rem).scroll-margin-top: 6.5rem, sonst landet ein Anker unter der festen Kopfzeile.9999px.warm-shadow für schwebende Elemente, der Schatten des Papierblocks auf dem dunklen Buchungsfoto. Dazu on-photo: ein weicher Hof hinter Schrift auf Bildern.radius-none0pxradius-xs6pxradius-sm8pxradius-full9999pxwarm-shadowDer einzige reguläre Schatten — Overlay, Popover, mobile Menüfläche.card-shadowDer Papierblock auf dem dunklen Buchungsfoto — Sonderfall, einmal pro Seite.on-photo-shadowSchrift auf Foto (.on-photo). Mobil der stärkere Hof — dort trägt der Schatten die Lesbarkeit, nicht der Schleier.| Token | Wert | Einsatz | |
|---|---|---|---|
space-1 | 4px | Punkt vor Label, feinste Abstände. | |
space-2 | 8px | Label zu Wert (Facts, Formularbeschriftung), Zeilen in Linklisten. | |
space-3 | 12px | Bildabstand im Bildband, Initialen zu Name. | |
space-4 | 16px | Standardabstand zwischen Textblöcken, Rasterabstand in Kartenreihen. | |
space-5 | 20px | Abstand unter einer Sektions-Headline (mt-5), Kontaktblöcke. | |
space-6 | 24px | Label zu Headline (mt-6), Kartenabstand. | |
space-7 | 28px | Einstiegstext unter der Headline (mt-7), Aktionsreihe (mt-7). | |
space-8 | 32px | Handlungszeile (mt-8), Faktenblock (mt-9). | |
space-10 | 40px | Abstand zwischen Aktionsgruppe und Folgesektion. | |
space-14 | 56px | Kurskarten (mt-14), Haarlinie unter einem Zitat (mt-14). | |
space-16 | 64px | Footer-Wortmarke, große Blockabstände. | |
section-y | clamp(4rem, 8vw, 8.5rem) | .section — vertikaler Rhythmus jeder Sektion (64–136 px). | |
section-y-tight | clamp(3rem, 5.5vw, 6rem) | .section-tight — Sektionen ohne eigenen Kopf (48–96 px). | |
shell | 1560px / 24–56px | .shell — EIN Container für Kopfzeile und Sektionen. padding-inline 24 px, ab 768 px 40 px, ab 1280 px 56 px. | |
measure | 46rem | Standard-Textbreite eines zentrierten Blocks (736 px). | |
anchor-offset | 6.5rem | scroll-margin-top für section[id] / div[id] unter der festen Kopfzeile. |
ease-soft cubic-bezier(0.2, 0.7, 0.2, 1)Jede Bewegung: Reveal, Hero-Auftritt, Menülinie, Hover-Lift.dur-hover 200msFarbe und Linienstärke bei Hover.dur-state 300msZustandswechsel: Kopfzeilenfarbe, Menülinie, Akkordeon-Zeile.dur-reveal 900ms[data-reveal] Einblenden beim Scrollen, 16 px Versatz.Hover-Bewegungen sind winzig: der Pfeil wandert 2 px, die Menülinie wächst von der Mitte (scaleX 0→1, 350 ms), das Reveal verschiebt 16 px. Fokus ist immer outline: 2px solid var(--olive) mit 3 px Offset.
Statisches Markup, von Hand aus globals.css, src/components/** und den Seiten übersetzt — nicht die laufenden React-Komponenten. Sie zeigen den Vertrag: Abstände, Farbgebrauch, Textregeln. Quelle für Code ist das Repo.
src/components/navbar.tsx · src/components/footer.tsx (Wortmarke im Fluss)
Die Wortmarke ist kein Bild, sondern Satz: Cormorant Garamond 500, Versalien, gesperrt. In der Kopfzeile 1.05 rem (mobil) / 1.3 rem (ab md), darunter die zweite Zeile „CRANIO SACRAL" in 0.5625 / 0.625 rem mit 0.36em Sperrung in Olive (auf Papier) bzw. Cream (auf Foto oder Olive).
src/app/hero.tsx
Vollflächiges Foto, mittig der Text: Eyebrow, zweizeilige Serif-Headline, zwei gleichwertige Wege. Höhe min-height: 100svh.
Craniosacrale KörperarbeitYoga
src/components/editorial.tsx
Zentrierter Sektionskopf: Label, Serif-Headline, optional ein Absatz darunter. Der Standardbaustein, wenn eine Sektion keine eigene Spaltenaufteilung braucht.
Beide Kurse finden donnerstags in Paunzhausen statt, in kleinen Gruppen. Du kannst spontan kommen — zum ruhigen Ankommen oder für einen kraftvollen Flow zum Ausklang.
src/components/editorial.tsx
Seitenkopf jeder Unterseite (/cranio, /yoga, /ueber-mich, /kontakt): Label, große Serif-Zeile, Einstiegstext — zentriert, max 48 rem.
Eine sanfte Berührung, die nichts erzwingt: Der Körper bekommt Raum, aus der Anspannung zu finden und in seinen eigenen Rhythmus zurückzukommen.
src/app/globals.css (.label, .label-caps, .pill)
Eyebrow des Systems: 10 px, mit einem 2,2-px-Punkt davor (currentColor, 75 % Deckkraft). Drei Zustände:
src/app/globals.css (.btn, .btn-ink, .btn-olive, .btn-cream, .btn-outline-*)
Vollrunder Button, 13 px, padding: 1rem 1.75rem (≈46 px Höhe). Fünf Varianten — die Wahl hängt an der Fläche, nicht am Geschmack:
src/app/globals.css (.cta-link, .cta-link-ink)
Der Textlink des Systems — die häufigste Handlung auf der Seite (19 Stellen). Die Linie kommt aus border-bottom, nicht aus text-decoration: sonst entsteht zwischen Wort und Pfeil eine Lücke im Strich.
src/components/editorial.tsx
Eine Angebotszeile mit Preis. Der Baustein für jede Preisliste — /cranio, /angebote-preise, Kursliste.
Eine ruhige, vollständige Sitzung für Erwachsene — Zeit, um anzukommen und den Körper arbeiten zu lassen.
73 €
Termin buchenSpielerisch und altersgerecht, mit viel Zeit und Ruhe — von den ersten Wochen bis ins Schulalter.
53 €
Termin buchenFünf Behandlungen zum Paketpreis — für einen Verlauf über mehrere Wochen.
400 €
Termin buchensrc/app/content.tsx (Facts)
Eckdaten unter einem Angebotstext: drei Paare (Begriff oben, Wert darunter), eine Haarlinie darüber, grid-cols-3 ab sm.
src/app/content.tsx (Voices) · globals.css (.quote, .initials)
Zitatband auf paper-deep: Zitat in der Sans (nicht in der Serif), darunter eine Haarlinie, dann Initialen-Kachel, Name und Anlass. Zähler „01 / 04" auf der linken Viertellinie.
„Die Behandlung bei Steffi ist eine Wohltat für Körper, Geist und Seele. Nach der Cranio fühle ich mich viel leichter und meine Gedanken kommen zur Ruhe.“
src/app/content.tsx (Approach)
Merkmal-Liste auf Olive (im Repo als Approach in src/app/content.tsx). Immer nur eine Zeile offen — es ist eine Auswahl, kein FAQ.
Ein Druck von nur etwa fünf Gramm — so leicht wie das Gewicht einer Münze. Der craniosacrale Rhythmus wird ertastet, nicht gedrückt.
Die Arbeit wirkt körperlich und emotional: bei Schmerzen, Migräne und Verspannungen ebenso wie bei Stress, Schlafproblemen und emotionaler Belastung.
Spielerisch und altersgerecht, mit viel Zeit und Ruhe — von den ersten Wochen bis ins Schulalter.
src/app/yoga/content.tsx (Kurse · Termine)
Kurs- und Terminliste einer Kursseite (/yoga): zwei Kurse in zwei Spalten, darunter die drei Eckdaten, dann die Termine als Kachelreihe.
17:30
Ruhiges Ankommen: sanfte Haltungen, Atemarbeit und eine lange Schlussentspannung.
19:00
Kraftvoller Ausklang: Vinyasa-Flow, an die Gruppe angepasst — für Anfänger und Fortgeschrittene.
Enthalten sind craniosacrale Impulse, persönliche Begleitung und eine ruhige Atmosphäre in kleinen Gruppen. Matten und Hilfsmittel sind vor Ort.
src/app/kontakt/content.tsx (ContactForm) · globals.css (.field)
Formularfeld ohne Box: keine Fläche, kein Rahmen, nur eine 1-px-Linie unter dem Feld. Fokus färbt die Linie Olive (kein Ring, kein Halo).
src/components/editorial.tsx (Photo) · globals.css (.ph)
Jedes Foto der Seite läuft über .ph. Der Filter ist Teil des Systems, nicht eine Spielwiese: sepia(0.16) saturate(0.86) contrast(1.03) brightness(0.99) plus eine Olive-Fläche (#6b7250) mit mix-blend-mode: multiply bei 14 % (.ph-deep: 42 %). Erst dadurch haben Aufnahmen aus verschiedenen Räumen und Jahren denselben Ton.
Links und Mitte: .ph mit der Standard-Gradiation (Olive-Multiplikation 14 %). Rechts: .ph-deep (42 %) — für Motive, die als dunkle Fläche tragen sollen.
src/components/cookie-banner.tsx
Cookie-Hinweis am unteren Rand: dunkle Fläche (rgba(29,28,23,.95)) mit blur(12px), obere Haarlinie in cream-line, Einfahren von unten in 500 ms (banner-in).
Sie nur in den Rechtstexten.01 · Cranio, 02 · Yoga auf der Startseite.ink-400 nicht für Kleinschrift (3,2:1), cream-70 nicht für Kleinschrift auf Olive (3,5:1).
logo.pngDisc #9dcdcd mit handgezeichneter Hand-/Blütenlinie und Schrift. Alter Stand vor dem Redesign.
sk_logo_dark.pngLockup für helle Flächen: Wortmarke #050505, Unterzeile #67b1b1 — mit weißem Hintergrund, nicht transparent. Nicht im System.favicon.pngWird aktuell als Favicon ausgeliefert — noch teal.apple-touch-icon.png180×180 für den iOS-Homescreen.
hero-stefanie.webpHero — eigene Gradiation brightness(0.76), weil Text darüber liegt.
behandlung.webpRuhige Fläche, trägt das Buchungsband.
behandlung_2.webpArbeitsweise-Sektion.
yoga.webpYoga-Band.Die Wortmarke ist keine Datei — sie ist Satz: Cormorant 500, Versalien, 0.18em gesperrt, darunter „CRANIO SACRAL" in 0.36em. Jedes Foto läuft über .ph: sepia(0.16) saturate(0.86) contrast(1.03) plus Olive-Multiplikation 14 % (tief 42 %) — erst dadurch haben Aufnahmen aus verschiedenen Räumen denselben Ton. Keine Stockfotos, kein Bild mit Text darüber.
cream-70 3,5:1, cream-60 2,9:1, cream-45 2,3:1 auf #616949 — im Footer tragen sie 11–14 px Text. Kleinste tragfähige Stufe: cream-80 (4,6:1). Betroffen: footer.tsx, .label-inverse, die Laufschrift.#9dcdcd, Akzent #67b1b1) — der alte Stand. Zwei ehrliche Wege: ersetzen (Olive-Disc oder „SK" in Cormorant) oder bewusst behalten und als dokumentierten Sonderfall führen. Entscheidung der Klientin.tailwind.config.ts — cream, sage, taupe, therapeutic sind auf Papier/Tinte/Olive umgestimmt, damit alte Unterseiten ohne Einzeländerung im neuen Ton erscheinen. Sie sind kein Teil dieser Palette; neuer Code nutzt paper, ink, olive.--ink-80 war falsch dokumentiert (#3a3830, 10,3:1) — tatsächlich rgba(29,28,23,.8) = #484641, 8,3:1. In DESIGN.md korrigiert.Wie anwenden: im Repo gelten weiter src/app/globals.css und tailwind.config.ts — dieses System beschreibt sie, es ersetzt sie nicht. In einem anderen Projekt tokens.css einbinden und mit den Variablen arbeiten; die semantischen Aliase (--canvas, --text, --accent, --border) sind für Komponenten gedacht, die Farbnamen für redaktionelles Layout.
Dateien: overview.html (diese Seite) · tokens.css · tokens.json (mit Nutzungshinweis und gemessenem Kontrast) · design-system.json · components/<Name>/{preview.html,README.md} · components/bundle.css · components/index.d.ts · components/index.html (Board) · assets/Logos|Imagery/ · ../DESIGN.md · ../docs/design-styleguide.html
Statische Renditionen — nicht die laufenden React-Komponenten. Hanken Grotesk und Cormorant Garamond kommen aus next/font/google und werden hier von Google Fonts geladen.