Marke & Bausteine

Design System

Stimme, Typografie, Farben, Komponenten und Markenbausteine des Elternvereins Gildehaus — gesammelt an einem Ort, damit sich neue Seiten und Materialien konsistent anfühlen.

9 Sektionen Quellen: assets/css/input.css, assets/css/index.css, docs/voice.md Die Beispiele sind echtes Markup dieser Seite, keine Abbildungen

Markenstimme

Die ausführliche Referenz mit Vorher/Nachher-Beispielen steht in docs/voice.md. Hier die Kurzfassung.

Anrede

Durchgehend Du — kein Sie, kein „man“, auch nicht in Formularen und Rechtshinweisen. Der Verein spricht als wir. Das Du ist das Du unter Eltern am Schultor, nicht das Du an Jugendliche.

An wen wir schreiben

An die Eltern. Die Kinder der Grund- und Hauptschule sind 6 bis 16 — aber wer hier beitritt, spendet oder abstimmt, sind die Eltern. Zweitpublikum sind Lehrkräfte und Schulleitung: der Ton muss auch für sie tragen.

Tonfall

Konkret vor werbend. Der Verein wirkt durch Dinge, die man anfassen kann — Hochbeete, Kopfhörer, Warnwesten, ein Zirkusprojekt. Ein Satz, der für jeden beliebigen Förderverein stimmen würde, ist noch nicht fertig. Keine Superlative, Ausrufezeichen sparsam.

Überschriften

Echte Überschriften statt eines durchlaufenden Fließtexts — ausdrücklicher Kundenwunsch. Überschriften sind ganze Aussagen, keine Etiketten: „Seit 1966 an der Seite unserer Schule“, nicht „Über uns“.

Calls to Action

Verb zuerst, konkret: „Mitglied werden“, „Dafür abstimmen“, „Wunsch einreichen“ — fast immer mit einem Pfeil nach rechts. Deutsche Rechtschreibung, keine englische Title Case: „Wunsch einreichen“, nicht „Wunsch Einreichen“.

Formulare und Fehler

Formulare erben die Stimme, aber nicht die Wärme. Fehlermeldungen sagen, was zu tun ist, und stehen neben ihrem Feld. Keine Entschuldigungen, kein „Ups“: „Diese IBAN stimmt nicht. Bitte prüfe, ob du dich vertippt hast.“ statt „Ungültige IBAN!“.

Zahlen & Emphase

Deutsches Zahlenformat („ca. 12.500 €“). Betonte Wörter stehen kursiv innerhalb fetter Headlines, z. B. „Seit 1966 an der Seite unserer Schule“. Domänenwörter bleiben deutsch: Förderstufe, Wunschglas, Satzung, Einmalspende, Spendenbescheinigung.

Gesetzte Formulierungen

Der Anspruch
„Eine gute Sache braucht gute Freunde“ — steht auf Banner und Roll-up und muss auf der Seite vorkommen.
Der Verein, lang
Elternverein der Grund- und Hauptschule Gildehaus e.V.
Der Verein, kurz
Elternverein Gildehaus e.V., im Fließtext auch „der Elternverein“.
Die Schule
die Grund- und Hauptschule Gildehaus, im Fließtext „unsere Schule“.
Gründung
1966, ältester Förderverein der Grafschaft — die Zahl bleibt, sie ist echt und selten.
Nie
Nie „Realschule“, nie „RSB“, nie „Bad Bentheim“ — die Schule ist eine Grund- und Hauptschule, und sie steht in Gildehaus.

Typografie

Zwei Schriften. Pally für Überschriften und Zahlen, variabel 100–900, liegt lokal in assets/fonts/Pally-Variable.woff2 und wird per @font-face in index.css eingebunden. Inter für Fließtext, variabel mit echtem Kursivschnitt, kommt vorläufig per @import von Google — der Preconnect dafür steht in snippets/header.php.

Display

Pally

--font-display · font-display · --font-family-heading
lokal, variabel 100–900, kein Kursivschnitt

Text

Inter Inter

--font-sans · font-sans · --font-family-sans
Google Fonts, variabel 100–900, mit Kursivschnitt

Überschriften

h1 — --text-2xl, leading-none

Seit 1966 an der Seite unserer Schule

h2 — --text-xl, leading-tight

Ab 1 € im Monat bist du dabei

h3 — --text-lg, leading-normal

Das Wunschglas

h4 — --text-base, leading-tight

Mitgliederversammlung

.home-h2 — --text-xl, Gewicht 900, für Sektionsköpfe auf der Startseite

Die Schule

.text — Fließtextblock aus dem Panel: Zeilenhöhe, Listen, unterstrichene Links

Der Elternverein unterstützt die Schule bei der Verwirklichung vielfältiger Projekte. Jeder Euro kommt direkt den Schülerinnen und Schülern zugute.

Emphase — kursiv innerhalb einer fetten Headline. Pally hat keinen eigenen Kursivschnitt, die Neigung ist synthetisch: gut für ein, zwei Wörter, nicht für ganze Sätze.

Seit 1966 an der Seite unserer Schule

Achtung: Elementregeln schlagen Utilities

Die Regeln für h1–h4 stehen in index.css außerhalb jeder @layer; Tailwind-Utilities liegen in @layer utilities. Unlayered gewinnt gegen jede Layer-Regel — <h2 class="text-3xl"> bleibt also bei --text-xl. Wer eine andere Größe braucht, nimmt eine unlayered Klasse (.home-h2, .h2) oder ein Element ohne Elementregel (<p> mit role="heading" nur im Notfall).

Fluide Skala — wächst per clamp() vom Mobile- zum Desktop-Viewport. Vollständig --text-3xs bis --text-11xl in input.css.

2xlWunschglas
xlSektionsüberschrift
lgZwischenüberschrift
baseFließtext
smBeitext und Hinweise
2xsKicker, Rollen, Meta

E-Mails setzen anders

Die Vorlagen in snippets/emails/ laufen auf Piazzolla mit Georgia-Fallback statt auf Pally: Mailprogramme laden Webfonts unzuverlässig, und eine Serifenschrift hat überall einen brauchbaren Ersatz. Das ist die einzige gewollte Abweichung von der Seitentypografie — auf der Website kommt Piazzolla nicht vor.

Farben

Zwei Familien: eine kühle um die Markenfarbe, eine warme als Akzent. Fünf Farben sind vom Verein geliefert und stehen als Anker exakt auf ihrem Wert; Dark Brown ist die einzige hinzugefügte, weil Mustard eine Schriftfarbe braucht. Alle übrigen Stufen sind in OKLCH zwischen genau diesen Ankern interpoliert — gleichmäßige Abstände in wahrgenommener Helligkeit, dichter am hellen Ende, Buntheit mit Maximum bei der Markenfarbe. Kein Schritt erreicht Reinweiß oder Reinschwarz. Werte 1:1 aus assets/css/input.css.

Die Ankerfarben

Light Cyan D4EBF0
evg-200
Sky Blue 70C1D1
evg-400
Dark Teal 1F3D44
evg-900
Mustard FFD84A
sand-400
Cornsilk F8F0D0
sand-100
Dark Brown 3A2A14
sand-900

Kühle Rampe — Ton ~212°

50
100
200
300
400
500
600
700
800
900
950

Anker auf 200 (Light Cyan), 400 (Sky Blue) und 900 (Dark Teal), dazwischen gleichmäßige Abstände in wahrgenommener Helligkeit, dichter am hellen Ende.

Warme Rampe — Ton ~94°

50
100
200
300
400
500
600
700
900

Anker auf 100 (Cornsilk), 400 (Mustard) und 900 (Dark Brown). Akzent, nicht zweite Markenfarbe: die hellen Stufen tragen ausschließlich dunkle Schrift. 500 ist der Hover des CTA in der Kopfleiste, 900 die Schrift darauf.

Rollen

Nur diese gehören in Templates. Die Zahlenstufen darüber sind die Rohwerte. Links lesen ihre Farbe über --link-color, das auf evg-strong zeigt.

evg-surface
kühl getönte Fläche auf weißen Karten — nicht der Seitengrund, der ist paper
evg-soft
ruhige Füllung und Hover — auf weißen Karten, nicht auf dem Papiergrund
evg-line
Haarlinien und Trenner — Light Cyan
evg-muted
gedämpfte Dekoration, helle Schrift auf Dunkel
evg-base
DIE Markenfarbe (Sky Blue) — dekorativ, nie Text (2,1:1 auf Weiß)
evg-vivid
kräftige Dekoration
evg-mid
Rahmen, die eine Komponente sichtbar machen (3,9:1)
evg-strong
Buttons, Links, Icons (5,6:1 — Textgrenze)
evg-deep
Hover und Aktiv (8,2:1)
evg-text
Überschriften (11,6:1) — Dark Teal
evg-ink
tiefste Stufe (14,9:1) — dunkelste Schriftfarbe, für Hervorhebung im Fließtext
evg-accent-surface
blasseste warme Fläche — das warme Gegenstück zu surface. Für Flächen, die direkt auf dem Papiergrund liegen; eine kühle Fläche liest sich dort als Fremdkörper.
evg-accent
warmer Akzent (Mustard) — Fläche, nie Text (1,4:1). Trägt den Haupt-Button und den CTA in der Leiste.
evg-accent-soft
warme Fläche (Cornsilk) — trägt evg-text mit 10,2:1
evg-accent-text
Dark Brown — die einzige Schriftfarbe auf Mustard (10,0:1). Bewusst warm: ein kühles Dunkel kippt auf Gelb ins Grünliche.

Neutrale

Der Seitengrund ist nicht weiß, sondern Papier — --color-paper, .bg-paper. Der Grund dafür sind die Aquarelle: sie sind auf weißes Papier gemalt und standen auf Reinweiß als hellere Platte auf der Seite. Auf dem Papierton gehen sie per mix-blend-mode: multiply darin auf, ihr ausgefranster Rand wird wieder zum Rand des Bildes statt zur Kante einer Bilddatei. Weiß bleibt dem vorbehalten, was auf dem Papier liegt: Karten (.bg-fullwhite), Formulare, die Glasleiste.

Alle drei Neutralen tragen denselben Ton wie die warme Familie (95,5°) mit einem Bruchteil ihrer Buntheit. Kühle Grautöne wie das frühere #f4f4f4 fielen neben dem warmen Grund sofort auf. --color-background ist der Token für getönte Flächen (.bg-background), nicht für die Seite. Die beiden nicht verwechseln: eine getönte Fläche auf getöntem Grund ist keine Fläche mehr.

Page
--color-paper
#f0eeea — Seitengrund
Karte
--color-fullwhite
#ffffff — .bg-fullwhite
Getönt
--color-background
#f5f4ef — .bg-background
Linie
--color-paper-line
#e8e6e0 — Rahmen, Trenner, .text code
Body
--color-gray-dark
#333333
Muted
--color-grey
#777777

Eine Tinte, vier Stufen

Fließtext, Beschriftungen und Hinweise laufen alle auf evg-text — abgestuft über die Deckkraft, nicht über eine zweite Farbe. Vorher standen hier Tailwinds gray-400 bis gray-900: ein kühles Blaugrau, das auf dem warmen Grund als eigene Farbfamilie auffiel. Die Prozentwerte sind auf dem Papiergrund gemessen, dem ungünstigsten Untergrund — auf Weiß liegt jede Stufe höher. /70 gibt es bewusst nicht: mit 4,37:1 auf Papier fiele es unter AA.

/75
5,0:1 — Hinweise, Bildunterschriften, sekundäre Zeilen
/85
6,6:1 — Fließtext
voll
10,0:1 — Beschriftungen, kräftige Zeilen
ink
12,8:1 — die tiefste Stufe, für Hervorhebung im Text

Der einzige Rest Farbe: Fehler

Formularfehler bleiben rot. Das ist die einzige Farbe außerhalb der beiden Familien und das einzige Signal, das ohne Erklärung als „hier stimmt etwas nicht“ gelesen wird — eine türkise Fehlermeldung auf türkiser Oberfläche wäre keine Meldung mehr. Erfolgsmeldungen brauchen das nicht und laufen in Türkis. Das Rot kommt aus Tailwinds Standardpalette (red-100 Fläche, red-400 Rahmen, red-700 Schrift, red-500 für den Rahmen eines beanstandeten Feldes) — es ist bewusst nicht in die Palette aufgenommen, damit es nicht dekorativ verwendet wird.

Fehler
Erfolg

Abstände, Radien & Schatten

Eckenradien — drei Stufen: Formularfelder unten, Auswahlkarten und Modals darüber, Bilder und große Flächen ganz oben. Buttons stehen außerhalb dieser Reihe: sie sind vollrunde Pillen. Wo der Browser corner-shape kennt, werden daraus Squircles.

--radius-field
Felder, Selects
--radius-card
Auswahlkarten, Modals
--radius-media
Bilder, Projektkarten, Hero
8px
Container
12px
Icon-Kacheln
pill
Buttons, Chips, Abzeichen

Squircle & Fallback — ein Squircle wirkt bei gleichem Radius enger als eine runde Ecke. Deshalb ist der Fallback bewusst kleiner gesetzt: Beide Formen haben optisch dasselbe Gewicht.

Fallback
12px rund
Squircle
20px

Dein Browser unterstützt corner-shape — die Token-Kacheln oben sind also echte Squircles: 20px, 24px und 32px. Die Umschaltung passiert per @supports; ohne Unterstützung fallen die drei Token auf 12px, 16px und 20px mit runden Ecken zurück.

Dein Browser unterstützt corner-shape noch nicht — du siehst überall den runden Fallback: 12px, 16px und 20px. In unterstützenden Browsern werden daraus 20px, 24px und 32px als Squircle.

Elevation — zwei Reihen. Die drei --shadow-elevation-* aus index.css sind gestapelte Ambient-Schatten für Karten und Leisten; die beiden --shadow-* aus dem Theme-Block heben Fotos an. --shadow-half ist die halbe Auslenkung von --shadow-max, für Bilder, die nicht das Hauptmotiv sind.

low
elevation-low
medium
elevation-medium
high
elevation-high
half
shadow-half
max
shadow-max · Fotos

Abstandsskala — 0.25rem-Basis, u. a. für Padding & Gaps; Sektionen bekommen großzügige ~6rem vertikal

0.5rem
1rem
1.5rem
3rem
6rem

Buttons

Vollrunde Pille mit abgesetzter Icon-Scheibe. Im Ruhezustand überlappen beide um 4px; beim Hover wandert die Scheibe 12px nach rechts, der Steg dazwischen zieht sich in die Länge und reißt kurz vor Schluss ab. Das Verschmelzen macht ein SVG-Filter (url(#gooey-button), die <defs> stehen in snippets/header.php), keine Grafik. Wer prefers-reduced-motion gesetzt hat, sieht die Scheibe unbewegt; der Fokus per Tastatur bewegt sie auch auf Touch-Geräten.

Die Hülle trägt nur den Filter; die sichtbaren Flächen sind .inner (die Pille) und das Icon (die Scheibe). Jede Variante setzt genau zwei Werte: --btn-bg und --btn-fg.

.button — Standard

Mustard mit Dark Brown, 9,97:1. Dieselbe Farbe wie der CTA in der Kopfleiste: der Weg in die Mitgliedschaft trägt überall dasselbe Gelb.

.peach — sekundär

Sky Blue, die Markenfarbe, mit Dark Teal: 5,7:1. Trägt ausschließlich dunkle Schrift — weiß läge bei 1,9:1.

.lime — dunkel

evg-deep mit Weiß, 8,2:1. Für Flächen, auf denen Gelb zu laut wäre — z. B. der Abstimmen-Knopf im Wunschglas.

.icon-down — Pfeil nach unten

Kippt beim Hover andersherum (-45deg), damit er am Ende in dieselbe Richtung zeigt, in die die Scheibe wandert.

.nav-cta — Kopfleiste

Erbt Farbe und Pillenform von .button, lässt Scheibe und Filter weg: rechts in der Leiste stehen nur 8px, die Bewegung lief in die Kante. Statt ihr übernimmt beim Hover ein um eine Stufe dunkleres Gelb (sand-500, 8,0:1). Unter 48rem steht der CTA im Klappmenü, dort als .nav-cta--block.

Mitglied werden

Die Klassennamen sagen nichts über die Farbe

.peach ist türkis und .lime ist dunkelblau — wer die Farbe aus dem Namen liest, liegt falsch und muss hier nachsehen. Maßgeblich sind die zwei Werte, die die Variante setzt: --btn-bg und --btn-fg. Neue Varianten bekommen einen Namen nach ihrer Rolle, nicht nach ihrem Farbton.

Formulare & Rückmeldung

Eine Klasse für alle Textfelder, Textareas und Selects: .input-field — Mitgliedsantrag, Wunschglas und Einmalspende teilen sie sich. Der Ruhezustand ist bewusst leise — 1px Haarlinie, großzügiges Polster, kein Kasten. Die Linie ist getönte Tinte und die Füllung durchscheinendes Weiß, weil dieselbe Klasse auf Weiß und auf dem Cyan-Panel der Einmalspende sitzt.

Zustände

Diese IBAN stimmt nicht. Bitte prüfe, ob du dich vertippt hast.

Der Fehler steht in aria-invalid, nicht in einer Klasse

Die rote Rahmenfarbe hängt an .input-field[aria-invalid="true"]. Die Auszeichnung, die der Screenreader ohnehin braucht, reicht damit auch fürs Auge — und sie kann im Template an keinem Feld vergessen werden. Die Regel steht absichtlich nach den :focus-Regeln: gleiche Spezifität, also entscheidet die Reihenfolge, und ein Feld mit Fehler bleibt auch im Fokus rot. Die Meldung trägt id="<feld>-fehler" und wird per aria-describedby verknüpft.

Auswahlkacheln — die Förderstufen

Das Radio ist sr-only, sichtbar ist die Kachel; peer-checked: übernimmt die Anzeige. Zwei mal zwei auf jeder Breite — vier nebeneinander gingen in der Formularspalte nur mit Worttrennung. Keine Stufe ist vorgewählt: eine Vorauswahl macht aus der Entscheidung, um die es hier geht, etwas, das man überspringt.

Schrittabzeichen

Die vier Abschnitte des Mitgliedsantrags tragen eine Nummer, damit die Länge absehbar ist. Die Scheibe ist Dekoration (aria-hidden); für Screenreader steht davor <span class="sr-only">Schritt 1 von 3: </span>.

Schritt 1 von 4: Deine Förderstufe

Schritt 2 von 4: Deine Daten

Schritt 3 von 4: Lastschrift

Schritt 4 von 4: Deine Zustimmung

Zustimmungskasten

Pflichtzustimmungen stehen im eigenen Kasten, nicht zwischen den Feldern: bg-evg-soft border-2 border-evg-mid rounded-card. Er trägt die stärkste Umrandung des ganzen Formulars — stärker als die Auswahlkacheln (1px, evg-text/25) und die Eingabefelder. Die Rangfolge ist Absicht: hier hakt jemand etwas rechtlich Bindendes ab. evg-mid ist dafür nicht frei gewählt, sondern genau die Rolle, die die Palette mit „Rahmen, die eine Komponente sichtbar machen“ beschreibt (3,9:1 auf Weiß) — dieselbe Kontur wie die Erfolgsmeldung darunter, nur zwei statt einem Pixel. Kühl darf der Kasten sein, weil er auf einer weißen Seitenkarte liegt und nicht auf dem Papiergrund.

Sammelmeldungen

Ohne Skript setzt der Browser nach dem Absenden oben an, und eine Meldung neben dem dritten Feld sieht dort niemand. Die Sammelmeldung steht deshalb über dem Formular, trägt role="alert" und tabindex="-1", und jeder Punkt verlinkt sein Feld.

Bausteine

Muster, die auf mehr als einer Seite vorkommen und deshalb gleich aussehen müssen. Was hier nicht steht, ist Einzelfall und darf einer bleiben.

Kicker

Eine Zeile Herkunft oder Kontext über der Überschrift. Immer evg-strong auf Weiß (5,6:1), immer versal, immer ohne Satzzeichen am Ende. Das Mittelpunkt-Trennzeichen (·) statt eines Kommas, damit die Zeile als Etikett und nicht als Satz gelesen wird.

Seit 1966 · ältester Förderverein der Grafschaft

text-2xs font-semibold uppercase tracking-wide text-evg-strong — über Seitenüberschriften

Kassenwartin

text-2xs font-medium uppercase tracking-widest text-evg-strong — Rollen im Vorstand, weiter gesperrt weil kürzer

Seitenkarte

Der Rahmen von /ideen, /mitglied-werden und den Projektseiten: bg-fullwhite, Breite max-w-6xl, und die Rundung erst ab md — auf schmalen Fenstern läuft die Karte randlos über die volle Breite, wo eine Rundung nur den Rand anknabbern würde. Seit der Seitengrund paper trägt, hat die Karte wieder einen Tonwertabstand zum Grund — auf Weiß hatte sie keinen und hing allein an md:border. Die Kontur bleibt trotzdem: der Abstand ist mit 1,16:1 ein Hauch, keine Kante.

Das Wunschglas · ohne Anmeldung, auch anonym

Wofür sollen wir als nächstes sammeln?

Drei Stimmen hast du. Verteil sie auf die Projekte, die dir am wichtigsten sind.

Abstimmen im Wunschglas

Alle drei Zustände — offen, abgestimmt, Stimmen aufgebraucht — stehen serverseitig im Markup und werden per data-state in CSS umgeschaltet. Das Skript baut nie Markup, es kippt nur ein Attribut; genau das hält Karte, Modal und Projektseite davon ab, auseinanderzulaufen. Die Rücknahme ist immer sichtbar und nicht erst beim Hover: Touch-Geräte haben keinen Hover, und das Telefon ist, wo die meisten abstimmen.

Karte im Inhalt

Die kleinere Schwester der Seitenkarte, für Listen innerhalb einer Seite — Aufklappfragen, Förderstufen, der Abbinder unter dem FAQ: bg-fullwhite border-2 border-paper-line rounded-card. Weiß als Fläche, warme Neutrale als Kontur. Getönte Karten gibt es hier bewusst nicht: eine kühle Fläche direkt auf dem Papiergrund liest sich als Fremdkörper, eine warme nimmt dem gelben Knopf darin die Abhebung. Die Farbe im Block ist der Knopf, sonst nichts.

Es sind noch Fragen offen?

Sollte etwas fehlen, schreib uns einfach, wir helfen gerne weiter!

Himmelband

.page-sky — das Aquarell, das auf allen Unterseiten von der Oberkante des Dokuments über die volle Breite läuft und die Kopfleiste trägt. Auf der Startseite nicht: dort liegt die Leiste im Keyvisual. Es ist Textur, kein zweites Keyvisual — deshalb Wolken statt Motiv, deshalb ausgeblendet statt abgeschnitten.

Drei Dinge halten es zusammen: mix-blend-mode: multiply, damit das weiße Papier der Vorlage im Papiergrund aufgeht — dasselbe Verfahren wie beim Keyvisual; z-index: -1, weil ein positioniertes Element mit z-index: 0 nach der Malreihenfolge über dem späteren Inhalt landet und die Überschrift verdeckt hätte; und ein Maskenverlauf, dessen letzter Halt eine Länge ist und nicht ein Prozentwert — er muss genau dort bei null sein, wo der Inhalt beginnt, und in Prozent liefe dieser Punkt bei jeder Fensterbreite woanders hin. Unter prefers-contrast: more fällt das Band ganz weg.

Glasleiste

Die Kopfleiste schwebt über allem und ist deshalb Glas: backdrop-filter: blur(16px) saturate(150%) auf 85 % Weiß, gescrollt 92 %. Das Nachsättigen gehört dazu — reines Weichzeichnen wäscht die Farben dahinter aus und macht aus Glas Milch. Die Deckkraft ist zweimal gestiegen: erst von 55 % auf 68 %, weil weiße Schrift über den dunklen Abschnitten unter 4,5:1 fiel, dann von 68 % auf 85 %, weil das Himmelband Struktur hinter die Wortmarke legte. Der zweite Fall ist der lehrreiche — das Kontrastverhältnis war die ganze Zeit einwandfrei, der helle Teil des Lockups verlor trotzdem seine Form, weil hinter jedem Buchstaben ein anderer Blauton stand. Gegen gemusterten Untergrund hilft keine Rechnung, nur Deckkraft. Unter 65 % darf sie nie fallen; prefers-reduced-transparency und fehlendes backdrop-filter machen die Fläche deckend.

Meta-Zeile

p.meta — 13px, evg-strong, für Datumsangaben und die Fußzeile.

Mitgliederversammlung am 14. März 2026

Seitenbreiten

Die Breite steht als Tailwind-Utility am Wrapper, nicht in einer eigenen Klasse: max-w-6xl mx-auto px-4 md:px-12 für Formular- und Projektseiten, max-w-4xl für reine Textseiten. Das Polster wächst am Breakpoint mit, die Mitte bleibt die Mitte.

Icons

Outline-Icons im Tabler-Stil, 24×24-Raster, stroke: currentColor, Strichstärke 1.5–2 (2.5 in der Button-Scheibe, weil sie auf 18px Zeichenfläche schrumpft). Immer inline als <svg> im Markup: es gibt keine Icon-Bibliothek und keinen Sprite. Ein <svg> ohne eigene Maßangaben füllt seine Box — die Größe steht also am Container (w-8 h-8), nicht doppelt im Markup und im CSS.

Erfolg, Häkchen
Warnung
Hinweis
Pfeil rechts — der CTA-Pfeil
Schließen, Entfernen

Dekoration oder Bedeutung — nie beides offen lassen

Ein Icon neben einem Wort ist Dekoration und bekommt aria-hidden="true". Ein Icon statt eines Wortes braucht einen Namen am Bedienelement (aria-label), nicht am <svg>. Farbe allein trägt nie eine Bedeutung: evg-base und evg-accent liegen unter 3:1 und sind für Icons keine zulässige Strichfarbe — dafür ist evg-mid die Untergrenze, für Icons neben Text evg-strong.