@neo-ui-kit/react 1.0.0 → 1.0.2
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/README.md +32 -4
- package/dist/components/artwork/DatabaseArt/styles.css +58 -58
- package/dist/components/artwork/Landscape/styles.css +79 -79
- package/dist/components/artwork/Planet/styles.css +52 -52
- package/dist/components/artwork/QuantumField/QuantumFieldExperience.d.ts +6 -2
- package/dist/components/artwork/QuantumField/UPSTREAM-LICENSE.txt +21 -21
- package/dist/components/artwork/ServerArt/styles.css +43 -43
- package/dist/components/artwork/Spectrum/styles.css +35 -35
- package/dist/components/controls/Autocomplete/styles.css +1 -1
- package/dist/components/controls/Checkbox/styles.css +58 -58
- package/dist/components/controls/InputBase/styles.css +374 -374
- package/dist/components/controls/Link/styles.css +50 -50
- package/dist/components/controls/SegmentedControl/styles.css +9 -9
- package/dist/components/controls/Switch/styles.css +54 -54
- package/dist/components/controls/Tabs/styles.css +239 -239
- package/dist/components/controls/ToggleButton/styles.css +49 -49
- package/dist/components/controls/shared.css +694 -694
- package/dist/components/editor/shared.css +1 -1
- package/dist/components/effects/Beacon/styles.css +38 -38
- package/dist/components/effects/Equalizer/styles.css +34 -34
- package/dist/components/effects/GlowText/styles.css +56 -56
- package/dist/components/effects/Marquee/styles.css +46 -46
- package/dist/components/effects/Reveal/styles.css +25 -25
- package/dist/components/effects/Shimmer/styles.css +48 -48
- package/dist/components/effects/Sparkles/styles.css +28 -28
- package/dist/components/effects/Spotlight/styles.css +45 -45
- package/dist/components/effects/Tilt/styles.css +67 -67
- package/dist/components/feedback/CollapsibleSection/styles.css +76 -76
- package/dist/components/feedback/DataTable/styles.css +522 -522
- package/dist/components/feedback/EmptyState/styles.css +80 -80
- package/dist/components/feedback/KeyValueList/styles.css +51 -51
- package/dist/components/feedback/MenuItem/styles.css +71 -71
- package/dist/components/feedback/Popover/styles.css +44 -44
- package/dist/components/feedback/Steps/styles.css +152 -152
- package/dist/components/feedback/Toast/styles.css +89 -89
- package/dist/components/forms/FormFields/styles.css +21 -21
- package/dist/components/foundation/ThemeProvider/styles.css +31 -31
- package/dist/components/layout/Avatar/styles.css +151 -151
- package/dist/components/layout/Card/styles.css +37 -37
- package/dist/components/layout/DialogActions/styles.css +31 -31
- package/dist/components/layout/DialogBody/styles.css +17 -17
- package/dist/components/layout/Illustration/styles.css +104 -104
- package/dist/components/layout/ScrollArea/styles.css +61 -61
- package/dist/components/layout/TabPanel/styles.css +16 -16
- package/dist/components/layout/shared.css +65 -65
- package/dist/components/media/AudioPlayer/styles.css +86 -86
- package/dist/components/media/LevelMeter/styles.css +30 -30
- package/dist/components/media/MelodyRoll/styles.css +196 -196
- package/dist/components/media/RotaryKnob/styles.css +319 -319
- package/dist/components/media/Sparkline/styles.css +69 -69
- package/dist/components/media/WaveDecoration/styles.css +1 -1
- package/dist/components/media/shared.css +7 -7
- package/dist/fonts/melodix.css +123 -123
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2106 -2104
- package/dist/theme/base.css +210 -210
- package/package.json +1 -1
|
@@ -1,239 +1,239 @@
|
|
|
1
|
-
/* Styles owned by Tabs: a dark track with a neon rail, and a ruby "blade" that flies to the selected tab. */
|
|
2
|
-
.ad-tabs {
|
|
3
|
-
--ad-tabs-pad: 0.25rem;
|
|
4
|
-
--ad-tabs-spring: cubic-bezier(0.34, 1.45, 0.5, 1);
|
|
5
|
-
position: relative;
|
|
6
|
-
display: flex;
|
|
7
|
-
gap: 0.125rem;
|
|
8
|
-
min-width: 0;
|
|
9
|
-
padding: var(--ad-tabs-pad) var(--ad-tabs-pad)
|
|
10
|
-
calc(var(--ad-tabs-pad) + 0.3rem);
|
|
11
|
-
border: 0.0625rem solid rgb(from var(--ad-primary-600) r g b / 0.24);
|
|
12
|
-
border-radius: calc(var(--ad-size-radius) + 0.25rem);
|
|
13
|
-
background:
|
|
14
|
-
linear-gradient(180deg, #ffffff06, transparent 40%),
|
|
15
|
-
linear-gradient(180deg, var(--ad-neutral-900), var(--ad-neutral-950));
|
|
16
|
-
box-shadow:
|
|
17
|
-
inset 0 0.0625rem 0.1875rem #000c,
|
|
18
|
-
inset 0 -0.0625rem 0 #ffffff08;
|
|
19
|
-
isolation: isolate;
|
|
20
|
-
/* Tabs keep their labels whole; when they do not fit, the row scrolls. */
|
|
21
|
-
overflow-x: auto;
|
|
22
|
-
overscroll-behavior-x: contain;
|
|
23
|
-
scrollbar-width: none;
|
|
24
|
-
}
|
|
25
|
-
.ad-tabs::-webkit-scrollbar {
|
|
26
|
-
display: none;
|
|
27
|
-
}
|
|
28
|
-
/* The rail: a dim line along the bottom that lights up under the blade. */
|
|
29
|
-
.ad-tabs::after {
|
|
30
|
-
content: "";
|
|
31
|
-
position: absolute;
|
|
32
|
-
z-index: -3;
|
|
33
|
-
left: calc(var(--ad-tabs-pad) + 0.5rem);
|
|
34
|
-
right: calc(var(--ad-tabs-pad) + 0.5rem);
|
|
35
|
-
bottom: 0.25rem;
|
|
36
|
-
height: 0.0625rem;
|
|
37
|
-
background: linear-gradient(
|
|
38
|
-
90deg,
|
|
39
|
-
transparent,
|
|
40
|
-
rgb(from var(--ad-primary) r g b / 0.19) 15%,
|
|
41
|
-
rgb(from var(--ad-primary) r g b / 0.19) 85%,
|
|
42
|
-
transparent
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
.ad-tabs > .ad-tab {
|
|
46
|
-
flex: 1 0 auto;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/* Blade geometry: chamfered corners and a notch cut into the bottom edge. */
|
|
50
|
-
:is(.ad-tabs, .ad-tab) {
|
|
51
|
-
--ad-blade-cut: calc(var(--ad-size-radius) * 0.75);
|
|
52
|
-
--ad-blade-notch: 0.4rem;
|
|
53
|
-
--ad-blade: polygon(
|
|
54
|
-
var(--ad-blade-cut) 0,
|
|
55
|
-
calc(100% - var(--ad-blade-cut)) 0,
|
|
56
|
-
100% var(--ad-blade-cut),
|
|
57
|
-
100% calc(100% - var(--ad-blade-cut)),
|
|
58
|
-
calc(100% - var(--ad-blade-cut)) 100%,
|
|
59
|
-
calc(50% + var(--ad-blade-notch)) 100%,
|
|
60
|
-
50% calc(100% - var(--ad-blade-notch) * 0.75),
|
|
61
|
-
calc(50% - var(--ad-blade-notch)) 100%,
|
|
62
|
-
var(--ad-blade-cut) 100%,
|
|
63
|
-
0 calc(100% - var(--ad-blade-cut)),
|
|
64
|
-
0 var(--ad-blade-cut)
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.ad-tabs-indicator,
|
|
69
|
-
.ad-tabs-trail {
|
|
70
|
-
position: absolute;
|
|
71
|
-
top: var(--ad-tabs-pad);
|
|
72
|
-
bottom: calc(var(--ad-tabs-pad) + 0.3rem);
|
|
73
|
-
left: 0;
|
|
74
|
-
width: var(--ad-tabs-w);
|
|
75
|
-
transform: translateX(var(--ad-tabs-x));
|
|
76
|
-
pointer-events: none;
|
|
77
|
-
}
|
|
78
|
-
.ad-tabs-indicator {
|
|
79
|
-
z-index: -1;
|
|
80
|
-
transition:
|
|
81
|
-
transform 0.55s var(--ad-tabs-spring),
|
|
82
|
-
width 0.45s var(--ad-tabs-spring),
|
|
83
|
-
scale 0.3s ease-out;
|
|
84
|
-
}
|
|
85
|
-
/* The blade breathes: a soft glow under it swells and settles (opacity only; the blur is still). */
|
|
86
|
-
.ad-tabs-indicator::after {
|
|
87
|
-
content: "";
|
|
88
|
-
position: absolute;
|
|
89
|
-
inset: -0.35rem -0.25rem -0.15rem;
|
|
90
|
-
z-index: -1;
|
|
91
|
-
border-radius: var(--ad-size-radius);
|
|
92
|
-
background: radial-gradient(closest-side, rgb(from var(--ad-primary) r g b / 0.55), transparent);
|
|
93
|
-
filter: blur(0.45rem);
|
|
94
|
-
opacity: 0;
|
|
95
|
-
animation: ad-tabs-breathe 3.2s ease-in-out infinite;
|
|
96
|
-
will-change: opacity;
|
|
97
|
-
}
|
|
98
|
-
/* The blade's glow, drawn once: a still copy of its shape under it carries the shadows, so the
|
|
99
|
-
glint and the breath above never make them re-blur. (A filter on the clipped shape itself
|
|
100
|
-
would be clipped away, hence the wrapper.) */
|
|
101
|
-
.ad-tabs-halo {
|
|
102
|
-
position: absolute;
|
|
103
|
-
inset: 0;
|
|
104
|
-
z-index: -1;
|
|
105
|
-
filter: drop-shadow(0 0 0.4rem rgb(from var(--ad-primary) r g b / 0.4))
|
|
106
|
-
drop-shadow(0 0.2rem 0.6rem rgb(from var(--ad-primary) r g b / 0.2));
|
|
107
|
-
}
|
|
108
|
-
.ad-tabs-halo::before {
|
|
109
|
-
content: "";
|
|
110
|
-
position: absolute;
|
|
111
|
-
inset: 0;
|
|
112
|
-
clip-path: var(--ad-blade);
|
|
113
|
-
background: var(--ad-primary-800);
|
|
114
|
-
}
|
|
115
|
-
/* Neon edge: the blade's own background is the edge, a glint runs along it. */
|
|
116
|
-
.ad-tabs-blade {
|
|
117
|
-
position: absolute;
|
|
118
|
-
inset: 0;
|
|
119
|
-
isolation: isolate;
|
|
120
|
-
clip-path: var(--ad-blade);
|
|
121
|
-
}
|
|
122
|
-
/* The edge: two periods of the glint gradient side by side, sliding one period to the right.
|
|
123
|
-
It draws exactly what a moving background-position drew, but only moves a layer. */
|
|
124
|
-
.ad-tabs-blade-edge {
|
|
125
|
-
position: absolute;
|
|
126
|
-
top: 0;
|
|
127
|
-
bottom: 0;
|
|
128
|
-
left: 0;
|
|
129
|
-
z-index: -1;
|
|
130
|
-
width: 600%;
|
|
131
|
-
background: linear-gradient(
|
|
132
|
-
100deg,
|
|
133
|
-
var(--ad-secondary) 0%,
|
|
134
|
-
var(--ad-secondary-200) 38%,
|
|
135
|
-
var(--ad-neutral-200) 48%,
|
|
136
|
-
var(--ad-secondary-200) 58%,
|
|
137
|
-
var(--ad-primary-600) 100%
|
|
138
|
-
)
|
|
139
|
-
0 0 / 50% 100%;
|
|
140
|
-
transform: translateX(-50%);
|
|
141
|
-
animation: ad-tabs-glint 3.6s linear infinite;
|
|
142
|
-
will-change: transform;
|
|
143
|
-
}
|
|
144
|
-
/* Fill, one hairline inside the edge, with a hot core near the notch. */
|
|
145
|
-
.ad-tabs-blade::before {
|
|
146
|
-
content: "";
|
|
147
|
-
position: absolute;
|
|
148
|
-
inset: 0.0625rem;
|
|
149
|
-
clip-path: var(--ad-blade);
|
|
150
|
-
background:
|
|
151
|
-
radial-gradient(60% 90% at 50% 120%, rgb(from var(--ad-primary) r g b / 0.67), transparent 70%),
|
|
152
|
-
linear-gradient(180deg, #ffffff22, transparent 35%),
|
|
153
|
-
linear-gradient(180deg, var(--ad-primary-700), var(--ad-primary-800) 62%, var(--ad-primary-900));
|
|
154
|
-
}
|
|
155
|
-
/* A light sweep crosses the fill now and then. */
|
|
156
|
-
.ad-tabs-blade::after {
|
|
157
|
-
content: "";
|
|
158
|
-
position: absolute;
|
|
159
|
-
inset: 0;
|
|
160
|
-
clip-path: var(--ad-blade);
|
|
161
|
-
background: linear-gradient(105deg, transparent 35%, #ffffff30 48%, transparent 60%);
|
|
162
|
-
transform: translateX(-100%);
|
|
163
|
-
animation: ad-tabs-sweep 5.5s ease-in-out infinite;
|
|
164
|
-
}
|
|
165
|
-
/* Comet trail: a blurred copy that lags behind while the blade travels. */
|
|
166
|
-
.ad-tabs-trail {
|
|
167
|
-
z-index: -2;
|
|
168
|
-
border-radius: var(--ad-size-radius);
|
|
169
|
-
background: radial-gradient(closest-side, rgb(from var(--ad-primary) r g b / 0.5), transparent);
|
|
170
|
-
filter: blur(0.6rem);
|
|
171
|
-
opacity: 0;
|
|
172
|
-
transition:
|
|
173
|
-
transform 0.8s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
174
|
-
width 0.8s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
175
|
-
opacity 0.5s;
|
|
176
|
-
}
|
|
177
|
-
/* Rail glow under the blade, with a spark that drops from the notch. */
|
|
178
|
-
.ad-tabs-rail {
|
|
179
|
-
position: absolute;
|
|
180
|
-
z-index: -2;
|
|
181
|
-
left: 0;
|
|
182
|
-
bottom: 0.1875rem;
|
|
183
|
-
width: var(--ad-tabs-w);
|
|
184
|
-
height: 0.1875rem;
|
|
185
|
-
transform: translateX(var(--ad-tabs-x));
|
|
186
|
-
border-radius: 999rem;
|
|
187
|
-
background: radial-gradient(closest-side, var(--ad-neutral-200), var(--ad-primary) 45%, transparent);
|
|
188
|
-
box-shadow: 0 0 0.75rem 0.15rem rgb(from var(--ad-primary) r g b / 0.53);
|
|
189
|
-
pointer-events: none;
|
|
190
|
-
transition:
|
|
191
|
-
transform 0.6s var(--ad-tabs-spring),
|
|
192
|
-
width 0.5s var(--ad-tabs-spring);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/* While travelling the blade squashes and flares, the trail shows. */
|
|
196
|
-
.ad-tabs[data-moving] .ad-tabs-indicator {
|
|
197
|
-
scale: 1.04 0.86;
|
|
198
|
-
filter: drop-shadow(0 0 0.8rem rgb(from var(--ad-primary) r g b / 0.67)) brightness(1.25);
|
|
199
|
-
}
|
|
200
|
-
.ad-tabs[data-moving] .ad-tabs-trail {
|
|
201
|
-
opacity: 1;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/* Inside Tabs the blade is the selection, so selected tabs draw no fill of their own. */
|
|
205
|
-
.ad-tabs > .ad-tab[aria-selected="true"]::before {
|
|
206
|
-
display: none;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
@keyframes ad-tabs-glint {
|
|
210
|
-
to {
|
|
211
|
-
transform: translateX(0);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
@keyframes ad-tabs-sweep {
|
|
215
|
-
0%,
|
|
216
|
-
55% {
|
|
217
|
-
transform: translateX(-100%);
|
|
218
|
-
}
|
|
219
|
-
85%,
|
|
220
|
-
100% {
|
|
221
|
-
transform: translateX(100%);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
@keyframes ad-tabs-breathe {
|
|
225
|
-
50% {
|
|
226
|
-
opacity: 1;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
@media (prefers-reduced-motion: reduce) {
|
|
230
|
-
.ad-tabs-indicator,
|
|
231
|
-
.ad-tabs-trail,
|
|
232
|
-
.ad-tabs-rail,
|
|
233
|
-
.ad-tabs-blade-edge,
|
|
234
|
-
.ad-tabs-blade::after,
|
|
235
|
-
.ad-tabs-indicator::after {
|
|
236
|
-
transition: none;
|
|
237
|
-
animation: none;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
1
|
+
/* Styles owned by Tabs: a dark track with a neon rail, and a ruby "blade" that flies to the selected tab. */
|
|
2
|
+
.ad-tabs {
|
|
3
|
+
--ad-tabs-pad: 0.25rem;
|
|
4
|
+
--ad-tabs-spring: cubic-bezier(0.34, 1.45, 0.5, 1);
|
|
5
|
+
position: relative;
|
|
6
|
+
display: flex;
|
|
7
|
+
gap: 0.125rem;
|
|
8
|
+
min-width: 0;
|
|
9
|
+
padding: var(--ad-tabs-pad) var(--ad-tabs-pad)
|
|
10
|
+
calc(var(--ad-tabs-pad) + 0.3rem);
|
|
11
|
+
border: 0.0625rem solid rgb(from var(--ad-primary-600) r g b / 0.24);
|
|
12
|
+
border-radius: calc(var(--ad-size-radius) + 0.25rem);
|
|
13
|
+
background:
|
|
14
|
+
linear-gradient(180deg, #ffffff06, transparent 40%),
|
|
15
|
+
linear-gradient(180deg, var(--ad-neutral-900), var(--ad-neutral-950));
|
|
16
|
+
box-shadow:
|
|
17
|
+
inset 0 0.0625rem 0.1875rem #000c,
|
|
18
|
+
inset 0 -0.0625rem 0 #ffffff08;
|
|
19
|
+
isolation: isolate;
|
|
20
|
+
/* Tabs keep their labels whole; when they do not fit, the row scrolls. */
|
|
21
|
+
overflow-x: auto;
|
|
22
|
+
overscroll-behavior-x: contain;
|
|
23
|
+
scrollbar-width: none;
|
|
24
|
+
}
|
|
25
|
+
.ad-tabs::-webkit-scrollbar {
|
|
26
|
+
display: none;
|
|
27
|
+
}
|
|
28
|
+
/* The rail: a dim line along the bottom that lights up under the blade. */
|
|
29
|
+
.ad-tabs::after {
|
|
30
|
+
content: "";
|
|
31
|
+
position: absolute;
|
|
32
|
+
z-index: -3;
|
|
33
|
+
left: calc(var(--ad-tabs-pad) + 0.5rem);
|
|
34
|
+
right: calc(var(--ad-tabs-pad) + 0.5rem);
|
|
35
|
+
bottom: 0.25rem;
|
|
36
|
+
height: 0.0625rem;
|
|
37
|
+
background: linear-gradient(
|
|
38
|
+
90deg,
|
|
39
|
+
transparent,
|
|
40
|
+
rgb(from var(--ad-primary) r g b / 0.19) 15%,
|
|
41
|
+
rgb(from var(--ad-primary) r g b / 0.19) 85%,
|
|
42
|
+
transparent
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
.ad-tabs > .ad-tab {
|
|
46
|
+
flex: 1 0 auto;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Blade geometry: chamfered corners and a notch cut into the bottom edge. */
|
|
50
|
+
:is(.ad-tabs, .ad-tab) {
|
|
51
|
+
--ad-blade-cut: calc(var(--ad-size-radius) * 0.75);
|
|
52
|
+
--ad-blade-notch: 0.4rem;
|
|
53
|
+
--ad-blade: polygon(
|
|
54
|
+
var(--ad-blade-cut) 0,
|
|
55
|
+
calc(100% - var(--ad-blade-cut)) 0,
|
|
56
|
+
100% var(--ad-blade-cut),
|
|
57
|
+
100% calc(100% - var(--ad-blade-cut)),
|
|
58
|
+
calc(100% - var(--ad-blade-cut)) 100%,
|
|
59
|
+
calc(50% + var(--ad-blade-notch)) 100%,
|
|
60
|
+
50% calc(100% - var(--ad-blade-notch) * 0.75),
|
|
61
|
+
calc(50% - var(--ad-blade-notch)) 100%,
|
|
62
|
+
var(--ad-blade-cut) 100%,
|
|
63
|
+
0 calc(100% - var(--ad-blade-cut)),
|
|
64
|
+
0 var(--ad-blade-cut)
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.ad-tabs-indicator,
|
|
69
|
+
.ad-tabs-trail {
|
|
70
|
+
position: absolute;
|
|
71
|
+
top: var(--ad-tabs-pad);
|
|
72
|
+
bottom: calc(var(--ad-tabs-pad) + 0.3rem);
|
|
73
|
+
left: 0;
|
|
74
|
+
width: var(--ad-tabs-w);
|
|
75
|
+
transform: translateX(var(--ad-tabs-x));
|
|
76
|
+
pointer-events: none;
|
|
77
|
+
}
|
|
78
|
+
.ad-tabs-indicator {
|
|
79
|
+
z-index: -1;
|
|
80
|
+
transition:
|
|
81
|
+
transform 0.55s var(--ad-tabs-spring),
|
|
82
|
+
width 0.45s var(--ad-tabs-spring),
|
|
83
|
+
scale 0.3s ease-out;
|
|
84
|
+
}
|
|
85
|
+
/* The blade breathes: a soft glow under it swells and settles (opacity only; the blur is still). */
|
|
86
|
+
.ad-tabs-indicator::after {
|
|
87
|
+
content: "";
|
|
88
|
+
position: absolute;
|
|
89
|
+
inset: -0.35rem -0.25rem -0.15rem;
|
|
90
|
+
z-index: -1;
|
|
91
|
+
border-radius: var(--ad-size-radius);
|
|
92
|
+
background: radial-gradient(closest-side, rgb(from var(--ad-primary) r g b / 0.55), transparent);
|
|
93
|
+
filter: blur(0.45rem);
|
|
94
|
+
opacity: 0;
|
|
95
|
+
animation: ad-tabs-breathe 3.2s ease-in-out infinite;
|
|
96
|
+
will-change: opacity;
|
|
97
|
+
}
|
|
98
|
+
/* The blade's glow, drawn once: a still copy of its shape under it carries the shadows, so the
|
|
99
|
+
glint and the breath above never make them re-blur. (A filter on the clipped shape itself
|
|
100
|
+
would be clipped away, hence the wrapper.) */
|
|
101
|
+
.ad-tabs-halo {
|
|
102
|
+
position: absolute;
|
|
103
|
+
inset: 0;
|
|
104
|
+
z-index: -1;
|
|
105
|
+
filter: drop-shadow(0 0 0.4rem rgb(from var(--ad-primary) r g b / 0.4))
|
|
106
|
+
drop-shadow(0 0.2rem 0.6rem rgb(from var(--ad-primary) r g b / 0.2));
|
|
107
|
+
}
|
|
108
|
+
.ad-tabs-halo::before {
|
|
109
|
+
content: "";
|
|
110
|
+
position: absolute;
|
|
111
|
+
inset: 0;
|
|
112
|
+
clip-path: var(--ad-blade);
|
|
113
|
+
background: var(--ad-primary-800);
|
|
114
|
+
}
|
|
115
|
+
/* Neon edge: the blade's own background is the edge, a glint runs along it. */
|
|
116
|
+
.ad-tabs-blade {
|
|
117
|
+
position: absolute;
|
|
118
|
+
inset: 0;
|
|
119
|
+
isolation: isolate;
|
|
120
|
+
clip-path: var(--ad-blade);
|
|
121
|
+
}
|
|
122
|
+
/* The edge: two periods of the glint gradient side by side, sliding one period to the right.
|
|
123
|
+
It draws exactly what a moving background-position drew, but only moves a layer. */
|
|
124
|
+
.ad-tabs-blade-edge {
|
|
125
|
+
position: absolute;
|
|
126
|
+
top: 0;
|
|
127
|
+
bottom: 0;
|
|
128
|
+
left: 0;
|
|
129
|
+
z-index: -1;
|
|
130
|
+
width: 600%;
|
|
131
|
+
background: linear-gradient(
|
|
132
|
+
100deg,
|
|
133
|
+
var(--ad-secondary) 0%,
|
|
134
|
+
var(--ad-secondary-200) 38%,
|
|
135
|
+
var(--ad-neutral-200) 48%,
|
|
136
|
+
var(--ad-secondary-200) 58%,
|
|
137
|
+
var(--ad-primary-600) 100%
|
|
138
|
+
)
|
|
139
|
+
0 0 / 50% 100%;
|
|
140
|
+
transform: translateX(-50%);
|
|
141
|
+
animation: ad-tabs-glint 3.6s linear infinite;
|
|
142
|
+
will-change: transform;
|
|
143
|
+
}
|
|
144
|
+
/* Fill, one hairline inside the edge, with a hot core near the notch. */
|
|
145
|
+
.ad-tabs-blade::before {
|
|
146
|
+
content: "";
|
|
147
|
+
position: absolute;
|
|
148
|
+
inset: 0.0625rem;
|
|
149
|
+
clip-path: var(--ad-blade);
|
|
150
|
+
background:
|
|
151
|
+
radial-gradient(60% 90% at 50% 120%, rgb(from var(--ad-primary) r g b / 0.67), transparent 70%),
|
|
152
|
+
linear-gradient(180deg, #ffffff22, transparent 35%),
|
|
153
|
+
linear-gradient(180deg, var(--ad-primary-700), var(--ad-primary-800) 62%, var(--ad-primary-900));
|
|
154
|
+
}
|
|
155
|
+
/* A light sweep crosses the fill now and then. */
|
|
156
|
+
.ad-tabs-blade::after {
|
|
157
|
+
content: "";
|
|
158
|
+
position: absolute;
|
|
159
|
+
inset: 0;
|
|
160
|
+
clip-path: var(--ad-blade);
|
|
161
|
+
background: linear-gradient(105deg, transparent 35%, #ffffff30 48%, transparent 60%);
|
|
162
|
+
transform: translateX(-100%);
|
|
163
|
+
animation: ad-tabs-sweep 5.5s ease-in-out infinite;
|
|
164
|
+
}
|
|
165
|
+
/* Comet trail: a blurred copy that lags behind while the blade travels. */
|
|
166
|
+
.ad-tabs-trail {
|
|
167
|
+
z-index: -2;
|
|
168
|
+
border-radius: var(--ad-size-radius);
|
|
169
|
+
background: radial-gradient(closest-side, rgb(from var(--ad-primary) r g b / 0.5), transparent);
|
|
170
|
+
filter: blur(0.6rem);
|
|
171
|
+
opacity: 0;
|
|
172
|
+
transition:
|
|
173
|
+
transform 0.8s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
174
|
+
width 0.8s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
175
|
+
opacity 0.5s;
|
|
176
|
+
}
|
|
177
|
+
/* Rail glow under the blade, with a spark that drops from the notch. */
|
|
178
|
+
.ad-tabs-rail {
|
|
179
|
+
position: absolute;
|
|
180
|
+
z-index: -2;
|
|
181
|
+
left: 0;
|
|
182
|
+
bottom: 0.1875rem;
|
|
183
|
+
width: var(--ad-tabs-w);
|
|
184
|
+
height: 0.1875rem;
|
|
185
|
+
transform: translateX(var(--ad-tabs-x));
|
|
186
|
+
border-radius: 999rem;
|
|
187
|
+
background: radial-gradient(closest-side, var(--ad-neutral-200), var(--ad-primary) 45%, transparent);
|
|
188
|
+
box-shadow: 0 0 0.75rem 0.15rem rgb(from var(--ad-primary) r g b / 0.53);
|
|
189
|
+
pointer-events: none;
|
|
190
|
+
transition:
|
|
191
|
+
transform 0.6s var(--ad-tabs-spring),
|
|
192
|
+
width 0.5s var(--ad-tabs-spring);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* While travelling the blade squashes and flares, the trail shows. */
|
|
196
|
+
.ad-tabs[data-moving] .ad-tabs-indicator {
|
|
197
|
+
scale: 1.04 0.86;
|
|
198
|
+
filter: drop-shadow(0 0 0.8rem rgb(from var(--ad-primary) r g b / 0.67)) brightness(1.25);
|
|
199
|
+
}
|
|
200
|
+
.ad-tabs[data-moving] .ad-tabs-trail {
|
|
201
|
+
opacity: 1;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* Inside Tabs the blade is the selection, so selected tabs draw no fill of their own. */
|
|
205
|
+
.ad-tabs > .ad-tab[aria-selected="true"]::before {
|
|
206
|
+
display: none;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@keyframes ad-tabs-glint {
|
|
210
|
+
to {
|
|
211
|
+
transform: translateX(0);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
@keyframes ad-tabs-sweep {
|
|
215
|
+
0%,
|
|
216
|
+
55% {
|
|
217
|
+
transform: translateX(-100%);
|
|
218
|
+
}
|
|
219
|
+
85%,
|
|
220
|
+
100% {
|
|
221
|
+
transform: translateX(100%);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
@keyframes ad-tabs-breathe {
|
|
225
|
+
50% {
|
|
226
|
+
opacity: 1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
@media (prefers-reduced-motion: reduce) {
|
|
230
|
+
.ad-tabs-indicator,
|
|
231
|
+
.ad-tabs-trail,
|
|
232
|
+
.ad-tabs-rail,
|
|
233
|
+
.ad-tabs-blade-edge,
|
|
234
|
+
.ad-tabs-blade::after,
|
|
235
|
+
.ad-tabs-indicator::after {
|
|
236
|
+
transition: none;
|
|
237
|
+
animation: none;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
/* ToggleButton: active is intentionally identical to Primary, inactive to Secondary. */
|
|
2
|
-
.ad-toggle-button[aria-pressed="true"] {
|
|
3
|
-
background:
|
|
4
|
-
linear-gradient(
|
|
5
|
-
180deg,
|
|
6
|
-
var(--ad-btn-bg-top),
|
|
7
|
-
var(--ad-btn-bg-mid) 54%,
|
|
8
|
-
var(--ad-btn-bg-bottom)
|
|
9
|
-
)
|
|
10
|
-
padding-box,
|
|
11
|
-
linear-gradient(
|
|
12
|
-
135deg,
|
|
13
|
-
var(--ad-btn-border-a),
|
|
14
|
-
var(--ad-btn-border-b) 48%,
|
|
15
|
-
rgb(from var(--ad-secondary) r g b / 0.54) 78%,
|
|
16
|
-
rgb(from var(--ad-primary-700) r g b / 0.31)
|
|
17
|
-
)
|
|
18
|
-
border-box;
|
|
19
|
-
box-shadow:
|
|
20
|
-
inset 0 0.075rem 0.12rem var(--ad-btn-inner),
|
|
21
|
-
inset 0 -0.42rem 0.95rem var(--ad-btn-bottom),
|
|
22
|
-
0 0.32rem 0.75rem #0008,
|
|
23
|
-
0 0 1.15rem var(--ad-btn-glow);
|
|
24
|
-
color: var(--ad-neutral-200);
|
|
25
|
-
filter: none;
|
|
26
|
-
}
|
|
27
|
-
.ad-toggle-button[aria-pressed="false"] {
|
|
28
|
-
filter: saturate(0.88) brightness(0.94);
|
|
29
|
-
}
|
|
30
|
-
/* Switching on pops the button and spins its icon, then it settles into the breathing glow. */
|
|
31
|
-
.ad-toggle-button[aria-pressed="true"] {
|
|
32
|
-
animation:
|
|
33
|
-
ad-toggle-pop 0.45s cubic-bezier(0.34, 1.6, 0.5, 1),
|
|
34
|
-
ad-btn-breathe 3.1s 0.45s ease-in-out infinite;
|
|
35
|
-
}
|
|
36
|
-
.ad-toggle-button[aria-pressed="true"] > .ad-icon {
|
|
37
|
-
animation: ad-toggle-icon 0.55s cubic-bezier(0.34, 1.6, 0.5, 1);
|
|
38
|
-
}
|
|
39
|
-
@keyframes ad-toggle-pop {
|
|
40
|
-
40% {
|
|
41
|
-
scale: 1.08;
|
|
42
|
-
box-shadow: 0 0 1.6rem rgb(from var(--ad-primary) r g b / 0.67);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
@keyframes ad-toggle-icon {
|
|
46
|
-
from {
|
|
47
|
-
transform: rotate(-120deg) scale(0.4);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
1
|
+
/* ToggleButton: active is intentionally identical to Primary, inactive to Secondary. */
|
|
2
|
+
.ad-toggle-button[aria-pressed="true"] {
|
|
3
|
+
background:
|
|
4
|
+
linear-gradient(
|
|
5
|
+
180deg,
|
|
6
|
+
var(--ad-btn-bg-top),
|
|
7
|
+
var(--ad-btn-bg-mid) 54%,
|
|
8
|
+
var(--ad-btn-bg-bottom)
|
|
9
|
+
)
|
|
10
|
+
padding-box,
|
|
11
|
+
linear-gradient(
|
|
12
|
+
135deg,
|
|
13
|
+
var(--ad-btn-border-a),
|
|
14
|
+
var(--ad-btn-border-b) 48%,
|
|
15
|
+
rgb(from var(--ad-secondary) r g b / 0.54) 78%,
|
|
16
|
+
rgb(from var(--ad-primary-700) r g b / 0.31)
|
|
17
|
+
)
|
|
18
|
+
border-box;
|
|
19
|
+
box-shadow:
|
|
20
|
+
inset 0 0.075rem 0.12rem var(--ad-btn-inner),
|
|
21
|
+
inset 0 -0.42rem 0.95rem var(--ad-btn-bottom),
|
|
22
|
+
0 0.32rem 0.75rem #0008,
|
|
23
|
+
0 0 1.15rem var(--ad-btn-glow);
|
|
24
|
+
color: var(--ad-neutral-200);
|
|
25
|
+
filter: none;
|
|
26
|
+
}
|
|
27
|
+
.ad-toggle-button[aria-pressed="false"] {
|
|
28
|
+
filter: saturate(0.88) brightness(0.94);
|
|
29
|
+
}
|
|
30
|
+
/* Switching on pops the button and spins its icon, then it settles into the breathing glow. */
|
|
31
|
+
.ad-toggle-button[aria-pressed="true"] {
|
|
32
|
+
animation:
|
|
33
|
+
ad-toggle-pop 0.45s cubic-bezier(0.34, 1.6, 0.5, 1),
|
|
34
|
+
ad-btn-breathe 3.1s 0.45s ease-in-out infinite;
|
|
35
|
+
}
|
|
36
|
+
.ad-toggle-button[aria-pressed="true"] > .ad-icon {
|
|
37
|
+
animation: ad-toggle-icon 0.55s cubic-bezier(0.34, 1.6, 0.5, 1);
|
|
38
|
+
}
|
|
39
|
+
@keyframes ad-toggle-pop {
|
|
40
|
+
40% {
|
|
41
|
+
scale: 1.08;
|
|
42
|
+
box-shadow: 0 0 1.6rem rgb(from var(--ad-primary) r g b / 0.67);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
@keyframes ad-toggle-icon {
|
|
46
|
+
from {
|
|
47
|
+
transform: rotate(-120deg) scale(0.4);
|
|
48
|
+
}
|
|
49
|
+
}
|