Dotfiles_ArchAP/docs/appearance-sun-mode-17f.md

79 lines
4.3 KiB
Markdown

# Appearance 17F — Mode Soleil
Le profil Soleil augmente la visibilité de QuickShell et SwayFX. Il ne modifie
ni le fond d'écran, ni la luminosité, ni les thèmes GTK, Qt, Kitty, Neovim et
Firefox. Ces cinq familles d'applications relèvent obligatoirement de 17G ;
17F ne constitue donc pas une intégration complète du bureau clair.
## État et priorité
`preferences.json` et `effective.json` utilisent le schéma 4. Les anciennes
préférences migrent vers `sunMode=false`, `sunVariant=light`,
`sunDarkFlavor=mocha`. Seuls `frappe`, `macchiato` et `mocha` sont admis pour
`sunDarkFlavor`. Les coordonnées Night Light restent locales et intactes.
`themeMode`, `manualFlavor` et `wallpaperAnalysis` décrivent le choix normal.
La résolution centrale calcule d'abord ce flavor normal, puis applique la
priorité Soleil : `sun-light` donne Latte ; `sun-dark` donne
`sunDarkFlavor` ; Soleil désactivé restitue le flavor normal. Aucun instantané
des préférences normales n'est utilisé. `effectiveDark` dérive du flavor,
`effectiveHighContrast` vaut exactement `sunMode`, et `effectiveAccent` reste
Lavender. `effectiveMode` vaut `normal`, `sun-light` ou `sun-dark`.
Une modification effective du profil ou du flavor augmente `revision` une
fois. Un changement de `sunDarkFlavor` lorsque Soleil est désactivé est
persisté sans révision visuelle. Les consommateurs 17G devront utiliser
`effectiveFlavor`, `effectiveAccent`, `effectiveDark`,
`effectiveHighContrast`, `effectiveMode` et `revision` comme source unique.
Un futur `AppThemeSynchronizer` distribuera cet état à ses adaptateurs GTK,
Qt, Kitty, Neovim et Firefox ; aucune logique spécifique à ces applications
n'appartient à `Theme.qml`.
## Transaction et reprise
`wallpaper-manager.py` tient le verrou Appearance commun. Il résout l'état,
écrit atomiquement `generated/theme.conf` et éventuellement
`generated/wallpaper.conf`, valide Sway, recharge SwayFX, vérifie le fond si
nécessaire, publie `effective.json`, réconcilie le service Night Light,
réapplique les opacités existantes par `--refresh`, écrit les préférences,
puis publie l'état QuickShell via IPC. En cas d'échec, il restaure les octets
précédents des fichiers et de l'état, recharge Sway, rétablit Night Light et
les opacités, puis renvoie une erreur. Les transitions sont sérialisées ; les
contrôles QML attendent la fin de la transaction.
Le listener d'opacité lit l'état uniquement à chaque événement fenêtre ;
`--refresh` lit une fois lors d'un changement de profil. Normal utilise
focused `1.0`, inactive `0.85` ; Soleil utilise `1.0` pour les deux. SwayFX
consomme les variables du générateur dans son unique bloc `layer_effects` :
blur de la barre `enable` en normal, `disable` en Soleil. Le rayon d'ombre
passe de 10 à 4 et les couleurs d'ombre sont renforcées en Soleil. Les
bordures restent de 2 px.
Le lanceur de `wlsunset.service` lit `effective.json` avant tout démarrage :
en Soleil, il ne lance pas de correction gamma. La préférence Off, Auto ou On
reste intacte ; en sortie de Soleil le service est réconcilié selon cette
préférence. Au redémarrage de QuickShell, Appearance se réconcilie avant Night
Light et reprend la révision persistée. Le repli versionné Mocha reste valide
sans fichiers générés.
## Contraste et limites
La barre QuickShell passe de `235/255` en normal à `1,0` en Soleil ; les popups
restent opaques (`1,0`) dans les deux profils. Les rôles `border`,
`strongBorder`, `outline`, `emphasisBackground`, `separator`,
`buttonBackground`, `buttonHover`, `secondaryForeground`, `inputBorder`
et `shadow` dérivent de la palette
Catppuccin et du contraste effectif. L'accent Lavender et `onAccent` suivent
le moteur 17B. Les ratios WCAG des paires principales sont :
| Flavor Soleil | texte/panel | secondaire/panel | texte/popup | onAccent/accent | texte/input |
| --- | ---: | ---: | ---: | ---: | ---: |
| Latte | 7,06 | 7,06 | 7,06 | 6,60 | 5,17 |
| Frappé | 8,06 | 8,06 | 8,06 | 11,47 | 6,19 |
| Macchiato | 9,92 | 9,92 | 9,92 | 11,65 | 7,55 |
| Mocha | 11,34 | 11,34 | 11,34 | 11,74 | 8,69 |
La paire sélectionnée reprend `onAccent/accent`. Les bordures et séparateurs
sont décoratifs ; le seuil de texte AA de 4,5:1 ne s'y applique pas. Les
icônes colorées des applications dans le tray ne sont pas recolorées.
La lisibilité réelle en plein soleil exige une validation sur l'écran physique.