@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 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`, `bauhaus`, `brutalist`, `noise` and `soft` are token recipes (shape, depth, borders,
23
- surfaces, type), so every component follows them with no extra CSS. Each one yields to
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
 
@@ -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-3);
5
+ --pinfold-acc-pad-y-base: var(--pinfold-space-4);
18
6
  --pinfold-acc-font-base: var(--pinfold-text-md);
19
- --pinfold-acc-radius-base: var(--pinfold-radius-lg);
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-2);
45
+ --pinfold-acc-pad-y-base: var(--pinfold-space-3);
65
46
  --pinfold-acc-font-base: var(--pinfold-text-sm);
66
- --pinfold-acc-radius-base: var(--pinfold-radius-md);
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-4);
51
+ --pinfold-acc-pad-y-base: var(--pinfold-space-5);
71
52
  --pinfold-acc-font-base: var(--pinfold-text-lg);
72
- --pinfold-acc-radius-base: var(--pinfold-radius-xl);
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
- /* Accent edge on the open row. Scales from the centre, so it reads as the row
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: 0;
98
- inset-inline-start: 0;
99
- width: 2px;
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-accordion__item[data-state='open']::before {
110
- transform: scaleY(1);
111
- opacity: 1;
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
- border: var(--pinfold-acc-border) solid var(--pinfold-color-border);
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-accordion__panel {
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-3);
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-variant='filled'] .pinfold-accordion__item[data-state='open'] {
193
- background-color: var(--pinfold-color-surface-selected);
118
+ .pinfold-accordion[data-joined] {
119
+ --pinfold-acc-divider-inset: var(--pinfold-acc-pad-x);
194
120
  }
195
-
196
- /* ghost — text only, hover reveals the row */
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-variant='ghost'][data-dividers] .pinfold-accordion__item + .pinfold-accordion__item {
201
- border-top: var(--pinfold-acc-border) solid var(--pinfold-color-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
- transition: background-color var(--pinfold-duration-fast) var(--pinfold-ease),
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
- .pinfold-accordion__trigger:hover .pinfold-accordion__indicator {
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
- /* The plus glyph morphs into a minus instead of spinning. */
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
  }