@juwel-development/design-system 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/design-system.js +53 -13
- package/dist/index.css +1 -1
- package/dist/types/Display/Typography/Eyebrow/Eyebrow.d.ts +5 -2
- package/dist/types/Display/Typography/H1/H1.d.ts +5 -2
- package/dist/types/Display/Typography/H2/H2.d.ts +5 -2
- package/dist/types/Display/Typography/H3/H3.d.ts +5 -2
- package/dist/types/Display/Typography/H4/H4.d.ts +5 -2
- package/dist/types/Display/Typography/H5/H5.d.ts +5 -2
- package/dist/types/Display/Typography/H6/H6.d.ts +5 -2
- package/dist/types/Display/Typography/Note/Note.d.ts +5 -2
- package/dist/types/Display/Typography/P/P.d.ts +5 -2
- package/dist/types/Display/Typography/Prose/Prose.d.ts +6 -3
- package/dist/types/Theme/Palette.d.ts +9 -2
- package/package.json +1 -1
- package/src/Display/Typography/Eyebrow/Eyebrow.tsx +12 -2
- package/src/Display/Typography/H1/H1.tsx +12 -2
- package/src/Display/Typography/H2/H2.tsx +12 -2
- package/src/Display/Typography/H3/H3.tsx +12 -2
- package/src/Display/Typography/H4/H4.tsx +12 -2
- package/src/Display/Typography/H5/H5.tsx +12 -2
- package/src/Display/Typography/H6/H6.tsx +12 -2
- package/src/Display/Typography/Note/Note.tsx +12 -2
- package/src/Display/Typography/P/P.tsx +12 -2
- package/src/Display/Typography/Prose/Prose.tsx +13 -3
- package/src/Theme/Palette.ts +12 -5
- package/src/tokens.css +3 -3
- package/src/tokens.light.css +3 -3
package/README.md
CHANGED
|
@@ -74,6 +74,26 @@ on an ancestor re-points every token underneath it.
|
|
|
74
74
|
A product re-themes the whole system by supplying its own values for the same role
|
|
75
75
|
names, which is what lets one design system serve several brands.
|
|
76
76
|
|
|
77
|
+
### Typography status tones
|
|
78
|
+
|
|
79
|
+
Typography whose colour is selectable accepts the general `success`, `warning`, `error`, and
|
|
80
|
+
`info` status tones alongside `foreground` and `muted`. This includes `H1`–`H6`, `Eyebrow`, `P`,
|
|
81
|
+
`Note`, and `Prose.Body`; fixed-colour members such as `Prose.Lede` and `Prose.Tail` remain fixed.
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
<P color={'warning'}>Warning: patience is low and the offer gap is wide.</P>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
A status tone reinforces status that the content already communicates: never use colour as the
|
|
88
|
+
only cue. Selecting one changes only the semantic text colour and does not add an ARIA role, live
|
|
89
|
+
region, icon, or wording. The caller remains responsible for announcement behavior when a changing
|
|
90
|
+
status needs it.
|
|
91
|
+
|
|
92
|
+
All four palette roles must remain at least 4.5:1 against `surface` in every theme because they can
|
|
93
|
+
paint normal-size and small text. They remain general roles rather than typography-only tokens, so
|
|
94
|
+
constraints from other carriers also apply; `error`, for example, remains Meter's depletion
|
|
95
|
+
endpoint and must keep that complete path at least 3:1 against `meterTrack`.
|
|
96
|
+
|
|
77
97
|
### Single-theme builds
|
|
78
98
|
|
|
79
99
|
`styles.css` and `tokens.css` carry both colour sets, so a product that ships only one
|
package/dist/design-system.js
CHANGED
|
@@ -338,7 +338,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
338
338
|
}, F = p("font-secondary text-label tracking-label font-medium", {
|
|
339
339
|
variants: { color: {
|
|
340
340
|
foreground: "text-foreground",
|
|
341
|
-
muted: "text-muted"
|
|
341
|
+
muted: "text-muted",
|
|
342
|
+
success: "text-success",
|
|
343
|
+
warning: "text-warning",
|
|
344
|
+
error: "text-error",
|
|
345
|
+
info: "text-info"
|
|
342
346
|
} },
|
|
343
347
|
defaultVariants: { color: "muted" }
|
|
344
348
|
}), I = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("p", {
|
|
@@ -348,7 +352,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
348
352
|
}), L = p("font-primary text-display leading-display tracking-optical max-w-[var(--measure-display)]", {
|
|
349
353
|
variants: { color: {
|
|
350
354
|
foreground: "text-foreground",
|
|
351
|
-
muted: "text-muted"
|
|
355
|
+
muted: "text-muted",
|
|
356
|
+
success: "text-success",
|
|
357
|
+
warning: "text-warning",
|
|
358
|
+
error: "text-error",
|
|
359
|
+
info: "text-info"
|
|
352
360
|
} },
|
|
353
361
|
defaultVariants: { color: "foreground" }
|
|
354
362
|
}), R = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("h1", {
|
|
@@ -358,7 +366,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
358
366
|
}), z = p("font-primary text-title leading-title tracking-optical", {
|
|
359
367
|
variants: { color: {
|
|
360
368
|
foreground: "text-foreground",
|
|
361
|
-
muted: "text-muted"
|
|
369
|
+
muted: "text-muted",
|
|
370
|
+
success: "text-success",
|
|
371
|
+
warning: "text-warning",
|
|
372
|
+
error: "text-error",
|
|
373
|
+
info: "text-info"
|
|
362
374
|
} },
|
|
363
375
|
defaultVariants: { color: "foreground" }
|
|
364
376
|
}), B = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("h2", {
|
|
@@ -368,7 +380,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
368
380
|
}), V = p("font-primary text-subtitle leading-subtitle", {
|
|
369
381
|
variants: { color: {
|
|
370
382
|
foreground: "text-foreground",
|
|
371
|
-
muted: "text-muted"
|
|
383
|
+
muted: "text-muted",
|
|
384
|
+
success: "text-success",
|
|
385
|
+
warning: "text-warning",
|
|
386
|
+
error: "text-error",
|
|
387
|
+
info: "text-info"
|
|
372
388
|
} },
|
|
373
389
|
defaultVariants: { color: "foreground" }
|
|
374
390
|
}), H = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("h3", {
|
|
@@ -378,7 +394,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
378
394
|
}), U = p("font-primary text-body leading-body font-bold", {
|
|
379
395
|
variants: { color: {
|
|
380
396
|
foreground: "text-foreground",
|
|
381
|
-
muted: "text-muted"
|
|
397
|
+
muted: "text-muted",
|
|
398
|
+
success: "text-success",
|
|
399
|
+
warning: "text-warning",
|
|
400
|
+
error: "text-error",
|
|
401
|
+
info: "text-info"
|
|
382
402
|
} },
|
|
383
403
|
defaultVariants: { color: "foreground" }
|
|
384
404
|
}), de = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("h4", {
|
|
@@ -388,7 +408,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
388
408
|
}), fe = p("font-primary text-body leading-body font-semibold", {
|
|
389
409
|
variants: { color: {
|
|
390
410
|
foreground: "text-foreground",
|
|
391
|
-
muted: "text-muted"
|
|
411
|
+
muted: "text-muted",
|
|
412
|
+
success: "text-success",
|
|
413
|
+
warning: "text-warning",
|
|
414
|
+
error: "text-error",
|
|
415
|
+
info: "text-info"
|
|
392
416
|
} },
|
|
393
417
|
defaultVariants: { color: "foreground" }
|
|
394
418
|
}), pe = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("h5", {
|
|
@@ -398,7 +422,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
398
422
|
}), me = p("font-primary text-body leading-body font-medium", {
|
|
399
423
|
variants: { color: {
|
|
400
424
|
foreground: "text-foreground",
|
|
401
|
-
muted: "text-muted"
|
|
425
|
+
muted: "text-muted",
|
|
426
|
+
success: "text-success",
|
|
427
|
+
warning: "text-warning",
|
|
428
|
+
error: "text-error",
|
|
429
|
+
info: "text-info"
|
|
402
430
|
} },
|
|
403
431
|
defaultVariants: { color: "foreground" }
|
|
404
432
|
}), he = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("h6", {
|
|
@@ -408,7 +436,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
408
436
|
}), ge = p("font-secondary text-small", {
|
|
409
437
|
variants: { color: {
|
|
410
438
|
foreground: "text-foreground",
|
|
411
|
-
muted: "text-muted"
|
|
439
|
+
muted: "text-muted",
|
|
440
|
+
success: "text-success",
|
|
441
|
+
warning: "text-warning",
|
|
442
|
+
error: "text-error",
|
|
443
|
+
info: "text-info"
|
|
412
444
|
} },
|
|
413
445
|
defaultVariants: { color: "foreground" }
|
|
414
446
|
}), _e = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("p", {
|
|
@@ -418,7 +450,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
418
450
|
}), ve = p("font-primary text-body leading-body", {
|
|
419
451
|
variants: { color: {
|
|
420
452
|
foreground: "text-foreground",
|
|
421
|
-
muted: "text-muted"
|
|
453
|
+
muted: "text-muted",
|
|
454
|
+
success: "text-success",
|
|
455
|
+
warning: "text-warning",
|
|
456
|
+
error: "text-error",
|
|
457
|
+
info: "text-info"
|
|
422
458
|
} },
|
|
423
459
|
defaultVariants: { color: "foreground" }
|
|
424
460
|
}), ye = ({ children: t, color: n, testId: r }) => /* @__PURE__ */ e("p", {
|
|
@@ -428,7 +464,11 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
428
464
|
}), be = p("flex max-w-[var(--measure)] flex-col gap-[var(--space-stack)]"), xe = p("font-primary text-lede leading-lede text-foreground"), Se = p("font-primary text-body leading-body", {
|
|
429
465
|
variants: { color: {
|
|
430
466
|
foreground: "text-foreground",
|
|
431
|
-
muted: "text-muted"
|
|
467
|
+
muted: "text-muted",
|
|
468
|
+
success: "text-success",
|
|
469
|
+
warning: "text-warning",
|
|
470
|
+
error: "text-error",
|
|
471
|
+
info: "text-info"
|
|
432
472
|
} },
|
|
433
473
|
defaultVariants: { color: "foreground" }
|
|
434
474
|
}), Ce = p("font-primary text-small text-muted"), we = {
|
|
@@ -932,10 +972,10 @@ var d = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, f = u, p = (e
|
|
|
932
972
|
disabledHover: "#64748b",
|
|
933
973
|
focusRing: "#475569",
|
|
934
974
|
link: "#2563eb",
|
|
935
|
-
success: "#
|
|
936
|
-
warning: "#
|
|
975
|
+
success: "#047857",
|
|
976
|
+
warning: "#b45309",
|
|
937
977
|
error: "#d63384",
|
|
938
|
-
info: "#
|
|
978
|
+
info: "#0e7490"
|
|
939
979
|
}, pt = {
|
|
940
980
|
surface: "#0f172a",
|
|
941
981
|
foreground: "#f8fafc",
|
package/dist/index.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-slate-200:oklch(92.9% .013 255.508);--color-slate-900:oklch(20.8% .042 265.755);--color-stone-50:oklch(98.5% .001 106.423);--color-white:#fff;--spacing:.25rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface:var(--color-surface);--color-foreground:var(--color-foreground);--color-muted:var(--color-muted);--color-border:var(--color-border);--color-control-border:var(--color-control-border);--color-rule:var(--color-rule);--color-backing:var(--color-backing);--color-meter-fill:var(--color-meter-fill);--color-meter-track:var(--color-meter-track);--color-primary:var(--color-primary);--color-primary-hover:var(--color-primary-hover);--color-primary-foreground:var(--color-primary-foreground);--color-secondary:var(--color-secondary);--color-secondary-hover:var(--color-secondary-hover);--color-secondary-foreground:var(--color-secondary-foreground);--color-disabled:var(--color-disabled);--color-disabled-hover:var(--color-disabled-hover);--color-focus-ring:var(--color-focus-ring);--color-link:var(--color-link);--color-success:var(--color-success);--color-warning:var(--color-warning);--color-error:var(--color-error);--color-info:var(--color-info);--font-primary:inherit;--font-secondary:inherit;--text-display:clamp(3rem, 7vw, 6rem);--leading-display:1.05;--text-title:clamp(2.25rem, 5vw, 4.25rem);--leading-title:1.1;--text-subtitle:clamp(1.5rem, 3vw, 2.25rem);--leading-subtitle:1.2;--text-lede:1.25rem;--leading-lede:1.4;--text-body:1.0625rem;--leading-body:1.6;--text-small:.9375rem;--text-label:.8125rem;--leading-label:1.5;--tracking-label:.14em;--tracking-optical:-.02em;--aspect-portrait:4 / 5;--aspect-square:1 / 1;--aspect-landscape:3 / 2;--aspect-wide:16 / 9}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.isolate{isolation:isolate}.z-10{z-index:10}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-\[calc\(-1\*\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\)\]{margin:calc(-1 * (var(--focus-ring-width) + var(--focus-ring-offset)))}.mx-auto{margin-inline:auto}.my-auto{margin-block:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-landscape{aspect-ratio:var(--aspect-landscape)}.aspect-portrait{aspect-ratio:var(--aspect-portrait)}.aspect-square{aspect-ratio:var(--aspect-square)}.aspect-wide{aspect-ratio:var(--aspect-wide)}.h-12{height:calc(var(--spacing) * 12)}.h-\[var\(--meter-track-thickness\)\]{height:var(--meter-track-thickness)}.h-\[var\(--slider-thumb-size\)\]{height:var(--slider-thumb-size)}.h-full{height:100%}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-\[calc\(var\(--text-label\)\*var\(--leading-label\)\)\]{min-height:calc(var(--text-label) * var(--leading-label))}.min-h-\[var\(--cover-height\)\]{min-height:var(--cover-height)}.min-h-\[var\(--fold-height\)\]{min-height:var(--fold-height)}.w-\[360px\]{width:360px}.w-\[calc\(var\(--meter-level\)\*100\%\)\]{width:calc(var(--meter-level) * 100%)}.w-\[var\(--measure-action\)\]{width:var(--measure-action)}.w-full{width:100%}.\[max-width\:var\(--measure-display\)\]{max-width:var(--measure-display)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[var\(--measure\)\]{max-width:var(--measure)}.max-w-\[var\(--measure-display\)\]{max-width:var(--measure-display)}.max-w-\[var\(--measure-wide\)\]{max-width:var(--measure-wide)}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-42{min-width:calc(var(--spacing) * 42)}.min-w-\[var\(--control-min-width\)\]{min-width:var(--control-min-width)}.min-w-\[var\(--standing-min-width\)\]{min-width:var(--standing-min-width)}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.scroll-p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]{scroll-padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}.list-none{list-style-type:none}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-\[var\(--space-region\)\]{gap:var(--space-region)}.gap-\[var\(--space-stack\)\]{gap:var(--space-stack)}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-\[var\(--space-region\)\]{column-gap:var(--space-region)}.gap-x-\[var\(--space-stack\)\]{column-gap:var(--space-stack)}.gap-y-\[var\(--space-stack\)\]{row-gap:var(--space-stack)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-\[var\(--radius-control\)\]{border-radius:var(--radius-control)}.rounded-\[var\(--radius-…\)\]{border-radius:var(--radius-…)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-\[length\:var\(--tab-marker-thickness\)\]{border-bottom-style:var(--tw-border-style);border-bottom-width:var(--tab-marker-thickness)}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:var(--color-border)}.border-control-border{border-color:var(--color-control-border)}.border-primary{border-color:var(--color-primary)}.border-rule{border-color:var(--color-rule)}.border-slate-200{border-color:var(--color-slate-200)}.border-transparent{border-color:#0000}.bg-\[color-mix\(in_oklab\,var\(--color-meter-fill\)_calc\(var\(--meter-level\)\*100\%\)\,var\(--color-error\)\)\]{background-color:var(--color-meter-fill)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-meter-fill\)_calc\(var\(--meter-level\)\*100\%\)\,var\(--color-error\)\)\]{background-color:color-mix(in oklab,var(--color-meter-fill) calc(var(--meter-level) * 100%),var(--color-error))}}.bg-backing{background-color:var(--color-backing)}.bg-meter-fill{background-color:var(--color-meter-fill)}.bg-meter-track{background-color:var(--color-meter-track)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-stone-50{background-color:var(--color-stone-50)}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.object-cover{object-fit:cover}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-right{object-position:right}.object-top{object-position:top}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]{padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[var\(--gutter\)\]{padding-inline:var(--gutter)}.px-\[var\(--tab-inset-inline\)\]{padding-inline:var(--tab-inset-inline)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-\[var\(--space-band\)\]{padding-block:var(--space-band)}.py-\[var\(--space-collection-item\)\]{padding-block:var(--space-collection-item)}.py-\[var\(--space-region\)\]{padding-block:var(--space-region)}.py-\[var\(--tab-inset-block\)\]{padding-block:var(--tab-inset-block)}.pt-1{padding-top:var(--spacing)}.pb-1{padding-bottom:var(--spacing)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.font-mono{font-family:var(--font-mono)}.font-primary{font-family:var(--font-primary)}.font-sans{font-family:var(--font-sans)}.font-secondary{font-family:var(--font-secondary)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-body{font-size:var(--text-body)}.text-display{font-size:var(--text-display)}.text-label{font-size:var(--text-label)}.text-lede{font-size:var(--text-lede)}.text-small{font-size:var(--text-small)}.text-subtitle{font-size:var(--text-subtitle)}.text-title{font-size:var(--text-title)}.leading-body{--tw-leading:var(--leading-body);line-height:var(--leading-body)}.leading-display{--tw-leading:var(--leading-display);line-height:var(--leading-display)}.leading-label{--tw-leading:var(--leading-label);line-height:var(--leading-label)}.leading-lede{--tw-leading:var(--leading-lede);line-height:var(--leading-lede)}.leading-subtitle{--tw-leading:var(--leading-subtitle);line-height:var(--leading-subtitle)}.leading-title{--tw-leading:var(--leading-title);line-height:var(--leading-title)}.font-\[500\]{--tw-font-weight:500;font-weight:500}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-label{--tw-tracking:var(--tracking-label);letter-spacing:var(--tracking-label)}.tracking-optical{--tw-tracking:var(--tracking-optical);letter-spacing:var(--tracking-optical)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-nowrap{text-wrap:nowrap}.text-\[var\(--text-small\)\]{color:var(--text-small)}.text-error{color:var(--color-error)}.text-foreground{color:var(--color-foreground)}.text-inherit{color:inherit}.text-link{color:var(--color-link)}.text-muted{color:var(--color-muted)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-slate-900{color:var(--color-slate-900)}.text-success{color:var(--color-success)}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-\[length\:var\(--underline-thickness\)\]{text-decoration-thickness:var(--underline-thickness)}.underline-offset-\[var\(--underline-offset\)\]{text-underline-offset:var(--underline-offset)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-offset-\[var\(--focus-ring-offset\)\]{outline-offset:var(--focus-ring-offset)}.outline-focus-ring{outline-color:var(--color-focus-ring)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-\[var\(--motion-duration-color\)\]{--tw-duration:var(--motion-duration-color);transition-duration:var(--motion-duration-color)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.before\:mt-\[0\.35em\]:before{content:var(--tw-content);margin-top:.35em}.before\:size-\[calc\(var\(--tick-length\)\*0\.7\)\]:before{content:var(--tw-content);width:calc(var(--tick-length) * .7);height:calc(var(--tick-length) * .7)}.before\:shrink-0:before{content:var(--tw-content);flex-shrink:0}.before\:rotate-45:before{content:var(--tw-content);rotate:45deg}.before\:bg-\[var\(--color-rule\)\]:before{content:var(--tw-content);background-color:var(--color-rule)}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.before\:\[border-right\:var\(--tick-thickness\)_solid_var\(--color-rule\)\]:before{content:var(--tw-content);border-right:var(--tick-thickness) solid var(--color-rule)}.before\:\[border-top\:var\(--tick-thickness\)_solid_var\(--color-rule\)\]:before{content:var(--tw-content);border-top:var(--tick-thickness) solid var(--color-rule)}.first\:border-t:first-child{border-top-style:var(--tw-border-style);border-top-width:1px}.first\:pl-0:first-child{padding-left:0}.last\:pr-0:last-child{padding-right:0}@media (hover:hover){.hover\:border-muted:hover{border-color:var(--color-muted)}.hover\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\:bg-secondary-hover:hover{background-color:var(--color-secondary-hover)}.hover\:text-sm:hover{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-\[length\:var\(--underline-thickness\)\]:hover{text-decoration-thickness:var(--underline-thickness)}.hover\:decoration-\[length\:var\(--underline-thickness-hover\)\]:hover{text-decoration-thickness:var(--underline-thickness-hover)}.hover\:underline-offset-\[var\(--underline-offset\)\]:hover{text-underline-offset:var(--underline-offset)}.hover\:opacity-90:hover{opacity:.9}}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-\[length\:var\(--focus-ring-width\)\]:focus-visible{outline-style:var(--tw-outline-style);outline-width:var(--focus-ring-width)}.focus-visible\:outline-\[length\:…\]:focus-visible{outline-style:var(--tw-outline-style);outline-width:…}.focus-visible\:outline-focus-ring:focus-visible{outline-color:var(--color-focus-ring)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-disabled:disabled{border-color:var(--color-disabled)}.disabled\:bg-disabled:disabled{background-color:var(--color-disabled)}.disabled\:text-muted:disabled{color:var(--color-muted)}@media (hover:hover){.disabled\:hover\:bg-disabled-hover:disabled:hover{background-color:var(--color-disabled-hover)}}.aria-selected\:border-foreground[aria-selected=true]{border-color:var(--color-foreground)}.aria-selected\:text-foreground[aria-selected=true]{color:var(--color-foreground)}.aria-\[invalid\=true\]\:border-error[aria-invalid=true]{border-color:var(--color-error)}@media (width>=40rem){.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}}@media (width>=48rem){.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media (width>=64rem){.lg\:sticky{position:sticky}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:max-w-\[var\(--measure-display\)\]{max-width:var(--measure-display)}.lg\:grid-cols-\[10rem_minmax\(0\,1fr\)\]{grid-template-columns:10rem minmax(0,1fr)}.lg\:grid-cols-\[12rem_minmax\(0\,1fr\)\]{grid-template-columns:12rem minmax(0,1fr)}.lg\:grid-cols-\[16rem_minmax\(0\,1fr\)\]{grid-template-columns:16rem minmax(0,1fr)}.lg\:flex-row{flex-direction:row}.lg\:items-baseline{align-items:baseline}.lg\:items-start{align-items:flex-start}.lg\:gap-x-12{column-gap:calc(var(--spacing) * 12)}}.\[\&_\[aria-current\=page\]\]\:text-foreground [aria-current=page]{color:var(--color-foreground)}.\[\&_caption\]\:pb-3 caption{padding-bottom:calc(var(--spacing) * 3)}.\[\&_caption\]\:text-left caption{text-align:left}.\[\&_caption\]\:font-secondary caption{font-family:var(--font-secondary)}.\[\&_caption\]\:text-label caption{font-size:var(--text-label)}.\[\&_caption\]\:tracking-label caption{--tw-tracking:var(--tracking-label);letter-spacing:var(--tracking-label)}.\[\&_caption\]\:text-muted caption{color:var(--color-muted)}.\[\&\+li\]\:border-t+li{border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&\+li\]\:border-solid+li{--tw-border-style:solid;border-style:solid}.\[\&\+li\]\:border-border+li{border-color:var(--color-border)}.\[\&\:\:-moz-range-thumb\]\:size-\[var\(--slider-thumb-size\)\]::-moz-range-thumb{width:var(--slider-thumb-size);height:var(--slider-thumb-size)}.\[\&\:\:-moz-range-thumb\]\:rounded-\[var\(--radius-control\)\]::-moz-range-thumb{border-radius:var(--radius-control)}.\[\&\:\:-moz-range-thumb\]\:border-none::-moz-range-thumb{--tw-border-style:none;border-style:none}.\[\&\:\:-moz-range-thumb\]\:bg-foreground::-moz-range-thumb{background-color:var(--color-foreground)}.\[\&\:\:-moz-range-track\]\:h-\[var\(--slider-track-thickness\)\]::-moz-range-track{height:var(--slider-track-thickness)}.\[\&\:\:-moz-range-track\]\:rounded-\[var\(--radius-control\)\]::-moz-range-track{border-radius:var(--radius-control)}.\[\&\:\:-moz-range-track\]\:bg-control-border::-moz-range-track{background-color:var(--color-control-border)}.\[\&\:\:-webkit-slider-runnable-track\]\:h-\[var\(--slider-track-thickness\)\]::-webkit-slider-runnable-track{height:var(--slider-track-thickness)}.\[\&\:\:-webkit-slider-runnable-track\]\:rounded-\[var\(--radius-control\)\]::-webkit-slider-runnable-track{border-radius:var(--radius-control)}.\[\&\:\:-webkit-slider-runnable-track\]\:bg-control-border::-webkit-slider-runnable-track{background-color:var(--color-control-border)}.\[\&\:\:-webkit-slider-thumb\]\:mt-\[calc\(\(var\(--slider-track-thickness\)-var\(--slider-thumb-size\)\)\/2\)\]::-webkit-slider-thumb{margin-top:calc((var(--slider-track-thickness) - var(--slider-thumb-size)) / 2)}.\[\&\:\:-webkit-slider-thumb\]\:size-\[var\(--slider-thumb-size\)\]::-webkit-slider-thumb{width:var(--slider-thumb-size);height:var(--slider-thumb-size)}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-\[var\(--radius-control\)\]::-webkit-slider-thumb{border-radius:var(--radius-control)}.\[\&\:\:-webkit-slider-thumb\]\:bg-foreground::-webkit-slider-thumb{background-color:var(--color-foreground)}.\[\&\:disabled\:\:-moz-range-thumb\]\:bg-disabled:disabled::-moz-range-thumb{background-color:var(--color-disabled)}.\[\&\:disabled\:\:-moz-range-track\]\:bg-disabled:disabled::-moz-range-track{background-color:var(--color-disabled)}.\[\&\:disabled\:\:-webkit-slider-runnable-track\]\:bg-disabled:disabled::-webkit-slider-runnable-track{background-color:var(--color-disabled)}.\[\&\:disabled\:\:-webkit-slider-thumb\]\:bg-disabled:disabled::-webkit-slider-thumb{background-color:var(--color-disabled)}.\[\&\:not\(\:first-child\)\]\:mt-\[var\(--space-stack\)\]:not(:first-child){margin-top:var(--space-stack)}.\[\&\:not\(\:first-child\)\]\:border-t:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&\:not\(\:first-child\)\]\:border-solid:not(:first-child){--tw-border-style:solid;border-style:solid}.\[\&\:not\(\:first-child\)\]\:border-border:not(:first-child){border-color:var(--color-border)}.\[\&\:not\(\:first-child\)\]\:pt-\[var\(--space-stack\)\]:not(:first-child){padding-top:var(--space-stack)}.\[\&\:not\(\[data-notes\]\)\]\:overflow-x-auto:not([data-notes]){overflow-x:auto}.\[\&\:user-invalid\]\:border-error:user-invalid{border-color:var(--color-error)}@media (width>=64rem){.lg\:\[\&\>dd\]\:col-start-2>dd{grid-column-start:2}.lg\:\[\&\>dd\]\:row-start-1>dd{grid-row-start:1}}.\[\&\>div\:first-child\]\:border-b>div:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>div\:first-child\]\:border-solid>div:first-child{--tw-border-style:solid;border-style:solid}.\[\&\>div\:first-child\]\:border-border>div:first-child{border-color:var(--color-border)}.\[\&\>div\:first-child\]\:pb-\[var\(--space-stack\)\]>div:first-child{padding-bottom:var(--space-stack)}@media (width>=64rem){.lg\:\[\&\>div\:first-child\]\:border-r>div:first-child{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:\[\&\>div\:first-child\]\:border-b-0>div:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.lg\:\[\&\>div\:first-child\]\:pr-\[var\(--space-stack\)\]>div:first-child{padding-right:var(--space-stack)}.lg\:\[\&\>div\:first-child\]\:pb-0>div:first-child{padding-bottom:0}}.\[\&\>div\:first-child\>nav\]\:p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]>div:first-child>nav{padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}@media (width>=64rem){.lg\:\[\&\>div\:first-child\>nav\]\:sticky>div:first-child>nav{position:sticky}.lg\:\[\&\>div\:first-child\>nav\]\:top-0>div:first-child>nav{top:0}.lg\:\[\&\>div\:first-child\>nav\]\:max-h-\[min\(100dvh\,var\(--sidebar-scrollport-height\,100dvh\)\)\]>div:first-child>nav{max-height:min(100dvh, var(--sidebar-scrollport-height,100dvh))}.lg\:\[\&\>div\:first-child\>nav\]\:scroll-p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]>div:first-child>nav{scroll-padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}.lg\:\[\&\>div\:first-child\>nav\]\:overflow-y-auto>div:first-child>nav{overflow-y:auto}}.\[\&\>div\:first-child\>nav\>ul\]\:flex>div:first-child>nav>ul{display:flex}.\[\&\>div\:first-child\>nav\>ul\]\:flex-col>div:first-child>nav>ul{flex-direction:column}.\[\&\>div\:first-child\>nav\>ul\]\:gap-\[var\(--space-stack\)\]>div:first-child>nav>ul{gap:var(--space-stack)}@media (width>=64rem){.lg\:\[\&\>dt\]\:col-start-1>dt{grid-column-start:1}}.\[\&\>table\]\:w-full>table{width:100%}.\[\&\>table\]\:border-collapse>table{border-collapse:collapse}.\[\&\>table\]\:text-left>table{text-align:left}.\[\&\>table\>\*\:nth-child\(2\)\>tr\:first-child\]\:border-rule>table>:nth-child(2)>tr:first-child{border-color:var(--color-rule)}@media not all and (width>=48rem){.\[\&\[data-notes\=content\]_tbody\]\:max-md\:block[data-notes=content] tbody,.\[\&\[data-notes\=content\]_td\]\:max-md\:block[data-notes=content] td,.\[\&\[data-notes\=content\]_tfoot\]\:max-md\:block[data-notes=content] tfoot,.\[\&\[data-notes\=content\]_th\]\:max-md\:block[data-notes=content] th,.\[\&\[data-notes\=content\]_thead\]\:max-md\:block[data-notes=content] thead,.\[\&\[data-notes\=content\]_tr\]\:max-md\:block[data-notes=content] tr,.\[\&\[data-notes\=content\]\>table\]\:max-md\:block[data-notes=content]>table{display:block}.\[\&\[data-notes\=supplementary\]_\[data-variant\=note\]\]\:max-md\:hidden[data-notes=supplementary] [data-variant=note]{display:none}}[data-section]+.\[\[data-section\]\+\&\]\:z-10{z-index:10}[data-section]+.\[\[data-section\]\+\&\]\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}[data-section]+.\[\[data-section\]\+\&\]\:border-solid{--tw-border-style:solid;border-style:solid}[data-section]+.\[\[data-section\]\+\&\]\:border-rule{border-color:var(--color-rule)}}:root{--color-surface:#fff;--color-foreground:#0f172a;--color-muted:#64748b;--color-border:#e2e8f0;--color-control-border:#64748b;--color-rule:#808fa3;--color-backing:#f1f5f9;--color-meter-fill:#0f172a;--color-meter-track:#e2e8f0;--color-primary:#7c3aed;--color-primary-hover:#6d28d9;--color-primary-foreground:#f8fafc;--color-secondary:#0369a1;--color-secondary-hover:#075985;--color-secondary-foreground:#f8fafc;--color-disabled:#94a3b8;--color-disabled-hover:#64748b;--color-focus-ring:var(--color-ring,#475569);--color-link:#2563eb;--color-success:#10b981;--color-warning:#f59e0b;--color-error:#d63384;--color-info:#06b6d4}.dark{--color-surface:#0f172a;--color-foreground:#f8fafc;--color-muted:#94a3b8;--color-border:#334155;--color-control-border:#94a3b8;--color-rule:#5b6a80;--color-backing:#1e293b;--color-meter-fill:#f8fafc;--color-meter-track:#334155;--color-primary:#8b5cf6;--color-primary-hover:#a78bfa;--color-primary-foreground:#020617;--color-secondary:#0284c7;--color-secondary-hover:#0ea5e9;--color-secondary-foreground:#020617;--color-disabled:#475569;--color-disabled-hover:#334155;--color-focus-ring:var(--color-ring,#cbd5e1);--color-link:#60a5fa;--color-success:#34d399;--color-warning:#fbbf24;--color-error:#f48fb1;--color-info:#22d3ee}:root{--motion-duration-color:.15s}@media (prefers-reduced-motion:reduce){:root{--motion-duration-color:0s}}:root{--focus-ring-width:3px;--focus-ring-offset:2px;--radius-control:.5rem;--control-min-width:10.5rem;--standing-min-width:7.5rem;--underline-offset:.18em;--underline-thickness:1px;--underline-thickness-hover:2px;--measure:66ch;--measure-display:36ch;--measure-wide:72ch;--measure-action:20rem;--space-stack:.5em;--space-region:1.5em;--space-band:4em;--space-collection-item:1em;--gutter:clamp(1.5rem, 5vw, 4rem);--fold-height:min(70vh, 40rem);--cover-height:100svh;--tick-length:.9rem;--tick-thickness:1px;--tab-marker-thickness:2px;--tab-inset-inline:1em;--tab-inset-block:.5em;--slider-track-thickness:.25rem;--slider-thumb-size:1.5rem;--meter-track-thickness:.5rem}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-slate-200:oklch(92.9% .013 255.508);--color-slate-900:oklch(20.8% .042 265.755);--color-stone-50:oklch(98.5% .001 106.423);--color-white:#fff;--spacing:.25rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface:var(--color-surface);--color-foreground:var(--color-foreground);--color-muted:var(--color-muted);--color-border:var(--color-border);--color-control-border:var(--color-control-border);--color-rule:var(--color-rule);--color-backing:var(--color-backing);--color-meter-fill:var(--color-meter-fill);--color-meter-track:var(--color-meter-track);--color-primary:var(--color-primary);--color-primary-hover:var(--color-primary-hover);--color-primary-foreground:var(--color-primary-foreground);--color-secondary:var(--color-secondary);--color-secondary-hover:var(--color-secondary-hover);--color-secondary-foreground:var(--color-secondary-foreground);--color-disabled:var(--color-disabled);--color-disabled-hover:var(--color-disabled-hover);--color-focus-ring:var(--color-focus-ring);--color-link:var(--color-link);--color-success:var(--color-success);--color-warning:var(--color-warning);--color-error:var(--color-error);--color-info:var(--color-info);--font-primary:inherit;--font-secondary:inherit;--text-display:clamp(3rem, 7vw, 6rem);--leading-display:1.05;--text-title:clamp(2.25rem, 5vw, 4.25rem);--leading-title:1.1;--text-subtitle:clamp(1.5rem, 3vw, 2.25rem);--leading-subtitle:1.2;--text-lede:1.25rem;--leading-lede:1.4;--text-body:1.0625rem;--leading-body:1.6;--text-small:.9375rem;--text-label:.8125rem;--leading-label:1.5;--tracking-label:.14em;--tracking-optical:-.02em;--aspect-portrait:4 / 5;--aspect-square:1 / 1;--aspect-landscape:3 / 2;--aspect-wide:16 / 9}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.isolate{isolation:isolate}.z-10{z-index:10}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-\[calc\(-1\*\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\)\]{margin:calc(-1 * (var(--focus-ring-width) + var(--focus-ring-offset)))}.mx-auto{margin-inline:auto}.my-auto{margin-block:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-landscape{aspect-ratio:var(--aspect-landscape)}.aspect-portrait{aspect-ratio:var(--aspect-portrait)}.aspect-square{aspect-ratio:var(--aspect-square)}.aspect-wide{aspect-ratio:var(--aspect-wide)}.h-12{height:calc(var(--spacing) * 12)}.h-\[var\(--meter-track-thickness\)\]{height:var(--meter-track-thickness)}.h-\[var\(--slider-thumb-size\)\]{height:var(--slider-thumb-size)}.h-full{height:100%}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-\[calc\(var\(--text-label\)\*var\(--leading-label\)\)\]{min-height:calc(var(--text-label) * var(--leading-label))}.min-h-\[var\(--cover-height\)\]{min-height:var(--cover-height)}.min-h-\[var\(--fold-height\)\]{min-height:var(--fold-height)}.w-\[360px\]{width:360px}.w-\[calc\(var\(--meter-level\)\*100\%\)\]{width:calc(var(--meter-level) * 100%)}.w-\[var\(--measure-action\)\]{width:var(--measure-action)}.w-full{width:100%}.\[max-width\:var\(--measure-display\)\]{max-width:var(--measure-display)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[var\(--measure\)\]{max-width:var(--measure)}.max-w-\[var\(--measure-display\)\]{max-width:var(--measure-display)}.max-w-\[var\(--measure-wide\)\]{max-width:var(--measure-wide)}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-42{min-width:calc(var(--spacing) * 42)}.min-w-\[var\(--control-min-width\)\]{min-width:var(--control-min-width)}.min-w-\[var\(--standing-min-width\)\]{min-width:var(--standing-min-width)}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.scroll-p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]{scroll-padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}.list-none{list-style-type:none}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-\[var\(--space-region\)\]{gap:var(--space-region)}.gap-\[var\(--space-stack\)\]{gap:var(--space-stack)}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-\[var\(--space-region\)\]{column-gap:var(--space-region)}.gap-x-\[var\(--space-stack\)\]{column-gap:var(--space-stack)}.gap-y-\[var\(--space-stack\)\]{row-gap:var(--space-stack)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-\[var\(--radius-control\)\]{border-radius:var(--radius-control)}.rounded-\[var\(--radius-…\)\]{border-radius:var(--radius-…)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-\[length\:var\(--tab-marker-thickness\)\]{border-bottom-style:var(--tw-border-style);border-bottom-width:var(--tab-marker-thickness)}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:var(--color-border)}.border-control-border{border-color:var(--color-control-border)}.border-primary{border-color:var(--color-primary)}.border-rule{border-color:var(--color-rule)}.border-slate-200{border-color:var(--color-slate-200)}.border-transparent{border-color:#0000}.bg-\[color-mix\(in_oklab\,var\(--color-meter-fill\)_calc\(var\(--meter-level\)\*100\%\)\,var\(--color-error\)\)\]{background-color:var(--color-meter-fill)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--color-meter-fill\)_calc\(var\(--meter-level\)\*100\%\)\,var\(--color-error\)\)\]{background-color:color-mix(in oklab,var(--color-meter-fill) calc(var(--meter-level) * 100%),var(--color-error))}}.bg-backing{background-color:var(--color-backing)}.bg-meter-fill{background-color:var(--color-meter-fill)}.bg-meter-track{background-color:var(--color-meter-track)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-stone-50{background-color:var(--color-stone-50)}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.object-cover{object-fit:cover}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-right{object-position:right}.object-top{object-position:top}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]{padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[var\(--gutter\)\]{padding-inline:var(--gutter)}.px-\[var\(--tab-inset-inline\)\]{padding-inline:var(--tab-inset-inline)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-\[var\(--space-band\)\]{padding-block:var(--space-band)}.py-\[var\(--space-collection-item\)\]{padding-block:var(--space-collection-item)}.py-\[var\(--space-region\)\]{padding-block:var(--space-region)}.py-\[var\(--tab-inset-block\)\]{padding-block:var(--tab-inset-block)}.pt-1{padding-top:var(--spacing)}.pb-1{padding-bottom:var(--spacing)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.font-mono{font-family:var(--font-mono)}.font-primary{font-family:var(--font-primary)}.font-sans{font-family:var(--font-sans)}.font-secondary{font-family:var(--font-secondary)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-body{font-size:var(--text-body)}.text-display{font-size:var(--text-display)}.text-label{font-size:var(--text-label)}.text-lede{font-size:var(--text-lede)}.text-small{font-size:var(--text-small)}.text-subtitle{font-size:var(--text-subtitle)}.text-title{font-size:var(--text-title)}.leading-body{--tw-leading:var(--leading-body);line-height:var(--leading-body)}.leading-display{--tw-leading:var(--leading-display);line-height:var(--leading-display)}.leading-label{--tw-leading:var(--leading-label);line-height:var(--leading-label)}.leading-lede{--tw-leading:var(--leading-lede);line-height:var(--leading-lede)}.leading-subtitle{--tw-leading:var(--leading-subtitle);line-height:var(--leading-subtitle)}.leading-title{--tw-leading:var(--leading-title);line-height:var(--leading-title)}.font-\[500\]{--tw-font-weight:500;font-weight:500}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-label{--tw-tracking:var(--tracking-label);letter-spacing:var(--tracking-label)}.tracking-optical{--tw-tracking:var(--tracking-optical);letter-spacing:var(--tracking-optical)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-nowrap{text-wrap:nowrap}.text-\[var\(--text-small\)\]{color:var(--text-small)}.text-error{color:var(--color-error)}.text-foreground{color:var(--color-foreground)}.text-info{color:var(--color-info)}.text-inherit{color:inherit}.text-link{color:var(--color-link)}.text-muted{color:var(--color-muted)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-slate-900{color:var(--color-slate-900)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-\[length\:var\(--underline-thickness\)\]{text-decoration-thickness:var(--underline-thickness)}.underline-offset-\[var\(--underline-offset\)\]{text-underline-offset:var(--underline-offset)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-offset-\[var\(--focus-ring-offset\)\]{outline-offset:var(--focus-ring-offset)}.outline-focus-ring{outline-color:var(--color-focus-ring)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-\[var\(--motion-duration-color\)\]{--tw-duration:var(--motion-duration-color);transition-duration:var(--motion-duration-color)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.before\:mt-\[0\.35em\]:before{content:var(--tw-content);margin-top:.35em}.before\:size-\[calc\(var\(--tick-length\)\*0\.7\)\]:before{content:var(--tw-content);width:calc(var(--tick-length) * .7);height:calc(var(--tick-length) * .7)}.before\:shrink-0:before{content:var(--tw-content);flex-shrink:0}.before\:rotate-45:before{content:var(--tw-content);rotate:45deg}.before\:bg-\[var\(--color-rule\)\]:before{content:var(--tw-content);background-color:var(--color-rule)}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.before\:\[border-right\:var\(--tick-thickness\)_solid_var\(--color-rule\)\]:before{content:var(--tw-content);border-right:var(--tick-thickness) solid var(--color-rule)}.before\:\[border-top\:var\(--tick-thickness\)_solid_var\(--color-rule\)\]:before{content:var(--tw-content);border-top:var(--tick-thickness) solid var(--color-rule)}.first\:border-t:first-child{border-top-style:var(--tw-border-style);border-top-width:1px}.first\:pl-0:first-child{padding-left:0}.last\:pr-0:last-child{padding-right:0}@media (hover:hover){.hover\:border-muted:hover{border-color:var(--color-muted)}.hover\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\:bg-secondary-hover:hover{background-color:var(--color-secondary-hover)}.hover\:text-sm:hover{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-\[length\:var\(--underline-thickness\)\]:hover{text-decoration-thickness:var(--underline-thickness)}.hover\:decoration-\[length\:var\(--underline-thickness-hover\)\]:hover{text-decoration-thickness:var(--underline-thickness-hover)}.hover\:underline-offset-\[var\(--underline-offset\)\]:hover{text-underline-offset:var(--underline-offset)}.hover\:opacity-90:hover{opacity:.9}}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-\[length\:var\(--focus-ring-width\)\]:focus-visible{outline-style:var(--tw-outline-style);outline-width:var(--focus-ring-width)}.focus-visible\:outline-\[length\:…\]:focus-visible{outline-style:var(--tw-outline-style);outline-width:…}.focus-visible\:outline-focus-ring:focus-visible{outline-color:var(--color-focus-ring)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-disabled:disabled{border-color:var(--color-disabled)}.disabled\:bg-disabled:disabled{background-color:var(--color-disabled)}.disabled\:text-muted:disabled{color:var(--color-muted)}@media (hover:hover){.disabled\:hover\:bg-disabled-hover:disabled:hover{background-color:var(--color-disabled-hover)}}.aria-selected\:border-foreground[aria-selected=true]{border-color:var(--color-foreground)}.aria-selected\:text-foreground[aria-selected=true]{color:var(--color-foreground)}.aria-\[invalid\=true\]\:border-error[aria-invalid=true]{border-color:var(--color-error)}@media (width>=40rem){.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}}@media (width>=48rem){.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media (width>=64rem){.lg\:sticky{position:sticky}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:max-w-\[var\(--measure-display\)\]{max-width:var(--measure-display)}.lg\:grid-cols-\[10rem_minmax\(0\,1fr\)\]{grid-template-columns:10rem minmax(0,1fr)}.lg\:grid-cols-\[12rem_minmax\(0\,1fr\)\]{grid-template-columns:12rem minmax(0,1fr)}.lg\:grid-cols-\[16rem_minmax\(0\,1fr\)\]{grid-template-columns:16rem minmax(0,1fr)}.lg\:flex-row{flex-direction:row}.lg\:items-baseline{align-items:baseline}.lg\:items-start{align-items:flex-start}.lg\:gap-x-12{column-gap:calc(var(--spacing) * 12)}}.\[\&_\[aria-current\=page\]\]\:text-foreground [aria-current=page]{color:var(--color-foreground)}.\[\&_caption\]\:pb-3 caption{padding-bottom:calc(var(--spacing) * 3)}.\[\&_caption\]\:text-left caption{text-align:left}.\[\&_caption\]\:font-secondary caption{font-family:var(--font-secondary)}.\[\&_caption\]\:text-label caption{font-size:var(--text-label)}.\[\&_caption\]\:tracking-label caption{--tw-tracking:var(--tracking-label);letter-spacing:var(--tracking-label)}.\[\&_caption\]\:text-muted caption{color:var(--color-muted)}.\[\&\+li\]\:border-t+li{border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&\+li\]\:border-solid+li{--tw-border-style:solid;border-style:solid}.\[\&\+li\]\:border-border+li{border-color:var(--color-border)}.\[\&\:\:-moz-range-thumb\]\:size-\[var\(--slider-thumb-size\)\]::-moz-range-thumb{width:var(--slider-thumb-size);height:var(--slider-thumb-size)}.\[\&\:\:-moz-range-thumb\]\:rounded-\[var\(--radius-control\)\]::-moz-range-thumb{border-radius:var(--radius-control)}.\[\&\:\:-moz-range-thumb\]\:border-none::-moz-range-thumb{--tw-border-style:none;border-style:none}.\[\&\:\:-moz-range-thumb\]\:bg-foreground::-moz-range-thumb{background-color:var(--color-foreground)}.\[\&\:\:-moz-range-track\]\:h-\[var\(--slider-track-thickness\)\]::-moz-range-track{height:var(--slider-track-thickness)}.\[\&\:\:-moz-range-track\]\:rounded-\[var\(--radius-control\)\]::-moz-range-track{border-radius:var(--radius-control)}.\[\&\:\:-moz-range-track\]\:bg-control-border::-moz-range-track{background-color:var(--color-control-border)}.\[\&\:\:-webkit-slider-runnable-track\]\:h-\[var\(--slider-track-thickness\)\]::-webkit-slider-runnable-track{height:var(--slider-track-thickness)}.\[\&\:\:-webkit-slider-runnable-track\]\:rounded-\[var\(--radius-control\)\]::-webkit-slider-runnable-track{border-radius:var(--radius-control)}.\[\&\:\:-webkit-slider-runnable-track\]\:bg-control-border::-webkit-slider-runnable-track{background-color:var(--color-control-border)}.\[\&\:\:-webkit-slider-thumb\]\:mt-\[calc\(\(var\(--slider-track-thickness\)-var\(--slider-thumb-size\)\)\/2\)\]::-webkit-slider-thumb{margin-top:calc((var(--slider-track-thickness) - var(--slider-thumb-size)) / 2)}.\[\&\:\:-webkit-slider-thumb\]\:size-\[var\(--slider-thumb-size\)\]::-webkit-slider-thumb{width:var(--slider-thumb-size);height:var(--slider-thumb-size)}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-\[var\(--radius-control\)\]::-webkit-slider-thumb{border-radius:var(--radius-control)}.\[\&\:\:-webkit-slider-thumb\]\:bg-foreground::-webkit-slider-thumb{background-color:var(--color-foreground)}.\[\&\:disabled\:\:-moz-range-thumb\]\:bg-disabled:disabled::-moz-range-thumb{background-color:var(--color-disabled)}.\[\&\:disabled\:\:-moz-range-track\]\:bg-disabled:disabled::-moz-range-track{background-color:var(--color-disabled)}.\[\&\:disabled\:\:-webkit-slider-runnable-track\]\:bg-disabled:disabled::-webkit-slider-runnable-track{background-color:var(--color-disabled)}.\[\&\:disabled\:\:-webkit-slider-thumb\]\:bg-disabled:disabled::-webkit-slider-thumb{background-color:var(--color-disabled)}.\[\&\:not\(\:first-child\)\]\:mt-\[var\(--space-stack\)\]:not(:first-child){margin-top:var(--space-stack)}.\[\&\:not\(\:first-child\)\]\:border-t:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&\:not\(\:first-child\)\]\:border-solid:not(:first-child){--tw-border-style:solid;border-style:solid}.\[\&\:not\(\:first-child\)\]\:border-border:not(:first-child){border-color:var(--color-border)}.\[\&\:not\(\:first-child\)\]\:pt-\[var\(--space-stack\)\]:not(:first-child){padding-top:var(--space-stack)}.\[\&\:not\(\[data-notes\]\)\]\:overflow-x-auto:not([data-notes]){overflow-x:auto}.\[\&\:user-invalid\]\:border-error:user-invalid{border-color:var(--color-error)}@media (width>=64rem){.lg\:\[\&\>dd\]\:col-start-2>dd{grid-column-start:2}.lg\:\[\&\>dd\]\:row-start-1>dd{grid-row-start:1}}.\[\&\>div\:first-child\]\:border-b>div:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>div\:first-child\]\:border-solid>div:first-child{--tw-border-style:solid;border-style:solid}.\[\&\>div\:first-child\]\:border-border>div:first-child{border-color:var(--color-border)}.\[\&\>div\:first-child\]\:pb-\[var\(--space-stack\)\]>div:first-child{padding-bottom:var(--space-stack)}@media (width>=64rem){.lg\:\[\&\>div\:first-child\]\:border-r>div:first-child{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:\[\&\>div\:first-child\]\:border-b-0>div:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.lg\:\[\&\>div\:first-child\]\:pr-\[var\(--space-stack\)\]>div:first-child{padding-right:var(--space-stack)}.lg\:\[\&\>div\:first-child\]\:pb-0>div:first-child{padding-bottom:0}}.\[\&\>div\:first-child\>nav\]\:p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]>div:first-child>nav{padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}@media (width>=64rem){.lg\:\[\&\>div\:first-child\>nav\]\:sticky>div:first-child>nav{position:sticky}.lg\:\[\&\>div\:first-child\>nav\]\:top-0>div:first-child>nav{top:0}.lg\:\[\&\>div\:first-child\>nav\]\:max-h-\[min\(100dvh\,var\(--sidebar-scrollport-height\,100dvh\)\)\]>div:first-child>nav{max-height:min(100dvh, var(--sidebar-scrollport-height,100dvh))}.lg\:\[\&\>div\:first-child\>nav\]\:scroll-p-\[calc\(var\(--focus-ring-width\)\+var\(--focus-ring-offset\)\)\]>div:first-child>nav{scroll-padding:calc(var(--focus-ring-width) + var(--focus-ring-offset))}.lg\:\[\&\>div\:first-child\>nav\]\:overflow-y-auto>div:first-child>nav{overflow-y:auto}}.\[\&\>div\:first-child\>nav\>ul\]\:flex>div:first-child>nav>ul{display:flex}.\[\&\>div\:first-child\>nav\>ul\]\:flex-col>div:first-child>nav>ul{flex-direction:column}.\[\&\>div\:first-child\>nav\>ul\]\:gap-\[var\(--space-stack\)\]>div:first-child>nav>ul{gap:var(--space-stack)}@media (width>=64rem){.lg\:\[\&\>dt\]\:col-start-1>dt{grid-column-start:1}}.\[\&\>table\]\:w-full>table{width:100%}.\[\&\>table\]\:border-collapse>table{border-collapse:collapse}.\[\&\>table\]\:text-left>table{text-align:left}.\[\&\>table\>\*\:nth-child\(2\)\>tr\:first-child\]\:border-rule>table>:nth-child(2)>tr:first-child{border-color:var(--color-rule)}@media not all and (width>=48rem){.\[\&\[data-notes\=content\]_tbody\]\:max-md\:block[data-notes=content] tbody,.\[\&\[data-notes\=content\]_td\]\:max-md\:block[data-notes=content] td,.\[\&\[data-notes\=content\]_tfoot\]\:max-md\:block[data-notes=content] tfoot,.\[\&\[data-notes\=content\]_th\]\:max-md\:block[data-notes=content] th,.\[\&\[data-notes\=content\]_thead\]\:max-md\:block[data-notes=content] thead,.\[\&\[data-notes\=content\]_tr\]\:max-md\:block[data-notes=content] tr,.\[\&\[data-notes\=content\]\>table\]\:max-md\:block[data-notes=content]>table{display:block}.\[\&\[data-notes\=supplementary\]_\[data-variant\=note\]\]\:max-md\:hidden[data-notes=supplementary] [data-variant=note]{display:none}}[data-section]+.\[\[data-section\]\+\&\]\:z-10{z-index:10}[data-section]+.\[\[data-section\]\+\&\]\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}[data-section]+.\[\[data-section\]\+\&\]\:border-solid{--tw-border-style:solid;border-style:solid}[data-section]+.\[\[data-section\]\+\&\]\:border-rule{border-color:var(--color-rule)}}:root{--color-surface:#fff;--color-foreground:#0f172a;--color-muted:#64748b;--color-border:#e2e8f0;--color-control-border:#64748b;--color-rule:#808fa3;--color-backing:#f1f5f9;--color-meter-fill:#0f172a;--color-meter-track:#e2e8f0;--color-primary:#7c3aed;--color-primary-hover:#6d28d9;--color-primary-foreground:#f8fafc;--color-secondary:#0369a1;--color-secondary-hover:#075985;--color-secondary-foreground:#f8fafc;--color-disabled:#94a3b8;--color-disabled-hover:#64748b;--color-focus-ring:var(--color-ring,#475569);--color-link:#2563eb;--color-success:#047857;--color-warning:#b45309;--color-error:#d63384;--color-info:#0e7490}.dark{--color-surface:#0f172a;--color-foreground:#f8fafc;--color-muted:#94a3b8;--color-border:#334155;--color-control-border:#94a3b8;--color-rule:#5b6a80;--color-backing:#1e293b;--color-meter-fill:#f8fafc;--color-meter-track:#334155;--color-primary:#8b5cf6;--color-primary-hover:#a78bfa;--color-primary-foreground:#020617;--color-secondary:#0284c7;--color-secondary-hover:#0ea5e9;--color-secondary-foreground:#020617;--color-disabled:#475569;--color-disabled-hover:#334155;--color-focus-ring:var(--color-ring,#cbd5e1);--color-link:#60a5fa;--color-success:#34d399;--color-warning:#fbbf24;--color-error:#f48fb1;--color-info:#22d3ee}:root{--motion-duration-color:.15s}@media (prefers-reduced-motion:reduce){:root{--motion-duration-color:0s}}:root{--focus-ring-width:3px;--focus-ring-offset:2px;--radius-control:.5rem;--control-min-width:10.5rem;--standing-min-width:7.5rem;--underline-offset:.18em;--underline-thickness:1px;--underline-thickness-hover:2px;--measure:66ch;--measure-display:36ch;--measure-wide:72ch;--measure-action:20rem;--space-stack:.5em;--space-region:1.5em;--space-band:4em;--space-collection-item:1em;--gutter:clamp(1.5rem, 5vw, 4rem);--fold-height:min(70vh, 40rem);--cover-height:100svh;--tick-length:.9rem;--tick-thickness:1px;--tab-marker-thickness:2px;--tab-inset-inline:1em;--tab-inset-block:.5em;--slider-track-thickness:.25rem;--slider-thumb-size:1.5rem;--meter-track-thickness:.5rem}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const eyebrow: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IEyebrowProps extends VariantProps<typeof eyebrow> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -15,12 +15,15 @@ interface IEyebrowProps extends VariantProps<typeof eyebrow> {
|
|
|
15
15
|
* @Guarantees — enforced on every render
|
|
16
16
|
* - Renders a `p`, reading `--font-secondary`, sized by `--text-label` and tracked by
|
|
17
17
|
* `--tracking-label`, at weight 500.
|
|
18
|
-
* - `color` selects
|
|
18
|
+
* - `color` selects `muted` (default), `foreground`, `success`, `warning`, `error` or `info`;
|
|
19
|
+
* nothing else paints text. A status tone changes colour only and adds no announcement semantics.
|
|
19
20
|
* - Sets neither `font-variant-caps` nor `font-variant-numeric` under any prop.
|
|
20
21
|
*
|
|
21
22
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
22
23
|
* - This is **not a form label**: it renders no `htmlFor` and labels no control. A labelled control
|
|
23
24
|
* uses `Input`/`TextArea`, which label themselves.
|
|
25
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
26
|
+
* announcement behavior required when that status changes.
|
|
24
27
|
*/
|
|
25
28
|
export declare const Eyebrow: FunctionComponent<IEyebrowProps>;
|
|
26
29
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const h1: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IH1Props extends VariantProps<typeof h1> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -18,7 +18,8 @@ interface IH1Props extends VariantProps<typeof h1> {
|
|
|
18
18
|
* because bigger type wants fewer characters per line (docs/adr/0004). The bound is the recipe's,
|
|
19
19
|
* not a caller's: the level fixes the role and the role fixes the measure, so there is no `measure`
|
|
20
20
|
* prop to select between roles (docs/adr/0008). It holds under every `color`.
|
|
21
|
-
* - `color` selects
|
|
21
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
22
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
22
23
|
*
|
|
23
24
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
24
25
|
* - This is an ordinary page title, and it is also a hero's lead - `display` is the hero role, so a
|
|
@@ -28,6 +29,8 @@ interface IH1Props extends VariantProps<typeof h1> {
|
|
|
28
29
|
* - A subpage head is the exception: `PageHead` renders its own `h1` at the `title` role, the one
|
|
29
30
|
* sanctioned escape valve from level-fixes-role (docs/adr/0005). Reach for it where it fits.
|
|
30
31
|
* - Heading levels descend without skipping — an `h1` is followed by an `h2`, never an `h3`.
|
|
32
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
33
|
+
* announcement behavior required when that status changes.
|
|
31
34
|
*/
|
|
32
35
|
export declare const H1: FunctionComponent<IH1Props>;
|
|
33
36
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const h2: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IH2Props extends VariantProps<typeof h2> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -15,10 +15,13 @@ interface IH2Props extends VariantProps<typeof h2> {
|
|
|
15
15
|
* - Reads `--font-primary`, sized by `--text-title`, led by `--leading-title` and optically corrected
|
|
16
16
|
* by `--tracking-optical` — the title role is the smallest role that carries it, so `H3` and below
|
|
17
17
|
* take none.
|
|
18
|
-
* - `color` selects
|
|
18
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
19
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
19
20
|
*
|
|
20
21
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
21
22
|
* - Heading levels descend without skipping — an `h2` sits under an `h1`, not under an `h3`.
|
|
23
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
24
|
+
* announcement behavior required when that status changes.
|
|
22
25
|
*/
|
|
23
26
|
export declare const H2: FunctionComponent<IH2Props>;
|
|
24
27
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const h3: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IH3Props extends VariantProps<typeof h3> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -14,10 +14,13 @@ interface IH3Props extends VariantProps<typeof h3> {
|
|
|
14
14
|
* @Guarantees — enforced on every render
|
|
15
15
|
* - Renders an `h3`; its outline level and the subtitle role are one choice, not two (docs/adr/0005).
|
|
16
16
|
* - Reads `--font-primary`, sized by `--text-subtitle` and led by `--leading-subtitle`.
|
|
17
|
-
* - `color` selects
|
|
17
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
18
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
18
19
|
*
|
|
19
20
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
20
21
|
* - Heading levels descend without skipping — an `h3` sits under an `h2`, not under an `h1`.
|
|
22
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
23
|
+
* announcement behavior required when that status changes.
|
|
21
24
|
*/
|
|
22
25
|
export declare const H3: FunctionComponent<IH3Props>;
|
|
23
26
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const h4: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IH4Props extends VariantProps<typeof h4> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -13,10 +13,13 @@ interface IH4Props extends VariantProps<typeof h4> {
|
|
|
13
13
|
* @Guarantees — enforced on every render
|
|
14
14
|
* - Renders an `h4`; its outline level and the body role are one choice, not two (docs/adr/0005).
|
|
15
15
|
* - Reads `--font-primary`, sized by `--text-body`, and is bold so it stands apart from a paragraph.
|
|
16
|
-
* - `color` selects
|
|
16
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
17
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
17
18
|
*
|
|
18
19
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
19
20
|
* - Heading levels descend without skipping — an `h4` sits under an `h3`, not under an `h2`.
|
|
21
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
22
|
+
* announcement behavior required when that status changes.
|
|
20
23
|
*/
|
|
21
24
|
export declare const H4: FunctionComponent<IH4Props>;
|
|
22
25
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const h5: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IH5Props extends VariantProps<typeof h5> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -14,10 +14,13 @@ interface IH5Props extends VariantProps<typeof h5> {
|
|
|
14
14
|
* @Guarantees — enforced on every render
|
|
15
15
|
* - Renders an `h5`; its outline level and the body role are one choice, not two (docs/adr/0005).
|
|
16
16
|
* - Reads `--font-primary`, sized by `--text-body`, semibold so it stands apart from a paragraph.
|
|
17
|
-
* - `color` selects
|
|
17
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
18
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
18
19
|
*
|
|
19
20
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
20
21
|
* - Heading levels descend without skipping — an `h5` sits under an `h4`, not under an `h3`.
|
|
22
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
23
|
+
* announcement behavior required when that status changes.
|
|
21
24
|
*/
|
|
22
25
|
export declare const H5: FunctionComponent<IH5Props>;
|
|
23
26
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const h6: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IH6Props extends VariantProps<typeof h6> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -14,10 +14,13 @@ interface IH6Props extends VariantProps<typeof h6> {
|
|
|
14
14
|
* @Guarantees — enforced on every render
|
|
15
15
|
* - Renders an `h6`; its outline level and the body role are one choice, not two (docs/adr/0005).
|
|
16
16
|
* - Reads `--font-primary`, sized by `--text-body`, medium so it stands apart from a paragraph.
|
|
17
|
-
* - `color` selects
|
|
17
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
18
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
18
19
|
*
|
|
19
20
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
20
21
|
* - Heading levels descend without skipping — an `h6` sits under an `h5`, not under an `h4`.
|
|
22
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
23
|
+
* announcement behavior required when that status changes.
|
|
21
24
|
*/
|
|
22
25
|
export declare const H6: FunctionComponent<IH6Props>;
|
|
23
26
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const note: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
export interface INoteProps extends VariantProps<typeof note> {
|
|
7
7
|
/** The annotation. A `ReactNode` rather than a string, because these lines carry inline links. */
|
|
@@ -16,7 +16,8 @@ export interface INoteProps extends VariantProps<typeof note> {
|
|
|
16
16
|
*
|
|
17
17
|
* @Guarantees — enforced on every render
|
|
18
18
|
* - Renders a `p`, reading `--font-secondary` and sized by `--text-small`.
|
|
19
|
-
* - `color` selects
|
|
19
|
+
* - `color` selects `foreground` (default), `muted`, `success`, `warning`, `error` or `info`;
|
|
20
|
+
* nothing else paints text. A status tone changes colour only.
|
|
20
21
|
* - Emits no tracking, no font-weight, no measure and no margin under any prop.
|
|
21
22
|
* - Carries no ARIA role and no live region under any prop.
|
|
22
23
|
*
|
|
@@ -30,6 +31,8 @@ export interface INoteProps extends VariantProps<typeof note> {
|
|
|
30
31
|
* architecture standard's one-way dependency rule is why `Prose` restates `P`'s utilities.
|
|
31
32
|
* - Where the annotation is a form's status message, `Form` owns `role="status"`/`role="alert"` by
|
|
32
33
|
* state; a `Note` announces nothing.
|
|
34
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
35
|
+
* announcement behavior required when that status changes.
|
|
33
36
|
*/
|
|
34
37
|
export declare const Note: FunctionComponent<INoteProps>;
|
|
35
38
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const p: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IPProps extends VariantProps<typeof p> {
|
|
7
7
|
children: ReactNode;
|
|
@@ -13,13 +13,16 @@ interface IPProps extends VariantProps<typeof p> {
|
|
|
13
13
|
*
|
|
14
14
|
* @Guarantees — enforced on every render
|
|
15
15
|
* - Renders a `p`, reading `--font-primary`, sized by `--text-body` and led by `--leading-body`.
|
|
16
|
-
* - `color` selects
|
|
16
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
17
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
17
18
|
*
|
|
18
19
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
19
20
|
* - Where line length matters, place the paragraph inside whatever bounds the reading measure; `P`
|
|
20
21
|
* does not constrain its own width.
|
|
21
22
|
* - For a paragraph inside a reading column, reach for `Prose.Body`, which is measure-bounded by its
|
|
22
23
|
* `Prose.Root`; `P` is for a paragraph with no reading column around it.
|
|
24
|
+
* - Status-toned content communicates its status without relying on colour. If a change needs to be
|
|
25
|
+
* announced, the caller owns that behavior; selecting a tone does not create a status event.
|
|
23
26
|
*/
|
|
24
27
|
export declare const P: FunctionComponent<IPProps>;
|
|
25
28
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import type { FunctionComponent, ReactNode } from 'react';
|
|
3
3
|
declare const proseBody: (props?: ({
|
|
4
|
-
color?: "foreground" | "muted" | null | undefined;
|
|
4
|
+
color?: "foreground" | "muted" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
5
5
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
interface IProseRootProps {
|
|
7
7
|
children?: ReactNode;
|
|
@@ -26,12 +26,15 @@ interface IProseTailProps {
|
|
|
26
26
|
* `--measure`, setting no font-size so the `ch` measure resolves against inherited body type.
|
|
27
27
|
* - `Root` stacks its children on `--space-stack` and takes no outer margin: the page owns the
|
|
28
28
|
* rhythm around the block, and the air the block wants is at its edges and inside the type.
|
|
29
|
-
* - `Lede` renders a `p` at the lede role; `Body` at the body role with a
|
|
30
|
-
* `color`; `Tail` at the small
|
|
29
|
+
* - `Lede` renders a fixed-foreground `p` at the lede role; `Body` at the body role with a
|
|
30
|
+
* `foreground`, `muted`, `success`, `warning`, `error` or `info` `color`; `Tail` at the small
|
|
31
|
+
* role, always muted. A status tone changes colour only and adds no announcement semantics.
|
|
31
32
|
*
|
|
32
33
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
33
34
|
* - Use `Prose.Body` for a paragraph inside this reading column; for a paragraph with no reading
|
|
34
35
|
* column around it - in a form, a card, a table cell - use `P` instead.
|
|
36
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
37
|
+
* announcement behavior required when that status changes.
|
|
35
38
|
*/
|
|
36
39
|
export declare const Prose: {
|
|
37
40
|
readonly Root: FunctionComponent<IProseRootProps>;
|
|
@@ -95,11 +95,18 @@ export type PaletteTokens = {
|
|
|
95
95
|
* carries the text threshold, not the 3:1 the ring takes. Constraint (WCAG 2.2 SC 1.4.3): at
|
|
96
96
|
* least 4.5:1 against `surface` in the same theme. */
|
|
97
97
|
link: string;
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
98
|
+
/** The success status tone. Status tones reinforce content independently of their carrier and
|
|
99
|
+
* carry no announcement behavior. Constraint (WCAG 2.2 SC 1.4.3): at least 4.5:1 against
|
|
100
|
+
* `surface` in the same theme. */
|
|
100
101
|
success: string;
|
|
102
|
+
/** The warning status tone. Carries the general status-tone contract and 4.5:1-against-`surface`
|
|
103
|
+
* constraint stated on `success`. */
|
|
101
104
|
warning: string;
|
|
105
|
+
/** The error status tone. Carries the general status-tone contract and 4.5:1-against-`surface`
|
|
106
|
+
* constraint stated on `success`, plus the depletion-path constraint stated on `meterFill`. */
|
|
102
107
|
error: string;
|
|
108
|
+
/** The informational status tone. Carries the general status-tone contract and
|
|
109
|
+
* 4.5:1-against-`surface` constraint stated on `success`. */
|
|
103
110
|
info: string;
|
|
104
111
|
};
|
|
105
112
|
/**
|
package/package.json
CHANGED
|
@@ -10,7 +10,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
10
10
|
// semantic token re-pointed by `.dark`, so no variant carries a `dark:` class.
|
|
11
11
|
const eyebrow = cva('font-secondary text-label tracking-label font-medium', {
|
|
12
12
|
variants: {
|
|
13
|
-
color: {
|
|
13
|
+
color: {
|
|
14
|
+
foreground: 'text-foreground',
|
|
15
|
+
muted: 'text-muted',
|
|
16
|
+
success: 'text-success',
|
|
17
|
+
warning: 'text-warning',
|
|
18
|
+
error: 'text-error',
|
|
19
|
+
info: 'text-info',
|
|
20
|
+
},
|
|
14
21
|
},
|
|
15
22
|
defaultVariants: { color: 'muted' },
|
|
16
23
|
});
|
|
@@ -28,12 +35,15 @@ interface IEyebrowProps extends VariantProps<typeof eyebrow> {
|
|
|
28
35
|
* @Guarantees — enforced on every render
|
|
29
36
|
* - Renders a `p`, reading `--font-secondary`, sized by `--text-label` and tracked by
|
|
30
37
|
* `--tracking-label`, at weight 500.
|
|
31
|
-
* - `color` selects
|
|
38
|
+
* - `color` selects `muted` (default), `foreground`, `success`, `warning`, `error` or `info`;
|
|
39
|
+
* nothing else paints text. A status tone changes colour only and adds no announcement semantics.
|
|
32
40
|
* - Sets neither `font-variant-caps` nor `font-variant-numeric` under any prop.
|
|
33
41
|
*
|
|
34
42
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
35
43
|
* - This is **not a form label**: it renders no `htmlFor` and labels no control. A labelled control
|
|
36
44
|
* uses `Input`/`TextArea`, which label themselves.
|
|
45
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
46
|
+
* announcement behavior required when that status changes.
|
|
37
47
|
*/
|
|
38
48
|
export const Eyebrow: FunctionComponent<IEyebrowProps> = ({
|
|
39
49
|
children,
|
|
@@ -12,7 +12,14 @@ const h1 = cva(
|
|
|
12
12
|
'font-primary text-display leading-display tracking-optical max-w-[var(--measure-display)]',
|
|
13
13
|
{
|
|
14
14
|
variants: {
|
|
15
|
-
color: {
|
|
15
|
+
color: {
|
|
16
|
+
foreground: 'text-foreground',
|
|
17
|
+
muted: 'text-muted',
|
|
18
|
+
success: 'text-success',
|
|
19
|
+
warning: 'text-warning',
|
|
20
|
+
error: 'text-error',
|
|
21
|
+
info: 'text-info',
|
|
22
|
+
},
|
|
16
23
|
},
|
|
17
24
|
defaultVariants: { color: 'foreground' },
|
|
18
25
|
},
|
|
@@ -34,7 +41,8 @@ interface IH1Props extends VariantProps<typeof h1> {
|
|
|
34
41
|
* because bigger type wants fewer characters per line (docs/adr/0004). The bound is the recipe's,
|
|
35
42
|
* not a caller's: the level fixes the role and the role fixes the measure, so there is no `measure`
|
|
36
43
|
* prop to select between roles (docs/adr/0008). It holds under every `color`.
|
|
37
|
-
* - `color` selects
|
|
44
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
45
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
38
46
|
*
|
|
39
47
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
40
48
|
* - This is an ordinary page title, and it is also a hero's lead - `display` is the hero role, so a
|
|
@@ -44,6 +52,8 @@ interface IH1Props extends VariantProps<typeof h1> {
|
|
|
44
52
|
* - A subpage head is the exception: `PageHead` renders its own `h1` at the `title` role, the one
|
|
45
53
|
* sanctioned escape valve from level-fixes-role (docs/adr/0005). Reach for it where it fits.
|
|
46
54
|
* - Heading levels descend without skipping — an `h1` is followed by an `h2`, never an `h3`.
|
|
55
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
56
|
+
* announcement behavior required when that status changes.
|
|
47
57
|
*/
|
|
48
58
|
export const H1: FunctionComponent<IH1Props> = ({
|
|
49
59
|
children,
|
|
@@ -9,7 +9,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
9
9
|
// Colour is a semantic token re-pointed by `.dark`, so no variant carries a `dark:` class.
|
|
10
10
|
const h2 = cva('font-primary text-title leading-title tracking-optical', {
|
|
11
11
|
variants: {
|
|
12
|
-
color: {
|
|
12
|
+
color: {
|
|
13
|
+
foreground: 'text-foreground',
|
|
14
|
+
muted: 'text-muted',
|
|
15
|
+
success: 'text-success',
|
|
16
|
+
warning: 'text-warning',
|
|
17
|
+
error: 'text-error',
|
|
18
|
+
info: 'text-info',
|
|
19
|
+
},
|
|
13
20
|
},
|
|
14
21
|
defaultVariants: { color: 'foreground' },
|
|
15
22
|
});
|
|
@@ -27,10 +34,13 @@ interface IH2Props extends VariantProps<typeof h2> {
|
|
|
27
34
|
* - Reads `--font-primary`, sized by `--text-title`, led by `--leading-title` and optically corrected
|
|
28
35
|
* by `--tracking-optical` — the title role is the smallest role that carries it, so `H3` and below
|
|
29
36
|
* take none.
|
|
30
|
-
* - `color` selects
|
|
37
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
38
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
31
39
|
*
|
|
32
40
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
33
41
|
* - Heading levels descend without skipping — an `h2` sits under an `h1`, not under an `h3`.
|
|
42
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
43
|
+
* announcement behavior required when that status changes.
|
|
34
44
|
*/
|
|
35
45
|
export const H2: FunctionComponent<IH2Props> = ({
|
|
36
46
|
children,
|
|
@@ -8,7 +8,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
8
8
|
// class.
|
|
9
9
|
const h3 = cva('font-primary text-subtitle leading-subtitle', {
|
|
10
10
|
variants: {
|
|
11
|
-
color: {
|
|
11
|
+
color: {
|
|
12
|
+
foreground: 'text-foreground',
|
|
13
|
+
muted: 'text-muted',
|
|
14
|
+
success: 'text-success',
|
|
15
|
+
warning: 'text-warning',
|
|
16
|
+
error: 'text-error',
|
|
17
|
+
info: 'text-info',
|
|
18
|
+
},
|
|
12
19
|
},
|
|
13
20
|
defaultVariants: { color: 'foreground' },
|
|
14
21
|
});
|
|
@@ -25,10 +32,13 @@ interface IH3Props extends VariantProps<typeof h3> {
|
|
|
25
32
|
* @Guarantees — enforced on every render
|
|
26
33
|
* - Renders an `h3`; its outline level and the subtitle role are one choice, not two (docs/adr/0005).
|
|
27
34
|
* - Reads `--font-primary`, sized by `--text-subtitle` and led by `--leading-subtitle`.
|
|
28
|
-
* - `color` selects
|
|
35
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
36
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
29
37
|
*
|
|
30
38
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
31
39
|
* - Heading levels descend without skipping — an `h3` sits under an `h2`, not under an `h1`.
|
|
40
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
41
|
+
* announcement behavior required when that status changes.
|
|
32
42
|
*/
|
|
33
43
|
export const H3: FunctionComponent<IH3Props> = ({
|
|
34
44
|
children,
|
|
@@ -8,7 +8,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
8
8
|
// token re-pointed by `.dark`, so no variant carries a `dark:` class.
|
|
9
9
|
const h4 = cva('font-primary text-body leading-body font-bold', {
|
|
10
10
|
variants: {
|
|
11
|
-
color: {
|
|
11
|
+
color: {
|
|
12
|
+
foreground: 'text-foreground',
|
|
13
|
+
muted: 'text-muted',
|
|
14
|
+
success: 'text-success',
|
|
15
|
+
warning: 'text-warning',
|
|
16
|
+
error: 'text-error',
|
|
17
|
+
info: 'text-info',
|
|
18
|
+
},
|
|
12
19
|
},
|
|
13
20
|
defaultVariants: { color: 'foreground' },
|
|
14
21
|
});
|
|
@@ -24,10 +31,13 @@ interface IH4Props extends VariantProps<typeof h4> {
|
|
|
24
31
|
* @Guarantees — enforced on every render
|
|
25
32
|
* - Renders an `h4`; its outline level and the body role are one choice, not two (docs/adr/0005).
|
|
26
33
|
* - Reads `--font-primary`, sized by `--text-body`, and is bold so it stands apart from a paragraph.
|
|
27
|
-
* - `color` selects
|
|
34
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
35
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
28
36
|
*
|
|
29
37
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
30
38
|
* - Heading levels descend without skipping — an `h4` sits under an `h3`, not under an `h2`.
|
|
39
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
40
|
+
* announcement behavior required when that status changes.
|
|
31
41
|
*/
|
|
32
42
|
export const H4: FunctionComponent<IH4Props> = ({
|
|
33
43
|
children,
|
|
@@ -8,7 +8,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
8
8
|
// token re-pointed by `.dark`, so no variant carries a `dark:` class.
|
|
9
9
|
const h5 = cva('font-primary text-body leading-body font-semibold', {
|
|
10
10
|
variants: {
|
|
11
|
-
color: {
|
|
11
|
+
color: {
|
|
12
|
+
foreground: 'text-foreground',
|
|
13
|
+
muted: 'text-muted',
|
|
14
|
+
success: 'text-success',
|
|
15
|
+
warning: 'text-warning',
|
|
16
|
+
error: 'text-error',
|
|
17
|
+
info: 'text-info',
|
|
18
|
+
},
|
|
12
19
|
},
|
|
13
20
|
defaultVariants: { color: 'foreground' },
|
|
14
21
|
});
|
|
@@ -25,10 +32,13 @@ interface IH5Props extends VariantProps<typeof h5> {
|
|
|
25
32
|
* @Guarantees — enforced on every render
|
|
26
33
|
* - Renders an `h5`; its outline level and the body role are one choice, not two (docs/adr/0005).
|
|
27
34
|
* - Reads `--font-primary`, sized by `--text-body`, semibold so it stands apart from a paragraph.
|
|
28
|
-
* - `color` selects
|
|
35
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
36
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
29
37
|
*
|
|
30
38
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
31
39
|
* - Heading levels descend without skipping — an `h5` sits under an `h4`, not under an `h3`.
|
|
40
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
41
|
+
* announcement behavior required when that status changes.
|
|
32
42
|
*/
|
|
33
43
|
export const H5: FunctionComponent<IH5Props> = ({
|
|
34
44
|
children,
|
|
@@ -8,7 +8,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
8
8
|
// token re-pointed by `.dark`, so no variant carries a `dark:` class.
|
|
9
9
|
const h6 = cva('font-primary text-body leading-body font-medium', {
|
|
10
10
|
variants: {
|
|
11
|
-
color: {
|
|
11
|
+
color: {
|
|
12
|
+
foreground: 'text-foreground',
|
|
13
|
+
muted: 'text-muted',
|
|
14
|
+
success: 'text-success',
|
|
15
|
+
warning: 'text-warning',
|
|
16
|
+
error: 'text-error',
|
|
17
|
+
info: 'text-info',
|
|
18
|
+
},
|
|
12
19
|
},
|
|
13
20
|
defaultVariants: { color: 'foreground' },
|
|
14
21
|
});
|
|
@@ -25,10 +32,13 @@ interface IH6Props extends VariantProps<typeof h6> {
|
|
|
25
32
|
* @Guarantees — enforced on every render
|
|
26
33
|
* - Renders an `h6`; its outline level and the body role are one choice, not two (docs/adr/0005).
|
|
27
34
|
* - Reads `--font-primary`, sized by `--text-body`, medium so it stands apart from a paragraph.
|
|
28
|
-
* - `color` selects
|
|
35
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
36
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
29
37
|
*
|
|
30
38
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
31
39
|
* - Heading levels descend without skipping — an `h6` sits under an `h5`, not under an `h4`.
|
|
40
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
41
|
+
* announcement behavior required when that status changes.
|
|
32
42
|
*/
|
|
33
43
|
export const H6: FunctionComponent<IH6Props> = ({
|
|
34
44
|
children,
|
|
@@ -11,7 +11,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
11
11
|
// the page owns the rhythm around it. Colour is re-pointed by `.dark`, so no variant carries `dark:`.
|
|
12
12
|
const note = cva('font-secondary text-small', {
|
|
13
13
|
variants: {
|
|
14
|
-
color: {
|
|
14
|
+
color: {
|
|
15
|
+
foreground: 'text-foreground',
|
|
16
|
+
muted: 'text-muted',
|
|
17
|
+
success: 'text-success',
|
|
18
|
+
warning: 'text-warning',
|
|
19
|
+
error: 'text-error',
|
|
20
|
+
info: 'text-info',
|
|
21
|
+
},
|
|
15
22
|
},
|
|
16
23
|
defaultVariants: { color: 'foreground' },
|
|
17
24
|
});
|
|
@@ -30,7 +37,8 @@ export interface INoteProps extends VariantProps<typeof note> {
|
|
|
30
37
|
*
|
|
31
38
|
* @Guarantees — enforced on every render
|
|
32
39
|
* - Renders a `p`, reading `--font-secondary` and sized by `--text-small`.
|
|
33
|
-
* - `color` selects
|
|
40
|
+
* - `color` selects `foreground` (default), `muted`, `success`, `warning`, `error` or `info`;
|
|
41
|
+
* nothing else paints text. A status tone changes colour only.
|
|
34
42
|
* - Emits no tracking, no font-weight, no measure and no margin under any prop.
|
|
35
43
|
* - Carries no ARIA role and no live region under any prop.
|
|
36
44
|
*
|
|
@@ -44,6 +52,8 @@ export interface INoteProps extends VariantProps<typeof note> {
|
|
|
44
52
|
* architecture standard's one-way dependency rule is why `Prose` restates `P`'s utilities.
|
|
45
53
|
* - Where the annotation is a form's status message, `Form` owns `role="status"`/`role="alert"` by
|
|
46
54
|
* state; a `Note` announces nothing.
|
|
55
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
56
|
+
* announcement behavior required when that status changes.
|
|
47
57
|
*/
|
|
48
58
|
export const Note: FunctionComponent<INoteProps> = ({
|
|
49
59
|
children,
|
|
@@ -7,7 +7,14 @@ import type { FunctionComponent, ReactNode } from 'react';
|
|
|
7
7
|
// P owns no reading measure - that belongs to whatever owns the reading column (Prose #21).
|
|
8
8
|
const p = cva('font-primary text-body leading-body', {
|
|
9
9
|
variants: {
|
|
10
|
-
color: {
|
|
10
|
+
color: {
|
|
11
|
+
foreground: 'text-foreground',
|
|
12
|
+
muted: 'text-muted',
|
|
13
|
+
success: 'text-success',
|
|
14
|
+
warning: 'text-warning',
|
|
15
|
+
error: 'text-error',
|
|
16
|
+
info: 'text-info',
|
|
17
|
+
},
|
|
11
18
|
},
|
|
12
19
|
defaultVariants: { color: 'foreground' },
|
|
13
20
|
});
|
|
@@ -23,13 +30,16 @@ interface IPProps extends VariantProps<typeof p> {
|
|
|
23
30
|
*
|
|
24
31
|
* @Guarantees — enforced on every render
|
|
25
32
|
* - Renders a `p`, reading `--font-primary`, sized by `--text-body` and led by `--leading-body`.
|
|
26
|
-
* - `color` selects
|
|
33
|
+
* - `color` selects `foreground`, `muted`, `success`, `warning`, `error` or `info`; nothing else
|
|
34
|
+
* paints text. A status tone changes colour only and adds no announcement semantics.
|
|
27
35
|
*
|
|
28
36
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
29
37
|
* - Where line length matters, place the paragraph inside whatever bounds the reading measure; `P`
|
|
30
38
|
* does not constrain its own width.
|
|
31
39
|
* - For a paragraph inside a reading column, reach for `Prose.Body`, which is measure-bounded by its
|
|
32
40
|
* `Prose.Root`; `P` is for a paragraph with no reading column around it.
|
|
41
|
+
* - Status-toned content communicates its status without relying on colour. If a change needs to be
|
|
42
|
+
* announced, the caller owns that behavior; selecting a tone does not create a status event.
|
|
33
43
|
*/
|
|
34
44
|
export const P: FunctionComponent<IPProps> = ({ children, color, testId }) => (
|
|
35
45
|
<p className={p({ color })} data-testid={testId}>
|
|
@@ -20,7 +20,14 @@ const proseLede = cva('font-primary text-lede leading-lede text-foreground');
|
|
|
20
20
|
// semantic token re-pointed by `.dark`, so no variant carries a `dark:` class.
|
|
21
21
|
const proseBody = cva('font-primary text-body leading-body', {
|
|
22
22
|
variants: {
|
|
23
|
-
color: {
|
|
23
|
+
color: {
|
|
24
|
+
foreground: 'text-foreground',
|
|
25
|
+
muted: 'text-muted',
|
|
26
|
+
success: 'text-success',
|
|
27
|
+
warning: 'text-warning',
|
|
28
|
+
error: 'text-error',
|
|
29
|
+
info: 'text-info',
|
|
30
|
+
},
|
|
24
31
|
},
|
|
25
32
|
defaultVariants: { color: 'foreground' },
|
|
26
33
|
});
|
|
@@ -76,12 +83,15 @@ const ProseTail: FunctionComponent<IProseTailProps> = ({ children }) => (
|
|
|
76
83
|
* `--measure`, setting no font-size so the `ch` measure resolves against inherited body type.
|
|
77
84
|
* - `Root` stacks its children on `--space-stack` and takes no outer margin: the page owns the
|
|
78
85
|
* rhythm around the block, and the air the block wants is at its edges and inside the type.
|
|
79
|
-
* - `Lede` renders a `p` at the lede role; `Body` at the body role with a
|
|
80
|
-
* `color`; `Tail` at the small
|
|
86
|
+
* - `Lede` renders a fixed-foreground `p` at the lede role; `Body` at the body role with a
|
|
87
|
+
* `foreground`, `muted`, `success`, `warning`, `error` or `info` `color`; `Tail` at the small
|
|
88
|
+
* role, always muted. A status tone changes colour only and adds no announcement semantics.
|
|
81
89
|
*
|
|
82
90
|
* @CallerMustEnsure — the component cannot see these and does not check them
|
|
83
91
|
* - Use `Prose.Body` for a paragraph inside this reading column; for a paragraph with no reading
|
|
84
92
|
* column around it - in a form, a card, a table cell - use `P` instead.
|
|
93
|
+
* - Status-toned content communicates its status without relying on colour. The caller owns any
|
|
94
|
+
* announcement behavior required when that status changes.
|
|
85
95
|
*/
|
|
86
96
|
export const Prose = {
|
|
87
97
|
Root: ProseRoot,
|
package/src/Theme/Palette.ts
CHANGED
|
@@ -102,11 +102,18 @@ export type PaletteTokens = {
|
|
|
102
102
|
* least 4.5:1 against `surface` in the same theme. */
|
|
103
103
|
link: string;
|
|
104
104
|
|
|
105
|
-
/**
|
|
106
|
-
*
|
|
105
|
+
/** The success status tone. Status tones reinforce content independently of their carrier and
|
|
106
|
+
* carry no announcement behavior. Constraint (WCAG 2.2 SC 1.4.3): at least 4.5:1 against
|
|
107
|
+
* `surface` in the same theme. */
|
|
107
108
|
success: string;
|
|
109
|
+
/** The warning status tone. Carries the general status-tone contract and 4.5:1-against-`surface`
|
|
110
|
+
* constraint stated on `success`. */
|
|
108
111
|
warning: string;
|
|
112
|
+
/** The error status tone. Carries the general status-tone contract and 4.5:1-against-`surface`
|
|
113
|
+
* constraint stated on `success`, plus the depletion-path constraint stated on `meterFill`. */
|
|
109
114
|
error: string;
|
|
115
|
+
/** The informational status tone. Carries the general status-tone contract and
|
|
116
|
+
* 4.5:1-against-`surface` constraint stated on `success`. */
|
|
110
117
|
info: string;
|
|
111
118
|
};
|
|
112
119
|
|
|
@@ -156,10 +163,10 @@ export const light: PaletteTokens = {
|
|
|
156
163
|
|
|
157
164
|
link: '#2563eb',
|
|
158
165
|
|
|
159
|
-
success: '#
|
|
160
|
-
warning: '#
|
|
166
|
+
success: '#047857',
|
|
167
|
+
warning: '#b45309',
|
|
161
168
|
error: '#d63384',
|
|
162
|
-
info: '#
|
|
169
|
+
info: '#0e7490',
|
|
163
170
|
};
|
|
164
171
|
|
|
165
172
|
/**
|
package/src/tokens.css
CHANGED
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
--color-disabled-hover: #64748b;
|
|
30
30
|
--color-focus-ring: var(--color-ring, #475569);
|
|
31
31
|
--color-link: #2563eb;
|
|
32
|
-
--color-success: #
|
|
33
|
-
--color-warning: #
|
|
32
|
+
--color-success: #047857;
|
|
33
|
+
--color-warning: #b45309;
|
|
34
34
|
--color-error: #d63384;
|
|
35
|
-
--color-info: #
|
|
35
|
+
--color-info: #0e7490;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.dark {
|
package/src/tokens.light.css
CHANGED
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
--color-disabled-hover: #64748b;
|
|
25
25
|
--color-focus-ring: var(--color-ring, #475569);
|
|
26
26
|
--color-link: #2563eb;
|
|
27
|
-
--color-success: #
|
|
28
|
-
--color-warning: #
|
|
27
|
+
--color-success: #047857;
|
|
28
|
+
--color-warning: #b45309;
|
|
29
29
|
--color-error: #d63384;
|
|
30
|
-
--color-info: #
|
|
30
|
+
--color-info: #0e7490;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
@theme inline {
|