fertig 1.0.3 → 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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,135 @@ is the token names, the class names (the seven, plus the layout utilities),
6
6
  and the ARIA attributes the component layer reads — changes to any of those
7
7
  are breaking.
8
8
 
9
+ ## [2.0.0] — 2026-08-31
10
+
11
+ ### Breaking
12
+
13
+ - **`--a1` / `--a2` are now `--fertig-a1` / `--fertig-a2`, with no alias.**
14
+ These are `@property` registrations, and a registration is global — it cannot
15
+ be layered, scoped or overridden. A two-character name meant a consumer's own
16
+ `--a1` was silently retyped to `<number>`, which is a bug that only a rename
17
+ can fix.
18
+
19
+ **To migrate:** if you set `--a1` or `--a2`, rename them. Nothing else
20
+ changes — the values mean the same thing and the elevation scale is
21
+ untouched. If you never set them, there is nothing to do.
22
+
23
+ Every other token name is unchanged. They are ordinary custom properties,
24
+ they are the documented API, and they are deliberately short.
25
+
26
+ A visual refresh, an audit pass, and a component-first repositioning. One token
27
+ rename aside, the surface is the same — the same classes and attributes — but
28
+ the default look changes visibly, so treat this as a redesign rather than a
29
+ drop-in bump.
30
+
31
+ ### Added
32
+
33
+ - **Named accents.** `data-accent="indigo|sky|sage|clay|plum|gold|slate"` on any
34
+ element retints everything inside it: links, focus rings, filled buttons, the
35
+ caret, the selection. Scoped rather than global, so one section can differ
36
+ from the rest of a page. Each pair is measured — the light tone clears AA as
37
+ link text on paper, the dark tone clears it on the dark ground.
38
+ - **Motion tokens.** `--ease-out`, `--ease-in`, `--ease` and the durations
39
+ `--dur-1` / `--dur-2`. The sheet had been animating with a bare `ease`, which
40
+ is the browser default and the flattest curve available.
41
+ - `--rs`, a small radius for inline chips and code, so they do not inherit the
42
+ larger control radius and read as lozenges.
43
+
44
+ ### Changed
45
+
46
+ - **The default accent is indigo**, not the desaturated navy it was. Measured
47
+ 6.28:1 as link text on paper and 6.39:1 for a white label on the fill in
48
+ light; 8.72:1 and 10.26:1 in dark. Both sit inside sRGB.
49
+ - **Cards no longer paint a tinted strip behind their header and footer.** A
50
+ filled bar across the top of a card is the old panel-heading pattern and is
51
+ what dated the sheet on sight; a hairline separates just as well and lets the
52
+ card read as one surface.
53
+ - Radii up: `--r` 6px → 9px, `--rw` 10px → 14px. Controls have more room —
54
+ buttons and fields gained roughly a tenth of an em of padding.
55
+ - More things transition, on the named curves: tabs, badges, cards, segmented
56
+ controls and popover items, alongside the controls that already did.
57
+ `:focus-visible` is explicitly excluded — a focus ring has to be there the
58
+ instant focus lands, not fade in after it.
59
+
60
+ ### Fixed
61
+
62
+ - The tone bar on `.card[data-tone]` follows the corner radius again. It was an
63
+ inset shadow, which does not track the curve cleanly at the larger radius —
64
+ it read as a detached line with gaps at both top corners. It is a background
65
+ layer now, which the radius clips. The duplicate indicator on
66
+ `.card > header` is gone with it: the filled header used to hide it, and
67
+ without the fill both were painting.
68
+ - Navigation lists. `[data-layout=sidebar]` shipped without any styling for the
69
+ nav inside it, so the obvious markup — a `<menu>` in a `<nav>` — came out as
70
+ a boxed list group. It is navigation now: no rules between items, no bullets,
71
+ and the link fills the row.
72
+ - `aside` and `search` are block landmarks that had no vertical rhythm of their
73
+ own, so whatever followed sat flush against them.
74
+
75
+ ### Fixed — audit pass
76
+
77
+ An audit pass. Everything here came out of `docs/known-flaws.md`, which lists
78
+ what was found, what was verified in a browser, and what was left alone on
79
+ purpose.
80
+
81
+ - **The shell survives a framework wrapper.** The page shell was `body > *`, so
82
+ a React, Vue, Svelte or Next app rendering into `<div id="root">` lost the
83
+ measure, the paper surface and the gutters with nothing on screen to say why.
84
+ The shell now also matches the children of a single `#root`, `#app`,
85
+ `#__next` or `[data-fertig]` wrapper. Every added selector sits inside
86
+ `:where()`, so specificity is unchanged.
87
+ - **A floor under the floor.** Every colour token was an unguarded
88
+ `light-dark()`. In an engine without it the tokens were invalid at
89
+ computed-value time, so backgrounds went transparent and colour was
90
+ inherited — a page could land unreadable rather than plain. A
91
+ `@supports not (color: light-dark(…))` block at the end of the layer restates
92
+ the palette in flat sRGB, in both schemes.
93
+ - **`data-size`, `data-variant` and `data-block` are scoped to controls.** As
94
+ bare attribute selectors they restyled any element carrying those very common
95
+ attribute names — a `<span data-size="sm">` picked up button padding.
96
+ - **The focus ring no longer reshapes what it rings.** `:focus-visible` set
97
+ `border-radius: var(--r)`, which is the element's own radius, not the ring's:
98
+ a focused `<dialog>` snapped from `--rw` (14px) to `--r` (9px). Outlines
99
+ already follow the element's corners, so the declaration is simply gone.
100
+ - **`<svg>` stays inline.** It was in the `display: block` rule with `img`,
101
+ `video` and `iframe`, which dropped every inline icon onto its own line.
102
+ - **Toasts can stack.** Two `[popover][data-toast]` elements shared one set of
103
+ corner coordinates and overlapped, and an open popover is in the top layer so
104
+ no ordinary wrapper could stack them. `<div popover="manual"
105
+ data-toast-region>` is now the popover, with a `<div data-toast>` per message.
106
+ - **A selected tab is visible in Windows High Contrast.** Its cue was a
107
+ `box-shadow` that the forced-colors layer removes, and the replacement set
108
+ `border-color` on an element with `border: 0`. It now sets a real
109
+ `border-bottom`.
110
+ - **`--on-ac` survives a custom `--ac` in shipping browsers.** The
111
+ `contrast-color()` guard is real but almost nothing implements it. A relative
112
+ colour branch reaches the same black-or-white decision from the accent's own
113
+ lightness, and has been cross-engine since 2024.
114
+ - **`interpolate-size: allow-keywords` is set on `details`, not `:root`.** It is
115
+ inherited, so the old placement changed how *your* `height: auto` transitions
116
+ behaved as a side effect of animating a disclosure.
117
+ - **Two universal rules narrowed to what the sheet actually styles.**
118
+ `scrollbar-width: thin` no longer thins the page's own scrollbar (a
119
+ target-size problem for imprecise pointers), and `corner-shape: squircle` no
120
+ longer reshapes your components.
121
+ - **`input[type=image]` is a button, not a text field.** It was missing from the
122
+ `:not()` list and got full-width sunken-field treatment.
123
+ - **The tooltip is flow-relative and reachable on touch** — logical inset
124
+ properties with a `:dir(rtl)` offset, and `:active` alongside `:hover`. It is
125
+ still decorative, and now says so in the sheet, the README and the docs.
126
+ - **`a[target=_blank]`** no longer appends an arrow to a link wrapping an image.
127
+ - **Print keeps the footer.** It was hidden along with the toolbar, which drops
128
+ the legal line, the contact and the citations from every printout.
129
+ - **The small variant stays small on touch.** `(pointer: coarse)` forced
130
+ `min-height: 44px` on everything; `data-size="sm"` opts down to 32px, still
131
+ above the 24px WCAG 2.5.8 floor.
132
+ - `package.json`'s size claim, the one string `tools/sizes.py` does not reach.
133
+
134
+ ### Changed
135
+
136
+ - `--a1` / `--a2` renamed — see **Breaking** above.
137
+
9
138
  ## [1.0.3] — 2026-08-30
10
139
 
11
140
  ### Changed
@@ -133,10 +262,11 @@ layer is `@layer fertig` — a dot in a layer name would declare a sub-layer.
133
262
 
134
263
  ### Browser support
135
264
 
136
- - Two-year support policy: the sheet targets browsers from the last two years
137
- and carries nothing for the ones before them. It ships no vendor prefixes
138
- except the three no engine has replaced (`-webkit-text-size-adjust`, the
139
- autofill repaint, and the `progress` pseudo-elements).
265
+ - Two-year support policy: the sheet targets browsers from the last two years.
266
+ The only thing carried for the ones before them is the flat-sRGB palette
267
+ above ("a floor under the floor"). It ships no vendor prefixes except the
268
+ three no engine has replaced (`-webkit-text-size-adjust`, the autofill
269
+ repaint, and the `progress` pseudo-elements).
140
270
  - The sheet is wrapped in `@layer fertig`, so unlayered author CSS overrides it
141
271
  at any specificity. There is no `!important` anywhere in it: inside a cascade
142
272
  layer an important declaration outranks your own unlayered CSS, which would
package/README.md CHANGED
@@ -1,10 +1,53 @@
1
1
  # fertig
2
2
 
3
- A classless CSS file for developers who want a project to look presentable in
4
- the ten seconds before they start building it. Link it, write ordinary HTML,
5
- and the page is finished.
3
+ A classless CSS file that gives you **components**, not just styled elements
4
+ menus, dialogs, drawers, toasts and tooltips from plain semantic HTML,
5
+ addressed by the ARIA that makes them accessible, and working with JavaScript
6
+ switched off.
7
+
8
+ Link it, write ordinary HTML, and the page is finished.
9
+
10
+ **32.7 KB raw · 8.4 KB gzipped · no build step · no dependencies · no JavaScript.**
11
+
12
+ ### What makes it different
13
+
14
+ Surveyed across the eleven most-used classless stylesheets on 2026-08-31
15
+ ([working notes](docs/classless-landscape-2026.md)):
16
+
17
+ - **Components addressed by ARIA.** Only one other classless sheet ships a
18
+ single ARIA-addressed component. None ships tabs, a segmented control, or an
19
+ anchored popover menu.
20
+ - **Behaviour without JavaScript.** Others style `<dialog>` and leave the open
21
+ and close to you. Here `popover`, `command` and anchor positioning do it —
22
+ [audited with scripting disabled](#components-that-work-without-javascript).
23
+ - **Modern CSS.** Zero of the eleven use `oklch()`, `light-dark()`, `@layer`,
24
+ `@property`, container queries or anchor positioning. This sheet uses all of
25
+ them.
26
+ - **Cascade-layered.** It lives in `@layer fertig`, so your own unlayered CSS
27
+ wins at any specificity and overriding never needs `!important`. No other
28
+ classless sheet does this.
29
+ - **RTL by construction.** Written in logical properties throughout, not
30
+ patched with `[dir=rtl]` overrides afterwards.
31
+
32
+ It is *not* the smallest — Concrete.css is 1.2 KB gzipped, and most of the
33
+ field is a fraction of this because it styles elements and stops there. Against
34
+ the two classless sheets that also ship a component layer, fertig is the
35
+ lightest: 8.4 KB against matcha's 8.6 KB and Pico classless at 10.2 KB, and the
36
+ only one of the three whose components work without JavaScript. Size is a
37
+ constraint here, not the pitch.
38
+
39
+ ## Components that work without JavaScript
40
+
41
+ Audited in a browser with scripting disabled:
42
+
43
+ | | |
44
+ |---|---|
45
+ | Popover menu, dialog, drawer, toast, tooltip, disclosure | **work with no script** |
46
+ | Tabs | **styled only** — switching panels needs ~8 lines of your own |
6
47
 
7
- **28.7 KB raw · 7.8 KB gzipped · no build step · no dependencies.**
48
+ Tabs are the one gap, and it is deliberate: `aria-selected` must be a real
49
+ attribute for a screen reader to announce the right tab, and CSS cannot set
50
+ attributes. The snippet is in the docs.
8
51
 
9
52
  ```html
10
53
  <link rel="stylesheet" href="fertig.css">
@@ -13,6 +56,18 @@ and the page is finished.
13
56
  That is the whole integration. Write semantic HTML; it looks finished.
14
57
  Open `index.html` for the full demo.
15
58
 
59
+ ## Upgrading from 1.x
60
+
61
+ One rename: `--a1` / `--a2` are now `--fertig-a1` / `--fertig-a2`. They are
62
+ `@property` registrations, and a registration is global — a two-character name
63
+ was silently retyping a `--a1` of your own. If you set them, rename them; the
64
+ values mean the same thing. If you did not, there is nothing to do.
65
+
66
+ Every other token, class and attribute is unchanged. The default look does
67
+ change visibly though — larger radii, no filled strip behind card headers, an
68
+ indigo accent — so read it as a redesign, not a drop-in bump. Pin `fertig@1`
69
+ if you need the old appearance.
70
+
16
71
  ## Install
17
72
 
18
73
  ```sh
@@ -21,7 +76,7 @@ npm install fertig
21
76
 
22
77
  ```html
23
78
  <!-- or from a CDN, pinned -->
24
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fertig@1/fertig.min.css">
79
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fertig@2/fertig.min.css">
25
80
  ```
26
81
 
27
82
  ```css
@@ -31,8 +86,11 @@ npm install fertig
31
86
 
32
87
  ## What it is
33
88
 
34
- System type with macOS window furniture and a classic sense of depth
35
- a nod to System 7 and Win98, not a costume.
89
+ Opinions, so you don't have to have them: system type, one accent, one
90
+ measure, a window on a desktop. The structure is classic — a title bar, sunken
91
+ fields, raised buttons — and the finish is macOS: vibrancy, hairlines, soft
92
+ radii, the blue focus ring. None of it is a period costume, and none of it is
93
+ a picture of an OS: it is all CSS that every current engine already ships.
36
94
 
37
95
  - **System type, set properly** — 16px on a 1.65 line height across roughly
38
96
  seventy characters. Code keeps a monospace face, where it earns its place.
@@ -58,9 +116,25 @@ Direct children of `<body>` are the containers:
58
116
  </body>
59
117
  ```
60
118
 
61
- Using a framework where `body` is not the semantic parent? Re-point the four
62
- container rules at your root element (`#root`, `#__next`) they are the only
63
- place `body >` appears.
119
+ One wrapper is fine. React, Vue, Svelte and Next render into a mount node, so
120
+ the shell matches `body`'s children *or* the children of a single `#root`,
121
+ `#app`, `#__next`, or `[data-fertig]` wrapper:
122
+
123
+ ```html
124
+ <body>
125
+ <div id="root">
126
+ <nav>…</nav>
127
+ <main>…</main>
128
+ </div>
129
+ </body>
130
+ ```
131
+
132
+ Deeper than that, or a differently named mount node, and you re-point the shell
133
+ yourself — it is the only place `body >` appears:
134
+
135
+ ```css
136
+ #shell > *, #shell > header, #shell > main, #shell > footer { /* … */ }
137
+ ```
64
138
 
65
139
  ## Components
66
140
 
@@ -76,8 +150,8 @@ accessible by construction.
76
150
  | Breadcrumb | `<nav aria-label="Breadcrumb"><ol>` |
77
151
  | Dialog | `<dialog>` — animates in, blurs the page behind; optional `<header>`/`<footer>` pin while the body scrolls |
78
152
  | Loading | `aria-busy="true"` (inline spinner) |
79
- | Tooltip | `data-tooltip="…"` |
80
- | Button variants | `data-variant="ghost\|link"`, `data-size="sm\|lg"`, `data-icon`, `data-block` |
153
+ | Tooltip | `data-tooltip="…"` — decorative; put the same words in `aria-label` too |
154
+ | Button variants | `data-variant="ghost\|link"`, `data-size="sm\|lg"`, `data-icon`, `data-block` — on controls only, so they cannot catch a `<span data-size>` of yours |
81
155
  | Card anatomy | `<header>` / `<footer>` inside `.card`; `<a class="card">` lifts on hover |
82
156
  | Tones | `data-tone="ok\|warn\|err"` retints any component |
83
157
 
@@ -89,7 +163,7 @@ no classes:
89
163
  | Avatar | `data-avatar` on an `<img>` or on initials in a `<span>`; `="sm\|lg"` |
90
164
  | Skeleton | `data-skeleton` on the element that is still loading |
91
165
  | Sheet / drawer | `<dialog data-side="left\|right\|bottom">` — the same dialog, docked to an edge |
92
- | Toast | `[popover][data-toast]` — non-modal, parked in a corner |
166
+ | Toast | `[popover][data-toast]` — non-modal, parked in a corner. Several at once: `<div popover="manual" data-toast-region>` with a `<div data-toast>` per message |
93
167
  | List group | a plain `<menu>` outside a popover becomes a bordered list |
94
168
  | Nav menu | a `<menu>` inside a `<nav>` is navigation instead — no rules, no bullets, `aria-current` marks the page |
95
169
  | Sidebar layout | `data-layout="sidebar"` on a wrapper of two children; the first sticks |
@@ -146,8 +220,9 @@ Override the four tokens you'd actually want to change:
146
220
 
147
221
  If you change `--ac`, check `--on-ac` too — that is the text colour sitting on
148
222
  the accent, and a light accent needs dark text to stay legible.
149
- `--up` / `--up2` / `--dn` are the elevation scale, `--a1` / `--a2` the shadow
150
- alphas, `--rw` the window radius, and `--nw` the column the toolbar's contents
223
+ `--up` / `--up2` / `--dn` are the elevation scale, `--fertig-a1` /
224
+ `--fertig-a2` the shadow alphas (these two are `@property` registrations, and
225
+ a registration is global — hence the prefix), `--rw` the window radius, and `--nw` the column the toolbar's contents
151
226
  line up with. `--nw` follows `--w`, so nothing moves by default; `<nav
152
227
  class="wide">` re-points it at the wide column, which is what an app screen
153
228
  built on `.wide` wants so its wordmark doesn't float in the middle of the
@@ -205,7 +280,7 @@ assistive technology reads.
205
280
 
206
281
  | Sheet | Raw | Gzip |
207
282
  |---|---:|---:|
208
- | **fertig** | **28.7 KB** | **7.8 KB** |
283
+ | **fertig** | **32.7 KB** | **8.4 KB** |
209
284
  | Pico 2.1.1 classless | 69.4 KB | 10.1 KB |
210
285
 
211
286
  Measured with `gzip -9`, KB = 1024 bytes for every row. Most of the gap is Pico's full
@@ -225,17 +300,21 @@ button { background: hotpink } /* wins, no !important needed */
225
300
 
226
301
  ## Modern CSS, used deliberately
227
302
 
228
- Everything past the baseline sits behind `@supports` and is additive:
303
+ Everything past the floor sits behind `@supports` and is additive:
229
304
  `contrast-color()` picks the text colour on your accent so an override cannot
230
305
  fail contrast; anchor positioning attaches popover menus to their button;
231
306
  `::details-content` with `interpolate-size` animates disclosures open;
232
307
  `field-sizing` grows textareas; `corner-shape: squircle` gives continuous
233
308
  corners; `text-box: trim-both` sits headings on their cap height; and
234
- `@property` types the shadow alphas so elevation can transition;
235
- `appearance: base-select` styles the dropdown picker itself; and `.card` is a
236
- container you can write `@container` queries against. Without any of it,
237
- nothing breaks. Relative colour (`oklch(from …)`) is not in that list it is
238
- baseline here, deriving both the shadow ink and the filled-button hover.
309
+ `appearance: base-select` styles the dropdown picker itself. Without any of it,
310
+ nothing breaks. Relative colour (`oklch(from …)`) is on that list too, for one
311
+ job only: lightening the filled button on hover in OKLCH. The shadow alphas
312
+ that used to need it are taken with `color-mix` against `transparent` instead
313
+ pixel-identical, and three years older, which is what keeps Safari 17.5 inside
314
+ the floor. Two things are *not* on the list because they are part of the floor:
315
+ `@property`, which types the shadow alphas so elevation can transition, and
316
+ `container-type` on `.card`, which makes every card a container you can write
317
+ `@container` queries against.
239
318
 
240
319
  It also answers to the OS: `prefers-reduced-motion`,
241
320
  `prefers-reduced-transparency`, `prefers-contrast`, `forced-colors`,
@@ -251,14 +330,36 @@ margins with no stranded lines.
251
330
 
252
331
  ## Browser support
253
332
 
254
- The policy is a two-year window: fertig targets browsers released in the last
255
- two years and carries nothing for the ones before them no vendor prefixes, no
256
- polyfills, no fallback build. Needs `light-dark()`, `color-mix()`, `:has()`,
257
- `@starting-style` and relative colour Chrome 125+, Safari 17.5+,
258
- Firefox 129+. Anchor positioning is
259
- Chromium-only for now and is wrapped in `@supports`; without it, `[popover]`
260
- menus centre on screen instead of sitting under their button. Everything else
261
- degrades to unstyled-but-readable HTML.
333
+ The two-year window is on *browsers*, not on CSS. fertig runs in anything
334
+ released since August 2024. The CSS it uses is mostly older than that:
335
+ `@layer` has been cross-engine since 2022, `oklch()` and `color-mix()` since
336
+ 2023, `light-dark()` since May 2024. The newest thing it *requires* is
337
+ `@starting-style`, cross-engine since August 2024 — nothing it needs shipped
338
+ inside the last two years.
339
+
340
+ It carries almost nothing for the browsers before that: no polyfills, no
341
+ fallback build, and no vendor prefixes beyond the three no engine has replaced
342
+ (`-webkit-text-size-adjust`, the `-webkit-text-fill-color` autofill repaint,
343
+ and the `progress` pseudo-elements). The one concession is a `@supports not
344
+ (color: light-dark(…))` block restating the palette in flat sRGB — without it
345
+ an engine that lacks `light-dark()` gets invalid colour tokens and lands
346
+ unreadable rather than plain.
347
+
348
+ | Engine | Minimum | Set by |
349
+ |---|---|---|
350
+ | Chrome / Edge | **123** | `light-dark()` |
351
+ | Safari | **17.5** | `light-dark()`, `@starting-style`, `text-wrap: balance` |
352
+ | Firefox | **129** | `@starting-style`, `transition-behavior` |
353
+
354
+ No component needs more than that floor — anything a component would *like* to
355
+ have it asks for through `@supports`. Anchor positioning, for instance, is
356
+ gated; without it `[popover]` menus centre on screen instead of sitting under
357
+ their button. Below the floor everything degrades to unstyled-but-readable
358
+ HTML.
359
+
360
+ Per-component and per-enhancement version tables, with the shipping dates
361
+ behind them, are in [`docs/browser-support-research.md`](docs/browser-support-research.md)
362
+ and on the [docs site](https://moji2002.github.io/fertig/docs.html#support).
262
363
 
263
364
  ## Development
264
365
 
@@ -271,8 +372,8 @@ npm run build # regenerate fertig.min.css and print sizes
271
372
 
272
373
  | Build | Raw | Gzip | |
273
374
  |---|---:|---:|---|
274
- | `fertig.min.css` | 28.7 KB | 7.8 KB | everything |
275
- | `fertig.core.min.css` | 21.8 KB | 6.3 KB | without the ARIA component layer |
375
+ | `fertig.min.css` | 32.7 KB | 8.4 KB | everything |
376
+ | `fertig.core.min.css` | 25.0 KB | 6.9 KB | without the ARIA component layer |
276
377
 
277
378
  Dropping the component layer saves 1.4 KB gzipped — worth knowing, rarely worth
278
379
  doing. The weight is in the element coverage and forms, not the components.
@@ -1 +1 @@
1
- /*! fertig v1.0.3 — a classless CSS stylesheet. MIT */@property --a1{syntax:"<number>";inherits:true;initial-value:.08}@property --a2{syntax:"<number>";inherits:true;initial-value:.06}@layer fertig,fertig-a11y;@layer fertig{:root{color-scheme:light dark;accent-color:var(--ac);caret-color:var(--ac);--f:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--fm:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;--w:38rem;--r:6px;--rw:10px;--stone-100:oklch(97.5% .004 75);--stone-300:oklch(91% .006 75);--stone-500:oklch(72% .008 75);--stone-700:oklch(47% .009 75);--stone-900:oklch(26% .008 75);--sage-100:oklch(96% .022 155);--sage-300:oklch(87% .042 155);--sage-500:oklch(66% .058 155);--sage-700:oklch(47% .055 155);--sage-900:oklch(29% .038 155);--sky-100:oklch(96% .022 240);--sky-300:oklch(87% .045 240);--sky-500:oklch(64% .085 245);--sky-700:oklch(48% .095 250);--sky-900:oklch(30% .06 250);--clay-100:oklch(96% .022 45);--clay-300:oklch(88% .045 45);--clay-500:oklch(68% .085 45);--clay-700:oklch(50% .09 40);--clay-900:oklch(31% .055 40);--plum-100:oklch(96% .02 320);--plum-300:oklch(88% .038 320);--plum-500:oklch(66% .06 320);--plum-700:oklch(47% .065 320);--plum-900:oklch(29% .042 320);--gold-100:oklch(96.5% .028 90);--gold-300:oklch(89% .055 88);--gold-500:oklch(74% .085 85);--gold-700:oklch(55% .085 80);--gold-900:oklch(33% .05 80);--bg:light-dark(oklch(93.5% .006 75),oklch(16% .006 75));--el:light-dark(oklch(99.4% .002 75),oklch(21% .006 75));--face:light-dark(oklch(97.2% .005 75),oklch(25% .007 75));--fg:light-dark(oklch(22% .008 75),oklch(95% .004 75));--mut:light-dark(oklch(47% .009 75),oklch(73% .008 75));--bd:light-dark(oklch(22% .008 75 / .13),oklch(95% .004 75 / .13));--tb:light-dark(oklch(97.2% .005 75 / .85),oklch(25% .007 75 / .85));--ac:light-dark(var(--sky-700),oklch(78% .085 245));--on-ac:light-dark(#fff,#06121f);--sh:oklch(23.1% .007 286);--a1:.08;--a2:.06;--sh1:oklch(from var(--sh) l c h / var(--a1));--sh2:oklch(from var(--sh) l c h / var(--a2));--up:0 1px 1px var(--sh1);--up2:0 1px 2px var(--sh1),0 6px 16px -6px var(--sh2);--dn:inset 0 1px 2px oklch(from var(--sh) l c h / .08);--caps:.74em/1.4 var(--f)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--a1:.5;--a2:.45}}@supports (color:contrast-color(red)){:root{--on-ac:contrast-color(var(--ac))}}[data-theme=light]{color-scheme:light;--a1:.08;--a2:.06}[data-theme=dark]{color-scheme:dark;--a1:.5;--a2:.45}*,::before,::after{box-sizing:border-box}html{font:16px/1.65 var(--f);-webkit-text-size-adjust:100%;tab-size:2}body{margin:0;background:var(--bg);color:var(--fg);overflow-wrap:break-word;font-variant-numeric:slashed-zero tabular-nums}::selection{background:color-mix(in srgb,var(--ac) 28%,transparent)}:focus-visible{outline:3px solid color-mix(in srgb,var(--ac) 45%,transparent);outline-offset:1px;border-radius:var(--r)}img,svg,video,iframe{display:block;max-width:100%;height:auto}img,video{border-radius:var(--r);box-shadow:var(--up2)}body>*{max-width:var(--w);margin-inline:auto;padding-inline:1.9rem}body>header,body>main,body>footer{background:var(--el);border-inline:1px solid var(--bd)}body>header{padding-block:2.4rem .8rem}body>main{padding-bottom:2.8rem}body>footer{padding-block:1.2rem 2rem;color:var(--mut);font-size:.85em;border-top:1px solid var(--bd);border-bottom:1px solid var(--bd);border-radius:0 0 var(--rw) var(--rw);margin-bottom:2.5rem;box-shadow:0 18px 30px -22px oklch(from var(--sh) l c h / .5)}body>nav{position:sticky;top:0;z-index:9;max-width:none;--nw:var(--w);padding-inline:max(1.9rem,calc(50% - var(--nw) / 2 + 1.9rem),env(safe-area-inset-left),env(safe-area-inset-right));display:flex;flex-wrap:wrap;gap:1.1rem;align-items:center;padding-block:calc(.6rem + env(safe-area-inset-top,0px)) .6rem;background:var(--tb);color:var(--fg);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--bd);font-size:.92em}body>nav a{color:var(--fg);text-decoration:none;opacity:.75}body>nav a:hover{opacity:1}body>nav:is(strong,b) a{opacity:1}body>nav ul{display:flex;flex-wrap:wrap;gap:1.1rem;list-style:none;padding:0;margin:0;flex:1}h1,h2,h3,h4,h5,h6{line-height:1.3;margin:1.4rem 0 .7rem;text-wrap:balance}h1{font-size:1.55rem;letter-spacing:-.015em}h2{font-size:1.25rem;letter-spacing:-.01em;margin-top:2.4rem}h3{font-size:1.08rem;margin-top:1.9rem}h4{font-size:1rem}h5,h6{font:700 var(--caps);text-transform:uppercase;letter-spacing:.1em;color:var(--mut)}:is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}@supports (text-box:trim-both cap alphabetic){h1,h2,h3,h4{text-box:trim-both cap alphabetic}}:is(section,article) +:is(section,article){margin-top:2.8rem}p,ul,ol,dl,pre,blockquote,table,figure,details,fieldset,hr{margin:1.1rem 0}p{text-wrap:pretty}a{color:var(--ac);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}small{font-size:.85em;color:var(--mut)}hr{border:0;border-top:1px solid var(--bd);margin:2.2rem 0}mark{background:light-dark(#ffe58f,#5c4a15);color:inherit;border-radius:3px;padding:0 .15em}abbr[title]{text-decoration:underline dotted;cursor:help}blockquote{border-inline-start:2px solid var(--bd);padding-block:.15rem;padding-inline:1.2rem 0;color:var(--mut)}ul,ol{padding-inline-start:1.5rem}li::marker{color:var(--mut)}dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.35rem 1rem}dt{color:var(--mut)}dd{margin:0}figcaption{font-size:.85em;color:var(--mut);text-align:center}code,kbd,samp,pre{font-family:var(--fm);font-size:.9em}:not(pre)>code,samp{background:var(--face);border:1px solid var(--bd);border-radius:var(--r);padding:.08em .35em}kbd{background:var(--face);border:1px solid var(--bd);border-bottom-width:2px;border-radius:var(--r);padding:.08em .4em;box-shadow:var(--up)}pre{background:var(--face);border:1px solid var(--bd);border-radius:var(--r);padding:1rem;overflow-x:auto}pre code{background:none;border:0;padding:0;font-size:1em}:root{--syn-comment:light-dark(#6b7280,#8b949e);--syn-key:light-dark(#7c3aed,#c4a7fb);--syn-str:light-dark(#15803d,#7ee787);--syn-num:light-dark(#b45309,#f0b866);--syn-fn:light-dark(#1d4ed8,#93c5fd);--syn-attr:light-dark(#b91c1c,#ff9492)}:is(.hljs-comment,.hljs-quote,.token.comment,.token.prolog,.token.doctype){color:var(--syn-comment);font-style:italic}:is(.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-type,.hljs-built_in,.token.keyword,.token.atrule,.token.rule,.token.important,.token.selector){color:var(--syn-key)}:is(.hljs-string,.hljs-meta-string,.token.string,.token.attr-value,.token.char){color:var(--syn-str)}:is(.hljs-number,.hljs-symbol,.hljs-bullet,.token.number,.token.boolean,.token.constant,.token.unit){color:var(--syn-num)}:is(.hljs-title,.hljs-name,.hljs-section,.hljs-function,.token.tag,.token.function,.token.class-name){color:var(--syn-fn)}:is(.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.token.attr-name,.token.property,.token.variable){color:var(--syn-attr)}:is(.hljs-punctuation,.hljs-operator,.token.punctuation,.token.operator){color:var(--mut)}:is(.hljs-emphasis,.token.italic){font-style:italic}:is(.hljs-strong,.token.bold){font-weight:700}:is(.hljs-deletion,.token.deleted){color:light-dark(#c0392b,#ff6b6b)}:is(.hljs-addition,.token.inserted){color:light-dark(#15803d,#7ee787)}table{width:100%;border-collapse:collapse;font-size:.92em}th,td{border-bottom:1px solid var(--bd);padding-block:.55rem;padding-inline:0 .7rem;text-align:start}th:last-child,td:last-child{padding-inline-end:0}thead th{border-bottom:1px solid color-mix(in srgb,var(--fg) 45%,transparent);font:700 var(--caps);text-transform:uppercase;letter-spacing:.09em;color:var(--mut);padding-bottom:.4rem}tbody tr:last-child td{border-bottom:0}tfoot td{font-weight:700;border-top:1px solid var(--bd);border-bottom:0}:is(th,td)[align=right]{text-align:right}:is(th,td)[align=center]{text-align:center}tbody tr:hover{background:var(--face)}@media (width <= 40rem){table{display:block;overflow-x:auto;overscroll-behavior-x:contain}}caption{text-align:start;color:var(--mut);font-size:.85em;padding-bottom:.35rem}button,input,select,textarea{font:inherit;color:inherit}label{display:block;font-size:.85em;color:var(--mut)}label:has(input){font-size:1rem;color:var(--fg)}:is(input,select,textarea) + label{margin-top:.9rem}textarea{width:100%;min-height:5rem;resize:vertical}@supports (field-sizing:content){textarea{field-sizing:content;max-height:24rem}}input:not([type=checkbox],[type=radio],[type=range],[type=color],[type=file],[type=submit],[type=button],[type=reset]),select,textarea{display:block;width:100%;padding:.4em .6em;background:var(--el);border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--dn)}select{appearance:none;padding-inline-end:2.2rem;background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);background-position:calc(100% - 17px) 55%,calc(100% - 12.5px) 55%;background-size:5px 5px;background-repeat:no-repeat}select:dir(rtl){background-position:12.5px 55%,17px 55%}select[multiple]{background-image:none;padding-inline-end:.6em}@supports (appearance:base-select){select,::picker(select){appearance:base-select}select{display:flex;align-items:center;justify-content:space-between;gap:.6em;background-image:none;padding-inline-end:.7em}select::picker-icon{content:"";inline-size:.45em;block-size:.45em;flex:none;border:solid currentColor;border-width:0 1px 1px 0;rotate:45deg;translate:0 -.15em;opacity:.7;transition:rotate .15s ease,translate .15s ease}select:open::picker-icon{rotate:225deg;translate:0 .1em}::picker(select){min-width:anchor-size(width);border:1px solid var(--bd);border-radius:var(--r);padding:.3rem;background:var(--el);margin-block-start:.35rem;box-shadow:var(--up2),0 20px 40px -14px oklch(from var(--sh) l c h / .4)}option{display:flex;align-items:center;gap:.5em;padding:.4em .6em;border-radius:calc(var(--r) - 2px)}option:hover{background:var(--face)}option:checked{background:var(--ac);color:var(--on-ac)}option::checkmark{order:1;margin-inline-start:auto;content:"✓"}}:is(input,select,textarea):hover:not(:disabled){border-color:color-mix(in srgb,var(--fg) 25%,transparent)}:is(input,select,textarea):focus-visible{border-color:var(--ac)}input[type=checkbox],input[type=radio]{width:1.15em;height:1.15em;margin:0 .45em 0 0;vertical-align:-.18em}label:has(input[type=checkbox]),label:has(input[type=radio]){line-height:1.9}input[type=range]{width:100%;height:1.15em}::placeholder{color:var(--mut)}@supports selector(::spelling-error){::spelling-error{text-decoration:wavy underline light-dark(#c0392b,#ff6b6b)}::grammar-error{text-decoration:wavy underline light-dark(#9a6700,#d29922)}}:is(input,textarea):read-only:not(:disabled){background:var(--face);cursor:default}label:has(+:required)::after,label:has(:required)::after{content:" *";color:var(--ac)}input:autofill,input:autofill:hover,input:autofill:focus{-webkit-text-fill-color:var(--fg);box-shadow:var(--dn),inset 0 0 0 100px var(--el);caret-color:var(--ac)}:disabled{color:var(--mut);cursor:not-allowed;box-shadow:none}fieldset{border:1px solid var(--bd);border-radius:var(--r);padding:.9rem 1rem 1rem;background:var(--face)}fieldset:focus-within{border-color:color-mix(in srgb,var(--ac) 45%,var(--bd))}legend{float:left;width:100%;margin-bottom:.8rem;padding:0 0 .6rem;border-bottom:1px solid var(--bd);font-size:.95em;font-weight:700;color:var(--fg)}legend + *{clear:left}button,[type=submit],[type=button],[type=reset],:where(a.primary,a[role=button]),::file-selector-button{display:inline-block;text-decoration:none;text-align:center;padding:.38em 1.1em;background:var(--el);color:var(--fg);cursor:pointer;border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--up);font:inherit;min-width:5rem}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):hover:not(:disabled){background:var(--face)}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):active:not(:disabled){box-shadow:var(--dn);translate:0 .5px}[type=submit],.primary{background:var(--ac);border-color:transparent;color:var(--on-ac)}:is([type=submit],.primary,a.primary):hover:not(:disabled){background:oklch(from var(--ac) calc(l + .05) c h)}[data-size=sm]{padding:.2em .7em;font-size:.85em;min-width:0}[data-size=lg]{padding:.55em 1.5em;font-size:1.05em}button[data-icon]{min-width:0;padding:.38em .62em;line-height:1}[data-block]{display:block;width:100%;min-width:0}[data-variant=ghost]{background:none;border-color:transparent;box-shadow:none}[data-variant=ghost]:hover:not(:disabled){background:var(--face);border-color:var(--bd)}[data-variant=link]{background:none;border:0;box-shadow:none;min-width:0;padding-inline:.2em;color:var(--ac);text-decoration:underline;text-underline-offset:3px}[data-variant=link]:hover:not(:disabled){background:none;text-decoration-thickness:2px}button[aria-pressed=true]{background:var(--face);color:var(--ac);font-weight:700}button[aria-pressed=true]:hover:not(:disabled){background:color-mix(in srgb,var(--fg) 7%,var(--face))}:is([type=submit],.primary){box-shadow:var(--up),inset 0 1px 0 light-dark(#fff3,#ffffff26)}:is([type=submit],.primary):active:not(:disabled){box-shadow:inset 0 1px 3px #0006}@supports (corner-shape:squircle){*{corner-shape:squircle}}details{border:1px solid var(--bd);border-radius:var(--r);padding:.7rem 1.1rem;background:var(--el)}summary{cursor:pointer;font-weight:700;list-style:none}summary::before{content:"▸ ";color:var(--mut)}details[open]>summary::before{content:"▾ "}details[open]>summary{margin-bottom:.6rem}dialog{background:var(--el);color:var(--fg);border:1px solid var(--bd);border-radius:var(--rw);padding:1.4rem;max-width:min(30rem,92dvw);box-shadow:0 32px 64px -16px oklch(from var(--sh) l c h / .45)}dialog>:last-child:not(footer){margin-bottom:0}dialog,[popover]{overscroll-behavior:contain}dialog::backdrop{background:oklch(from var(--sh) l c h / .35);backdrop-filter:blur(3px)}dialog:has(>:is(header,footer)){max-block-size:min(44rem,85dvh);overflow:auto}dialog>:is(header,footer){position:sticky;z-index:1;margin-inline:-1.4rem;padding:.7rem 1.4rem;background:var(--el)}dialog>header{inset-block-start:-1.4rem;margin-block:-1.4rem 1rem;font-weight:700;border-bottom:1px solid var(--bd);border-radius:var(--rw) var(--rw) 0 0}dialog>header>:is(h1,h2,h3,h4,p){margin:0;font-size:1.05rem}dialog>footer{inset-block-end:-1.4rem;margin-block:1rem -1.4rem;border-top:1px solid var(--bd);border-radius:0 0 var(--rw) var(--rw);display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;justify-content:flex-end}dialog>footer>:is(p,span):first-child{margin:0;margin-inline-end:auto;color:var(--mut)}@media (prefers-reduced-motion:no-preference) and (update:fast){dialog,dialog::backdrop{transition:opacity .2s,translate .2s,display .2s allow-discrete,overlay .2s allow-discrete}dialog{opacity:0;translate:0 10px}dialog[open]{opacity:1;translate:0}dialog::backdrop{opacity:0}dialog[open]::backdrop{opacity:1}@starting-style{dialog[open]{opacity:0;translate:0 10px}}@starting-style{dialog[open]::backdrop{opacity:0}}[popover]{opacity:0;translate:0 -4px;transition:opacity .13s,translate .13s,display .13s allow-discrete,overlay .13s allow-discrete}[popover]:popover-open{opacity:1;translate:0}@starting-style{[popover]:popover-open{opacity:0;translate:0 -4px}}}search{display:block;margin-block:1.1rem}::target-text{background:color-mix(in srgb,var(--ac) 28%,transparent)}aside{border:1px solid var(--bd);border-inline-start:3px solid var(--ac);border-radius:var(--r);border-start-start-radius:0;border-end-start-radius:0;background:var(--el);padding:.7rem 1.1rem;margin-block:1.1rem}progress{width:100%;height:.5rem;border:0;border-radius:calc(infinity * 1px);background:var(--face)}progress::-webkit-progress-bar{background:var(--face);border-radius:calc(infinity * 1px)}progress::-webkit-progress-value{background:var(--ac);border-radius:calc(infinity * 1px)}progress::-moz-progress-bar{background:var(--ac);border-radius:calc(infinity * 1px)}@supports selector(::details-content){@media (prefers-reduced-motion:no-preference) and (update:fast){:root{interpolate-size:allow-keywords}details::details-content{block-size:0;overflow:clip;transition:block-size .28s ease,content-visibility .28s allow-discrete}details[open]::details-content{block-size:auto}}}.muted{color:var(--mut)}.center{text-align:center}.wide{max-width:66rem}body>nav.wide{max-width:none;--nw:66rem}.row{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center}.row:is(input:not([type=checkbox],[type=radio]),textarea){width:auto;flex:1 1 10rem;min-width:0}.row select{width:auto;flex:0 1 auto;min-width:0}.row:is(progress,meter){width:auto;flex:1 1 6rem}.row>label{flex:none;margin-top:0}.grid{display:grid;gap:.9rem;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr))}.grid + *{margin-top:1.1rem}.card{container-type:inline-size;border:1px solid var(--bd);border-radius:var(--r);padding:.9rem;background:var(--el);box-shadow:var(--up2);display:flex;flex-direction:column;gap:.85rem}.card>*{margin-block:0}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1;min-width:0}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.items-start{align-items:start}.items-center{align-items:center}.items-end{align-items:end}.justify-start{justify-content:start}.justify-center{justify-content:center}.justify-end{justify-content:end}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.mx-auto{margin-inline:auto}.ms-auto{margin-inline-start:auto}.me-auto{margin-inline-end:auto}.w-full{width:100%}.max-w-xs{max-inline-size:20rem}.max-w-sm{max-inline-size:24rem}.max-w-md{max-inline-size:28rem}.max-w-lg{max-inline-size:32rem}.max-w-xl{max-inline-size:36rem}.max-w-2xl{max-inline-size:42rem}.max-w-3xl{max-inline-size:48rem}.max-w-4xl{max-inline-size:56rem}.max-w-5xl{max-inline-size:64rem}.max-w-6xl{max-inline-size:72rem}.max-w-7xl{max-inline-size:80rem}.max-w-full{max-inline-size:100%}.max-w-none{max-inline-size:none}.max-w-prose{max-inline-size:var(--w)}.hidden{display:none}.badge{border:1px solid var(--bd);border-radius:calc(infinity * 1px);background:var(--face);padding:.1em .6em;font:700 var(--caps);color:var(--mut)}.card>:is(header,footer){margin-inline:-.9rem;padding:.55rem .9rem;background:var(--face)}.card>header{margin-top:-.9rem;font-weight:700;border-bottom:1px solid var(--bd);border-radius:var(--r) var(--r) 0 0}.card>footer{margin-top:auto;margin-bottom:-.9rem;color:var(--mut);font-size:.85em;border-top:1px solid var(--bd);border-radius:0 0 var(--r) var(--r)}.card>:is(img,video):first-child{align-self:stretch;width:auto;max-width:none;margin:-.9rem -.9rem 0;aspect-ratio:16 / 9;object-fit:cover;border:0;border-radius:var(--r) var(--r) 0 0;box-shadow:none}.card[data-tone]{box-shadow:var(--up2),inset 0 2px 0 var(--ac)}.card[data-tone]>header:first-child{box-shadow:inset 0 2px 0 var(--ac)}:is(a,button).card{display:flex;width:100%;text-align:start;color:inherit;text-decoration:none;font:inherit}:is(a,button).card:hover:not(:disabled){border-color:color-mix(in srgb,var(--ac) 45%,var(--bd));box-shadow:var(--up2),0 12px 26px -14px oklch(from var(--sh) l c h / .4);translate:0 -2px}:is(a,button).card:active:not(:disabled){translate:0 0}[hidden]:not([hidden=until-found]){display:none}@media (prefers-reduced-motion:no-preference) and (update:fast){html{scroll-behavior:smooth}}:target{scroll-margin-top:4rem}:is(h1,h2,h3,h4):target{background:color-mix(in srgb,var(--ac) 12%,transparent)}a[target=_blank]::after{content:" ↗";font-size:.85em;opacity:.6}a:has(>img),a:has(>code){text-decoration:none}sup,sub{line-height:0;font-size:.75em}q{quotes:"“" "”" "‘" "’"}dfn{font-style:normal;font-weight:700}ins{text-decoration:underline;text-decoration-style:wavy;text-decoration-color:var(--ac)}del{color:var(--mut)}address{font-style:normal;color:var(--mut)}hgroup>*{margin:0}hgroup>p{color:var(--mut)}output{font-weight:700}meter{width:100%;height:.5rem}optgroup{font-weight:700;color:var(--mut)}::file-selector-button{margin-inline-end:.8em}::file-selector-button:hover{background:var(--face)}input:user-invalid,textarea:user-invalid{border-color:light-dark(#c0392b,#ff6b6b)}input:user-invalid + small{color:light-dark(#c0392b,#ff6b6b)}summary:hover{color:var(--ac)}*{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--fg) 25%,transparent) transparent}@page{margin:2cm}@media print{:root{--bg:#fff;--el:#fff;--fg:#000;--bd:#999}body>nav,body>footer{display:none}body>*{border:0;max-width:none}p,blockquote,li{orphans:3;widows:3}a[href^="http"]::after{content:" (" attr(href) ")";font-size:.8em;color:#555}pre,table,figure,details,tr,img{break-inside:avoid}h1,h2,h3,h4{break-after:avoid}}@media (pointer:coarse){button,[type=submit],[type=button],[type=reset],:where(a.primary,a[role=button]),select,summary,input:not([type=checkbox],[type=radio],[type=range],[type=color],[type=file]){min-height:44px}input[type=checkbox],input[type=radio]{width:1.4em;height:1.4em}}@media (inverted-colors:inverted){img,video,iframe{filter:invert(1) hue-rotate(180deg)}}@media (color-gamut:p3){@supports (color:oklch(60% .2 250)){:root{--ac:light-dark(oklch(52% .21 258),oklch(76% .15 258))}}}:root{text-spacing-trim:trim-start;text-autospace:normal}@media (prefers-reduced-transparency:reduce){body>nav{background:var(--face);backdrop-filter:none}dialog::backdrop{backdrop-filter:none}}@media (prefers-contrast:more){:root{--bd:light-dark(#00000059,#ffffff6b);--mut:light-dark(#45454a,#c6c6ce)}}@media (prefers-reduced-motion:no-preference) and (update:fast){a,button,input,select,textarea,summary,tr,[type=submit],[type=button],[type=reset]{transition:box-shadow .15s,background-color .15s,border-color .15s,translate .08s}}}@layer fertig-a11y{@media (forced-colors:active){*{box-shadow:none}button,[type=submit],[type=button],[type=reset],input,select,textarea,.card,.badge,details,dialog,[popover],fieldset,table{border:1px solid CanvasText}[role=tab][aria-selected=true],button[aria-pressed=true]{border-color:Highlight}}}
1
+ /*! fertig v2.0.0 — a classless CSS stylesheet. MIT */@property --fertig-a1{syntax:"<number>";inherits:true;initial-value:.08}@property --fertig-a2{syntax:"<number>";inherits:true;initial-value:.06}@layer fertig,fertig-a11y;@layer fertig{:root{color-scheme:light dark;accent-color:var(--ac);caret-color:var(--ac);--f:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--fm:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;--w:38rem;--r:9px;--rs:5px;--rw:14px;--stone-100:oklch(97.5% .004 75);--stone-300:oklch(91% .006 75);--stone-500:oklch(72% .008 75);--stone-700:oklch(47% .009 75);--stone-900:oklch(26% .008 75);--sage-100:oklch(96% .022 155);--sage-300:oklch(87% .042 155);--sage-500:oklch(66% .058 155);--sage-700:oklch(47% .055 155);--sage-900:oklch(29% .038 155);--sky-100:oklch(96% .022 240);--sky-300:oklch(87% .045 240);--sky-500:oklch(64% .085 245);--sky-700:oklch(48% .095 250);--sky-900:oklch(30% .06 250);--clay-100:oklch(96% .022 45);--clay-300:oklch(88% .045 45);--clay-500:oklch(68% .085 45);--clay-700:oklch(50% .09 40);--clay-900:oklch(31% .055 40);--plum-100:oklch(96% .02 320);--plum-300:oklch(88% .038 320);--plum-500:oklch(66% .06 320);--plum-700:oklch(47% .065 320);--plum-900:oklch(29% .042 320);--gold-100:oklch(96.5% .028 90);--gold-300:oklch(89% .055 88);--gold-500:oklch(74% .085 85);--gold-700:oklch(55% .085 80);--gold-900:oklch(33% .05 80);--bg:light-dark(oklch(93.5% .006 75),oklch(16% .006 75));--el:light-dark(oklch(99.4% .002 75),oklch(21% .006 75));--face:light-dark(oklch(97.2% .005 75),oklch(25% .007 75));--fg:light-dark(oklch(22% .008 75),oklch(95% .004 75));--mut:light-dark(oklch(47% .009 75),oklch(73% .008 75));--bd:light-dark(oklch(22% .008 75 / .13),oklch(95% .004 75 / .13));--tb:light-dark(oklch(97.2% .005 75 / .85),oklch(25% .007 75 / .85));--ac:light-dark(oklch(50% .19 275),oklch(78% .11 275));--on-ac:light-dark(#fff,#06121f);--sh:oklch(23.1% .007 286);--fertig-a1:.08;--fertig-a2:.06;--sh1:color-mix(in srgb,var(--sh) calc(var(--fertig-a1) * 100%),transparent);--sh2:color-mix(in srgb,var(--sh) calc(var(--fertig-a2) * 100%),transparent);--up:0 1px 1px var(--sh1);--up2:0 1px 2px var(--sh1),0 6px 16px -6px var(--sh2);--dn:inset 0 1px 2px color-mix(in srgb,var(--sh) 8%,transparent);--caps:.74em/1.4 var(--f);--ease-out:cubic-bezier(.22,1,.36,1);--ease-in:cubic-bezier(.55,0,1,.45);--ease:cubic-bezier(.4,0,.2,1);--dur-1:.12s;--dur-2:.2s}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--fertig-a1:.5;--fertig-a2:.45}}@supports (color:oklch(from red l c h)){:root{--on-ac:oklch(from var(--ac) clamp(0,(l - .62) * -100,1) 0 h)}}@supports (color:contrast-color(red)){:root{--on-ac:contrast-color(var(--ac))}}[data-theme=light]{color-scheme:light;--fertig-a1:.08;--fertig-a2:.06}[data-theme=dark]{color-scheme:dark;--fertig-a1:.5;--fertig-a2:.45}[data-accent=indigo]{--ac:light-dark(oklch(50% .19 275),oklch(78% .11 275))}[data-accent=sky]{--ac:light-dark(var(--sky-700),oklch(78% .085 245))}[data-accent=sage]{--ac:light-dark(var(--sage-700),oklch(80% .075 155))}[data-accent=clay]{--ac:light-dark(var(--clay-700),oklch(80% .085 45))}[data-accent=plum]{--ac:light-dark(var(--plum-700),oklch(80% .065 320))}[data-accent=gold]{--ac:light-dark(oklch(55% .085 80),oklch(84% .09 85))}[data-accent=slate]{--ac:light-dark(oklch(35% .01 250),oklch(86% .006 250))}*,::before,::after{box-sizing:border-box}html{font:16px/1.65 var(--f);-webkit-text-size-adjust:100%;tab-size:2}body{margin:0;background:var(--bg);color:var(--fg);overflow-wrap:break-word;font-variant-numeric:slashed-zero tabular-nums}::selection{background:color-mix(in srgb,var(--ac) 28%,transparent)}:focus-visible{outline:3px solid color-mix(in srgb,var(--ac) 45%,transparent);outline-offset:1px}img,video,iframe{display:block;max-width:100%;height:auto}svg{max-width:100%;vertical-align:middle}img,video{border-radius:var(--r);box-shadow:var(--up2)}body>*,body>:where(#root,#app,#__next,[data-fertig])>*{max-width:var(--w);margin-inline:auto;padding-inline:1.9rem}body>:where(#root,#app,#__next,[data-fertig]){max-width:none;padding-inline:0}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>:is(header,main,footer){background:var(--el);border-inline:1px solid var(--bd)}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>header{padding-block:2.4rem .8rem}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>main{padding-bottom:2.8rem}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>footer{padding-block:1.2rem 2rem;color:var(--mut);font-size:.85em;border-top:1px solid var(--bd);border-bottom:1px solid var(--bd);border-radius:0 0 var(--rw) var(--rw);margin-bottom:2.5rem;box-shadow:0 18px 30px -22px color-mix(in srgb,var(--sh) 50%,transparent)}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav{position:sticky;top:0;z-index:9;max-width:none;--nw:var(--w);padding-inline:max(1.9rem,calc(50% - var(--nw) / 2 + 1.9rem),env(safe-area-inset-left),env(safe-area-inset-right));display:flex;flex-wrap:wrap;gap:1.1rem;align-items:center;padding-block:calc(.6rem + env(safe-area-inset-top,0px)) .6rem;background:var(--tb);color:var(--fg);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--bd);font-size:.92em}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav a{color:var(--fg);text-decoration:none;opacity:.75}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav a:hover{opacity:1}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav:is(strong,b) a{opacity:1}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav ul{display:flex;flex-wrap:wrap;gap:1.1rem;list-style:none;padding:0;margin:0;flex:1}h1,h2,h3,h4,h5,h6{line-height:1.3;margin:1.4rem 0 .7rem;text-wrap:balance}h1{font-size:1.55rem;letter-spacing:-.015em}h2{font-size:1.25rem;letter-spacing:-.01em;margin-top:2.4rem}h3{font-size:1.08rem;margin-top:1.9rem}h4{font-size:1rem}h5,h6{font:700 var(--caps);text-transform:uppercase;letter-spacing:.1em;color:var(--mut)}:is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}@supports (text-box:trim-both cap alphabetic){h1,h2,h3,h4{text-box:trim-both cap alphabetic}}:is(section,article) +:is(section,article){margin-top:2.8rem}p,ul,ol,dl,pre,blockquote,table,figure,details,fieldset,hr{margin:1.1rem 0}p{text-wrap:pretty}a{color:var(--ac);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}small{font-size:.85em;color:var(--mut)}hr{border:0;border-top:1px solid var(--bd);margin:2.2rem 0}mark{background:light-dark(#ffe58f,#5c4a15);color:inherit;border-radius:3px;padding:0 .15em}abbr[title]{text-decoration:underline dotted;cursor:help}blockquote{border-inline-start:2px solid var(--bd);padding-block:.15rem;padding-inline:1.2rem 0;color:var(--mut)}ul,ol{padding-inline-start:1.5rem}li::marker{color:var(--mut)}dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.35rem 1rem}dt{color:var(--mut)}dd{margin:0}figcaption{font-size:.85em;color:var(--mut);text-align:center}code,kbd,samp,pre{font-family:var(--fm);font-size:.9em}:not(pre)>code,samp{background:var(--face);border:1px solid var(--bd);border-radius:var(--rs);padding:.08em .35em}kbd{background:var(--face);border:1px solid var(--bd);border-bottom-width:2px;border-radius:var(--rs);padding:.08em .4em;box-shadow:var(--up)}pre{background:var(--face);border:1px solid var(--bd);border-radius:var(--r);padding:1rem;overflow-x:auto}pre code{background:none;border:0;padding:0;font-size:1em}:root{--syn-comment:light-dark(#6b7280,#8b949e);--syn-key:light-dark(#7c3aed,#c4a7fb);--syn-str:light-dark(#15803d,#7ee787);--syn-num:light-dark(#b45309,#f0b866);--syn-fn:light-dark(#1d4ed8,#93c5fd);--syn-attr:light-dark(#b91c1c,#ff9492)}:is(.hljs-comment,.hljs-quote,.token.comment,.token.prolog,.token.doctype){color:var(--syn-comment);font-style:italic}:is(.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-type,.hljs-built_in,.token.keyword,.token.atrule,.token.rule,.token.important,.token.selector){color:var(--syn-key)}:is(.hljs-string,.hljs-meta-string,.token.string,.token.attr-value,.token.char){color:var(--syn-str)}:is(.hljs-number,.hljs-symbol,.hljs-bullet,.token.number,.token.boolean,.token.constant,.token.unit){color:var(--syn-num)}:is(.hljs-title,.hljs-name,.hljs-section,.hljs-function,.token.tag,.token.function,.token.class-name){color:var(--syn-fn)}:is(.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.token.attr-name,.token.property,.token.variable){color:var(--syn-attr)}:is(.hljs-punctuation,.hljs-operator,.token.punctuation,.token.operator){color:var(--mut)}:is(.hljs-emphasis,.token.italic){font-style:italic}:is(.hljs-strong,.token.bold){font-weight:700}:is(.hljs-deletion,.token.deleted){color:light-dark(#c0392b,#ff6b6b)}:is(.hljs-addition,.token.inserted){color:light-dark(#15803d,#7ee787)}table{width:100%;border-collapse:collapse;font-size:.92em}th,td{border-bottom:1px solid var(--bd);padding-block:.55rem;padding-inline:0 .7rem;text-align:start}th:last-child,td:last-child{padding-inline-end:0}thead th{border-bottom:1px solid color-mix(in srgb,var(--fg) 45%,transparent);font:700 var(--caps);text-transform:uppercase;letter-spacing:.09em;color:var(--mut);padding-bottom:.4rem}tbody tr:last-child td{border-bottom:0}tfoot td{font-weight:700;border-top:1px solid var(--bd);border-bottom:0}:is(th,td)[align=right]{text-align:right}:is(th,td)[align=center]{text-align:center}tbody tr:hover{background:var(--face)}@media (width <= 40rem){table{display:block;overflow-x:auto;overscroll-behavior-x:contain}}caption{text-align:start;color:var(--mut);font-size:.85em;padding-bottom:.35rem}button,input,select,textarea{font:inherit;color:inherit}label{display:block;font-size:.85em;color:var(--mut)}label:has(input){font-size:1rem;color:var(--fg)}:is(input,select,textarea) + label{margin-top:.9rem}textarea{width:100%;min-height:5rem;resize:vertical}@supports (field-sizing:content){textarea{field-sizing:content;max-height:24rem}}input:not([type=checkbox],[type=radio],[type=range],[type=color],[type=file],[type=image],[type=submit],[type=button],[type=reset]),select,textarea{display:block;width:100%;padding:.52em .7em;background:var(--el);border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--dn)}select{appearance:none;padding-inline-end:2.2rem;background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);background-position:calc(100% - 17px) 55%,calc(100% - 12.5px) 55%;background-size:5px 5px;background-repeat:no-repeat}select:dir(rtl){background-position:12.5px 55%,17px 55%}select[multiple]{background-image:none;padding-inline-end:.6em}@supports (appearance:base-select){select,::picker(select){appearance:base-select}select{display:flex;align-items:center;justify-content:space-between;gap:.6em;background-image:none;padding-inline-end:.7em}select::picker-icon{content:"";inline-size:.45em;block-size:.45em;flex:none;border:solid currentColor;border-width:0 1px 1px 0;rotate:45deg;translate:0 -.15em;opacity:.7;transition:rotate var(--dur-1) var(--ease),translate var(--dur-1) var(--ease)}select:open::picker-icon{rotate:225deg;translate:0 .1em}::picker(select){min-width:anchor-size(width);border:1px solid var(--bd);border-radius:var(--r);padding:.3rem;background:var(--el);margin-block-start:.35rem;box-shadow:var(--up2),0 20px 40px -14px color-mix(in srgb,var(--sh) 40%,transparent)}option{display:flex;align-items:center;gap:.5em;padding:.4em .6em;border-radius:calc(var(--r) - 2px)}option:hover{background:var(--face)}option:checked{background:var(--ac);color:var(--on-ac)}option::checkmark{order:1;margin-inline-start:auto;content:"✓"}}:is(input,select,textarea):hover:not(:disabled){border-color:color-mix(in srgb,var(--fg) 25%,transparent)}:is(input,select,textarea):focus-visible{border-color:var(--ac)}input[type=checkbox],input[type=radio]{width:1.15em;height:1.15em;margin:0 .45em 0 0;vertical-align:-.18em}label:has(input[type=checkbox]),label:has(input[type=radio]){line-height:1.9}input[type=range]{width:100%;height:1.15em}::placeholder{color:var(--mut)}@supports selector(::spelling-error){::spelling-error{text-decoration:wavy underline light-dark(#c0392b,#ff6b6b)}::grammar-error{text-decoration:wavy underline light-dark(#9a6700,#d29922)}}:is(input,textarea):read-only:not(:disabled){background:var(--face);cursor:default}label:has(+:required)::after,label:has(:required)::after{content:" *";color:var(--ac)}input:autofill,input:autofill:hover,input:autofill:focus{-webkit-text-fill-color:var(--fg);box-shadow:var(--dn),inset 0 0 0 100px var(--el);caret-color:var(--ac)}:disabled{color:var(--mut);cursor:not-allowed;box-shadow:none}fieldset{border:1px solid var(--bd);border-radius:var(--r);padding:.9rem 1rem 1rem;background:var(--face)}fieldset:focus-within{border-color:color-mix(in srgb,var(--ac) 45%,var(--bd))}legend{float:left;width:100%;margin-bottom:.8rem;padding:0 0 .6rem;border-bottom:1px solid var(--bd);font-size:.95em;font-weight:700;color:var(--fg)}legend + *{clear:left}button,[type=submit],[type=button],[type=reset],:where(a.primary,a[role=button]),::file-selector-button{display:inline-block;text-decoration:none;text-align:center;padding:.48em 1.1em;background:var(--el);color:var(--fg);cursor:pointer;border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--up);font:inherit;min-width:5rem}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):hover:not(:disabled){background:var(--face)}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):active:not(:disabled){box-shadow:var(--dn);translate:0 .5px}[type=submit],.primary{background:var(--ac);border-color:transparent;color:var(--on-ac)}:is([type=submit],.primary,a.primary):hover:not(:disabled){background:color-mix(in oklab,var(--ac),#fff 9%)}@supports (color:oklch(from red l c h)){:is([type=submit],.primary,a.primary):hover:not(:disabled){background:oklch(from var(--ac) calc(l + .05) c h)}}:is(button,a,input,select,label)[data-size=sm]{padding:.2em .7em;font-size:.85em;min-width:0}:is(button,a,input,select,label)[data-size=lg]{padding:.55em 1.5em;font-size:1.05em}button[data-icon]{min-width:0;padding:.38em .62em;line-height:1}:is(button,a,input,select,label)[data-block]{display:block;width:100%;min-width:0}:is(button,a,input)[data-variant=ghost]{background:none;border-color:transparent;box-shadow:none}:is(button,a,input)[data-variant=ghost]:hover:not(:disabled){background:var(--face);border-color:var(--bd)}:is(button,a,input)[data-variant=link]{background:none;border:0;box-shadow:none;min-width:0;padding-inline:.2em;color:var(--ac);text-decoration:underline;text-underline-offset:3px}:is(button,a,input)[data-variant=link]:hover:not(:disabled){background:none;text-decoration-thickness:2px}button[aria-pressed=true]{background:var(--face);color:var(--ac);font-weight:700}button[aria-pressed=true]:hover:not(:disabled){background:color-mix(in srgb,var(--fg) 7%,var(--face))}:is([type=submit],.primary){box-shadow:var(--up),inset 0 1px 0 light-dark(#fff3,#ffffff26)}:is([type=submit],.primary):active:not(:disabled){box-shadow:inset 0 1px 3px #0006}@supports (corner-shape:squircle){:is(button,[type=submit],[type=button],[type=reset],input,select,textarea,fieldset,details,dialog,[popover],pre,kbd,code,samp,img,video,menu,aside,[data-avatar],[data-skeleton],.card,.badge){corner-shape:squircle}}details{border:1px solid var(--bd);border-radius:var(--r);padding:.7rem 1.1rem;background:var(--el)}summary{cursor:pointer;font-weight:700;list-style:none}summary::before{content:"▸ ";color:var(--mut)}details[open]>summary::before{content:"▾ "}details[open]>summary{margin-bottom:.6rem}dialog{background:var(--el);color:var(--fg);border:1px solid var(--bd);border-radius:var(--rw);padding:1.4rem;max-width:min(30rem,92dvw);box-shadow:0 32px 64px -16px color-mix(in srgb,var(--sh) 45%,transparent)}dialog>:last-child:not(footer){margin-bottom:0}dialog,[popover]{overscroll-behavior:contain}dialog::backdrop{background:color-mix(in srgb,var(--sh) 35%,transparent);backdrop-filter:blur(3px)}dialog:has(>:is(header,footer)){max-block-size:min(44rem,85dvh);overflow:auto}dialog>:is(header,footer){position:sticky;z-index:1;margin-inline:-1.4rem;padding:.7rem 1.4rem;background:var(--el)}dialog>header{inset-block-start:-1.4rem;margin-block:-1.4rem 1rem;font-weight:700;border-bottom:1px solid var(--bd);border-radius:var(--rw) var(--rw) 0 0}dialog>header>:is(h1,h2,h3,h4,p){margin:0;font-size:1.05rem}dialog>footer{inset-block-end:-1.4rem;margin-block:1rem -1.4rem;border-top:1px solid var(--bd);border-radius:0 0 var(--rw) var(--rw);display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;justify-content:flex-end}dialog>footer>:is(p,span):first-child{margin:0;margin-inline-end:auto;color:var(--mut)}@media (prefers-reduced-motion:no-preference) and (update:fast){dialog,dialog::backdrop{transition:opacity var(--dur-2) var(--ease-out),translate var(--dur-2) var(--ease-out),display var(--dur-2) allow-discrete,overlay var(--dur-2) allow-discrete}dialog{opacity:0;translate:0 10px}dialog[open]{opacity:1;translate:0}dialog::backdrop{opacity:0}dialog[open]::backdrop{opacity:1}@starting-style{dialog[open]{opacity:0;translate:0 10px}}@starting-style{dialog[open]::backdrop{opacity:0}}[popover]{opacity:0;translate:0 -4px;transition:opacity .13s var(--ease-out),translate .13s var(--ease-out),display .13s allow-discrete,overlay .13s allow-discrete}[popover]:popover-open{opacity:1;translate:0}@starting-style{[popover]:popover-open{opacity:0;translate:0 -4px}}}search{display:block;margin-block:1.1rem}::target-text{background:color-mix(in srgb,var(--ac) 28%,transparent)}aside{border:1px solid var(--bd);border-inline-start:3px solid var(--ac);border-radius:var(--r);border-start-start-radius:0;border-end-start-radius:0;background:var(--el);padding:.7rem 1.1rem;margin-block:1.1rem}progress{width:100%;height:.5rem;border:0;border-radius:calc(infinity * 1px);background:var(--face)}progress::-webkit-progress-bar{background:var(--face);border-radius:calc(infinity * 1px)}progress::-webkit-progress-value{background:var(--ac);border-radius:calc(infinity * 1px)}progress::-moz-progress-bar{background:var(--ac);border-radius:calc(infinity * 1px)}@supports selector(::details-content){@media (prefers-reduced-motion:no-preference) and (update:fast){details{interpolate-size:allow-keywords}details::details-content{block-size:0;overflow:clip;transition:block-size .28s var(--ease),content-visibility .28s allow-discrete}details[open]::details-content{block-size:auto}}}.muted{color:var(--mut)}.center{text-align:center}.wide{max-width:66rem}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav.wide{max-width:none;--nw:66rem}.row{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center}.row:is(input:not([type=checkbox],[type=radio]),textarea){width:auto;flex:1 1 10rem;min-width:0}.row select{width:auto;flex:0 1 auto;min-width:0}.row:is(progress,meter){width:auto;flex:1 1 6rem}.row>label{flex:none;margin-top:0}.grid{display:grid;gap:.9rem;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr))}.grid + *{margin-top:1.1rem}.card{container-type:inline-size;border:1px solid var(--bd);border-radius:var(--r);padding:1.1rem;background:var(--el);box-shadow:var(--up2);display:flex;flex-direction:column;gap:.85rem}.card>*{margin-block:0}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1;min-width:0}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.items-start{align-items:start}.items-center{align-items:center}.items-end{align-items:end}.justify-start{justify-content:start}.justify-center{justify-content:center}.justify-end{justify-content:end}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.mx-auto{margin-inline:auto}.ms-auto{margin-inline-start:auto}.me-auto{margin-inline-end:auto}.w-full{width:100%}.max-w-xs{max-inline-size:20rem}.max-w-sm{max-inline-size:24rem}.max-w-md{max-inline-size:28rem}.max-w-lg{max-inline-size:32rem}.max-w-xl{max-inline-size:36rem}.max-w-2xl{max-inline-size:42rem}.max-w-3xl{max-inline-size:48rem}.max-w-4xl{max-inline-size:56rem}.max-w-5xl{max-inline-size:64rem}.max-w-6xl{max-inline-size:72rem}.max-w-7xl{max-inline-size:80rem}.max-w-full{max-inline-size:100%}.max-w-none{max-inline-size:none}.max-w-prose{max-inline-size:var(--w)}.hidden{display:none}.badge{border:1px solid var(--bd);border-radius:calc(infinity * 1px);background:var(--face);padding:.1em .6em;font:700 var(--caps);color:var(--mut)}.card>:is(header,footer){margin-inline:-1.1rem;padding-inline:1.1rem}.card>header{margin-top:-.25rem;padding-bottom:.7rem;font-weight:600;border-bottom:1px solid var(--bd)}.card>footer{margin-top:auto;margin-bottom:-.25rem;padding-top:.7rem;color:var(--mut);font-size:.85em;border-top:1px solid var(--bd)}.card>:is(img,video):first-child{align-self:stretch;width:auto;max-width:none;margin:-1.1rem -1.1rem 0;aspect-ratio:16 / 9;object-fit:cover;border:0;border-radius:var(--r) var(--r) 0 0;box-shadow:none}.card[data-tone]{background:linear-gradient(var(--ac),var(--ac)) top / 100% 3px no-repeat,var(--el)}:is(a,button).card{display:flex;width:100%;text-align:start;color:inherit;text-decoration:none;font:inherit}:is(a,button).card:hover:not(:disabled){border-color:color-mix(in srgb,var(--ac) 45%,var(--bd));box-shadow:var(--up2),0 12px 26px -14px color-mix(in srgb,var(--sh) 40%,transparent);translate:0 -2px}:is(a,button).card:active:not(:disabled){translate:0 0}[hidden]:not([hidden=until-found]){display:none}@media (prefers-reduced-motion:no-preference) and (update:fast){html{scroll-behavior:smooth}}:target{scroll-margin-top:4rem}:is(h1,h2,h3,h4):target{background:color-mix(in srgb,var(--ac) 12%,transparent)}a[target=_blank]:not(:has(>img,>svg))::after{content:" ↗";font-size:.85em;opacity:.6}a:has(>img),a:has(>code){text-decoration:none}sup,sub{line-height:0;font-size:.75em}q{quotes:"“" "”" "‘" "’"}dfn{font-style:normal;font-weight:700}ins{text-decoration:underline;text-decoration-style:wavy;text-decoration-color:var(--ac)}del{color:var(--mut)}address{font-style:normal;color:var(--mut)}hgroup>*{margin:0}hgroup>p{color:var(--mut)}output{font-weight:700}meter{width:100%;height:.5rem}optgroup{font-weight:700;color:var(--mut)}::file-selector-button{margin-inline-end:.8em}::file-selector-button:hover{background:var(--face)}input:user-invalid,textarea:user-invalid{border-color:light-dark(#c0392b,#ff6b6b)}input:user-invalid + small{color:light-dark(#c0392b,#ff6b6b)}summary:hover{color:var(--ac)}:is(pre,table,textarea,dialog,[popover],menu,fieldset,[role=group],[data-carousel],[data-layout=sidebar]>*){scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--fg) 25%,transparent) transparent}@page{margin:2cm}@media print{:root{--bg:#fff;--el:#fff;--fg:#000;--bd:#999}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav{display:none}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>footer{box-shadow:none;margin-bottom:0}body>*,body>:where(#root,#app,#__next,[data-fertig])>*{border:0;max-width:none}p,blockquote,li{orphans:3;widows:3}a[href^="http"]::after{content:" (" attr(href) ")";font-size:.8em;color:#555}pre,table,figure,details,tr,img{break-inside:avoid}h1,h2,h3,h4{break-after:avoid}}@media (pointer:coarse){button,[type=submit],[type=button],[type=reset],:where(a.primary,a[role=button]),select,summary,input:not([type=checkbox],[type=radio],[type=range],[type=color],[type=file]){min-height:44px}input[type=checkbox],input[type=radio]{width:1.4em;height:1.4em}:is(button,a,input,select,label)[data-size=sm]{min-height:32px}}@media (inverted-colors:inverted){img,video,iframe{filter:invert(1) hue-rotate(180deg)}}@media (color-gamut:p3){@supports (color:oklch(60% .2 250)){:root{--ac:light-dark(oklch(52% .21 258),oklch(76% .15 258))}}}:root{text-spacing-trim:trim-start;text-autospace:normal}@media (prefers-reduced-transparency:reduce){body>nav{background:var(--face);backdrop-filter:none}dialog::backdrop{backdrop-filter:none}}@media (prefers-contrast:more){:root{--bd:light-dark(#00000059,#ffffff6b);--mut:light-dark(#45454a,#c6c6ce)}}@media (prefers-reduced-motion:no-preference) and (update:fast){a,button,input,select,textarea,summary,tr,[type=submit],[type=button],[type=reset],.card,.badge,[role=tab],[role=group]>*,[popover]:is(a,button){transition:box-shadow var(--dur-1) var(--ease),background-color var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease),color var(--dur-1) var(--ease),translate .08s var(--ease-out)}:focus-visible{transition:none}}@supports not (color:light-dark(#000,#fff)){:root{--bg:#ece9e5;--el:#fefdfc;--face:#f8f5f2;--fg:#1d1a17;--mut:#5e5a55;--bd:#1d1a1721;--tb:#f8f5f2d9;--ac:#494fcc;--on-ac:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f0d0a;--el:#1a1815;--face:#24211e;--fg:#f0eeec;--mut:#aba7a2;--bd:#f0eeec21;--tb:#24211ed9;--ac:#a3b2fe;--on-ac:#06121f}}[data-theme=dark]{--bg:#0f0d0a;--el:#1a1815;--face:#24211e;--fg:#f0eeec;--mut:#aba7a2;--bd:#f0eeec21;--tb:#24211ed9;--ac:#a3b2fe;--on-ac:#06121f}}}@layer fertig-a11y{@media (forced-colors:active){*{box-shadow:none}button,[type=submit],[type=button],[type=reset],input,select,textarea,.card,.badge,details,dialog,[popover],fieldset,table{border:1px solid CanvasText}[role=tab][aria-selected=true]{border-bottom:2px solid Highlight}button[aria-pressed=true]{border-color:Highlight}}}