source: Klonkt/src/assets/js/ward-theme.js@ 3866994

Last change on this file since 3866994 was 5b6f93b, checked in by Robin <roboburr@…>, 3 months ago

Ward-PWA: licht thema en kaarten zonder tussenruimtes

Twee wensen van Robin (12-8).

LICHT, NIET DONKER. De basis is omgedraaid: lichte achtergrond, donkere
tekst, witte kaarten. De themakleur kleurt nog steeds het accent, maar
de achtergrondtint mengt nu naar WIT in plaats van naar zwart, zodat de
gekozen kleur een vleugje geeft zonder de leesbaarheid te kosten. Alle
losse donkere kleuren (inputvelden, secundaire knoppen, de glasplaat van
het gesprek) zijn meegegaan.

KAARTEN ZONDER TUSSENRUIMTES, zoals de Shaer-apps. Was een grid met
gaten; nu CSS multi-column masonry: de kaarten raken elkaar, gepakt in
kolommen die naar breedte meer worden (net als het staggered grid van de
app). Een dunne lijn onder elke kaart en tussen de kolommen houdt ze
leesbaar zonder ruimte ertussen.

Changed files:
src/assets/css/ward.css

  • :root naar een licht palet; alle donkere resten omgezet
  • .cards als column-masonry, gap 0, hairlines

src/assets/js/ward-theme.js

  • achtergrondtint mengt naar wit ipv zwart

remarks: 906 tests groen. Kleur en dichtheid zijn oogdingen; even kijken
op dev of het licht genoeg oogt en de kolommen goed pakken.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

  • Property mode set to 100644
File size: 2.3 KB
RevLine 
[39dab6b]1/**
2 * De themakleur (SkyPalette): één gekozen kleur die de hele ward kleurt.
3 *
4 * De acht presets en de luminantie-regel komen LETTERLIJK uit Shaer (iOS is de
5 * bron): dezelfde kleuren, en dezelfde beslissing welke tekst erop leesbaar is
6 * (donker op licht, wit op de rest). Een handgehouden lijstje zou uit de pas
7 * gaan lopen; luminantie beslist.
8 *
9 * Opgeslagen in localStorage, per apparaat, net als in de app.
10 */
11'use strict';
12
13export const PRESETS = [
14 0x5A32E6, // paars, de vertrouwde
15 0x1E6AE1, // oceaan
16 0x0E9B8A, // zeegroen
17 0x2E7D32, // bos
18 0xF59E0B, // zon
19 0xFF6B4A, // koraal
20 0xE255A1, // roze
21 0x1F2937, // nacht
22];
23const FALLBACK = 0x5A32E6;
24const KEY = 'ward.skyColor';
25
26const hex = (rgb) => '#' + rgb.toString(16).padStart(6, '0');
27
28/** Wit of donker, wat leesbaar is op deze kleur. Zelfde som als in de app. */
29export function onSky(rgb) {
30 const r = ((rgb >> 16) & 0xff) / 255;
31 const g = ((rgb >> 8) & 0xff) / 255;
32 const b = (rgb & 0xff) / 255;
33 const lum = 0.2126 * r + 0.7152 * g + 0.0722 * b;
34 return lum > 0.5 ? '#1f2430' : '#ffffff';
35}
36
37/** De opgeslagen kleur, of de vertrouwde paarse als er nog niets gekozen is. */
38export function loadColor() {
39 const v = parseInt(localStorage.getItem(KEY) || '', 10);
40 return Number.isFinite(v) && v >= 0 && v <= 0xffffff ? v : FALLBACK;
41}
42
43/**
44 * De kleur toepassen: het accent dat de knoppen, de bubbels en de (+) dragen,
[5b6f93b]45 * plus een zachte tint over de LICHTE achtergrond zodat de hele hemel de
[39dab6b]46 * gekozen kleur ademt. De tekst-op-accent volgt de luminantie.
47 */
48export function applyColor(rgb) {
49 const root = document.documentElement.style;
50 root.setProperty('--accent', hex(rgb));
51 root.setProperty('--on-accent', onSky(rgb));
[5b6f93b]52 // De achtergrond is LICHT (Robins wens 12-8) maar krijgt een vleugje van de
53 // kleur: een verticale gradient van een lichte tint naar bijna wit. De kleur
54 // wordt sterk richting wit gemengd, zodat de tekst leesbaar blijft.
[39dab6b]55 const r = (rgb >> 16) & 0xff, g = (rgb >> 8) & 0xff, b = rgb & 0xff;
[5b6f93b]56 const tint = (f) => `rgb(${Math.round(r * f + 255 * (1 - f))},${Math.round(g * f + 255 * (1 - f))},${Math.round(b * f + 255 * (1 - f))})`;
57 root.setProperty('--bg-top', tint(0.10));
58 root.setProperty('--bg-bottom', tint(0.03));
[39dab6b]59}
60
61export function saveColor(rgb) {
62 localStorage.setItem(KEY, String(rgb));
63 applyColor(rgb);
64}
Note: See TracBrowser for help on using the repository browser.