{
 "$schema": "../../schema.json",
 "schema": "fundus/1",
 "id": "button-system-uebersicht",
 "name": "Button-System und Übersicht",
 "name_en": "Button system overview (hierarchy, tokens, states, pattern gallery, recipe matrix)",
 "kurz": "Button-System eines Marburger Interface-Büros: fünf Typen, sieben Zustände, Tokens mit live gerechnetem Kontrast, eine Galerie aller 24 Button-Muster des Fundus zum Anfassen und die Zuordnung der 21 Rezepte.",
 "kategorie": "Buttons",
 "kategorie_slug": "buttons",
 "kategorie_nr": 18,
 "bau_chat": "B",
 "prioritaet": "A",
 "trendstatus": "etabliert",
 "belegstatus": "belegt",
 "website_belege": 2,
 "stimmung": [
  "ruhig",
  "präzise"
 ],
 "stimmung_roh": [
  "präzise",
  "ruhig",
  "funktional"
 ],
 "technik": [
  "css",
  "vanilla-js",
  "@property",
  "forced-colors",
  "svg"
 ],
 "technik_gruppen": [
  "css",
  "js",
  "canvas"
 ],
 "leistungskosten": "niedrig",
 "steckbrief": {
  "beschreibung": "Eine Design-System-Seite für Buttons. Sie legt die Hierarchie fest (primär, sekundär, tertiär als Text, Icon-Button, Gefahr), nennt die Tokens für Höhe, Radius, Innenabstand, Abstand sowie Kurve und Dauer je Zustand und zeigt alle Zustände an echten Knöpfen: Ruhe, Hover, Fokus, Druck, deaktiviert, Laden, Erfolg. Dazu die Regeln für Trefferfläche (44 px) und Kontrast, eine Galerie aller Button-Muster des Fundus als Live-Beispiele und eine Tabelle, welcher Button-Typ zu welchem Rezept passt.",
  "warum_es_wirkt": "Buttons sind das häufigste Bedienelement einer Seite. Als System aus wenigen Tokens sprechen sie überall dieselbe Sprache: Die Hauptaktion ist sofort erkennbar, Zustände sind vorhersehbar, und neue Seiten erben das Verhalten. Große Design-Systeme und Studios behandeln Buttons deshalb als Satz aus Typen, Tokens und Zuständen, nicht als Einzeleffekte.",
  "wann_einsetzen": "Vor jedem Website-Bau als Werkzeug: Tokens aus dem Rezept setzen, dann ein Button-Muster als Haupttyp und höchstens eines als Zweittyp aus der Rezept-Tabelle wählen. Als Vorlage für eine eigene Komponentenseite, wenn mehrere Leute an einer Kundenseite bauen.",
  "wann_nicht": "Nicht als sichtbare Galerie auf einer Kundenseite: Die Übersicht ist Werkzeug, keine Sektion. Nicht mehrere Button-Muster auf einer Seite mischen. Nie mehr als eine primäre Handlung je Ansicht. Keine Muster, die das Rezept unter „nicht verwenden“ führt.",
  "varianten": [
   "hell: neutrale Systemseite auf hellem Grund, Signalton Ultramarin",
   "dunkel: dieselben Tokens für dunkle Oberflächen, helle Primärfläche mit dunklem Text, eigene Gefahr- und Erfolgsfarbe",
   "rezepte: dieselben fünf Typen in den Tokens von Studio-Bühne, Manufaktur-Stille und Fahrschule; der Umschalter setzt die Welt für die ganze Seite, Token-Tabellen und Kontraste rechnen mit"
  ],
  "umsetzung": "Alle Buttons lesen dieselben Custom Properties: --b-h-s/m/l, --b-px-s/m/l, --b-radius, --b-kante, --b-schrift, Farben je Typ (--p-*, --s-*, --t-*, --i-*, --g-*, deaktiviert --d-*, Erfolg --ok-*) und Bewegung je Zustand (--dauer-*, --kurve-*). Jeder Typ mappt seine Farben auf --bg, --fg, --kante und deren -h- und -d-Stufen; die Zustandsregeln sind für alle Typen gleich. Hover nur in @media (hover: hover), Fokus über :focus-visible mit outline, Druck über :active und scale. Deaktiviert über aria-disabled=\"true\", damit der Knopf fokussierbar bleibt und per aria-describedby sagt, warum. Laden mit aria-busy und role=status; Ruhe-, Lade- und Erfolgslabel liegen in einer Grid-Zelle, damit die Breite nie springt. Kleine Knöpfe bekommen über ::after mit negativem inset 44 px Trefferfläche. <button> für Handlungen, <a> für Ziele. Ein Rezept überschreibt nur Tokens am :root.",
  "mobil": "Ohne Hover entfällt der Hover-Zustand, Druck und Fokus bleiben. Alle Knöpfe mindestens 44 px tastbar, die Hauptaktion im Formular auf dem Telefon volle Breite und zuerst. Breite Tabellen werden zu Karten oder scrollen in einem eigenen Bereich.",
  "reduzierte_bewegung": "Keine Wege und kein Skalieren: Druck wird zur Farbänderung, Label wechseln ohne Weg, der Spinner steht und der Text „Wird gesendet“ trägt den Zustand, das Häkchen erscheint ohne Zeichnen. Farbwechsel bleiben.",
  "barrierefreiheit": "WCAG 1.4.3: Label in jedem Zustand mindestens 4,5 : 1, auch deaktiviert und im Ladezustand; gedämpft über eine eigene Textfarbe, nie über Deckkraft. 1.4.11: Kante sekundärer Buttons und Fokusring mindestens 3 : 1. 2.4.7: Fokus sichtbar, im Kontrastmodus Highlight. 2.5.8: mindestens 24 px, hier 44 px. 4.1.2: Icon-Buttons mit aria-label und Tooltip, Umschalter mit aria-pressed, Menü mit aria-expanded, Laden mit aria-busy und role=status. Gefahr-Buttons nicht nur über Rot: Verb nennt die Folge, Rückfrage mit Fokus auf „Behalten“, danach Rückgängig. Kontrastmodus: Rahmen in ButtonText, deaktiviert in GrayText."
 },
 "messwerte": {
  "easing": "Farbe und Fokus cubic-bezier(0.2, 0, 0, 1); Druck ein cubic-bezier(0.45, 0.02, 0.09, 0.98), aus linear()-Feder aus druck-feedback; Laden/Erfolg cubic-bezier(0.16, 1, 0.3, 1)",
  "dauer_ms": "Hover 150, Fokus 120, Druck 100 ein / 500 aus, Label-Wechsel 150, Spinner 700 je Umdrehung, Häkchen 300, Erfolg halten 1800",
  "stagger_ms": "keiner",
  "distanz": "Druck scale 0.97; Höhen S 36 / M 44 / L 52 px; Trefferfläche mindestens 44 px",
  "sonstiges": "Kontrast Label mindestens 4,5:1 in jedem Zustand, Kanten und Fokusring mindestens 3:1",
  "herkunft": "eigene Festlegung",
  "quelle": "https://developer.apple.com/design/human-interface-guidelines/buttons"
 },
 "kurve": {
  "bezier": [
   0.2,
   0.0,
   0.0,
   1.0
  ],
  "css": "cubic-bezier(0.2, 0, 0, 1)",
  "name": "eigene Kurve",
  "dauer_ms": 150
 },
 "gesehen_bei": [
  {
   "seite": "Apple Human Interface Guidelines: Buttons",
   "url": "https://developer.apple.com/design/human-interface-guidelines/buttons",
   "auszeichnung": "",
   "beobachtung": "Höchstens ein bis zwei hervorgehobene Buttons je Ansicht, Trefferfläche mindestens 44 × 44 pt, ein sichtbarer Druckzustand ist Pflicht, Aktivitätsanzeige im Button mit wechselndem Label. Seit 16.12.2025 für Liquid Glass überarbeitet.",
   "art": "artikel"
  },
  {
   "seite": "GOV.UK Design System: Button",
   "url": "https://design-system.service.gov.uk/components/button/",
   "auszeichnung": "",
   "beobachtung": "Typen Standard, sekundär, Warnung, Start und invers. Ein Standard-Button für die Hauptaktion, nicht mehrere je Seite. Warn-Button nur für schwer umkehrbare Aktionen und nicht allein über Rot. Deaktivierte Buttons möglichst vermeiden (schwacher Kontrast). Schutz gegen Doppelklick per data-Attribut.",
   "art": "website"
  },
  {
   "seite": "Osmo: Button Pack",
   "url": "https://www.osmo.supply/product/button-pack",
   "auszeichnung": "",
   "beobachtung": "Ein Studio verkauft 100 Buttons als System: jeder mit Default-, Hover-, Active- und Focus-Zustand, gesteuert über CSS-Variablen, mit prefers-reduced-motion. Zeigt, dass Buttons als Token-System gedacht werden.",
   "art": "website"
  },
  {
   "seite": "Supercharge Design: Material 3 Expressive",
   "url": "https://supercharge.design/blog/material-3-expressive",
   "auszeichnung": "",
   "beobachtung": "Material 3 Expressive ordnet Buttons in Größen von XS bis XL, mit Button-Gruppen, Split-Button und FAB-Menü; Form und Breite ändern sich bei Interaktion.",
   "art": "artikel"
  }
 ],
 "tutorials": [
  {
   "titel": "W3C: Understanding Success Criterion 2.5.8 Target Size (Minimum)",
   "url": "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html"
  },
  {
   "titel": "GOV.UK Design System: Button",
   "url": "https://design-system.service.gov.uk/components/button/"
  }
 ],
 "kombinierbar_mit": [
  "button-zustaende",
  "druck-feedback",
  "fokus-stil-system",
  "glas-button",
  "pfeil-icon-button",
  "tiefen-taste-3d",
  "kontur-button-zeichnen",
  "button-gruppe-expressiv",
  "kontrastmodus-forced-colors"
 ],
 "urls": {
  "detail": "https://cecodesign.de/lab/fundus/buttons/button-system-uebersicht/",
  "meta": "https://cecodesign.de/lab/fundus/buttons/button-system-uebersicht/meta.json",
  "demo": "https://cecodesign.de/lab/fundus/buttons/button-system-uebersicht/demo"
 },
 "herkunft": {
  "quelldateien": [
   "Buttons/SR-Recherche 02.11.2026"
  ],
  "pruefnotizen": [
   "GOV.UK-Seite am 02.11.2026 per WebFetch gelesen (Typen, ein Standard-Button je Seite, Warnung, deaktiviert vermeiden).",
   "HIG-Regeln, Osmo Button Pack und Material 3 Expressive aus der Recherche vom 02.11.2026 übernommen.",
   "Tokens und Dauern sind eigene Festlegung; Druckkurve aus druck-feedback, Ladekurve aus button-zustaende."
  ]
 },
 "bau": {
  "status": "fertig",
  "kurz": "Button-System eines Marburger Interface-Büros: fünf Typen, sieben Zustände, Tokens mit live gerechnetem Kontrast, eine Galerie aller 24 Button-Muster des Fundus zum Anfassen und die Zuordnung der 21 Rezepte.",
  "demo": true,
  "abhaengigkeiten": [],
  "werte": {
   "hoehe_px": "S 36 / M 44 / L 52 (Trefferfläche immer 44: ::after inset min(0px, (Höhe − 44px) / 2))",
   "innenabstand_px": "S 14 / M 20 / L 26; Tertiär 60 % davon",
   "abstand_px": "Icon zu Label 8, zwischen Buttons 12",
   "radius_px": "10 (Icon-Button gleich)",
   "kante_px": 1,
   "schrift": "Schibsted Grotesk 600, 14 / 15 / 16 px",
   "fokus": "outline 2px solid #121419 (dunkel #eef0f3), offset 3px; Grundzustand outline 0 solid, Breite und Versatz animiert",
   "druck": "scale .97",
   "farben_hell": "primär #2a33e0 / Hover #1d24b8 / Druck #161c94, Text #fff (7,9 : 1); sekundär #fff, Kante #7d818a (3,5 : 1), Text #121419; tertiär Text #121419 mit Unterstrich 1px, Hover 2px und Fläche #e7e9ed; Icon #e7e9ed; Gefahr #b3261e / #8f1d17, Text #fff (6,5 : 1); deaktiviert #e3e5e9, Text #5d626c (4,8 : 1), Kante gestrichelt #b9bdc5; Erfolg #1d6b45, Text #fff (6,4 : 1)",
   "easing": "cubic-bezier(0.2, 0, 0, 1) für Farbe und Fokus; Druck ein cubic-bezier(0.45, 0.02, 0.09, 0.98), aus linear()-Feder; Label cubic-bezier(0.16, 1, 0.3, 1); Spinner linear",
   "kurven_je_zustand": {
    "hover": "cubic-bezier(0.2, 0, 0, 1)",
    "fokus": "cubic-bezier(0.2, 0, 0, 1)",
    "druck_ein": "cubic-bezier(0.45, 0.02, 0.09, 0.98)",
    "druck_aus": "linear()-Feder aus druck-feedback (~16 % Überschwinger)",
    "label": "cubic-bezier(0.16, 1, 0.3, 1)",
    "spinner": "linear"
   },
   "dauer_ms": {
    "hover": 150,
    "fokus": 120,
    "druck_ein": 100,
    "druck_aus": 500,
    "label": 150,
    "spinner_umdrehung": 700,
    "haken": 300,
    "erfolg_halten": 1800,
    "laden_demo": 1400
   },
   "label_wechsel": "alle Beschriftungen (Ruhe, Laden, Erfolg) in einer Grid-Zelle, Breite = längste, alte rückt .45em hoch, neue kommt von .45em unten",
   "deaktiviert": "aria-disabled=true statt disabled, aria-describedby mit Grund, Klick zeigt Hinweis und setzt Fokus aufs fehlende Feld",
   "laden": "aria-busy=true, weitere Klicks ignoriert (Doppelklick-Schutz), Ansage per role=status",
   "vorfuehrung_ms": "Ruhe 900, Hover 1100, Fokus 1100, Druck 650, Deaktiviert 1000, Laden 1400, Erfolg 1500"
  },
  "ausloeser": "klick",
  "touch": "Hover-Zustände nur unter @media (hover: hover); Druck, Fokus, Laden und Erfolg bleiben. Hauptaktion im Formular volle Breite und zuerst, Rezept-Tabelle wird zu Karten, Zustands-Matrix scrollt in eigenem Bereich. Magnet nur mit feinem Zeiger.",
  "reduziert": "Kein Skalieren beim Druck (nur Farbe), Label-Wechsel ohne Weg, Spinner steht gepunktet und der Text „Wird gesendet“ trägt den Zustand, Häkchen ohne Zeichnen. In der Galerie springen alle Nachbauten ohne Übergang in den Endzustand, Pixel ohne Staffel, Verlaufsrahmen ohne Lauf.",
  "korrekturen": {
   "beschreibung": "Eine Design-System-Seite für Buttons. Sie legt die Hierarchie fest (primär, sekundär, tertiär als Text, Icon-Button, Gefahr), nennt die Tokens für Höhe, Radius, Innenabstand, Abstand sowie Kurve und Dauer je Zustand und zeigt alle Zustände an echten Knöpfen: Ruhe, Hover, Fokus, Druck, deaktiviert, Laden, Erfolg. Dazu die Regeln für Trefferfläche (44 px) und Kontrast, eine Galerie aller Button-Muster des Fundus als Live-Beispiele und eine Tabelle, welcher Button-Typ zu welchem Rezept passt.",
   "warum_es_wirkt": "Buttons sind das häufigste Bedienelement einer Seite. Als System aus wenigen Tokens sprechen sie überall dieselbe Sprache: Die Hauptaktion ist sofort erkennbar, Zustände sind vorhersehbar, und neue Seiten erben das Verhalten. Große Design-Systeme und Studios behandeln Buttons deshalb als Satz aus Typen, Tokens und Zuständen, nicht als Einzeleffekte.",
   "wann_einsetzen": "Vor jedem Website-Bau als Werkzeug: Tokens aus dem Rezept setzen, dann ein Button-Muster als Haupttyp und höchstens eines als Zweittyp aus der Rezept-Tabelle wählen. Als Vorlage für eine eigene Komponentenseite, wenn mehrere Leute an einer Kundenseite bauen.",
   "wann_nicht": "Nicht als sichtbare Galerie auf einer Kundenseite: Die Übersicht ist Werkzeug, keine Sektion. Nicht mehrere Button-Muster auf einer Seite mischen. Nie mehr als eine primäre Handlung je Ansicht. Keine Muster, die das Rezept unter „nicht verwenden“ führt.",
   "varianten": [
    "hell: neutrale Systemseite auf hellem Grund, Signalton Ultramarin",
    "dunkel: dieselben Tokens für dunkle Oberflächen, helle Primärfläche mit dunklem Text, eigene Gefahr- und Erfolgsfarbe",
    "rezepte: dieselben fünf Typen in den Tokens von Studio-Bühne, Manufaktur-Stille und Fahrschule; der Umschalter setzt die Welt für die ganze Seite, Token-Tabellen und Kontraste rechnen mit"
   ],
   "umsetzung": "Alle Buttons lesen dieselben Custom Properties: --b-h-s/m/l, --b-px-s/m/l, --b-radius, --b-kante, --b-schrift, Farben je Typ (--p-*, --s-*, --t-*, --i-*, --g-*, deaktiviert --d-*, Erfolg --ok-*) und Bewegung je Zustand (--dauer-*, --kurve-*). Jeder Typ mappt seine Farben auf --bg, --fg, --kante und deren -h- und -d-Stufen; die Zustandsregeln sind für alle Typen gleich. Hover nur in @media (hover: hover), Fokus über :focus-visible mit outline, Druck über :active und scale. Deaktiviert über aria-disabled=\"true\", damit der Knopf fokussierbar bleibt und per aria-describedby sagt, warum. Laden mit aria-busy und role=status; Ruhe-, Lade- und Erfolgslabel liegen in einer Grid-Zelle, damit die Breite nie springt. Kleine Knöpfe bekommen über ::after mit negativem inset 44 px Trefferfläche. <button> für Handlungen, <a> für Ziele. Ein Rezept überschreibt nur Tokens am :root.",
   "mobil": "Ohne Hover entfällt der Hover-Zustand, Druck und Fokus bleiben. Alle Knöpfe mindestens 44 px tastbar, die Hauptaktion im Formular auf dem Telefon volle Breite und zuerst. Breite Tabellen werden zu Karten oder scrollen in einem eigenen Bereich.",
   "reduzierte_bewegung": "Keine Wege und kein Skalieren: Druck wird zur Farbänderung, Label wechseln ohne Weg, der Spinner steht und der Text „Wird gesendet“ trägt den Zustand, das Häkchen erscheint ohne Zeichnen. Farbwechsel bleiben.",
   "barrierefreiheit": "WCAG 1.4.3: Label in jedem Zustand mindestens 4,5 : 1, auch deaktiviert und im Ladezustand; gedämpft über eine eigene Textfarbe, nie über Deckkraft. 1.4.11: Kante sekundärer Buttons und Fokusring mindestens 3 : 1. 2.4.7: Fokus sichtbar, im Kontrastmodus Highlight. 2.5.8: mindestens 24 px, hier 44 px. 4.1.2: Icon-Buttons mit aria-label und Tooltip, Umschalter mit aria-pressed, Menü mit aria-expanded, Laden mit aria-busy und role=status. Gefahr-Buttons nicht nur über Rot: Verb nennt die Folge, Rückfrage mit Fokus auf „Behalten“, danach Rückgängig. Kontrastmodus: Rahmen in ButtonText, deaktiviert in GrayText."
  },
  "geprueft": "02.11.2026",
  "notiz": "Welt: erfundenes Büro Quermaß, Interface-Systeme, Marburg; Schibsted Grotesk + Geist Mono, Ultramarin als einziger Signalton, kein Beige. Rezept-Welten aus kreativstudio-buehne (TikTok Sans, #ff5a1f, Pille), luxus-manufaktur-stille (Instrument Sans versal, Bodoni-Titel, Anthrazit, eckig) und fahrschule-freundlich-buchbar (Bricolage Grotesque, Gelb mit Navy-Kante, Überschwinger). Spezimen mit Maßlinien und Live-Ablesung (Zustand, Bewegung, Kontrast aus Tokens), Formular mit aria-disabled, Laden und Erfolg, Liste mit Icon-Buttons und Gefahr mit Rückfrage und Rückgängig, Token-Tabellen und Kurven live aus CSS, Zustands-Matrix 5 × 7, Galerie mit 24 eigenen schlanken Nachbauten (Filter nach Stimmung und Rezept: empfohlen / ausgeschlossen), Rezept-Tabelle 21 Zeilen. Zuordnung auch als JSON übergeben. Referenzen: developer.apple.com (HIG Buttons), design-system.service.gov.uk, osmo.supply.",
  "varianten": [
   {
    "id": "hell",
    "name": "Hell",
    "wann": "Grundvariante für helle Kundenseiten und als Styleguide-Vorlage.",
    "werte": {
     "grund": "#f2f3f5",
     "flaeche": "#ffffff",
     "text": "#121419",
     "primaer": "#2a33e0 / #1d24b8 / #161c94, Text #ffffff",
     "fokus": "#121419"
    }
   },
   {
    "id": "dunkel",
    "name": "Dunkel",
    "wann": "Dunkle Oberflächen wie Produkt-UI, Film oder Studio-Seiten im Dark Mode; zeigt, welche Tokens sich für Dunkel ändern müssen.",
    "werte": {
     "grund": "#0f1013",
     "flaeche": "#17191e",
     "text": "#eef0f3",
     "primaer": "#9aa2ff / #b8beff / #cdd1ff, Text #0b0c10 (8,4 : 1)",
     "gefahr": "#ff8a80, Text #0f1013",
     "erfolg": "#6fd6a0, Text #0f1013",
     "sekundaer_kante": "#6c727e (3,6 : 1 auf #17191e)",
     "fokus": "#eef0f3"
    }
   },
   {
    "id": "rezepte",
    "name": "Rezept-Welten",
    "wann": "Beim Start eines Kundenprojekts: zeigt dieselben fünf Typen in drei Rezept-Tokens, damit sichtbar wird, dass nur Tokens wechseln.",
    "werte": {
     "buehne": "TikTok Sans 600, Höhe 40/48/56, Radius 999px, Kante 1.5px, primär #ff5a1f Text #0b0b0b (6,3 : 1), Hover invertiert auf #0b0b0b, 400 ms cubic-bezier(0.16, 1, 0.3, 1), Druck .96",
     "manufaktur": "Instrument Sans 500 versal 12px +0.08em, Radius 0, primär #23282f Text #fff, Kante #7c8188, Fokus 1px #8f7244 Versatz 5px, 250 ms cubic-bezier(0.25, 1, 0.5, 1), kein Skalieren",
     "fahrschule": "Bricolage Grotesque 700, Radius 14px, Kante 2px #142b50, primär #ffd60a Text #142b50 (10 : 1), 400 ms cubic-bezier(0.34, 1.56, 0.64, 1), Druck .95, Fokus 3px Versatz 4px"
    }
   }
  ]
 }
}
