Skip to content

design: align visual language with the Fürstenberg Foundation - #409

Merged
HerrBertling merged 6 commits into
mainfrom
design/fuerstenberg-alignment
Sep 22, 2026
Merged

HerrBertling merged 6 commits into
mainfrom
design/fuerstenberg-alignment

Conversation

@HerrBertling

Copy link
Copy Markdown
Owner

The site now belongs to the Fürstenberg Foundation, so it should read as a sibling of fuerstenberg-foundation.de. Their colours are not adopted — ours stay — so the family resemblance is carried by type scale, shape and rhythm.

Their typeface (Dosis) is deliberately NOT adopted yet: it ships no Cyrillic subset, which leaves the ru/uk locales mixing faces mid-sentence. Fonts are unchanged from main pending that decision.

Typography

  • Foundation type scale: H1 66px / -0.03em / 1.15, H2 42px, H3 28px, body 18px, all fluid via clamp() so they hold up on small screens.
  • Rich-text h6 renders as their "eyebrow": 16px bold uppercase, 3px tracking, in brand green. Editors get it by marking a line Heading 6 — no schema change.

Shape

  • Buttons become pills: 15/33 padding, 1px tracking, solid / ghost / inverted.
  • Coach and blog cards 20px, media panels 33px, nav items pill-shaped.
  • Shadows tinted with the brand hue instead of neutral grey.

Rhythm

  • centeredContent "gray" is now a near-white tinted band (was bg-slate-400), matching how the Foundation separates sections; section padding opened up.

Also fixes two things this surfaced: headerBlock and centeredContent rendered an unstyled and dropped buttonUrl entirely, and the coach card's rotated "emergency" ribbon escaped the rounded corner.

HerrBertling and others added 6 commits September 6, 2026 18:27
The site now belongs to the Fürstenberg Foundation, so it should read as a
sibling of fuerstenberg-foundation.de. Their colours are not adopted — ours
stay — so the family resemblance is carried by type scale, shape and rhythm.

Their typeface (Dosis) is deliberately NOT adopted yet: it ships no Cyrillic
subset, which leaves the ru/uk locales mixing faces mid-sentence. Fonts are
unchanged from main pending that decision.

Typography
- Foundation type scale: H1 66px / -0.03em / 1.15, H2 42px, H3 28px, body 18px,
  all fluid via clamp() so they hold up on small screens.
- Rich-text h6 renders as their "eyebrow": 16px bold uppercase, 3px tracking,
  in brand green. Editors get it by marking a line Heading 6 — no schema change.

Shape
- Buttons become pills: 15/33 padding, 1px tracking, solid / ghost / inverted.
- Coach and blog cards 20px, media panels 33px, nav items pill-shaped.
- Shadows tinted with the brand hue instead of neutral grey.

Rhythm
- centeredContent "gray" is now a near-white tinted band (was bg-slate-400),
  matching how the Foundation separates sections; section padding opened up.

Also fixes two things this surfaced: headerBlock and centeredContent rendered
an unstyled <button> and dropped buttonUrl entirely, and the coach card's
rotated "emergency" ribbon escaped the rounded corner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fuerstenberg-foundation.de carries its primary CTA as a pill in the nav bar
("Ich brauche Hilfe"); ours is "Ich brauche Redezeit!". The nav comes from
Contentful, so the item is matched by slug — stable across all four locales
(de uses ich-suche-redezeit, en/ru/uk use i-need-speaking-time) — rather than
by nav position or the translated label.

The pill is a white fill with a green border and green label so it stays
legible in both header states: over the green hero, where the header is
transparent, and over white once it turns opaque on scroll. Hover inverts it
to the solid brand pill used elsewhere.

lg:whitespace-nowrap keeps it on one line in the desktop bar — the longer uk
and ru labels otherwise wrap to two lines and overflow the header. The mobile
drawer is full-width, so it still wraps there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Matches the Foundation, which sits its CTA at the right-hand end of the bar,
immediately before the language switcher, so it reads as an action rather than
another nav link.

Reordered in the array rather than with a CSS-only `order` so keyboard focus
order still follows what you see. On mobile the CTA now closes the drawer
instead of opening it; it stays fully visible without scrolling.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Foundation has no large bold sub-heading element — 28px was interpolated
between their H2 and body, and it shouts.

It shouts loudest on the homepage, where all eight Heading 3 blocks are in fact
lede paragraphs (97-351 characters each), so half the page's rich text renders
bold. That is a content-authoring issue and predates this branch — production
measures the same 2004 of 4045 characters bold — but the larger size made it
much more obvious. It cannot be fixed in CSS: /de/ich-suche-redezeit and
/de/ich-biete-redezeit use Heading 3 for genuine short subheads, so de-bolding
h3 outright would flatten those.

22px still separates a real subhead from 18px body without dominating the page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
On /de/ich-suche-redezeit (and the en/ru/uk equivalents) the active state
layered bg-vsp-500 text-white over the base bg-white text-vsp-700. Tailwind
resolves conflicting utilities by stylesheet order, not attribute order, so
the pill rendered with the base white fill and the active white label —
white on white.

Fill and label colours now live only in mutually exclusive idle/active class
sets, so nothing competes. Active renders as the solid brand pill, matching
its hover state.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
White on #9cc317 is 2.05:1 and green-700 on white is 3.0:1 — both fail WCAG
AA for button text. The Foundation's own near-black on our green is 9.1:1, so
the brand green stays and only the label changes. Added as an `ink` token.

Applies to every button: CleverButton (primary, secondary, inverted), the
header CTA pill in all states, the cookie banner's accept button, the no-JS
filter submit, and the admin CSV-export buttons.

CleverButton renders through CleverLink, whose default link styling
(text-vsp-500 hover:text-vsp-700 underline) beat text-ink — Tailwind resolves
conflicting utilities by stylesheet order, and ink is emitted before vsp-500.
It only ever looked right with white because .text-white happens to come
later. CleverLink now takes an `unstyled` opt-out, which CleverButton uses.
This also fixes a pre-existing bug where hover recoloured button labels to
green-700 on a green-600 fill. Plain links keep the default styling.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@HerrBertling
HerrBertling merged commit 6f8e929 into main Sep 22, 2026
6 checks passed
@HerrBertling
HerrBertling deleted the design/fuerstenberg-alignment branch September 22, 2026 16:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant