@klodd/ds 3.15.0 → 3.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SKILL.md CHANGED
@@ -111,12 +111,30 @@ En källa, alla projekt ser samma skill automatiskt. Ändringar i
111
111
  `~/dev/klodd-ds/SKILL.md`, `POLICY.md` eller `references/` syns
112
112
  omedelbart i nästa CC-session - ingen synk-fas behövs.
113
113
 
114
- ## Kvalitetsstatus (2026-05-12, post-BEM-migration + 10/10-lyft)
115
-
116
- Designsystemet bedöms 10/10 efter 2026-05-12-konsolideringen.
117
- Före: 5/10 (BEM-disciplin enbart via mänsklig review, app-domain-
118
- inkonsekvens, dead code). Lyftet skedde i 11 sprintar över 6 commits-
119
- sekvenser (BEM-1 till BEM-6 + Sprint 10-1 till 10-4 + 10-6 doc).
114
+ ## Kvalitetsstatus (2026-05-12, post-BEM + visual coherence)
115
+
116
+ Designsystemet bedöms 10/10 efter 2026-05-12-konsolideringen på TVÅ axlar:
117
+
118
+ **Mekanisk konsekvens (Sprint 10-1 till 10-6)**: BEM-syntax,
119
+ stylelint-CI, ADR 0011 + 0012, Tier D-katalog. Future-CC kan inte
120
+ introducera BEM-syntax-brott utan CI-error.
121
+
122
+ **Visuell koherens (Visual Sprint 1-4, 2026-05-12 kväll)**: efter
123
+ Calle's observation om "element ej alignade, märklig ljus skugga,
124
+ olika storlekar nära varandra". 17 vyer auditerade, 5 kritiska brott
125
+ identifierade, DESIGN-LANGUAGE.md skriven (12 sektioner) + ADR 0013
126
+ locked. Konkreta migrationer: 16 paket-komponenter BR-konsoliderade
127
+ (11→5 värden), 5 Jubb-templates migrerade till page-header-pattern,
128
+ shadow på dark-mode-overlays eliminerad, hero-alignment fixad.
129
+
130
+ Före (visual): 7/10. Tre olika BR-värden för card-element, oklch-ljus-
131
+ shadow på 4 vyer, 4px alignment-drift på hero, blandning hero vs
132
+ page-header mellan apparna.
133
+
134
+ Efter (visual): 9-10/10. 5 BR-värden globalt, inga shadows på dark-
135
+ mode-overlays, alignment fixad, kanonisk pattern-distinktion (hero
136
+ för metric, page-header för utility-pages). Resterande gap är manuell
137
+ disciplin tills custom stylelint-plugin för design-rules byggs.
120
138
 
121
139
  ### Aktiva enforcement-mekanismer
122
140
 
@@ -186,17 +186,18 @@
186
186
  /* ================================================================
187
187
  ==== MONTH-PILL
188
188
  Navigations-pill med manadsbyte (anvands i topbar pa Ekonom).
189
+ Hojd 36px = matchar .avatar default i topbar for visuell harmoni.
189
190
  ================================================================ */
190
191
  .month-pill {
191
192
  display: inline-flex;
192
193
  align-items: center;
193
- gap: var(--space-6);
194
- height: 28px;
195
- padding: 0 var(--space-12);
194
+ gap: var(--space-4);
195
+ height: 36px;
196
+ padding: 0 var(--space-6);
196
197
  background: var(--surface-default);
197
198
  border: 1px solid var(--border-subtle);
198
199
  border-radius: var(--radius-full);
199
- font-size: var(--fs-12);
200
+ font-size: var(--fs-13);
200
201
  font-weight: var(--fw-medium);
201
202
  color: var(--text-default);
202
203
  cursor: pointer;
@@ -204,6 +205,36 @@
204
205
  white-space: nowrap;
205
206
  }
206
207
 
208
+ /* Prev/next-knappar inom month-pill: cirkulara tap-targets som passar
209
+ in i 36px-pillen. Inte WCAG-44x44 eftersom hela pillen ar liten
210
+ topbar-navigation (manadsbyte) - tap-target ar pill-segment. */
211
+ .month-pill a,
212
+ .month-pill button {
213
+ display: inline-flex;
214
+ align-items: center;
215
+ justify-content: center;
216
+ width: 28px;
217
+ height: 28px;
218
+ border-radius: var(--radius-full);
219
+ color: var(--text-subtle);
220
+ background: transparent;
221
+ border: 0;
222
+ cursor: pointer;
223
+ padding: 0;
224
+ }
225
+
226
+ @media (hover: hover) and (pointer: fine) {
227
+ .month-pill a:hover,
228
+ .month-pill button:hover {
229
+ background: var(--surface-hover);
230
+ color: var(--text-default);
231
+ }
232
+ }
233
+
234
+ .month-pill__label {
235
+ padding: 0 var(--space-4);
236
+ }
237
+
207
238
 
208
239
  @media (prefers-reduced-motion: reduce) {
209
240
  .chip-list__delete:active,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klodd/ds",
3
- "version": "3.15.0",
3
+ "version": "3.15.1",
4
4
  "description": "Klodd shared design system - tokens, components, JS",
5
5
  "main": "css/index.css",
6
6
  "bin": {
@@ -0,0 +1,128 @@
1
+ # 0013 - Visual Coherence Doctrine
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+
8
+ Designsystemet hade efter Sprint 10 (BEM-mekanisk-konsekvens) en hög
9
+ nivå av token-disciplin och BEM-syntax-disciplin, men brist på
10
+ **komposition-disciplin**. Calle's observation 2026-05-12: "element
11
+ inte synkade i former och storlek, märklig ljus skugga på mörk
12
+ bakgrund, olika storlekar nära varandra som borde harmonisera."
13
+
14
+ Det var inte BEM-syntax-brott. Det var visuell koherens-brist.
15
+ Designsystem ger tokens + komponenter + regler, men hur komponenter
16
+ används TILLSAMMANS i layouter var inte kodifierat.
17
+
18
+ Full audit (Chrome MCP javascript_tool layout-extraction över 17
19
+ vyer i båda apparna) identifierade 5 kritiska brott:
20
+
21
+ 1. **Border-radius-kaos**: 11+ distinkta BR-värden över systemet
22
+ 2. **Shadow-användning bryter regel 10**: oklch-ljus-shadow på 4 vyer
23
+ 3. **4px alignment-drift**: hero-content sittande på x=18, övriga på
24
+ x=14 (hero.css padding 20/4/24)
25
+ 4. **Font-size-spread varierade dramatiskt**: 3-9 distinkta fs per vy
26
+ 5. **Hero-pattern inkonsekvent mellan apparna**: Jubb siffer-hero,
27
+ Ekonom label-meta-hero, blandning page-header vs hero
28
+
29
+ Audit-rapport: `references/AUDIT-VISUAL-COHERENCE-2026-05-12.md`.
30
+
31
+ ## Decision
32
+
33
+ `references/DESIGN-LANGUAGE.md` är **LOCKED** som visual coherence-
34
+ doktrin. 12 sektioner specificerar konkreta regler:
35
+
36
+ 1. **Border-radius-skala**: 5 värden (4/10/14/50%/9999) - eliminerat
37
+ 2/6/8/12/16/18/20/22/24 från komponent-CSS
38
+ 2. **Shadow-policy**: restriktiv. Dialog/sheet/dropdown/bottom-nav/toast
39
+ har `box-shadow: none`. Bara iOS-style toggle-thumb och active-pill
40
+ får `--shadow-card`.
41
+ 3. **Page-toppar**: TVÅ separata patterns (.hero med __amount för
42
+ metric-display, .page-header för titel+subtitle utility-pages)
43
+ 4. **Padding-rytm**: 6 värden (4/8/12/16/20/24)
44
+ 5. **Font-size-skala**: 8 token-bundna värden
45
+ 6. **Container-klassifikation**: matrix för card/panel/hub-card/etc
46
+ 7. **Spacing-rytm mellan block**: konsekvent margin-conventions
47
+ 8. **Alignment-regler**: alla container-element på x=14
48
+ 9. **PWA-konventioner**: 44x44 tap-targets, mobile-first, safe-areas
49
+ 10. **Färg-konvention**: semantic-surface-tokens enbart
50
+ 11. **Enforcement-status**: stylelint för BEM, mänsklig disciplin
51
+ för visual coherence (custom plugin candidate)
52
+ 12. **När ändra regler**: ADR-process, inga ad-hoc-ändringar
53
+
54
+ ## Migration genomförd 2026-05-12
55
+
56
+ ### Sprint 3a: Quick-wins (klodd-ds 3.15.0)
57
+ - overlay.css: dialog + sheet shadow→none, bg surface-overlay
58
+ - dropdown.css: shadow→none
59
+ - hero.css: padding 20/4/24→20/0/24 (alignment-drift fixad)
60
+ - nav.css: bottom-nav shadow→none
61
+ - feedback.css: toast shadow→none
62
+ - typography.css: muted-footer-text margin-top: var(--space-16)
63
+
64
+ Commit: klodd-ds a3beab4
65
+
66
+ ### Sprint 3b: BR-konsolidering (klodd-ds 3.15.0)
67
+ - 16 paket-komponenter migrerade till 5-värdes-BR-skala
68
+ - 6 → 10, 8 → 10, 12 → 14, 16 → 14, 20 → 14, 24 → 14
69
+ - App-domain BR-konsolidering: Ekonom ekonom.css, Jubb jubb.css +
70
+ pages/design.css + pages/triage.css
71
+
72
+ Commit: klodd-ds 96d1bf6 + Ekonom 955919a + Jubb f69bd14
73
+
74
+ ### Sprint 3c: Template-migration
75
+ - Jubb: 24 .hero-label → .hero__label byten över 5 templates
76
+ - Jubb-template-migration: topbar__title → topbar+page-header-pattern
77
+ (jobs_list, insights, runs, install, job_detail)
78
+ - Konsekvens med Ekonom (som redan använder topbar+page-header)
79
+
80
+ Commit: Jubb dffb7eb
81
+
82
+ ## Consequences
83
+
84
+ **Bra:**
85
+ - Cross-app visuell homogenitet (Jubb och Ekonom följer samma
86
+ patterns)
87
+ - 5 BR-värden istället för 11+ (eliminerar "olika former"-känsla)
88
+ - Inga shadow-anomalier på dark-mode (per regel 10-doktrin)
89
+ - Hero alignment fixad (4px-drift eliminerad)
90
+ - Klar pattern-distinktion (hero för metric, page-header för titel)
91
+
92
+ **Trade-offs:**
93
+ - Visuella ändringar på 17+ vyer kräver visuell verifiering per vy
94
+ (re-audit Sprint 4b)
95
+ - BR-konsolidering är breaking visual change (panel 20→14 är
96
+ tightare/mer angular)
97
+ - DESIGN-LANGUAGE.md är ytterligare doc att underhålla för
98
+ CC-sessioner
99
+ - Custom stylelint-plugin för design-rule-enforcement saknas (mänsklig
100
+ disciplin tills implementerad)
101
+
102
+ ## Future work
103
+
104
+ 1. **Custom stylelint-plugin** som validerar:
105
+ - border-radius är en av {4, 10, 14, 50%, 9999}
106
+ - font-size är token-bundet (--fs-N)
107
+ - padding-värden begränsade till de 6 listade
108
+ - box-shadow förbjudet utöver --shadow-card
109
+
110
+ 2. **Visual regression testing** via Playwright (Sprint 10-5 deferred):
111
+ - snapshots av kärnvyer per viewport
112
+ - PR-comment med diff-images
113
+ - Baseline-update via `--update-snapshots`
114
+
115
+ 3. **Component combination-katalog**: utvidga 02-components.md med
116
+ "när-använda-vilken-kombination"-tabeller (t.ex. card vs panel
117
+ för list-items, hub-card vs setting-row för settings).
118
+
119
+ ## References
120
+
121
+ - `references/DESIGN-LANGUAGE.md` (locked doktrin)
122
+ - `references/AUDIT-VISUAL-COHERENCE-2026-05-12.md` (audit-rapport)
123
+ - `references/03-quality-bar.md` regel 10 (shadow), regel 11 (BEM)
124
+ - ADR `0011-strikt-bem-elementsyntax.md` (besläktad)
125
+ - ADR `0012-stylelint-bem-enforcement.md` (besläktad)
126
+ - Klodd-ds commits: a3beab4 + 96d1bf6 + 3.15.0-bump
127
+ - Jubb commits: f69bd14 + dffb7eb
128
+ - Ekonom commit: 955919a