fertig 3.0.0 → 4.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 +65 -0
- package/README.md +77 -58
- package/fertig.css +112 -115
- package/fertig.min.css +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,71 @@ 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
|
+
## Unreleased
|
|
10
|
+
|
|
11
|
+
## [4.0.0] — 2026-09-01
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- **The palette is new and intentionally direct.** `gray`, `blue`, `cyan`,
|
|
16
|
+
`green`, `amber`, `red` and `violet` replace the former
|
|
17
|
+
`stone/sage/sky/clay/plum/gold` ramps. Each ships at 100/300/500/700/900,
|
|
18
|
+
stays inside sRGB and uses a consistent OKLCH progression. Blue is the new
|
|
19
|
+
default accent; `ok`, `warn` and `err` now map directly to green, amber and
|
|
20
|
+
red.
|
|
21
|
+
- **The default finish is platform-neutral.** Opaque toolbar and surface
|
|
22
|
+
colors, restrained 8px control geometry, ordinary rounded buttons and generic
|
|
23
|
+
system font fallbacks replace the OS-specific translucent treatment. The
|
|
24
|
+
optional squircle enhancement and decorative backdrop blur are gone.
|
|
25
|
+
- **The default hierarchy is clearer and the page gutter is responsive.**
|
|
26
|
+
`h1` and `h2` now use a restrained fluid type scale, while the new
|
|
27
|
+
`--fertig-g` token grows from 1.15rem on narrow phones to 1.9rem on larger
|
|
28
|
+
screens. Desktop density is unchanged; small screens recover useful space.
|
|
29
|
+
- **The generic toolbar stays composed on phones.** A navigation list gets one
|
|
30
|
+
horizontally scrollable row beneath the identity and trailing control instead
|
|
31
|
+
of wrapping around them in an uneven cluster.
|
|
32
|
+
|
|
33
|
+
### Removed
|
|
34
|
+
|
|
35
|
+
- **The former palette and named accents.** Old ramp tokens and
|
|
36
|
+
`data-accent="indigo|sky|sage|clay|plum|gold|slate"` are not retained as
|
|
37
|
+
aliases. Use `data-accent="blue|cyan|green|amber|red|violet|gray"`.
|
|
38
|
+
- **Legacy mockup pages and static social-preview screenshots.** The site build
|
|
39
|
+
no longer copies them or emits metadata pointing at deleted preview images.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- **Responsive tables scroll before their cells become unreadable.** Below
|
|
44
|
+
40rem, cell content keeps its intrinsic width inside the existing table scroll
|
|
45
|
+
container instead of wrapping almost word-by-word.
|
|
46
|
+
- **Size synchronization cannot rewrite third-party measurements.** Published
|
|
47
|
+
claims are now an explicit manifest of fertig-specific contexts. A changed or
|
|
48
|
+
missing context fails the command, and a regression test protects unrelated
|
|
49
|
+
values that happen to match fertig's previous size.
|
|
50
|
+
|
|
51
|
+
## [3.1.0] — 2026-09-01
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- **The 72rem default is now a page shell, not a prose measure.**
|
|
56
|
+
`.max-w-prose` keeps long-form copy at 38rem, while `.wide` provides an 80rem
|
|
57
|
+
application column. The documentation and customiser now use the same
|
|
58
|
+
defaults and terminology as the stylesheet.
|
|
59
|
+
- **The documentation toolbar stays compact on phones.** Its primary controls
|
|
60
|
+
occupy the first row and its links scroll horizontally on the second instead
|
|
61
|
+
of wrapping into a tall stack. The Components page is now present in the
|
|
62
|
+
shared navigation.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- **The minified build preserves descendant selectors.** The old punctuation
|
|
67
|
+
regex changed selectors such as `nav :is(…)` into `nav:is(…)`, silently
|
|
68
|
+
breaking row controls and popover menus. The minifier now understands CSS
|
|
69
|
+
strings and comments, with focused regression tests for both failure modes.
|
|
70
|
+
- **Reduced-transparency preferences reach framework wrappers.** A toolbar
|
|
71
|
+
inside `#root`, `#app`, `#__next` or `[data-fertig]` now drops its backdrop
|
|
72
|
+
blur just like a toolbar that is a direct child of `body`.
|
|
73
|
+
|
|
9
74
|
## [3.0.0] — 2026-08-31
|
|
10
75
|
|
|
11
76
|
The breaking change is one mechanical line: **every public token now carries a
|
package/README.md
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
A classless CSS file that gives you **components**, not just styled elements —
|
|
4
4
|
menus, dialogs, drawers, toasts and tooltips from plain semantic HTML,
|
|
5
|
-
|
|
6
|
-
switched off.
|
|
5
|
+
built from native HTML and the ARIA that makes it accessible, and working with
|
|
6
|
+
JavaScript switched off.
|
|
7
7
|
|
|
8
8
|
Link it, write ordinary HTML, and the page is finished.
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**37.0 KB raw · 8.7 KB gzipped · no build step · no dependencies · no JavaScript.**
|
|
11
11
|
|
|
12
12
|
### What makes it different
|
|
13
13
|
|
|
@@ -31,10 +31,10 @@ Surveyed across the eleven most-used classless stylesheets on 2026-08-31
|
|
|
31
31
|
|
|
32
32
|
It is *not* the smallest — Concrete.css is 1.2 KB gzipped, and most of the
|
|
33
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
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
the two classless sheets that also ship a component layer, fertig is 8.7 KB,
|
|
35
|
+
beside matcha's 8.8 KB and below Pico classless at 10.2 KB. It is the only one
|
|
36
|
+
of the three whose components work without JavaScript. Size is a constraint
|
|
37
|
+
here, not the pitch.
|
|
38
38
|
|
|
39
39
|
## Components that work without JavaScript
|
|
40
40
|
|
|
@@ -43,11 +43,12 @@ Audited in a browser with scripting disabled:
|
|
|
43
43
|
| | |
|
|
44
44
|
|---|---|
|
|
45
45
|
| Popover menu, dialog, drawer, toast, tooltip, disclosure | **work with no script** |
|
|
46
|
-
| Tabs | **styled only** —
|
|
46
|
+
| Tabs | **styled only** — selection, panels and arrow keys need a short script |
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
This gap is deliberate: `aria-selected` must be a real attribute, inactive tabs
|
|
49
|
+
need roving focus, and CSS cannot implement the arrow-key contract. The complete
|
|
50
|
+
enhancement is in the docs. `<details name>` remains an exclusive accordion,
|
|
51
|
+
not a tabs substitute.
|
|
51
52
|
|
|
52
53
|
```html
|
|
53
54
|
<link rel="stylesheet" href="fertig.css">
|
|
@@ -69,11 +70,11 @@ If you override tokens, prefix what you set. The common ones:
|
|
|
69
70
|
|---|---|
|
|
70
71
|
| `--ac` | `--fertig-ac` |
|
|
71
72
|
| `--on-ac` | `--fertig-on-ac` |
|
|
72
|
-
| `--w` | `--fertig-w` |
|
|
73
|
+
| `--w` / `--g` | `--fertig-w` / `--fertig-g` |
|
|
73
74
|
| `--r` / `--rs` / `--rw` | `--fertig-r` / `--fertig-rs` / `--fertig-rw` |
|
|
74
75
|
| `--bg` / `--el` / `--face` / `--fg` / `--mut` / `--bd` / `--tb` | `--fertig-*` (same short name) |
|
|
75
|
-
| `--up` / `--up2` / `--dn` / `--sh` / `--sh1` / `--sh2` | `--fertig-up` / `--fertig-up2` / `--fertig-dn` / `--fertig-sh1` / `--fertig-
|
|
76
|
-
| fonts `--f` / `--fm`,
|
|
76
|
+
| `--up` / `--up2` / `--dn` / `--sh` / `--sh1` / `--sh2` | `--fertig-up` / `--fertig-up2` / `--fertig-dn` / `--fertig-sh` / `--fertig-sh1` / `--fertig-sh2` |
|
|
77
|
+
| fonts `--f` / `--fm`, page width `--w`, gutter `--g`, caps `--caps`, `--nw` | `--fertig-*` |
|
|
77
78
|
| color ramps `--stone-*` / `--sage-*` / `--sky-*` / `--clay-*` / `--plum-*` / `--gold-*` | `--fertig-*` (same stop) |
|
|
78
79
|
|
|
79
80
|
The rule is simple: **any `--name` you set becomes `--fertig-name`.** Nothing
|
|
@@ -81,12 +82,12 @@ changed meaning; the prefix exists so the sheet never collides with a custom
|
|
|
81
82
|
property of yours (it is the same reason `--fertig-a1` / `--fertig-a2` were
|
|
82
83
|
already prefixed — those are `@property` registrations, which are global).
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
The defaults now favor a platform-neutral interface:
|
|
85
86
|
|
|
86
87
|
- **Palette.** Accents and neutrals moved to a cooler voice — graphite
|
|
87
88
|
neutrals and a violet-blue accent — replacing the older indigo/warm scheme.
|
|
88
|
-
- **
|
|
89
|
-
|
|
89
|
+
- **Geometry.** Buttons share the restrained control radius. Pill geometry is
|
|
90
|
+
reserved for badges, switches, meters and joined ends.
|
|
90
91
|
|
|
91
92
|
The docs site was also rebuilt and the two demo pages (`app.html` /
|
|
92
93
|
`app-invoice.html`) are gone. None of that touches the sheet.
|
|
@@ -99,7 +100,7 @@ npm install fertig
|
|
|
99
100
|
|
|
100
101
|
```html
|
|
101
102
|
<!-- or from a CDN, pinned -->
|
|
102
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fertig@
|
|
103
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fertig@4/fertig.min.css">
|
|
103
104
|
```
|
|
104
105
|
|
|
105
106
|
```css
|
|
@@ -109,21 +110,23 @@ npm install fertig
|
|
|
109
110
|
|
|
110
111
|
## What it is
|
|
111
112
|
|
|
112
|
-
Opinions, so you don't have to have them: system type, one accent, one
|
|
113
|
-
|
|
114
|
-
fields
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
- **A
|
|
122
|
-
|
|
113
|
+
Opinions, so you don't have to have them: system type, one accent, one page
|
|
114
|
+
width and a clear content canvas. The structure is classic — a toolbar,
|
|
115
|
+
sunken fields and raised buttons — while the finish stays platform-neutral:
|
|
116
|
+
opaque surfaces, hairlines, restrained corners and a violet-blue focus ring
|
|
117
|
+
over cool graphite neutrals.
|
|
118
|
+
|
|
119
|
+
- **System type, set properly** — 16px on a 1.65 line height. Long-form copy
|
|
120
|
+
gets a roughly seventy-character measure with `.max-w-prose`. Code keeps a
|
|
121
|
+
monospace face, where it earns its place.
|
|
122
|
+
- **A centered content canvas.** `<nav>` becomes a full-bleed opaque toolbar;
|
|
123
|
+
`header`/`main`/`footer` form the page surface.
|
|
123
124
|
- **Depth from hairlines and soft shadows.** Buttons and cards sit above the
|
|
124
125
|
page, inputs and code sit below it. Shadow alphas step up in dark mode,
|
|
125
126
|
because a shadow on a dark background does nothing on its own.
|
|
126
127
|
- **Quiet text.** Links underline on hover rather than inverting mid-paragraph.
|
|
128
|
+
- **Comfortable foregrounds.** Light mode uses graphite rather than absolute
|
|
129
|
+
black; dark mode uses a softened near-white rather than full white.
|
|
127
130
|
- **Dark mode with no second stylesheet.** One `light-dark()` token block.
|
|
128
131
|
Add `data-theme="dark"` (or `"light"`) on `<html>` to override the OS.
|
|
129
132
|
|
|
@@ -133,13 +136,19 @@ Direct children of `<body>` are the containers:
|
|
|
133
136
|
|
|
134
137
|
```html
|
|
135
138
|
<body>
|
|
136
|
-
<nav>…</nav> <!-- toolbar: full-bleed, contents on the
|
|
139
|
+
<nav>…</nav> <!-- toolbar: full-bleed, contents on the page column -->
|
|
137
140
|
<header>…</header>
|
|
138
141
|
<main>…</main>
|
|
139
142
|
<footer>…</footer>
|
|
140
143
|
</body>
|
|
141
144
|
```
|
|
142
145
|
|
|
146
|
+
The default page shell is `72rem`, roomy enough for application layouts and
|
|
147
|
+
documentation. Add `.max-w-prose` to long-form content for a readable `38rem`
|
|
148
|
+
line length, or `.wide` to a shell that genuinely needs the `80rem` column.
|
|
149
|
+
The `--fertig-g` gutter scales from `1.15rem` on narrow phones to `1.9rem` on
|
|
150
|
+
larger screens, and can be overridden independently of the shell width.
|
|
151
|
+
|
|
143
152
|
One wrapper is fine. React, Vue, Svelte and Next render into a mount node, so
|
|
144
153
|
the shell matches `body`'s children *or* the children of a single `#root`,
|
|
145
154
|
`#app`, `#__next`, or `[data-fertig]` wrapper:
|
|
@@ -162,17 +171,17 @@ yourself — it is the only place `body >` appears:
|
|
|
162
171
|
|
|
163
172
|
## Components
|
|
164
173
|
|
|
165
|
-
Addressed by ARIA attributes, not by
|
|
166
|
-
accessible by construction.
|
|
174
|
+
Addressed by semantic HTML and ARIA attributes, not by component classes — the
|
|
175
|
+
markup stays accessible by construction.
|
|
167
176
|
|
|
168
177
|
| Component | Markup |
|
|
169
178
|
|---|---|
|
|
170
179
|
| Segmented control | `<div role="group">` of buttons, `aria-pressed` |
|
|
171
|
-
|
|
|
180
|
+
| ARIA tabs | `<div role="tablist">`, `<button role="tab" aria-selected>`; switching and arrow keys need script |
|
|
172
181
|
| Switch | `<input type="checkbox" role="switch">` |
|
|
173
182
|
| Menu | any `[popover]` + `popovertarget` (anchored, no JS) |
|
|
174
183
|
| Breadcrumb | `<nav aria-label="Breadcrumb"><ol>` |
|
|
175
|
-
| Dialog | `<dialog>` — animates in
|
|
184
|
+
| Dialog | `<dialog>` — animates in; optional `<header>`/`<footer>` pin while the body scrolls |
|
|
176
185
|
| Loading | `aria-busy="true"` (inline spinner) |
|
|
177
186
|
| Tooltip | `data-tooltip="…"` — decorative; put the same words in `aria-label` too |
|
|
178
187
|
| 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 |
|
|
@@ -227,7 +236,8 @@ where `.max-w-2xl` works and `.max-w-3xl` silently does not is worse than no
|
|
|
227
236
|
scale at all. They are `max-inline-size`, so they still mean "along the text"
|
|
228
237
|
in a vertical writing mode, and they outrank the sheet's own measure on
|
|
229
238
|
`body > *`, so they retarget a page container as readily as anything inside
|
|
230
|
-
one. `.max-w-prose` is
|
|
239
|
+
one. `.max-w-prose` is a fixed `38rem` reading measure, independent of the
|
|
240
|
+
`72rem` page shell.
|
|
231
241
|
|
|
232
242
|
## Customising
|
|
233
243
|
|
|
@@ -235,21 +245,28 @@ Override the tokens you'd actually want to change:
|
|
|
235
245
|
|
|
236
246
|
```css
|
|
237
247
|
:root {
|
|
238
|
-
--fertig-ac: light-dark(
|
|
239
|
-
--fertig-w: 48rem; /*
|
|
248
|
+
--fertig-ac: light-dark(var(--fertig-blue-700), var(--fertig-blue-300)); /* blue accent */
|
|
249
|
+
--fertig-w: 48rem; /* page shell width */
|
|
250
|
+
--fertig-g: 1.25rem; /* page gutter */
|
|
240
251
|
--fertig-r: 0px; /* control radius — go sharp */
|
|
241
252
|
--fertig-f: "Inter", system-ui, sans-serif; /* text font */
|
|
242
253
|
}
|
|
243
254
|
```
|
|
244
255
|
|
|
245
|
-
The accent is the only colour most people touch.
|
|
246
|
-
|
|
256
|
+
The accent is the only colour most people touch. The default is blue sitting
|
|
257
|
+
on cool gray neutrals; the
|
|
247
258
|
`data-accent` attribute retints a whole region without touching tokens:
|
|
248
259
|
|
|
249
260
|
```html
|
|
250
|
-
<section data-accent="
|
|
261
|
+
<section data-accent="green">…</section> <!-- or blue, cyan, amber, red, violet, gray -->
|
|
251
262
|
```
|
|
252
263
|
|
|
264
|
+
The palette exposes `gray`, `blue`, `cyan`, `green`, `amber`, `red` and
|
|
265
|
+
`violet` ramps at `100`, `300`, `500`, `700` and `900`. For example,
|
|
266
|
+
`--fertig-violet-500` is the middle violet stop. The former
|
|
267
|
+
`stone/sage/sky/clay/plum/gold` ramps and named accents were removed rather
|
|
268
|
+
than retained as aliases.
|
|
269
|
+
|
|
253
270
|
Tones work the same way — `data-tone="ok|warn|err"` retints any component
|
|
254
271
|
without a round trip through the tokens:
|
|
255
272
|
|
|
@@ -262,7 +279,7 @@ colour sitting on the accent, and a light accent needs dark text to stay
|
|
|
262
279
|
legible. `--fertig-up` / `--fertig-up2` / `--fertig-dn` are the elevation
|
|
263
280
|
scale, `--fertig-a1` / `--fertig-a2` the shadow alphas (these two are
|
|
264
281
|
`@property` registrations, and a registration is global — hence the prefix),
|
|
265
|
-
`--fertig-rw` the
|
|
282
|
+
`--fertig-rw` the large-surface radius, and `--fertig-nw` the column the toolbar's
|
|
266
283
|
contents line up with. `--fertig-nw` follows `--fertig-w`, so nothing moves by
|
|
267
284
|
default; `<nav class="wide">` re-points it at the wide column, which is what an
|
|
268
285
|
app screen built on `.wide` wants so its wordmark doesn't float in the middle
|
|
@@ -298,19 +315,20 @@ Tested by rendering a Persian page in both directions, not by inspection.
|
|
|
298
315
|
## Accessibility
|
|
299
316
|
|
|
300
317
|
Every foreground/background pair meets WCAG 2.1 AA (>= 4.5:1) in **both**
|
|
301
|
-
themes,
|
|
318
|
+
themes, calculated from the computed token values:
|
|
302
319
|
|
|
303
320
|
| Pair | Light | Dark |
|
|
304
321
|
|---|---:|---:|
|
|
305
|
-
| Body text on
|
|
306
|
-
| Muted text on
|
|
307
|
-
| Links on
|
|
308
|
-
| Muted on
|
|
309
|
-
| Muted on
|
|
310
|
-
| Text on accent | 6.
|
|
311
|
-
| Tones (ok / warn / err) |
|
|
322
|
+
| Body text on content surface | 16.83 | 15.32 |
|
|
323
|
+
| Muted text on content surface | 6.92 | 7.15 |
|
|
324
|
+
| Links on content surface | 6.72 | 9.50 |
|
|
325
|
+
| Muted on controls | 6.57 | 6.45 |
|
|
326
|
+
| Muted on page ground | 5.89 | 7.88 |
|
|
327
|
+
| Text on accent | 6.16 | 11.22 |
|
|
328
|
+
| Tones (ok / warn / err) | 5.91–7.17 | 9.12–10.76 |
|
|
312
329
|
|
|
313
|
-
The tightest pair in the sheet is
|
|
330
|
+
The tightest pair in the sheet is text on the amber fill in light mode, at
|
|
331
|
+
5.41:1.
|
|
314
332
|
|
|
315
333
|
Motion is gated behind `prefers-reduced-motion`, focus uses a visible ring at
|
|
316
334
|
`:focus-visible`, and the component layer is driven by the same ARIA attributes
|
|
@@ -320,7 +338,7 @@ assistive technology reads.
|
|
|
320
338
|
|
|
321
339
|
| Sheet | Raw | Gzip |
|
|
322
340
|
|---|---:|---:|
|
|
323
|
-
| **fertig** | **
|
|
341
|
+
| **fertig** | **37.0 KB** | **8.7 KB** |
|
|
324
342
|
| Pico 2.1.1 classless | 69.4 KB | 10.1 KB |
|
|
325
343
|
|
|
326
344
|
Measured with `gzip -9`, KB = 1024 bytes for every row. Most of the gap is Pico's full
|
|
@@ -341,11 +359,12 @@ button { background: hotpink } /* wins, no !important needed */
|
|
|
341
359
|
## Modern CSS, used deliberately
|
|
342
360
|
|
|
343
361
|
Everything past the floor sits behind `@supports` and is additive:
|
|
344
|
-
`contrast-color()` picks the text colour on your accent
|
|
345
|
-
|
|
362
|
+
`contrast-color()` picks the light or dark text colour on your accent and a
|
|
363
|
+
small mix keeps it away from absolute black or white; anchor positioning
|
|
364
|
+
attaches popover menus to their button;
|
|
346
365
|
`::details-content` with `interpolate-size` animates disclosures open;
|
|
347
|
-
`field-sizing` grows textareas; `
|
|
348
|
-
|
|
366
|
+
`field-sizing` grows textareas; `text-box: trim-both` sits headings on their
|
|
367
|
+
cap height; and
|
|
349
368
|
`appearance: base-select` styles the dropdown picker itself. Without any of it,
|
|
350
369
|
nothing breaks. Relative colour (`oklch(from …)`) is on that list too, for one
|
|
351
370
|
job only: lightening the filled button on hover in OKLCH. The shadow alphas
|
|
@@ -356,8 +375,8 @@ the floor. Two things are *not* on the list because they are part of the floor:
|
|
|
356
375
|
`container-type` on `.card`, which makes every card a container you can write
|
|
357
376
|
`@container` queries against.
|
|
358
377
|
|
|
359
|
-
It also answers to
|
|
360
|
-
`prefers-
|
|
378
|
+
It also answers to user and device preferences: `prefers-reduced-motion`,
|
|
379
|
+
`prefers-contrast`, `forced-colors`,
|
|
361
380
|
`pointer: coarse` (44px targets, WCAG 2.5.8), `env(safe-area-inset-*)`,
|
|
362
381
|
`update: fast` (e-ink never starts a transition), `inverted-colors` and
|
|
363
382
|
`color-gamut: p3`.
|
|
@@ -414,7 +433,7 @@ npm run sizes # sync the size claims in README + site copy
|
|
|
414
433
|
|
|
415
434
|
| Build | Raw | Gzip | |
|
|
416
435
|
|---|---:|---:|---|
|
|
417
|
-
| `fertig.min.css` |
|
|
436
|
+
| `fertig.min.css` | 37.0 KB | 8.7 KB | everything |
|
|
418
437
|
|
|
419
438
|
## Files
|
|
420
439
|
|
package/fertig.css
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/*! fertig
|
|
1
|
+
/*! fertig v4.0.0 — a classless CSS stylesheet. MIT */
|
|
2
2
|
|
|
3
3
|
/* Opinions, so you don't have to have them:
|
|
4
|
-
system type · one accent · one
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
system type · one accent · one page width · a clear content canvas.
|
|
5
|
+
The finish is platform-neutral: opaque surfaces, hairlines, restrained
|
|
6
|
+
corners and a visible accent focus ring.
|
|
7
7
|
Override the tokens marked "yours"; the rest is the point of view. */
|
|
8
8
|
|
|
9
9
|
/* typed so they interpolate; untyped custom properties cannot animate */
|
|
@@ -33,69 +33,75 @@
|
|
|
33
33
|
accent-color: var(--fertig-ac);
|
|
34
34
|
caret-color: var(--fertig-ac);
|
|
35
35
|
|
|
36
|
-
--fertig-f: ui-sans-serif, system-ui,
|
|
37
|
-
|
|
38
|
-
--fertig-fm: ui-monospace,
|
|
36
|
+
--fertig-f: ui-sans-serif, system-ui, "Segoe UI", Roboto, "Helvetica Neue",
|
|
37
|
+
Arial, sans-serif; /* yours */
|
|
38
|
+
--fertig-fm: ui-monospace, "Cascadia Code", "Roboto Mono", Consolas,
|
|
39
39
|
"Liberation Mono", monospace; /* code */
|
|
40
|
-
--fertig-w:
|
|
40
|
+
--fertig-w: 72rem; /* page shell width — yours */
|
|
41
|
+
--fertig-g: clamp(1.15rem, 4vw, 1.9rem); /* responsive page gutter — yours */
|
|
41
42
|
/* One radius, and the rest derived from it: set --fertig-r and the whole
|
|
42
43
|
sheet rescales together. Four independent numbers meant --fertig-r: 4px
|
|
43
44
|
left tight fields sitting inside cards that were still round. */
|
|
44
|
-
--fertig-r:
|
|
45
|
+
--fertig-r: 8px; /* control radius: fields, buttons, menu rows */
|
|
45
46
|
--fertig-rs: calc(var(--fertig-r) * .5); /* small: inline chips and code */
|
|
46
|
-
--fertig-rw: calc(var(--fertig-r) * 1.33); /*
|
|
47
|
-
--fertig-rp: calc(
|
|
47
|
+
--fertig-rw: calc(var(--fertig-r) * 1.33); /* large: cards, dialogs, menus */
|
|
48
|
+
--fertig-rp: calc(var(--fertig-r) * 1000); /* pill: badges, switches, meters, joined ends */
|
|
49
|
+
/* --fertig-rp multiplies rather than naming infinity: any non-zero radius
|
|
50
|
+
still clamps to a true pill, while --fertig-r: 0 squares the whole shape
|
|
51
|
+
system consistently. */
|
|
48
52
|
|
|
49
53
|
/* ---- palette ------------------------------------------------
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
--fertig-
|
|
55
|
-
--fertig-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
--fertig-
|
|
59
|
-
--fertig-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
--fertig-
|
|
63
|
-
--fertig-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
--fertig-
|
|
67
|
-
--fertig-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
--fertig-
|
|
71
|
-
--fertig-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
--fertig-
|
|
75
|
-
--fertig-
|
|
76
|
-
|
|
54
|
+
Seven direct, familiar names; five perceptually even OKLCH stops each.
|
|
55
|
+
The chroma rises toward the middle of every ramp while the endpoints stay
|
|
56
|
+
quiet enough for surfaces and text. Every value is inside sRGB. */
|
|
57
|
+
--fertig-gray-100: oklch(97% .005 260); --fertig-gray-300: oklch(82% .01 260);
|
|
58
|
+
--fertig-gray-500: oklch(62% .014 260); --fertig-gray-700: oklch(47% .015 260);
|
|
59
|
+
--fertig-gray-900: oklch(25% .018 260);
|
|
60
|
+
|
|
61
|
+
--fertig-blue-100: oklch(96% .018 255); --fertig-blue-300: oklch(80% .095 255);
|
|
62
|
+
--fertig-blue-500: oklch(62% .16 255); --fertig-blue-700: oklch(47% .15 255);
|
|
63
|
+
--fertig-blue-900: oklch(29% .09 255);
|
|
64
|
+
|
|
65
|
+
--fertig-cyan-100: oklch(96% .025 210); --fertig-cyan-300: oklch(82% .085 210);
|
|
66
|
+
--fertig-cyan-500: oklch(64% .11 210); --fertig-cyan-700: oklch(47% .08 210);
|
|
67
|
+
--fertig-cyan-900: oklch(29% .05 210);
|
|
68
|
+
|
|
69
|
+
--fertig-green-100: oklch(96% .025 150); --fertig-green-300: oklch(80% .095 150);
|
|
70
|
+
--fertig-green-500: oklch(62% .13 150); --fertig-green-700: oklch(46% .10 150);
|
|
71
|
+
--fertig-green-900: oklch(28% .06 150);
|
|
72
|
+
|
|
73
|
+
--fertig-amber-100: oklch(97% .025 80); --fertig-amber-300: oklch(84% .10 80);
|
|
74
|
+
--fertig-amber-500: oklch(72% .14 80); --fertig-amber-700: oklch(50% .10 80);
|
|
75
|
+
--fertig-amber-900: oklch(29% .06 80);
|
|
76
|
+
|
|
77
|
+
--fertig-red-100: oklch(96% .018 25); --fertig-red-300: oklch(80% .10 25);
|
|
78
|
+
--fertig-red-500: oklch(62% .18 25); --fertig-red-700: oklch(47% .15 25);
|
|
79
|
+
--fertig-red-900: oklch(28% .09 25);
|
|
80
|
+
|
|
81
|
+
--fertig-violet-100: oklch(96% .018 290); --fertig-violet-300: oklch(80% .095 290);
|
|
82
|
+
--fertig-violet-500: oklch(62% .16 290); --fertig-violet-700: oklch(47% .15 290);
|
|
83
|
+
--fertig-violet-900: oklch(28% .09 290);
|
|
77
84
|
|
|
78
85
|
/* ---- semantic ----------------------------------------------- */
|
|
79
|
-
--fertig-bg: light-dark(oklch(93.5% .008
|
|
80
|
-
--fertig-el: light-dark(oklch(99% .004
|
|
81
|
-
--fertig-face:light-dark(oklch(97.2% .006
|
|
82
|
-
--fertig-fg: light-dark(oklch(22% .02
|
|
83
|
-
/* lifted from 50%/70%: the weakest pairing (muted on the
|
|
84
|
-
light, muted on
|
|
86
|
+
--fertig-bg: light-dark(oklch(93.5% .008 260), oklch(15.5% .014 260)); /* page ground */
|
|
87
|
+
--fertig-el: light-dark(oklch(99% .004 260), oklch(21% .016 260)); /* content surface */
|
|
88
|
+
--fertig-face:light-dark(oklch(97.2% .006 260), oklch(25% .018 260)); /* controls */
|
|
89
|
+
--fertig-fg: light-dark(oklch(22% .02 260), oklch(95% .012 260));
|
|
90
|
+
/* lifted from 50%/70%: the weakest pairing (muted on the page ground in
|
|
91
|
+
light, muted on controls in dark) was 4.96:1 and 5.99:1, a hair over AA.
|
|
85
92
|
46%/72% takes them to 5.7:1 and 6.8:1 while keeping a clear step down
|
|
86
93
|
from --fertig-fg — AAA would need ~41%, which is close enough to
|
|
87
94
|
--fertig-fg that "muted" stops reading as secondary at all. */
|
|
88
|
-
--fertig-mut: light-dark(oklch(46% .018
|
|
89
|
-
--fertig-bd: light-dark(oklch(22% .02
|
|
90
|
-
--fertig-tb: light-dark(oklch(97.2% .006
|
|
91
|
-
/*
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
--fertig-ac:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
/* depth: hairline + soft shadow, macOS weight.
|
|
95
|
+
--fertig-mut: light-dark(oklch(46% .018 260), oklch(72% .02 260));
|
|
96
|
+
--fertig-bd: light-dark(oklch(22% .02 260 / .13), oklch(95% .012 260 / .13));
|
|
97
|
+
--fertig-tb: light-dark(oklch(97.2% .006 260), oklch(25% .018 260));
|
|
98
|
+
/* Blue is the neutral default: distinctive enough for interaction, familiar
|
|
99
|
+
enough not to impose a brand. The 700/300 pair clears AA as link text and
|
|
100
|
+
as a filled control in its respective theme. */
|
|
101
|
+
--fertig-ac: light-dark(var(--fertig-blue-700), var(--fertig-blue-300)); /* yours */
|
|
102
|
+
--fertig-on-ac: light-dark(#f7f8fb, #07071c); /* off-white / ink text on the accent */
|
|
103
|
+
|
|
104
|
+
/* depth: hairline + compact shadow.
|
|
99
105
|
--fertig-sh is an ordinary colour — override it with any notation you like, and
|
|
100
106
|
every shadow in the sheet retints. Lighter than a pure black so the shadows
|
|
101
107
|
read as diffuse atmosphere rather than dark bars. The alphas are taken with
|
|
@@ -123,14 +129,15 @@
|
|
|
123
129
|
}
|
|
124
130
|
/* --fertig-on-ac has to survive any --fertig-ac override, or a custom accent ships an
|
|
125
131
|
unreadable label. contrast-color() does that properly but has almost no
|
|
126
|
-
support; relative colour reaches the same
|
|
127
|
-
accent's own lightness, and has been cross-engine since 2024.
|
|
128
|
-
|
|
132
|
+
support; relative colour reaches the same light-or-dark decision from the
|
|
133
|
+
accent's own lightness, and has been cross-engine since 2024. The endpoints
|
|
134
|
+
deliberately stop short of absolute black and white. Both are additive —
|
|
135
|
+
the measured light-dark() pair above stands if neither exists. */
|
|
129
136
|
@supports (color: oklch(from red l c h)) {
|
|
130
|
-
:root { --fertig-on-ac: oklch(from var(--fertig-ac) clamp(
|
|
137
|
+
:root { --fertig-on-ac: oklch(from var(--fertig-ac) clamp(.06, (l - .62) * -100, .96) 0 h) }
|
|
131
138
|
}
|
|
132
139
|
@supports (color: contrast-color(red)) {
|
|
133
|
-
:root { --fertig-on-ac: contrast-color(var(--fertig-ac)) }
|
|
140
|
+
:root { --fertig-on-ac: color-mix(in oklab, contrast-color(var(--fertig-ac)) 96%, var(--fertig-ac)) }
|
|
134
141
|
}
|
|
135
142
|
[data-theme=light] { color-scheme: light; --fertig-a1: .06; --fertig-a2: .05 }
|
|
136
143
|
[data-theme=dark] { color-scheme: dark; --fertig-a1: .42; --fertig-a2: .38 }
|
|
@@ -139,15 +146,15 @@
|
|
|
139
146
|
data-accent on any element and everything inside it — links, focus rings,
|
|
140
147
|
filled buttons, the caret, the selection — follows. Scoped rather than
|
|
141
148
|
global, so one section of a page can differ from the rest.
|
|
142
|
-
Each pair is measured: the light tone clears AA as link text on
|
|
149
|
+
Each pair is measured: the light tone clears AA as link text on the content surface, the
|
|
143
150
|
dark tone clears it on the dark ground. */
|
|
144
|
-
[data-accent=
|
|
145
|
-
[data-accent=
|
|
146
|
-
[data-accent=
|
|
147
|
-
[data-accent=
|
|
148
|
-
[data-accent=
|
|
149
|
-
[data-accent=
|
|
150
|
-
[data-accent=
|
|
151
|
+
[data-accent=blue] { --fertig-ac: light-dark(var(--fertig-blue-700), var(--fertig-blue-300)) }
|
|
152
|
+
[data-accent=cyan] { --fertig-ac: light-dark(var(--fertig-cyan-700), var(--fertig-cyan-300)) }
|
|
153
|
+
[data-accent=green] { --fertig-ac: light-dark(var(--fertig-green-700), var(--fertig-green-300)) }
|
|
154
|
+
[data-accent=amber] { --fertig-ac: light-dark(var(--fertig-amber-700), var(--fertig-amber-300)) }
|
|
155
|
+
[data-accent=red] { --fertig-ac: light-dark(var(--fertig-red-700), var(--fertig-red-300)) }
|
|
156
|
+
[data-accent=violet] { --fertig-ac: light-dark(var(--fertig-violet-700), var(--fertig-violet-300)) }
|
|
157
|
+
[data-accent=gray] { --fertig-ac: light-dark(var(--fertig-gray-700), var(--fertig-gray-300)) }
|
|
151
158
|
|
|
152
159
|
/* ---- base --------------------------------------------------- */
|
|
153
160
|
*, ::before, ::after { box-sizing: border-box }
|
|
@@ -162,7 +169,7 @@ body {
|
|
|
162
169
|
font-variant-numeric: slashed-zero tabular-nums;
|
|
163
170
|
}
|
|
164
171
|
::selection { background: color-mix(in srgb, var(--fertig-ac) 28%, transparent) }
|
|
165
|
-
/*
|
|
172
|
+
/* No border-radius here: an outline already follows the
|
|
166
173
|
element's own corners, and setting one would reshape whatever takes focus —
|
|
167
174
|
a focused dialog would snap from --fertig-rw to --fertig-r for as long as it is focused. */
|
|
168
175
|
:focus-visible {
|
|
@@ -175,15 +182,15 @@ img, video, iframe { display: block; max-width: 100%; height: auto }
|
|
|
175
182
|
svg { max-width: 100%; vertical-align: middle }
|
|
176
183
|
img, video { border-radius: var(--fertig-r); box-shadow: var(--fertig-up2) }
|
|
177
184
|
|
|
178
|
-
/* ---- layout: a
|
|
185
|
+
/* ---- layout: a centered page shell --------------------------- */
|
|
179
186
|
/* The shell is body's own children — or the children of the single wrapper a
|
|
180
187
|
framework insists on (#root, #app, #__next, or your own [data-fertig]).
|
|
181
|
-
Without this a React page silently loses the measure, the
|
|
188
|
+
Without this a React page silently loses the measure, the content surface and the
|
|
182
189
|
gutters, and nothing on screen says why. The wrapper list sits inside
|
|
183
190
|
:where() so every selector keeps the specificity it had as `body > *`. */
|
|
184
191
|
body > *,
|
|
185
192
|
body > :where(#root, #app, #__next, [data-fertig]) > * {
|
|
186
|
-
max-width: var(--fertig-w); margin-inline: auto; padding-inline:
|
|
193
|
+
max-width: var(--fertig-w); margin-inline: auto; padding-inline: var(--fertig-g);
|
|
187
194
|
}
|
|
188
195
|
/* the wrapper is not itself a shell element; it just gets out of the way */
|
|
189
196
|
body > :where(#root, #app, #__next, [data-fertig]) { max-width: none; padding-inline: 0 }
|
|
@@ -195,22 +202,19 @@ body > :where(#root, #app, #__next, [data-fertig]) { max-width: none; padding-in
|
|
|
195
202
|
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > footer {
|
|
196
203
|
padding-block: 1.2rem 2rem; color: var(--fertig-mut); font-size: .85em;
|
|
197
204
|
border-top: 1px solid var(--fertig-bd); border-bottom: 1px solid var(--fertig-bd);
|
|
198
|
-
border-radius: 0 0 var(--fertig-rw) var(--fertig-rw); margin-bottom: 2.5rem;
|
|
199
|
-
box-shadow: 0 20px 32px -24px color-mix(in srgb, var(--fertig-sh) 38%, transparent);
|
|
200
205
|
}
|
|
201
|
-
/* nav = unified toolbar: full-bleed,
|
|
206
|
+
/* nav = unified toolbar: full-bleed, opaque, contents on the measure */
|
|
202
207
|
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav {
|
|
203
208
|
position: sticky; top: 0; z-index: 9; max-width: none;
|
|
204
209
|
/* the toolbar is full-bleed but its contents line up with the page column.
|
|
205
210
|
--fertig-nw is that column: it follows --fertig-w, so overriding the measure moves the
|
|
206
211
|
toolbar with it, and .wide re-points it at the wide column instead. */
|
|
207
212
|
--fertig-nw: var(--fertig-w);
|
|
208
|
-
padding-inline: max(
|
|
213
|
+
padding-inline: max(var(--fertig-g), calc(50% - var(--fertig-nw) / 2 + var(--fertig-g)),
|
|
209
214
|
env(safe-area-inset-left), env(safe-area-inset-right));
|
|
210
215
|
display: flex; flex-wrap: wrap; gap: 1.1rem; align-items: center;
|
|
211
216
|
padding-block: calc(.6rem + env(safe-area-inset-top, 0px)) .6rem;
|
|
212
217
|
background: var(--fertig-tb); color: var(--fertig-fg);
|
|
213
|
-
backdrop-filter: saturate(180%) blur(20px);
|
|
214
218
|
border-bottom: 1px solid var(--fertig-bd); font-size: .92em;
|
|
215
219
|
}
|
|
216
220
|
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav a { color: var(--fertig-fg); text-decoration: none; opacity: .75 }
|
|
@@ -220,12 +224,23 @@ body > :where(#root, #app, #__next, [data-fertig]) { max-width: none; padding-in
|
|
|
220
224
|
display: flex; flex-wrap: wrap; gap: 1.1rem; list-style: none; padding: 0; margin: 0;
|
|
221
225
|
flex: 1; /* takes the slack, so a trailing control sits at the end */
|
|
222
226
|
}
|
|
227
|
+
/* On a narrow screen, keep the identity and trailing control together while
|
|
228
|
+
the links get one stable, horizontally scrollable row of their own. */
|
|
229
|
+
@media (width <= 40rem) {
|
|
230
|
+
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav { row-gap: .55rem }
|
|
231
|
+
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav > ul {
|
|
232
|
+
order: 2; flex: 0 0 100%; flex-wrap: nowrap; overflow-x: auto;
|
|
233
|
+
overscroll-behavior-x: contain; scrollbar-width: none;
|
|
234
|
+
}
|
|
235
|
+
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav > ul::-webkit-scrollbar { display: none }
|
|
236
|
+
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav > :last-child:not(ul) { margin-inline-start: auto }
|
|
237
|
+
}
|
|
223
238
|
|
|
224
239
|
/* ---- type --------------------------------------------------- */
|
|
225
240
|
h1, h2, h3, h4, h5, h6 { line-height: 1.3; margin: 1.4rem 0 .7rem; text-wrap: balance }
|
|
226
|
-
h1 { font-size: 1.55rem; letter-spacing: -.
|
|
227
|
-
h2 { font-size: 1.
|
|
228
|
-
h3 { font-size: 1.
|
|
241
|
+
h1 { font-size: clamp(2rem, 1.55rem + 1.5vw, 2.8rem); letter-spacing: -.035em }
|
|
242
|
+
h2 { font-size: clamp(1.35rem, 1.2rem + .5vw, 1.65rem); letter-spacing: -.02em; margin-top: 2.4rem }
|
|
243
|
+
h3 { font-size: 1.12rem; letter-spacing: -.008em; margin-top: 1.9rem }
|
|
229
244
|
h4 { font-size: 1rem }
|
|
230
245
|
h5, h6 { font: 700 var(--fertig-caps); text-transform: uppercase; letter-spacing: .1em; color: var(--fertig-mut) }
|
|
231
246
|
:is(h1,h2,h3,h4,h5,h6):first-child { margin-top: 0 }
|
|
@@ -333,6 +348,7 @@ tfoot td { font-weight: 700; border-top: 1px solid var(--fertig-bd); border-bott
|
|
|
333
348
|
tbody tr:hover { background: var(--fertig-face) }
|
|
334
349
|
@media (width <= 40rem) {
|
|
335
350
|
table { display: block; overflow-x: auto; overscroll-behavior-x: contain }
|
|
351
|
+
table :is(th, td) { white-space: nowrap }
|
|
336
352
|
}
|
|
337
353
|
caption { text-align: start; color: var(--fertig-mut); font-size: .85em; padding-bottom: .35rem }
|
|
338
354
|
|
|
@@ -455,7 +471,7 @@ button, [type=submit], [type=button], [type=reset],
|
|
|
455
471
|
:where(a.primary, a[role=button]), ::file-selector-button {
|
|
456
472
|
display: inline-block; text-decoration: none; text-align: center;
|
|
457
473
|
padding: .48em 1.1em; background: var(--fertig-el); color: var(--fertig-fg); cursor: pointer;
|
|
458
|
-
border: 1px solid var(--fertig-bd); border-radius: var(--fertig-
|
|
474
|
+
border: 1px solid var(--fertig-bd); border-radius: var(--fertig-r); box-shadow: var(--fertig-up);
|
|
459
475
|
font: inherit; min-width: 5rem;
|
|
460
476
|
}
|
|
461
477
|
:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):hover:not(:disabled) { background: var(--fertig-face) }
|
|
@@ -499,16 +515,6 @@ button[aria-pressed=true]:hover:not(:disabled) {
|
|
|
499
515
|
:is([type=submit], .primary) { box-shadow: var(--fertig-up), inset 0 1px 0 light-dark(#ffffff33, #ffffff26) }
|
|
500
516
|
:is([type=submit], .primary):active:not(:disabled) { box-shadow: inset 0 1px 3px #0006 }
|
|
501
517
|
|
|
502
|
-
@supports (corner-shape: squircle) {
|
|
503
|
-
/* the surfaces this sheet rounds, not `*` — a universal rule would reshape
|
|
504
|
-
your components too, and this one is a taste, not a repair */
|
|
505
|
-
:is(button, [type=submit], [type=button], [type=reset], input, select, textarea,
|
|
506
|
-
fieldset, details, dialog, [popover], pre, kbd, code, samp, img, video,
|
|
507
|
-
menu, aside, [data-avatar], [data-skeleton], .card, .badge) {
|
|
508
|
-
corner-shape: squircle;
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
|
|
512
518
|
/* ---- disclosure / misc -------------------------------------- */
|
|
513
519
|
details {
|
|
514
520
|
border: 1px solid var(--fertig-bd); border-radius: var(--fertig-rw);
|
|
@@ -526,7 +532,7 @@ dialog {
|
|
|
526
532
|
}
|
|
527
533
|
dialog > :last-child:not(footer) { margin-bottom: 0 }
|
|
528
534
|
dialog, [popover] { overscroll-behavior: contain }
|
|
529
|
-
dialog::backdrop { background: color-mix(in srgb, var(--fertig-sh) 32%, transparent)
|
|
535
|
+
dialog::backdrop { background: color-mix(in srgb, var(--fertig-sh) 32%, transparent) }
|
|
530
536
|
|
|
531
537
|
/* dialog anatomy: an optional header and footer, pinned while the body scrolls.
|
|
532
538
|
Sticky rather than a grid, because a classless sheet has no wrapper around
|
|
@@ -743,18 +749,16 @@ nav[aria-label] ol li + li::before { content: "/"; margin-inline-end: .5em; colo
|
|
|
743
749
|
content: attr(data-tooltip); position: absolute;
|
|
744
750
|
inset-block-end: 100%; inset-inline-start: 50%;
|
|
745
751
|
translate: -50% -.45em; z-index: 10; white-space: nowrap; pointer-events: none;
|
|
746
|
-
background: light-dark(#1d1d1f, #3a3a40); color: #
|
|
752
|
+
background: light-dark(#1d1d1f, #3a3a40); color: #f7f8fb; font-size: .8em;
|
|
747
753
|
padding: .25em .55em; border-radius: var(--fertig-r); box-shadow: var(--fertig-up2);
|
|
748
754
|
}
|
|
749
755
|
/* translate is physical; the offset has to be told which way to go */
|
|
750
756
|
[data-tooltip]:dir(rtl)::after { translate: 50% -.45em }
|
|
751
757
|
|
|
752
758
|
/* tones: retint any component by redefining its accent */
|
|
753
|
-
[data-tone=ok] { --fertig-ac: light-dark(var(--fertig-
|
|
754
|
-
[data-tone=warn] { --fertig-ac: light-dark(var(--fertig-
|
|
755
|
-
|
|
756
|
-
lightness reads as brown, and a destructive button has to read as red. */
|
|
757
|
-
[data-tone=err] { --fertig-ac: light-dark(oklch(52% .16 27), oklch(74% .13 25)) }
|
|
759
|
+
[data-tone=ok] { --fertig-ac: light-dark(var(--fertig-green-700), var(--fertig-green-300)) }
|
|
760
|
+
[data-tone=warn] { --fertig-ac: light-dark(var(--fertig-amber-700), var(--fertig-amber-300)) }
|
|
761
|
+
[data-tone=err] { --fertig-ac: light-dark(var(--fertig-red-700), var(--fertig-red-300)) }
|
|
758
762
|
[data-tone] .badge, .badge[data-tone] { color: var(--fertig-ac); border-color: var(--fertig-ac) }
|
|
759
763
|
|
|
760
764
|
/* ---- parity with the component libraries --------------------- */
|
|
@@ -898,11 +902,11 @@ nav menu :is(a, button)[aria-current] {
|
|
|
898
902
|
/* ---- the only classes (all optional) ------------------------ */
|
|
899
903
|
.muted { color: var(--fertig-mut) }
|
|
900
904
|
.center { text-align: center }
|
|
901
|
-
.wide { max-width:
|
|
902
|
-
/* on the toolbar .wide cannot mean "be
|
|
905
|
+
.wide { max-width: 80rem }
|
|
906
|
+
/* on the toolbar .wide cannot mean "be 80rem wide" — the bar stays full-bleed
|
|
903
907
|
and its contents move out to the wide column, so an app screen's wordmark
|
|
904
908
|
lines up with the app's own content rather than floating mid-screen. */
|
|
905
|
-
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav.wide { max-width: none; --fertig-nw:
|
|
909
|
+
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav.wide { max-width: none; --fertig-nw: 80rem }
|
|
906
910
|
.row { display: flex; flex-wrap: wrap; gap: .7rem; align-items: center }
|
|
907
911
|
/* Form controls are full-width blocks by default, which is right in a form and
|
|
908
912
|
wrong in a toolbar. Inside a .row they size to the row instead. */
|
|
@@ -977,8 +981,8 @@ nav menu :is(a, button)[aria-current] {
|
|
|
977
981
|
.max-w-7xl { max-inline-size: 80rem }
|
|
978
982
|
.max-w-full { max-inline-size: 100% }
|
|
979
983
|
.max-w-none { max-inline-size: none }
|
|
980
|
-
/*
|
|
981
|
-
.max-w-prose { max-inline-size:
|
|
984
|
+
/* Keep the prose utility readable even when the page shell is app-wide. */
|
|
985
|
+
.max-w-prose { max-inline-size: 38rem }
|
|
982
986
|
.hidden { display: none }
|
|
983
987
|
|
|
984
988
|
.badge {
|
|
@@ -1053,7 +1057,7 @@ optgroup { font-weight: 700; color: var(--fertig-mut) }
|
|
|
1053
1057
|
input:user-invalid, textarea:user-invalid { border-color: light-dark(#c0392b, #ff6b6b) }
|
|
1054
1058
|
input:user-invalid + small { color: light-dark(#c0392b, #ff6b6b) }
|
|
1055
1059
|
summary:hover { color: var(--fertig-ac) }
|
|
1056
|
-
/* thin
|
|
1060
|
+
/* thin, unobtrusive scrollbars */
|
|
1057
1061
|
/* scrollbar-width is Safari 18.2, scrollbar-color Safari 26.2 — both younger
|
|
1058
1062
|
than the floor, and both left ungated on purpose: there is no fallback to
|
|
1059
1063
|
write. An engine without them paints its own scrollbar, which is exactly
|
|
@@ -1074,7 +1078,6 @@ summary:hover { color: var(--fertig-ac) }
|
|
|
1074
1078
|
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > nav { display: none }
|
|
1075
1079
|
/* the footer stays: the legal line, the contact and the citations live there,
|
|
1076
1080
|
and a printout without them is missing the part people keep */
|
|
1077
|
-
:is(body, body > :where(#root, #app, #__next, [data-fertig])) > footer { box-shadow: none; margin-bottom: 0 }
|
|
1078
1081
|
body > *, body > :where(#root, #app, #__next, [data-fertig]) > * { border: 0; max-width: none }
|
|
1079
1082
|
p, blockquote, li { orphans: 3; widows: 3 } /* no stranded single lines */
|
|
1080
1083
|
a[href^="http"]::after { content: " (" attr(href) ")"; font-size: .8em; color: #555 }
|
|
@@ -1110,12 +1113,6 @@ summary:hover { color: var(--fertig-ac) }
|
|
|
1110
1113
|
/* CJK text wants punctuation and Latin spacing handled */
|
|
1111
1114
|
:root { text-spacing-trim: trim-start; text-autospace: normal }
|
|
1112
1115
|
|
|
1113
|
-
/* translucency is decorative; drop it when it is unwanted */
|
|
1114
|
-
@media (prefers-reduced-transparency: reduce) {
|
|
1115
|
-
body > nav { background: var(--fertig-face); backdrop-filter: none }
|
|
1116
|
-
dialog::backdrop { backdrop-filter: none }
|
|
1117
|
-
}
|
|
1118
|
-
|
|
1119
1116
|
@media (prefers-contrast: more) {
|
|
1120
1117
|
:root {
|
|
1121
1118
|
--fertig-bd: light-dark(#00000059, #ffffff6b);
|
|
@@ -1150,19 +1147,19 @@ summary:hover { color: var(--fertig-ac) }
|
|
|
1150
1147
|
@supports not (color: light-dark(#000, #fff)) {
|
|
1151
1148
|
:root {
|
|
1152
1149
|
--fertig-bg: #e6eaef; --fertig-el: #fafcfe; --fertig-face: #f3f6fa; --fertig-fg: #151b24;
|
|
1153
|
-
--fertig-mut: #525962; --fertig-bd: #151b2421; --fertig-tb: #
|
|
1154
|
-
--fertig-ac: #2850de; --fertig-on-ac: #
|
|
1150
|
+
--fertig-mut: #525962; --fertig-bd: #151b2421; --fertig-tb: #f3f6fa;
|
|
1151
|
+
--fertig-ac: #2850de; --fertig-on-ac: #f7f8fb;
|
|
1155
1152
|
}
|
|
1156
1153
|
@media (prefers-color-scheme: dark) {
|
|
1157
1154
|
:root:not([data-theme=light]) {
|
|
1158
1155
|
--fertig-bg: #090c12; --fertig-el: #141920; --fertig-face: #1c222a; --fertig-fg: #eaeff7;
|
|
1159
|
-
--fertig-mut: #9da5b1; --fertig-bd: #eaeff721; --fertig-tb: #
|
|
1156
|
+
--fertig-mut: #9da5b1; --fertig-bd: #eaeff721; --fertig-tb: #1c222a;
|
|
1160
1157
|
--fertig-ac: #90b5ff; --fertig-on-ac: #07071c;
|
|
1161
1158
|
}
|
|
1162
1159
|
}
|
|
1163
1160
|
[data-theme=dark] {
|
|
1164
1161
|
--fertig-bg: #090c12; --fertig-el: #141920; --fertig-face: #1c222a; --fertig-fg: #eaeff7;
|
|
1165
|
-
--fertig-mut: #9da5b1; --fertig-bd: #eaeff721; --fertig-tb: #
|
|
1162
|
+
--fertig-mut: #9da5b1; --fertig-bd: #eaeff721; --fertig-tb: #1c222a;
|
|
1166
1163
|
--fertig-ac: #90b5ff; --fertig-on-ac: #07071c;
|
|
1167
1164
|
}
|
|
1168
1165
|
}
|
package/fertig.min.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! fertig v3.0.0 — a classless CSS stylesheet. MIT */@property --fertig-a1{syntax:"<number>";inherits:true;initial-value:.06}@property --fertig-a2{syntax:"<number>";inherits:true;initial-value:.05}@layer fertig,fertig-a11y;@layer fertig{:root{color-scheme:light dark;accent-color:var(--fertig-ac);caret-color:var(--fertig-ac);--fertig-f:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--fertig-fm:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;--fertig-w:38rem;--fertig-r:12px;--fertig-rs:calc(var(--fertig-r) * .5);--fertig-rw:calc(var(--fertig-r) * 1.33);--fertig-rp:calc(infinity * 1px);--fertig-stone-100:oklch(97.5% .006 258);--fertig-stone-300:oklch(91% .009 258);--fertig-stone-500:oklch(72% .012 258);--fertig-stone-700:oklch(47% .014 258);--fertig-stone-900:oklch(26% .016 258);--fertig-sage-100:oklch(96% .024 160);--fertig-sage-300:oklch(87% .046 160);--fertig-sage-500:oklch(66% .064 160);--fertig-sage-700:oklch(47% .06 160);--fertig-sage-900:oklch(29% .042 160);--fertig-sky-100:oklch(96% .024 242);--fertig-sky-300:oklch(87% .05 244);--fertig-sky-500:oklch(64% .095 246);--fertig-sky-700:oklch(48% .1 250);--fertig-sky-900:oklch(30% .064 250);--fertig-clay-100:oklch(96% .024 45);--fertig-clay-300:oklch(88% .05 45);--fertig-clay-500:oklch(68% .095 45);--fertig-clay-700:oklch(50% .098 40);--fertig-clay-900:oklch(31% .06 40);--fertig-plum-100:oklch(96% .022 318);--fertig-plum-300:oklch(88% .042 318);--fertig-plum-500:oklch(66% .066 318);--fertig-plum-700:oklch(47% .07 318);--fertig-plum-900:oklch(29% .046 318);--fertig-gold-100:oklch(96.5% .03 92);--fertig-gold-300:oklch(89% .06 88);--fertig-gold-500:oklch(74% .092 85);--fertig-gold-700:oklch(55% .092 80);--fertig-gold-900:oklch(33% .056 80);--fertig-bg:light-dark(oklch(93.5% .008 258),oklch(15.5% .014 258));--fertig-el:light-dark(oklch(99% .004 258),oklch(21% .016 258));--fertig-face:light-dark(oklch(97.2% .006 258),oklch(25% .018 258));--fertig-fg:light-dark(oklch(22% .02 258),oklch(95% .012 258));--fertig-mut:light-dark(oklch(46% .018 258),oklch(72% .02 258));--fertig-bd:light-dark(oklch(22% .02 258 / .13),oklch(95% .012 258 / .13));--fertig-tb:light-dark(oklch(97.2% .006 258 / .85),oklch(25% .018 258 / .85));--fertig-ac:light-dark(oklch(50% .22 266),oklch(78% .13 266));--fertig-on-ac:light-dark(#fff,#07071c);--fertig-sh:oklch(30% .012 270);--fertig-a1:.06;--fertig-a2:.05;--fertig-sh1:color-mix(in srgb,var(--fertig-sh) calc(var(--fertig-a1) * 100%),transparent);--fertig-sh2:color-mix(in srgb,var(--fertig-sh) calc(var(--fertig-a2) * 100%),transparent);--fertig-up:0 1px 1px var(--fertig-sh1);--fertig-up2:0 1px 1px var(--fertig-sh1),0 8px 22px -8px var(--fertig-sh2);--fertig-dn:inset 0 1px 2px color-mix(in srgb,var(--fertig-sh) 7%,transparent);--fertig-caps:.74em/1.4 var(--fertig-f);--fertig-ease-out:cubic-bezier(.22,1,.36,1);--fertig-ease-in:cubic-bezier(.55,0,1,.45);--fertig-ease:cubic-bezier(.4,0,.2,1);--fertig-dur-1:.12s;--fertig-dur-2:.2s}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--fertig-a1:.42;--fertig-a2:.38}}@supports (color:oklch(from red l c h)){:root{--fertig-on-ac:oklch(from var(--fertig-ac) clamp(0,(l - .62) * -100,1) 0 h)}}@supports (color:contrast-color(red)){:root{--fertig-on-ac:contrast-color(var(--fertig-ac))}}[data-theme=light]{color-scheme:light;--fertig-a1:.06;--fertig-a2:.05}[data-theme=dark]{color-scheme:dark;--fertig-a1:.42;--fertig-a2:.38}[data-accent=indigo]{--fertig-ac:light-dark(oklch(50% .19 275),oklch(78% .11 275))}[data-accent=sky]{--fertig-ac:light-dark(var(--fertig-sky-700),oklch(78% .085 245))}[data-accent=sage]{--fertig-ac:light-dark(var(--fertig-sage-700),oklch(80% .075 155))}[data-accent=clay]{--fertig-ac:light-dark(var(--fertig-clay-700),oklch(80% .085 45))}[data-accent=plum]{--fertig-ac:light-dark(var(--fertig-plum-700),oklch(80% .065 320))}[data-accent=gold]{--fertig-ac:light-dark(oklch(55% .085 80),oklch(84% .09 85))}[data-accent=slate]{--fertig-ac:light-dark(oklch(35% .01 250),oklch(86% .006 250))}*,::before,::after{box-sizing:border-box}html{font:16px/1.65 var(--fertig-f);-webkit-text-size-adjust:100%;tab-size:2}body{margin:0;background:var(--fertig-bg);color:var(--fertig-fg);overflow-wrap:break-word;font-variant-numeric:slashed-zero tabular-nums}::selection{background:color-mix(in srgb,var(--fertig-ac) 28%,transparent)}:focus-visible{outline:3px solid color-mix(in srgb,var(--fertig-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(--fertig-r);box-shadow:var(--fertig-up2)}body>*,body>:where(#root,#app,#__next,[data-fertig])>*{max-width:var(--fertig-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(--fertig-el);border-inline:1px solid var(--fertig-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(--fertig-mut);font-size:.85em;border-top:1px solid var(--fertig-bd);border-bottom:1px solid var(--fertig-bd);border-radius:0 0 var(--fertig-rw) var(--fertig-rw);margin-bottom:2.5rem;box-shadow:0 20px 32px -24px color-mix(in srgb,var(--fertig-sh) 38%,transparent)}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav{position:sticky;top:0;z-index:9;max-width:none;--fertig-nw:var(--fertig-w);padding-inline:max(1.9rem,calc(50% - var(--fertig-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(--fertig-tb);color:var(--fertig-fg);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--fertig-bd);font-size:.92em}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav a{color:var(--fertig-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(--fertig-caps);text-transform:uppercase;letter-spacing:.1em;color:var(--fertig-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(--fertig-ac);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}small{font-size:.85em;color:var(--fertig-mut)}hr{border:0;border-top:1px solid var(--fertig-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(--fertig-bd);padding-block:.15rem;padding-inline:1.2rem 0;color:var(--fertig-mut)}ul,ol{padding-inline-start:1.5rem}li::marker{color:var(--fertig-mut)}dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.35rem 1rem}dt{color:var(--fertig-mut)}dd{margin:0}figcaption{font-size:.85em;color:var(--fertig-mut);text-align:center}code,kbd,samp,pre{font-family:var(--fertig-fm);font-size:.9em}:not(pre)>code,samp{background:var(--fertig-face);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rs);padding:.08em .35em}kbd{background:var(--fertig-face);border:1px solid var(--fertig-bd);border-bottom-width:2px;border-radius:var(--fertig-rs);padding:.08em .4em;box-shadow:var(--fertig-up)}pre{background:var(--fertig-face);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:1rem;overflow-x:auto}pre code{background:none;border:0;padding:0;font-size:1em}:root{--fertig-syn-comment:light-dark(#6b7280,#8b949e);--fertig-syn-key:light-dark(#7c3aed,#c4a7fb);--fertig-syn-str:light-dark(#15803d,#7ee787);--fertig-syn-num:light-dark(#b45309,#f0b866);--fertig-syn-fn:light-dark(#1d4ed8,#93c5fd);--fertig-syn-attr:light-dark(#b91c1c,#ff9492)}:is(.hljs-comment,.hljs-quote,.token.comment,.token.prolog,.token.doctype){color:var(--fertig-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(--fertig-syn-key)}:is(.hljs-string,.hljs-meta-string,.token.string,.token.attr-value,.token.char){color:var(--fertig-syn-str)}:is(.hljs-number,.hljs-symbol,.hljs-bullet,.token.number,.token.boolean,.token.constant,.token.unit){color:var(--fertig-syn-num)}:is(.hljs-title,.hljs-name,.hljs-section,.hljs-function,.token.tag,.token.function,.token.class-name){color:var(--fertig-syn-fn)}:is(.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.token.attr-name,.token.property,.token.variable){color:var(--fertig-syn-attr)}:is(.hljs-punctuation,.hljs-operator,.token.punctuation,.token.operator){color:var(--fertig-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(--fertig-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(--fertig-fg) 45%,transparent);font:700 var(--fertig-caps);text-transform:uppercase;letter-spacing:.09em;color:var(--fertig-mut);padding-bottom:.4rem}tbody tr:last-child td{border-bottom:0}tfoot td{font-weight:700;border-top:1px solid var(--fertig-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(--fertig-face)}@media (width <= 40rem){table{display:block;overflow-x:auto;overscroll-behavior-x:contain}}caption{text-align:start;color:var(--fertig-mut);font-size:.85em;padding-bottom:.35rem}button,input,select,textarea{font:inherit;color:inherit}label{display:block;font-size:.85em;color:var(--fertig-mut)}label:has(input){font-size:1rem;color:var(--fertig-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(--fertig-el);border:1px solid var(--fertig-bd);border-radius:var(--fertig-r);box-shadow:var(--fertig-dn)}select{appearance:none;padding-inline-end:2.2rem;background-image:linear-gradient(45deg,transparent calc(50% - 1px),currentColor calc(50% - 1px),currentColor calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(-45deg,transparent calc(50% - 1px),currentColor calc(50% - 1px),currentColor calc(50% + .5px),transparent calc(50% + .5px));background-position:calc(100% - 17px) 54%,calc(100% - 12px) 54%;background-size:6px 6px;background-repeat:no-repeat}select:dir(rtl){background-position:12px 54%,17px 54%}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(--fertig-dur-1) var(--fertig-ease),translate var(--fertig-dur-1) var(--fertig-ease)}select:open::picker-icon{rotate:225deg;translate:0 .1em}::picker(select){min-width:anchor-size(width);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.35rem;background:var(--fertig-el);margin-block-start:.35rem;box-shadow:var(--fertig-up2),0 24px 44px -18px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}option{display:flex;align-items:center;gap:.5em;padding:.4em .6em;border-radius:calc(var(--fertig-r) - 2px)}option:hover{background:var(--fertig-face)}option:checked{background:var(--fertig-ac);color:var(--fertig-on-ac)}option::checkmark{order:1;margin-inline-start:auto;content:"✓"}@media (prefers-reduced-motion:no-preference) and (update:fast){::picker(select){opacity:0;translate:0 -4px;transform-origin:top center;transition:opacity .13s var(--fertig-ease-out),translate .13s var(--fertig-ease-out),display .13s allow-discrete,overlay .13s allow-discrete}select:open::picker(select){opacity:1;translate:0}@starting-style{select:open::picker(select){opacity:0;translate:0 -4px}}}}:is(input,select,textarea):hover:not(:disabled){border-color:color-mix(in srgb,var(--fertig-fg) 25%,transparent)}:is(input,select,textarea):focus-visible{border-color:var(--fertig-ac)}input[type=checkbox],input[type=radio]{width:1.15em;height:1.15em;margin:0;margin-inline-end:.45em;vertical-align:-.18em}:is(input[type=checkbox],input[type=radio],input[type=range],progress,select[multiple]){accent-color:var(--fertig-ac)}:is(input,textarea,[contenteditable]){caret-color:var(--fertig-ac)}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(--fertig-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(--fertig-face);cursor:default}label:has(+:required)::after,label:has(:required)::after{content:" *";color:var(--fertig-ac)}input:autofill,input:autofill:hover,input:autofill:focus{-webkit-text-fill-color:var(--fertig-fg);box-shadow:var(--fertig-dn),inset 0 0 0 100px var(--fertig-el);caret-color:var(--fertig-ac)}:disabled{color:var(--fertig-mut);cursor:not-allowed;box-shadow:none}fieldset{border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.9rem 1rem 1rem;background:var(--fertig-face)}fieldset:focus-within{border-color:color-mix(in srgb,var(--fertig-ac) 45%,var(--fertig-bd))}legend{float:left;width:100%;margin-bottom:.8rem;padding:0 0 .6rem;border-bottom:1px solid var(--fertig-bd);font-size:.95em;font-weight:700;color:var(--fertig-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(--fertig-el);color:var(--fertig-fg);cursor:pointer;border:1px solid var(--fertig-bd);border-radius:var(--fertig-rp);box-shadow:var(--fertig-up);font:inherit;min-width:5rem}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):hover:not(:disabled){background:var(--fertig-face)}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):active:not(:disabled){box-shadow:var(--fertig-dn);translate:0 .5px}[type=submit],.primary{background:var(--fertig-ac);border-color:transparent;color:var(--fertig-on-ac)}:is([type=submit],.primary,a.primary):hover:not(:disabled){background:color-mix(in oklab,var(--fertig-ac),#fff 9%)}@supports (color:oklch(from red l c h)){:is([type=submit],.primary,a.primary):hover:not(:disabled){background:oklch(from var(--fertig-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(--fertig-face);border-color:var(--fertig-bd)}:is(button,a,input)[data-variant=link]{background:none;border:0;box-shadow:none;min-width:0;padding-inline:.2em;color:var(--fertig-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(--fertig-face);color:var(--fertig-ac);font-weight:700}button[aria-pressed=true]:hover:not(:disabled){background:color-mix(in srgb,var(--fertig-fg) 7%,var(--fertig-face))}:is([type=submit],.primary){box-shadow:var(--fertig-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(--fertig-bd);border-radius:var(--fertig-rw);padding:.7rem 1.1rem;background:var(--fertig-el)}summary{cursor:pointer;font-weight:700;list-style:none}summary::before{content:"▸ ";color:var(--fertig-mut)}details[open]>summary::before{content:"▾ "}details[open]>summary{margin-bottom:.6rem}dialog{background:var(--fertig-el);color:var(--fertig-fg);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:1.6rem;max-width:min(30rem,92dvw);box-shadow:0 1px 1px color-mix(in srgb,var(--fertig-sh) 8%,transparent),0 28px 60px -22px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}dialog>:last-child:not(footer){margin-bottom:0}dialog,[popover]{overscroll-behavior:contain}dialog::backdrop{background:color-mix(in srgb,var(--fertig-sh) 32%,transparent);backdrop-filter:blur(4px)}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.6rem;background:var(--fertig-el)}dialog>header{inset-block-start:-1.6rem;margin-block:-1.6rem .35rem;padding:1.6rem 1.6rem .5rem;font-weight:700;border-radius:var(--fertig-rw) var(--fertig-rw) 0 0}dialog:is([open],:modal)>header>:is(h1,h2,h3,h4,p){margin:0;font-family:var(--fertig-f);font-size:1.1rem;font-weight:600;line-height:1.3;letter-spacing:-.01em}dialog>footer{inset-block-end:-1.6rem;margin-block:1.35rem -1.6rem;padding:.5rem 1.6rem 1.6rem;border-radius:0 0 var(--fertig-rw) var(--fertig-rw);display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;justify-content:flex-end}@supports (animation-timeline:scroll()){dialog>header{animation:fertig-rule-under linear both;animation-timeline:scroll(nearest);animation-range:0 1.2rem}dialog>footer{animation:fertig-rule-over linear both;animation-timeline:scroll(nearest);animation-range:calc(100% - 1.2rem) 100%}@keyframes fertig-rule-under{from{box-shadow:none}to{box-shadow:0 1px 0 var(--fertig-bd)}}@keyframes fertig-rule-over{from{box-shadow:0 -1px 0 var(--fertig-bd)}to{box-shadow:none}}}dialog>footer>:is(p,span):first-child{margin:0;margin-inline-end:auto;color:var(--fertig-mut)}@media (prefers-reduced-motion:no-preference) and (update:fast){dialog,dialog::backdrop{transition:opacity var(--fertig-dur-2) var(--fertig-ease-out),translate var(--fertig-dur-2) var(--fertig-ease-out),display var(--fertig-dur-2) allow-discrete,overlay var(--fertig-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(--fertig-ease-out),translate .13s var(--fertig-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(--fertig-ac) 28%,transparent)}aside{border:1px solid var(--fertig-bd);border-inline-start:3px solid var(--fertig-ac);border-radius:var(--fertig-rw);border-start-start-radius:0;border-end-start-radius:0;background:var(--fertig-el);padding:.7rem 1.1rem;margin-block:1.1rem}progress{width:100%;height:.5rem;border:0;border-radius:var(--fertig-rp);background:var(--fertig-face)}progress::-webkit-progress-bar{background:var(--fertig-face);border-radius:var(--fertig-rp)}progress::-webkit-progress-value{background:var(--fertig-ac);border-radius:var(--fertig-rp)}progress::-moz-progress-bar{background:var(--fertig-ac);border-radius:var(--fertig-rp)}@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(--fertig-ease),content-visibility .28s allow-discrete}details[open]::details-content{block-size:auto}}}[role=group]{display:inline-flex;vertical-align:middle;max-inline-size:100%;overflow:auto clip;overscroll-behavior-x:contain}[role=group]>*{border-radius:0;margin-inline-start:-1px;box-shadow:none;min-width:0}[role=group]>:focus-visible{outline-offset:-3px}[role=group]>:first-child{margin-inline-start:0;border-start-start-radius:var(--fertig-rp);border-end-start-radius:var(--fertig-rp)}[role=group]>:last-child{border-start-end-radius:var(--fertig-rp);border-end-end-radius:var(--fertig-rp)}[role=group]>[aria-pressed=true]{background:var(--fertig-face);color:var(--fertig-ac);font-weight:700}[role=group]>:active:not(:disabled){translate:none}[role=tablist]{display:flex;gap:.1rem;border-bottom:1px solid var(--fertig-bd);margin:1.1rem 0}[role=tab]{background:none;border:0;box-shadow:none;min-width:0;color:var(--fertig-mut);padding:.45em .9em;border-radius:var(--fertig-r) var(--fertig-r) 0 0;margin-bottom:-1px}[role=tab]:hover:not(:disabled){background:var(--fertig-face);color:var(--fertig-fg)}[role=tab][aria-selected=true]{color:var(--fertig-fg);box-shadow:inset 0 -2px 0 var(--fertig-ac)}input[type=checkbox][switch],input[type=checkbox][role=switch]{appearance:none;width:2.2em;height:1.3em;border-radius:var(--fertig-rp);border:0;background:color-mix(in srgb,var(--fertig-fg) 20%,transparent);position:relative;cursor:pointer;vertical-align:-.3em;margin-inline-end:.5em}input[switch]::after,input[role=switch]::after{content:"";position:absolute;inset-block-start:.14em;inset-inline-start:.14em;width:1.02em;height:1.02em;border-radius:50%;background:#fff;box-shadow:var(--fertig-up);transition:translate .16s var(--fertig-ease-out)}input[switch]:checked,input[role=switch]:checked{background:var(--fertig-ac)}input[switch]:checked::after,input[role=switch]:checked::after{translate:.9em 0}:is(input[switch],input[role=switch]):checked:dir(rtl)::after{translate:-.9em 0}[popover]{background:var(--fertig-el);color:var(--fertig-fg);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.35rem;min-width:12rem;max-block-size:60dvh;overflow:auto;font-size:.95em;box-shadow:var(--fertig-up2),0 24px 44px -18px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}@supports (position-area:block-end span-inline-end){[popover]{position:fixed;inset:auto;position-anchor:auto;position-area:block-end span-inline-end;position-try-fallbacks:flip-block,flip-inline;margin:.35rem 0 0}@supports (min-width:anchor-size(width)){[popover]{min-width:max(12rem,anchor-size(width));position-visibility:anchors-visible}}}[popover]:is(ul,menu){list-style:none;padding:0;margin:0}[popover]:is(a,button):not(:disabled){display:block;width:100%;text-align:start;background:none;border:0;box-shadow:none;min-width:0;padding:.4em .6em;text-decoration:none;color:inherit;border-radius:calc(var(--fertig-r) - 2px);font-weight:400}[popover]:is(a,button):hover:not(:disabled){background:var(--fertig-ac);color:var(--fertig-on-ac)}[popover] hr{margin:.3rem 0}nav[aria-label] ol{display:flex;flex-wrap:wrap;gap:.5em;list-style:none;padding:0;font-size:.9em}nav[aria-label] ol li + li::before{content:"/";margin-inline-end:.5em;color:var(--fertig-mut)}[aria-busy=true]{cursor:progress}[aria-busy=true]::before{content:"";display:inline-block;width:.85em;height:.85em;margin-inline-end:.55em;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;vertical-align:-.1em}@media (prefers-reduced-motion:no-preference) and (update:fast){[aria-busy=true]::before{animation:fertig-spin .6s linear infinite}}@keyframes fertig-spin{to{rotate:360deg}}[data-tooltip]{position:relative}[data-tooltip]:is(:hover,:focus-visible,:active)::after{content:attr(data-tooltip);position:absolute;inset-block-end:100%;inset-inline-start:50%;translate:-50% -.45em;z-index:10;white-space:nowrap;pointer-events:none;background:light-dark(#1d1d1f,#3a3a40);color:#fff;font-size:.8em;padding:.25em .55em;border-radius:var(--fertig-r);box-shadow:var(--fertig-up2)}[data-tooltip]:dir(rtl)::after{translate:50% -.45em}[data-tone=ok]{--fertig-ac:light-dark(var(--fertig-sage-700),oklch(76% .085 155))}[data-tone=warn]{--fertig-ac:light-dark(var(--fertig-gold-700),oklch(80% .095 85))}[data-tone=err]{--fertig-ac:light-dark(oklch(52% .16 27),oklch(74% .13 25))}[data-tone] .badge,.badge[data-tone]{color:var(--fertig-ac);border-color:var(--fertig-ac)}[data-avatar]{display:inline-grid;place-items:center;flex:none;overflow:hidden;inline-size:2.5rem;aspect-ratio:1;border-radius:50%;background:var(--fertig-face);border:1px solid var(--fertig-bd);font-size:.8em;font-weight:700;color:var(--fertig-mut);object-fit:cover}[data-avatar=sm]{inline-size:1.75rem;font-size:.7em}[data-avatar=lg]{inline-size:3.5rem;font-size:1em}[data-skeleton]{color:transparent;border-radius:var(--fertig-r);pointer-events:none;user-select:none;min-height:1em;background:linear-gradient(90deg,var(--fertig-face),color-mix(in srgb,var(--fertig-fg) 9%,var(--fertig-face)),var(--fertig-face));background-size:200% 100%}[data-skeleton] *{visibility:hidden}@media (prefers-reduced-motion:no-preference) and (update:fast){[data-skeleton]{animation:fertig-shimmer 1.4s linear infinite}@keyframes fertig-shimmer{to{background-position:-200% 0}}}dialog[data-side]{max-width:none;margin:0;border-radius:0;padding:1.4rem}dialog[data-side=right]{inset:0 0 0 auto;block-size:100dvh;inline-size:min(28rem,92dvw);border-block:0;border-inline-end:0}dialog[data-side=left]{inset:0 auto 0 0;block-size:100dvh;inline-size:min(28rem,92dvw);border-block:0;border-inline-start:0}dialog[data-side=bottom]{inset:auto 0 0 0;inline-size:100%;max-block-size:85dvh;border-radius:var(--fertig-rw) var(--fertig-rw) 0 0;border-bottom:0}@media (prefers-reduced-motion:no-preference) and (update:fast){dialog[data-side=right]{translate:100% 0}dialog[data-side=left]{translate:-100% 0}dialog[data-side=bottom]{translate:0 100%}dialog[data-side][open]{translate:0 0}@starting-style{dialog[data-side=right][open]{translate:100% 0}dialog[data-side=left][open]{translate:-100% 0}dialog[data-side=bottom][open]{translate:0 100%}}}[popover][data-toast]{position:fixed;inset:auto 1rem 1rem auto;margin:0;min-width:16rem;max-width:min(24rem,92dvw);padding:.8rem 1rem}@supports (position-area:block-end span-inline-end){[popover][data-toast]{position-area:none;inset:auto 1rem 1rem auto;min-width:16rem}}[popover][data-toast-region]{position:fixed;inset:auto 1rem 1rem auto;margin:0;display:flex;flex-direction:column;align-items:flex-end;gap:.6rem;background:none;border:0;box-shadow:none;padding:0;max-block-size:none;overflow:visible;pointer-events:none}[popover][data-toast-region]>[data-toast]{pointer-events:auto;position:static;inset:auto;min-width:16rem;max-width:min(24rem,92dvw);padding:.8rem 1rem;background:var(--fertig-el);color:var(--fertig-fg);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);font-size:.95em;box-shadow:var(--fertig-up2),0 24px 44px -18px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}@supports (position-area:block-end span-inline-end){[popover][data-toast-region]{position-area:none;inset:auto 1rem 1rem auto}}menu{list-style:none;padding:0;margin:1.1rem 0;border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);background:var(--fertig-el)}menu>li{padding:.55rem .85rem}menu>li + li{border-top:1px solid var(--fertig-bd)}[popover] menu{border:0;padding:0;margin:0;background:none}[popover] menu>li{padding:0}[popover] menu>li + li{border-top:0}nav menu{border:0;background:none;padding:0;margin-block:0 1.2rem}nav menu>li{padding:0}nav menu>li + li{border-top:0}nav menu:is(a,button){display:block;inline-size:100%;text-align:start;padding:.38rem .6rem;border:0;border-radius:var(--fertig-r);background:none;box-shadow:none;font:inherit;color:var(--fertig-fg);text-decoration:none;opacity:.72}nav menu:is(a,button):hover{background:var(--fertig-face);opacity:1}nav menu:is(a,button)[aria-current]{background:var(--fertig-face);color:var(--fertig-ac);font-weight:600;opacity:1}[data-layout=sidebar]{display:grid;gap:1.5rem;align-items:start}@media (width>= 56rem){[data-layout=sidebar]{grid-template-columns:15rem minmax(0,1fr)}[data-layout=sidebar]>:first-child{position:sticky;top:4.5rem}}[data-layout=sidebar]>*{min-width:0}[data-carousel]{display:flex;gap:1rem;overflow-x:auto;padding-bottom:.5rem;scroll-snap-type:x mandatory;overscroll-behavior-x:contain}[data-carousel]>*{scroll-snap-align:start;flex:0 0 min(20rem,82%)}.muted{color:var(--fertig-mut)}.center{text-align:center}.wide{max-width:66rem}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav.wide{max-width:none;--fertig-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(--fertig-bd);border-radius:var(--fertig-rw);padding:1.1rem;background:var(--fertig-el);box-shadow:var(--fertig-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(--fertig-w)}.hidden{display:none}.badge{border:1px solid var(--fertig-bd);border-radius:var(--fertig-rp);background:var(--fertig-face);padding:.1em .6em;font:700 var(--fertig-caps);color:var(--fertig-mut);text-transform:uppercase;letter-spacing:.07em}.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(--fertig-bd)}.card>footer{margin-top:auto;margin-bottom:-.25rem;padding-top:.7rem;color:var(--fertig-mut);font-size:.85em;border-top:1px solid var(--fertig-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(--fertig-rw) var(--fertig-rw) 0 0;box-shadow:none}.card[data-tone]{background:linear-gradient(var(--fertig-ac),var(--fertig-ac)) top / 100% 3px no-repeat,var(--fertig-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(--fertig-ac) 45%,var(--fertig-bd));box-shadow:var(--fertig-up2),0 16px 30px -16px color-mix(in srgb,var(--fertig-sh) 28%,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-block-start:4rem}:is(h1,h2,h3,h4):target{background:color-mix(in srgb,var(--fertig-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(--fertig-ac)}del{color:var(--fertig-mut)}address{font-style:normal;color:var(--fertig-mut)}hgroup>*{margin:0}hgroup>p{color:var(--fertig-mut)}output{font-weight:700}meter{width:100%;height:.5rem}optgroup{font-weight:700;color:var(--fertig-mut)}::file-selector-button{margin-inline-end:.8em}::file-selector-button:hover{background:var(--fertig-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(--fertig-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(--fertig-fg) 25%,transparent) transparent}@page{margin:2cm}@media print{:root{--fertig-bg:#fff;--fertig-el:#fff;--fertig-fg:#000;--fertig-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{--fertig-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(--fertig-face);backdrop-filter:none}dialog::backdrop{backdrop-filter:none}}@media (prefers-contrast:more){:root{--fertig-bd:light-dark(#00000059,#ffffff6b);--fertig-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(--fertig-dur-1) var(--fertig-ease),background-color var(--fertig-dur-1) var(--fertig-ease),border-color var(--fertig-dur-1) var(--fertig-ease),color var(--fertig-dur-1) var(--fertig-ease),translate .08s var(--fertig-ease-out)}:focus-visible{transition:none}}@supports not (color:light-dark(#000,#fff)){:root{--fertig-bg:#e6eaef;--fertig-el:#fafcfe;--fertig-face:#f3f6fa;--fertig-fg:#151b24;--fertig-mut:#525962;--fertig-bd:#151b2421;--fertig-tb:#f3f6fad9;--fertig-ac:#2850de;--fertig-on-ac:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--fertig-bg:#090c12;--fertig-el:#141920;--fertig-face:#1c222a;--fertig-fg:#eaeff7;--fertig-mut:#9da5b1;--fertig-bd:#eaeff721;--fertig-tb:#1c222ad9;--fertig-ac:#90b5ff;--fertig-on-ac:#07071c}}[data-theme=dark]{--fertig-bg:#090c12;--fertig-el:#141920;--fertig-face:#1c222a;--fertig-fg:#eaeff7;--fertig-mut:#9da5b1;--fertig-bd:#eaeff721;--fertig-tb:#1c222ad9;--fertig-ac:#90b5ff;--fertig-on-ac:#07071c}}}@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}}}
|
|
1
|
+
/*! fertig v4.0.0 — a classless CSS stylesheet. MIT */@property --fertig-a1{syntax:"<number>";inherits:true;initial-value:.06}@property --fertig-a2{syntax:"<number>";inherits:true;initial-value:.05}@layer fertig,fertig-a11y;@layer fertig{:root{color-scheme:light dark;accent-color:var(--fertig-ac);caret-color:var(--fertig-ac);--fertig-f:ui-sans-serif,system-ui,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--fertig-fm:ui-monospace,"Cascadia Code","Roboto Mono",Consolas,"Liberation Mono",monospace;--fertig-w:72rem;--fertig-g:clamp(1.15rem,4vw,1.9rem);--fertig-r:8px;--fertig-rs:calc(var(--fertig-r) * .5);--fertig-rw:calc(var(--fertig-r) * 1.33);--fertig-rp:calc(var(--fertig-r) * 1000);--fertig-gray-100:oklch(97% .005 260);--fertig-gray-300:oklch(82% .01 260);--fertig-gray-500:oklch(62% .014 260);--fertig-gray-700:oklch(47% .015 260);--fertig-gray-900:oklch(25% .018 260);--fertig-blue-100:oklch(96% .018 255);--fertig-blue-300:oklch(80% .095 255);--fertig-blue-500:oklch(62% .16 255);--fertig-blue-700:oklch(47% .15 255);--fertig-blue-900:oklch(29% .09 255);--fertig-cyan-100:oklch(96% .025 210);--fertig-cyan-300:oklch(82% .085 210);--fertig-cyan-500:oklch(64% .11 210);--fertig-cyan-700:oklch(47% .08 210);--fertig-cyan-900:oklch(29% .05 210);--fertig-green-100:oklch(96% .025 150);--fertig-green-300:oklch(80% .095 150);--fertig-green-500:oklch(62% .13 150);--fertig-green-700:oklch(46% .10 150);--fertig-green-900:oklch(28% .06 150);--fertig-amber-100:oklch(97% .025 80);--fertig-amber-300:oklch(84% .10 80);--fertig-amber-500:oklch(72% .14 80);--fertig-amber-700:oklch(50% .10 80);--fertig-amber-900:oklch(29% .06 80);--fertig-red-100:oklch(96% .018 25);--fertig-red-300:oklch(80% .10 25);--fertig-red-500:oklch(62% .18 25);--fertig-red-700:oklch(47% .15 25);--fertig-red-900:oklch(28% .09 25);--fertig-violet-100:oklch(96% .018 290);--fertig-violet-300:oklch(80% .095 290);--fertig-violet-500:oklch(62% .16 290);--fertig-violet-700:oklch(47% .15 290);--fertig-violet-900:oklch(28% .09 290);--fertig-bg:light-dark(oklch(93.5% .008 260),oklch(15.5% .014 260));--fertig-el:light-dark(oklch(99% .004 260),oklch(21% .016 260));--fertig-face:light-dark(oklch(97.2% .006 260),oklch(25% .018 260));--fertig-fg:light-dark(oklch(22% .02 260),oklch(95% .012 260));--fertig-mut:light-dark(oklch(46% .018 260),oklch(72% .02 260));--fertig-bd:light-dark(oklch(22% .02 260 / .13),oklch(95% .012 260 / .13));--fertig-tb:light-dark(oklch(97.2% .006 260),oklch(25% .018 260));--fertig-ac:light-dark(var(--fertig-blue-700),var(--fertig-blue-300));--fertig-on-ac:light-dark(#f7f8fb,#07071c);--fertig-sh:oklch(30% .012 270);--fertig-a1:.06;--fertig-a2:.05;--fertig-sh1:color-mix(in srgb,var(--fertig-sh) calc(var(--fertig-a1) * 100%),transparent);--fertig-sh2:color-mix(in srgb,var(--fertig-sh) calc(var(--fertig-a2) * 100%),transparent);--fertig-up:0 1px 1px var(--fertig-sh1);--fertig-up2:0 1px 1px var(--fertig-sh1),0 8px 22px -8px var(--fertig-sh2);--fertig-dn:inset 0 1px 2px color-mix(in srgb,var(--fertig-sh) 7%,transparent);--fertig-caps:.74em/1.4 var(--fertig-f);--fertig-ease-out:cubic-bezier(.22,1,.36,1);--fertig-ease-in:cubic-bezier(.55,0,1,.45);--fertig-ease:cubic-bezier(.4,0,.2,1);--fertig-dur-1:.12s;--fertig-dur-2:.2s}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--fertig-a1:.42;--fertig-a2:.38}}@supports (color:oklch(from red l c h)){:root{--fertig-on-ac:oklch(from var(--fertig-ac) clamp(.06,(l - .62) * -100,.96) 0 h)}}@supports (color:contrast-color(red)){:root{--fertig-on-ac:color-mix(in oklab,contrast-color(var(--fertig-ac)) 96%,var(--fertig-ac))}}[data-theme=light]{color-scheme:light;--fertig-a1:.06;--fertig-a2:.05}[data-theme=dark]{color-scheme:dark;--fertig-a1:.42;--fertig-a2:.38}[data-accent=blue]{--fertig-ac:light-dark(var(--fertig-blue-700),var(--fertig-blue-300))}[data-accent=cyan]{--fertig-ac:light-dark(var(--fertig-cyan-700),var(--fertig-cyan-300))}[data-accent=green]{--fertig-ac:light-dark(var(--fertig-green-700),var(--fertig-green-300))}[data-accent=amber]{--fertig-ac:light-dark(var(--fertig-amber-700),var(--fertig-amber-300))}[data-accent=red]{--fertig-ac:light-dark(var(--fertig-red-700),var(--fertig-red-300))}[data-accent=violet]{--fertig-ac:light-dark(var(--fertig-violet-700),var(--fertig-violet-300))}[data-accent=gray]{--fertig-ac:light-dark(var(--fertig-gray-700),var(--fertig-gray-300))}*,::before,::after{box-sizing:border-box}html{font:16px/1.65 var(--fertig-f);-webkit-text-size-adjust:100%;tab-size:2}body{margin:0;background:var(--fertig-bg);color:var(--fertig-fg);overflow-wrap:break-word;font-variant-numeric:slashed-zero tabular-nums}::selection{background:color-mix(in srgb,var(--fertig-ac) 28%,transparent)}:focus-visible{outline:3px solid color-mix(in srgb,var(--fertig-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(--fertig-r);box-shadow:var(--fertig-up2)}body>*,body>:where(#root,#app,#__next,[data-fertig])>*{max-width:var(--fertig-w);margin-inline:auto;padding-inline:var(--fertig-g)}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(--fertig-el);border-inline:1px solid var(--fertig-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(--fertig-mut);font-size:.85em;border-top:1px solid var(--fertig-bd);border-bottom:1px solid var(--fertig-bd)}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav{position:sticky;top:0;z-index:9;max-width:none;--fertig-nw:var(--fertig-w);padding-inline:max(var(--fertig-g),calc(50% - var(--fertig-nw) / 2 + var(--fertig-g)),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(--fertig-tb);color:var(--fertig-fg);border-bottom:1px solid var(--fertig-bd);font-size:.92em}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav a{color:var(--fertig-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}@media (width <= 40rem){:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav{row-gap:.55rem}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav>ul{order:2;flex:0 0 100%;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav>ul::-webkit-scrollbar{display:none}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav>:last-child:not(ul){margin-inline-start:auto}}h1,h2,h3,h4,h5,h6{line-height:1.3;margin:1.4rem 0 .7rem;text-wrap:balance}h1{font-size:clamp(2rem,1.55rem + 1.5vw,2.8rem);letter-spacing:-.035em}h2{font-size:clamp(1.35rem,1.2rem + .5vw,1.65rem);letter-spacing:-.02em;margin-top:2.4rem}h3{font-size:1.12rem;letter-spacing:-.008em;margin-top:1.9rem}h4{font-size:1rem}h5,h6{font:700 var(--fertig-caps);text-transform:uppercase;letter-spacing:.1em;color:var(--fertig-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(--fertig-ac);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}small{font-size:.85em;color:var(--fertig-mut)}hr{border:0;border-top:1px solid var(--fertig-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(--fertig-bd);padding-block:.15rem;padding-inline:1.2rem 0;color:var(--fertig-mut)}ul,ol{padding-inline-start:1.5rem}li::marker{color:var(--fertig-mut)}dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.35rem 1rem}dt{color:var(--fertig-mut)}dd{margin:0}figcaption{font-size:.85em;color:var(--fertig-mut);text-align:center}code,kbd,samp,pre{font-family:var(--fertig-fm);font-size:.9em}:not(pre)>code,samp{background:var(--fertig-face);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rs);padding:.08em .35em}kbd{background:var(--fertig-face);border:1px solid var(--fertig-bd);border-bottom-width:2px;border-radius:var(--fertig-rs);padding:.08em .4em;box-shadow:var(--fertig-up)}pre{background:var(--fertig-face);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:1rem;overflow-x:auto}pre code{background:none;border:0;padding:0;font-size:1em}:root{--fertig-syn-comment:light-dark(#6b7280,#8b949e);--fertig-syn-key:light-dark(#7c3aed,#c4a7fb);--fertig-syn-str:light-dark(#15803d,#7ee787);--fertig-syn-num:light-dark(#b45309,#f0b866);--fertig-syn-fn:light-dark(#1d4ed8,#93c5fd);--fertig-syn-attr:light-dark(#b91c1c,#ff9492)}:is(.hljs-comment,.hljs-quote,.token.comment,.token.prolog,.token.doctype){color:var(--fertig-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(--fertig-syn-key)}:is(.hljs-string,.hljs-meta-string,.token.string,.token.attr-value,.token.char){color:var(--fertig-syn-str)}:is(.hljs-number,.hljs-symbol,.hljs-bullet,.token.number,.token.boolean,.token.constant,.token.unit){color:var(--fertig-syn-num)}:is(.hljs-title,.hljs-name,.hljs-section,.hljs-function,.token.tag,.token.function,.token.class-name){color:var(--fertig-syn-fn)}:is(.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.token.attr-name,.token.property,.token.variable){color:var(--fertig-syn-attr)}:is(.hljs-punctuation,.hljs-operator,.token.punctuation,.token.operator){color:var(--fertig-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(--fertig-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(--fertig-fg) 45%,transparent);font:700 var(--fertig-caps);text-transform:uppercase;letter-spacing:.09em;color:var(--fertig-mut);padding-bottom:.4rem}tbody tr:last-child td{border-bottom:0}tfoot td{font-weight:700;border-top:1px solid var(--fertig-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(--fertig-face)}@media (width <= 40rem){table{display:block;overflow-x:auto;overscroll-behavior-x:contain}table :is(th,td){white-space:nowrap}}caption{text-align:start;color:var(--fertig-mut);font-size:.85em;padding-bottom:.35rem}button,input,select,textarea{font:inherit;color:inherit}label{display:block;font-size:.85em;color:var(--fertig-mut)}label:has(input){font-size:1rem;color:var(--fertig-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(--fertig-el);border:1px solid var(--fertig-bd);border-radius:var(--fertig-r);box-shadow:var(--fertig-dn)}select{appearance:none;padding-inline-end:2.2rem;background-image:linear-gradient(45deg,transparent calc(50% - 1px),currentColor calc(50% - 1px),currentColor calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(-45deg,transparent calc(50% - 1px),currentColor calc(50% - 1px),currentColor calc(50% + .5px),transparent calc(50% + .5px));background-position:calc(100% - 17px) 54%,calc(100% - 12px) 54%;background-size:6px 6px;background-repeat:no-repeat}select:dir(rtl){background-position:12px 54%,17px 54%}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(--fertig-dur-1) var(--fertig-ease),translate var(--fertig-dur-1) var(--fertig-ease)}select:open::picker-icon{rotate:225deg;translate:0 .1em}::picker(select){min-width:anchor-size(width);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.35rem;background:var(--fertig-el);margin-block-start:.35rem;box-shadow:var(--fertig-up2),0 24px 44px -18px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}option{display:flex;align-items:center;gap:.5em;padding:.4em .6em;border-radius:calc(var(--fertig-r) - 2px)}option:hover{background:var(--fertig-face)}option:checked{background:var(--fertig-ac);color:var(--fertig-on-ac)}option::checkmark{order:1;margin-inline-start:auto;content:"✓"}@media (prefers-reduced-motion:no-preference) and (update:fast){::picker(select){opacity:0;translate:0 -4px;transform-origin:top center;transition:opacity .13s var(--fertig-ease-out),translate .13s var(--fertig-ease-out),display .13s allow-discrete,overlay .13s allow-discrete}select:open::picker(select){opacity:1;translate:0}@starting-style{select:open::picker(select){opacity:0;translate:0 -4px}}}}:is(input,select,textarea):hover:not(:disabled){border-color:color-mix(in srgb,var(--fertig-fg) 25%,transparent)}:is(input,select,textarea):focus-visible{border-color:var(--fertig-ac)}input[type=checkbox],input[type=radio]{width:1.15em;height:1.15em;margin:0;margin-inline-end:.45em;vertical-align:-.18em}:is(input[type=checkbox],input[type=radio],input[type=range],progress,select[multiple]){accent-color:var(--fertig-ac)}:is(input,textarea,[contenteditable]){caret-color:var(--fertig-ac)}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(--fertig-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(--fertig-face);cursor:default}label:has(+ :required)::after,label:has(:required)::after{content:" *";color:var(--fertig-ac)}input:autofill,input:autofill:hover,input:autofill:focus{-webkit-text-fill-color:var(--fertig-fg);box-shadow:var(--fertig-dn),inset 0 0 0 100px var(--fertig-el);caret-color:var(--fertig-ac)}:disabled{color:var(--fertig-mut);cursor:not-allowed;box-shadow:none}fieldset{border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.9rem 1rem 1rem;background:var(--fertig-face)}fieldset:focus-within{border-color:color-mix(in srgb,var(--fertig-ac) 45%,var(--fertig-bd))}legend{float:left;width:100%;margin-bottom:.8rem;padding:0 0 .6rem;border-bottom:1px solid var(--fertig-bd);font-size:.95em;font-weight:700;color:var(--fertig-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(--fertig-el);color:var(--fertig-fg);cursor:pointer;border:1px solid var(--fertig-bd);border-radius:var(--fertig-r);box-shadow:var(--fertig-up);font:inherit;min-width:5rem}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):hover:not(:disabled){background:var(--fertig-face)}:is(button,[type=submit],[type=button],[type=reset],a.primary,a[role=button]):active:not(:disabled){box-shadow:var(--fertig-dn);translate:0 .5px}[type=submit],.primary{background:var(--fertig-ac);border-color:transparent;color:var(--fertig-on-ac)}:is([type=submit],.primary,a.primary):hover:not(:disabled){background:color-mix(in oklab,var(--fertig-ac),#fff 9%)}@supports (color:oklch(from red l c h)){:is([type=submit],.primary,a.primary):hover:not(:disabled){background:oklch(from var(--fertig-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(--fertig-face);border-color:var(--fertig-bd)}:is(button,a,input)[data-variant=link]{background:none;border:0;box-shadow:none;min-width:0;padding-inline:.2em;color:var(--fertig-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(--fertig-face);color:var(--fertig-ac);font-weight:700}button[aria-pressed=true]:hover:not(:disabled){background:color-mix(in srgb,var(--fertig-fg) 7%,var(--fertig-face))}:is([type=submit],.primary){box-shadow:var(--fertig-up),inset 0 1px 0 light-dark(#ffffff33,#ffffff26)}:is([type=submit],.primary):active:not(:disabled){box-shadow:inset 0 1px 3px #0006}details{border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.7rem 1.1rem;background:var(--fertig-el)}summary{cursor:pointer;font-weight:700;list-style:none}summary::before{content:"▸ ";color:var(--fertig-mut)}details[open]>summary::before{content:"▾ "}details[open]>summary{margin-bottom:.6rem}dialog{background:var(--fertig-el);color:var(--fertig-fg);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:1.6rem;max-width:min(30rem,92dvw);box-shadow:0 1px 1px color-mix(in srgb,var(--fertig-sh) 8%,transparent),0 28px 60px -22px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}dialog>:last-child:not(footer){margin-bottom:0}dialog,[popover]{overscroll-behavior:contain}dialog::backdrop{background:color-mix(in srgb,var(--fertig-sh) 32%,transparent)}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.6rem;background:var(--fertig-el)}dialog>header{inset-block-start:-1.6rem;margin-block:-1.6rem .35rem;padding:1.6rem 1.6rem .5rem;font-weight:700;border-radius:var(--fertig-rw) var(--fertig-rw) 0 0}dialog:is([open],:modal)>header>:is(h1,h2,h3,h4,p){margin:0;font-family:var(--fertig-f);font-size:1.1rem;font-weight:600;line-height:1.3;letter-spacing:-.01em}dialog>footer{inset-block-end:-1.6rem;margin-block:1.35rem -1.6rem;padding:.5rem 1.6rem 1.6rem;border-radius:0 0 var(--fertig-rw) var(--fertig-rw);display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;justify-content:flex-end}@supports (animation-timeline:scroll()){dialog>header{animation:fertig-rule-under linear both;animation-timeline:scroll(nearest);animation-range:0 1.2rem}dialog>footer{animation:fertig-rule-over linear both;animation-timeline:scroll(nearest);animation-range:calc(100% - 1.2rem) 100%}@keyframes fertig-rule-under{from{box-shadow:none}to{box-shadow:0 1px 0 var(--fertig-bd)}}@keyframes fertig-rule-over{from{box-shadow:0 -1px 0 var(--fertig-bd)}to{box-shadow:none}}}dialog>footer>:is(p,span):first-child{margin:0;margin-inline-end:auto;color:var(--fertig-mut)}@media (prefers-reduced-motion:no-preference) and (update:fast){dialog,dialog::backdrop{transition:opacity var(--fertig-dur-2) var(--fertig-ease-out),translate var(--fertig-dur-2) var(--fertig-ease-out),display var(--fertig-dur-2) allow-discrete,overlay var(--fertig-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(--fertig-ease-out),translate .13s var(--fertig-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(--fertig-ac) 28%,transparent)}aside{border:1px solid var(--fertig-bd);border-inline-start:3px solid var(--fertig-ac);border-radius:var(--fertig-rw);border-start-start-radius:0;border-end-start-radius:0;background:var(--fertig-el);padding:.7rem 1.1rem;margin-block:1.1rem}progress{width:100%;height:.5rem;border:0;border-radius:var(--fertig-rp);background:var(--fertig-face)}progress::-webkit-progress-bar{background:var(--fertig-face);border-radius:var(--fertig-rp)}progress::-webkit-progress-value{background:var(--fertig-ac);border-radius:var(--fertig-rp)}progress::-moz-progress-bar{background:var(--fertig-ac);border-radius:var(--fertig-rp)}@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(--fertig-ease),content-visibility .28s allow-discrete}details[open]::details-content{block-size:auto}}}[role=group]{display:inline-flex;vertical-align:middle;max-inline-size:100%;overflow:auto clip;overscroll-behavior-x:contain}[role=group]>*{border-radius:0;margin-inline-start:-1px;box-shadow:none;min-width:0}[role=group]>:focus-visible{outline-offset:-3px}[role=group]>:first-child{margin-inline-start:0;border-start-start-radius:var(--fertig-rp);border-end-start-radius:var(--fertig-rp)}[role=group]>:last-child{border-start-end-radius:var(--fertig-rp);border-end-end-radius:var(--fertig-rp)}[role=group]>[aria-pressed=true]{background:var(--fertig-face);color:var(--fertig-ac);font-weight:700}[role=group]>:active:not(:disabled){translate:none}[role=tablist]{display:flex;gap:.1rem;border-bottom:1px solid var(--fertig-bd);margin:1.1rem 0}[role=tab]{background:none;border:0;box-shadow:none;min-width:0;color:var(--fertig-mut);padding:.45em .9em;border-radius:var(--fertig-r) var(--fertig-r) 0 0;margin-bottom:-1px}[role=tab]:hover:not(:disabled){background:var(--fertig-face);color:var(--fertig-fg)}[role=tab][aria-selected=true]{color:var(--fertig-fg);box-shadow:inset 0 -2px 0 var(--fertig-ac)}input[type=checkbox][switch],input[type=checkbox][role=switch]{appearance:none;width:2.2em;height:1.3em;border-radius:var(--fertig-rp);border:0;background:color-mix(in srgb,var(--fertig-fg) 20%,transparent);position:relative;cursor:pointer;vertical-align:-.3em;margin-inline-end:.5em}input[switch]::after,input[role=switch]::after{content:"";position:absolute;inset-block-start:.14em;inset-inline-start:.14em;width:1.02em;height:1.02em;border-radius:50%;background:#fff;box-shadow:var(--fertig-up);transition:translate .16s var(--fertig-ease-out)}input[switch]:checked,input[role=switch]:checked{background:var(--fertig-ac)}input[switch]:checked::after,input[role=switch]:checked::after{translate:.9em 0}:is(input[switch],input[role=switch]):checked:dir(rtl)::after{translate:-.9em 0}[popover]{background:var(--fertig-el);color:var(--fertig-fg);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);padding:.35rem;min-width:12rem;max-block-size:60dvh;overflow:auto;font-size:.95em;box-shadow:var(--fertig-up2),0 24px 44px -18px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}@supports (position-area:block-end span-inline-end){[popover]{position:fixed;inset:auto;position-anchor:auto;position-area:block-end span-inline-end;position-try-fallbacks:flip-block,flip-inline;margin:.35rem 0 0}@supports (min-width:anchor-size(width)){[popover]{min-width:max(12rem,anchor-size(width));position-visibility:anchors-visible}}}[popover] :is(ul,menu){list-style:none;padding:0;margin:0}[popover] :is(a,button):not(:disabled){display:block;width:100%;text-align:start;background:none;border:0;box-shadow:none;min-width:0;padding:.4em .6em;text-decoration:none;color:inherit;border-radius:calc(var(--fertig-r) - 2px);font-weight:400}[popover] :is(a,button):hover:not(:disabled){background:var(--fertig-ac);color:var(--fertig-on-ac)}[popover] hr{margin:.3rem 0}nav[aria-label] ol{display:flex;flex-wrap:wrap;gap:.5em;list-style:none;padding:0;font-size:.9em}nav[aria-label] ol li + li::before{content:"/";margin-inline-end:.5em;color:var(--fertig-mut)}[aria-busy=true]{cursor:progress}[aria-busy=true]::before{content:"";display:inline-block;width:.85em;height:.85em;margin-inline-end:.55em;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;vertical-align:-.1em}@media (prefers-reduced-motion:no-preference) and (update:fast){[aria-busy=true]::before{animation:fertig-spin .6s linear infinite}}@keyframes fertig-spin{to{rotate:360deg}}[data-tooltip]{position:relative}[data-tooltip]:is(:hover,:focus-visible,:active)::after{content:attr(data-tooltip);position:absolute;inset-block-end:100%;inset-inline-start:50%;translate:-50% -.45em;z-index:10;white-space:nowrap;pointer-events:none;background:light-dark(#1d1d1f,#3a3a40);color:#f7f8fb;font-size:.8em;padding:.25em .55em;border-radius:var(--fertig-r);box-shadow:var(--fertig-up2)}[data-tooltip]:dir(rtl)::after{translate:50% -.45em}[data-tone=ok]{--fertig-ac:light-dark(var(--fertig-green-700),var(--fertig-green-300))}[data-tone=warn]{--fertig-ac:light-dark(var(--fertig-amber-700),var(--fertig-amber-300))}[data-tone=err]{--fertig-ac:light-dark(var(--fertig-red-700),var(--fertig-red-300))}[data-tone] .badge,.badge[data-tone]{color:var(--fertig-ac);border-color:var(--fertig-ac)}[data-avatar]{display:inline-grid;place-items:center;flex:none;overflow:hidden;inline-size:2.5rem;aspect-ratio:1;border-radius:50%;background:var(--fertig-face);border:1px solid var(--fertig-bd);font-size:.8em;font-weight:700;color:var(--fertig-mut);object-fit:cover}[data-avatar=sm]{inline-size:1.75rem;font-size:.7em}[data-avatar=lg]{inline-size:3.5rem;font-size:1em}[data-skeleton]{color:transparent;border-radius:var(--fertig-r);pointer-events:none;user-select:none;min-height:1em;background:linear-gradient(90deg,var(--fertig-face),color-mix(in srgb,var(--fertig-fg) 9%,var(--fertig-face)),var(--fertig-face));background-size:200% 100%}[data-skeleton] *{visibility:hidden}@media (prefers-reduced-motion:no-preference) and (update:fast){[data-skeleton]{animation:fertig-shimmer 1.4s linear infinite}@keyframes fertig-shimmer{to{background-position:-200% 0}}}dialog[data-side]{max-width:none;margin:0;border-radius:0;padding:1.4rem}dialog[data-side=right]{inset:0 0 0 auto;block-size:100dvh;inline-size:min(28rem,92dvw);border-block:0;border-inline-end:0}dialog[data-side=left]{inset:0 auto 0 0;block-size:100dvh;inline-size:min(28rem,92dvw);border-block:0;border-inline-start:0}dialog[data-side=bottom]{inset:auto 0 0 0;inline-size:100%;max-block-size:85dvh;border-radius:var(--fertig-rw) var(--fertig-rw) 0 0;border-bottom:0}@media (prefers-reduced-motion:no-preference) and (update:fast){dialog[data-side=right]{translate:100% 0}dialog[data-side=left]{translate:-100% 0}dialog[data-side=bottom]{translate:0 100%}dialog[data-side][open]{translate:0 0}@starting-style{dialog[data-side=right][open]{translate:100% 0}dialog[data-side=left][open]{translate:-100% 0}dialog[data-side=bottom][open]{translate:0 100%}}}[popover][data-toast]{position:fixed;inset:auto 1rem 1rem auto;margin:0;min-width:16rem;max-width:min(24rem,92dvw);padding:.8rem 1rem}@supports (position-area:block-end span-inline-end){[popover][data-toast]{position-area:none;inset:auto 1rem 1rem auto;min-width:16rem}}[popover][data-toast-region]{position:fixed;inset:auto 1rem 1rem auto;margin:0;display:flex;flex-direction:column;align-items:flex-end;gap:.6rem;background:none;border:0;box-shadow:none;padding:0;max-block-size:none;overflow:visible;pointer-events:none}[popover][data-toast-region]>[data-toast]{pointer-events:auto;position:static;inset:auto;min-width:16rem;max-width:min(24rem,92dvw);padding:.8rem 1rem;background:var(--fertig-el);color:var(--fertig-fg);border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);font-size:.95em;box-shadow:var(--fertig-up2),0 24px 44px -18px color-mix(in srgb,var(--fertig-sh) 28%,transparent)}@supports (position-area:block-end span-inline-end){[popover][data-toast-region]{position-area:none;inset:auto 1rem 1rem auto}}menu{list-style:none;padding:0;margin:1.1rem 0;border:1px solid var(--fertig-bd);border-radius:var(--fertig-rw);background:var(--fertig-el)}menu>li{padding:.55rem .85rem}menu>li + li{border-top:1px solid var(--fertig-bd)}[popover] menu{border:0;padding:0;margin:0;background:none}[popover] menu>li{padding:0}[popover] menu>li + li{border-top:0}nav menu{border:0;background:none;padding:0;margin-block:0 1.2rem}nav menu>li{padding:0}nav menu>li + li{border-top:0}nav menu :is(a,button){display:block;inline-size:100%;text-align:start;padding:.38rem .6rem;border:0;border-radius:var(--fertig-r);background:none;box-shadow:none;font:inherit;color:var(--fertig-fg);text-decoration:none;opacity:.72}nav menu :is(a,button):hover{background:var(--fertig-face);opacity:1}nav menu :is(a,button)[aria-current]{background:var(--fertig-face);color:var(--fertig-ac);font-weight:600;opacity:1}[data-layout=sidebar]{display:grid;gap:1.5rem;align-items:start}@media (width>= 56rem){[data-layout=sidebar]{grid-template-columns:15rem minmax(0,1fr)}[data-layout=sidebar]>:first-child{position:sticky;top:4.5rem}}[data-layout=sidebar]>*{min-width:0}[data-carousel]{display:flex;gap:1rem;overflow-x:auto;padding-bottom:.5rem;scroll-snap-type:x mandatory;overscroll-behavior-x:contain}[data-carousel]>*{scroll-snap-align:start;flex:0 0 min(20rem,82%)}.muted{color:var(--fertig-mut)}.center{text-align:center}.wide{max-width:80rem}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav.wide{max-width:none;--fertig-nw:80rem}.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(--fertig-bd);border-radius:var(--fertig-rw);padding:1.1rem;background:var(--fertig-el);box-shadow:var(--fertig-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:38rem}.hidden{display:none}.badge{border:1px solid var(--fertig-bd);border-radius:var(--fertig-rp);background:var(--fertig-face);padding:.1em .6em;font:700 var(--fertig-caps);color:var(--fertig-mut);text-transform:uppercase;letter-spacing:.07em}.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(--fertig-bd)}.card>footer{margin-top:auto;margin-bottom:-.25rem;padding-top:.7rem;color:var(--fertig-mut);font-size:.85em;border-top:1px solid var(--fertig-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(--fertig-rw) var(--fertig-rw) 0 0;box-shadow:none}.card[data-tone]{background:linear-gradient(var(--fertig-ac),var(--fertig-ac)) top / 100% 3px no-repeat,var(--fertig-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(--fertig-ac) 45%,var(--fertig-bd));box-shadow:var(--fertig-up2),0 16px 30px -16px color-mix(in srgb,var(--fertig-sh) 28%,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-block-start:4rem}:is(h1,h2,h3,h4):target{background:color-mix(in srgb,var(--fertig-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(--fertig-ac)}del{color:var(--fertig-mut)}address{font-style:normal;color:var(--fertig-mut)}hgroup>*{margin:0}hgroup>p{color:var(--fertig-mut)}output{font-weight:700}meter{width:100%;height:.5rem}optgroup{font-weight:700;color:var(--fertig-mut)}::file-selector-button{margin-inline-end:.8em}::file-selector-button:hover{background:var(--fertig-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(--fertig-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(--fertig-fg) 25%,transparent) transparent}@page{margin:2cm}@media print{:root{--fertig-bg:#fff;--fertig-el:#fff;--fertig-fg:#000;--fertig-bd:#999}:is(body,body>:where(#root,#app,#__next,[data-fertig]))>nav{display:none}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{--fertig-ac:light-dark(oklch(52% .21 258),oklch(76% .15 258))}}}:root{text-spacing-trim:trim-start;text-autospace:normal}@media (prefers-contrast:more){:root{--fertig-bd:light-dark(#00000059,#ffffff6b);--fertig-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(--fertig-dur-1) var(--fertig-ease),background-color var(--fertig-dur-1) var(--fertig-ease),border-color var(--fertig-dur-1) var(--fertig-ease),color var(--fertig-dur-1) var(--fertig-ease),translate .08s var(--fertig-ease-out)}:focus-visible{transition:none}}@supports not (color:light-dark(#000,#fff)){:root{--fertig-bg:#e6eaef;--fertig-el:#fafcfe;--fertig-face:#f3f6fa;--fertig-fg:#151b24;--fertig-mut:#525962;--fertig-bd:#151b2421;--fertig-tb:#f3f6fa;--fertig-ac:#2850de;--fertig-on-ac:#f7f8fb}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--fertig-bg:#090c12;--fertig-el:#141920;--fertig-face:#1c222a;--fertig-fg:#eaeff7;--fertig-mut:#9da5b1;--fertig-bd:#eaeff721;--fertig-tb:#1c222a;--fertig-ac:#90b5ff;--fertig-on-ac:#07071c}}[data-theme=dark]{--fertig-bg:#090c12;--fertig-el:#141920;--fertig-face:#1c222a;--fertig-fg:#eaeff7;--fertig-mut:#9da5b1;--fertig-bd:#eaeff721;--fertig-tb:#1c222a;--fertig-ac:#90b5ff;--fertig-on-ac:#07071c}}}@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}}}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fertig",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "A classless CSS stylesheet with no legacy in it: no polyfills, no classes. Link one file, write ordinary HTML, done — 8.
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "A classless CSS stylesheet with no legacy in it: no polyfills, no required classes. Link one file, write ordinary HTML, done — 8.7 KB gzipped, no build step, no dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fertig",
|
|
7
7
|
"fertig.css",
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"LICENSE"
|
|
60
60
|
],
|
|
61
61
|
"scripts": {
|
|
62
|
+
"test": "node --test",
|
|
62
63
|
"build": "node build.js",
|
|
63
64
|
"site": "eleventy --config=.eleventy.js",
|
|
64
65
|
"site:serve": "eleventy --config=.eleventy.js --serve",
|