@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.
Files changed (30) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/dist/files/jetbrains-mono-cyrillic-ext-wght-italic.woff2 +0 -0
  4. package/dist/files/jetbrains-mono-cyrillic-ext-wght-normal.woff2 +0 -0
  5. package/dist/files/jetbrains-mono-cyrillic-wght-italic.woff2 +0 -0
  6. package/dist/files/jetbrains-mono-cyrillic-wght-normal.woff2 +0 -0
  7. package/dist/files/jetbrains-mono-greek-wght-italic.woff2 +0 -0
  8. package/dist/files/jetbrains-mono-greek-wght-normal.woff2 +0 -0
  9. package/dist/files/jetbrains-mono-latin-ext-wght-italic.woff2 +0 -0
  10. package/dist/files/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  11. package/dist/files/jetbrains-mono-latin-wght-italic.woff2 +0 -0
  12. package/dist/files/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  13. package/dist/files/jetbrains-mono-vietnamese-wght-italic.woff2 +0 -0
  14. package/dist/files/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
  15. package/dist/files/jost-cyrillic-wght-italic.woff2 +0 -0
  16. package/dist/files/jost-cyrillic-wght-normal.woff2 +0 -0
  17. package/dist/files/jost-latin-ext-wght-italic.woff2 +0 -0
  18. package/dist/files/jost-latin-ext-wght-normal.woff2 +0 -0
  19. package/dist/files/jost-latin-wght-italic.woff2 +0 -0
  20. package/dist/files/jost-latin-wght-normal.woff2 +0 -0
  21. package/dist/files/lilita-one-latin-400-normal.woff +0 -0
  22. package/dist/files/lilita-one-latin-400-normal.woff2 +0 -0
  23. package/dist/files/lilita-one-latin-ext-400-normal.woff +0 -0
  24. package/dist/files/lilita-one-latin-ext-400-normal.woff2 +0 -0
  25. package/dist/fonts.css +108 -0
  26. package/dist/index.d.ts +96 -0
  27. package/dist/index.js +131 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/styles.css +2 -0
  30. 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).
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
+ }
@@ -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":[]}
@@ -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
+ }