@aortl/admin-css 0.14.1 → 0.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/dist/admin.css +121 -69
- package/dist/admin.min.css +1 -1
- package/dist/admin.scoped.css +121 -69
- package/dist/admin.scoped.min.css +44 -46
- package/dist/admin.utilities.css +248 -210
- package/dist/admin.utilities.min.css +1 -1
- package/package.json +1 -1
- package/src/components/accordion.css +1 -1
- package/src/components/alert.css +11 -29
- package/src/components/badge.css +10 -12
- package/src/components/breadcrumbs.css +1 -1
- package/src/components/button.css +1 -1
- package/src/components/chart.css +2 -2
- package/src/components/checkbox.css +1 -1
- package/src/components/dialog.css +1 -1
- package/src/components/file-input.css +1 -1
- package/src/components/footer.css +1 -1
- package/src/components/input.css +1 -1
- package/src/components/link.css +3 -3
- package/src/components/menu.css +1 -1
- package/src/components/navbar.css +2 -2
- package/src/components/pagination.css +1 -1
- package/src/components/progress.css +1 -1
- package/src/components/property-list.css +1 -1
- package/src/components/radio.css +1 -1
- package/src/components/select.css +2 -2
- package/src/components/sidebar.css +4 -4
- package/src/components/switch.css +1 -1
- package/src/components/table.css +1 -1
- package/src/components/tabs.css +90 -4
- package/src/components/textarea.css +1 -1
- package/src/theme.css +21 -8
- package/src/utilities.css +5 -0
package/package.json
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
px-4 py-3 cursor-pointer select-none
|
|
27
27
|
text-sm font-medium text-text
|
|
28
28
|
hover:bg-surface-muted
|
|
29
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
29
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
30
30
|
list-style: none;
|
|
31
31
|
}
|
|
32
32
|
|
package/src/components/alert.css
CHANGED
|
@@ -46,51 +46,33 @@
|
|
|
46
46
|
min-width: 0;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/* Solid status fill — the variant color carries the signal, and the title,
|
|
50
|
+
leading icon, and body all sit on top in the matching `-content` color
|
|
51
|
+
(white on the colored accents, black on bright yellow). Title/icon inherit
|
|
52
|
+
that content color from the root, so no per-variant text rule is needed.
|
|
53
|
+
The description drops to 85% opacity to read as secondary text without
|
|
54
|
+
introducing a second hue. */
|
|
49
55
|
.alert-info {
|
|
50
|
-
@apply bg-info
|
|
56
|
+
@apply bg-info border-info text-info-content;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
.alert-success {
|
|
54
|
-
@apply bg-success
|
|
60
|
+
@apply bg-success border-success text-success-content;
|
|
55
61
|
}
|
|
56
62
|
|
|
57
63
|
.alert-warning {
|
|
58
|
-
@apply bg-warning
|
|
64
|
+
@apply bg-warning border-warning text-warning-content;
|
|
59
65
|
}
|
|
60
66
|
|
|
61
67
|
.alert-danger {
|
|
62
|
-
@apply bg-danger
|
|
68
|
+
@apply bg-danger border-danger text-danger-content;
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
.alert-title {
|
|
66
72
|
@apply font-medium;
|
|
67
73
|
}
|
|
68
74
|
|
|
69
|
-
.alert-info .alert-title,
|
|
70
|
-
.alert-info > :is(i, svg):first-child {
|
|
71
|
-
@apply text-info;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.alert-success .alert-title,
|
|
75
|
-
.alert-success > :is(i, svg):first-child {
|
|
76
|
-
@apply text-success;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/* Warning title/icon use `text-text` rather than `text-warning`: the warning
|
|
80
|
-
accent is yellow-400 in both modes, which fails AA contrast against the
|
|
81
|
-
muted yellow background in light mode. The muted bg + border still carry
|
|
82
|
-
the warning signal. */
|
|
83
|
-
.alert-warning .alert-title,
|
|
84
|
-
.alert-warning > :is(i, svg):first-child {
|
|
85
|
-
@apply text-text;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.alert-danger .alert-title,
|
|
89
|
-
.alert-danger > :is(i, svg):first-child {
|
|
90
|
-
@apply text-danger;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
75
|
.alert-description {
|
|
94
|
-
|
|
76
|
+
opacity: 0.85;
|
|
95
77
|
}
|
|
96
78
|
}
|
package/src/components/badge.css
CHANGED
|
@@ -12,30 +12,28 @@
|
|
|
12
12
|
flex-shrink: 0;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
/* Variants —
|
|
16
|
-
across status indicators and chips in tables.
|
|
17
|
-
|
|
15
|
+
/* Variants — solid status fills, matching the alert palette so danger/
|
|
16
|
+
success/etc. stay coherent across status indicators and chips in tables.
|
|
17
|
+
Each sits on the full-strength status color with the matching `-content`
|
|
18
|
+
text (white on the colored accents, black on bright yellow). The bare
|
|
19
|
+
`.badge` (no modifier) renders the neutral look, folded into the base. */
|
|
18
20
|
.badge-info {
|
|
19
|
-
@apply bg-info
|
|
21
|
+
@apply bg-info text-info-content border-info;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
.badge-success {
|
|
23
|
-
@apply bg-success
|
|
25
|
+
@apply bg-success text-success-content border-success;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
/* Warning text uses `text-text` rather than `text-warning`: the warning
|
|
27
|
-
accent is yellow-400 in both modes, which fails AA contrast against the
|
|
28
|
-
muted yellow background in light mode. The muted bg + border still carry
|
|
29
|
-
the warning signal. */
|
|
30
28
|
.badge-warning {
|
|
31
|
-
@apply bg-warning
|
|
29
|
+
@apply bg-warning text-warning-content border-warning;
|
|
32
30
|
}
|
|
33
31
|
|
|
34
32
|
.badge-danger {
|
|
35
|
-
@apply bg-danger
|
|
33
|
+
@apply bg-danger text-danger-content border-danger;
|
|
36
34
|
}
|
|
37
35
|
|
|
38
|
-
/* Solid
|
|
36
|
+
/* Solid neutral — high-contrast ink fill (counts on tabs, etc.) */
|
|
39
37
|
.badge-primary {
|
|
40
38
|
@apply bg-primary text-primary-content;
|
|
41
39
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
@apply inline-flex items-center gap-1.5
|
|
12
12
|
text-text-muted no-underline
|
|
13
13
|
hover:text-text
|
|
14
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
14
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/* `aria-current` on the last item promotes it to body text weight. Non-links
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
bg-surface-muted text-text hover:bg-surface-strong
|
|
7
7
|
transition-colors duration-150
|
|
8
8
|
cursor-pointer select-none
|
|
9
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
9
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
10
10
|
disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none;
|
|
11
11
|
}
|
|
12
12
|
|
package/src/components/chart.css
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* `--donut-segments` (CSS can't sum a variable-length sibling
|
|
16
16
|
* list, so the string arrives whole).
|
|
17
17
|
*
|
|
18
|
-
* Colour: single-series follows `currentColor` (default `--color-
|
|
18
|
+
* Colour: single-series follows `currentColor` (default `--color-info`,
|
|
19
19
|
* recoloured by the `.chart-success`/etc. variants like `.progress`).
|
|
20
20
|
* Multi-series colours are set inline per bar/segment (`--bar-color` /
|
|
21
21
|
* `--segment-color` / legend `--legend-color`); there is no chart token
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
--chart-height: 8rem; /* bar track cross-axis size (md) */
|
|
31
31
|
--chart-size: 8rem; /* donut diameter (md) */
|
|
32
32
|
--chart-gap: 0.25rem;
|
|
33
|
-
color: var(--color-
|
|
33
|
+
color: var(--color-info);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/* Single-series semantic variants — recolour currentColor, like progress. */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
rounded-sm border bg-surface
|
|
5
5
|
cursor-pointer
|
|
6
6
|
transition-colors duration-150
|
|
7
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
7
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
8
8
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -90,6 +90,6 @@
|
|
|
90
90
|
hover:bg-surface-strong hover:text-text
|
|
91
91
|
cursor-pointer
|
|
92
92
|
transition-colors duration-150
|
|
93
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
93
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
94
94
|
}
|
|
95
95
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
bg-surface text-text
|
|
5
5
|
border border-border hover:border-border-strong rounded-lg overflow-hidden
|
|
6
6
|
transition-colors duration-150
|
|
7
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
7
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
8
8
|
disabled:opacity-50 disabled:cursor-not-allowed
|
|
9
9
|
file:px-3 file:py-2 file:mr-3
|
|
10
10
|
file:text-sm file:font-medium file:leading-none
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
.footer-link {
|
|
17
17
|
@apply text-text-muted no-underline
|
|
18
18
|
hover:text-text hover:underline
|
|
19
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
19
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
20
20
|
rounded-sm;
|
|
21
21
|
}
|
|
22
22
|
|
package/src/components/input.css
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
border border-border hover:border-border-strong
|
|
7
7
|
transition-colors duration-150
|
|
8
8
|
placeholder:text-text-muted
|
|
9
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
9
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
10
10
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
11
11
|
}
|
|
12
12
|
|
package/src/components/link.css
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
.link {
|
|
3
3
|
@apply inline-flex items-center gap-1
|
|
4
|
-
text-
|
|
4
|
+
text-link underline underline-offset-2
|
|
5
5
|
rounded-sm transition-colors duration-150
|
|
6
|
-
hover:text-
|
|
7
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
6
|
+
hover:text-link-hover
|
|
7
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/* Keep a leading icon from squishing when the link text wraps. The trailing
|
package/src/components/menu.css
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
@apply inline-flex items-center gap-1.5
|
|
12
12
|
cursor-pointer select-none
|
|
13
13
|
transition-colors duration-150
|
|
14
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
14
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
15
15
|
list-style: none;
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
hover:bg-surface-strong
|
|
24
24
|
cursor-pointer select-none
|
|
25
25
|
transition-colors duration-150
|
|
26
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
26
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.navbar-item[aria-current="page"],
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
rounded-md text-text bg-transparent
|
|
50
50
|
hover:bg-surface-strong
|
|
51
51
|
cursor-pointer
|
|
52
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
52
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
.navbar-mobile-toggle::before {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
hover:bg-surface-muted
|
|
20
20
|
cursor-pointer select-none no-underline
|
|
21
21
|
transition-colors duration-150
|
|
22
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
22
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
23
23
|
disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
ml-auto rounded
|
|
74
74
|
cursor-pointer border-0 bg-transparent
|
|
75
75
|
text-text-muted hover:text-text
|
|
76
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
76
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
77
77
|
display: none;
|
|
78
78
|
flex-shrink: 0;
|
|
79
79
|
padding: 0.125rem;
|
package/src/components/radio.css
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
rounded-full border bg-surface
|
|
5
5
|
cursor-pointer
|
|
6
6
|
transition-colors duration-150
|
|
7
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
7
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
8
8
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
border border-border hover:border-border-strong
|
|
7
7
|
cursor-pointer select-none
|
|
8
8
|
transition-colors duration-150
|
|
9
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
9
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
10
10
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.select[data-popup-open] {
|
|
14
|
-
@apply outline-2 outline-offset-2 outline-
|
|
14
|
+
@apply outline-2 outline-offset-2 outline-focus;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
.select[data-placeholder] {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
bg-transparent hover:bg-surface-strong
|
|
67
67
|
cursor-pointer select-none no-underline
|
|
68
68
|
transition-colors duration-150
|
|
69
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
69
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
.sidebar-item[aria-current="page"],
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
bg-transparent hover:bg-surface-strong
|
|
106
106
|
cursor-pointer select-none
|
|
107
107
|
transition-colors duration-150
|
|
108
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
108
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
109
109
|
list-style: none;
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
bg-transparent hover:bg-surface-strong
|
|
161
161
|
cursor-pointer select-none no-underline
|
|
162
162
|
transition-colors duration-150
|
|
163
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
163
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
.sidebar-subitem[aria-current="page"],
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
.sidebar-collapse-toggle:has(.sidebar-toggle:focus-visible) {
|
|
185
|
-
@apply outline-2 outline-offset-2 outline-
|
|
185
|
+
@apply outline-2 outline-offset-2 outline-focus;
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
/* Chevron-left when expanded; flips to chevron-right when collapsed. */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
rounded-full border border-transparent
|
|
5
5
|
cursor-pointer
|
|
6
6
|
transition-colors duration-150
|
|
7
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
7
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
8
8
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
9
9
|
}
|
|
10
10
|
|
package/src/components/table.css
CHANGED
package/src/components/tabs.css
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
page (e.g. Starlight's own <Tabs> component) doesn't pick them up. */
|
|
10
10
|
.tabs .tab-list {
|
|
11
11
|
@apply inline-flex items-center gap-1 border-b border-border;
|
|
12
|
-
/*
|
|
12
|
+
/* Containing block for the sliding ::before marker (see @supports below) */
|
|
13
13
|
position: relative;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
text-text-muted bg-transparent
|
|
21
21
|
border-0 cursor-pointer select-none
|
|
22
22
|
transition-colors duration-150
|
|
23
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
23
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
24
24
|
hover:text-text
|
|
25
25
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
26
26
|
}
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.tabs .tab-input:focus-visible + .tab {
|
|
57
|
-
@apply outline-2 outline-offset-2 outline-
|
|
57
|
+
@apply outline-2 outline-offset-2 outline-focus;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/* Default — underline marker on the active tab. The pseudo sits below the
|
|
@@ -86,8 +86,10 @@
|
|
|
86
86
|
@apply gap-0 p-0.5 border border-border rounded-md bg-surface-muted;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
/* Sit above the sliding thumb (the anchored ::before below) so labels stay
|
|
90
|
+
legible while it passes behind them. */
|
|
89
91
|
.tabs-boxed .tab {
|
|
90
|
-
@apply rounded;
|
|
92
|
+
@apply rounded relative z-[1];
|
|
91
93
|
}
|
|
92
94
|
|
|
93
95
|
.tabs-boxed .tab[data-selected],
|
|
@@ -96,6 +98,83 @@
|
|
|
96
98
|
@apply bg-surface text-text shadow-sm;
|
|
97
99
|
}
|
|
98
100
|
|
|
101
|
+
/* Sliding active marker — the default, with zero extra DOM. The selected tab
|
|
102
|
+
becomes a CSS anchor; a single pseudo on the .tab-list tracks it via
|
|
103
|
+
anchor() insets, and the browser interpolates those insets as the anchor
|
|
104
|
+
moves between tabs — so vanilla `:checked` markup and React both slide.
|
|
105
|
+
`anchor-scope` confines the name to each list so multiple tab sets on a
|
|
106
|
+
page don't cross-anchor; gating the whole block on its support keeps the
|
|
107
|
+
effect off where it'd misbehave, leaving the per-tab marker above as the
|
|
108
|
+
fallback. */
|
|
109
|
+
@supports (anchor-scope: --x) {
|
|
110
|
+
.tabs .tab-list {
|
|
111
|
+
anchor-scope: --tab-thumb;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.tabs .tab[data-selected],
|
|
115
|
+
.tabs .tab[aria-selected="true"],
|
|
116
|
+
.tabs .tab-input:checked + .tab {
|
|
117
|
+
anchor-name: --tab-thumb;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.tabs .tab-list::before {
|
|
121
|
+
content: "";
|
|
122
|
+
position: absolute;
|
|
123
|
+
position-anchor: --tab-thumb;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Bordered: a 2px bar sliding along the list's bottom edge — replaces the
|
|
127
|
+
per-tab ::after grow. */
|
|
128
|
+
.tabs:not(.tabs-boxed) .tab::after {
|
|
129
|
+
display: none;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.tabs:not(.tabs-boxed) .tab-list::before {
|
|
133
|
+
@apply bg-primary;
|
|
134
|
+
left: anchor(left);
|
|
135
|
+
right: anchor(right);
|
|
136
|
+
inset-block-end: -1px;
|
|
137
|
+
block-size: 2px;
|
|
138
|
+
transition:
|
|
139
|
+
left 180ms ease,
|
|
140
|
+
right 180ms ease;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* Vertical bordered: bar on the trailing edge, sliding vertically. */
|
|
144
|
+
.tabs[data-orientation="vertical"]:not(.tabs-boxed) .tab-list::before {
|
|
145
|
+
inset-inline: auto;
|
|
146
|
+
inset-inline-end: -1px;
|
|
147
|
+
inline-size: 2px;
|
|
148
|
+
top: anchor(top);
|
|
149
|
+
bottom: anchor(bottom);
|
|
150
|
+
block-size: auto;
|
|
151
|
+
transition:
|
|
152
|
+
top 180ms ease,
|
|
153
|
+
bottom 180ms ease;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Boxed: a full-size thumb sliding behind the active label. */
|
|
157
|
+
.tabs-boxed .tab[data-selected],
|
|
158
|
+
.tabs-boxed .tab[aria-selected="true"],
|
|
159
|
+
.tabs-boxed .tab-input:checked + .tab {
|
|
160
|
+
@apply bg-transparent shadow-none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.tabs-boxed .tab-list::before {
|
|
164
|
+
top: anchor(top);
|
|
165
|
+
right: anchor(right);
|
|
166
|
+
bottom: anchor(bottom);
|
|
167
|
+
left: anchor(left);
|
|
168
|
+
z-index: 0;
|
|
169
|
+
@apply rounded bg-surface shadow-sm;
|
|
170
|
+
transition:
|
|
171
|
+
top 180ms ease,
|
|
172
|
+
right 180ms ease,
|
|
173
|
+
bottom 180ms ease,
|
|
174
|
+
left 180ms ease;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
99
178
|
/* Full width — list stretches across the container, tabs share space evenly. */
|
|
100
179
|
.tabs-full-width:not([data-orientation="vertical"]) .tab-list {
|
|
101
180
|
@apply flex w-full;
|
|
@@ -167,4 +246,11 @@
|
|
|
167
246
|
.tabs[data-orientation="vertical"]:not(.tabs-boxed) .tab[aria-selected="true"]::after {
|
|
168
247
|
transform: scaleY(1);
|
|
169
248
|
}
|
|
249
|
+
|
|
250
|
+
@media (prefers-reduced-motion: reduce) {
|
|
251
|
+
.tabs .tab-list::before,
|
|
252
|
+
.tabs:not(.tabs-boxed) .tab::after {
|
|
253
|
+
transition: none;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
170
256
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
border border-border hover:border-border-strong
|
|
7
7
|
transition-colors duration-150
|
|
8
8
|
placeholder:text-text-muted
|
|
9
|
-
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-
|
|
9
|
+
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus
|
|
10
10
|
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
11
11
|
}
|
|
12
12
|
|
package/src/theme.css
CHANGED
|
@@ -219,12 +219,25 @@
|
|
|
219
219
|
--color-code-surface: light-dark(var(--color-base-150), var(--color-base-950));
|
|
220
220
|
--color-code-text: light-dark(var(--color-base-800), var(--color-base-200));
|
|
221
221
|
|
|
222
|
-
/* Primary —
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
222
|
+
/* Primary — high-contrast neutral (ink). Inverts with the mode: near-black
|
|
223
|
+
on light surfaces, near-white on dark ones, so a solid `btn-primary` fill
|
|
224
|
+
always reads against the surface. Unlike the colored accents, `-hover`
|
|
225
|
+
moves *toward* the surface (you can't darken past ink), and `-muted` is a
|
|
226
|
+
neutral gray wash — `bg-primary-muted` selected/active states read as a
|
|
227
|
+
quiet fill rather than a colored highlight. The interactive blue that used
|
|
228
|
+
to live here now drives `--color-link` / `--color-focus` and `info`. */
|
|
229
|
+
--color-primary: light-dark(var(--color-black), var(--color-paper));
|
|
230
|
+
--color-primary-hover: light-dark(var(--color-base-800), var(--color-base-200));
|
|
231
|
+
--color-primary-muted: light-dark(var(--color-base-150), var(--color-base-800));
|
|
226
232
|
--color-primary-content: light-dark(var(--color-paper), var(--color-black));
|
|
227
233
|
|
|
234
|
+
/* Link / focus — the interactive blue (Flexoki blue, formerly `primary`).
|
|
235
|
+
Split into two tokens so link text and focus rings can be retinted
|
|
236
|
+
independently of the `info` status color, even though both start blue. */
|
|
237
|
+
--color-link: light-dark(var(--color-blue-600), var(--color-blue-400));
|
|
238
|
+
--color-link-hover: light-dark(var(--color-blue-700), var(--color-blue-300));
|
|
239
|
+
--color-focus: light-dark(var(--color-blue-600), var(--color-blue-400));
|
|
240
|
+
|
|
228
241
|
/* System accent — per-app brand signal. Drives the navbar's 2px bottom
|
|
229
242
|
stripe and the footer's matching top stripe (both always on), plus
|
|
230
243
|
`.brand-tile` backgrounds. Defaults to a neutral gray so an un-branded
|
|
@@ -267,10 +280,10 @@
|
|
|
267
280
|
--color-warning-muted: light-dark(var(--color-yellow-50), var(--color-yellow-950));
|
|
268
281
|
--color-warning-content: var(--color-black);
|
|
269
282
|
|
|
270
|
-
/* Info —
|
|
271
|
-
--color-info: light-dark(var(--color-
|
|
272
|
-
--color-info-hover: light-dark(var(--color-
|
|
273
|
-
--color-info-muted: light-dark(var(--color-
|
|
283
|
+
/* Info — Flexoki blue (the calm "FYI" status color) */
|
|
284
|
+
--color-info: light-dark(var(--color-blue-600), var(--color-blue-400));
|
|
285
|
+
--color-info-hover: light-dark(var(--color-blue-700), var(--color-blue-300));
|
|
286
|
+
--color-info-muted: light-dark(var(--color-blue-50), var(--color-blue-950));
|
|
274
287
|
--color-info-content: light-dark(var(--color-paper), var(--color-black));
|
|
275
288
|
}
|
|
276
289
|
|
package/src/utilities.css
CHANGED
|
@@ -151,6 +151,11 @@
|
|
|
151
151
|
"{,hover:,focus:,focus-visible:,active:}{bg,text,border,outline,ring,shadow}-{primary,system-accent,danger,success,warning,info}{,-hover,-muted,-content}"
|
|
152
152
|
);
|
|
153
153
|
|
|
154
|
+
/* Link / focus — interactive blue. Narrower shapes than the accents above:
|
|
155
|
+
focus rings only need `outline-focus`, links only `text-link{,-hover}`. */
|
|
156
|
+
@source inline("{,focus-visible:}outline-focus");
|
|
157
|
+
@source inline("{,hover:,focus-visible:}text-link{,-hover}");
|
|
158
|
+
|
|
154
159
|
/* Cursor + opacity — interactive */
|
|
155
160
|
@source inline(
|
|
156
161
|
"{,hover:,focus:,focus-visible:,active:}cursor-{auto,default,pointer,wait,text,move,help,not-allowed,none,progress,grab,grabbing,col-resize,row-resize,zoom-in,zoom-out}"
|