IIO Theme Developer Guide

Diese Seite dokumentiert die komplette auswaehlbare Theme-Struktur in iio/theme sowie den internen Ablauf des Theme-Switchings im Manual.

Stand: April 2026, Schema: Family -> Theme -> assets/style.css mit b2b-basierter Vererbung.

Auswaehlbare Gesamtstruktur

Der Theme-Chooser liest alle Top-Level-Ordner unter iio/theme, mappt sie ueber theme-families.json auf Familien und schliesst legacy/families aus der direkten Auswahl aus.

Family Theme ID Schema-Datei Import-Kette Status
coreb2bb2b/assets/style.css../solution-provider/assets/style.cssOK
coreiioiio/assets/style.css../../b2b/solution-provider/assets/style.cssOK
coreiio-greeniio-green/assets/style.css../../b2b/solution-provider/assets/style.cssOK
intelegodramadrama/assets/style.css../../b2b/solution-provider/assets/style.cssOK
intelegoclassicclassic/assets/style.css../../b2b/solution-provider/assets/style.cssOK
b2bpraezisionpraezision/assets/style.css../../b2b/solution-provider/assets/style.cssOK
b2bpublishingpublishing/assets/style.css../../b2b/solution-provider/assets/style.cssOK
lynaearlynäarlynäar/assets/style.css../../b2b/solution-provider/assets/style.cssOK
lynaearlinearlinear/assets/style.css../../b2b/solution-provider/assets/style.cssOK
lynaearraenilraenil/assets/style.css../../b2b/solution-provider/assets/style.cssOK
storyworldgenesisgenesis/assets/style.css../../b2b/solution-provider/assets/style.cssOK
storyworldmagicmagic/assets/style.css../../b2b/solution-provider/assets/style.cssOK
storyworldponyhofponyhof/assets/style.css../../b2b/solution-provider/assets/style.cssOK
storyworldbalkangrillbalkangrill/assets/style.css../../b2b/solution-provider/assets/style.cssOK
archive---Derzeit leer (Reserviert fuer Altfaelle)
excludedlegacy--Nicht auswaehlbar (explizit ausgeschlossen)
excludedfamilies--Nur Dokumentation/Organisation

Top Header Control Center (aktuell)

Die Steuerung sitzt im Shell-Header (iio/theme/_shell.js). Der fruehere Standalone-Picker wird nicht mehr separat unterhalb der Navigation gemountet.

Steuerung Zweck Persistenz Technik
Operator-PresetSetzt mehrere Header-Optionen in einem Schritt (CTO/Ops/Training)iio-shell-preferences.presetIdPreset-Mapping in iio/theme/_shell.js
Theme-FamilieFiltert auf verfuegbare Themes je Familyiio-shell-preferencesFamily-Metadaten aus theme-families.json
ThemeAktiviert ein konkretes Themeiio-theme-preference + iio-shell-preferencesIIOThemeSwitcher.setTheme(), #iio-active-theme-link
Sprache (UI)Header-Beschriftungen DE/ENiio-shell-preferences.uiLangLabel-Map in _shell.js
SprachstilDarstellungsstil technical/business/trainingiio-shell-preferences.langStyledata-iio-lang-style am body
TextdichteCompact/Standard/Detailed Zeilenabstandiio-shell-preferences.densitydata-iio-density + CSS-Regeln
SchriftgroesseGlobaler Skalierungsfaktoriio-shell-preferences.fontScale--iio-shell-scale CSS-Variable
Nav-ModusKompakt oder Expanded fuer Seitenlisteniio-shell-preferences.navModeSteuert den Open-State der <details>-Listen
URL-SyncAktualisiert die URL bei Einstellungswechseln per history.replaceStateiio-shell-preferences.urlSyncOn/Off Toggle in _shell.js
Reset auf StandardSetzt Header-Praeferenzen auf Default-Werte zurueckiio-shell-preferencesReset-Button in _shell.js
Ansicht als Link teilenKopiert die aktuelle Header-Konfiguration als URL-Share-Button in _shell.js (Clipboard API)

Preset-Profile (aktueller Stand)

URL-Parameter (Deep Links fuer Header-State)

Beim Teilen einer Ansicht werden diese Query-Parameter gesetzt und beim Laden ausgewertet:

Top-Level Directory Status (Cleanup)

Diese Tabelle zeigt alle vorhandenen Top-Level-Ordner in iio/theme mit aktuellem Status und empfohlener Aufraeum-Aktion.

Dir Status Family/Zuordnung Empfohlene Aktion
b2bACTIVE_MAPPEDcore / b2bBehalten (Basis-Theme)
balkangrillACTIVE_MAPPEDstoryworldBehalten
familiesEXCLUDED_INFRADokumentationBehalten (nicht als Theme)
genesisACTIVE_MAPPEDstoryworldBehalten
iioACTIVE_MAPPEDcoreBehalten
iio-greenACTIVE_MAPPEDcoreBehalten
dramaACTIVE_MAPPEDintelego/dramaBehalten
classicACTIVE_MAPPEDintelego/classicBehalten
legacyEXCLUDED_LEGACYHistorische QuelleOptional archivieren oder read-only lassen
linearACTIVE_MAPPEDlynaearBehalten
lynäarACTIVE_MAPPEDlynaearBehalten
magicACTIVE_MAPPEDstoryworldBehalten
ponyhofACTIVE_MAPPEDstoryworldBehalten
praezisionACTIVE_MAPPEDb2bBehalten
publishingACTIVE_MAPPEDb2bBehalten
raenilACTIVE_MAPPEDlynaearBehalten

Interner Aufbau

1. Discovery

2. CSS-Aufloesung

3. Aktivierung

4. Persistenz

Wie es im Manual verdrahtet ist

Kernpfade: iio/theme/_shell.js, iio/theme/theme-switcher.js, iio/theme/*/assets/style.css

Operator Branding im Header

Manual-Seiten zeigen links neben IIO nicht das aktive Tenant-Logo, sondern das Branding des Tenants, der den Space aktuell betreibt.

space_operator:
  tenant: intelego
  brand_label: Intelego
  favicon_rel: families/intelego/classic/assets/brand/favicon-32.png

Developer Checkliste fuer neue Themes

  1. Neuen Ordner unter iio/theme/THEME_ID anlegen.
  2. iio/theme/THEME_ID/assets/style.css erstellen.
  3. Inhalt mit @import url('../../b2b/solution-provider/assets/style.css'); starten.
  4. Eigene Variablen in :root setzen (navy, blue-dark, blue-mid, blue-light, info).
  5. Seite neu laden und Theme im Chooser auswaehlen.

Baukasten-Prinzip fuer Entwickler

Der IIO-Ansatz ist ein Baukasten mit klaren Schichten. Statt jede Seite neu zu bauen, werden stabile Bausteine kombiniert: Shell, Switcher, Basis-CSS und Theme-Overrides.

Baustein Aufgabe Datei/Ort Wann anfassen
Manual Shell Globale Manual-Navigation + Laden des Theme-Switchers iio/theme/_shell.js Neue Manual-Seiten, Nav-Logik, globale UX
Theme Switcher Theme-Discovery, Auswahl, Persistenz, Aktivierung iio/theme/theme-switcher.js Resolver-Reihenfolge, Dropdown, Storage, Fallback-Logik
Basis-Theme Komplette Grund-Typografie, Layout, Komponenten-Look iio/theme/families/b2b/solution-provider/assets/style.css Systemweite visuelle Basis veraendern
Theme-Adapter Import der Basis + Farbprofil je Theme-ID iio/theme/THEME_ID/assets/style.css Nur dieses Theme farblich/taktisch anpassen
Manual-Seiten Inhalt und spezielle UI je Seite iio/manual/*.html Fachliche Features, Tabellen, Visualisierungen

Wo was hingehoert (Ablage-Regeln)

Faustregel: Verhalten zentral, Erscheinung pro Theme, Inhalt pro Seite.

Wie man mit dem Baukasten programmiert

Use Case A: Neue Manual-Seite bauen

  1. Neue Seite unter iio/manual/ anlegen.
  2. Basis-CSS-Link setzen: ../../../iio/theme/families/b2b/solution-provider/assets/style.css.
  3. Am Ende <script src="../../../iio/theme/_shell.js"></script> einbinden.
  4. Seiteninhalt als Cards/Tabellen/Panel schreiben, keine eigene Theme-Auswahl implementieren.
  5. Seite in iio/manual/index.html verlinken.

Use Case B: Neues Theme hinzufuegen

  1. Ordner anlegen: iio/theme/mein-theme/.
  2. Datei anlegen: iio/theme/mein-theme/assets/style.css.
  3. Startinhalt: Import der b2b-Basis plus eigene :root-Variablen.
  4. Reload im Browser: Theme erscheint automatisch im Dropdown (Discovery ueber Ordnername).
  5. Theme auswaehlen, visuell pruefen, danach feinjustieren.

Use Case C: Systemweites UI-Verhalten aendern

  1. Komponenten-Style global: b2b-Basisdatei anpassen.
  2. Theme-spezifische Abweichungen: nur in den Adapter-Dateien je Theme.
  3. Resolver/Persistenz/Dropdown: theme-switcher.js.
  4. Navigation/Seitenliste: _shell.js.

Use Case D: Betreiber des Space wechseln

  1. specs/root/SPACE-OPERATOR-CONFIG.yaml anpassen.
  2. bash iio/specs/scripts/sync-public-state.sh /home/zolo/space ausfuehren.
  3. Manual neu laden und Header-Favicon gegen Betreiber-Brand pruefen.
  4. Tenant-Seiten separat pruefen, damit deren Theme-Logo unveraendert bleibt.

Konkretes Starttemplate fuer ein neues Theme

/* iio/theme/mein-theme/assets/style.css */
@import url('../../b2b/solution-provider/assets/style.css');

:root {
  --color-navy: #1a2742;
  --color-blue-dark: #2a4876;
  --color-blue-mid: #3c6aa8;
  --color-blue-light: #5f90d2;
  --color-info: #2f6fa8;
}

Damit nutzt das Theme alle Basis-Komponenten sofort und ueberschreibt nur die Identitaetsfarben.

Technischer Ablauf beim Laden (intern)

  1. Manual-Seite laedt _shell.js.
  2. _shell.js stellt Navigation sicher und laedt theme-switcher.js.
  3. Switcher liest Theme-Ordner unter iio/theme.
  4. Pro Theme wird CSS nach Prioritaet aufgeloest (normalerweise direkt assets/style.css).
  5. Aktives Theme wird in #iio-active-theme-link geladen.
  6. Nicht aktive Theme-Stylesheets werden deaktiviert.
  7. Theme-ID wird in LocalStorage gespeichert und beim naechsten Laden wiederhergestellt.

Debugging-Guide (wenn etwas nicht funktioniert)

Symptom Wahrscheinliche Ursache Pruefung Fix
Theme fehlt im Dropdown Ordnername/Listing passt nicht Liegt der Ordner direkt unter iio/theme? Ordner auf Top-Level verschieben, Namen bereinigen
Theme sichtbar, aber keine Aenderung CSS-Datei leer/falsch importiert Network + Inhalt von assets/style.css Importpfad korrigieren, Variablen setzen
Seite hat keine Navigation _shell.js nicht eingebunden Script-Tag am Ende der Seite? Shell-Script einfuegen
Theme springt nach Reload zurueck LocalStorage-Blockade oder Key-Konflikt Browser-Konsole + Storage-Eintrag Storage erlauben, Key iio-theme-preference pruefen

Release-Checkliste fuer menschliche Developer

  1. Jedes aktive Theme hat assets/style.css.
  2. Jede Manual-Seite bindet _shell.js ein.
  3. Theme-Wechsel funktioniert auf Desktop und Mobile.
  4. Kontrast fuer Text/Links ist lesbar.
  5. Keine inline Hotfixes in einzelnen Seiten, die globale Regeln brechen.
  6. Neue Seite ist in Hub und Shell-Navigation verlinkt.