@pinfold/css 0.1.0 → 0.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/README.md +3 -2
- package/dist/accordion.css +76 -178
- package/dist/all.css +118 -370
- package/dist/core.css +12 -116
- package/dist/packs.css +30 -76
- package/dist/reset.css +0 -22
- package/dist/shadcn.css +0 -15
- package/dist/tokens.css +12 -94
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,8 +19,9 @@ import '@pinfold/css/packs.css';
|
|
|
19
19
|
// <PinfoldProvider stylePack="glass">, or data-pinfold-style="glass" on any element
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
`glass`, `
|
|
23
|
-
surfaces,
|
|
22
|
+
`glass`, `material`, `noise` and `brutalist` are token recipes (shape, depth, borders,
|
|
23
|
+
surfaces, texture), so every component follows them with no extra CSS. They follow your palette
|
|
24
|
+
instead of replacing it: every colour a pack sets is mixed from the palette tokens. Each one yields to
|
|
24
25
|
`prefers-reduced-transparency`, `prefers-contrast: more` and `forced-colors`, and glass surfaces
|
|
25
26
|
are tested to keep body text at WCAG AA over white, black and brand-coloured backdrops.
|
|
26
27
|
|
package/dist/accordion.css
CHANGED
|
@@ -1,25 +1,12 @@
|
|
|
1
|
-
/* Pinfold — accordion.
|
|
2
|
-
|
|
3
|
-
Two-layer variables: the `size` preset writes the `*-base` vars, and the
|
|
4
|
-
`dimensions` config writes `--pinfold-accordion-*` which wins through the
|
|
5
|
-
var() fallback. Overriding one measurement keeps the preset for the rest.
|
|
6
|
-
|
|
7
|
-
Nothing clips. Rounded rows give their trigger the matching radius instead
|
|
8
|
-
of relying on `overflow: hidden`, because a clipping ancestor would also cut
|
|
9
|
-
off the focus ring. Collapse is pure CSS (`grid-template-rows`) — no height
|
|
10
|
-
measurement, no ResizeObserver, no layout thrash. */
|
|
11
1
|
|
|
12
2
|
@layer pinfold.components {
|
|
13
|
-
|
|
14
3
|
.pinfold-accordion {
|
|
15
|
-
/* preset layer (set by [data-size]) */
|
|
16
4
|
--pinfold-acc-pad-x-base: var(--pinfold-space-4);
|
|
17
|
-
--pinfold-acc-pad-y-base: var(--pinfold-space-
|
|
5
|
+
--pinfold-acc-pad-y-base: var(--pinfold-space-4);
|
|
18
6
|
--pinfold-acc-font-base: var(--pinfold-text-md);
|
|
19
|
-
--pinfold-acc-radius-
|
|
7
|
+
--pinfold-acc-radius-unit: 0.75rem;
|
|
8
|
+
--pinfold-acc-radius-base: calc(var(--pinfold-acc-radius-unit) * var(--pinfold-radius-scale, 1));
|
|
20
9
|
--pinfold-acc-gap-base: 0px;
|
|
21
|
-
|
|
22
|
-
/* config layer (set by `dimensions`) */
|
|
23
10
|
--pinfold-acc-pad-x: var(--pinfold-accordion-padding-x, var(--pinfold-acc-pad-x-base));
|
|
24
11
|
--pinfold-acc-pad-y: var(--pinfold-accordion-padding-y, var(--pinfold-acc-pad-y-base));
|
|
25
12
|
--pinfold-acc-panel-pad-x: var(--pinfold-accordion-panel-padding-x, var(--pinfold-acc-pad-x));
|
|
@@ -33,53 +20,43 @@
|
|
|
33
20
|
--pinfold-acc-gap: var(--pinfold-accordion-gap, var(--pinfold-acc-gap-base));
|
|
34
21
|
--pinfold-acc-border: var(--pinfold-accordion-border-width, var(--pinfold-border-width));
|
|
35
22
|
--pinfold-acc-duration: var(--pinfold-accordion-duration, var(--pinfold-duration-md));
|
|
36
|
-
|
|
37
23
|
--pinfold-acc-accent: var(--pinfold-color-accent);
|
|
38
|
-
--pinfold-acc-item-radius: 0px;
|
|
39
|
-
|
|
24
|
+
--pinfold-acc-item-radius: var(--pinfold-accordion-item-radius, 0px);
|
|
40
25
|
display: flex;
|
|
41
26
|
flex-direction: column;
|
|
42
27
|
gap: var(--pinfold-acc-gap);
|
|
43
|
-
/* Responds to its own width, not the viewport (see "responsive" below). */
|
|
44
28
|
container: pinfold-accordion / inline-size;
|
|
45
29
|
width: var(--pinfold-accordion-width, 100%);
|
|
46
30
|
min-width: var(--pinfold-accordion-min-width, 0);
|
|
47
31
|
max-width: var(--pinfold-accordion-max-width, none);
|
|
48
32
|
height: var(--pinfold-accordion-height, auto);
|
|
49
33
|
max-height: var(--pinfold-accordion-max-height, none);
|
|
34
|
+
border-radius: var(--pinfold-acc-radius);
|
|
50
35
|
font-size: var(--pinfold-acc-font);
|
|
51
36
|
letter-spacing: var(--pinfold-tracking-tight);
|
|
52
37
|
color: var(--pinfold-color-text);
|
|
53
38
|
}
|
|
54
|
-
|
|
55
|
-
/* `dimensions.maxHeight` caps the root and scrolls the rows. */
|
|
56
39
|
.pinfold-accordion[data-clamp] {
|
|
57
40
|
overflow-y: auto;
|
|
58
41
|
overscroll-behavior: contain;
|
|
59
42
|
}
|
|
60
|
-
|
|
61
|
-
/* ------------------------------------------------------------------ sizes */
|
|
62
43
|
.pinfold-accordion[data-size='sm'] {
|
|
63
44
|
--pinfold-acc-pad-x-base: var(--pinfold-space-3);
|
|
64
|
-
--pinfold-acc-pad-y-base: var(--pinfold-space-
|
|
45
|
+
--pinfold-acc-pad-y-base: var(--pinfold-space-3);
|
|
65
46
|
--pinfold-acc-font-base: var(--pinfold-text-sm);
|
|
66
|
-
--pinfold-acc-radius-
|
|
47
|
+
--pinfold-acc-radius-unit: 0.5rem;
|
|
67
48
|
}
|
|
68
49
|
.pinfold-accordion[data-size='lg'] {
|
|
69
50
|
--pinfold-acc-pad-x-base: var(--pinfold-space-5);
|
|
70
|
-
--pinfold-acc-pad-y-base: var(--pinfold-space-
|
|
51
|
+
--pinfold-acc-pad-y-base: var(--pinfold-space-5);
|
|
71
52
|
--pinfold-acc-font-base: var(--pinfold-text-lg);
|
|
72
|
-
--pinfold-acc-radius-
|
|
53
|
+
--pinfold-acc-radius-unit: 1rem;
|
|
73
54
|
}
|
|
74
|
-
|
|
75
|
-
/* ------------------------------------------------------------------ tones */
|
|
76
55
|
.pinfold-accordion[data-tone='neutral'] { --pinfold-acc-accent: var(--pinfold-color-text); }
|
|
77
56
|
.pinfold-accordion[data-tone='success'] { --pinfold-acc-accent: var(--pinfold-success-500); }
|
|
78
57
|
.pinfold-accordion[data-tone='warning'] { --pinfold-acc-accent: var(--pinfold-warning-500); }
|
|
79
58
|
.pinfold-accordion[data-tone='danger'] { --pinfold-acc-accent: var(--pinfold-danger-500); }
|
|
80
59
|
.pinfold-accordion[data-tone='info'] { --pinfold-acc-accent: var(--pinfold-info-500); }
|
|
81
|
-
|
|
82
|
-
/* ------------------------------------------------------------------- item */
|
|
83
60
|
.pinfold-accordion__item {
|
|
84
61
|
position: relative;
|
|
85
62
|
border-radius: var(--pinfold-acc-item-radius);
|
|
@@ -88,125 +65,89 @@
|
|
|
88
65
|
.pinfold-accordion__trigger {
|
|
89
66
|
border-radius: inherit;
|
|
90
67
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
opening rather than a bar appearing. */
|
|
94
|
-
.pinfold-accordion__item::before {
|
|
68
|
+
.pinfold-accordion[data-dividers]:is([data-variant='solid'], [data-variant='outline'], [data-variant='ghost'], [data-joined])
|
|
69
|
+
.pinfold-accordion__item + .pinfold-accordion__item::before {
|
|
95
70
|
content: '';
|
|
96
71
|
position: absolute;
|
|
97
|
-
inset-block:
|
|
98
|
-
inset-inline
|
|
99
|
-
|
|
100
|
-
background: var(--pinfold-acc-accent);
|
|
101
|
-
border-start-start-radius: inherit;
|
|
102
|
-
border-end-start-radius: inherit;
|
|
103
|
-
transform: scaleY(0);
|
|
104
|
-
opacity: 0;
|
|
105
|
-
transition: transform var(--pinfold-acc-duration) var(--pinfold-ease-out),
|
|
106
|
-
opacity var(--pinfold-duration-fast) linear;
|
|
72
|
+
inset-block-start: calc(var(--pinfold-acc-gap) / -2);
|
|
73
|
+
inset-inline: var(--pinfold-acc-divider-inset, 0);
|
|
74
|
+
border-top: var(--pinfold-acc-border) solid var(--pinfold-accordion-divider-color, var(--pinfold-color-border));
|
|
107
75
|
pointer-events: none;
|
|
108
76
|
}
|
|
109
|
-
.pinfold-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
/* Bordered rows already signal state through the border; the bar would double up. */
|
|
114
|
-
.pinfold-accordion[data-variant='outline'] .pinfold-accordion__item::before,
|
|
115
|
-
.pinfold-accordion[data-variant='separated'] .pinfold-accordion__item::before {
|
|
116
|
-
content: none;
|
|
77
|
+
.pinfold-accordion:is([data-variant='solid'], [data-variant='outline']) {
|
|
78
|
+
--pinfold-acc-divider-inset: var(--pinfold-acc-pad-x);
|
|
79
|
+
border: var(--pinfold-acc-border) solid var(--pinfold-color-border);
|
|
117
80
|
}
|
|
118
|
-
|
|
119
|
-
/* --------------------------------------------------------------- variants */
|
|
120
|
-
/* solid — one card, hairline-divided rows. Corners are rounded on the parts
|
|
121
|
-
that touch them rather than clipped off the container. */
|
|
122
81
|
.pinfold-accordion[data-variant='solid'] {
|
|
123
82
|
background: var(--pinfold-color-surface);
|
|
124
83
|
background-image: var(--pinfold-texture);
|
|
125
84
|
-webkit-backdrop-filter: var(--pinfold-backdrop);
|
|
126
85
|
backdrop-filter: var(--pinfold-backdrop);
|
|
127
|
-
|
|
128
|
-
border-radius: var(--pinfold-acc-radius);
|
|
129
|
-
box-shadow: var(--pinfold-shadow-sm), var(--pinfold-highlight);
|
|
130
|
-
}
|
|
131
|
-
.pinfold-accordion[data-variant='solid'][data-dividers] .pinfold-accordion__item + .pinfold-accordion__item {
|
|
132
|
-
border-top: var(--pinfold-acc-border) solid var(--pinfold-color-border);
|
|
86
|
+
box-shadow: var(--pinfold-shadow-md), var(--pinfold-highlight);
|
|
133
87
|
}
|
|
134
|
-
.pinfold-accordion[data-variant='solid'] .pinfold-accordion__item:first-child .pinfold-accordion__trigger {
|
|
88
|
+
.pinfold-accordion:is([data-variant='solid'], [data-variant='outline']) .pinfold-accordion__item:first-child .pinfold-accordion__trigger {
|
|
135
89
|
border-start-start-radius: var(--pinfold-acc-radius);
|
|
136
90
|
border-start-end-radius: var(--pinfold-acc-radius);
|
|
137
91
|
}
|
|
138
|
-
.pinfold-accordion[data-variant='solid'] .pinfold-accordion__item:last-child .pinfold-
|
|
92
|
+
.pinfold-accordion:is([data-variant='solid'], [data-variant='outline']) .pinfold-accordion__item:last-child .pinfold-accordion__trigger[data-state='closed'] {
|
|
139
93
|
border-end-start-radius: var(--pinfold-acc-radius);
|
|
140
94
|
border-end-end-radius: var(--pinfold-acc-radius);
|
|
141
95
|
}
|
|
142
|
-
|
|
143
|
-
/* outline — each row is its own bordered box */
|
|
144
|
-
.pinfold-accordion[data-variant='outline'] {
|
|
145
|
-
--pinfold-acc-gap-base: var(--pinfold-space-2);
|
|
146
|
-
}
|
|
147
|
-
.pinfold-accordion[data-variant='outline'] .pinfold-accordion__item {
|
|
148
|
-
--pinfold-acc-item-radius: var(--pinfold-acc-radius);
|
|
149
|
-
border: var(--pinfold-acc-border) solid var(--pinfold-color-border);
|
|
150
|
-
transition: border-color var(--pinfold-duration-md) var(--pinfold-ease);
|
|
151
|
-
}
|
|
152
|
-
.pinfold-accordion[data-variant='outline'] .pinfold-accordion__item[data-state='open'] {
|
|
153
|
-
border-color: var(--pinfold-color-border-accent);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/* separated — cards with air and elevation */
|
|
157
96
|
.pinfold-accordion[data-variant='separated'] {
|
|
158
|
-
--pinfold-acc-gap-base: var(--pinfold-space-
|
|
97
|
+
--pinfold-acc-gap-base: var(--pinfold-space-2);
|
|
159
98
|
}
|
|
160
99
|
.pinfold-accordion[data-variant='separated'] .pinfold-accordion__item {
|
|
161
|
-
--pinfold-acc-item-radius: var(--pinfold-acc-radius);
|
|
100
|
+
--pinfold-acc-item-radius: var(--pinfold-accordion-item-radius, var(--pinfold-acc-radius));
|
|
162
101
|
background: var(--pinfold-color-surface);
|
|
163
102
|
background-image: var(--pinfold-texture);
|
|
164
103
|
-webkit-backdrop-filter: var(--pinfold-backdrop);
|
|
165
104
|
backdrop-filter: var(--pinfold-backdrop);
|
|
166
105
|
border: var(--pinfold-acc-border) solid var(--pinfold-color-border);
|
|
167
106
|
box-shadow: var(--pinfold-shadow-sm), var(--pinfold-highlight);
|
|
168
|
-
transition: box-shadow var(--pinfold-duration-md) var(--pinfold-ease),
|
|
169
|
-
border-color var(--pinfold-duration-md) var(--pinfold-ease),
|
|
170
|
-
transform var(--pinfold-duration-md) var(--pinfold-ease-out);
|
|
171
|
-
}
|
|
172
|
-
.pinfold-accordion[data-variant='separated'] .pinfold-accordion__item:hover {
|
|
173
|
-
box-shadow: var(--pinfold-shadow-md), var(--pinfold-highlight);
|
|
174
107
|
}
|
|
175
|
-
.pinfold-accordion[data-variant='separated'] .pinfold-accordion__item[data-state='open'] {
|
|
176
|
-
border-color: var(--pinfold-color-border-accent);
|
|
177
|
-
box-shadow: var(--pinfold-shadow-md), var(--pinfold-highlight);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/* filled — tinted rows, no borders */
|
|
181
108
|
.pinfold-accordion[data-variant='filled'] {
|
|
182
109
|
--pinfold-acc-gap-base: var(--pinfold-space-2);
|
|
183
110
|
}
|
|
184
111
|
.pinfold-accordion[data-variant='filled'] .pinfold-accordion__item {
|
|
185
|
-
--pinfold-acc-item-radius: var(--pinfold-acc-radius);
|
|
112
|
+
--pinfold-acc-item-radius: var(--pinfold-accordion-item-radius, var(--pinfold-acc-radius));
|
|
186
113
|
background: var(--pinfold-color-bg-subtle);
|
|
187
114
|
background-image: var(--pinfold-texture);
|
|
188
115
|
-webkit-backdrop-filter: var(--pinfold-backdrop);
|
|
189
116
|
backdrop-filter: var(--pinfold-backdrop);
|
|
190
|
-
transition: background-color var(--pinfold-duration-md) var(--pinfold-ease);
|
|
191
117
|
}
|
|
192
|
-
.pinfold-accordion[data-
|
|
193
|
-
|
|
118
|
+
.pinfold-accordion[data-joined] {
|
|
119
|
+
--pinfold-acc-divider-inset: var(--pinfold-acc-pad-x);
|
|
194
120
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
.pinfold-accordion[data-variant='ghost'] .pinfold-accordion__item {
|
|
198
|
-
--pinfold-acc-item-radius: var(--pinfold-acc-radius);
|
|
121
|
+
.pinfold-accordion[data-joined] .pinfold-accordion__item {
|
|
122
|
+
--pinfold-acc-item-radius: 0px;
|
|
199
123
|
}
|
|
200
|
-
.pinfold-accordion[data-
|
|
201
|
-
border-
|
|
124
|
+
.pinfold-accordion[data-joined] .pinfold-accordion__item:first-child {
|
|
125
|
+
border-start-start-radius: var(--pinfold-acc-radius);
|
|
126
|
+
border-start-end-radius: var(--pinfold-acc-radius);
|
|
127
|
+
}
|
|
128
|
+
.pinfold-accordion[data-joined] .pinfold-accordion__item:last-child {
|
|
129
|
+
border-end-start-radius: var(--pinfold-acc-radius);
|
|
130
|
+
border-end-end-radius: var(--pinfold-acc-radius);
|
|
131
|
+
}
|
|
132
|
+
.pinfold-accordion[data-joined][data-variant='separated'] {
|
|
133
|
+
box-shadow: var(--pinfold-shadow-sm), var(--pinfold-highlight);
|
|
134
|
+
}
|
|
135
|
+
.pinfold-accordion[data-joined][data-variant='separated'] .pinfold-accordion__item {
|
|
136
|
+
box-shadow: none;
|
|
137
|
+
}
|
|
138
|
+
.pinfold-accordion[data-joined][data-variant='separated'] .pinfold-accordion__item:not(:last-child) {
|
|
139
|
+
border-bottom-width: 0;
|
|
140
|
+
}
|
|
141
|
+
.pinfold-accordion[data-joined][data-variant='separated'] .pinfold-accordion__item:not(:first-child) {
|
|
142
|
+
border-top-width: 0;
|
|
143
|
+
}
|
|
144
|
+
.pinfold-accordion[data-variant='ghost'] .pinfold-accordion__item {
|
|
145
|
+
--pinfold-acc-item-radius: var(--pinfold-accordion-item-radius, var(--pinfold-acc-radius));
|
|
202
146
|
}
|
|
203
|
-
|
|
204
|
-
/* ----------------------------------------------------------------- header */
|
|
205
147
|
.pinfold-accordion__header {
|
|
206
148
|
display: flex;
|
|
207
149
|
margin: 0;
|
|
208
150
|
}
|
|
209
|
-
|
|
210
151
|
.pinfold-accordion__trigger {
|
|
211
152
|
display: flex;
|
|
212
153
|
align-items: center;
|
|
@@ -218,44 +159,19 @@
|
|
|
218
159
|
line-height: var(--pinfold-leading-tight);
|
|
219
160
|
text-align: start;
|
|
220
161
|
color: var(--pinfold-color-text);
|
|
221
|
-
|
|
222
|
-
color var(--pinfold-duration-fast) var(--pinfold-ease);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.pinfold-accordion__trigger:hover {
|
|
226
|
-
background: var(--pinfold-color-surface-hover);
|
|
162
|
+
cursor: pointer;
|
|
227
163
|
}
|
|
228
|
-
.pinfold-accordion__trigger:active {
|
|
229
|
-
background: var(--pinfold-color-surface-active);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/* Text in the accent: pulled toward the text colour so every tone (500 steps included) clears
|
|
233
|
-
4.5:1 on every variant's open background, in light and dark mode (the a11y report checks). */
|
|
234
|
-
.pinfold-accordion__trigger[data-state='open'] {
|
|
235
|
-
color: color-mix(in oklch, var(--pinfold-acc-accent) 62%, var(--pinfold-color-text));
|
|
236
|
-
}
|
|
237
|
-
|
|
238
164
|
.pinfold-accordion__trigger[data-disabled] {
|
|
239
165
|
color: var(--pinfold-color-text-disabled);
|
|
240
166
|
cursor: not-allowed;
|
|
241
167
|
}
|
|
242
|
-
.pinfold-accordion__trigger[data-disabled]:hover,
|
|
243
|
-
.pinfold-accordion__trigger[data-disabled]:active {
|
|
244
|
-
background: none;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/* The ring is drawn by the core reset as a box-shadow; raise the focused row
|
|
248
|
-
so a neighbouring row's background cannot paint over it. */
|
|
249
168
|
.pinfold-accordion__trigger:focus-visible {
|
|
250
169
|
position: relative;
|
|
251
170
|
z-index: 1;
|
|
252
171
|
}
|
|
253
|
-
|
|
254
172
|
.pinfold-accordion[data-indicator-position='start'] .pinfold-accordion__trigger {
|
|
255
173
|
flex-direction: row-reverse;
|
|
256
174
|
}
|
|
257
|
-
|
|
258
|
-
/* ------------------------------------------------------------------ parts */
|
|
259
175
|
.pinfold-accordion__icon {
|
|
260
176
|
display: inline-flex;
|
|
261
177
|
flex: none;
|
|
@@ -265,7 +181,15 @@
|
|
|
265
181
|
height: var(--pinfold-acc-icon);
|
|
266
182
|
color: var(--pinfold-acc-accent);
|
|
267
183
|
}
|
|
268
|
-
|
|
184
|
+
.pinfold-accordion__end-icon {
|
|
185
|
+
display: inline-flex;
|
|
186
|
+
flex: none;
|
|
187
|
+
align-items: center;
|
|
188
|
+
justify-content: center;
|
|
189
|
+
width: var(--pinfold-acc-icon);
|
|
190
|
+
height: var(--pinfold-acc-icon);
|
|
191
|
+
color: var(--pinfold-color-text-muted);
|
|
192
|
+
}
|
|
269
193
|
.pinfold-accordion__label {
|
|
270
194
|
display: flex;
|
|
271
195
|
flex: 1 1 auto;
|
|
@@ -273,13 +197,10 @@
|
|
|
273
197
|
gap: 2px;
|
|
274
198
|
min-width: 0;
|
|
275
199
|
}
|
|
276
|
-
|
|
277
200
|
.pinfold-accordion__title {
|
|
278
201
|
font-size: var(--pinfold-acc-title);
|
|
279
202
|
overflow-wrap: anywhere;
|
|
280
203
|
}
|
|
281
|
-
|
|
282
|
-
/* Overflow policy per slot: wrap (default for titles), truncate, or clamp to n lines. */
|
|
283
204
|
.pinfold-accordion [data-overflow='truncate'] {
|
|
284
205
|
overflow: hidden;
|
|
285
206
|
text-overflow: ellipsis;
|
|
@@ -292,27 +213,22 @@
|
|
|
292
213
|
line-clamp: var(--pinfold-lines, 2);
|
|
293
214
|
overflow: hidden;
|
|
294
215
|
}
|
|
295
|
-
|
|
296
216
|
.pinfold-accordion__description {
|
|
297
217
|
font-size: var(--pinfold-acc-desc);
|
|
298
218
|
font-weight: var(--pinfold-weight-normal);
|
|
299
219
|
letter-spacing: var(--pinfold-tracking-normal);
|
|
300
220
|
color: var(--pinfold-color-text-muted);
|
|
301
221
|
}
|
|
302
|
-
|
|
303
222
|
.pinfold-accordion__badge {
|
|
304
223
|
flex: none;
|
|
305
224
|
padding: 2px var(--pinfold-space-2);
|
|
306
225
|
font-size: var(--pinfold-text-xs);
|
|
307
226
|
font-weight: var(--pinfold-weight-semibold);
|
|
308
227
|
letter-spacing: var(--pinfold-tracking-wide);
|
|
309
|
-
/* Small text on a tint of its own colour: pulled halfway toward the text colour, so it
|
|
310
|
-
clears 4.5:1 in light and dark mode for every tone (checked by the a11y report). */
|
|
311
228
|
color: color-mix(in oklch, var(--pinfold-acc-accent) 55%, var(--pinfold-color-text));
|
|
312
229
|
background: color-mix(in oklch, var(--pinfold-acc-accent) 12%, transparent);
|
|
313
230
|
border-radius: var(--pinfold-radius-full);
|
|
314
231
|
}
|
|
315
|
-
|
|
316
232
|
.pinfold-accordion__indicator {
|
|
317
233
|
display: inline-flex;
|
|
318
234
|
flex: none;
|
|
@@ -323,17 +239,22 @@
|
|
|
323
239
|
transition: transform var(--pinfold-acc-duration) var(--pinfold-ease-out),
|
|
324
240
|
color var(--pinfold-duration-fast) var(--pinfold-ease);
|
|
325
241
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
color: var(--pinfold-color-text-muted);
|
|
242
|
+
.pinfold-accordion__trigger:not([data-disabled]):hover .pinfold-accordion__indicator {
|
|
243
|
+
color: var(--pinfold-color-text);
|
|
329
244
|
}
|
|
330
|
-
|
|
331
245
|
.pinfold-accordion__trigger[data-state='open'] .pinfold-accordion__indicator {
|
|
332
246
|
color: var(--pinfold-acc-accent);
|
|
333
247
|
transform: rotate(180deg);
|
|
334
248
|
}
|
|
335
|
-
|
|
336
|
-
|
|
249
|
+
.pinfold-accordion[data-static-indicator] .pinfold-accordion__trigger .pinfold-accordion__indicator {
|
|
250
|
+
transform: none;
|
|
251
|
+
}
|
|
252
|
+
.pinfold-accordion[data-static-indicator] .pinfold-accordion__indicator-bar {
|
|
253
|
+
transition: none;
|
|
254
|
+
}
|
|
255
|
+
.pinfold-accordion:not([data-animate]) :is(.pinfold-accordion__indicator, .pinfold-accordion__indicator-bar) {
|
|
256
|
+
transition: none;
|
|
257
|
+
}
|
|
337
258
|
.pinfold-accordion__indicator .pinfold-accordion__indicator-bar {
|
|
338
259
|
transform-origin: center;
|
|
339
260
|
transition: opacity var(--pinfold-acc-duration) var(--pinfold-ease),
|
|
@@ -347,8 +268,6 @@
|
|
|
347
268
|
opacity: 0;
|
|
348
269
|
transform: rotate(90deg);
|
|
349
270
|
}
|
|
350
|
-
|
|
351
|
-
/* ------------------------------------------------------------------ panel */
|
|
352
271
|
.pinfold-accordion__panel {
|
|
353
272
|
display: grid;
|
|
354
273
|
grid-template-rows: 1fr;
|
|
@@ -357,21 +276,13 @@
|
|
|
357
276
|
line-height: var(--pinfold-leading-normal);
|
|
358
277
|
letter-spacing: var(--pinfold-tracking-normal);
|
|
359
278
|
}
|
|
360
|
-
|
|
361
279
|
.pinfold-accordion__panel[data-state='closed'] {
|
|
362
280
|
grid-template-rows: 0fr;
|
|
363
|
-
/* Takes closed content out of the accessibility tree and the tab order once
|
|
364
|
-
the collapse finishes. */
|
|
365
281
|
visibility: hidden;
|
|
366
282
|
}
|
|
367
|
-
|
|
368
|
-
/* Find-in-page: once the inner box carries hidden="until-found", the browser
|
|
369
|
-
owns its visibility (content-visibility), so the panel itself must stay
|
|
370
|
-
visible for matches to be found. Before hydration the rule above applies. */
|
|
371
283
|
.pinfold-accordion__panel[data-state='closed']:has(> [hidden='until-found']) {
|
|
372
284
|
visibility: visible;
|
|
373
285
|
}
|
|
374
|
-
|
|
375
286
|
.pinfold-accordion[data-animate] .pinfold-accordion__panel {
|
|
376
287
|
transition: grid-template-rows var(--pinfold-acc-duration) var(--pinfold-ease-out),
|
|
377
288
|
visibility 0s linear 0s;
|
|
@@ -380,14 +291,10 @@
|
|
|
380
291
|
transition: grid-template-rows var(--pinfold-acc-duration) var(--pinfold-ease),
|
|
381
292
|
visibility 0s linear var(--pinfold-acc-duration);
|
|
382
293
|
}
|
|
383
|
-
|
|
384
294
|
.pinfold-accordion__panel-inner {
|
|
385
295
|
min-height: 0;
|
|
386
296
|
overflow: hidden;
|
|
387
297
|
}
|
|
388
|
-
|
|
389
|
-
/* Content settles in slightly behind the row opening — the lag is what makes
|
|
390
|
-
the motion read as physical rather than mechanical. */
|
|
391
298
|
.pinfold-accordion[data-animate] .pinfold-accordion__content {
|
|
392
299
|
opacity: 0;
|
|
393
300
|
transform: translateY(-4px);
|
|
@@ -399,57 +306,48 @@
|
|
|
399
306
|
transform: none;
|
|
400
307
|
transition-delay: calc(var(--pinfold-acc-duration) * 0.35);
|
|
401
308
|
}
|
|
402
|
-
|
|
403
|
-
/* `dimensions.panelMaxHeight` caps the open panel and scrolls the rest. */
|
|
404
309
|
.pinfold-accordion[data-scroll] .pinfold-accordion__panel[data-state='open'] .pinfold-accordion__panel-inner {
|
|
405
310
|
max-height: var(--pinfold-accordion-panel-max-height);
|
|
406
311
|
overflow-y: auto;
|
|
407
312
|
overscroll-behavior: contain;
|
|
408
313
|
}
|
|
409
|
-
|
|
410
314
|
.pinfold-accordion__content {
|
|
411
315
|
padding: 0 var(--pinfold-acc-panel-pad-x) var(--pinfold-acc-panel-pad-y);
|
|
412
316
|
}
|
|
413
|
-
|
|
414
317
|
.pinfold-accordion[data-indicator-position='start'] .pinfold-accordion__content {
|
|
415
318
|
padding-inline-start: calc(var(--pinfold-acc-panel-pad-x) + var(--pinfold-acc-icon) + var(--pinfold-space-3));
|
|
416
319
|
}
|
|
417
|
-
|
|
418
|
-
/* ------------------------------------------------------------- responsive */
|
|
419
|
-
/* Narrow containers: the badge drops under the title so the title keeps its
|
|
420
|
-
width; the indicator stays on the first line. */
|
|
421
320
|
@container pinfold-accordion (max-width: 26rem) {
|
|
422
321
|
.pinfold-accordion__trigger {
|
|
423
322
|
flex-wrap: wrap;
|
|
424
323
|
row-gap: var(--pinfold-space-1);
|
|
425
324
|
}
|
|
426
|
-
/* Leaves room for the icon and indicator only, so the badge must wrap. */
|
|
427
325
|
.pinfold-accordion__label {
|
|
428
326
|
flex-basis: calc(100% - 4.5em);
|
|
429
327
|
}
|
|
430
328
|
.pinfold-accordion__indicator {
|
|
431
329
|
order: 1;
|
|
432
330
|
}
|
|
433
|
-
.pinfold-accordion__badge
|
|
331
|
+
.pinfold-accordion__badge,
|
|
332
|
+
.pinfold-accordion__end-icon {
|
|
434
333
|
order: 2;
|
|
334
|
+
}
|
|
335
|
+
.pinfold-accordion__badge,
|
|
336
|
+
.pinfold-accordion__trigger:not(:has(.pinfold-accordion__badge)) .pinfold-accordion__end-icon {
|
|
435
337
|
margin-inline-start: calc(var(--pinfold-acc-icon) + var(--pinfold-space-3));
|
|
436
338
|
}
|
|
437
|
-
.pinfold-accordion__trigger:not(:has(.pinfold-accordion__icon)) .pinfold-accordion__badge {
|
|
339
|
+
.pinfold-accordion__trigger:not(:has(.pinfold-accordion__icon)) :is(.pinfold-accordion__badge, .pinfold-accordion__end-icon) {
|
|
438
340
|
margin-inline-start: 0;
|
|
439
341
|
}
|
|
440
342
|
}
|
|
441
|
-
|
|
442
|
-
/* Touch: every trigger is at least 44px tall (WCAG 2.5.5 / 2.5.8). */
|
|
443
343
|
@media (pointer: coarse) {
|
|
444
344
|
.pinfold-accordion__trigger {
|
|
445
345
|
min-height: 44px;
|
|
446
346
|
}
|
|
447
347
|
}
|
|
448
|
-
|
|
449
348
|
@supports not (color: color-mix(in oklch, red, blue)) {
|
|
450
349
|
.pinfold-accordion__badge {
|
|
451
350
|
background: var(--pinfold-color-bg-subtle);
|
|
452
351
|
}
|
|
453
352
|
}
|
|
454
|
-
|
|
455
353
|
}
|