@klodd/ds 5.4.2 → 5.5.0

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.
Files changed (44) hide show
  1. package/README.md +4 -3
  2. package/SKILL.md +19 -7
  3. package/css/00-primitives.css +1 -22
  4. package/css/10-semantic.css +22 -100
  5. package/css/components/avatar.css +6 -6
  6. package/css/components/badge.css +2 -2
  7. package/css/components/button.css +1 -2
  8. package/css/components/chip.css +2 -2
  9. package/css/components/feedback.css +4 -4
  10. package/css/components/hero.css +1 -1
  11. package/css/components/hub-card.css +2 -2
  12. package/css/components/inline-edit.css +2 -2
  13. package/css/components/list-row.css +2 -2
  14. package/css/components/nav.css +12 -4
  15. package/css/components/pwa-avatar.css +4 -4
  16. package/css/components/swipe-stack.css +2 -2
  17. package/css/components/upload-spinner.css +2 -2
  18. package/css/index.css +0 -9
  19. package/package.json +1 -1
  20. package/references/02-components.md +1 -1
  21. package/references/04-locked-decisions/0003-radix-colors-oklch.md +1 -1
  22. package/references/04-locked-decisions/0006-mauve-neutral.md +0 -4
  23. package/references/04-locked-decisions/0015-panel-title-tag-doctrine.md +2 -2
  24. package/references/04-locked-decisions/0016-mina-sidor-doctrine.md +0 -2
  25. package/references/04-locked-decisions/0020-domain-to-package-lift.md +2 -2
  26. package/references/04-locked-decisions/0023-progress-list-utility.md +1 -1
  27. package/references/04-locked-decisions/0024-tightened-component-lift-doctrine.md +135 -0
  28. package/references/04-locked-decisions/{0015-turbo-nav-script-init.md → 0025-turbo-nav-script-init.md} +3 -1
  29. package/references/04-locked-decisions/{0016-async-progress-fetch-fn.md → 0026-async-progress-fetch-fn.md} +3 -1
  30. package/references/05-open-decisions/0001-tx-row-to-list-row-migration-CLOSED.md +1 -1
  31. package/references/05-open-decisions/0008-legacy-token-migration-CLOSED.md +6 -6
  32. package/references/05-open-decisions/0014-ekonom-colored-row-migration-CLOSED.md +1 -2
  33. package/references/05-open-decisions/0017-async-progress-pipeline-gaps.md +1 -1
  34. package/references/05-open-decisions/0018-build-ds-prune.md +35 -0
  35. package/references/DESIGN-LANGUAGE.md +1 -1
  36. package/css/components/expandable-row.css +0 -176
  37. package/css/components/icon-circle.css +0 -46
  38. package/css/components/item-stack.css +0 -43
  39. package/css/components/kvp-arrow.css +0 -22
  40. package/css/components/matched-row.css +0 -51
  41. package/css/components/review-banner.css +0 -70
  42. package/css/components/status-icon.css +0 -32
  43. package/css/components/tag-inline.css +0 -21
  44. package/js/index.js +0 -95
package/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # @klodd/ds
2
2
 
3
+ Senast audit: 2026-05-20. Aktiv åtgärdslista: `audits/00-summary.md`.
4
+
3
5
  Klodd Design System - delade tokens, typografi och komponenter for
4
- Klodds appar (Jubb, Ekonom och framtida).
6
+ Klodds appar (Jubb och Ekonom).
5
7
 
6
8
  Dark-mode-first PWA-designsystem byggt pa Radix Colors. OKLCH-baserade
7
9
  fargramper, pixel-numerisk spacing-konvention och tre-lagers token-
@@ -47,7 +49,7 @@ Tre lager med strikt inkapsling. Komponenter laser ALDRIG primitives
47
49
  direkt - bara semantic-lagret eller app-tokens.
48
50
 
49
51
  ```
50
- 00-primitives.css raa varden (gray/blue/plum/violet OKLCH ramps,
52
+ 00-primitives.css raa varden (gray/blue/plum OKLCH ramps,
51
53
  pixel-numerisk space/fs/radius, motion, layout)
52
54
  10-semantic.css komponenter laser hardefran (surface/text/border/
53
55
  accent + status + effects + transitions)
@@ -62,7 +64,6 @@ Officiella **Radix Colors** dark-skalor:
62
64
  - **Mauve Dark** (neutral) - lila-tonad gra som kompletterar Blue och Plum
63
65
  - **Blue Dark** (Jubb accent) - sky-blue (#0090ff)
64
66
  - **Plum Dark** (Ekonom accent) - varm magenta-lila (#ab4aba)
65
- - **Violet Dark** - bevarad for framtida appar
66
67
  - **Green/Amber/Red Dark** - status (success/warning/danger)
67
68
 
68
69
  Status-tokens har bade solid-bakgrund (`--bg-success/warning/danger`)
package/SKILL.md CHANGED
@@ -1,14 +1,21 @@
1
1
  ---
2
2
  name: klodd-ds
3
- description: Design memory for the @klodd/ds shared design system across all Klodd apps (Jubb, Ekonom, future apps). Use this skill whenever working on UI components, design tokens, theming, CSS class names, spacing, color, typography, accessibility, or any visual or interaction decision in an app that imports @klodd/ds. Also use when questions arise about component APIs, token architecture, BEM naming, whether to add new tokens vs reuse existing, or how to theme a new app. Contains locked architectural decisions (do not re-litigate without explicit instruction) and open migration items (still under discussion).
3
+ description: Design memory for the @klodd/ds shared design system used by the two apps that consume it (Jubb, Ekonom). Use this skill whenever working on UI components, design tokens, theming, CSS class names, spacing, color, typography, accessibility, or any visual or interaction decision in an app that imports @klodd/ds. Also use when questions arise about component APIs, token architecture, BEM naming, or whether to add new tokens vs reuse existing. Contains locked architectural decisions (do not re-litigate without explicit instruction) and open migration items (still under discussion).
4
4
  ---
5
5
 
6
6
  # @klodd/ds — Design Memory
7
7
 
8
+ ## Status
9
+ Senast audit: 2026-05-20. Pågående arbete enligt `audits/00-summary.md`:
10
+ - Sprint 1: dead-code-städning + topbar-bump (~435 rader)
11
+ - Sprint 2: component-token-konsolidering, ADR 0024-backfill, light-theme-removal
12
+ - Sprint 3: base.css-extraktion till paketets base-lager
13
+
8
14
  ## Vad detta är
9
15
  Gemensamt designsystem på npm (`@klodd/ds@5.x`). Tre-lagers tokens,
10
16
  38+ komponenter (progress-bar tillagd v5.2.1, 2026-05-18), konsumeras
11
- av Jubb och Ekonom. Fler appar planerade.
17
+ av Jubb och Ekonom - det är paketets hela scope, inte ett paraply för
18
+ fler appar.
12
19
  Denna Skill fångar både reglerna ("vad") och resonemanget ("varför").
13
20
 
14
21
  ## Läs i denna ordning
@@ -28,15 +35,15 @@ Denna Skill fångar både reglerna ("vad") och resonemanget ("varför").
28
35
  </locked_rules>
29
36
 
30
37
  ## Apps och theming
38
+ @klodd/ds har exakt två konsumenter - Jubb och Ekonom. Det finns inget
39
+ mönster för att introducera fler appar; theming-modellen är byggd för
40
+ dessa två.
31
41
  - `data-app="jubb"` → Blue accent (Radix Blue Dark), Blue-tonad bakgrund
32
42
  - `data-app="ekonom"` → Plum accent (Radix Plum Dark), Plum-tonad bakgrund
33
- - Ny app: lägg till ramp i 00-primitives.css + apps/foo.css med accent-
34
- overrides (obligatoriskt, 5 rader) + valfria surface/text-overrides
35
- (15-40 rader totalt om appen ska ha distinkt bakgrundston)
36
- - **Surface-raised-konvention**: alla Klodd-appar sätter
43
+ - **Surface-raised-konvention**: bägge apparna sätter
37
44
  `--surface-raised: var(--<color>-2)` - kort och paneler ligger på
38
45
  samma yta som default-sektioner men distinkt mot page-bakgrunden
39
- (color-1). Gäller alla nuvarande och framtida appar.
46
+ (color-1).
40
47
 
41
48
  ## Besluts-records
42
49
  - `references/04-locked-decisions/` — låsta beslut. Förklara, ändra inte.
@@ -115,6 +122,11 @@ cd ~/dev/Jubb && npm install @klodd/ds@latest && npm run build:ds
115
122
  cd ~/dev/Ekonom && npm install @klodd/ds@latest && npm run build:ds
116
123
  ```
117
124
 
125
+ **OBS:** build:ds rensar inte borttagna filer. Efter en
126
+ komponent-radering: verifiera manuellt att
127
+ `app/static/css/ds/components/<borttagen>.css` inte finns kvar i
128
+ apparna.
129
+
118
130
  ## Sprint-avslut: alla sprintar kräver detta
119
131
  En sprint — oavsett om den innehåller CSS, JS eller bara dokumentation —
120
132
  är inte klar förrän:
@@ -5,7 +5,7 @@
5
5
  (apps/<app>.css). Detta lager byts bara nar appens fundamentala
6
6
  palett, spacing eller typografi-skala andras pa systemniva.
7
7
 
8
- Radix 12-stegs rollkarta (anvands av --gray, --blue, --purple):
8
+ Radix 12-stegs rollkarta (anvands av --gray, --blue):
9
9
  1-2 App-bakgrunder
10
10
  3 Komponentbakgrund (vila)
11
11
  4 Komponentbakgrund (hover)
@@ -110,27 +110,6 @@
110
110
  }
111
111
 
112
112
 
113
- /* ================================================================
114
- ==== COLORS - PURPLE (Radix Violet Dark)
115
- Officiella Radix-varden. Behalls i shared-system for framtida
116
- anvandning - inte aktivt for nagon app just nu.
117
- ================================================================ */
118
- :root {
119
- --purple-1: #14121f;
120
- --purple-2: #1b1525;
121
- --purple-3: #291f43;
122
- --purple-4: #33255b;
123
- --purple-5: #3c2e69;
124
- --purple-6: #473876;
125
- --purple-7: #56468b;
126
- --purple-8: #6958ad;
127
- --purple-9: #6e56cf;
128
- --purple-10: #7d66d9;
129
- --purple-11: #baa7ff;
130
- --purple-12: #e2ddfe;
131
- }
132
-
133
-
134
113
  /* ================================================================
135
114
  ==== COLORS - PLUM (Radix Plum Dark - Ekonom accent)
136
115
  Varm magenta-lila. Tydligt annorlunda fran Blue (Jubb) utan att
@@ -1,13 +1,10 @@
1
1
  /* ================================================================
2
2
  10-SEMANTIC
3
- Det enda lagret komponenter far referera. Aldrig --gray-N, --blue-N,
4
- --purple-N eller andra primitives direkt i komponentfiler.
3
+ Det enda lagret komponenter far referera. Aldrig --gray-N, --blue-N
4
+ eller andra primitives direkt i komponentfiler.
5
5
 
6
- Dark-first. Default-blocket galler om data-theme saknas eller ar
7
- "dark". [data-theme="light"] overrider ytor + text + borders.
8
6
  App-byte sker via [data-app="X"] som overrider --accent-* (se
9
- apps/<app>.css). Komponenter las bara --accent-*, aldrig --blue-*
10
- eller --purple-*.
7
+ apps/<app>.css). Komponenter las bara --accent-*, aldrig --blue-*.
11
8
 
12
9
  Konvention pa kommentarer: varje token har "Anvand for: ..." och
13
10
  "INTE for: ...". Det ar LLM-instruktionen inbyggd i systemet.
@@ -18,12 +15,6 @@
18
15
  ==== SURFACES (NAV Aksel lagermodell)
19
16
  Ljusare = hogre i z-stacken. Inga skuggor i dark mode - bara
20
17
  luminanshierarki (iOS/Linear-modell, ej tonal Material Design).
21
-
22
- light-dark() (Equinor EDS-konventionen, sprint 2026-05-07):
23
- light-dark(<light-value>, <dark-value>)
24
- browsern valjer baserat pa color-scheme. Standard ar `dark` for
25
- alla Klodd-appar - light-mode aktiveras via [data-theme="light"]-
26
- override som satter color-scheme: light.
27
18
  ================================================================ */
28
19
  :root {
29
20
  color-scheme: dark; /* default dark for alla Klodd-appar */
@@ -31,44 +22,44 @@
31
22
  /* Sidans yttersta bakgrund. Morkast av alla ytor.
32
23
  Anvand for: <html>, <body>, page-background.
33
24
  INTE for: kort, paneler, modaler. */
34
- --surface-page: light-dark(oklch(0.99 0.002 250), var(--gray-1));
25
+ --surface-page: var(--gray-1);
35
26
 
36
27
  /* Standard innehallsyta. Sektioner, list-rows.
37
28
  Anvand for: sektionsbakgrunder, tab-innehall, formulargrupper.
38
29
  INTE for: sidans yttersta bakgrund eller upphojda kort. */
39
- --surface-default: light-dark(oklch(0.96 0.003 250), var(--gray-2));
30
+ --surface-default: var(--gray-2);
40
31
 
41
32
  /* Upphojd yta - ett steg framfor default.
42
33
  Anvand for: kort, paneler, sidopaneler, jobbkort.
43
34
  INTE for: modaler och popovers (anvand --surface-overlay). */
44
- --surface-raised: light-dark(oklch(0.99 0.002 250), var(--gray-3));
35
+ --surface-raised: var(--gray-3);
45
36
 
46
37
  /* Forhoejt kort - mellansteg mellan raised och overlay. Anvands for
47
38
  kort som behover mer visuell prominens an --surface-raised men
48
39
  inte ar overlays/modaler. Mappas till color-3 i app-overrides
49
40
  (vs raised color-2). v3.21.3 - infort efter audit av Jubb's
50
41
  job-card som behovde mer kontrast mot main-bakgrunden. */
51
- --surface-elevated: light-dark(oklch(0.97 0.003 250), var(--gray-3));
42
+ --surface-elevated: var(--gray-3);
52
43
 
53
44
  /* Svavande yta - modaler, popovers, dropdowns.
54
45
  Anvand for: dialog-bakgrund, tooltip, context-menu, sheets.
55
46
  INTE for: inbaddade kort (anvand --surface-raised). */
56
- --surface-overlay: light-dark(oklch(0.93 0.004 250), var(--gray-4));
47
+ --surface-overlay: var(--gray-4);
57
48
 
58
49
  /* Hover-state pa interaktiva ytor.
59
50
  Anvand for: :hover-bakgrund pa knappar, rader, kort.
60
51
  INTE for: statiska ytor eller fokus-states. */
61
- --surface-hover: light-dark(oklch(0.93 0.004 250), var(--gray-4));
52
+ --surface-hover: var(--gray-4);
62
53
 
63
54
  /* Active/pressed-state.
64
55
  Anvand for: :active-bakgrund, .bottom-nav__item--active.
65
56
  INTE for: hover (anvand --surface-hover). */
66
- --surface-active: light-dark(oklch(0.88 0.005 250), var(--gray-5));
57
+ --surface-active: var(--gray-5);
67
58
 
68
59
  /* Nedsankt yta - inputs, textarea, kod-block.
69
60
  Anvand for: input-bakgrund, code-block, hbar-track.
70
61
  INTE for: interaktiva ytor som hover/active. */
71
- --surface-sunken: light-dark(oklch(0.94 0.003 250), var(--gray-2));
62
+ --surface-sunken: var(--gray-2);
72
63
 
73
64
 
74
65
  /* ================================================================
@@ -78,22 +69,22 @@
78
69
  /* Primar text. Rubriker, etiketter, viktig information.
79
70
  Anvand for: alla rubriker, knapptext, viktig metadata.
80
71
  INTE for: hjalptext, datum, placeholder. */
81
- --text-default: light-dark(var(--gray-12), var(--gray-12));
72
+ --text-default: var(--gray-12);
82
73
 
83
74
  /* Sekundar text. Datum, meta-info, subtexter.
84
75
  Anvand for: metadata, datum, kompletterande information.
85
76
  INTE for: rubriker eller primar information. */
86
- --text-subtle: light-dark(var(--gray-10), var(--gray-11));
77
+ --text-subtle: var(--gray-11);
87
78
 
88
79
  /* Muted text. Platshallare, hint-text, ts-stamps.
89
80
  Anvand for: placeholder, hint, micro-labels.
90
81
  INTE for: lasbar information med hog prioritet. */
91
- --text-muted: light-dark(var(--gray-8), var(--gray-9));
82
+ --text-muted: var(--gray-9);
92
83
 
93
84
  /* Disabled text. Inaktiva element, fade-out.
94
85
  Anvand for: disabled-state pa knappar/inputs, tx-meta-faint.
95
86
  INTE for: aktiva element. */
96
- --text-disabled: light-dark(var(--gray-6), var(--gray-7));
87
+ --text-disabled: var(--gray-7);
97
88
 
98
89
  /* Text pa solid accent-bakgrund (knapp, badge, score-pill).
99
90
  Anvand for: text inuti --accent-9-bakgrunder.
@@ -113,17 +104,17 @@
113
104
  /* Subtil border. Separatorer, dividers, list-row-borders.
114
105
  Anvand for: tunna dividers mellan sektioner, table-row-borders.
115
106
  INTE for: interaktiva element eller fokus. */
116
- --border-subtle: light-dark(var(--gray-9), var(--gray-5));
107
+ --border-subtle: var(--gray-5);
117
108
 
118
109
  /* Standard border. Kort, inputs i vila.
119
110
  Anvand for: kortkanter, input-borders, btn-borders.
120
111
  INTE for: fokus-states (anvand --border-focus). */
121
- --border-default: light-dark(var(--gray-8), var(--gray-6));
112
+ --border-default: var(--gray-6);
122
113
 
123
114
  /* Stark border. Emphasis, hover pa border.
124
115
  Anvand for: hover-state pa inputs, emphasis-borders.
125
116
  INTE for: vila-state (anvand --border-default). */
126
- --border-strong: light-dark(var(--gray-7), var(--gray-7));
117
+ --border-strong: var(--gray-7);
127
118
 
128
119
  /* Fokusring. Alltid synlig vid keyboard-navigation.
129
120
  Anvand for: :focus-visible outline.
@@ -136,7 +127,7 @@
136
127
  DEN ENDA TOKEN-GRUPPEN SOM BYTS PER APP.
137
128
  [data-app="jubb"] -> bla
138
129
  [data-app="ekonom"] -> lila
139
- Komponenter refererar bara --accent-*, aldrig --blue-* eller --purple-*.
130
+ Komponenter refererar bara --accent-*, aldrig --blue-*.
140
131
  ================================================================ */
141
132
 
142
133
  /* Subtil accent-bakgrund. Markta rader, valda items.
@@ -330,47 +321,9 @@
330
321
  far referera dessa eftersom de ar avledda fran semantic.
331
322
  ================================================================ */
332
323
  :root {
333
- /* Card / panel */
334
- --card-bg: var(--surface-default);
335
- --card-bg-elevated: var(--surface-raised);
336
- --card-border-color: var(--border-subtle);
337
- /* 2026-05-13: --card-radius borttaget. Var --radius-20 (legacy) men
338
- ingen komponent konsumerade tokenet. Kort-komponenter anvander
339
- var(--radius-14) direkt enligt BR-skalan. */
340
- --card-padding-x: var(--space-18);
341
- --card-padding-y: var(--space-16);
342
- --card-margin-bottom: var(--space-14);
343
-
344
- /* Buttons */
345
- --btn-radius: var(--radius-full);
346
- --btn-padding-x: var(--space-20);
347
- --btn-padding-y: 13px; /* exakt 13px ger 44px min-height */
348
- --btn-min-height: var(--touch-min);
349
- --btn-padding-x-sm: var(--space-14);
350
- --btn-padding-y-sm: var(--space-8);
351
- --btn-min-height-sm: 36px;
352
- --btn-icon-size: var(--touch-min);
353
- --btn-icon-size-sm: 36px;
354
-
355
- /* Input */
356
- --input-radius: var(--radius-14);
357
- --input-padding-x: var(--space-16);
358
- --input-padding-y: var(--space-14);
359
-
360
- /* Avatar */
361
- --avatar-size: 36px;
362
- --avatar-size-sm: 28px;
363
- --avatar-size-lg: 56px;
364
-
365
- /* Tx-row */
366
- --tx-icon-size: 36px;
367
-
368
- /* Hero amount sizes (kontextuellt overriden i media queries).
369
- 2026-05-13: --hero-amount-fz: fs-80 → fs-100 (25% storre).
370
- --hero-amount-fluid: clamp ovre tak 80 → 100 for matchning. */
371
- --hero-amount-fz: var(--fs-100);
372
- --hero-amount-card-fz: var(--fs-40);
373
- --hero-amount-fluid: clamp(40px, 14vw, 100px);
324
+ --circle-size: 36px; /* default -- kvadratiska/cirkulära 36px-element */
325
+ --circle-size-sm: 28px; /* compact -- 28px-element */
326
+ --circle-size-lg: 56px; /* display -- 56px-element */
374
327
  }
375
328
 
376
329
 
@@ -395,37 +348,6 @@
395
348
  }
396
349
 
397
350
 
398
- /* ================================================================
399
- ==== EXPLICITA THEME-OVERRIDES (manuell toggle)
400
- light-dark() i :root hanterar surface/text/border-tokens automatiskt
401
- baserat pa color-scheme. Dessa overrides satter color-scheme explicit
402
- sa app kan tvinga light eller dark oavsett system-preferens.
403
-
404
- light-dark() hanterar INTE accent-tokens (de ar app-specifika via
405
- apps/<X>.css). For light-mode kan accent behova justeras ett steg
406
- morkare for kontrast pa ljus bg - dessa overrides lever har.
407
-
408
- STATUS: Ekonom ar dark-only. light-mode-stod ar forberedt for
409
- framtida sprintar i Jubb eller framtida apps.
410
- ================================================================ */
411
-
412
- [data-theme="dark"] {
413
- color-scheme: dark;
414
- }
415
-
416
- [data-theme="light"] {
417
- color-scheme: light;
418
-
419
- /* Accent - ett steg morkare for batter kontrast pa ljus bg.
420
- light-dark() i :root hanterar inte accent-tokens (app-specifika). */
421
- --accent-soft: var(--blue-2);
422
- --accent-moderate: var(--blue-3);
423
- --accent-9: var(--blue-8);
424
- --accent-10: var(--blue-9);
425
- --accent-text: var(--blue-9);
426
- }
427
-
428
-
429
351
  /* ================================================================
430
352
  ==== OVERLAY TINTS
431
353
  Transparenta tints för drag-overlays, hover-states på dark surfaces
@@ -3,8 +3,8 @@
3
3
  Cirkular initial-avatar. Modifier --lg pa profil-vyer.
4
4
  ================================================================ */
5
5
  .avatar {
6
- width: 36px;
7
- height: 36px;
6
+ width: var(--circle-size);
7
+ height: var(--circle-size);
8
8
  border-radius: var(--radius-full);
9
9
  background: linear-gradient(135deg, var(--accent-9) 0%, var(--accent-10) 100%);
10
10
  display: inline-flex;
@@ -19,13 +19,13 @@
19
19
  }
20
20
 
21
21
  .avatar--sm {
22
- width: 28px;
23
- height: 28px;
22
+ width: var(--circle-size-sm);
23
+ height: var(--circle-size-sm);
24
24
  font-size: var(--fs-12);
25
25
  }
26
26
 
27
27
  .avatar--lg {
28
- width: 56px;
29
- height: 56px;
28
+ width: var(--circle-size-lg);
29
+ height: var(--circle-size-lg);
30
30
  font-size: var(--fs-24);
31
31
  }
@@ -152,8 +152,8 @@
152
152
  align-items: center;
153
153
  justify-content: center;
154
154
  flex-shrink: 0;
155
- width: 36px;
156
- height: 36px;
155
+ width: var(--circle-size);
156
+ height: var(--circle-size);
157
157
  font-size: var(--fs-13);
158
158
  font-weight: var(--fw-medium);
159
159
  font-variant-numeric: tabular-nums;
@@ -185,8 +185,7 @@
185
185
  height: var(--touch-min);
186
186
  padding: 0;
187
187
  }
188
- .btn--icon.btn--sm { width: 36px; height: 36px; }
189
- .btn--icon.btn--lg { width: 52px; height: 52px; }
188
+ .btn--icon.btn--sm { width: var(--circle-size); height: var(--circle-size); }
190
189
 
191
190
  .btn--circle {
192
191
  border-radius: var(--radius-full);
@@ -213,8 +213,8 @@
213
213
  display: inline-flex;
214
214
  align-items: center;
215
215
  justify-content: center;
216
- width: 28px;
217
- height: 28px;
216
+ width: var(--circle-size-sm);
217
+ height: var(--circle-size-sm);
218
218
  border-radius: var(--radius-full);
219
219
  color: var(--text-subtle);
220
220
  background: transparent;
@@ -102,8 +102,8 @@
102
102
  display: inline-flex;
103
103
  align-items: center;
104
104
  justify-content: center;
105
- width: 56px;
106
- height: 56px;
105
+ width: var(--circle-size-lg);
106
+ height: var(--circle-size-lg);
107
107
  background: var(--surface-default);
108
108
  color: var(--text-muted);
109
109
  border-radius: var(--radius-full);
@@ -152,8 +152,8 @@
152
152
  }
153
153
 
154
154
  .skeleton--circle {
155
- width: 36px;
156
- height: 36px;
155
+ width: var(--circle-size);
156
+ height: var(--circle-size);
157
157
  border-radius: var(--radius-full);
158
158
  }
159
159
 
@@ -64,7 +64,7 @@
64
64
  /* 2026-05-13: fs-80 → fs-100 (25% storre) for mer display-tyngd.
65
65
  2026-05-14 (ADR 0019): font-size konsumerar --hero-amount-fz-token
66
66
  for app-override-mojlighet. */
67
- font-size: var(--hero-amount-fz, var(--fs-100));
67
+ font-size: var(--fs-100);
68
68
  /* Undantag fran 400/500-policy (regel 5): display-siffra, inte
69
69
  UI-text. 600 ger nodvandig visuell tyngd pa hero-storlekar.
70
70
  Per ADR 0019 garlder weight 600 alla hero__amount-instances
@@ -63,8 +63,8 @@
63
63
  display: inline-flex;
64
64
  align-items: center;
65
65
  justify-content: center;
66
- width: 36px;
67
- height: 36px;
66
+ width: var(--circle-size);
67
+ height: var(--circle-size);
68
68
  background: var(--surface-default);
69
69
  color: var(--accent-text);
70
70
  border-radius: var(--radius-14);
@@ -23,8 +23,8 @@
23
23
  display: inline-flex;
24
24
  align-items: center;
25
25
  justify-content: center;
26
- width: 28px;
27
- height: 28px;
26
+ width: var(--circle-size-sm);
27
+ height: var(--circle-size-sm);
28
28
  padding: 0;
29
29
  background: transparent;
30
30
  border: 0;
@@ -42,8 +42,8 @@
42
42
  .list-row:last-child { border-bottom: none; }
43
43
 
44
44
  .list-row__icon {
45
- width: 36px;
46
- height: 36px;
45
+ width: var(--circle-size);
46
+ height: var(--circle-size);
47
47
  border-radius: var(--radius-14);
48
48
  display: flex;
49
49
  align-items: center;
@@ -159,12 +159,20 @@
159
159
  justify-self: end;
160
160
  }
161
161
 
162
+ .topbar > a:has(> .avatar) {
163
+ min-width: var(--touch-min);
164
+ min-height: var(--touch-min);
165
+ display: inline-flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+ }
169
+
162
170
  .topbar__back {
163
171
  display: inline-flex;
164
172
  align-items: center;
165
173
  justify-content: center;
166
- width: 36px;
167
- height: 36px;
174
+ width: var(--touch-min);
175
+ height: var(--touch-min);
168
176
  padding: 0;
169
177
  border: 1px solid var(--border-subtle);
170
178
  border-radius: var(--radius-full);
@@ -203,8 +211,8 @@
203
211
  display: inline-flex;
204
212
  align-items: center;
205
213
  justify-content: center;
206
- min-width: var(--touch-sm);
207
- min-height: var(--touch-sm);
214
+ min-width: var(--touch-min);
215
+ min-height: var(--touch-min);
208
216
  padding: 0 var(--space-10);
209
217
  background: transparent;
210
218
  border: 0;
@@ -6,8 +6,8 @@
6
6
  - Hard-refresh-trigger via klick (se hard-refresh.js)
7
7
  - Subtle accent-soft-bg + accent-text istallet for accent-9-gradient
8
8
 
9
- Storlek 36x36 matchar .avatar default + .month-pill for visuell
10
- harmoni i topbar.
9
+ Storlek 44x44 (--touch-min) for WCAG-godkänd tap-area, höjd från
10
+ 36x36 i Sprint 1 Del C.
11
11
 
12
12
  Blocks:
13
13
  .pwa-avatar - klickbar app-brand-avatar (button-element)
@@ -16,8 +16,8 @@
16
16
  display: inline-flex;
17
17
  align-items: center;
18
18
  justify-content: center;
19
- width: 36px;
20
- height: 36px;
19
+ width: var(--touch-min);
20
+ height: var(--touch-min);
21
21
  padding: 0;
22
22
  background: var(--accent-soft);
23
23
  color: var(--accent-text);
@@ -176,8 +176,8 @@
176
176
  display: inline-flex;
177
177
  align-items: center;
178
178
  justify-content: center;
179
- width: 56px;
180
- height: 56px;
179
+ width: var(--circle-size-lg);
180
+ height: var(--circle-size-lg);
181
181
  background: var(--surface-raised);
182
182
  border: 1px solid var(--border-default);
183
183
  border-radius: var(--radius-full);
@@ -39,8 +39,8 @@
39
39
  .upload-spinner-overlay.is-visible { display: flex; }
40
40
 
41
41
  .upload-spinner {
42
- width: 56px;
43
- height: 56px;
42
+ width: var(--circle-size-lg);
43
+ height: var(--circle-size-lg);
44
44
  border: 3px solid var(--accent-a3);
45
45
  border-top-color: var(--accent-9);
46
46
  border-radius: var(--radius-full);
package/css/index.css CHANGED
@@ -78,15 +78,6 @@
78
78
  @import './components/kv-list.css';
79
79
  @import './components/offline.css';
80
80
 
81
- /* v4.4.0 - lyft fran Ekonom-domain (ADR 0020 - domain-to-package) */
82
- @import './components/review-banner.css';
83
- @import './components/matched-row.css';
84
- @import './components/status-icon.css';
85
- @import './components/tag-inline.css';
86
- @import './components/kvp-arrow.css';
87
- @import './components/icon-circle.css';
88
- @import './components/expandable-row.css';
89
- @import './components/item-stack.css';
90
81
  /* column-bar.css + dual-bar.css RADERADE v5.0.0 (ADR 0022) -
91
82
  amorterings-historik visas som kv-list (siffror) istallet for
92
83
  vertikala staplar; equity-split visas som tva .progress med
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klodd/ds",
3
- "version": "5.4.2",
3
+ "version": "5.5.0",
4
4
  "description": "Klodd shared design system - tokens, components, JS",
5
5
  "main": "css/index.css",
6
6
  "bin": {
@@ -441,7 +441,7 @@ Definiera tokens + bindningar:
441
441
  app-domain-CSS-bindningar ar att foredra (data-attribute-konvention
442
442
  + lasbar template)
443
443
 
444
- Jubb, Ekonom, framtida appar foljer samma monster med sina egna tokens.
444
+ Jubb och Ekonom foljer samma monster med sina egna tokens.
445
445
 
446
446
 
447
447
  ## Anti-patterns
@@ -20,7 +20,7 @@ Anvand **officiella Radix Colors dark-skalor** rakt av:
20
20
  - Mauve (neutral - se ADR 0006)
21
21
  - Blue Dark (Jubb accent)
22
22
  - Plum Dark (Ekonom accent)
23
- - Violet Dark (forberedd for framtida app)
23
+ - Violet Dark (definierad, inte aktivt anvand)
24
24
  - Green/Amber/Red Dark (status)
25
25
 
26
26
  Plus alpha-skalor (Mauve/Blue/Plum) for transparency-tints.
@@ -26,10 +26,6 @@ Mauve Dark, INTE ren gray eller slate.
26
26
  - + Subtle lila-tonad ger varmare bottenton som matchar bagge
27
27
  app-accenterna
28
28
  - + Konsistent visuellt sprak over apparna - bagge har samma neutral
29
- - − Mauve passar INTE for en framtida gron- eller orange-accent-app.
30
- Inte planerat - om det blir aktuellt valjer vi neutral utifran den
31
- appens accent vid den punkten (kanske separat data-app + neutral-
32
- override)
33
29
  - − Vissa anvandare kan kanna sig ovana med varmare neutral - branschen
34
30
  ar dominerad av kallare gray/slate
35
31
 
@@ -6,7 +6,7 @@ Locked.
6
6
  ## Context
7
7
 
8
8
  Audit 2026-05-13 kvällsessionen avslöjade två problem med
9
- `.panel__title`-användning över Klodd-ekosystemet:
9
+ `.panel__title`-användning över Jubb och Ekonom:
10
10
 
11
11
  **Problem 1: Inkonsekvent HTML-tagg i Ekonom.**
12
12
  - 35 platser använder `<div class="panel__title">` (94%)
@@ -89,7 +89,7 @@ Här är `.hero__label` korrekt eftersom `.hero__amount--card` följer.
89
89
  som h3 default)
90
90
  - CSS oförändrad - `.panel__title`-stylling targetar klassen, inte
91
91
  taggen
92
- - Konsekvens över Klodd-ekosystemet (Jubb + Ekonom + framtida appar)
92
+ - Konsekvens över Jubb och Ekonom
93
93
 
94
94
  **Trade-offs:**
95
95
  - Heading-hierarki är inte alltid h1→h2→h3 över hela sajten. Vyer utan
@@ -105,13 +105,11 @@ används av alla nuvarande och framtida Klodd-appar.
105
105
  |---|---|
106
106
  | Ekonom | Min ekonomi (inkomst, saldo) + Mina inställningar (toggles, abonnemang) |
107
107
  | Jubb | Skip "Min [domän]" → Mina inställningar (Sökläge, Notiser, AI-profil) |
108
- | Future-app | "Min [domän]" om personliga värden finns separat |
109
108
 
110
109
  ## Konsekvenser
111
110
 
112
111
  **Bra:**
113
112
  - Single source of truth för settings-hubbar
114
- - Future-Margevo + framtida appar får gratis-pattern
115
113
  - A11y + iOS-konvention: heading-hierarki + setting-row-rytm
116
114
  - Komposit av befintliga paket-komponenter (ingen ny CSS behövs)
117
115