Ralfing — Styleguide

A two-studio Structural Integration (Rolfing®) practice run solo by Ralf Eggenberger — EMR-recognised, structured around a 10-session series, working Thursdays/Saturdays in Zürich-Oerlikon and Fridays in Rieden bei Baden.

Brand DNA

Voice

Color

| Token | Hex | Use |

|---|---|---|

| primary | #1A4A4F | Dark petrol. Header/footer bands, dark sections, headline text on light |

| primary-ink | #FFFFFF | Text on primary — 9.8:1 |

| primary-mid | #398489 | The Instagram petrol, verbatim. Icons, section fills, large text. Never body copy (4.34:1) |

| accent | #FFC180 | Apricot. Primary CTA fill — carried over unchanged from the live site |

| accent-ink | #1B1B1D | Text on accent — 10.8:1 |

| accent-hover | #E6AE73 | CTA hover — the site's own --rlf-orange-hover |

| highlight | #7FFFD4 | Aquamarine. Rules, active nav pill, markers, session numbers. Carried over unchanged |

| bg | #FDFDFD | Page background |

| bg-alt | #F5F8F5 | Alternating band background |

| surface | #FFFFFF | Cards |

| ink | #1B1B1D | Body text — 16.6:1 on bg |

| ink-on-dark | #EEF5F4 | Body text inside petrol sections |

| muted | #5A6664 | Captions, footer small print — 5.4:1 |

| line | #DCE5E3 | Dividers |

The colour story: his website gave him aquamarine and apricot but no dark tone, which is exactly why it reads washed out. His Instagram was already using a deep petrol (#398489, sampled at 78% of the quote-card area) — the same hue family as the aquamarine, just dropped in value. Taking that as the dark anchor unifies the two channels instead of inventing anything.

Usage rules

Typography

Scale

| Token | Size | Line | Tracking | Use |

|---|---|---|---|---|

| display | 3.25rem | 1.12 | 0.06em | Hero h1 |

| h1 | 2.5rem | 1.16 | 0.06em | Page titles |

| h2 | 1.875rem | 1.22 | 0.05em | Section headings |

| h3 | 1.25rem | 1.35 | 0.01em | Sub-sections, session titles |

| lead | 1.25rem | 1.6 | — | Intro paragraph |

| body | 1.0625rem | 1.65 | — | Paragraphs |

| small | 0.875rem | 1.5 | — | Captions, footer |

| overline | 0.75rem | 1.4 | 0.14em | Uppercase section labels |

Spacing & layout

Shape & surface

Motion

Revised 2026-08-14: the source site's own user.min.css turned out to have a real motion

vocabulary, and the brief is to carry it over rather than strip it. Everything below is derived

from it — nothing is invented.

What the source does (media/templates/site/cassiopeia_ralfing/css/user.min.css):

| Source rule | What it does | Carried over as |

|---|---|---|

| @keyframes fadein on .site-grid | page fades in, 0.5s, forwards | main fades in on load |

| @keyframes overlay | badge drops in from scale(.8) translateY(-100px) and settles at rotate(-8deg), 1s delay | the .badge (EMR trust mark) |

| .blog-item.outside.coming-in | two-stage reveal: block translateY(50px)→0 at 0.5s/0.2s delay, inner content at 1s/0.4s | scroll reveal on every section, block then contents |

| link background-size: 4px 0 + transition: all .25s | underline grows on hover | text links grow 1px → 3px |

| #menu-btn.open bars rotating ±45° | burger morphs to an X, 0.25s | mobile menu toggle |

| nav max-height: 0 + transition: all .5s | menu slides open | drawer slide |

| .button { transition: all .2s } | button state change | button hover, plus a 2px lift |

Tuning applied. Travel pulled back from 50px to 28px, and the content stage from 1s to 600ms

— the original's second stage reads as sluggish on a fast connection, arriving well after the eye

has already moved on. The -8deg tilt is kept exactly.

for anything that travels.

accordion, the sticky booking bar riding in past the hero, image zoom on hover (≤3%).

moves after the user has started reading, or a scroll-chevron (the source has one; it is

decoration that costs a tap target).

Round 2 — extended set

Added on request. Everything still obeys the non-negotiables below.

| Effect | Behaviour | Source |

|---|---|---|

| Per-item cascade | Lists and grids stagger by 70ms per child (--i) instead of arriving as one slab. Applies to the 10 sessions, condition lists, review cards, studio cards, footer columns. | extends the source's two-stage reveal |

| Scroll-down control | Apricot circle at the foot of the hero, bobs gently, jumps to the first section. | the source's .scroll-down-link — apricot, circular, 200ms ease-in |

| Back to top | Petrol circle, bottom right, appears past 1.2 viewports. | the source's .back-to-top-link — circular, --rlf-green-transparent, 200ms ease-in |

| Condensing header | Past 40px the bar shortens, gains a shadow and thins its aquamarine rule. | new — the source's header is static |

| Hero parallax | Photograph drifts at 30% of scroll speed while the hero is in view. Transform only, never scroll-jacking. | new |

| Price count-up | "CHF 138" counts up once, ease-out cubic, when it first enters view. Tabular numerals so nothing reflows. | new |

| Page transitions | Cross-fade between pages via Astro's view transitions. | new |

Restraint rules for the extended set

outruns it while scrolling.

half-counted number on screen.

Non-negotiables

hidden/displaced element is forced visible. Verified.

adds, so with JS off — or for a crawler — every section renders plain and visible. Verified at

10/10 sections.

that may never come.

Components

Buttons

Header

Sticky, white, 72px tall, aquamarine 3px hairline beneath (carried over from the current site). Logo mark left, nav centre-right, apricot "Termin vereinbaren" pill hard right. Mobile: logo + hamburger, with the booking pill pinned in a bottom sticky bar rather than in the drawer.

Hero

Full-bleed studio photograph, petrol scrim at ~35% for text legibility, headline and lead left-aligned over it on desktop and below it on mobile. The logo watermark centred over the hero on the current site is dropped — it obscures the photograph and duplicates the header mark. A location/day chooser sits directly under the CTA, since picking a studio is picking a weekday.

Location cards

Two side by side, surface fill, md radius, 1px line. Each carries: studio name, address, its day(s) and hours, the access notes (floor, lift, parking, public transport — he has written good ones already), a static map thumbnail, and its own "Termin in <Studio>" button. These are the highest-value practical content on the site and are currently buried in the footer.

Session list (the 10 sessions)

Numbered accordion. Numeral in aquamarine at display size, title in h3, the "zentrale Fragestellung" as body copy inside. Sessions 8–10 group into one item, as the source content does. This is the practice's strongest differentiator and should sit high on the method page.

Review cards

bg-alt fill, no shadow, quote in lead size, attribution in small/muted, 5 aquamarine stars. Short quotes only, attributed by name as Google shows them. No aggregateRating schema and no numeric rating claims in copy.

Footer

Petrol band, ink-on-dark text. Three columns: contact (phone, WhatsApp, email), the two studios with addresses and hours, social + legal. The current footer is genuinely well-organised — it keeps its structure and gains legible contrast.