Zum Inhalt springen
AvandoLabs Theme-Hilfe English

Technische Seite · Aufbau & Stellschrauben

Für Entwickler: wie das Theme aufgebaut ist

Diese Seite erklärt den technischen Unterbau: die Design-Variablen („Tokens“), wie sie zusammenwirken, die @layer-Kaskade und die Reihenfolge, in der du das Theme anpasst – von „nur beim Framework-Fork“ bis „an einem einzelnen Element“. Zum Schluss: warum sich dieser Aufbau gut für KI-gestützte Design-Automatisierung eignet.

Ein Wert, an einer Stelle

Alle --av-*-Vorgaben stehen einmal in bundle/public/theme/tokens.css, im Layer av.tokens auf :root. Regeln im Theme greifen nie auf Rohwerte zu, immer auf ein Token. Das ist der Grund, warum eine Farbänderung überall konsistent durchschlägt – und der Grund für den Namen Advanced Variable Environment.

Kein Build-Schritt im Alltag. Es sind native CSS Custom Properties, kein Sass/Less – kein Vorprozessor, kein Kompilieren. custom.css oder theme-vars.css anpassen genügt, der Browser löst zur Laufzeit auf; ein CSS-Cache-Leeren ist nur bei einem hartnäckigen Zwischenspeicher nötig, nicht die Regel. Der Build (ave:css:build) betrifft nur das Zusammenfassen der Framework-Quelldateien zu einer Datei.

Werte, die sich gegenseitig ergeben

Viele Tokens sind nicht gesetzt, sondern berechnet:

/* Sekundärfarbe: aus der Primärfarbe, über zwei Dials */
--av-color-secondary:
  oklch(from var(--av-color-primary)
        l calc(c * var(--av-sec-chroma))
        calc(h + var(--av-sec-hue-shift)));

/* Gedämpfter Text: Mischung aus Textfarbe und Fläche */
--av-color-text-muted:
  color-mix(in oklch, var(--av-color-text) var(--av-muted-fraction),
            var(--av-color-surface));

/* Hell/Dunkel: color-scheme + light-dark(), Umschalten html.light / html.dark */
--av-color-primary-light: light-dark(var(--blue-3), var(--blue-9));

Wer die Primärfarbe ändert, bekommt Sekundärfarbe, Hover-Varianten, gedämpften Text und die Dunkelmodus-Werte automatisch mit.

Skalen-Faktor oder absolute Stufe

Größen kommen als Rampe plus ein Faktor. Der Faktor bewegt die ganze Rampe; bei 1 kollabiert calc() exakt auf den Ausgangswert (pixelgleich – deshalb ist „mit Defaults speichern“ wirkungslos).

--av-radius-scale: 1;
--av-radius-sm: calc(var(--radius-2) * var(--av-radius-scale));
--av-radius-md: calc(var(--radius-3) * var(--av-radius-scale));
/* … */

/* ganze Rampe bewegen: */   :root { --av-radius-scale: 1.4; }
/* eine Stufe hart setzen: */ .promo { --av-radius-lg: 8px; }

Weitere Faktoren: --av-text-scale, --av-heading-scale, --av-space-scale (Dichte), --av-layout-gap-scale, --av-shadow-scale, --av-glow-scale, --av-duration-scale, --av-bg-overlay-scale.

Das Design Studio schreibt nur den Faktor (z. B. --av-radius-scale), nie die vier Stufen. Ein --av-radius-md: 16px fest in custom.css legt genau diesen Regler still.

Die @layer-Kaskade

Die Reihenfolge wird einmal in tokens.css deklariert. Frühe Layer haben die niedrigste Priorität. Kunden-CSS in custom.css ist ohne Layer und gewinnt damit gegen alles Layer-CSS – unabhängig von Selektor-Spezifität.

custom.css — ohne @layer gewinnt immer · hier gehören Projekt-Overrides hin

▲ höhere Priorität

  1. av.animations
  2. av.layout
  3. av.theme
  4. av.forms
  5. av.components
  6. av.typography
  7. av.base
  8. av.tokens ← alle --av-* Vorgaben
  9. av.normalize
theme-vars.css (die Deltas aus dem Design Studio) ist ebenfalls ohne Layer, wird aber vor custom.css eingebunden – deshalb gewinnt eine Hand-Änderung in custom.css gegen den gespeicherten Studio-Stand.

Die Stellschrauben – von global nach lokal

Das Design Studio (ave-editor) ist eines von mehreren gleichwertigen Mitteln, nicht das einzige. Es ist ein optionales Zusatz-Bundle; das Theme-Framework (bundle) läuft auch ohne. Beim Speichern schreibt es lediglich files/theme/CSS/theme-vars.css (ein :root { … }-Block). Ein Projekt ohne Studio setzt dieselben --av-*-Werte von Hand – in theme-vars.css, in custom.css oder als geänderte Vorgaben in tokens.css (Fork + Build). Fehlt theme-vars.css, kommt alles aus tokens.css.

OrtWofürReichweite
bundle/public/theme/tokens.css Die Vorgaben selbst ändern. Nur beim Anpassen des Frameworks; danach ave:css:build. alle Projekte, die das Bundle nutzen
Design Studio Die vorgesehenen site-weiten Regler. Schreibt files/theme/CSS/theme-vars.css, versioniert. ganze Website
files/theme/CSS/custom.css Hand-Overrides: jedes --av-* auf :root site-weit – oder auf einen Selektor / eine Sektion / eine Seite begrenzt. Plus Projekt-CSS. Gewinnt über alles. frei wählbar
files/theme/CSS/theme.css Starter-Theme-Bausteine: Header/Footer/Navigation, Hero-Hintergrund, Akkordeon-Varianten, .display-hero, .section-index, .pull-quote. Kommt aus dem Bundle (bundles/avandoave/starter/); eine eigene Datei unter diesem Pfad ersetzt sie. ganze Website
Feld Inline-Styles / CSS-Klasse Pro Sektion oder Element: beliebige Deklarationen inkl. --av-* (--av-gutter: 2rem); Utility-Klassen; Brücken-Tokens --av-el-* / --av-section-color vererben vom Wrapper in die Kinder. eine Sektion / ein Element

Logo-SVG für logo-tint vorbereiten

Mit der Klasse logo-tint setzt das Theme eine SVG als Code in die Seite statt als Bild und färbt ihre benannten Teile. Benannt wird mit einer CSS-Klasse an einer Gruppe:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1017 170">
  <g class="logo-mark" fill="#1c7ed6"> … Zeichen … </g>
  <g class="logo-word" fill="#808080"> … Schriftzug … </g>
</svg>

Kopfzeile anordnen

Die Kopfzeile verteilt ihre Teile über die volle Breite: der erste steht ganz links, der letzte ganz rechts, alle übrigen mit gleichem Abstand dazwischen. Ein Teil ist jeder Eintrag, der im Seitenlayout (Themes → Seitenlayouts → Eingebundene Elemente) in der Spalte header steht.

Einträge in headerErgebnisDemo
Logo · Navigation · KnopfNavigation in der MitteVion Consulting
Logo · Elementgruppe (Navigation + Knopf)Navigation rechts, direkt neben dem KnopfWasser für Morgen, Studio Halcyon, Praxis Lindenhof
Logo · NavigationNavigation rechts–

Eine Elementgruppe mit dem Layout layout-row hält ihre Kinder in einer Zeile zusammen und zählt für die Kopfzeile als ein Teil. Bei drei Teilen steht die Navigation mittig zwischen Logo und Knopf – genau in der Seitenmitte nur, wenn Logo und Knopf gleich breit sind.

Auf dem Handy Sobald die Navigation zum Menü-Knopf wird (unter 768 px immer, auf breiteren Bildschirmen, wenn sie nicht in eine Zeile passt), blendet die Kopfzeile Elemente mit der Klasse desktop-only aus – etwa einen Kontakt- oder Spenden-Knopf, der dann im Menü selbst stehen kann.

Build & Betrieb

Stolperstein: zusammengesetzte Tokens

Eine Custom Property wird dort aufgelöst, wo sie deklariert ist. Tokens wie --av-card-border, --av-card-bg oder die Glow-Ketten werden deshalb zusätzlich auf den Klassen selbst gesetzt. Wer eine Sektion baut, die --av-color-border oder --av-color-surface-2 umstellt, muss das jeweilige Karten-Token im selben Block mitziehen – sonst bekommt die Karte darin weiter den Wurzelwert. Ebenso lösen relative URLs in --icon-src am Verwendungsort auf; eigene Icons brauchen einen absoluten Pfad.

Gut geeignet für agentische Workflows

Derselbe Aufbau, der das Theme wartbar macht, macht es auch für KI-Agenten berechenbar. Wer Design-Änderungen automatisiert, profitiert von:

Vollständige Referenz: bundle/cheat-sheet.md listet jedes --av-*-Token mit Default und jede Utility-Klasse. Bau- und Stilregeln stehen in bundle/ai-instructions.md.