248 lines
6.9 KiB
Markdown
248 lines
6.9 KiB
Markdown
# Built-in Themes v1.1
|
||
|
||
## 1. Theme families voor v1
|
||
Aanbevolen built-in theme families voor v1.1:
|
||
- `default`
|
||
- `macos-soft`
|
||
- `midnight`
|
||
- `graphite`
|
||
- `windows11`
|
||
|
||
Deze set is klein genoeg om beheersbaar te blijven en groot genoeg om visueel zinvolle keuze te bieden zonder een theme-explosie te veroorzaken.
|
||
|
||
## 2. LCARS
|
||
`lcars` hoort expliciet niet in v1.1.
|
||
|
||
Aanbevolen behandeling:
|
||
- niet opnemen in deze slice
|
||
- later als aparte v2 onderzoeken
|
||
|
||
Reden:
|
||
- `lcars` is visueel extreem uitgesproken
|
||
- hoger risico op regressie in leesbaarheid, functiebalkgebruik, row states, modals en paneelcontrast
|
||
- grotere kans dat componentstructuur visueel gaat knellen tegen de huidige dual-pane workflow
|
||
|
||
Conclusie:
|
||
- `lcars` beter behandelen als aparte latere theme-slice met eigen UX-validatie
|
||
|
||
## 3. Theme-model
|
||
Het bestaande model blijft leidend:
|
||
- `selected_theme` = theme family
|
||
- `selected_color_mode` = `dark` of `light`
|
||
|
||
Beide blijven persistent opgeslagen in SQLite settings.
|
||
|
||
Voorbeelden van effectieve combinaties:
|
||
- `default-dark`
|
||
- `default-light`
|
||
- `macos-soft-dark`
|
||
- `macos-soft-light`
|
||
- `midnight-dark`
|
||
- `graphite-light`
|
||
- `windows11-dark`
|
||
|
||
Belangrijk:
|
||
- theme family en color mode blijven twee gescheiden concepten
|
||
- de hoofdinterface-toggle blijft alleen `selected_color_mode` wisselen
|
||
- `Settings > Interface` blijft alleen `selected_theme` beheren
|
||
|
||
## 4. CSS-architectuur
|
||
Voorkeursrichting voor v1.1:
|
||
- één gedeelde `base.css` voor:
|
||
- layout
|
||
- spacing
|
||
- componentstructuur
|
||
- modals
|
||
- panelen
|
||
- functiebalk
|
||
- lijst/tabelstructuur
|
||
- algemene componentbasis
|
||
- aparte CSS-bestanden per theme-family:
|
||
- `theme-default.css`
|
||
- `theme-macos-soft.css`
|
||
- `theme-midnight.css`
|
||
- `theme-graphite.css`
|
||
- `theme-windows11.css`
|
||
- light/dark binnen dezelfde family geregeld via selectors of tokens
|
||
|
||
Dus expliciet niet:
|
||
- één enorm all-in-one CSS-bestand met alles door elkaar
|
||
- per `theme+mode` een volledig apart layoutbestand
|
||
|
||
Aanbevolen structuur:
|
||
- `base.css`
|
||
- `theme-default.css`
|
||
- `theme-macos-soft.css`
|
||
- `theme-midnight.css`
|
||
- `theme-graphite.css`
|
||
- `theme-windows11.css`
|
||
|
||
Binnen elk theme-family bestand:
|
||
- alleen tokens en beperkte theme-afwerking
|
||
- geen duplicatie van layoutregels
|
||
- geen alternatieve componentstructuur
|
||
|
||
Voorbeeldselector-richting:
|
||
- `:root[data-theme-family="macos-soft"][data-color-mode="dark"] { ... }`
|
||
- `:root[data-theme-family="macos-soft"][data-color-mode="light"] { ... }`
|
||
|
||
Of equivalent via custom properties.
|
||
|
||
## 5. Waarom deze architectuur onderhoudbaarder is
|
||
Deze architectuur is onderhoudbaarder omdat hij drie dingen schoon van elkaar scheidt:
|
||
- wat de UI is: layout en componentstructuur in `base.css`
|
||
- welke stijl-family actief is: family-bestand
|
||
- welke kleurmodus actief is: dark/light tokens binnen die family
|
||
|
||
Voordelen:
|
||
- layout-CSS staat op één plek
|
||
- theme-bestanden blijven klein en thematisch leesbaar
|
||
- regressies zijn makkelijker te isoleren per family
|
||
- nieuwe family toevoegen vereist minder risico op breken van bestaande layout
|
||
- dark/light binnen één family blijft samenhangend beheerd
|
||
|
||
Hoe duplicatie van layout-CSS voorkomen wordt:
|
||
- `base.css` bevat alle structurele regels
|
||
- family-bestanden overschrijven alleen tokens en kleine visuele accenten
|
||
- geen herhaling van paneelgrid, modal layout, functiebalkstructuur of lijstlayout per family
|
||
|
||
Hoe theme switching schoon blijft:
|
||
- frontend hoeft alleen `selected_theme` en `selected_color_mode` te lezen
|
||
- die waarden vertalen naar theme-attributen op `document.documentElement`
|
||
- CSS doet de rest via selectors/custom properties
|
||
- geen runtime CSS-generatie nodig
|
||
- geen vrije bestandsselectie
|
||
- geen ingewikkelde asset-resolutie
|
||
|
||
## 6. Visuele richting per theme
|
||
Alle themes behouden exact dezelfde layout en informatiearchitectuur. Alleen visuele stijl verschilt.
|
||
|
||
### `default`
|
||
Doel:
|
||
- neutrale baseline
|
||
- functioneel
|
||
- rustig
|
||
- compact
|
||
|
||
Karakter:
|
||
- de huidige standaardstijl, iets verfijnd maar niet uitgesproken
|
||
|
||
### `macos-soft`
|
||
Doel:
|
||
- zacht
|
||
- verfijnd
|
||
- vriendelijk
|
||
|
||
Karakter:
|
||
- subtiele surfaces
|
||
- zachte grijstinten
|
||
- lichte premium desktop-app indruk
|
||
- iets vriendelijkere rounding/shadows, zonder layout te veranderen
|
||
|
||
### `midnight`
|
||
Doel:
|
||
- donker
|
||
- gefocust
|
||
- rustig
|
||
|
||
Karakter:
|
||
- diepere donkere panelen
|
||
- koele accenten
|
||
- sterke maar nette current/selected contrasten
|
||
- geschikt voor langdurig gebruik in dark mode
|
||
|
||
### `graphite`
|
||
Doel:
|
||
- sober
|
||
- professioneel
|
||
- bijna monochroom
|
||
|
||
Karakter:
|
||
- grijs-gedreven palette
|
||
- minimale accentkleur
|
||
- contrast via luminantie in plaats van felle tinten
|
||
|
||
### `windows11`
|
||
Doel:
|
||
- helder
|
||
- modern
|
||
- clean desktop-app gevoel
|
||
|
||
Karakter:
|
||
- lichtere surfaces
|
||
- subtiele border/surface scheiding
|
||
- iets luchtiger accentgebruik
|
||
- behoud van compacte file-manager ergonomie
|
||
|
||
## 7. Settings UI
|
||
`Settings > Interface` toont een dropdown/select met de theme families:
|
||
- `default`
|
||
- `macos-soft`
|
||
- `midnight`
|
||
- `graphite`
|
||
- `windows11`
|
||
|
||
Dark/light blijft via de bestaande toggle in de hoofdinterface.
|
||
|
||
Dus:
|
||
- Interface tab = keuze van style family
|
||
- Main interface toggle = keuze van color mode
|
||
|
||
Geen extra theme-complexiteit in v1.1:
|
||
- geen preview gallery
|
||
- geen import/export
|
||
- geen vrije CSS-keuze
|
||
- geen uploads
|
||
|
||
## 8. Backend-impact
|
||
Backend-aanpassing blijft klein:
|
||
- whitelist van `selected_theme` uitbreiden met:
|
||
- `default`
|
||
- `macos-soft`
|
||
- `midnight`
|
||
- `graphite`
|
||
- `windows11`
|
||
- `selected_color_mode` blijft bestaan zoals nu
|
||
- geen vrije css-bestandskeuze
|
||
- geen uploadmechanisme
|
||
- geen nieuwe dependencies
|
||
|
||
De bestaande settings-opslag en settings-API kunnen verder hetzelfde model blijven gebruiken.
|
||
|
||
## 9. Regressierisico
|
||
Belangrijkste risico’s:
|
||
- leesbaarheid per theme/mode
|
||
- current row / selected row contrast te zwak of te hard
|
||
- modals die in bepaalde families te vlak worden
|
||
- functiebalk die visueel wegvalt
|
||
- editor/viewers die niet goed mee themen
|
||
- thumbnail/icon-slot met te weinig contrast
|
||
- CSS-fragmentatie als family-bestanden toch structurele regels gaan bevatten
|
||
- duplicatie als layout-regels alsnog in family-bestanden belanden
|
||
|
||
Belangrijk mitigatieprincipe:
|
||
- family-bestanden beperken tot visuele tokens en kleine afwerkingsregels
|
||
- geen layout-overrides per family
|
||
- consistent regressietesten van dezelfde states in alle families
|
||
|
||
## 10. Aanbeveling
|
||
Aanbevolen richting voor deze app:
|
||
- ja, `base.css` + aparte CSS per theme-family is de juiste richting
|
||
|
||
Waarom:
|
||
- laag regressierisico
|
||
- duidelijke scheiding tussen structuur en uiterlijk
|
||
- onderhoudbaar bij toekomstige uitbreiding
|
||
- sluit aan op het bestaande model van `selected_theme` + `selected_color_mode`
|
||
- voorkomt zowel een gigantisch all-in-one stylesheet als onnodige duplicatie per `theme+mode`
|
||
|
||
Expliciete aanbevelingen:
|
||
- gebruik gedeelde basis-CSS voor layout/componentstructuur
|
||
- gebruik aparte CSS per theme-family
|
||
- regel dark/light binnen dezelfde family via selectors/tokens
|
||
- behandel `lcars` expliciet als aparte latere slice
|
||
|
||
Conclusie:
|
||
- deze architectuur is de juiste basis voor built-in themes in deze app
|
||
- `lcars` moet niet worden meegetrokken in v1.1, maar apart worden ontworpen en gevalideerd
|