@toybreaker/fiko 0.6.4 → 0.7.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/index.css CHANGED
@@ -50,5 +50,7 @@
50
50
  @import url(omg/utils/aspect.css) layer(utilities);
51
51
  @import url(omg/utils/gradients.css) layer(utilities);
52
52
  @import url(omg/utils/misc.css) layer(utilities);
53
+ @import url(omg/utils/animation.css) layer(utilities);
54
+ @import url(omg/utils/transitions.css) layer(utilities);
53
55
 
54
56
  @import url(omg/utils/fiko.css) layer(utilities);
package/omg/0reset.css CHANGED
@@ -10,7 +10,8 @@
10
10
  background-repeat: no-repeat;
11
11
  }
12
12
 
13
- html {
13
+ html,
14
+ body {
14
15
  -webkit-text-size-adjust: 100%;
15
16
  text-size-adjust: 100%;
16
17
  scroll-behavior: smooth;
package/omg/1vars.css CHANGED
@@ -3,6 +3,8 @@
3
3
  /* Brand palette overrides live in branding/palette.css */
4
4
 
5
5
  :root {
6
+ color-scheme: light dark;
7
+
6
8
  /* ── COLOR NEUTRALS ──────────────────────────── */
7
9
  --dark: oklch(0.20 0 0);
8
10
  --darkT25: color-mix(in oklch, var(--dark), transparent 75%);
@@ -19,10 +21,15 @@
19
21
  /* ── SIZING ─────────────────────────────────── */
20
22
  --tap_size: clamp(42px, 5vw, 52px);
21
23
  --radius: 6px;
22
- --borderpx: 3px;
24
+ --radius_sm: 3px;
25
+ --borderpx: 1px;
23
26
  --sticky_header_height: 88px; /* override in 000/ per client */
27
+ --sticky_z: 20;
24
28
  --maximise: -1.5rem; /* negative container bleed */
25
29
 
30
+ /* ── TYPOGRAPHY EXTRAS ───────────────────────── */
31
+ --mono: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
32
+
26
33
  /* ── SPACING ─────────────────────────────────── */
27
34
  --spaceH: 1.75svw;
28
35
  --spaceV: 1.5svh;
package/omg/3base.css CHANGED
@@ -90,7 +90,7 @@ blockquote {
90
90
 
91
91
  cite {
92
92
  display: block;
93
- padding-top: var(--spaceV);
93
+ padding-block-start: var(--spaceV);
94
94
  font-size: 77%;
95
95
  text-transform: capitalize;
96
96
  }
package/omg/4layout.css CHANGED
@@ -1,126 +1,42 @@
1
1
  /*! 🐉 404.css | MIT License */
2
- /* 4layout.css */
2
+ /* 4layout.css — semantic element layout defaults */
3
3
 
4
- /* Container implementation using container queries */
5
- .container {
6
- /* Container query setup */
7
- container-type: inline-size;
8
- container-name: main-container;
4
+ /* ── NAV ────────────────────────────────────────── */
5
+ /* Single scrollable row, no visible scrollbar */
9
6
 
10
- /* Simplified width calculation using the pre-defined container width variables */
11
- width: min(100% - (var(--breath) * 2), var(--container_xl));
12
- margin-inline: auto;
13
- }
14
-
15
- /* Modern grid system with CSS Grid */
16
- .grid {
17
- display: grid;
18
- grid-template-columns: repeat(var(--grid_cols, 1), 1fr);
19
- gap: var(--breath);
20
- }
21
-
22
- /* Responsive grid using container queries
23
- This leverages the breakpoint variables defined in 1vars.css */
24
- @container main-container (min-width: var(--bp_sm)) {
25
- .grid {
26
- --grid_cols: 2;
27
- }
28
- }
29
-
30
- @container main-container (min-width: var(--bp_md)) {
31
- .grid {
32
- --grid_cols: 3;
33
- }
34
- }
35
-
36
- @container main-container (min-width: var(--bp_lg)) {
37
- .grid {
38
- --grid_cols: 4;
39
- }
7
+ nav {
8
+ display: flex;
9
+ flex-wrap: nowrap;
10
+ align-items: center;
11
+ gap: var(--spaceH);
12
+ width: 100%;
13
+ overflow-x: auto;
14
+ overflow-y: hidden;
15
+ scrollbar-width: none; /* Firefox */
40
16
  }
41
17
 
42
- /* Modern navigation layout */
43
- nav {
44
- display: flex;
45
- flex-wrap: wrap;
46
- align-items: center;
47
- justify-content: space-between;
48
- gap: 1px;
18
+ nav::-webkit-scrollbar {
19
+ display: none; /* Chrome / Safari */
49
20
  }
50
21
 
51
22
  nav ul,
52
23
  nav ol {
53
- display: flex;
54
- flex-wrap: wrap;
55
- padding: 0;
56
- margin: 0;
57
- list-style: none;
24
+ display: flex;
25
+ flex-wrap: nowrap;
26
+ align-items: center;
27
+ gap: var(--spaceH);
28
+ padding: 0;
29
+ margin: 0;
30
+ list-style: none;
58
31
  }
59
32
 
60
33
  nav li {
61
- display: flex;
62
- align-items: center;
63
- }
64
-
65
- /* Optional: Add responsive navigation behavior */
66
- @container main-container (max-width: var(--bp_sm)) {
67
- nav {
68
- flex-direction: column;
69
- }
70
-
71
- nav ul,
72
- nav ol {
73
- flex-direction: column;
74
- width: 100%;
75
- }
76
- }
77
-
78
- /* ── BENTO BOX ──────────────────────────────────── */
79
- /* Mosaic product grid. Wrap cards in <div class="bento">
80
- *
81
- * Token-driven: adjust --bento_cols / --bento_rows at any level.
82
- * aspect-ratio keeps cells proportional automatically.
83
- * grid-auto-flow: dense fills gaps — add items in any order.
84
- *
85
- * Quick override examples:
86
- * style="--bento_cols:4; --bento_rows:2" → 4×2 landscape
87
- * style="--bento_cols:2; --bento_rows:4" → 2×4 portrait
88
- *
89
- * Span modifiers on children:
90
- * .bento_col_2 / .bento_col_3 → span N columns
91
- * .bento_row_2 / .bento_row_3 → span N rows
92
- * .bento_full → full width
93
- */
94
-
95
- .bento {
96
- --bento_cols: 3;
97
- --bento_rows: 3;
98
- display: grid;
99
- grid-template-columns: repeat(var(--bento_cols), 1fr);
100
- grid-template-rows: repeat(var(--bento_rows), 1fr);
101
- grid-auto-flow: dense;
102
- gap: calc(var(--spaceV) * 0.5) calc(var(--spaceH) * 0.5);
103
- width: 100%;
104
- aspect-ratio: var(--bento_cols) / var(--bento_rows);
105
- }
106
-
107
- /* Featured first child: 2×2 */
108
- .bento > :first-child { grid-column: span 2; grid-row: span 2; }
109
-
110
- /* ── Span modifiers ─────────────────────────────── */
111
- .bento > .bento_col_2 { grid-column: span 2; }
112
- .bento > .bento_col_3 { grid-column: span 3; }
113
- .bento > .bento_full { grid-column: 1 / -1; }
114
- .bento > .bento_row_2 { grid-row: span 2; }
115
- .bento > .bento_row_3 { grid-row: span 3; }
116
-
117
- /* ── Responsive defaults ────────────────────────── */
118
- @container main-container (max-width: 479px) {
119
- .bento { --bento_cols: 1; --bento_rows: 6; }
120
- .bento > :first-child { grid-column: span 1; grid-row: span 1; }
34
+ display: flex;
35
+ align-items: center;
36
+ flex-shrink: 0;
37
+ white-space: nowrap;
121
38
  }
122
39
 
123
- @container main-container (min-width: 480px) and (max-width: 639px) {
124
- .bento { --bento_cols: 2; --bento_rows: 4; }
125
- .bento > :first-child { grid-column: span 2; grid-row: span 2; }
40
+ nav a {
41
+ white-space: nowrap;
126
42
  }
@@ -1,7 +1,8 @@
1
1
  /*! 🐉 404.css | MIT License */
2
- /* 5components.css — interactive elements */
2
+ /* 5components.css — interactive element defaults and component classes */
3
+
4
+ /* ── BUTTON / INPUT ─────────────────────────────── */
3
5
 
4
- /* BUTTON / INPUT — shape & layout */
5
6
  button,
6
7
  .button input[type="submit"],
7
8
  input[type="button"],
@@ -26,7 +27,7 @@ input[type="reset"],
26
27
  user-select: none;
27
28
  }
28
29
 
29
- /* BUTTON CLASS — wraps a <button> inside an <a> */
30
+ /* .button — wraps a <button> inside an <a> */
30
31
  .button {
31
32
  border: none;
32
33
  border-radius: var(--radius);
@@ -45,7 +46,8 @@ button:hover {
45
46
  transform: translateY(3px);
46
47
  }
47
48
 
48
- /* LINK defaults */
49
+ /* ── LINK ───────────────────────────────────────── */
50
+
49
51
  a:not(.underline),
50
52
  [role="link"] {
51
53
  outline: none;
@@ -71,7 +73,9 @@ a input[type="reset"] {
71
73
  user-select: none;
72
74
  }
73
75
 
74
- /* CTA BUTTON filled, primary action */
76
+ /* ── CTA BUTTON ─────────────────────────────────── */
77
+ /* .button_cta — filled primary action */
78
+
75
79
  .button_cta button {
76
80
  background-color: var(--cta);
77
81
  border-color: var(--cta);
@@ -82,12 +86,15 @@ a input[type="reset"] {
82
86
  border-color: var(--cta_hover);
83
87
  }
84
88
 
85
- /* SVG overflow fix */
89
+ /* ── SVG ────────────────────────────────────────── */
90
+
86
91
  svg:not(:root) {
87
92
  overflow: hidden;
88
93
  }
89
94
 
90
- /* STICKY HEADER */
95
+ /* ── CONTROLS ───────────────────────────────────── */
96
+ /* Sticky header shell — fixed height for layout stability */
97
+
91
98
  .controls {
92
99
  height: var(--sticky_header_height);
93
100
  min-height: var(--sticky_header_height);
@@ -100,90 +107,14 @@ svg:not(:root) {
100
107
  z-index: 20;
101
108
  }
102
109
 
103
- /* ── HEADING SCALE ──────────────────────────────── */
104
-
105
- .h1,
106
- .h2,
107
- .h3,
108
- .h4,
109
- .h5,
110
- .h6 {
111
- user-select: none !important;
112
- line-height: 1.2 !important;
113
- font-family: var(--font_family) !important;
114
- }
115
- .h1 {
116
- font-size: calc(var(--font_size) * 2.5) !important;
117
- font-weight: var(--weight_light) !important;
118
- }
119
- .h2 {
120
- font-size: calc(var(--font_size) * 2) !important;
121
- font-weight: var(--weight_light) !important;
122
- }
123
- .h3 {
124
- font-size: calc(var(--font_size) * 1.75) !important;
125
- font-weight: var(--weight_thin) !important;
126
- }
127
- .h4 {
128
- font-size: calc(var(--font_size) * 1.5) !important;
129
- font-weight: var(--weight_thin) !important;
130
- }
131
- .h5 {
132
- font-size: calc(var(--font_size) * 1.25) !important;
133
- font-weight: var(--weight_thin) !important;
134
- }
135
- .h6 {
136
- font-size: calc(var(--font_size) * 1) !important;
137
- font-weight: var(--weight_light) !important;
138
- }
139
-
140
- /* ── TEXT UTILITIES ─────────────────────────────── */
141
-
142
- .dim {
143
- color: var(--text);
144
- font-size: calc(var(--font_size) * 0.95);
145
- }
146
-
147
- .underline {
148
- text-decoration: underline;
149
- text-underline-offset: 3px;
150
- }
151
-
152
- .prose {
153
- max-width: 66ch;
154
- margin-inline: auto;
155
- }
156
-
157
- .typewriter {
158
- font-family: var(--font_serif);
159
- }
160
-
161
- .cat {
162
- text-transform: capitalize;
163
- }
164
-
165
- /* ── LAYOUT UTILITIES ───────────────────────────── */
166
-
167
- .maximise {
168
- margin-left: var(--maximise);
169
- margin-right: var(--maximise);
170
- }
171
-
172
- .clipped_circle {
173
- clip-path: circle(50px at center);
174
- }
175
-
176
110
  /* ── ACCORDION ──────────────────────────────────── */
177
111
  /* Usage: <details class="accordion"><summary>Title</summary><div>…</div></details>
178
- * Icon tokens: --accordion_icon_open / --accordion_icon_closed (default + / ×)
179
- * Override per-element: style="--accordion_icon_closed: '▶'; --accordion_icon_open: '▼'"
112
+ * Chevron rotates 180° when open. Use .dotted modifier for dot-leader.
113
+ * Use .accordion_chevron modifier for right-pointing arrow style.
180
114
  */
181
115
 
182
- details.accordion {
183
- border-bottom: var(--borderpx) solid var(--border_color);
184
- }
185
-
186
116
  details.accordion > summary {
117
+ border-bottom: var(--borderpx) solid var(--border_color);
187
118
  display: flex;
188
119
  flex-direction: row;
189
120
  align-items: center;
@@ -228,7 +159,7 @@ details.accordion > summary::after {
228
159
  transform: rotate(0deg);
229
160
  transition: transform var(--transition);
230
161
  order: 2;
231
- margin-left: auto;
162
+ margin-inline-start: auto;
232
163
  }
233
164
 
234
165
  details.accordion[open] > summary::after {
@@ -243,66 +174,193 @@ details.accordion > :not(summary) {
243
174
  padding: var(--spaceV) var(--spaceH);
244
175
  }
245
176
 
246
- /* ── ACCORDION DOTTED dot-leader modifier ─────── */
247
- /* Usage: <details class="accordion dotted">
177
+ /* ── ACCORDION DOTTED ───────────────────────────── */
178
+ /* Modifier: <details class="accordion dotted">
248
179
  * Adds a dotted leader between the label and the chevron.
249
180
  */
250
181
 
182
+ details.accordion.dotted > summary {
183
+ border-bottom: none;
184
+ }
185
+
251
186
  details.accordion.dotted > summary::before {
252
187
  content: "";
253
188
  flex: 1;
254
- border-bottom: var(--borderpx) dotted currentColor;
189
+ border-bottom: max(2px, var(--borderpx)) dotted currentColor;
255
190
  margin-inline: 0.5rem;
256
191
  align-self: center;
257
192
  opacity: 0.3;
258
193
  order: 1;
259
194
  }
260
195
 
261
- /* ── ACCORDION CHEVRON SVG arrow marker ────────── */
262
- /* Modifier: <details class="accordion accordion_chevron">
263
- * Overrides default down-chevron with a right-pointing SVG arrow.
264
- * Closed: → pointing right. Open: rotated 90° pointing down.
265
- * Composable: stack with other modifiers for full editorial style.
266
- * Color: currentColor by default; override with CSS custom property.
196
+ /* ── ACCORDION PLUS/MINUS ───────────────────────── */
197
+ /* Modifier: <details class="accordion accordion_pm">
198
+ * Plus when closed, minus when open. No rotation — clean toggle symbol.
267
199
  */
268
200
 
269
- details.accordion.accordion_chevron > summary::after,
270
- details.accordion.accordion_chevron[open] > summary::after {
201
+ details.accordion.accordion_pm > summary::after {
202
+ content: "+";
203
+ background-color: transparent;
204
+ -webkit-mask-image: none;
205
+ mask-image: none;
206
+ width: auto;
207
+ height: auto;
208
+ font-size: 1.75em;
209
+ font-weight: var(--weight_thin);
210
+ line-height: 1;
211
+ color: var(--primary);
212
+ transition: color var(--transition);
213
+ transform: none;
214
+ }
215
+
216
+ details.accordion.accordion_pm[open] > summary::after {
217
+ content: "−";
218
+ transform: none;
219
+ }
220
+
221
+ /* ── FORM ELEMENTS ──────────────────────────────── */
222
+ /* Inputs, textarea, select. Wrap with .field for labelled stacks. */
223
+
224
+ input[type="text"],
225
+ input[type="email"],
226
+ input[type="password"],
227
+ input[type="search"],
228
+ input[type="tel"],
229
+ input[type="url"],
230
+ input[type="number"],
231
+ input[type="date"],
232
+ select {
233
+ height: var(--tap_size);
234
+ padding-inline: var(--spaceH);
235
+ padding-block: var(--spaceV);
236
+ border: var(--borderpx) solid var(--border_color);
237
+ border-radius: var(--radius);
238
+ background: transparent;
239
+ color: inherit;
240
+ font: inherit;
241
+ outline: none;
242
+ transition: border-color var(--transition);
243
+ width: 100%;
244
+ }
245
+
246
+ textarea {
247
+ min-height: calc(var(--tap_size) * 2);
248
+ padding-inline: var(--spaceH);
249
+ padding-block: var(--spaceV);
250
+ border: var(--borderpx) solid var(--border_color);
251
+ border-radius: var(--radius);
252
+ background: transparent;
253
+ color: inherit;
254
+ font: inherit;
255
+ outline: none;
256
+ resize: vertical;
257
+ transition: border-color var(--transition);
258
+ width: 100%;
259
+ }
260
+
261
+ /* focus — highlight border, suppress default outline (reset handles :focus-visible) */
262
+ input[type="text"]:focus-visible,
263
+ input[type="email"]:focus-visible,
264
+ input[type="password"]:focus-visible,
265
+ input[type="search"]:focus-visible,
266
+ input[type="tel"]:focus-visible,
267
+ input[type="url"]:focus-visible,
268
+ input[type="number"]:focus-visible,
269
+ input[type="date"]:focus-visible,
270
+ textarea:focus-visible,
271
+ select:focus-visible {
272
+ border-color: var(--primary);
273
+ }
274
+
275
+ /* disabled */
276
+ input[type="text"]:disabled,
277
+ input[type="email"]:disabled,
278
+ input[type="password"]:disabled,
279
+ input[type="search"]:disabled,
280
+ input[type="tel"]:disabled,
281
+ input[type="url"]:disabled,
282
+ input[type="number"]:disabled,
283
+ input[type="date"]:disabled,
284
+ textarea:disabled,
285
+ select:disabled {
286
+ opacity: 0.45;
287
+ cursor: not-allowed;
288
+ }
289
+
290
+ /* invalid — semantic red (OKLCH) */
291
+ input[type="text"]:invalid,
292
+ input[type="email"]:invalid,
293
+ input[type="password"]:invalid,
294
+ input[type="search"]:invalid,
295
+ input[type="tel"]:invalid,
296
+ input[type="url"]:invalid,
297
+ input[type="number"]:invalid,
298
+ input[type="date"]:invalid,
299
+ textarea:invalid,
300
+ select:invalid,
301
+ input[type="text"][aria-invalid="true"],
302
+ input[type="email"][aria-invalid="true"],
303
+ input[type="password"][aria-invalid="true"],
304
+ input[type="search"][aria-invalid="true"],
305
+ input[type="tel"][aria-invalid="true"],
306
+ input[type="url"][aria-invalid="true"],
307
+ input[type="number"][aria-invalid="true"],
308
+ input[type="date"][aria-invalid="true"],
309
+ textarea[aria-invalid="true"],
310
+ select[aria-invalid="true"] {
311
+ border-color: oklch(0.6 0.22 25);
312
+ }
313
+
314
+ /* select — hide native arrow, inject currentColor chevron via mask */
315
+ select {
316
+ appearance: none;
317
+ -webkit-appearance: none;
318
+ padding-inline-end: calc(var(--spaceH) + 1.75em);
319
+ background-image: none;
320
+ /* chevron pseudo not possible on replaced elements; use wrapper .select_wrap instead */
321
+ }
322
+
323
+ /* .select_wrap — wraps <select> to inject a currentColor chevron via ::after */
324
+ .select_wrap {
325
+ position: relative;
326
+ display: inline-flex;
327
+ width: 100%;
328
+ }
329
+
330
+ .select_wrap select {
331
+ width: 100%;
332
+ }
333
+
334
+ .select_wrap::after {
271
335
  content: "";
272
- display: block;
336
+ position: absolute;
337
+ inset-block: 0;
338
+ inset-inline-end: var(--spaceH);
273
339
  width: 1.25em;
274
340
  height: 1.25em;
275
- flex-shrink: 0;
341
+ margin-block: auto;
276
342
  background-color: currentColor;
277
- -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 6L15 12L9 18'/%3E%3C/svg%3E");
343
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 9L12 15L18 9'/%3E%3C/svg%3E");
278
344
  -webkit-mask-size: contain;
279
345
  -webkit-mask-repeat: no-repeat;
280
346
  -webkit-mask-position: center;
281
- mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 6L15 12L9 18'/%3E%3C/svg%3E");
347
+ mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 9L12 15L18 9'/%3E%3C/svg%3E");
282
348
  mask-size: contain;
283
349
  mask-repeat: no-repeat;
284
350
  mask-position: center;
285
- transform: rotate(0deg);
286
- transition:
287
- transform 200ms ease,
288
- background-color var(--transition);
289
- line-height: 1;
290
- font-size: 1em;
351
+ pointer-events: none;
291
352
  }
292
353
 
293
- details.accordion.accordion_chevron[open] > summary::after {
294
- transform: rotate(90deg);
295
- }
354
+ /* ── FIELD WRAPPER ──────────────────────────────── */
355
+ /* Usage: <div class="field"><label>…</label><input …></div> */
296
356
 
297
- /* ── DOT LEADER ─────────────────────────────────── */
298
- /* Usage: <span class="dots"> between label and value in menus/TOC */
357
+ .field {
358
+ display: flex;
359
+ flex-direction: column;
360
+ gap: calc(var(--spaceV) * 0.5);
361
+ }
299
362
 
300
- .dots {
301
- flex: 8;
302
- border-bottom: var(--borderpx) dotted currentColor;
303
- margin: 0 0 0 8px;
304
- height: var(--borderpx);
305
- position: relative;
306
- top: 0;
307
- opacity: 0.25;
363
+ .field label {
364
+ font-weight: var(--weight_regular);
365
+ user-select: none;
308
366
  }
@@ -0,0 +1,54 @@
1
+ /*! 🐉 404.css | MIT License */
2
+ /* utils/animation.css — @starting-style on-enter helpers */
3
+
4
+ /* ── ENTER TRANSITIONS ── */
5
+ /* Apply to any element that should animate in when first rendered.
6
+ * Requires a transition on the property being animated.
7
+ * Usage: <div class="fade_in"> or <dialog class="slide_up">
8
+ */
9
+
10
+ .fade_in {
11
+ opacity: 1;
12
+ transition: opacity var(--transition);
13
+ }
14
+ @starting-style {
15
+ .fade_in {
16
+ opacity: 0;
17
+ }
18
+ }
19
+
20
+ .slide_up {
21
+ translate: 0 0;
22
+ opacity: 1;
23
+ transition: translate var(--transition), opacity var(--transition);
24
+ }
25
+ @starting-style {
26
+ .slide_up {
27
+ translate: 0 1rem;
28
+ opacity: 0;
29
+ }
30
+ }
31
+
32
+ .slide_down {
33
+ translate: 0 0;
34
+ opacity: 1;
35
+ transition: translate var(--transition), opacity var(--transition);
36
+ }
37
+ @starting-style {
38
+ .slide_down {
39
+ translate: 0 -1rem;
40
+ opacity: 0;
41
+ }
42
+ }
43
+
44
+ .scale_in {
45
+ scale: 1;
46
+ opacity: 1;
47
+ transition: scale var(--transition), opacity var(--transition);
48
+ }
49
+ @starting-style {
50
+ .scale_in {
51
+ scale: 0.95;
52
+ opacity: 0;
53
+ }
54
+ }