@getvitops/generator 0.9.0 → 2.0.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +1031 -0
  2. package/README.md +24 -5
  3. package/assets/bricks/elements/icon.php +102 -0
  4. package/assets/bricks/elements/split.php +8 -5
  5. package/assets/bricks/load.php +137 -1
  6. package/assets/css/animation.css +147 -36
  7. package/assets/css/global.css +19 -3
  8. package/assets/css/index.css +8 -0
  9. package/assets/css/layout-utilities.css +764 -0
  10. package/assets/css/layout.css +50 -584
  11. package/assets/css/patterns/carousel.css +3 -3
  12. package/assets/css/patterns/code.css +2 -2
  13. package/assets/css/patterns/combobox.css +3 -3
  14. package/assets/css/patterns/comment.css +1 -1
  15. package/assets/css/patterns/consent.css +117 -0
  16. package/assets/css/patterns/copy.css +3 -3
  17. package/assets/css/patterns/details.css +1 -1
  18. package/assets/css/patterns/dialog.css +2 -2
  19. package/assets/css/patterns/drawer.css +2 -2
  20. package/assets/css/patterns/forms.css +11 -11
  21. package/assets/css/patterns/grouped.css +1 -1
  22. package/assets/css/patterns/icon.css +2 -2
  23. package/assets/css/patterns/list.css +5 -5
  24. package/assets/css/patterns/media.css +1 -1
  25. package/assets/css/patterns/nav.css +5 -5
  26. package/assets/css/patterns/notification.css +3 -3
  27. package/assets/css/patterns/reveal.css +92 -0
  28. package/assets/css/patterns/scroll-based.css +1 -1
  29. package/assets/css/patterns/scroll-target.css +3 -3
  30. package/assets/css/patterns/sitenav.css +14 -14
  31. package/assets/css/patterns/split-link.css +4 -4
  32. package/assets/css/patterns/subgrid.css +7 -2
  33. package/assets/css/patterns/tag.css +1 -1
  34. package/assets/css/patterns/text-effects.css +1 -1
  35. package/assets/css/patterns/theme-editor.css +43 -6
  36. package/assets/css/patterns/tooltip.css +2 -2
  37. package/assets/css/patterns/tree.css +3 -3
  38. package/assets/css/utilities.css +19 -98
  39. package/assets/js/consent.js +1 -0
  40. package/assets/js/deferred.js +1 -1
  41. package/assets/js/editor.js +2 -2
  42. package/dist/index.d.mts +1218 -376
  43. package/dist/index.d.mts.map +1 -1
  44. package/dist/index.mjs +4384 -1784
  45. package/dist/index.mjs.map +1 -1
  46. package/package.json +5 -3
  47. package/schema.json +54 -12
  48. package/site.schema.json +648 -458
@@ -71,54 +71,6 @@
71
71
  margin-top: calc(var(--rhythm-base) * var(--rhythm-media-text));
72
72
  }
73
73
 
74
- /* Manual rhythm overrides (apply to the second element of a pair) */
75
- .m-h-p {
76
- margin-top: calc(var(--rhythm-base) * var(--rhythm-h-p));
77
- }
78
- .m-p-p {
79
- margin-top: calc(var(--rhythm-base) * var(--rhythm-p-p));
80
- }
81
- .m-p-h {
82
- margin-top: calc(var(--rhythm-base) * var(--rhythm-p-h));
83
- }
84
- .m-h-h {
85
- margin-top: calc(var(--rhythm-base) * var(--rhythm-h-h));
86
- }
87
- .m-p-list {
88
- margin-top: calc(var(--rhythm-base) * var(--rhythm-p-list));
89
- }
90
- .m-list-p {
91
- margin-top: calc(var(--rhythm-base) * var(--rhythm-list-p));
92
- }
93
- .m-li-li {
94
- margin-top: calc(var(--rhythm-base) * var(--rhythm-li-li));
95
- }
96
- .m-text-media {
97
- margin-top: calc(var(--rhythm-base) * var(--rhythm-text-media));
98
- }
99
- .m-media-text {
100
- margin-top: calc(var(--rhythm-base) * var(--rhythm-media-text));
101
- }
102
-
103
- .m-0 {
104
- margin-top: 0;
105
- }
106
- .m-xs {
107
- margin-top: calc(var(--rhythm-base) * 0.25);
108
- }
109
- .m-s {
110
- margin-top: calc(var(--rhythm-base) * 0.5);
111
- }
112
- .m-m {
113
- margin-top: calc(var(--rhythm-base) * 1);
114
- }
115
- .m-l {
116
- margin-top: calc(var(--rhythm-base) * 1.5);
117
- }
118
- .m-xl {
119
- margin-top: calc(var(--rhythm-base) * 2);
120
- }
121
-
122
74
  /* ═══════════════════════════════════════════════════════════════════════════
123
75
  4. CENTERED SECTIONS — named-track grid
124
76
  Put .centered on a Div. Children default to the measure (reading) track;
@@ -160,78 +112,6 @@ body {
160
112
  grid-column: measure;
161
113
  }
162
114
 
163
- /* Bare placement. .measure restates the default (redundant but parser-visible). */
164
- .measure {
165
- grid-column: measure;
166
- }
167
- .breakout {
168
- grid-column: breakout;
169
- }
170
- .spotlight {
171
- grid-column: spotlight;
172
- }
173
- .fullbleed {
174
- grid-column: fullbleed;
175
- }
176
-
177
- /* Promotion variants (base = measure; widen past each container breakpoint) */
178
- @container (min-width: 30rem) {
179
- .sm-measure {
180
- grid-column: measure;
181
- }
182
- .sm-breakout {
183
- grid-column: breakout;
184
- }
185
- .sm-spotlight {
186
- grid-column: spotlight;
187
- }
188
- .sm-fullbleed {
189
- grid-column: fullbleed;
190
- }
191
- }
192
- @container (min-width: 48rem) {
193
- .md-measure {
194
- grid-column: measure;
195
- }
196
- .md-breakout {
197
- grid-column: breakout;
198
- }
199
- .md-spotlight {
200
- grid-column: spotlight;
201
- }
202
- .md-fullbleed {
203
- grid-column: fullbleed;
204
- }
205
- }
206
- @container (min-width: 64rem) {
207
- .lg-measure {
208
- grid-column: measure;
209
- }
210
- .lg-breakout {
211
- grid-column: breakout;
212
- }
213
- .lg-spotlight {
214
- grid-column: spotlight;
215
- }
216
- .lg-fullbleed {
217
- grid-column: fullbleed;
218
- }
219
- }
220
- @container (min-width: 80rem) {
221
- .xl-measure {
222
- grid-column: measure;
223
- }
224
- .xl-breakout {
225
- grid-column: breakout;
226
- }
227
- .xl-spotlight {
228
- grid-column: spotlight;
229
- }
230
- .xl-fullbleed {
231
- grid-column: fullbleed;
232
- }
233
- }
234
-
235
115
  /* Vertical rhythm region (usually on the Section) */
236
116
  .region {
237
117
  padding-block: clamp(
@@ -242,482 +122,68 @@ body {
242
122
  }
243
123
 
244
124
  /* ═══════════════════════════════════════════════════════════════════════════
245
- 5. LAYOUT UTILITIES — flex direction, splits, alignment, text-align
246
- Container-gated (unnamed @container): resolve against the nearest
247
- container-type ancestor. Bare = base/mobile; sm- md- lg- xl- widen up.
248
- Breakpoints: sm 30rem · md 48rem · lg 64rem · xl 80rem.
125
+ 5. SPLIT — a two-column pair
126
+ The ratio classes, the reversal and every other utility named here live in
127
+ layout-utilities.css, which is mapped to `vitops.utilities`. This file is
128
+ `vitops.components`, so a utility beats this pattern BY LAYER — there is no
129
+ source order to maintain, and `class="split flex-col md-split-1-2"` means the
130
+ same thing in every format.
249
131
  ═══════════════════════════════════════════════════════════════════════════ */
250
132
 
251
- /* ── Flex direction (display + direction; tiered classes set both) ── */
252
- .flex {
253
- display: flex;
254
- /* Set direction explicitly (not just `display:flex`): hosts like Bricks' block
255
- element default `flex-direction: column`, which would otherwise win. `.flex-col`
256
- still overrides. */
257
- flex-direction: row;
258
- --_flex-direction: row;
259
- }
260
- /* Each direction class also publishes --_flex-direction so descendants (e.g. .group)
261
- can read the container's axis via a style query and adapt when it flips responsively. */
262
- .flex-row {
263
- flex-direction: row;
264
- --_flex-direction: row;
265
- }
266
- .flex-col {
267
- flex-direction: column;
268
- --_flex-direction: column;
269
- }
270
-
271
- @container (min-width: 30rem) {
272
- .sm-flex {
273
- display: flex;
274
- }
275
- .sm-flex-row {
276
- display: flex;
277
- flex-direction: row;
278
- --_flex-direction: row;
279
- }
280
- .sm-flex-col {
281
- display: flex;
282
- flex-direction: column;
283
- --_flex-direction: column;
284
- }
285
- }
286
- @container (min-width: 48rem) {
287
- .md-flex {
288
- display: flex;
289
- }
290
- .md-flex-row {
291
- display: flex;
292
- flex-direction: row;
293
- --_flex-direction: row;
294
- }
295
- .md-flex-col {
296
- display: flex;
297
- flex-direction: column;
298
- --_flex-direction: column;
299
- }
300
- }
301
- @container (min-width: 64rem) {
302
- .lg-flex {
303
- display: flex;
304
- }
305
- .lg-flex-row {
306
- display: flex;
307
- flex-direction: row;
308
- --_flex-direction: row;
309
- }
310
- .lg-flex-col {
311
- display: flex;
312
- flex-direction: column;
313
- --_flex-direction: column;
314
- }
315
- }
316
- @container (min-width: 80rem) {
317
- .xl-flex {
318
- display: flex;
319
- }
320
- .xl-flex-row {
321
- display: flex;
322
- flex-direction: row;
323
- --_flex-direction: row;
324
- }
325
- .xl-flex-col {
326
- display: flex;
327
- flex-direction: column;
328
- --_flex-direction: column;
329
- }
330
- }
331
-
332
133
  /* ── Splits (internal fractions). .split sets its own flex context so it works
333
134
  standalone AND is registered by Bricks' parser (a non-empty bare rule). ── */
334
135
  .split {
335
136
  display: flex;
137
+ /* Restates the initial value so a HOST that defaults the element to `column`
138
+ — Bricks' block element — doesn't turn a split into a stack. Note the limit
139
+ of that: this rule is layered, and unlayered CSS beats every layer, so it
140
+ only wins against a host whose rule is itself layered or lower-specificity.
141
+ `.flex` carries the same caveat. */
142
+ flex-direction: row;
336
143
  }
337
144
  /* Equal by default. A ratio class sets two flex vars on the container (any a:b
338
- in one line); the first/last child read them. Responsive prefixes engage the
339
- ratio from a container breakpoint (equal below it). */
145
+ in one line); the first/last child read them; the class lives one layer up.
146
+ Responsive prefixes engage the ratio from a container breakpoint AND assert
147
+ the row, which is what lets `.flex-col` stack the pair below that breakpoint. */
340
148
  .split > * {
341
149
  flex: 1;
150
+ /* Load-bearing for the ratio below, which is a flex BASIS: a basis sizes the
151
+ border box only when the item IS border-box. `global.css` sets that
152
+ globally; restated here at a higher layer so the pattern still holds if a
153
+ consumer overrides the reset in a layer of their own, and so the dependency
154
+ is visible where it matters. */
155
+ box-sizing: border-box;
156
+ /* A flex item's automatic minimum is its min-content size, so one long
157
+ unbreakable run (a URL, a code span, a `<pre>`) pushes its column past its
158
+ share and the ratio quietly stops holding. Every consumer was re-deriving
159
+ this as `min-w-0`; it belongs to the pattern. */
160
+ min-inline-size: 0;
342
161
  }
343
162
  .split > :first-child {
344
- flex: var(--_split-a, 1);
163
+ flex-grow: var(--_split-a, 1);
345
164
  }
346
165
  .split > :last-child {
347
- flex: var(--_split-b, 1);
348
- }
349
-
350
- /* ── Auto-fit grid: cards wrap into as many equal columns as fit, each at least
351
- --grid-min wide. Unlike .split (explicit fractions) the column count is
352
- content-driven. ── */
353
- .grid-auto {
354
- display: grid;
355
- gap: var(--grid-gap, 1rem);
356
- grid-template-columns: repeat(auto-fit, minmax(var(--grid-min, 13rem), 1fr));
357
- }
358
-
359
- .split-1-2 {
360
- --_split-a: 1;
361
- --_split-b: 2;
362
- }
363
- .split-2-1 {
364
- --_split-a: 2;
365
- --_split-b: 1;
366
- }
367
- .split-1-3 {
368
- --_split-a: 1;
369
- --_split-b: 3;
370
- }
371
- .split-3-1 {
372
- --_split-a: 3;
373
- --_split-b: 1;
374
- }
375
- .split-1-4 {
376
- --_split-a: 1;
377
- --_split-b: 4;
378
- }
379
- .split-4-1 {
380
- --_split-a: 4;
381
- --_split-b: 1;
382
- }
383
- .split-2-3 {
384
- --_split-a: 2;
385
- --_split-b: 3;
386
- }
387
- .split-3-2 {
388
- --_split-a: 3;
389
- --_split-b: 2;
390
- }
391
-
392
- @container (min-width: 30rem) {
393
- .sm-split {
394
- --_split-a: 1;
395
- --_split-b: 1;
396
- }
397
- .sm-split-1-2 {
398
- --_split-a: 1;
399
- --_split-b: 2;
400
- }
401
- .sm-split-2-1 {
402
- --_split-a: 2;
403
- --_split-b: 1;
404
- }
405
- .sm-split-1-3 {
406
- --_split-a: 1;
407
- --_split-b: 3;
408
- }
409
- .sm-split-3-1 {
410
- --_split-a: 3;
411
- --_split-b: 1;
412
- }
413
- .sm-split-1-4 {
414
- --_split-a: 1;
415
- --_split-b: 4;
416
- }
417
- .sm-split-4-1 {
418
- --_split-a: 4;
419
- --_split-b: 1;
420
- }
421
- .sm-split-2-3 {
422
- --_split-a: 2;
423
- --_split-b: 3;
424
- }
425
- .sm-split-3-2 {
426
- --_split-a: 3;
427
- --_split-b: 2;
428
- }
429
- }
430
- @container (min-width: 48rem) {
431
- .md-split {
432
- --_split-a: 1;
433
- --_split-b: 1;
434
- }
435
- .md-split-1-2 {
436
- --_split-a: 1;
437
- --_split-b: 2;
438
- }
439
- .md-split-2-1 {
440
- --_split-a: 2;
441
- --_split-b: 1;
442
- }
443
- .md-split-1-3 {
444
- --_split-a: 1;
445
- --_split-b: 3;
446
- }
447
- .md-split-3-1 {
448
- --_split-a: 3;
449
- --_split-b: 1;
450
- }
451
- .md-split-1-4 {
452
- --_split-a: 1;
453
- --_split-b: 4;
454
- }
455
- .md-split-4-1 {
456
- --_split-a: 4;
457
- --_split-b: 1;
458
- }
459
- .md-split-2-3 {
460
- --_split-a: 2;
461
- --_split-b: 3;
462
- }
463
- .md-split-3-2 {
464
- --_split-a: 3;
465
- --_split-b: 2;
466
- }
467
- }
468
- @container (min-width: 64rem) {
469
- .lg-split {
470
- --_split-a: 1;
471
- --_split-b: 1;
472
- }
473
- .lg-split-1-2 {
474
- --_split-a: 1;
475
- --_split-b: 2;
476
- }
477
- .lg-split-2-1 {
478
- --_split-a: 2;
479
- --_split-b: 1;
480
- }
481
- .lg-split-1-3 {
482
- --_split-a: 1;
483
- --_split-b: 3;
484
- }
485
- .lg-split-3-1 {
486
- --_split-a: 3;
487
- --_split-b: 1;
488
- }
489
- .lg-split-1-4 {
490
- --_split-a: 1;
491
- --_split-b: 4;
492
- }
493
- .lg-split-4-1 {
494
- --_split-a: 4;
495
- --_split-b: 1;
496
- }
497
- .lg-split-2-3 {
498
- --_split-a: 2;
499
- --_split-b: 3;
500
- }
501
- .lg-split-3-2 {
502
- --_split-a: 3;
503
- --_split-b: 2;
504
- }
505
- }
506
- @container (min-width: 80rem) {
507
- .xl-split {
508
- --_split-a: 1;
509
- --_split-b: 1;
510
- }
511
- .xl-split-1-2 {
512
- --_split-a: 1;
513
- --_split-b: 2;
514
- }
515
- .xl-split-2-1 {
516
- --_split-a: 2;
517
- --_split-b: 1;
518
- }
519
- .xl-split-1-3 {
520
- --_split-a: 1;
521
- --_split-b: 3;
522
- }
523
- .xl-split-3-1 {
524
- --_split-a: 3;
525
- --_split-b: 1;
526
- }
527
- .xl-split-1-4 {
528
- --_split-a: 1;
529
- --_split-b: 4;
530
- }
531
- .xl-split-4-1 {
532
- --_split-a: 4;
533
- --_split-b: 1;
534
- }
535
- .xl-split-2-3 {
536
- --_split-a: 2;
537
- --_split-b: 3;
538
- }
539
- .xl-split-3-2 {
540
- --_split-a: 3;
541
- --_split-b: 2;
542
- }
543
- }
544
-
545
- /* ── Alignment (flex parents) + text-align. Bare classes, then shared tiers.
546
- Names mirror Tailwind: items-* (align-items), justify-* (justify-content),
547
- text-* (text-align). ── */
548
- .items-start {
549
- align-items: flex-start;
550
- }
551
- .items-center {
552
- align-items: center;
553
- }
554
- .items-end {
555
- align-items: flex-end;
556
- }
557
- .items-stretch {
558
- align-items: stretch;
559
- }
560
-
561
- .justify-start {
562
- justify-content: flex-start;
563
- }
564
- .justify-center {
565
- justify-content: center;
566
- }
567
- .justify-end {
568
- justify-content: flex-end;
569
- }
570
- .justify-between {
571
- justify-content: space-between;
572
- }
573
-
574
- .text-start {
575
- text-align: start;
576
- }
577
- .text-center {
578
- text-align: center;
579
- }
580
- .text-end {
581
- text-align: end;
582
- }
583
-
584
- @container (min-width: 30rem) {
585
- .sm-items-start {
586
- align-items: flex-start;
587
- }
588
- .sm-items-center {
589
- align-items: center;
590
- }
591
- .sm-items-end {
592
- align-items: flex-end;
593
- }
594
- .sm-items-stretch {
595
- align-items: stretch;
596
- }
597
- .sm-justify-start {
598
- justify-content: flex-start;
599
- }
600
- .sm-justify-center {
601
- justify-content: center;
602
- }
603
- .sm-justify-end {
604
- justify-content: flex-end;
605
- }
606
- .sm-justify-between {
607
- justify-content: space-between;
608
- }
609
- .sm-text-start {
610
- text-align: start;
611
- }
612
- .sm-text-center {
613
- text-align: center;
614
- }
615
- .sm-text-end {
616
- text-align: end;
617
- }
618
- }
619
- @container (min-width: 48rem) {
620
- .md-items-start {
621
- align-items: flex-start;
622
- }
623
- .md-items-center {
624
- align-items: center;
625
- }
626
- .md-items-end {
627
- align-items: flex-end;
628
- }
629
- .md-items-stretch {
630
- align-items: stretch;
631
- }
632
- .md-justify-start {
633
- justify-content: flex-start;
634
- }
635
- .md-justify-center {
636
- justify-content: center;
637
- }
638
- .md-justify-end {
639
- justify-content: flex-end;
640
- }
641
- .md-justify-between {
642
- justify-content: space-between;
643
- }
644
- .md-text-start {
645
- text-align: start;
646
- }
647
- .md-text-center {
648
- text-align: center;
649
- }
650
- .md-text-end {
651
- text-align: end;
652
- }
653
- }
654
- @container (min-width: 64rem) {
655
- .lg-items-start {
656
- align-items: flex-start;
657
- }
658
- .lg-items-center {
659
- align-items: center;
660
- }
661
- .lg-items-end {
662
- align-items: flex-end;
663
- }
664
- .lg-items-stretch {
665
- align-items: stretch;
666
- }
667
- .lg-justify-start {
668
- justify-content: flex-start;
669
- }
670
- .lg-justify-center {
671
- justify-content: center;
672
- }
673
- .lg-justify-end {
674
- justify-content: flex-end;
675
- }
676
- .lg-justify-between {
677
- justify-content: space-between;
678
- }
679
- .lg-text-start {
680
- text-align: start;
681
- }
682
- .lg-text-center {
683
- text-align: center;
684
- }
685
- .lg-text-end {
686
- text-align: end;
687
- }
688
- }
689
- @container (min-width: 80rem) {
690
- .xl-items-start {
691
- align-items: flex-start;
692
- }
693
- .xl-items-center {
694
- align-items: center;
695
- }
696
- .xl-items-end {
697
- align-items: flex-end;
698
- }
699
- .xl-items-stretch {
700
- align-items: stretch;
701
- }
702
- .xl-justify-start {
703
- justify-content: flex-start;
704
- }
705
- .xl-justify-center {
706
- justify-content: center;
707
- }
708
- .xl-justify-end {
709
- justify-content: flex-end;
710
- }
711
- .xl-justify-between {
712
- justify-content: space-between;
713
- }
714
- .xl-text-start {
715
- text-align: start;
716
- }
717
- .xl-text-center {
718
- text-align: center;
719
- }
720
- .xl-text-end {
721
- text-align: end;
722
- }
166
+ flex-grow: var(--_split-b, 1);
167
+ }
168
+ /* The ratio is a BASIS, not a grow factor.
169
+ `flex-grow` shares out only the FREE space, and a child's padding is not part
170
+ of it — so a padded column came out wider than its sibling by exactly its
171
+ horizontal padding and the ratio silently did not hold. Measured in Chrome:
172
+ an equal `.split` 1000px wide, one child with 40px padding a side, resolved
173
+ 540 / 460. `flex-basis` sizes the BORDER box (children are border-box), so
174
+ padding sits inside the ratio: 500 / 500.
175
+
176
+ Scoped to a two-child split, because a ratio is a pair contract — only
177
+ :first-child and :last-child carry one. With three or more children the bases
178
+ would not sum to 100% and a middle child, having no basis of its own, would
179
+ collapse to zero width; those keep the grow-factor behaviour above.
180
+
181
+ `gap` is absorbed by proportional shrink, which the spec weights by CONTENT-box
182
+ size, so a gapped pair whose columns are padded unequally lands within a few
183
+ px of its ratio rather than a whole padding out. */
184
+ .split > :first-child:nth-last-child(2) {
185
+ flex-basis: calc(var(--_split-a, 1) / (var(--_split-a, 1) + var(--_split-b, 1)) * 100%);
186
+ }
187
+ .split > :nth-child(2):last-child {
188
+ flex-basis: calc(var(--_split-b, 1) / (var(--_split-a, 1) + var(--_split-b, 1)) * 100%);
723
189
  }
@@ -64,7 +64,7 @@
64
64
  border: none;
65
65
  border-radius: 50%;
66
66
  color: var(--carousel-button-color, currentColor);
67
- background: var(--surface-bg-muted);
67
+ background: var(--color-bg-surface-muted);
68
68
  opacity: 0.9;
69
69
  transition:
70
70
  opacity 0.2s ease,
@@ -73,7 +73,7 @@
73
73
 
74
74
  &::scroll-button(*):hover {
75
75
  opacity: 1;
76
- background: var(--color-surface-muted);
76
+ background: var(--color-bg-surface-muted);
77
77
  }
78
78
 
79
79
  &::scroll-button(*):focus-visible {
@@ -211,7 +211,7 @@
211
211
  block-size: 2rem;
212
212
  border: none;
213
213
  border-radius: 50%;
214
- background: var(--surface-bg-muted);
214
+ background: var(--color-bg-surface-muted);
215
215
  color: var(--carousel-button-color, currentColor);
216
216
  opacity: 0.7;
217
217
  cursor: pointer;
@@ -10,8 +10,8 @@
10
10
  :where(:not(pre) > code) {
11
11
  font-family: var(--font-mono);
12
12
  font-size: 0.85em;
13
- background: var(--neutral-border);
14
- color: var(--neutral-text);
13
+ background: var(--color-border-neutral);
14
+ color: var(--color-text-neutral);
15
15
  padding: 0.1em 0.4em;
16
16
  border-radius: var(--br-default);
17
17
  }