Farben, Typografie, Komponenten und das Self-Contained-Prinzip — die visuelle DNA jeder generierten Seite
Die gesamte visuelle Identität basiert auf drei Kernfarben, ergänzt durch semantische Farben für Feedback-Zustände. Jede Farbe hat eine klare Rolle — kein willkürlicher Einsatz, sondern ein durchgängiges System.
Kernfarben
Semantische Farben
Drei Schriftfamilien decken alle Anwendungsfälle ab. Jede hat eine klare Aufgabe — kein Mix, keine Überschneidungen. Geladen über Google Fonts, die einzige externe Abhängigkeit.
Überschriften, Karten-Titel, Pyramiden-Labels, Flow-Step-Labels. Gewichte: 400, 600, 700, 800.
--font-displayAbsatztext, Card-Beschreibungen, Breadcrumbs, Quiz-Optionen, Tooltips. Gewichte: 300–700, inkl. Italic.
--font-bodyFile Trees, Inline-Code, Modul-Nummern in der Übersicht, Breadcrumb-Level-Tags, Variable-Namen. Gewichte: 400, 500, 600.
--font-monoGrößen-Skala (--text-*)
Drei Font-Stacks: Bricolage Grotesque für alles, was Aufmerksamkeit braucht (Headings, Titel). DM Sans für alles, was gelesen wird (Absatztext, Beschreibungen). JetBrains Mono für alles Technische (Code, Badges, Labels). Fallbacks sorgen dafür, dass ohne Google Fonts trotzdem ein sauberes Layout entsteht.
Keine externen CSS-Dateien. Alles ist inline in jeder HTML-Datei. Das CSS wird einmalig in Phase 3 definiert und in jede einzelne Datei kopiert. Ergebnis: Dateien funktionieren offline, keine Broken Links, keine CDN-Abhängigkeit (außer Google Fonts).
<link rel="stylesheet"> das auf eine fehlende Datei zeigt. Der Style ist immer da.~200 CSS-Variablen in folgenden Kategorien
Alle visuellen Bausteine folgen der Struktur .module → .module-content → .module-header → .module-body → .screen. Hier die wichtigsten Komponenten im Überblick:
.card + .cards-grid.quiz + .quiz-option.file-tree.term + .term-tooltip.deep-dive-link.viz-flow + .viz-flow-stepZwei Breakpoints, Scroll-Snap mit proximity (nicht mandatory!) und IntersectionObserver-basierte Einblend-Animationen.
Breakpoints
scroll-snap-type: y proximity — sanftes Einrasten, kein erzwungenes Springen. Jedes .module ist ein Snap-Punkt..animate-in + IntersectionObserver. Elemente faden ein mit translateY(20px) → translateY(0).Animation-System: Drei Geschwindigkeitsstufen (150ms für schnelle Hover-Effekte, 300ms für normale Transitions, 500ms für Einblend-Animationen). Die Easing-Kurve cubic-bezier(.16, 1, .3, 1) sorgt für eine natürliche Verzögerung. Stagger-Delays lassen Kinder-Elemente nacheinander erscheinen (120ms Abstand).
Warum wird CSS inline eingebettet statt über ein externes Stylesheet?