@klodd/ds 1.1.0 → 1.2.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.
- package/css/00-primitives.css +62 -0
- package/css/10-semantic.css +81 -20
- package/css/apps/ekonom.css +9 -0
- package/css/components/badge.css +2 -2
- package/css/components/divider.css +25 -0
- package/css/components/dropdown.css +88 -0
- package/css/components/feedback.css +6 -0
- package/css/components/input.css +1 -1
- package/css/components/overlay.css +3 -0
- package/css/components/progress.css +39 -0
- package/css/components/tooltip.css +50 -0
- package/css/index.css +4 -0
- package/package.json +1 -1
package/css/00-primitives.css
CHANGED
|
@@ -47,6 +47,28 @@
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
/* ================================================================
|
|
51
|
+
==== COLORS - GRAY ALPHA (Radix Mauve Dark Alpha)
|
|
52
|
+
Pre-kalibrerade alpha-varianter for subtila tints over komplexa
|
|
53
|
+
bakgrunder (gradients, bilder, semi-transparenta overlays).
|
|
54
|
+
Officiella Radix-varden - perceptuellt korrekt over olika ytor.
|
|
55
|
+
================================================================ */
|
|
56
|
+
:root {
|
|
57
|
+
--gray-a1: #00000000;
|
|
58
|
+
--gray-a2: #f5f4f609;
|
|
59
|
+
--gray-a3: #ebeaf814;
|
|
60
|
+
--gray-a4: #eee5f81d;
|
|
61
|
+
--gray-a5: #efe6fe25;
|
|
62
|
+
--gray-a6: #f1e6fd30;
|
|
63
|
+
--gray-a7: #eee9ff40;
|
|
64
|
+
--gray-a8: #eee7ff5d;
|
|
65
|
+
--gray-a9: #eae6fd6e;
|
|
66
|
+
--gray-a10: #ece9fd7c;
|
|
67
|
+
--gray-a11: #f5f1ffb7;
|
|
68
|
+
--gray-a12: #fdfdffef;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
50
72
|
/* ================================================================
|
|
51
73
|
==== COLORS - BLUE (Radix Blue Dark - Jubb accent)
|
|
52
74
|
Officiella Radix-varden. Step 9 = "Brand-blue" sky-tonad,
|
|
@@ -68,6 +90,26 @@
|
|
|
68
90
|
}
|
|
69
91
|
|
|
70
92
|
|
|
93
|
+
/* ================================================================
|
|
94
|
+
==== COLORS - BLUE ALPHA (Radix Blue Dark Alpha)
|
|
95
|
+
Officiella Radix-varden. Anvands av Jubbs accent-alpha-tokens.
|
|
96
|
+
================================================================ */
|
|
97
|
+
:root {
|
|
98
|
+
--blue-a1: #004df211;
|
|
99
|
+
--blue-a2: #1166fb18;
|
|
100
|
+
--blue-a3: #0077ff3a;
|
|
101
|
+
--blue-a4: #0075ff57;
|
|
102
|
+
--blue-a5: #0081fd6b;
|
|
103
|
+
--blue-a6: #0f89fd7f;
|
|
104
|
+
--blue-a7: #2a91fe98;
|
|
105
|
+
--blue-a8: #3094feb9;
|
|
106
|
+
--blue-a9: #0090ff;
|
|
107
|
+
--blue-a10: #3b9eff;
|
|
108
|
+
--blue-a11: #70b8ff;
|
|
109
|
+
--blue-a12: #c2e6ff;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
71
113
|
/* ================================================================
|
|
72
114
|
==== COLORS - PURPLE (Radix Violet Dark)
|
|
73
115
|
Officiella Radix-varden. Behalls i shared-system for framtida
|
|
@@ -110,6 +152,26 @@
|
|
|
110
152
|
}
|
|
111
153
|
|
|
112
154
|
|
|
155
|
+
/* ================================================================
|
|
156
|
+
==== COLORS - PLUM ALPHA (Radix Plum Dark Alpha)
|
|
157
|
+
Officiella Radix-varden. Anvands av Ekonoms accent-alpha-tokens.
|
|
158
|
+
================================================================ */
|
|
159
|
+
:root {
|
|
160
|
+
--plum-a1: #f112f108;
|
|
161
|
+
--plum-a2: #f22ff211;
|
|
162
|
+
--plum-a3: #fd4cfd27;
|
|
163
|
+
--plum-a4: #f646ff3a;
|
|
164
|
+
--plum-a5: #f455ff48;
|
|
165
|
+
--plum-a6: #f66dff56;
|
|
166
|
+
--plum-a7: #f07cfd70;
|
|
167
|
+
--plum-a8: #ee84ff95;
|
|
168
|
+
--plum-a9: #e961feb6;
|
|
169
|
+
--plum-a10: #ed70ffc0;
|
|
170
|
+
--plum-a11: #f19cfef3;
|
|
171
|
+
--plum-a12: #feddfef4;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
113
175
|
/* ================================================================
|
|
114
176
|
==== COLORS - STATUS (Radix dark-skalor, step 9)
|
|
115
177
|
Officiella Radix-varden. Text-on-status hardkodad i semantic.
|
package/css/10-semantic.css
CHANGED
|
@@ -149,10 +149,19 @@
|
|
|
149
149
|
INTE for: text pa --accent-9-bakgrund (anvand --text-on-accent). */
|
|
150
150
|
--accent-text: var(--blue-11);
|
|
151
151
|
|
|
152
|
-
/*
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
/* Accent alpha-skalan (Radix-konvention).
|
|
153
|
+
Pre-kalibrerade transparent-tints over komplexa bakgrunder.
|
|
154
|
+
Step-mappning samma som solid-skalan: a1-2 app-bg, a3 vila,
|
|
155
|
+
a4-5 hover/active, a6 subtil border, a7-8 stark border, a9-10
|
|
156
|
+
solid (saknar mening som alpha), a11-12 text.
|
|
157
|
+
Genereras fran accent-fargens alpha-variant - overrides per app. */
|
|
158
|
+
--accent-a1: var(--blue-a1);
|
|
159
|
+
--accent-a2: var(--blue-a2);
|
|
160
|
+
--accent-a3: var(--blue-a3);
|
|
161
|
+
--accent-a6: var(--blue-a6);
|
|
162
|
+
--accent-a8: var(--blue-a8);
|
|
163
|
+
--accent-a10: var(--blue-a10);
|
|
164
|
+
--accent-a12: var(--blue-a12);
|
|
156
165
|
|
|
157
166
|
|
|
158
167
|
/* ================================================================
|
|
@@ -306,34 +315,83 @@
|
|
|
306
315
|
}
|
|
307
316
|
|
|
308
317
|
|
|
318
|
+
/* ================================================================
|
|
319
|
+
==== HIGH CONTRAST MODE (prefers-contrast: more)
|
|
320
|
+
Stärker borders och text-muted/-subtle for anvandare som har
|
|
321
|
+
high-contrast pa OS-niva. Paverkar inte farger - bara gransvarden
|
|
322
|
+
sa svaga subtila element blir mer urskiljbara.
|
|
323
|
+
|
|
324
|
+
Anvandning kraver inget komponentkod-arbete - alla komponenter
|
|
325
|
+
refererar redan dessa semantic tokens, sa overrides slar genom
|
|
326
|
+
automatiskt.
|
|
327
|
+
================================================================ */
|
|
328
|
+
@media (prefers-contrast: more) {
|
|
329
|
+
:root {
|
|
330
|
+
--border-subtle: var(--gray-7);
|
|
331
|
+
--border-default: var(--gray-8);
|
|
332
|
+
--border-strong: var(--gray-9);
|
|
333
|
+
--text-muted: var(--gray-10);
|
|
334
|
+
--text-subtle: var(--gray-11);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
|
|
309
339
|
/* ================================================================
|
|
310
340
|
==== LIGHT MODE (data-theme="light")
|
|
311
|
-
Overrider ytor, text och borders. Accent justeras ett steg
|
|
341
|
+
Overrider ytor, text och borders. Accent justeras ett steg morkare
|
|
312
342
|
for batter kontrast pa ljus bakgrund. Komponenter behover inga
|
|
313
343
|
andringar - alla refererar bara semantic tokens.
|
|
344
|
+
|
|
345
|
+
STATUS: forberedd, inte aktivt produktion-verifierad. Dokumenterad
|
|
346
|
+
som "Punkt J" i AUDIT.md. Tokens som inte overrides her arver
|
|
347
|
+
default-blocket (dark-values) - kanda begransningar:
|
|
348
|
+
- alpha-tokens (--accent-a*) anvander dark-Radix-alpha-skalor;
|
|
349
|
+
bor importera light-skalor for full paritet
|
|
350
|
+
- --shadow-float ar kalibrerad for dark-mode (synlig pa ljus bg
|
|
351
|
+
men kan behova mindre opacity)
|
|
352
|
+
- --hero-glow gradient anvander accent som ar morkare i light;
|
|
353
|
+
eventuellt for mattat
|
|
314
354
|
================================================================ */
|
|
315
355
|
[data-theme="light"] {
|
|
356
|
+
/* Surfaces - Material-/Aksel-stil dar morkare = upphojt.
|
|
357
|
+
I dark var det tvartom (ljusare = upphojt). I light fungerar det
|
|
358
|
+
sa har eftersom skuggor ar mer subtila pa ljus bakgrund. */
|
|
316
359
|
--surface-page: oklch(0.99 0.002 250);
|
|
317
360
|
--surface-default: oklch(0.96 0.003 250);
|
|
318
|
-
--surface-raised: oklch(
|
|
319
|
-
--surface-overlay: oklch(0.
|
|
361
|
+
--surface-raised: oklch(1.00 0.002 250); /* nastan vit kort over light bg */
|
|
362
|
+
--surface-overlay: oklch(0.99 0.002 250); /* morkare i z-stack via shadow */
|
|
320
363
|
--surface-hover: oklch(0.93 0.004 250);
|
|
321
364
|
--surface-active: oklch(0.88 0.005 250);
|
|
322
365
|
--surface-sunken: oklch(0.94 0.003 250);
|
|
323
366
|
|
|
367
|
+
/* Text - inverterad mauve-skala. */
|
|
324
368
|
--text-default: var(--gray-1);
|
|
325
369
|
--text-subtle: var(--gray-3);
|
|
326
370
|
--text-muted: var(--gray-6);
|
|
327
371
|
--text-disabled: var(--gray-8);
|
|
328
372
|
|
|
373
|
+
/* Text-on-* - i light har vi morkare accent (blue-8) men ljusare
|
|
374
|
+
status-bg som kan behova morkare text. Behaller vit eftersom
|
|
375
|
+
accent-8 + status-9 fortfarande ar tillrackligt morka. */
|
|
376
|
+
--text-on-accent: oklch(0.98 0 0);
|
|
377
|
+
--text-on-status: oklch(0.98 0 0);
|
|
378
|
+
|
|
379
|
+
/* Borders - inverterad mauve-skala. */
|
|
329
380
|
--border-subtle: var(--gray-9);
|
|
330
381
|
--border-default: var(--gray-8);
|
|
331
382
|
--border-strong: var(--gray-7);
|
|
332
383
|
|
|
333
|
-
/* Accent
|
|
334
|
-
|
|
335
|
-
--accent-
|
|
336
|
-
--accent-
|
|
384
|
+
/* Accent - ett steg morkare for batter kontrast pa ljus bg.
|
|
385
|
+
Plus accent-soft/moderate som ger korrekt subtil tint. */
|
|
386
|
+
--accent-soft: var(--blue-2);
|
|
387
|
+
--accent-moderate: var(--blue-3);
|
|
388
|
+
--accent-9: var(--blue-8);
|
|
389
|
+
--accent-10: var(--blue-9);
|
|
390
|
+
--accent-text: var(--blue-9);
|
|
391
|
+
|
|
392
|
+
/* Status solid - behaller dark-step-9 eftersom dessa farger ar
|
|
393
|
+
val-kalibrerade och fungerar pa bade ljus och mork bakgrund. */
|
|
394
|
+
/* --bg-success, --bg-warning, --bg-danger arvs fran default. */
|
|
337
395
|
}
|
|
338
396
|
|
|
339
397
|
|
|
@@ -366,27 +424,30 @@
|
|
|
366
424
|
--text-tertiary: var(--text-muted);
|
|
367
425
|
--text-faint: var(--text-disabled);
|
|
368
426
|
|
|
369
|
-
/* Accent - gamla --accent (singular) mappas mot nya --accent-9.
|
|
427
|
+
/* Accent - gamla --accent (singular) mappas mot nya --accent-9.
|
|
428
|
+
--accent-dim/-border foljde gamla 20%/40%-konventionen, mappas
|
|
429
|
+
nu mot Radix-skalans steg 3 (subtil) och 6 (border-emphasis). */
|
|
370
430
|
--accent: var(--accent-9);
|
|
371
431
|
--accent-hover: var(--accent-10);
|
|
372
432
|
--accent-strong: var(--accent-9);
|
|
373
433
|
--accent-secondary: var(--accent-9);
|
|
374
|
-
--accent-dim: var(--accent-
|
|
375
|
-
--accent-border: var(--accent-
|
|
434
|
+
--accent-dim: var(--accent-a3);
|
|
435
|
+
--accent-border: var(--accent-a6);
|
|
376
436
|
|
|
377
|
-
/* Accent-link - gamla cirkelknapps-tokens. Mappas mot accent-systemet.
|
|
437
|
+
/* Accent-link - gamla cirkelknapps-tokens. Mappas mot accent-systemet.
|
|
438
|
+
Gamla 10/20/40%-stegen mappas mot nya Radix-stegen 2/3/6. */
|
|
378
439
|
--accent-link: var(--accent-text);
|
|
379
|
-
--accent-link-bg: var(--accent-
|
|
380
|
-
--accent-link-bg-hover: var(--accent-
|
|
381
|
-
--accent-link-border: var(--accent-
|
|
382
|
-
--accent-link-border-hover: var(--accent-
|
|
440
|
+
--accent-link-bg: var(--accent-a2);
|
|
441
|
+
--accent-link-bg-hover: var(--accent-a3);
|
|
442
|
+
--accent-link-border: var(--accent-a3);
|
|
443
|
+
--accent-link-border-hover: var(--accent-a6);
|
|
383
444
|
|
|
384
445
|
/* Audit-aliaser fran 2026-05-07 - ofta refererade utan att vara definierade. */
|
|
385
446
|
--text: var(--text-default);
|
|
386
447
|
--border: var(--border-default);
|
|
387
448
|
--surface-2: var(--surface-default);
|
|
388
449
|
--surface-3: var(--surface-raised);
|
|
389
|
-
--accent-rgba: var(--accent-
|
|
450
|
+
--accent-rgba: var(--accent-a3);
|
|
390
451
|
|
|
391
452
|
/* Radius - gamla t-shirt-namn mappas mot nya pixel-numeriska. */
|
|
392
453
|
--radius-xs: var(--radius-2);
|
package/css/apps/ekonom.css
CHANGED
|
@@ -35,4 +35,13 @@
|
|
|
35
35
|
/* Text - Ekonoms varma vit (lite lila-tonad) istallet for Mauve-12.
|
|
36
36
|
Bevarar den karaktaren som Ekonom haft sedan tidigt. */
|
|
37
37
|
--text-default: #F4F2FA;
|
|
38
|
+
|
|
39
|
+
/* Accent alpha - Radix Plum Dark Alpha. Override pa default-Blue. */
|
|
40
|
+
--accent-a1: var(--plum-a1);
|
|
41
|
+
--accent-a2: var(--plum-a2);
|
|
42
|
+
--accent-a3: var(--plum-a3);
|
|
43
|
+
--accent-a6: var(--plum-a6);
|
|
44
|
+
--accent-a8: var(--plum-a8);
|
|
45
|
+
--accent-a10: var(--plum-a10);
|
|
46
|
+
--accent-a12: var(--plum-a12);
|
|
38
47
|
}
|
package/css/components/badge.css
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* ================================================================
|
|
2
|
+
components/divider.css
|
|
3
|
+
Horisontell eller vertikal separator. Anvands mellan sektioner,
|
|
4
|
+
list-grupper, eller inom sheets/cards. Tva styrkor (subtle/strong).
|
|
5
|
+
|
|
6
|
+
Default ar horisontell. Modifier --vertical for sidled. Modifier
|
|
7
|
+
--strong for hogre kontrast (anvand sparsamt - subtle ar default).
|
|
8
|
+
================================================================ */
|
|
9
|
+
.divider {
|
|
10
|
+
border: none;
|
|
11
|
+
border-top: 1px solid var(--border-subtle);
|
|
12
|
+
margin: var(--space-16) 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.divider--vertical {
|
|
16
|
+
border-top: none;
|
|
17
|
+
border-left: 1px solid var(--border-subtle);
|
|
18
|
+
height: 100%;
|
|
19
|
+
margin: 0 var(--space-16);
|
|
20
|
+
align-self: stretch;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.divider--strong {
|
|
24
|
+
border-color: var(--border-default);
|
|
25
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* ================================================================
|
|
2
|
+
components/dropdown.css
|
|
3
|
+
Kontextuell meny. Wrapper med trigger + .dropdown-menu som
|
|
4
|
+
visas via .is-open-toggling fran JS.
|
|
5
|
+
|
|
6
|
+
Markup-pattern:
|
|
7
|
+
<div class="dropdown" data-dropdown>
|
|
8
|
+
<button class="btn btn--icon" data-dropdown-trigger>...</button>
|
|
9
|
+
<div class="dropdown-menu" role="menu">
|
|
10
|
+
<button class="dropdown-item" role="menuitem">Item 1</button>
|
|
11
|
+
<hr class="dropdown-divider">
|
|
12
|
+
<button class="dropdown-item dropdown-item--danger">Ta bort</button>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
JS togglar .is-open pa .dropdown-element. Inga inline-styles
|
|
17
|
+
(CSP-safe). Stang via klick utanfor / Escape via JS-helper.
|
|
18
|
+
================================================================ */
|
|
19
|
+
.dropdown {
|
|
20
|
+
position: relative;
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.dropdown-menu {
|
|
25
|
+
position: absolute;
|
|
26
|
+
top: calc(100% + var(--space-4));
|
|
27
|
+
left: 0;
|
|
28
|
+
min-width: 160px;
|
|
29
|
+
background: var(--surface-overlay);
|
|
30
|
+
border: 1px solid var(--border-default);
|
|
31
|
+
border-radius: var(--radius-10);
|
|
32
|
+
padding: var(--space-4) 0;
|
|
33
|
+
box-shadow: 0 4px 16px color-mix(in oklch, black 40%, transparent);
|
|
34
|
+
z-index: var(--z-dropdown, 100);
|
|
35
|
+
display: none;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.dropdown.is-open .dropdown-menu {
|
|
39
|
+
display: block;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.dropdown-item {
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
gap: var(--space-8);
|
|
46
|
+
width: 100%;
|
|
47
|
+
padding: var(--space-8) var(--space-12);
|
|
48
|
+
font-family: inherit;
|
|
49
|
+
font-size: var(--fs-14);
|
|
50
|
+
color: var(--text-default);
|
|
51
|
+
background: transparent;
|
|
52
|
+
border: 0;
|
|
53
|
+
text-align: left;
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
transition: background var(--dur-fast) var(--ease-out);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media (hover: hover) and (pointer: fine) {
|
|
59
|
+
.dropdown-item:hover {
|
|
60
|
+
background: var(--surface-hover);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.dropdown-item:active {
|
|
65
|
+
background: var(--surface-active);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.dropdown-item:focus-visible {
|
|
69
|
+
outline: 2px solid var(--border-focus);
|
|
70
|
+
outline-offset: -2px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.dropdown-item[disabled],
|
|
74
|
+
.dropdown-item:disabled {
|
|
75
|
+
opacity: 0.5;
|
|
76
|
+
cursor: not-allowed;
|
|
77
|
+
pointer-events: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.dropdown-item--danger {
|
|
81
|
+
color: var(--bg-danger);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.dropdown-divider {
|
|
85
|
+
border: none;
|
|
86
|
+
border-top: 1px solid var(--border-subtle);
|
|
87
|
+
margin: var(--space-4) 0;
|
|
88
|
+
}
|
package/css/components/input.css
CHANGED
|
@@ -21,6 +21,9 @@ dialog.sheet::backdrop {
|
|
|
21
21
|
background: color-mix(in oklch, var(--surface-page) 60%, transparent);
|
|
22
22
|
-webkit-backdrop-filter: blur(4px);
|
|
23
23
|
backdrop-filter: blur(4px);
|
|
24
|
+
/* Klickbar yta - JS lyssnar pa backdrop-klick for stang-action.
|
|
25
|
+
Signalerar interaktivitet visuellt via cursor. */
|
|
26
|
+
cursor: pointer;
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* ================================================================
|
|
2
|
+
components/progress.css
|
|
3
|
+
Linjar progress-indikator. Anvands for budget-burndown, upload-
|
|
4
|
+
status, multi-step-flows. Modifiers for status-fargning.
|
|
5
|
+
|
|
6
|
+
.progress ar wrappern (track), .progress-bar ar fyllnaden.
|
|
7
|
+
Sätt width via inline style eller data-attribut + JS (CSP-safe).
|
|
8
|
+
|
|
9
|
+
Brief-pattern fran Ekonom:
|
|
10
|
+
<div class="progress">
|
|
11
|
+
<div class="progress-bar progress-bar--warning"
|
|
12
|
+
data-bar-width="73%"></div>
|
|
13
|
+
</div>
|
|
14
|
+
bar-styles.js applicerar style.width fran data-bar-width.
|
|
15
|
+
================================================================ */
|
|
16
|
+
.progress {
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: var(--space-6);
|
|
19
|
+
background: var(--surface-raised);
|
|
20
|
+
border-radius: var(--radius-full);
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.progress-bar {
|
|
25
|
+
height: 100%;
|
|
26
|
+
background: var(--accent-9);
|
|
27
|
+
border-radius: var(--radius-full);
|
|
28
|
+
transition: width var(--dur-base) var(--ease-out);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.progress-bar--success { background: var(--bg-success); }
|
|
32
|
+
.progress-bar--warning { background: var(--bg-warning); }
|
|
33
|
+
.progress-bar--danger { background: var(--bg-danger); }
|
|
34
|
+
|
|
35
|
+
@media (prefers-reduced-motion: reduce) {
|
|
36
|
+
.progress-bar {
|
|
37
|
+
transition: none;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* ================================================================
|
|
2
|
+
components/tooltip.css
|
|
3
|
+
Kortfattad hjalptext vid hover/focus. Pure CSS - ingen JS.
|
|
4
|
+
|
|
5
|
+
Markup-pattern:
|
|
6
|
+
<span class="tooltip-wrapper">
|
|
7
|
+
<button class="btn btn--icon">...</button>
|
|
8
|
+
<span class="tooltip" role="tooltip">Hjalptext har</span>
|
|
9
|
+
</span>
|
|
10
|
+
|
|
11
|
+
Tooltip visas vid hover OCH focus-within sa tangentbordsanvandare
|
|
12
|
+
far samma feedback som musanvandare. Pointer-events:none pa
|
|
13
|
+
tooltip-elementet sa det inte snor klick fran wrappern.
|
|
14
|
+
|
|
15
|
+
prefers-reduced-motion respekteras (opacity-fade tas bort).
|
|
16
|
+
================================================================ */
|
|
17
|
+
.tooltip-wrapper {
|
|
18
|
+
position: relative;
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.tooltip {
|
|
23
|
+
position: absolute;
|
|
24
|
+
bottom: calc(100% + var(--space-6));
|
|
25
|
+
left: 50%;
|
|
26
|
+
transform: translateX(-50%);
|
|
27
|
+
background: var(--surface-overlay);
|
|
28
|
+
color: var(--text-default);
|
|
29
|
+
font-size: var(--fs-12);
|
|
30
|
+
line-height: var(--lh-snug);
|
|
31
|
+
padding: var(--space-4) var(--space-8);
|
|
32
|
+
border-radius: var(--radius-6);
|
|
33
|
+
border: 1px solid var(--border-default);
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
pointer-events: none;
|
|
36
|
+
opacity: 0;
|
|
37
|
+
transition: opacity var(--dur-fast) var(--ease-out);
|
|
38
|
+
z-index: var(--z-tooltip, 50);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.tooltip-wrapper:hover .tooltip,
|
|
42
|
+
.tooltip-wrapper:focus-within .tooltip {
|
|
43
|
+
opacity: 1;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@media (prefers-reduced-motion: reduce) {
|
|
47
|
+
.tooltip {
|
|
48
|
+
transition: none;
|
|
49
|
+
}
|
|
50
|
+
}
|
package/css/index.css
CHANGED
|
@@ -26,3 +26,7 @@
|
|
|
26
26
|
@import './components/overlay.css';
|
|
27
27
|
@import './components/icon.css';
|
|
28
28
|
@import './components/hero-roll.css';
|
|
29
|
+
@import './components/divider.css';
|
|
30
|
+
@import './components/progress.css';
|
|
31
|
+
@import './components/tooltip.css';
|
|
32
|
+
@import './components/dropdown.css';
|