@tea-ui/tokens 0.1.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/LICENSE +21 -0
- package/README.md +33 -0
- package/dist/files/jetbrains-mono-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/files/jetbrains-mono-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/files/jetbrains-mono-cyrillic-wght-italic.woff2 +0 -0
- package/dist/files/jetbrains-mono-cyrillic-wght-normal.woff2 +0 -0
- package/dist/files/jetbrains-mono-greek-wght-italic.woff2 +0 -0
- package/dist/files/jetbrains-mono-greek-wght-normal.woff2 +0 -0
- package/dist/files/jetbrains-mono-latin-ext-wght-italic.woff2 +0 -0
- package/dist/files/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/files/jetbrains-mono-latin-wght-italic.woff2 +0 -0
- package/dist/files/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/dist/files/jetbrains-mono-vietnamese-wght-italic.woff2 +0 -0
- package/dist/files/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
- package/dist/files/jost-cyrillic-wght-italic.woff2 +0 -0
- package/dist/files/jost-cyrillic-wght-normal.woff2 +0 -0
- package/dist/files/jost-latin-ext-wght-italic.woff2 +0 -0
- package/dist/files/jost-latin-ext-wght-normal.woff2 +0 -0
- package/dist/files/jost-latin-wght-italic.woff2 +0 -0
- package/dist/files/jost-latin-wght-normal.woff2 +0 -0
- package/dist/files/lilita-one-latin-400-normal.woff +0 -0
- package/dist/files/lilita-one-latin-400-normal.woff2 +0 -0
- package/dist/files/lilita-one-latin-ext-400-normal.woff +0 -0
- package/dist/files/lilita-one-latin-ext-400-normal.woff2 +0 -0
- package/dist/fonts.css +108 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.js +131 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +2 -0
- package/package.json +65 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 landnevermore
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# @tea-ui/tokens
|
|
2
|
+
|
|
3
|
+
Design tokens: colour, spacing, radii, motion, density, and the themes.
|
|
4
|
+
|
|
5
|
+
Part of [TEA UI](https://landnevermore.github.io/TEAui/) — a design system built once and reused across
|
|
6
|
+
products. The whole system is documented at https://landnevermore.github.io/TEAui/docs/.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @tea-ui/tokens
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
React 18.2 or 19 is expected as a peer dependency.
|
|
15
|
+
|
|
16
|
+
## Use
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { tokens } from "@tea-ui/tokens";
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Styles
|
|
23
|
+
|
|
24
|
+
The token layer ships its stylesheet as a separate export, so it is only
|
|
25
|
+
downloaded when it is asked for:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import "@tea-ui/tokens/styles.css";
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Licence
|
|
32
|
+
|
|
33
|
+
MIT. See [LICENSE](./LICENSE).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/fonts.css
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/* TEA UI — the typefaces. Generated by scripts/build-fonts.mjs; do not edit. */
|
|
2
|
+
/* jost-cyrillic-wght-normal */
|
|
3
|
+
@font-face {
|
|
4
|
+
font-family: 'Jost Variable';
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-display: swap;
|
|
7
|
+
font-weight: 100 900;
|
|
8
|
+
src: url(./files/jost-cyrillic-wght-normal.woff2) format('woff2-variations');
|
|
9
|
+
unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* jost-latin-ext-wght-normal */
|
|
13
|
+
@font-face {
|
|
14
|
+
font-family: 'Jost Variable';
|
|
15
|
+
font-style: normal;
|
|
16
|
+
font-display: swap;
|
|
17
|
+
font-weight: 100 900;
|
|
18
|
+
src: url(./files/jost-latin-ext-wght-normal.woff2) format('woff2-variations');
|
|
19
|
+
unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* jost-latin-wght-normal */
|
|
23
|
+
@font-face {
|
|
24
|
+
font-family: 'Jost Variable';
|
|
25
|
+
font-style: normal;
|
|
26
|
+
font-display: swap;
|
|
27
|
+
font-weight: 100 900;
|
|
28
|
+
src: url(./files/jost-latin-wght-normal.woff2) format('woff2-variations');
|
|
29
|
+
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
|
|
30
|
+
}
|
|
31
|
+
/* jetbrains-mono-cyrillic-ext-wght-normal */
|
|
32
|
+
@font-face {
|
|
33
|
+
font-family: 'JetBrains Mono Variable';
|
|
34
|
+
font-style: normal;
|
|
35
|
+
font-display: swap;
|
|
36
|
+
font-weight: 100 800;
|
|
37
|
+
src: url(./files/jetbrains-mono-cyrillic-ext-wght-normal.woff2) format('woff2-variations');
|
|
38
|
+
unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* jetbrains-mono-cyrillic-wght-normal */
|
|
42
|
+
@font-face {
|
|
43
|
+
font-family: 'JetBrains Mono Variable';
|
|
44
|
+
font-style: normal;
|
|
45
|
+
font-display: swap;
|
|
46
|
+
font-weight: 100 800;
|
|
47
|
+
src: url(./files/jetbrains-mono-cyrillic-wght-normal.woff2) format('woff2-variations');
|
|
48
|
+
unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* jetbrains-mono-greek-wght-normal */
|
|
52
|
+
@font-face {
|
|
53
|
+
font-family: 'JetBrains Mono Variable';
|
|
54
|
+
font-style: normal;
|
|
55
|
+
font-display: swap;
|
|
56
|
+
font-weight: 100 800;
|
|
57
|
+
src: url(./files/jetbrains-mono-greek-wght-normal.woff2) format('woff2-variations');
|
|
58
|
+
unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* jetbrains-mono-vietnamese-wght-normal */
|
|
62
|
+
@font-face {
|
|
63
|
+
font-family: 'JetBrains Mono Variable';
|
|
64
|
+
font-style: normal;
|
|
65
|
+
font-display: swap;
|
|
66
|
+
font-weight: 100 800;
|
|
67
|
+
src: url(./files/jetbrains-mono-vietnamese-wght-normal.woff2) format('woff2-variations');
|
|
68
|
+
unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* jetbrains-mono-latin-ext-wght-normal */
|
|
72
|
+
@font-face {
|
|
73
|
+
font-family: 'JetBrains Mono Variable';
|
|
74
|
+
font-style: normal;
|
|
75
|
+
font-display: swap;
|
|
76
|
+
font-weight: 100 800;
|
|
77
|
+
src: url(./files/jetbrains-mono-latin-ext-wght-normal.woff2) format('woff2-variations');
|
|
78
|
+
unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* jetbrains-mono-latin-wght-normal */
|
|
82
|
+
@font-face {
|
|
83
|
+
font-family: 'JetBrains Mono Variable';
|
|
84
|
+
font-style: normal;
|
|
85
|
+
font-display: swap;
|
|
86
|
+
font-weight: 100 800;
|
|
87
|
+
src: url(./files/jetbrains-mono-latin-wght-normal.woff2) format('woff2-variations');
|
|
88
|
+
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
|
|
89
|
+
}
|
|
90
|
+
/* lilita-one-latin-ext-400-normal */
|
|
91
|
+
@font-face {
|
|
92
|
+
font-family: 'Lilita One';
|
|
93
|
+
font-style: normal;
|
|
94
|
+
font-display: swap;
|
|
95
|
+
font-weight: 400;
|
|
96
|
+
src: url(./files/lilita-one-latin-ext-400-normal.woff2) format('woff2'), url(./files/lilita-one-latin-ext-400-normal.woff) format('woff');
|
|
97
|
+
unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* lilita-one-latin-400-normal */
|
|
101
|
+
@font-face {
|
|
102
|
+
font-family: 'Lilita One';
|
|
103
|
+
font-style: normal;
|
|
104
|
+
font-display: swap;
|
|
105
|
+
font-weight: 400;
|
|
106
|
+
src: url(./files/lilita-one-latin-400-normal.woff2) format('woff2'), url(./files/lilita-one-latin-400-normal.woff) format('woff');
|
|
107
|
+
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
|
|
108
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TEA UI — tokens, TypeScript surface.
|
|
3
|
+
*
|
|
4
|
+
* The CSS in this package is the source of truth for every value. This module
|
|
5
|
+
* exists so that *code* — not just styles — can read the same vocabulary:
|
|
6
|
+
* theme names, density names, the closed tone set, breakpoints and motion
|
|
7
|
+
* tokens. A component that hardcodes `h-8` instead of asking for a density
|
|
8
|
+
* step is a bug, and having the step available here is what makes that
|
|
9
|
+
* avoidable.
|
|
10
|
+
*/
|
|
11
|
+
/** Every theme TEA UI ships. Themes own roles, never raw component styles. */
|
|
12
|
+
declare const THEMES: readonly ["tea", "hsm", "lutea"];
|
|
13
|
+
type ThemeName = (typeof THEMES)[number];
|
|
14
|
+
/** The theme applied when nothing is specified. */
|
|
15
|
+
declare const DEFAULT_THEME: ThemeName;
|
|
16
|
+
declare function isThemeName(value: unknown): value is ThemeName;
|
|
17
|
+
/**
|
|
18
|
+
* Three information densities, per UX-Standards §16. Admin UI is allowed to be
|
|
19
|
+
* dense; Public UI is not. Setting `data-density` on a container retunes every
|
|
20
|
+
* control inside it through custom properties, so density composes instead of
|
|
21
|
+
* multiplying into a `size` prop on every component.
|
|
22
|
+
*/
|
|
23
|
+
declare const DENSITIES: readonly ["compact", "default", "comfortable"];
|
|
24
|
+
type Density = (typeof DENSITIES)[number];
|
|
25
|
+
declare const DEFAULT_DENSITY: Density;
|
|
26
|
+
declare function isDensity(value: unknown): value is Density;
|
|
27
|
+
/**
|
|
28
|
+
* The tone vocabulary is CLOSED and has five members. It is the only way status
|
|
29
|
+
* reaches a colour — a component may not reach for a raw hex, and a product may
|
|
30
|
+
* not invent a sixth tone. `destructive` is deliberately *not* a sixth tone: it
|
|
31
|
+
* is a role that borrows the `critical` hue, because both mean "bad" and they
|
|
32
|
+
* differ in use, not in colour.
|
|
33
|
+
*/
|
|
34
|
+
declare const TONES: readonly ["positive", "info", "caution", "critical", "neutral"];
|
|
35
|
+
type Tone = (typeof TONES)[number];
|
|
36
|
+
/**
|
|
37
|
+
* The full role vocabulary a theme may assign. This union is the contract: a
|
|
38
|
+
* theme that wants a new value changes a role, it does not add a role.
|
|
39
|
+
*/
|
|
40
|
+
declare const TOKEN_ROLES: readonly ["canvas", "surface", "surface-2", "surface-3", "overlay", "fg", "fg-muted", "fg-subtle", "fg-inverse", "line", "line-strong", "brand", "primary", "primary-fg", "primary-hover", "primary-subtle", "primary-border", "accent", "accent-fg", "accent-subtle", "ring", "ring-strong", "positive", "positive-fg", "positive-subtle", "positive-border", "info", "info-fg", "info-subtle", "info-border", "caution", "caution-fg", "caution-subtle", "caution-border", "critical", "critical-fg", "critical-subtle", "critical-border", "neutral", "neutral-fg", "neutral-subtle", "neutral-border", "destructive", "destructive-fg", "destructive-subtle", "destructive-border"];
|
|
41
|
+
type TokenRole = (typeof TOKEN_ROLES)[number];
|
|
42
|
+
/**
|
|
43
|
+
* Mirrors `--breakpoint-*` in index.css. CSS cannot read a custom property
|
|
44
|
+
* inside a media query, so the scale is declared in both places and these are
|
|
45
|
+
* the values JavaScript must use.
|
|
46
|
+
*/
|
|
47
|
+
declare const BREAKPOINTS: {
|
|
48
|
+
readonly sm: "40rem";
|
|
49
|
+
readonly md: "48rem";
|
|
50
|
+
readonly lg: "64rem";
|
|
51
|
+
readonly xl: "80rem";
|
|
52
|
+
readonly "2xl": "96rem";
|
|
53
|
+
};
|
|
54
|
+
type Breakpoint = keyof typeof BREAKPOINTS;
|
|
55
|
+
declare const BREAKPOINT_PX: Record<Breakpoint, number>;
|
|
56
|
+
/**
|
|
57
|
+
* Motion tokens, per UX-Standards §23. Motion exists to explain a change, not
|
|
58
|
+
* to decorate a page. Durations are short on purpose: a UI that animates for
|
|
59
|
+
* 300ms has already cost the user more attention than the state change was
|
|
60
|
+
* worth.
|
|
61
|
+
*/
|
|
62
|
+
declare const MOTION: {
|
|
63
|
+
readonly duration: {
|
|
64
|
+
readonly instant: 0;
|
|
65
|
+
readonly fast: 120;
|
|
66
|
+
readonly normal: 180;
|
|
67
|
+
readonly slow: 280;
|
|
68
|
+
};
|
|
69
|
+
readonly ease: {
|
|
70
|
+
readonly standard: "cubic-bezier(0.2, 0, 0, 1)";
|
|
71
|
+
readonly entrance: "cubic-bezier(0.16, 1, 0.3, 1)";
|
|
72
|
+
readonly exit: "cubic-bezier(0.4, 0, 1, 1)";
|
|
73
|
+
readonly emphasized: "cubic-bezier(0.2, 0, 0, 1)";
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
interface ApplyThemeOptions {
|
|
77
|
+
/** Where to apply. Defaults to `document.documentElement`. */
|
|
78
|
+
target?: HTMLElement | null;
|
|
79
|
+
/** Density to set at the same time. Omit to leave the current value alone. */
|
|
80
|
+
density?: Density;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Apply a theme (and optionally a density) to an element.
|
|
84
|
+
*
|
|
85
|
+
* Themes are attribute-driven on purpose: `data-theme` and `data-density` are
|
|
86
|
+
* inspectable from the DOM, survive SSR, and let a consumer override a single
|
|
87
|
+
* region of the page without a re-render.
|
|
88
|
+
*/
|
|
89
|
+
declare function applyTheme(theme: ThemeName, options?: ApplyThemeOptions): void;
|
|
90
|
+
declare function applyDensity(density: Density, options?: {
|
|
91
|
+
target?: HTMLElement | null;
|
|
92
|
+
}): void;
|
|
93
|
+
declare function getTheme(target?: HTMLElement | null): ThemeName | null;
|
|
94
|
+
declare function getDensity(target?: HTMLElement | null): Density | null;
|
|
95
|
+
|
|
96
|
+
export { type ApplyThemeOptions, BREAKPOINTS, BREAKPOINT_PX, type Breakpoint, DEFAULT_DENSITY, DEFAULT_THEME, DENSITIES, type Density, MOTION, THEMES, TOKEN_ROLES, TONES, type ThemeName, type TokenRole, type Tone, applyDensity, applyTheme, getDensity, getTheme, isDensity, isThemeName };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
const THEMES = ["tea", "hsm", "lutea"];
|
|
2
|
+
const DEFAULT_THEME = "tea";
|
|
3
|
+
function isThemeName(value) {
|
|
4
|
+
return typeof value === "string" && THEMES.includes(value);
|
|
5
|
+
}
|
|
6
|
+
const DENSITIES = ["compact", "default", "comfortable"];
|
|
7
|
+
const DEFAULT_DENSITY = "default";
|
|
8
|
+
function isDensity(value) {
|
|
9
|
+
return typeof value === "string" && DENSITIES.includes(value);
|
|
10
|
+
}
|
|
11
|
+
const TONES = ["positive", "info", "caution", "critical", "neutral"];
|
|
12
|
+
const TOKEN_ROLES = [
|
|
13
|
+
"canvas",
|
|
14
|
+
"surface",
|
|
15
|
+
"surface-2",
|
|
16
|
+
"surface-3",
|
|
17
|
+
"overlay",
|
|
18
|
+
"fg",
|
|
19
|
+
"fg-muted",
|
|
20
|
+
"fg-subtle",
|
|
21
|
+
"fg-inverse",
|
|
22
|
+
"line",
|
|
23
|
+
"line-strong",
|
|
24
|
+
"brand",
|
|
25
|
+
"primary",
|
|
26
|
+
"primary-fg",
|
|
27
|
+
"primary-hover",
|
|
28
|
+
"primary-subtle",
|
|
29
|
+
"primary-border",
|
|
30
|
+
"accent",
|
|
31
|
+
"accent-fg",
|
|
32
|
+
"accent-subtle",
|
|
33
|
+
"ring",
|
|
34
|
+
"ring-strong",
|
|
35
|
+
"positive",
|
|
36
|
+
"positive-fg",
|
|
37
|
+
"positive-subtle",
|
|
38
|
+
"positive-border",
|
|
39
|
+
"info",
|
|
40
|
+
"info-fg",
|
|
41
|
+
"info-subtle",
|
|
42
|
+
"info-border",
|
|
43
|
+
"caution",
|
|
44
|
+
"caution-fg",
|
|
45
|
+
"caution-subtle",
|
|
46
|
+
"caution-border",
|
|
47
|
+
"critical",
|
|
48
|
+
"critical-fg",
|
|
49
|
+
"critical-subtle",
|
|
50
|
+
"critical-border",
|
|
51
|
+
"neutral",
|
|
52
|
+
"neutral-fg",
|
|
53
|
+
"neutral-subtle",
|
|
54
|
+
"neutral-border",
|
|
55
|
+
"destructive",
|
|
56
|
+
"destructive-fg",
|
|
57
|
+
"destructive-subtle",
|
|
58
|
+
"destructive-border"
|
|
59
|
+
];
|
|
60
|
+
const BREAKPOINTS = {
|
|
61
|
+
sm: "40rem",
|
|
62
|
+
md: "48rem",
|
|
63
|
+
lg: "64rem",
|
|
64
|
+
xl: "80rem",
|
|
65
|
+
"2xl": "96rem"
|
|
66
|
+
};
|
|
67
|
+
const BREAKPOINT_PX = {
|
|
68
|
+
sm: 640,
|
|
69
|
+
md: 768,
|
|
70
|
+
lg: 1024,
|
|
71
|
+
xl: 1280,
|
|
72
|
+
"2xl": 1536
|
|
73
|
+
};
|
|
74
|
+
const MOTION = {
|
|
75
|
+
duration: {
|
|
76
|
+
instant: 0,
|
|
77
|
+
fast: 120,
|
|
78
|
+
normal: 180,
|
|
79
|
+
slow: 280
|
|
80
|
+
},
|
|
81
|
+
ease: {
|
|
82
|
+
standard: "cubic-bezier(0.2, 0, 0, 1)",
|
|
83
|
+
entrance: "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
84
|
+
exit: "cubic-bezier(0.4, 0, 1, 1)",
|
|
85
|
+
emphasized: "cubic-bezier(0.2, 0, 0, 1)"
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
function resolveTarget(target) {
|
|
89
|
+
if (target) return target;
|
|
90
|
+
if (typeof document === "undefined") return null;
|
|
91
|
+
return document.documentElement;
|
|
92
|
+
}
|
|
93
|
+
function applyTheme(theme, options = {}) {
|
|
94
|
+
const el = resolveTarget(options.target);
|
|
95
|
+
if (!el) return;
|
|
96
|
+
el.setAttribute("data-theme", theme);
|
|
97
|
+
if (options.density) el.setAttribute("data-density", options.density);
|
|
98
|
+
}
|
|
99
|
+
function applyDensity(density, options = {}) {
|
|
100
|
+
const el = resolveTarget(options.target);
|
|
101
|
+
if (!el) return;
|
|
102
|
+
el.setAttribute("data-density", density);
|
|
103
|
+
}
|
|
104
|
+
function getTheme(target) {
|
|
105
|
+
const el = resolveTarget(target);
|
|
106
|
+
const value = el?.getAttribute("data-theme");
|
|
107
|
+
return isThemeName(value) ? value : null;
|
|
108
|
+
}
|
|
109
|
+
function getDensity(target) {
|
|
110
|
+
const el = resolveTarget(target);
|
|
111
|
+
const value = el?.getAttribute("data-density");
|
|
112
|
+
return isDensity(value) ? value : null;
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
BREAKPOINTS,
|
|
116
|
+
BREAKPOINT_PX,
|
|
117
|
+
DEFAULT_DENSITY,
|
|
118
|
+
DEFAULT_THEME,
|
|
119
|
+
DENSITIES,
|
|
120
|
+
MOTION,
|
|
121
|
+
THEMES,
|
|
122
|
+
TOKEN_ROLES,
|
|
123
|
+
TONES,
|
|
124
|
+
applyDensity,
|
|
125
|
+
applyTheme,
|
|
126
|
+
getDensity,
|
|
127
|
+
getTheme,
|
|
128
|
+
isDensity,
|
|
129
|
+
isThemeName
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * TEA UI — tokens, TypeScript surface.\n *\n * The CSS in this package is the source of truth for every value. This module\n * exists so that *code* — not just styles — can read the same vocabulary:\n * theme names, density names, the closed tone set, breakpoints and motion\n * tokens. A component that hardcodes `h-8` instead of asking for a density\n * step is a bug, and having the step available here is what makes that\n * avoidable.\n */\n\n/* -------------------------------------------------------------------------- */\n/* Themes */\n/* -------------------------------------------------------------------------- */\n\n/** Every theme TEA UI ships. Themes own roles, never raw component styles. */\nexport const THEMES = [\"tea\", \"hsm\", \"lutea\"] as const;\n\nexport type ThemeName = (typeof THEMES)[number];\n\n/** The theme applied when nothing is specified. */\nexport const DEFAULT_THEME: ThemeName = \"tea\";\n\nexport function isThemeName(value: unknown): value is ThemeName {\n return typeof value === \"string\" && (THEMES as readonly string[]).includes(value);\n}\n\n/* -------------------------------------------------------------------------- */\n/* Density */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Three information densities, per UX-Standards §16. Admin UI is allowed to be\n * dense; Public UI is not. Setting `data-density` on a container retunes every\n * control inside it through custom properties, so density composes instead of\n * multiplying into a `size` prop on every component.\n */\nexport const DENSITIES = [\"compact\", \"default\", \"comfortable\"] as const;\n\nexport type Density = (typeof DENSITIES)[number];\n\nexport const DEFAULT_DENSITY: Density = \"default\";\n\nexport function isDensity(value: unknown): value is Density {\n return typeof value === \"string\" && (DENSITIES as readonly string[]).includes(value);\n}\n\n/* -------------------------------------------------------------------------- */\n/* Tones */\n/* -------------------------------------------------------------------------- */\n\n/**\n * The tone vocabulary is CLOSED and has five members. It is the only way status\n * reaches a colour — a component may not reach for a raw hex, and a product may\n * not invent a sixth tone. `destructive` is deliberately *not* a sixth tone: it\n * is a role that borrows the `critical` hue, because both mean \"bad\" and they\n * differ in use, not in colour.\n */\nexport const TONES = [\"positive\", \"info\", \"caution\", \"critical\", \"neutral\"] as const;\n\nexport type Tone = (typeof TONES)[number];\n\n/* -------------------------------------------------------------------------- */\n/* Semantic roles */\n/* -------------------------------------------------------------------------- */\n\n/**\n * The full role vocabulary a theme may assign. This union is the contract: a\n * theme that wants a new value changes a role, it does not add a role.\n */\nexport const TOKEN_ROLES = [\n \"canvas\",\n \"surface\",\n \"surface-2\",\n \"surface-3\",\n \"overlay\",\n \"fg\",\n \"fg-muted\",\n \"fg-subtle\",\n \"fg-inverse\",\n \"line\",\n \"line-strong\",\n \"brand\",\n \"primary\",\n \"primary-fg\",\n \"primary-hover\",\n \"primary-subtle\",\n \"primary-border\",\n \"accent\",\n \"accent-fg\",\n \"accent-subtle\",\n \"ring\",\n \"ring-strong\",\n \"positive\",\n \"positive-fg\",\n \"positive-subtle\",\n \"positive-border\",\n \"info\",\n \"info-fg\",\n \"info-subtle\",\n \"info-border\",\n \"caution\",\n \"caution-fg\",\n \"caution-subtle\",\n \"caution-border\",\n \"critical\",\n \"critical-fg\",\n \"critical-subtle\",\n \"critical-border\",\n \"neutral\",\n \"neutral-fg\",\n \"neutral-subtle\",\n \"neutral-border\",\n \"destructive\",\n \"destructive-fg\",\n \"destructive-subtle\",\n \"destructive-border\",\n] as const;\n\nexport type TokenRole = (typeof TOKEN_ROLES)[number];\n\n/* -------------------------------------------------------------------------- */\n/* Breakpoints */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Mirrors `--breakpoint-*` in index.css. CSS cannot read a custom property\n * inside a media query, so the scale is declared in both places and these are\n * the values JavaScript must use.\n */\nexport const BREAKPOINTS = {\n sm: \"40rem\",\n md: \"48rem\",\n lg: \"64rem\",\n xl: \"80rem\",\n \"2xl\": \"96rem\",\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\nexport const BREAKPOINT_PX: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};\n\n/* -------------------------------------------------------------------------- */\n/* Motion */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Motion tokens, per UX-Standards §23. Motion exists to explain a change, not\n * to decorate a page. Durations are short on purpose: a UI that animates for\n * 300ms has already cost the user more attention than the state change was\n * worth.\n */\nexport const MOTION = {\n duration: {\n instant: 0,\n fast: 120,\n normal: 180,\n slow: 280,\n },\n ease: {\n standard: \"cubic-bezier(0.2, 0, 0, 1)\",\n entrance: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n exit: \"cubic-bezier(0.4, 0, 1, 1)\",\n emphasized: \"cubic-bezier(0.2, 0, 0, 1)\",\n },\n} as const;\n\n/* -------------------------------------------------------------------------- */\n/* Applying a theme */\n/* -------------------------------------------------------------------------- */\n\nexport interface ApplyThemeOptions {\n /** Where to apply. Defaults to `document.documentElement`. */\n target?: HTMLElement | null;\n /** Density to set at the same time. Omit to leave the current value alone. */\n density?: Density;\n}\n\nfunction resolveTarget(target?: HTMLElement | null): HTMLElement | null {\n if (target) return target;\n if (typeof document === \"undefined\") return null;\n return document.documentElement;\n}\n\n/**\n * Apply a theme (and optionally a density) to an element.\n *\n * Themes are attribute-driven on purpose: `data-theme` and `data-density` are\n * inspectable from the DOM, survive SSR, and let a consumer override a single\n * region of the page without a re-render.\n */\nexport function applyTheme(theme: ThemeName, options: ApplyThemeOptions = {}): void {\n const el = resolveTarget(options.target);\n if (!el) return;\n el.setAttribute(\"data-theme\", theme);\n if (options.density) el.setAttribute(\"data-density\", options.density);\n}\n\nexport function applyDensity(density: Density, options: { target?: HTMLElement | null } = {}): void {\n const el = resolveTarget(options.target);\n if (!el) return;\n el.setAttribute(\"data-density\", density);\n}\n\nexport function getTheme(target?: HTMLElement | null): ThemeName | null {\n const el = resolveTarget(target);\n const value = el?.getAttribute(\"data-theme\");\n return isThemeName(value) ? value : null;\n}\n\nexport function getDensity(target?: HTMLElement | null): Density | null {\n const el = resolveTarget(target);\n const value = el?.getAttribute(\"data-density\");\n return isDensity(value) ? value : null;\n}\n"],"mappings":"AAgBO,MAAM,SAAS,CAAC,OAAO,OAAO,OAAO;AAKrC,MAAM,gBAA2B;AAEjC,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,OAA6B,SAAS,KAAK;AAClF;AAYO,MAAM,YAAY,CAAC,WAAW,WAAW,aAAa;AAItD,MAAM,kBAA2B;AAEjC,SAAS,UAAU,OAAkC;AAC1D,SAAO,OAAO,UAAU,YAAa,UAAgC,SAAS,KAAK;AACrF;AAaO,MAAM,QAAQ,CAAC,YAAY,QAAQ,WAAW,YAAY,SAAS;AAYnE,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAaO,MAAM,cAAc;AAAA,EACzB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT;AAIO,MAAM,gBAA4C;AAAA,EACvD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT;AAYO,MAAM,SAAS;AAAA,EACpB,UAAU;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AACF;AAaA,SAAS,cAAc,QAAiD;AACtE,MAAI,OAAQ,QAAO;AACnB,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,SAAO,SAAS;AAClB;AASO,SAAS,WAAW,OAAkB,UAA6B,CAAC,GAAS;AAClF,QAAM,KAAK,cAAc,QAAQ,MAAM;AACvC,MAAI,CAAC,GAAI;AACT,KAAG,aAAa,cAAc,KAAK;AACnC,MAAI,QAAQ,QAAS,IAAG,aAAa,gBAAgB,QAAQ,OAAO;AACtE;AAEO,SAAS,aAAa,SAAkB,UAA2C,CAAC,GAAS;AAClG,QAAM,KAAK,cAAc,QAAQ,MAAM;AACvC,MAAI,CAAC,GAAI;AACT,KAAG,aAAa,gBAAgB,OAAO;AACzC;AAEO,SAAS,SAAS,QAA+C;AACtE,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,QAAQ,IAAI,aAAa,YAAY;AAC3C,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;AAEO,SAAS,WAAW,QAA6C;AACtE,QAAM,KAAK,cAAc,MAAM;AAC/B,QAAM,QAAQ,IAAI,aAAa,cAAc;AAC7C,SAAO,UAAU,KAAK,IAAI,QAAQ;AACpC;","names":[]}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--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-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-font-family:var(--tea-font-sans);--default-mono-font-family:var(--tea-font-mono)}}@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;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}*,:before,:after,::backdrop{border-color:var(--tea-line)}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;scrollbar-color:var(--tea-line-strong) var(--tea-canvas);color-scheme:dark}body{background-color:var(--tea-canvas);color:var(--tea-fg);font-family:var(--tea-font-sans);font-size:var(--tea-text-ui);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.25rem}:focus-visible{outline:2px solid var(--tea-ring);outline-offset:2px}::selection{background-color:var(--tea-accent);color:var(--tea-accent-fg)}*{scrollbar-width:thin;scrollbar-color:var(--tea-line-strong) var(--tea-canvas)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--tea-canvas)}::-webkit-scrollbar-thumb{background:var(--tea-line-strong)}::-webkit-scrollbar-thumb:hover{background:var(--tea-accent)}::-webkit-scrollbar-corner{background:var(--tea-canvas)}@media (pointer:coarse){[data-tea-touch]{min-height:var(--tea-touch-min);min-width:var(--tea-touch-min)}}@media (prefers-reduced-motion:reduce){*,:before,:after,::backdrop{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}[data-tea-motion=essential]{animation-duration:.01ms!important}}}@layer components{[data-tea-motion=essential]:after{content:"";animation:1.6s steps(4,end) infinite tea-pulse-essential}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.start-0{inset-inline-start:calc(var(--spacing) * 0)}.start-1\/2{inset-inline-start:50%}.start-2{inset-inline-start:calc(var(--spacing) * 2)}.end-0{inset-inline-end:calc(var(--spacing) * 0)}.end-2{inset-inline-end:calc(var(--spacing) * 2)}.end-3{inset-inline-end:calc(var(--spacing) * 3)}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-14{top:calc(var(--spacing) * 14)}.top-full{top:100%}.bottom-0{bottom:0}.z-50{z-index:50}.z-base{z-index:0}.z-dropdown{z-index:300}.z-header{z-index:200}.z-max{z-index:900}.z-modal{z-index:500}.z-overlay{z-index:400}.z-popover{z-index:600}.z-raised{z-index:10}.z-sticky{z-index:100}.z-toast{z-index:700}.z-tooltip{z-index:800}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.my-8{margin-block:calc(var(--spacing) * 8)}.-ms-1{margin-inline-start:calc(var(--spacing) * -1)}.-ms-px{margin-inline-start:-1px}.ms-0{margin-inline-start:0}.ms-1{margin-inline-start:var(--spacing)}.ms-5{margin-inline-start:calc(var(--spacing) * 5)}.ms-auto{margin-inline-start:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-\[calc\(var\(--tea-control-h\)\+0\.5rem\)\]{width:calc(var(--tea-control-h) + .5rem);height:calc(var(--tea-control-h) + .5rem)}.size-\[calc\(var\(--tea-control-h\)-0\.25rem\)\]{width:calc(var(--tea-control-h) - .25rem);height:calc(var(--tea-control-h) - .25rem)}.size-\[length\:var\(--tea-control-h\)\]{width:var(--tea-control-h);height:var(--tea-control-h)}.size-full{width:100%;height:100%}.control{height:var(--tea-control-h);padding-inline:var(--tea-control-px)}.control-h{height:var(--tea-control-h)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[calc\(100dvh-3\.5rem\)\]{height:calc(100dvh - 3.5rem)}.h-\[calc\(var\(--tea-control-h\)\+0\.25rem\)\]{height:calc(var(--tea-control-h) + .25rem)}.h-\[calc\(var\(--tea-control-h\)-0\.25rem\)\]{height:calc(var(--tea-control-h) - .25rem)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[--radix-select-content-available-height\]{max-height:--radix-select-content-available-height}.max-h-\[80dvh\]{max-height:80dvh}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[calc\(100dvh-4rem\)\]{max-height:calc(100dvh - 4rem)}.max-h-\[var\(--radix-select-content-available-height\)\]{max-height:var(--radix-select-content-available-height)}.min-h-0{min-height:0}.min-h-\[60dvh\]{min-height:60dvh}.min-h-dvh{min-height:100dvh}.w-1\/3{width:33.3333%}.w-2\/3{width:66.6667%}.w-7{width:calc(var(--spacing) * 7)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[min\(20rem\,85vw\)\]{width:min(20rem,85vw)}.w-\[min\(24rem\,90vw\)\]{width:min(24rem,90vw)}.w-\[min\(40rem\,90vw\)\]{width:min(40rem,90vw)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[100rem\]{max-width:100rem}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-\[36rem\]{min-width:36rem}.min-w-\[40rem\]{min-width:40rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.origin-top{transform-origin:top}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.field-gap{gap:var(--tea-field-gap)}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-ui{gap:var(--tea-gap)}.section-gap{gap:var(--tea-section-gap)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-none{border-radius:0}.rounded-pill{border-radius:9999px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-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-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-caution{border-color:var(--tea-caution)}.border-caution-border{border-color:var(--tea-caution-border)}.border-critical{border-color:var(--tea-critical)}.border-critical-border{border-color:var(--tea-critical-border)}.border-destructive{border-color:var(--tea-destructive)}.border-info{border-color:var(--tea-info)}.border-info-border{border-color:var(--tea-info-border)}.border-line{border-color:var(--tea-line)}.border-line-strong{border-color:var(--tea-line-strong)}.border-line\/50{border-color:var(--tea-line)}@supports (color:color-mix(in lab, red, red)){.border-line\/50{border-color:color-mix(in oklab, var(--tea-line) 50%, transparent)}}.border-neutral-border{border-color:var(--tea-neutral-border)}.border-positive{border-color:var(--tea-positive)}.border-positive-border{border-color:var(--tea-positive-border)}.border-primary{border-color:var(--tea-primary)}.border-primary-border{border-color:var(--tea-primary-border)}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--tea-accent)}.bg-accent-subtle{background-color:var(--tea-accent-subtle)}.bg-canvas{background-color:var(--tea-canvas)}.bg-caution{background-color:var(--tea-caution)}.bg-caution-subtle{background-color:var(--tea-caution-subtle)}.bg-critical{background-color:var(--tea-critical)}.bg-critical-subtle{background-color:var(--tea-critical-subtle)}.bg-current{background-color:currentColor}.bg-destructive{background-color:var(--tea-destructive)}.bg-fg{background-color:var(--tea-fg)}.bg-fg-muted{background-color:var(--tea-fg-muted)}.bg-info{background-color:var(--tea-info)}.bg-info-subtle{background-color:var(--tea-info-subtle)}.bg-line{background-color:var(--tea-line)}.bg-neutral{background-color:var(--tea-neutral)}.bg-neutral-subtle{background-color:var(--tea-neutral-subtle)}.bg-overlay{background-color:var(--tea-overlay)}.bg-positive{background-color:var(--tea-positive)}.bg-positive-subtle{background-color:var(--tea-positive-subtle)}.bg-primary{background-color:var(--tea-primary)}.bg-primary-fg{background-color:var(--tea-primary-fg)}.bg-primary-subtle{background-color:var(--tea-primary-subtle)}.bg-surface{background-color:var(--tea-surface)}.bg-surface-2{background-color:var(--tea-surface-2)}.bg-surface-3{background-color:var(--tea-surface-3)}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.pad-card{padding:var(--tea-pad-card)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-\[calc\(var\(--tea-control-px\)\+0\.25rem\)\]{padding-inline:calc(var(--tea-control-px) + .25rem)}.px-\[calc\(var\(--tea-control-px\)-0\.25rem\)\]{padding-inline:calc(var(--tea-control-px) - .25rem)}.px-\[length\:var\(--tea-control-px\)\]{padding-inline:var(--tea-control-px)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.py-20{padding-block:calc(var(--spacing) * 20)}.ps-2{padding-inline-start:calc(var(--spacing) * 2)}.ps-3{padding-inline-start:calc(var(--spacing) * 3)}.ps-4{padding-inline-start:calc(var(--spacing) * 4)}.ps-8{padding-inline-start:calc(var(--spacing) * 8)}.pe-1{padding-inline-end:var(--spacing)}.pe-2{padding-inline-end:calc(var(--spacing) * 2)}.pe-4{padding-inline-end:calc(var(--spacing) * 4)}.pe-8{padding-inline-end:calc(var(--spacing) * 8)}.pe-12{padding-inline-end:calc(var(--spacing) * 12)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-\[10vh\]{padding-top:10vh}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-start{text-align:start}.align-\[-2px\]{vertical-align:-2px}.align-top{vertical-align:top}.font-mono{font-family:var(--tea-font-mono)}.text-label{font-size:.6875rem;line-height:var(--tw-leading,.875rem);letter-spacing:var(--tw-tracking,.08em);font-weight:var(--tw-font-weight,600)}.text-display{font-size:2rem;line-height:var(--tw-leading,2.5rem);letter-spacing:var(--tw-tracking,-.02em)}.text-hero{font-size:3rem;line-height:var(--tw-leading,1.1);letter-spacing:var(--tw-tracking,-.03em)}.text-section{font-size:1.5rem;line-height:var(--tw-leading,2rem);letter-spacing:var(--tw-tracking,-.01em)}.text-body{font-size:1rem;line-height:var(--tw-leading,1.625rem)}.text-lead{font-size:1.125rem;line-height:var(--tw-leading,1.75rem)}.text-micro{font-size:.75rem;line-height:var(--tw-leading,1rem)}.text-mono{font-size:.8125rem;line-height:var(--tw-leading,1.25rem)}.text-title{font-size:1.25rem;line-height:var(--tw-leading,1.75rem)}.text-ui{font-size:var(--tea-text-ui);font-size:.875rem;line-height:1.25rem;line-height:var(--tw-leading,1.25rem)}.text-\[9px\]{font-size:9px}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:700;font-weight:700}.font-medium{--tw-font-weight:500;font-weight:500}.font-normal{--tw-font-weight:400;font-weight:400}.font-semibold{--tw-font-weight:600;font-weight:600}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-wrap{text-wrap:wrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--tea-accent)}.text-accent-fg{color:var(--tea-accent-fg)}.text-caution{color:var(--tea-caution)}.text-caution-fg{color:var(--tea-caution-fg)}.text-critical{color:var(--tea-critical)}.text-critical-fg{color:var(--tea-critical-fg)}.text-current{color:currentColor}.text-destructive-fg{color:var(--tea-destructive-fg)}.text-fg{color:var(--tea-fg)}.text-fg-inverse{color:var(--tea-fg-inverse)}.text-fg-muted{color:var(--tea-fg-muted)}.text-fg-subtle{color:var(--tea-fg-subtle)}.text-info{color:var(--tea-info)}.text-info-fg{color:var(--tea-info-fg)}.text-neutral-fg{color:var(--tea-neutral-fg)}.text-positive{color:var(--tea-positive)}.text-positive-fg{color:var(--tea-positive-fg)}.text-primary{color:var(--tea-primary)}.text-primary-fg{color:var(--tea-primary-fg)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.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}.underline-offset-4{text-underline-offset:4px}.accent-fg{accent-color:var(--tea-fg)}.opacity-50{opacity:.5}.shadow-modal{--tw-shadow:var(--tea-shadow-modal);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-overlay{--tw-shadow:var(--tea-shadow-overlay);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}.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,)}.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(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.transition-\[background-color\,border-color\,box-shadow\]{transition-property:background-color,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.transition-\[background-color\,border-color\,color\,box-shadow\,transform\]{transition-property:background-color,border-color,color,box-shadow,transform;transition-timing-function:var(--tw-ease,var(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.transition-\[background-color\,border-color\,color\,box-shadow\]{transition-property:background-color,border-color,color,box-shadow;transition-timing-function:var(--tw-ease,var(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.transition-\[background-color\,border-color\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.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(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--tea-ease-standard));transition-duration:var(--tw-duration,.18s)}.duration-\[120ms\]{--tw-duration:.12s;transition-duration:.12s}.ease-standard{--tw-ease:cubic-bezier(.2, 0, 0, 1);transition-timing-function:cubic-bezier(.2,0,0,1)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[--tea-control-icon\:0\.875rem\]{--tea-control-icon:.875rem}.\[--tea-control-icon\:1\.25rem\]{--tea-control-icon:1.25rem}.\[--tea-control-icon\:1rem\]{--tea-control-icon:1rem}.paused{animation-play-state:paused}.running{animation-play-state:running}.group-open\:rotate-45:is(:where(.group):is([open],:popover-open,:open) *){rotate:45deg}.group-focus-visible\:ring-2:is(:where(.group):focus-visible *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + 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)}.group-focus-visible\:ring-ring:is(:where(.group):focus-visible *){--tw-ring-color:var(--tea-ring)}.group-data-\[state\=checked\]\:scale-100:is(:where(.group)[data-state=checked] *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-data-\[state\=checked\]\:border-primary:is(:where(.group)[data-state=checked] *){border-color:var(--tea-primary)}.group-data-\[state\=checked\]\:bg-primary:is(:where(.group)[data-state=checked] *){background-color:var(--tea-primary)}.group-data-\[state\=checked\]\:font-medium:is(:where(.group)[data-state=checked] *){--tw-font-weight:500;font-weight:500}.group-data-\[state\=complete\]\:border-positive:is(:where(.group)[data-state=complete] *){border-color:var(--tea-positive)}.group-data-\[state\=complete\]\:bg-positive-subtle:is(:where(.group)[data-state=complete] *){background-color:var(--tea-positive-subtle)}.group-data-\[state\=complete\]\:text-positive:is(:where(.group)[data-state=complete] *){color:var(--tea-positive)}.group-data-\[state\=current\]\:border-primary:is(:where(.group)[data-state=current] *){border-color:var(--tea-primary)}.group-data-\[state\=current\]\:text-primary:is(:where(.group)[data-state=current] *){color:var(--tea-primary)}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.marker\:text-fg-subtle ::marker{color:var(--tea-fg-subtle)}.marker\:text-fg-subtle::marker{color:var(--tea-fg-subtle)}.marker\:text-fg-subtle ::-webkit-details-marker{color:var(--tea-fg-subtle)}.marker\:text-fg-subtle::-webkit-details-marker{color:var(--tea-fg-subtle)}.marker\:content-none ::marker{--tw-content:none;content:none}.marker\:content-none::marker{--tw-content:none;content:none}.marker\:content-none ::-webkit-details-marker{--tw-content:none;content:none}.marker\:content-none::-webkit-details-marker{--tw-content:none;content:none}.file\:me-3::file-selector-button{margin-inline-end:calc(var(--spacing) * 3)}.file\:rounded-none::file-selector-button{border-radius:0}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-ui::file-selector-button{font-size:var(--tea-text-ui);font-size:.875rem;line-height:1.25rem;line-height:var(--tw-leading,1.25rem)}.file\:font-medium::file-selector-button{--tw-font-weight:500;font-weight:500}.placeholder\:text-fg-subtle::placeholder{color:var(--tea-fg-subtle)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing) * 0)}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing) * .5)}.before\:bg-caution:before{content:var(--tw-content);background-color:var(--tea-caution)}.before\:bg-critical:before{content:var(--tw-content);background-color:var(--tea-critical)}.before\:bg-fg-muted:before{content:var(--tw-content);background-color:var(--tea-fg-muted)}.before\:bg-info:before{content:var(--tw-content);background-color:var(--tea-info)}.before\:bg-positive:before{content:var(--tw-content);background-color:var(--tea-positive)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.read-only\:cursor-default:read-only{cursor:default}.read-only\:bg-surface-2:read-only{background-color:var(--tea-surface-2)}.read-only\:text-fg-muted:read-only{color:var(--tea-fg-muted)}.focus-within\:border-ring-strong:focus-within{border-color:var(--tea-ring-strong)}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + 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)}.focus-within\:ring-ring:focus-within{--tw-ring-color:var(--tea-ring)}@media (hover:hover){.hover\:border-line-strong:hover{border-color:var(--tea-line-strong)}.hover\:border-primary-hover:hover{border-color:var(--tea-primary-hover)}.hover\:bg-line:hover{background-color:var(--tea-line)}.hover\:bg-primary-hover:hover{background-color:var(--tea-primary-hover)}.hover\:bg-primary-subtle\/80:hover{background-color:var(--tea-primary-subtle)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary-subtle\/80:hover{background-color:color-mix(in oklab, var(--tea-primary-subtle) 80%, transparent)}}.hover\:bg-surface-2:hover{background-color:var(--tea-surface-2)}.hover\:bg-surface-3:hover{background-color:var(--tea-surface-3)}.hover\:text-fg:hover{color:var(--tea-fg)}.hover\:text-primary:hover{color:var(--tea-primary)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);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,)}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:fixed:focus{position:fixed}.focus\:start-3:focus{inset-inline-start:calc(var(--spacing) * 3)}.focus\:top-3:focus{top:calc(var(--spacing) * 3)}.focus\:border:focus{border-style:var(--tw-border-style);border-width:1px}.focus\:border-primary:focus{border-color:var(--tea-primary)}.focus\:bg-primary:focus{background-color:var(--tea-primary)}.focus\:px-3:focus{padding-inline:calc(var(--spacing) * 3)}.focus\:py-2:focus{padding-block:calc(var(--spacing) * 2)}.focus\:text-ui:focus{font-size:var(--tea-text-ui);font-size:.875rem;line-height:1.25rem;line-height:var(--tw-leading,1.25rem)}.focus\:font-medium:focus{--tw-font-weight:500;font-weight:500}.focus\:text-primary-fg:focus{color:var(--tea-primary-fg)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ring-strong:focus-visible{border-color:var(--tea-ring-strong)}.focus-visible\:border-transparent:focus-visible{border-color:#0000}.focus-visible\:bg-accent-subtle:focus-visible{background-color:var(--tea-accent-subtle)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + 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)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--tea-ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-line:disabled{border-color:var(--tea-line)}.disabled\:bg-surface-2:disabled{background-color:var(--tea-surface-2)}.disabled\:text-fg-subtle:disabled{color:var(--tea-fg-subtle)}.disabled\:opacity-50:disabled{opacity:.5}.has-\[svg\]\:size-\[length\:var\(--tea-control-icon\)\]:has(:is(svg)){width:var(--tea-control-icon);height:var(--tea-control-icon)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-critical[aria-invalid=true]{border-color:var(--tea-critical)}.aria-invalid\:bg-critical-subtle[aria-invalid=true]{background-color:var(--tea-critical-subtle)}.aria-\[current\=page\]\:border-primary[aria-current=page]{border-color:var(--tea-primary)}.aria-\[current\=page\]\:text-primary[aria-current=page]{color:var(--tea-primary)}.aria-\[invalid\=true\]\:border-critical[aria-invalid=true]{border-color:var(--tea-critical)}.aria-\[invalid\=true\]\:ring-0[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.aria-\[invalid\=true\]\:ring-critical[aria-invalid=true]{--tw-ring-color:var(--tea-critical)}.data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.data-disabled\:opacity-50[data-disabled]{opacity:.5}.data-\[active\]\:bg-accent-subtle[data-active]{background-color:var(--tea-accent-subtle)}.data-\[active\]\:text-fg[data-active]{color:var(--tea-fg)}.data-\[active\=true\]\:bg-accent-subtle[data-active=true]{background-color:var(--tea-accent-subtle)}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:cursor-not-allowed[data-disabled=true]{cursor:not-allowed}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[highlighted\]\:bg-accent-subtle[data-highlighted]{background-color:var(--tea-accent-subtle)}.data-\[highlighted\]\:bg-critical-subtle[data-highlighted]{background-color:var(--tea-critical-subtle)}.data-\[highlighted\]\:text-critical[data-highlighted]{color:var(--tea-critical)}.data-\[highlighted\]\:text-fg[data-highlighted]{color:var(--tea-fg)}.data-\[hover\]\:border-line-strong[data-hover]{border-color:var(--tea-line-strong)}.data-\[hover\]\:bg-surface-3[data-hover]{background-color:var(--tea-surface-3)}.data-\[orientation\=horizontal\]\:h-1[data-orientation=horizontal]{height:var(--spacing)}.data-\[orientation\=horizontal\]\:h-4[data-orientation=horizontal]{height:calc(var(--spacing) * 4)}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-1[data-orientation=vertical]{width:var(--spacing)}.data-\[orientation\=vertical\]\:w-4[data-orientation=vertical]{width:calc(var(--spacing) * 4)}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[orientation\=vertical\]\:border-s-2[data-orientation=vertical]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.data-\[orientation\=vertical\]\:border-e[data-orientation=vertical]{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.data-\[orientation\=vertical\]\:border-e-0[data-orientation=vertical]{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.data-\[orientation\=vertical\]\:border-b-0[data-orientation=vertical]{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.data-\[orientation\=vertical\]\:text-start[data-orientation=vertical]{text-align:start}.data-\[placeholder\]\:text-fg-muted[data-placeholder]{color:var(--tea-fg-muted)}.data-\[state\=active\]\:border-primary[data-state=active]{border-color:var(--tea-primary)}.data-\[state\=active\]\:font-medium[data-state=active]{--tw-font-weight:500;font-weight:500}.data-\[state\=active\]\:text-primary[data-state=active]{color:var(--tea-primary)}.data-\[state\=checked\]\:translate-x-3[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--tea-primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--tea-primary)}.data-\[state\=checked\]\:bg-primary-fg[data-state=checked]{background-color:var(--tea-primary-fg)}.data-\[state\=checked\]\:text-primary[data-state=checked]{color:var(--tea-primary)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x:calc(1*100%)}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open]{--tw-enter-opacity:0}.data-\[state\=delayed-open\]\:zoom-in-95[data-state=delayed-open]{--tw-enter-scale:.95}.data-\[state\=indeterminate\]\:border-primary[data-state=indeterminate]{border-color:var(--tea-primary)}.data-\[state\=indeterminate\]\:bg-primary[data-state=indeterminate]{background-color:var(--tea-primary)}.data-\[state\=on\]\:border-primary[data-state=on]{border-color:var(--tea-primary)}.data-\[state\=on\]\:bg-primary-subtle[data-state=on]{background-color:var(--tea-primary-subtle)}.data-\[state\=on\]\:text-primary[data-state=on]{color:var(--tea-primary)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-right-full[data-state=open]{--tw-enter-translate-x:calc(1*100%)}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (min-width:40rem){.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}}@media (min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[2fr_repeat\(auto-fit\,minmax\(9rem\,1fr\)\)\]{grid-template-columns:2fr repeat(auto-fit,minmax(9rem,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:py-6{padding-block:calc(var(--spacing) * 6)}}@media (min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (pointer:coarse){.pointer-coarse\:text-body{font-size:1rem;line-height:var(--tw-leading,1.625rem)}}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-fg-muted svg{color:var(--tea-fg-muted)}.\[\&\>\*\+\*\]\:-ms-px>*+*{margin-inline-start:-1px}.\[\&\>\*\+\*\]\:-mt-px>*+*{margin-top:-1px}.\[\&\>svg\]\:mt-0\.5>svg{margin-top:calc(var(--spacing) * .5)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root,[data-theme=tea]{color-scheme:dark;--tea-canvas:#111318;--tea-surface:#171a21;--tea-surface-2:#1e222b;--tea-surface-3:#232733;--tea-overlay:#000000c7;--tea-fg:#e8e6e0;--tea-fg-muted:#a3a096;--tea-fg-subtle:#83807a;--tea-fg-inverse:#111318;--tea-line:#343a46;--tea-line-strong:#4e5666;--tea-brand:#f2c012;--tea-primary:#f2c012;--tea-primary-fg:#111318;--tea-primary-hover:#f7c72e;--tea-primary-subtle:#f2c0121f;--tea-primary-border:#f2c01266;--tea-accent:#f2c012;--tea-accent-fg:#111318;--tea-accent-subtle:#f2c0121a;--tea-ring:#f2c012;--tea-ring-strong:#ffd84d;--tea-positive:#4ade80;--tea-positive-fg:#0b1f14;--tea-positive-subtle:#4ade801f;--tea-positive-border:#4ade8066;--tea-info:#60a5fa;--tea-info-fg:#0a1729;--tea-info-subtle:#60a5fa1f;--tea-info-border:#60a5fa66;--tea-caution:#fb923c;--tea-caution-fg:#241104;--tea-caution-subtle:#fb923c1f;--tea-caution-border:#fb923c66;--tea-critical:#ff6b5e;--tea-critical-fg:#240705;--tea-critical-subtle:#ff6b5e1f;--tea-critical-border:#ff6b5e66;--tea-neutral:#a3a096;--tea-neutral-fg:#111318;--tea-neutral-subtle:#a3a0961f;--tea-neutral-border:#a3a09666;--tea-destructive:var(--tea-critical);--tea-destructive-fg:var(--tea-critical-fg);--tea-destructive-subtle:var(--tea-critical-subtle);--tea-destructive-border:var(--tea-critical-border);--tea-density:default;--tea-font-sans:"Jost Variable", "Jost", "Futura", ui-sans-serif, system-ui, sans-serif;--tea-font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;--tea-font-display:"Lilita One", "Jost Variable", ui-sans-serif, system-ui, sans-serif;--tea-shadow-raised:0 1px 3px #0000004d;--tea-shadow-overlay:6px 6px 0 0 #00000080;--tea-shadow-modal:8px 8px 0 0 #00000080;--tea-shadow-inset:inset 0 1px 0 0 #ffffff0a}[data-theme=hsm]{color-scheme:dark;--tea-canvas:#0e1116;--tea-surface:#161a21;--tea-surface-2:#1c212a;--tea-surface-3:#232935;--tea-overlay:#000c;--tea-fg:#e9eaee;--tea-fg-muted:#a1a8b4;--tea-fg-subtle:#808894;--tea-fg-inverse:#0e1116;--tea-line:#2f3743;--tea-line-strong:#49525f;--tea-brand:#e0332e;--tea-primary:#f2c012;--tea-primary-fg:#0e1116;--tea-primary-hover:#f7c72e;--tea-primary-subtle:#f2c0121f;--tea-primary-border:#f2c01266;--tea-accent:#f2c012;--tea-accent-fg:#0e1116;--tea-accent-subtle:#f2c0121a;--tea-ring:#f2c012;--tea-ring-strong:#ffd84d;--tea-positive:#4ade80;--tea-positive-fg:#0b1f14;--tea-positive-subtle:#4ade801f;--tea-positive-border:#4ade8066;--tea-info:#60a5fa;--tea-info-fg:#0a1729;--tea-info-subtle:#60a5fa1f;--tea-info-border:#60a5fa66;--tea-caution:#fb923c;--tea-caution-fg:#241104;--tea-caution-subtle:#fb923c1f;--tea-caution-border:#fb923c66;--tea-critical:#f87171;--tea-critical-fg:#240705;--tea-critical-subtle:#f871711f;--tea-critical-border:#f8717166;--tea-neutral:#a1a8b4;--tea-neutral-fg:#0e1116;--tea-neutral-subtle:#a1a8b41f;--tea-neutral-border:#a1a8b466;--tea-destructive:var(--tea-critical);--tea-destructive-fg:var(--tea-critical-fg);--tea-destructive-subtle:var(--tea-critical-subtle);--tea-destructive-border:var(--tea-critical-border);--tea-density:default;--tea-font-sans:"Jost Variable", "Jost", "Futura", ui-sans-serif, system-ui, sans-serif;--tea-font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;--tea-font-display:"Lilita One", "Jost Variable", ui-sans-serif, system-ui, sans-serif;--tea-shadow-raised:0 1px 3px #00000059;--tea-shadow-overlay:6px 6px 0 0 #0000008c;--tea-shadow-modal:8px 8px 0 0 #0000008c;--tea-shadow-inset:inset 0 1px 0 0 #ffffff0a}[data-theme=lutea]{color-scheme:dark;--tea-canvas:#121317;--tea-surface:#1a1b1f;--tea-surface-2:#212329;--tea-surface-3:#2a2c33;--tea-overlay:#000000c7;--tea-fg:#ede9e1;--tea-fg-muted:#aba69b;--tea-fg-subtle:#8a857b;--tea-fg-inverse:#121317;--tea-line:#383b44;--tea-line-strong:#525663;--tea-brand:#f2c012;--tea-primary:#f2c012;--tea-primary-fg:#121317;--tea-primary-hover:#f7c72e;--tea-primary-subtle:#f2c0121f;--tea-primary-border:#f2c01266;--tea-accent:#f2c012;--tea-accent-fg:#121317;--tea-accent-subtle:#f2c0121a;--tea-ring:#f2c012;--tea-ring-strong:#ffd84d;--tea-positive:#4fc97e;--tea-positive-fg:#0a1f13;--tea-positive-subtle:#4fc97e1f;--tea-positive-border:#4fc97e66;--tea-info:#5b8def;--tea-info-fg:#08142b;--tea-info-subtle:#5b8def1f;--tea-info-border:#5b8def66;--tea-caution:#f2921e;--tea-caution-fg:#1f1204;--tea-caution-subtle:#f2921e1f;--tea-caution-border:#f2921e66;--tea-critical:#f0726a;--tea-critical-fg:#230604;--tea-critical-subtle:#f0726a1f;--tea-critical-border:#f0726a66;--tea-neutral:#aba69b;--tea-neutral-fg:#121317;--tea-neutral-subtle:#aba69b1f;--tea-neutral-border:#aba69b66;--tea-destructive:var(--tea-critical);--tea-destructive-fg:var(--tea-critical-fg);--tea-destructive-subtle:var(--tea-critical-subtle);--tea-destructive-border:var(--tea-critical-border);--tea-density:compact;--tea-font-sans:"Jost Variable", "Jost", "Futura", ui-sans-serif, system-ui, sans-serif;--tea-font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;--tea-font-display:"Lilita One", "Jost Variable", ui-sans-serif, system-ui, sans-serif;--tea-shadow-raised:0 1px 3px #00000047;--tea-shadow-overlay:6px 6px 0 0 #00000080;--tea-shadow-modal:8px 8px 0 0 #00000080;--tea-shadow-inset:inset 0 1px 0 0 #ffffff0d}:root,[data-density=default]{--tea-control-h:2rem;--tea-control-px:.75rem;--tea-control-icon:1rem;--tea-row-h:2.25rem;--tea-cell-py:.5rem;--tea-cell-px:.75rem;--tea-gap:.75rem;--tea-section-gap:1.5rem;--tea-field-gap:1.25rem;--tea-pad-card:1.25rem;--tea-text-ui:.875rem;--tea-text-label:.6875rem;--tea-touch-min:2.75rem}[data-density=compact]{--tea-control-h:1.75rem;--tea-control-px:.625rem;--tea-control-icon:.875rem;--tea-row-h:2rem;--tea-cell-py:.375rem;--tea-cell-px:.625rem;--tea-gap:.5rem;--tea-section-gap:1.25rem;--tea-field-gap:1rem;--tea-pad-card:1rem;--tea-text-ui:.8125rem;--tea-text-label:.6875rem;--tea-touch-min:2.75rem}[data-density=comfortable]{--tea-control-h:2.25rem;--tea-control-px:.875rem;--tea-control-icon:1.125rem;--tea-row-h:2.75rem;--tea-cell-py:.75rem;--tea-cell-px:.875rem;--tea-gap:1rem;--tea-section-gap:2rem;--tea-field-gap:1.5rem;--tea-pad-card:1.5rem;--tea-text-ui:.9375rem;--tea-text-label:.75rem;--tea-touch-min:2.75rem}@keyframes tea-pulse-essential{0%{opacity:.35}50%{opacity:1}to{opacity:.35}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@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-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tea-ui/tokens",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Design tokens: colour, spacing, radii, motion, density, and the themes.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"*.css"
|
|
9
|
+
],
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./styles.css": "./src/index.css",
|
|
22
|
+
"./themes.css": "./src/themes.css",
|
|
23
|
+
"./package.json": "./package.json",
|
|
24
|
+
"./fonts.css": "./dist/fonts.css"
|
|
25
|
+
},
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"module": "./dist/index.js",
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsup && node ../../scripts/fix-esm-extensions.mjs tokens && npm run build:css",
|
|
33
|
+
"build:css": "tailwindcss -i ./src/index.css -o ./dist/styles.css --minify && node ../../scripts/build-fonts.mjs",
|
|
34
|
+
"prepublishOnly": "node ../../scripts/prepublish-guard.mjs"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@tailwindcss/cli": "^4.1.14",
|
|
38
|
+
"tailwindcss": "^4.1.14",
|
|
39
|
+
"tw-animate-css": "^1.4.0"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
43
|
+
"@fontsource-variable/jost": "^5.3.0",
|
|
44
|
+
"@fontsource/lilita-one": "^5.3.0"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"design-tokens",
|
|
48
|
+
"css",
|
|
49
|
+
"theme",
|
|
50
|
+
"dark-mode",
|
|
51
|
+
"tailwind",
|
|
52
|
+
"tea-ui",
|
|
53
|
+
"design-system"
|
|
54
|
+
],
|
|
55
|
+
"author": "landnevermore",
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "git+https://github.com/landnevermore/TEAui.git",
|
|
59
|
+
"directory": "packages/tokens"
|
|
60
|
+
},
|
|
61
|
+
"homepage": "https://landnevermore.github.io/TEAui/docs/",
|
|
62
|
+
"bugs": {
|
|
63
|
+
"url": "https://github.com/landnevermore/TEAui/issues"
|
|
64
|
+
}
|
|
65
|
+
}
|