tyrell-components 1.0.0-TC52 → 1.0.0-TC53
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/css/tyrell-theme.css +25 -2
- package/css/tyrell.css +4 -0
- package/dist/tyrell-colors-static.css +1 -316
- package/dist/tyrell-theme.css +1 -1443
- package/dist/tyrell.css +1 -1390
- package/dist/tyrell.js +1 -1
- package/lib/base/ty-component.js +196 -196
- package/lib/components/button.d.ts +1 -1
- package/lib/components/button.js +260 -259
- package/lib/components/calendar-month.d.ts +2 -2
- package/lib/components/calendar-month.js +426 -416
- package/lib/components/calendar-navigation.js +238 -238
- package/lib/components/calendar.js +605 -602
- package/lib/components/checkbox.d.ts +1 -1
- package/lib/components/checkbox.js +273 -272
- package/lib/components/copy.d.ts +1 -1
- package/lib/components/copy.js +279 -278
- package/lib/components/date-picker.d.ts +1 -1
- package/lib/components/date-picker.js +1103 -1108
- package/lib/components/file-upload.js +404 -404
- package/lib/components/icon.js +141 -141
- package/lib/components/input.d.ts +1 -1
- package/lib/components/input.js +593 -596
- package/lib/components/modal.js +319 -319
- package/lib/components/option.js +167 -167
- package/lib/components/popup.js +233 -233
- package/lib/components/radio.d.ts +2 -2
- package/lib/components/radio.js +407 -406
- package/lib/components/resize-observer.js +67 -67
- package/lib/components/scroll-container.js +294 -294
- package/lib/components/select.d.ts +1 -1
- package/lib/components/select.js +1524 -1532
- package/lib/components/selected-tags.js +184 -184
- package/lib/components/step.js +62 -62
- package/lib/components/switch.d.ts +1 -1
- package/lib/components/switch.js +214 -213
- package/lib/components/tab.js +62 -62
- package/lib/components/tabs.js +507 -507
- package/lib/components/tag.d.ts +1 -1
- package/lib/components/tag.js +236 -235
- package/lib/components/textarea.d.ts +1 -1
- package/lib/components/textarea.js +457 -456
- package/lib/components/tooltip.js +283 -283
- package/lib/components/wizard.js +384 -384
- package/lib/icons/heroicons/micro.js +392 -392
- package/lib/icons/heroicons/mini.js +382 -382
- package/lib/icons/heroicons/outline.js +337 -337
- package/lib/icons/heroicons/solid.js +407 -407
- package/lib/icons/lucide.js +22843 -22843
- package/lib/icons/material/filled.js +9653 -9653
- package/lib/icons/material/outlined.js +10271 -10271
- package/lib/icons/material/round.js +10495 -10495
- package/lib/icons/material/sharp.js +9905 -9905
- package/lib/icons/material/two-tone.js +12792 -12792
- package/lib/index.js +21 -21
- package/lib/styles/button.js +176 -288
- package/lib/styles/calendar-month.js +123 -183
- package/lib/styles/calendar-navigation.js +60 -79
- package/lib/styles/calendar.js +8 -9
- package/lib/styles/checkbox.js +45 -72
- package/lib/styles/copy.js +67 -91
- package/lib/styles/custom-scrollbar.js +80 -100
- package/lib/styles/date-picker.js +261 -331
- package/lib/styles/field-size.d.ts +6 -0
- package/lib/styles/field-size.js +91 -0
- package/lib/styles/file-upload.js +139 -169
- package/lib/styles/icon.js +92 -156
- package/lib/styles/input.js +125 -241
- package/lib/styles/modal.js +67 -102
- package/lib/styles/option.d.ts +1 -1
- package/lib/styles/option.js +47 -67
- package/lib/styles/popup.js +34 -65
- package/lib/styles/radio.js +69 -96
- package/lib/styles/resize-observer.js +2 -5
- package/lib/styles/scroll-container.js +100 -130
- package/lib/styles/select-base.js +525 -778
- package/lib/styles/select.js +140 -228
- package/lib/styles/step.js +22 -29
- package/lib/styles/switch.js +34 -55
- package/lib/styles/tab.js +22 -29
- package/lib/styles/tabs.js +171 -252
- package/lib/styles/tag.js +135 -188
- package/lib/styles/textarea.d.ts +1 -1
- package/lib/styles/textarea.js +205 -271
- package/lib/styles/tooltip.js +3 -3
- package/lib/styles/wizard.js +170 -226
- package/lib/types/common.d.ts +2 -0
- package/lib/types/common.js +6 -5
- package/lib/utils/calendar-utils.js +100 -100
- package/lib/utils/custom-scrollbar.js +272 -272
- package/lib/utils/flavor-sheet.js +14 -14
- package/lib/utils/icon-registry.js +127 -127
- package/lib/utils/loader-registry.js +3 -3
- package/lib/utils/locale.js +34 -34
- package/lib/utils/mobile.js +1 -1
- package/lib/utils/number-format.js +54 -54
- package/lib/utils/positioning.js +212 -212
- package/lib/utils/property-capture.js +36 -36
- package/lib/utils/property-manager.js +125 -125
- package/lib/utils/resize-observer.js +23 -23
- package/lib/utils/scroll-lock.js +57 -57
- package/lib/utils/styles.js +17 -17
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +4 -4
package/dist/tyrell.css
CHANGED
|
@@ -1,1390 +1 @@
|
|
|
1
|
-
/* =================================================================
|
|
2
|
-
Ty Component Library - Complete CSS System
|
|
3
|
-
Industry-Standard Semantic Design System
|
|
4
|
-
|
|
5
|
-
This file contains:
|
|
6
|
-
- CSS Variables (Design Tokens)
|
|
7
|
-
- Utility Classes
|
|
8
|
-
- Theme Support (Light/Dark)
|
|
9
|
-
- Surface System
|
|
10
|
-
- 5-Variant Color System
|
|
11
|
-
================================================================= */
|
|
12
|
-
|
|
13
|
-
/* =================================================================
|
|
14
|
-
PRE-DEFINITION STYLES - PREVENT LAYOUT SHIFTS
|
|
15
|
-
These styles apply BEFORE custom elements are registered via JavaScript.
|
|
16
|
-
They reserve space to prevent FOUC (Flash of Unstyled Content) and layout shifts.
|
|
17
|
-
================================================================= */
|
|
18
|
-
|
|
19
|
-
/* Icon component - reserve space before registration */
|
|
20
|
-
ty-icon:not(:defined) {
|
|
21
|
-
display: inline-block;
|
|
22
|
-
aspect-ratio: 1 / 1;
|
|
23
|
-
opacity: 0;
|
|
24
|
-
transition: opacity 0.15s ease-in;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/* Default size (no attribute or size="md") */
|
|
28
|
-
ty-icon:not(:defined),
|
|
29
|
-
ty-icon:not(:defined)[size="md"] {
|
|
30
|
-
width: 1em;
|
|
31
|
-
height: 1em;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/* Em-based sizes */
|
|
35
|
-
ty-icon:not(:defined)[size="xs"] {
|
|
36
|
-
width: 0.75em;
|
|
37
|
-
height: 0.75em;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
ty-icon:not(:defined)[size="sm"] {
|
|
41
|
-
width: 0.875em;
|
|
42
|
-
height: 0.875em;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
ty-icon:not(:defined)[size="lg"] {
|
|
46
|
-
width: 1.25em;
|
|
47
|
-
height: 1.25em;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
ty-icon:not(:defined)[size="xl"] {
|
|
51
|
-
width: 1.5em;
|
|
52
|
-
height: 1.5em;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
ty-icon:not(:defined)[size="2xl"] {
|
|
56
|
-
width: 2em;
|
|
57
|
-
height: 2em;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/* Pixel-based sizes */
|
|
61
|
-
ty-icon:not(:defined)[size="12"] {
|
|
62
|
-
width: 12px;
|
|
63
|
-
height: 12px;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
ty-icon:not(:defined)[size="14"] {
|
|
67
|
-
width: 14px;
|
|
68
|
-
height: 14px;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
ty-icon:not(:defined)[size="16"] {
|
|
72
|
-
width: 16px;
|
|
73
|
-
height: 16px;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
ty-icon:not(:defined)[size="18"] {
|
|
77
|
-
width: 18px;
|
|
78
|
-
height: 18px;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
ty-icon:not(:defined)[size="20"] {
|
|
82
|
-
width: 20px;
|
|
83
|
-
height: 20px;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
ty-icon:not(:defined)[size="24"] {
|
|
87
|
-
width: 24px;
|
|
88
|
-
height: 24px;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
ty-icon:not(:defined)[size="32"] {
|
|
92
|
-
width: 32px;
|
|
93
|
-
height: 32px;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
ty-icon:not(:defined)[size="48"] {
|
|
97
|
-
width: 48px;
|
|
98
|
-
height: 48px;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
ty-icon:not(:defined)[size="64"] {
|
|
102
|
-
width: 64px;
|
|
103
|
-
height: 64px;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
ty-icon:not(:defined)[size="80"] {
|
|
107
|
-
width: 80px;
|
|
108
|
-
height: 80px;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
ty-icon:not(:defined)[size="96"] {
|
|
112
|
-
width: 96px;
|
|
113
|
-
height: 96px;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/* Once defined, fade in smoothly */
|
|
117
|
-
ty-icon {
|
|
118
|
-
opacity: 1;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/* =================================================================
|
|
122
|
-
CSS VARIABLES - DESIGN TOKENS
|
|
123
|
-
================================================================= */
|
|
124
|
-
|
|
125
|
-
/* Default theme (light) */
|
|
126
|
-
html {
|
|
127
|
-
/* Color tokens (--ty-color-*, --ty-bg-{flavor}-*, --ty-border-*,
|
|
128
|
-
--ty-surface-*, --ty-text-*, --ty-input-{color}-*, --ty-solid-*) live
|
|
129
|
-
in tyrell-colors-static.css or tyrell-theme.css — load one of those
|
|
130
|
-
alongside this file. See CSS_GUIDE.md. */
|
|
131
|
-
|
|
132
|
-
/* =================================================================
|
|
133
|
-
BACKGROUND COLORS
|
|
134
|
-
================================================================= */
|
|
135
|
-
|
|
136
|
-
--ty-bg-faint: #f8fafc;
|
|
137
|
-
/* Very light canvas - for minimal backgrounds */
|
|
138
|
-
--ty-bg-soft: #f1f5f9;
|
|
139
|
-
/* Light canvas - app backgrounds */
|
|
140
|
-
--ty-bg: #ffffff;
|
|
141
|
-
/* WHITE - primary content baseline */
|
|
142
|
-
--ty-bg-bold: #f8fafc;
|
|
143
|
-
/* Subtle elevation - cards with light tint */
|
|
144
|
-
--ty-bg-strong: #e2e8f0;
|
|
145
|
-
/* Maximum elevation - clear distinction */
|
|
146
|
-
|
|
147
|
-
/* Focus ring gap - matches page background for button focus ring effect */
|
|
148
|
-
--ty-focus-ring-gap: #ffffff;
|
|
149
|
-
|
|
150
|
-
/* =================================================================
|
|
151
|
-
BORDER COLORS
|
|
152
|
-
================================================================= */
|
|
153
|
-
|
|
154
|
-
/* Border width — used as fallback by surface utilities (--ty-{surface}-border-width) */
|
|
155
|
-
--ty-border-width: 1px;
|
|
156
|
-
|
|
157
|
-
/* =================================================================
|
|
158
|
-
SCROLLBAR
|
|
159
|
-
================================================================= */
|
|
160
|
-
|
|
161
|
-
--ty-scrollbar-thumb: rgba(0, 0, 0, 0.35);
|
|
162
|
-
--ty-scrollbar-thumb-hover: rgba(0, 0, 0, 0.5);
|
|
163
|
-
--ty-scrollbar-thumb-active: rgba(0, 0, 0, 0.6);
|
|
164
|
-
--ty-scrollbar-track: transparent;
|
|
165
|
-
--ty-scrollbar-track-hover: rgba(0, 0, 0, 0.06);
|
|
166
|
-
|
|
167
|
-
/* =================================================================
|
|
168
|
-
SURFACE SYSTEM
|
|
169
|
-
================================================================= */
|
|
170
|
-
|
|
171
|
-
/* Surface borders — opt-in. Set color to make a surface's border visible.
|
|
172
|
-
Width and style fall back to --ty-border-width and `solid` if unset. */
|
|
173
|
-
--ty-elevated-border-width: var(--ty-border-width);
|
|
174
|
-
--ty-elevated-border-style: solid;
|
|
175
|
-
|
|
176
|
-
--ty-floating-border-width: var(--ty-border-width);
|
|
177
|
-
--ty-floating-border-style: solid;
|
|
178
|
-
|
|
179
|
-
--ty-canvas-border: transparent;
|
|
180
|
-
--ty-canvas-border-width: var(--ty-border-width);
|
|
181
|
-
--ty-canvas-border-style: solid;
|
|
182
|
-
|
|
183
|
-
--ty-content-border-width: var(--ty-border-width);
|
|
184
|
-
--ty-content-border-style: solid;
|
|
185
|
-
|
|
186
|
-
/* --ty-input-border is a color token (tyrell-colors-static.css /
|
|
187
|
-
tyrell-theme.css) used by <ty-input> shadow DOM and .ty-input utility.
|
|
188
|
-
Width/style live here. */
|
|
189
|
-
--ty-input-border-width: var(--ty-border-width);
|
|
190
|
-
--ty-input-border-style: solid;
|
|
191
|
-
|
|
192
|
-
/* Divider context — consumed by .ty-divide-x / .ty-divide-y utilities.
|
|
193
|
-
Each surface re-points --ty-divide-color to its own --ty-{surface}-border
|
|
194
|
-
token, so the same knob controls both the surface's chrome AND any
|
|
195
|
-
dividers inside it. Inherits down the tree via CSS variable inheritance. */
|
|
196
|
-
--ty-divide-color: var(--ty-border);
|
|
197
|
-
--ty-divide-width: var(--ty-border-width);
|
|
198
|
-
|
|
199
|
-
/* =================================================================
|
|
200
|
-
COMPONENT TOKENS
|
|
201
|
-
================================================================= */
|
|
202
|
-
|
|
203
|
-
/* Modal tokens */
|
|
204
|
-
--ty-modal-bg: #ffffff;
|
|
205
|
-
--ty-modal-color: #111827;
|
|
206
|
-
--ty-modal-border: #e5e7eb;
|
|
207
|
-
--ty-modal-backdrop: rgba(0, 0, 0, 0.5);
|
|
208
|
-
--ty-modal-backdrop-blur: blur(2px);
|
|
209
|
-
--ty-modal-border-radius: 16px;
|
|
210
|
-
--ty-modal-shadow:
|
|
211
|
-
0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
212
|
-
--ty-modal-duration: 200ms;
|
|
213
|
-
|
|
214
|
-
/* Modal sizing */
|
|
215
|
-
--ty-modal-sm-width: 300px;
|
|
216
|
-
--ty-modal-md-width: 500px;
|
|
217
|
-
--ty-modal-lg-width: 700px;
|
|
218
|
-
--ty-modal-xl-width: 900px;
|
|
219
|
-
--ty-modal-full-width: 95vw;
|
|
220
|
-
--ty-modal-full-height: 95vh;
|
|
221
|
-
|
|
222
|
-
/* Input component tokens */
|
|
223
|
-
--ty-label-color: #374151;
|
|
224
|
-
|
|
225
|
-
/* =================================================================
|
|
226
|
-
DESIGN SYSTEM TOKENS
|
|
227
|
-
================================================================= */
|
|
228
|
-
|
|
229
|
-
/* Spacing Scale */
|
|
230
|
-
--ty-spacing-0: 0;
|
|
231
|
-
--ty-spacing-px: 1px;
|
|
232
|
-
--ty-spacing-mini: 0.125rem;
|
|
233
|
-
--ty-spacing-1: 0.25rem;
|
|
234
|
-
--ty-spacing-2: 0.5rem;
|
|
235
|
-
--ty-spacing-3: 0.75rem;
|
|
236
|
-
--ty-spacing-4: 1rem;
|
|
237
|
-
--ty-spacing-5: 1.25rem;
|
|
238
|
-
--ty-spacing-6: 1.5rem;
|
|
239
|
-
--ty-spacing-7: 1.75rem;
|
|
240
|
-
--ty-spacing-8: 2rem;
|
|
241
|
-
--ty-spacing-9: 2.25rem;
|
|
242
|
-
--ty-spacing-10: 2.5rem;
|
|
243
|
-
--ty-spacing-12: 3rem;
|
|
244
|
-
--ty-spacing-16: 4rem;
|
|
245
|
-
--ty-spacing-20: 5rem;
|
|
246
|
-
--ty-spacing-24: 6rem;
|
|
247
|
-
|
|
248
|
-
/* Border Radius */
|
|
249
|
-
--ty-radius-none: 0;
|
|
250
|
-
--ty-radius-sm: 0.25rem; /* 4px */
|
|
251
|
-
--ty-radius-base: 0.375rem; /* 6px */
|
|
252
|
-
--ty-radius-md: 0.5rem; /* 8px (anchor) */
|
|
253
|
-
--ty-radius-lg: 0.75rem; /* 12px */
|
|
254
|
-
--ty-radius-xl: 1rem; /* 16px */
|
|
255
|
-
--ty-radius-2xl: 1.5rem; /* 24px */
|
|
256
|
-
--ty-radius-3xl: 2rem; /* 32px */
|
|
257
|
-
--ty-radius-full: 9999px;
|
|
258
|
-
|
|
259
|
-
/* Shadows */
|
|
260
|
-
--ty-shadow-none: none;
|
|
261
|
-
--ty-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
262
|
-
--ty-shadow-base:
|
|
263
|
-
0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
|
|
264
|
-
--ty-shadow-md:
|
|
265
|
-
0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
|
|
266
|
-
--ty-shadow-lg:
|
|
267
|
-
0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
|
|
268
|
-
--ty-shadow-xl:
|
|
269
|
-
0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
|
|
270
|
-
--ty-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
|
271
|
-
|
|
272
|
-
/* Typography */
|
|
273
|
-
--ty-font-sans:
|
|
274
|
-
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
275
|
-
--ty-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, monospace;
|
|
276
|
-
|
|
277
|
-
--ty-font-xxs: 0.625rem;
|
|
278
|
-
--ty-font-xs: 0.75rem;
|
|
279
|
-
--ty-font-sm: 0.875rem;
|
|
280
|
-
--ty-font-base: 1rem;
|
|
281
|
-
--ty-font-lg: 1.125rem;
|
|
282
|
-
--ty-font-xl: 1.25rem;
|
|
283
|
-
--ty-font-2xl: 1.5rem;
|
|
284
|
-
--ty-font-3xl: 1.875rem;
|
|
285
|
-
--ty-font-4xl: 2.25rem;
|
|
286
|
-
--ty-font-5xl: 3rem;
|
|
287
|
-
|
|
288
|
-
/* Paired line-heights — values follow Linear's text-* tokens (text-small
|
|
289
|
-
uses 21px not 20px; text-regular uses 1.6 ratio for breathable body text).
|
|
290
|
-
Paired with --ty-font-* so that `font-size: var(--ty-font-sm)` should also
|
|
291
|
-
use `line-height: var(--ty-leading-sm)`. */
|
|
292
|
-
--ty-leading-xxs: 0.9375rem; /* 15px paired with 10px text (Linear text-tiny 1.5) */
|
|
293
|
-
--ty-leading-xs: 1.05rem; /* ≈16.8px paired with 12px text (Linear text-micro 1.4) */
|
|
294
|
-
--ty-leading-sm: 1.3125rem; /* 21px paired with 14px text (Linear text-small) */
|
|
295
|
-
--ty-leading-base: 1.5rem; /* 24px paired with 16px text (Linear text-regular 1.6 ≈) */
|
|
296
|
-
--ty-leading-lg: 1.6875rem; /* 27px paired with 18px text (Linear text-large) */
|
|
297
|
-
--ty-leading-xl: 1.75rem; /* 28px paired with 20px text */
|
|
298
|
-
--ty-leading-2xl: 2rem; /* 32px paired with 24px text */
|
|
299
|
-
--ty-leading-3xl: 2.25rem; /* 36px paired with 30px text */
|
|
300
|
-
--ty-leading-4xl: 2.5rem; /* 40px paired with 36px text */
|
|
301
|
-
--ty-leading-5xl: 1; /* paired with 48px+ display text */
|
|
302
|
-
|
|
303
|
-
/* Letter-spacing (tracking) tokens — pulled from Linear's per-size values.
|
|
304
|
-
Linear uses slightly negative tracking on most text to tighten Inter. */
|
|
305
|
-
--ty-tracking-xxs: -0.015em; /* paired with text-tiny */
|
|
306
|
-
--ty-tracking-xs: 0; /* paired with text-micro */
|
|
307
|
-
--ty-tracking-sm: -0.013em; /* paired with text-small */
|
|
308
|
-
--ty-tracking-base: -0.011em; /* paired with text-regular */
|
|
309
|
-
--ty-tracking-lg: 0; /* paired with text-large */
|
|
310
|
-
--ty-tracking-tight: -0.022em; /* for titles (Linear title-4 and up) */
|
|
311
|
-
--ty-tracking-title: -0.012em; /* for titles (Linear title-1..3) */
|
|
312
|
-
|
|
313
|
-
/* Weights tuned to Linear (Inter Variable). With the system font stack
|
|
314
|
-
these round to the nearest available (500/600/700); load Inter Variable
|
|
315
|
-
for the exact rendering. */
|
|
316
|
-
--ty-font-thin: 100;
|
|
317
|
-
--ty-font-light: 300;
|
|
318
|
-
--ty-font-normal: 400;
|
|
319
|
-
--ty-font-medium: 510;
|
|
320
|
-
--ty-font-semibold: 590;
|
|
321
|
-
--ty-font-bold: 680;
|
|
322
|
-
--ty-font-extrabold: 800;
|
|
323
|
-
|
|
324
|
-
/* Semantic weight dials — MODE-FLIPPED (see the html.dark block).
|
|
325
|
-
Light text on dark surfaces optically blooms (halation), so dark mode
|
|
326
|
-
wants genuinely lighter weights than light mode; a single fixed weight
|
|
327
|
-
can't be right in both. Components consume these instead of the raw
|
|
328
|
-
scale above:
|
|
329
|
-
--ty-weight-action buttons, interactive chrome
|
|
330
|
-
--ty-weight-label tags, chips, badges
|
|
331
|
-
Theme these like any other token — per :root, html.dark, a named theme
|
|
332
|
-
pack, or one element. The theme layer registers them as typed numbers,
|
|
333
|
-
so with a variable font, weight crossfades during theme transitions
|
|
334
|
-
along with the colors. */
|
|
335
|
-
--ty-weight-action: var(--ty-font-medium);
|
|
336
|
-
--ty-weight-label: 440;
|
|
337
|
-
|
|
338
|
-
/* Solid-button depth chrome (consumed in button.ts):
|
|
339
|
-
--ty-button-depth master intensity 0–1. 0 = pixel-flat (the old
|
|
340
|
-
look), 1 = full tactile gloss. Scales the
|
|
341
|
-
derived border offset, top sheen and drop
|
|
342
|
-
shadow together. Themable per mode / theme
|
|
343
|
-
pack / element like any other dial.
|
|
344
|
-
--ty-button-border-l L-offset of the fill-derived 1px border,
|
|
345
|
-
mode-flipped below: dark mode needs a LIGHTER-
|
|
346
|
-
than-fill hairline (solids wash out against
|
|
347
|
-
dark surfaces without a lit edge), light mode
|
|
348
|
-
a slightly darker one. */
|
|
349
|
-
--ty-button-depth: 0.35;
|
|
350
|
-
--ty-button-border-l: -0.08;
|
|
351
|
-
/* Neutral (ink) gets its own, stronger edge: it has no hue separating it
|
|
352
|
-
from the canvas, so the same offset that reads fine on colored fills
|
|
353
|
-
nearly vanishes on it — especially in dark mode, where the ink fill
|
|
354
|
-
sits close to the page. */
|
|
355
|
-
--ty-button-border-l-neutral: -0.25;
|
|
356
|
-
|
|
357
|
-
--ty-line-height-none: 1;
|
|
358
|
-
--ty-line-height-tight: 1.25;
|
|
359
|
-
--ty-line-height-snug: 1.375;
|
|
360
|
-
--ty-line-height-normal: 1.5;
|
|
361
|
-
--ty-line-height-relaxed: 1.625;
|
|
362
|
-
--ty-line-height-loose: 2;
|
|
363
|
-
|
|
364
|
-
/* Transitions. Each routes through --ty-local-transition first — unset by
|
|
365
|
-
default (falls through to the real value below), but the theme engine's
|
|
366
|
-
.ty-theme-switching sets it to `none` for the duration of a theme swap,
|
|
367
|
-
so components using these tokens don't run their own hover/focus
|
|
368
|
-
transition at the same time as the coordinated theme crossfade. See
|
|
369
|
-
tyrell-theme.css SECTION 3 — THEME TRANSITIONS. */
|
|
370
|
-
--ty-transition-none: none;
|
|
371
|
-
--ty-transition-all: var(--ty-local-transition, all 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
372
|
-
--ty-transition-colors: var(--ty-local-transition,
|
|
373
|
-
bg-color, border-color, color, fill,
|
|
374
|
-
stroke 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
375
|
-
--ty-transition-shadow: var(--ty-local-transition, box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
376
|
-
--ty-transition-transform: var(--ty-local-transition, transform 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
377
|
-
|
|
378
|
-
/* Component Sizes — single source of truth for FIELD heights.
|
|
379
|
-
Fields (ty-input, ty-select, ty-date-picker) come in exactly three
|
|
380
|
-
sizes and consume these via min-height: var(--ty-size-*), so the same
|
|
381
|
-
`size` attribute is the same height on every field. Shared scale with
|
|
382
|
-
ty-button's 4px ladder (see button.ts): field sm = button md (32px),
|
|
383
|
-
field md = button lg (36px), field lg = button xl (40px) — a button
|
|
384
|
-
and a field of the paired size sit flush, same height, in a row. */
|
|
385
|
-
--ty-size-sm: 2rem;
|
|
386
|
-
/* 32px */
|
|
387
|
-
--ty-size-md: 2.25rem;
|
|
388
|
-
/* 36px */
|
|
389
|
-
--ty-size-lg: 2.5rem;
|
|
390
|
-
/* 40px */
|
|
391
|
-
|
|
392
|
-
/* Z-Index Scale */
|
|
393
|
-
--ty-z-auto: auto;
|
|
394
|
-
--ty-z-0: 0;
|
|
395
|
-
--ty-z-10: 10;
|
|
396
|
-
--ty-z-20: 20;
|
|
397
|
-
--ty-z-30: 30;
|
|
398
|
-
--ty-z-40: 40;
|
|
399
|
-
--ty-z-50: 50;
|
|
400
|
-
--ty-z-sticky: 1020;
|
|
401
|
-
--ty-z-fixed: 1030;
|
|
402
|
-
--ty-z-modal-backdrop: 1040;
|
|
403
|
-
--ty-z-modal: 1050;
|
|
404
|
-
--ty-z-popover: 1060;
|
|
405
|
-
--ty-z-tooltip: 1070;
|
|
406
|
-
--ty-z-dropdown: 1080;
|
|
407
|
-
|
|
408
|
-
/* =================================================================
|
|
409
|
-
SCROLL SHADOW SYSTEM
|
|
410
|
-
Uses clip-path technique for smooth corner fade
|
|
411
|
-
================================================================= */
|
|
412
|
-
--ty-scroll-shadow-top: radial-gradient(
|
|
413
|
-
ellipse 100% 30% at center,
|
|
414
|
-
rgba(0, 0, 0, 0.1),
|
|
415
|
-
rgba(0, 0, 0, 0),
|
|
416
|
-
transparent
|
|
417
|
-
);
|
|
418
|
-
--ty-scroll-shadow-bottom: radial-gradient(
|
|
419
|
-
ellipse 100% 20% at center,
|
|
420
|
-
rgba(0, 0, 0, 0.15),
|
|
421
|
-
rgba(0, 0, 0, 0),
|
|
422
|
-
transparent
|
|
423
|
-
);
|
|
424
|
-
--ty-scroll-shadow-transition: opacity 0.2s ease-out;
|
|
425
|
-
|
|
426
|
-
/* =================================================================
|
|
427
|
-
TOOLTIP (default/"dark" flavor)
|
|
428
|
-
Deliberately theme-INDEPENDENT — defined once here, not redeclared in
|
|
429
|
-
html.dark below. A tooltip's job is to pop against whatever it's sitting
|
|
430
|
-
on, light page or dark; every major library (Material, Bootstrap, Ant,
|
|
431
|
-
Shoelace) keeps its default tooltip a fixed dark chip regardless of page
|
|
432
|
-
theme. Override on :root (or scope to a container) to retheme globally
|
|
433
|
-
without touching flavor="light"/"info"/other components.
|
|
434
|
-
Values are pure achromatic gray (R=G=B, no hue) — matches
|
|
435
|
-
--ty-solid-neutral's "no tint" convention. Don't reuse a Tailwind
|
|
436
|
-
slate/cool-gray hex here (e.g. #1f2937) — those carry a real blue
|
|
437
|
-
undertone (blue channel > red/green) and read as a color flavor next to
|
|
438
|
-
genuinely neutral buttons, which was exactly the bug being fixed.
|
|
439
|
-
================================================================= */
|
|
440
|
-
--ty-tooltip-bg: #262626;
|
|
441
|
-
--ty-tooltip-color: #f5f5f5;
|
|
442
|
-
--ty-tooltip-border: #404040;
|
|
443
|
-
|
|
444
|
-
/* =================================================================
|
|
445
|
-
CALENDAR — "other month" day de-emphasis
|
|
446
|
-
--ty-color-neutral-faint alone is only ~2.5:1 against white — already
|
|
447
|
-
below the 4.5:1 WCAG AA text minimum before the (now-removed) opacity
|
|
448
|
-
fade made it worse still. This is its own token, calibrated to actually
|
|
449
|
-
pass, rather than reusing -faint here. Real bug, caught by adding
|
|
450
|
-
axe-core coverage for the first time, not a design choice being revised.
|
|
451
|
-
================================================================= */
|
|
452
|
-
--ty-calendar-other-month-color: #6b7280; /* 4.83:1 vs white */
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/* =================================================================
|
|
456
|
-
DARK THEME OVERRIDES
|
|
457
|
-
================================================================= */
|
|
458
|
-
|
|
459
|
-
html.dark,
|
|
460
|
-
html[data-theme="dark"] {
|
|
461
|
-
/* Weight dials flip with the mode — light-on-dark text blooms, so dark
|
|
462
|
-
mode runs genuinely lighter. See the :root definitions. */
|
|
463
|
-
--ty-weight-action: var(--ty-font-normal);
|
|
464
|
-
--ty-weight-label: var(--ty-font-normal);
|
|
465
|
-
|
|
466
|
-
/* Colored solid buttons: no border in dark mode — border color equals
|
|
467
|
-
the fill exactly, so it's geometrically present (depth 0 keeps
|
|
468
|
-
geometry stable) but invisible. Neutral keeps its own separate,
|
|
469
|
-
stronger dial (below) since its dark ink fill needs the lit edge to
|
|
470
|
-
read as a shape at all against a near-black canvas; colored fills
|
|
471
|
-
don't have that problem (their own hue/saturation already separates
|
|
472
|
-
them from the page), so no border reads as cleaner. */
|
|
473
|
-
--ty-button-border-l: 0;
|
|
474
|
-
--ty-button-border-l-neutral: 0.5;
|
|
475
|
-
|
|
476
|
-
/* Backgrounds for dark mode */
|
|
477
|
-
--ty-bg-faint: #0f1419;
|
|
478
|
-
--ty-bg-soft: #111827;
|
|
479
|
-
--ty-bg: #1f2937;
|
|
480
|
-
--ty-bg-bold: #374151;
|
|
481
|
-
--ty-bg-strong: #6b7280;
|
|
482
|
-
|
|
483
|
-
/* Focus ring gap */
|
|
484
|
-
--ty-focus-ring-gap: #1f2937;
|
|
485
|
-
|
|
486
|
-
/* Scrollbar - dark mode */
|
|
487
|
-
--ty-scrollbar-thumb: rgba(255, 255, 255, 0.13);
|
|
488
|
-
--ty-scrollbar-thumb-hover: rgba(255, 255, 255, 0.22);
|
|
489
|
-
--ty-scrollbar-thumb-active: rgba(255, 255, 255, 0.3);
|
|
490
|
-
--ty-scrollbar-track: transparent;
|
|
491
|
-
--ty-scrollbar-track-hover: rgba(255, 255, 255, 0.04);
|
|
492
|
-
|
|
493
|
-
/* Shadows need to be darker/more prominent in dark mode */
|
|
494
|
-
--ty-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
|
|
495
|
-
--ty-shadow-base:
|
|
496
|
-
0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px -1px rgba(0, 0, 0, 0.3);
|
|
497
|
-
--ty-shadow-md:
|
|
498
|
-
0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
|
|
499
|
-
--ty-shadow-lg:
|
|
500
|
-
0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
|
|
501
|
-
--ty-shadow-xl:
|
|
502
|
-
0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 8px 10px -6px rgba(0, 0, 0, 0.3);
|
|
503
|
-
--ty-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
|
504
|
-
|
|
505
|
-
/* Input component tokens - dark mode */
|
|
506
|
-
--ty-label-color: #d1d5db;
|
|
507
|
-
|
|
508
|
-
/* Modal - dark mode */
|
|
509
|
-
--ty-modal-bg: var(--ty-bg-bold);
|
|
510
|
-
--ty-modal-color: var(--ty-color-neutral-bold);
|
|
511
|
-
--ty-modal-border: var(--ty-border);
|
|
512
|
-
--ty-modal-backdrop: rgba(0, 0, 0, 0.7);
|
|
513
|
-
--ty-modal-shadow:
|
|
514
|
-
0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
|
|
515
|
-
|
|
516
|
-
/* Scroll shadows - lighter tint for dark mode */
|
|
517
|
-
--ty-scroll-shadow-top: radial-gradient(
|
|
518
|
-
ellipse 100% 30% at center,
|
|
519
|
-
rgba(172, 172, 172, 0.2),
|
|
520
|
-
rgba(0, 0, 0, 0),
|
|
521
|
-
transparent
|
|
522
|
-
);
|
|
523
|
-
--ty-scroll-shadow-bottom: radial-gradient(
|
|
524
|
-
ellipse 100% 20% at center,
|
|
525
|
-
rgba(172, 172, 172, 0.3),
|
|
526
|
-
rgba(0, 0, 0, 0),
|
|
527
|
-
transparent
|
|
528
|
-
);
|
|
529
|
-
|
|
530
|
-
/* Calendar "other month" de-emphasis — see the :root definition for why
|
|
531
|
-
this is its own token instead of --ty-color-neutral-faint. */
|
|
532
|
-
--ty-calendar-other-month-color: #8a8a8a; /* 5.04:1 vs dark content bg (#1a1a1a) */
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
/* =================================================================
|
|
536
|
-
TEXT SELECTION STYLING
|
|
537
|
-
Global and semantic text selection colors
|
|
538
|
-
================================================================= */
|
|
539
|
-
|
|
540
|
-
/* Global text selection - uses primary colors by default */
|
|
541
|
-
::selection {
|
|
542
|
-
background-color: var(--ty-selection-bg, var(--ty-bg-primary-bold));
|
|
543
|
-
color: var(--ty-selection-color, var(--ty-text-strong));
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
::-moz-selection {
|
|
547
|
-
background-color: var(--ty-selection-bg, var(--ty-color-primary));
|
|
548
|
-
color: var(--ty-selection-color, var(--ty-text-strong));
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
/* Code block selection - special handling for better readability */
|
|
552
|
-
pre ::selection,
|
|
553
|
-
code ::selection,
|
|
554
|
-
pre::-moz-selection,
|
|
555
|
-
code::-moz-selection {
|
|
556
|
-
background-color: var(--ty-color-warning-soft);
|
|
557
|
-
color: var(--ty-color-neutral-strong);
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
html.dark pre ::selection,
|
|
561
|
-
html.dark code ::selection,
|
|
562
|
-
html.dark pre::-moz-selection,
|
|
563
|
-
html.dark code::-moz-selection {
|
|
564
|
-
background-color: var(--ty-color-warning);
|
|
565
|
-
color: var(--ty-bg-strong);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
/* Input and textarea selection - higher contrast */
|
|
569
|
-
input::selection,
|
|
570
|
-
textarea::selection,
|
|
571
|
-
input::-moz-selection,
|
|
572
|
-
textarea::-moz-selection {
|
|
573
|
-
background-color: var(--ty-color-primary);
|
|
574
|
-
color: white;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
html.dark input::selection,
|
|
578
|
-
html.dark textarea::selection,
|
|
579
|
-
html.dark input::-moz-selection,
|
|
580
|
-
html.dark textarea::-moz-selection {
|
|
581
|
-
background-color: var(--ty-color-primary-soft);
|
|
582
|
-
color: var(--ty-color-primary-strong);
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
/* Semantic selection utility classes */
|
|
586
|
-
.ty-selection-primary ::selection,
|
|
587
|
-
.ty-selection-primary::-moz-selection {
|
|
588
|
-
background-color: var(--ty-color-primary-soft);
|
|
589
|
-
color: var(--ty-color-primary-strong);
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
.ty-selection-success ::selection,
|
|
594
|
-
.ty-selection-success::-moz-selection {
|
|
595
|
-
background-color: var(--ty-color-success-soft);
|
|
596
|
-
color: var(--ty-color-success-strong);
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
.ty-selection-warning ::selection,
|
|
600
|
-
.ty-selection-warning::-moz-selection {
|
|
601
|
-
background-color: var(--ty-color-warning-soft);
|
|
602
|
-
color: var(--ty-color-warning-strong);
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
.ty-selection-danger ::selection,
|
|
606
|
-
.ty-selection-danger::-moz-selection {
|
|
607
|
-
background-color: var(--ty-color-danger-soft);
|
|
608
|
-
color: var(--ty-color-danger-strong);
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
.ty-selection-neutral ::selection,
|
|
612
|
-
.ty-selection-neutral::-moz-selection {
|
|
613
|
-
background-color: var(--ty-color-neutral-soft);
|
|
614
|
-
color: var(--ty-color-neutral-strong);
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
/* Dark mode semantic selections */
|
|
618
|
-
html.dark .ty-selection-primary ::selection,
|
|
619
|
-
html.dark .ty-selection-primary::-moz-selection {
|
|
620
|
-
background-color: var(--ty-color-primary);
|
|
621
|
-
color: white;
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
html.dark .ty-selection-success ::selection,
|
|
626
|
-
html.dark .ty-selection-success::-moz-selection {
|
|
627
|
-
background-color: var(--ty-color-success);
|
|
628
|
-
color: white;
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
html.dark .ty-selection-warning ::selection,
|
|
632
|
-
html.dark .ty-selection-warning::-moz-selection {
|
|
633
|
-
background-color: var(--ty-color-warning);
|
|
634
|
-
color: var(--ty-bg-strong);
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
html.dark .ty-selection-danger ::selection,
|
|
638
|
-
html.dark .ty-selection-danger::-moz-selection {
|
|
639
|
-
background-color: var(--ty-color-danger);
|
|
640
|
-
color: white;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
html.dark .ty-selection-neutral ::selection,
|
|
644
|
-
html.dark .ty-selection-neutral::-moz-selection {
|
|
645
|
-
background-color: var(--ty-color-neutral);
|
|
646
|
-
color: white;
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
/* =================================================================
|
|
650
|
-
UTILITY CLASSES
|
|
651
|
-
================================================================= */
|
|
652
|
-
|
|
653
|
-
/* Sensible default for any border that doesn't set its own color —
|
|
654
|
-
Tailwind's `border` / `border-t`, plain CSS `border: 1px solid`, etc.
|
|
655
|
-
Scoped to `html` to win specificity over Tailwind's (0,0,0) preflight
|
|
656
|
-
regardless of injection order. Class-based overrides (`border-red-500`,
|
|
657
|
-
`ty-border-primary`, etc.) still win their cascade. Theme-aware:
|
|
658
|
-
`--ty-border` switches in dark mode automatically. */
|
|
659
|
-
html *,
|
|
660
|
-
html ::before,
|
|
661
|
-
html ::after {
|
|
662
|
-
border-color: var(--ty-border);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
/* =================================================================
|
|
666
|
-
SURFACE UTILITIES
|
|
667
|
-
================================================================= */
|
|
668
|
-
|
|
669
|
-
/* Elevated surfaces - cards, panels, components */
|
|
670
|
-
.ty-elevated {
|
|
671
|
-
box-sizing: border-box !important;
|
|
672
|
-
background-color: var(--ty-surface-elevated) !important;
|
|
673
|
-
border: var(--ty-elevated-border-width, var(--ty-border-width, 1px))
|
|
674
|
-
var(--ty-elevated-border-style, solid)
|
|
675
|
-
var(--ty-elevated-border, transparent) !important;
|
|
676
|
-
box-shadow:
|
|
677
|
-
0 1px 3px 0 rgb(0 0 0 / 0.1),
|
|
678
|
-
0 1px 2px -1px rgb(0 0 0 / 0.1) !important;
|
|
679
|
-
--ty-divide-color: var(--ty-elevated-border);
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
/* Floating surfaces - modals, dropdowns, tooltips */
|
|
683
|
-
.ty-floating {
|
|
684
|
-
box-sizing: border-box !important;
|
|
685
|
-
background-color: var(--ty-surface-floating) !important;
|
|
686
|
-
border: var(--ty-floating-border-width, var(--ty-border-width, 1px))
|
|
687
|
-
var(--ty-floating-border-style, solid)
|
|
688
|
-
var(--ty-floating-border, transparent) !important;
|
|
689
|
-
box-shadow:
|
|
690
|
-
0 4px 6px -1px rgb(0 0 0 / 0.1),
|
|
691
|
-
0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
|
|
692
|
-
--ty-divide-color: var(--ty-floating-border);
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
/* App and page backgrounds - the canvas for content */
|
|
696
|
-
.ty-canvas {
|
|
697
|
-
box-sizing: border-box !important;
|
|
698
|
-
background-color: var(--ty-surface-canvas) !important;
|
|
699
|
-
border: var(--ty-canvas-border-width, var(--ty-border-width, 1px))
|
|
700
|
-
var(--ty-canvas-border-style, solid) var(--ty-canvas-border, transparent) !important;
|
|
701
|
-
--ty-divide-color: var(--ty-canvas-border);
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
/* Main content areas - primary content background */
|
|
705
|
-
.ty-content {
|
|
706
|
-
box-sizing: border-box !important;
|
|
707
|
-
background-color: var(--ty-surface-content) !important;
|
|
708
|
-
border: var(--ty-content-border-width, var(--ty-border-width, 1px))
|
|
709
|
-
var(--ty-content-border-style, solid) var(--ty-content-border, transparent) !important;
|
|
710
|
-
--ty-divide-color: var(--ty-content-border);
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
/* Input surfaces - form controls, text areas, inputs */
|
|
714
|
-
.ty-input {
|
|
715
|
-
box-sizing: border-box !important;
|
|
716
|
-
background-color: var(--ty-input-bg) !important;
|
|
717
|
-
border: var(--ty-input-border-width, var(--ty-border-width, 1px))
|
|
718
|
-
var(--ty-input-border-style, solid) var(--ty-input-border, transparent) !important;
|
|
719
|
-
--ty-divide-color: var(--ty-input-border);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
/* Divider utilities — consume --ty-divide-color from the nearest surface
|
|
723
|
-
context (set on .ty-elevated/.ty-floating/.ty-canvas/.ty-content/.ty-input)
|
|
724
|
-
via CSS variable inheritance. Override per-instance:
|
|
725
|
-
style="--ty-divide-color: var(--ty-border-strong);" */
|
|
726
|
-
.ty-divide-y > * + * {
|
|
727
|
-
border-top: var(--ty-divide-width, var(--ty-border-width, 1px)) solid
|
|
728
|
-
var(--ty-divide-color, var(--ty-border));
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
.ty-divide-x > * + * {
|
|
732
|
-
border-left: var(--ty-divide-width, var(--ty-border-width, 1px)) solid
|
|
733
|
-
var(--ty-divide-color, var(--ty-border));
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
/* Dark theme adjustments for shadows */
|
|
737
|
-
html.dark .ty-elevated {
|
|
738
|
-
background-color: var(--ty-surface-elevated) !important;
|
|
739
|
-
box-shadow:
|
|
740
|
-
0 1px 3px 0 rgb(0 0 0 / 0.2),
|
|
741
|
-
0 1px 2px -1px rgb(0 0 0 / 0.2) !important;
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
html.dark .ty-floating {
|
|
745
|
-
background-color: var(--ty-surface-floating) !important;
|
|
746
|
-
box-shadow:
|
|
747
|
-
0 4px 6px -1px rgb(0 0 0 / 0.3),
|
|
748
|
-
0 2px 4px -2px rgb(0 0 0 / 0.3) !important;
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
html.dark .ty-high-elevation {
|
|
752
|
-
background-color: var(--ty-surface-floating) !important;
|
|
753
|
-
box-shadow:
|
|
754
|
-
0 10px 15px -3px rgb(0 0 0 / 0.4),
|
|
755
|
-
0 4px 6px -4px rgb(0 0 0 / 0.4) !important;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
html.dark .ty-sunken {
|
|
759
|
-
background-color: var(--ty-surface-input) !important;
|
|
760
|
-
box-shadow: inset 0 1px 2px 0 rgb(0 0 0 / 0.1) !important;
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
/* =================================================================
|
|
764
|
-
SEMANTIC BACKGROUND UTILITIES
|
|
765
|
-
================================================================= */
|
|
766
|
-
|
|
767
|
-
/* Semantic backgrounds - these are the key theme utilities */
|
|
768
|
-
.ty-bg-primary {
|
|
769
|
-
background-color: var(--ty-bg-primary);
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
.ty-bg-primary\+ {
|
|
773
|
-
background-color: var(--ty-bg-primary-bold);
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
.ty-bg-primary- {
|
|
777
|
-
background-color: var(--ty-bg-primary-soft);
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
.ty-bg-success {
|
|
784
|
-
background-color: var(--ty-bg-success);
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
.ty-bg-success\+ {
|
|
788
|
-
background-color: var(--ty-bg-success-bold);
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
.ty-bg-success- {
|
|
792
|
-
background-color: var(--ty-bg-success-soft);
|
|
793
|
-
}
|
|
794
|
-
|
|
795
|
-
.ty-bg-danger {
|
|
796
|
-
background-color: var(--ty-bg-danger);
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
.ty-bg-danger\+ {
|
|
800
|
-
background-color: var(--ty-bg-danger-bold);
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
.ty-bg-danger- {
|
|
804
|
-
background-color: var(--ty-bg-danger-soft);
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
.ty-bg-warning {
|
|
808
|
-
background-color: var(--ty-bg-warning);
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
.ty-bg-warning\+ {
|
|
812
|
-
background-color: var(--ty-bg-warning-bold);
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
.ty-bg-warning- {
|
|
816
|
-
background-color: var(--ty-bg-warning-soft);
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
.ty-bg-neutral {
|
|
820
|
-
background-color: var(--ty-bg-neutral);
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
.ty-bg-neutral\+ {
|
|
824
|
-
background-color: var(--ty-bg-neutral-bold);
|
|
825
|
-
}
|
|
826
|
-
|
|
827
|
-
.ty-bg-neutral- {
|
|
828
|
-
background-color: var(--ty-bg-neutral-soft);
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
/* =================================================================
|
|
832
|
-
TEXT HIERARCHY UTILITIES
|
|
833
|
-
================================================================= */
|
|
834
|
-
|
|
835
|
-
/* Base text hierarchy - emphasis based, not semantic */
|
|
836
|
-
.ty-text {
|
|
837
|
-
color: var(--ty-text) !important;
|
|
838
|
-
}
|
|
839
|
-
|
|
840
|
-
.ty-text\+ {
|
|
841
|
-
color: var(--ty-text-bold) !important;
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
.ty-text\+\+ {
|
|
845
|
-
color: var(--ty-text-strong) !important;
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
.ty-text- {
|
|
849
|
-
color: var(--ty-text-soft) !important;
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
.ty-text-- {
|
|
853
|
-
color: var(--ty-text-faint) !important;
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
/* =================================================================
|
|
857
|
-
SEMANTIC TEXT COLORS - 5-VARIANT SYSTEM
|
|
858
|
-
================================================================= */
|
|
859
|
-
|
|
860
|
-
/* Primary text colors with full 5-variant system */
|
|
861
|
-
.ty-text-primary\+\+ {
|
|
862
|
-
color: var(--ty-color-primary-strong) !important;
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
.ty-text-primary\+ {
|
|
866
|
-
color: var(--ty-color-primary-bold) !important;
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
.ty-text-primary {
|
|
870
|
-
color: var(--ty-color-primary) !important;
|
|
871
|
-
}
|
|
872
|
-
|
|
873
|
-
.ty-text-primary- {
|
|
874
|
-
color: var(--ty-color-primary-soft) !important;
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
.ty-text-primary-- {
|
|
878
|
-
color: var(--ty-color-primary-faint) !important;
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
/* Success text colors */
|
|
886
|
-
.ty-text-success\+\+ {
|
|
887
|
-
color: var(--ty-color-success-strong) !important;
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
.ty-text-success\+ {
|
|
891
|
-
color: var(--ty-color-success-bold) !important;
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
.ty-text-success {
|
|
895
|
-
color: var(--ty-color-success) !important;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
.ty-text-success- {
|
|
899
|
-
color: var(--ty-color-success-soft) !important;
|
|
900
|
-
}
|
|
901
|
-
|
|
902
|
-
.ty-text-success-- {
|
|
903
|
-
color: var(--ty-color-success-faint) !important;
|
|
904
|
-
}
|
|
905
|
-
|
|
906
|
-
/* Danger text colors */
|
|
907
|
-
.ty-text-danger\+\+ {
|
|
908
|
-
color: var(--ty-color-danger-strong) !important;
|
|
909
|
-
}
|
|
910
|
-
|
|
911
|
-
.ty-text-danger\+ {
|
|
912
|
-
color: var(--ty-color-danger-bold) !important;
|
|
913
|
-
}
|
|
914
|
-
|
|
915
|
-
.ty-text-danger {
|
|
916
|
-
color: var(--ty-color-danger) !important;
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
.ty-text-danger- {
|
|
920
|
-
color: var(--ty-color-danger-soft) !important;
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
.ty-text-danger-- {
|
|
924
|
-
color: var(--ty-color-danger-faint) !important;
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
/* Warning text colors */
|
|
928
|
-
.ty-text-warning\+\+ {
|
|
929
|
-
color: var(--ty-color-warning-strong) !important;
|
|
930
|
-
}
|
|
931
|
-
|
|
932
|
-
.ty-text-warning\+ {
|
|
933
|
-
color: var(--ty-color-warning-bold) !important;
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
.ty-text-warning {
|
|
937
|
-
color: var(--ty-color-warning) !important;
|
|
938
|
-
}
|
|
939
|
-
|
|
940
|
-
.ty-text-warning- {
|
|
941
|
-
color: var(--ty-color-warning-soft) !important;
|
|
942
|
-
}
|
|
943
|
-
|
|
944
|
-
.ty-text-warning-- {
|
|
945
|
-
color: var(--ty-color-warning-faint) !important;
|
|
946
|
-
}
|
|
947
|
-
|
|
948
|
-
/* Neutral text colors */
|
|
949
|
-
.ty-text-neutral\+\+ {
|
|
950
|
-
color: var(--ty-color-neutral-strong) !important;
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
.ty-text-neutral\+ {
|
|
954
|
-
color: var(--ty-color-neutral-bold) !important;
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
.ty-text-neutral {
|
|
958
|
-
color: var(--ty-color-neutral) !important;
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
.ty-text-neutral- {
|
|
962
|
-
color: var(--ty-color-neutral-soft) !important;
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
.ty-text-neutral-- {
|
|
966
|
-
color: var(--ty-color-neutral-faint) !important;
|
|
967
|
-
}
|
|
968
|
-
|
|
969
|
-
/* =================================================================
|
|
970
|
-
BORDER UTILITIES
|
|
971
|
-
================================================================= */
|
|
972
|
-
|
|
973
|
-
/* Base border colors with emphasis */
|
|
974
|
-
.ty-border {
|
|
975
|
-
border-color: var(--ty-border) !important;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
.ty-border\+ {
|
|
979
|
-
border-color: var(--ty-border-bold) !important;
|
|
980
|
-
}
|
|
981
|
-
|
|
982
|
-
.ty-border\+\+ {
|
|
983
|
-
border-color: var(--ty-border-strong) !important;
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
.ty-border- {
|
|
987
|
-
border-color: var(--ty-border-soft);
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
.ty-border-- {
|
|
991
|
-
border-color: var(--ty-border-faint);
|
|
992
|
-
}
|
|
993
|
-
|
|
994
|
-
/* Semantic border colors */
|
|
995
|
-
.ty-border-primary {
|
|
996
|
-
border-color: var(--ty-border-primary);
|
|
997
|
-
}
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
.ty-border-success {
|
|
1001
|
-
border-color: var(--ty-border-success);
|
|
1002
|
-
}
|
|
1003
|
-
|
|
1004
|
-
.ty-border-danger {
|
|
1005
|
-
border-color: var(--ty-border-danger);
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
.ty-border-warning {
|
|
1009
|
-
border-color: var(--ty-border-warning);
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
.ty-border-neutral {
|
|
1013
|
-
border-color: var(--ty-border-neutral);
|
|
1014
|
-
}
|
|
1015
|
-
|
|
1016
|
-
/* =================================================================
|
|
1017
|
-
COMPONENT UTILITIES
|
|
1018
|
-
================================================================= */
|
|
1019
|
-
|
|
1020
|
-
/* Card/Panel utilities */
|
|
1021
|
-
.ty-card {
|
|
1022
|
-
background-color: var(--ty-surface-elevated);
|
|
1023
|
-
color: var(--ty-color-neutral-bold);
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
.ty-card-elevated {
|
|
1027
|
-
background-color: var(--ty-surface-floating);
|
|
1028
|
-
box-shadow: var(--ty-shadow-md);
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
/* Input-like utilities for custom form elements */
|
|
1032
|
-
.ty-input-bg {
|
|
1033
|
-
background-color: var(--ty-input-bg);
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
.ty-input-border {
|
|
1037
|
-
border-color: var(--ty-input-border);
|
|
1038
|
-
}
|
|
1039
|
-
|
|
1040
|
-
.ty-input-focus {
|
|
1041
|
-
border-color: var(--ty-input-border-focus);
|
|
1042
|
-
}
|
|
1043
|
-
|
|
1044
|
-
/* Modal/overlay utilities */
|
|
1045
|
-
.ty-modal-bg {
|
|
1046
|
-
background-color: var(--ty-modal-bg);
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
.ty-modal-backdrop {
|
|
1050
|
-
background-color: var(--ty-modal-backdrop);
|
|
1051
|
-
}
|
|
1052
|
-
|
|
1053
|
-
/* =================================================================
|
|
1054
|
-
INTERACTIVE STATES
|
|
1055
|
-
================================================================= */
|
|
1056
|
-
|
|
1057
|
-
.hover\:ty-bg-neutral--:hover {
|
|
1058
|
-
background-color: var(--ty-bg-neutral-faint) !important;
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
.hover\:ty-bg-neutral-:hover {
|
|
1062
|
-
background-color: var(--ty-bg-neutral-soft) !important;
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
.hover\:ty-bg-neutral:hover {
|
|
1066
|
-
background-color: var(--ty-bg-neutral) !important;
|
|
1067
|
-
}
|
|
1068
|
-
|
|
1069
|
-
.hover\:ty-bg-neutral\+:hover {
|
|
1070
|
-
background-color: var(--ty-bg-neutral-bold) !important;
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
|
-
.hover\:ty-bg-neutral\+\+:hover {
|
|
1074
|
-
background-color: var(--ty-bg-neutral-strong) !important;
|
|
1075
|
-
}
|
|
1076
|
-
|
|
1077
|
-
.hover\:ty-bg-primary:hover {
|
|
1078
|
-
background-color: var(--ty-bg-primary) !important;
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
|
-
.hover\:ty-bg-primary\+:hover {
|
|
1082
|
-
background-color: var(--ty-bg-primary-bold) !important;
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
.hover\:ty-bg-success:hover {
|
|
1088
|
-
background-color: var(--ty-bg-success) !important;
|
|
1089
|
-
}
|
|
1090
|
-
|
|
1091
|
-
.hover\:ty-bg-success\+:hover {
|
|
1092
|
-
background-color: var(--ty-bg-success-bold) !important;
|
|
1093
|
-
}
|
|
1094
|
-
|
|
1095
|
-
.hover\:ty-bg-danger:hover {
|
|
1096
|
-
background-color: var(--ty-bg-danger) !important;
|
|
1097
|
-
}
|
|
1098
|
-
|
|
1099
|
-
.hover\:ty-bg-danger\+:hover {
|
|
1100
|
-
background-color: var(--ty-bg-danger-bold) !important;
|
|
1101
|
-
}
|
|
1102
|
-
|
|
1103
|
-
.hover\:ty-bg-danger-:hover {
|
|
1104
|
-
background-color: var(--ty-bg-danger-soft) !important;
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
/* Hover states for text colors */
|
|
1108
|
-
.hover\:ty-text:hover {
|
|
1109
|
-
color: var(--ty-text) !important;
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
|
-
.hover\:ty-text\+:hover {
|
|
1113
|
-
color: var(--ty-text-bold) !important;
|
|
1114
|
-
}
|
|
1115
|
-
|
|
1116
|
-
.hover\:ty-text\+\+:hover {
|
|
1117
|
-
color: var(--ty-text-strong) !important;
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
.hover\:ty-text-:hover {
|
|
1121
|
-
color: var(--ty-text-soft) !important;
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
|
-
.hover\:ty-text--:hover {
|
|
1125
|
-
color: var(--ty-text-faint) !important;
|
|
1126
|
-
}
|
|
1127
|
-
|
|
1128
|
-
/* Hover states for semantic text colors */
|
|
1129
|
-
/* Primary text hover states */
|
|
1130
|
-
.hover\:ty-text-primary\+\+:hover {
|
|
1131
|
-
color: var(--ty-color-primary-strong) !important;
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
.hover\:ty-text-primary\+:hover {
|
|
1135
|
-
color: var(--ty-color-primary-bold) !important;
|
|
1136
|
-
}
|
|
1137
|
-
|
|
1138
|
-
.hover\:ty-text-primary:hover {
|
|
1139
|
-
color: var(--ty-color-primary) !important;
|
|
1140
|
-
}
|
|
1141
|
-
|
|
1142
|
-
.hover\:ty-text-primary-:hover {
|
|
1143
|
-
color: var(--ty-color-primary-soft) !important;
|
|
1144
|
-
}
|
|
1145
|
-
|
|
1146
|
-
.hover\:ty-text-primary--:hover {
|
|
1147
|
-
color: var(--ty-color-primary-faint) !important;
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
/* Success text hover states */
|
|
1155
|
-
.hover\:ty-text-success\+\+:hover {
|
|
1156
|
-
color: var(--ty-color-success-strong) !important;
|
|
1157
|
-
}
|
|
1158
|
-
|
|
1159
|
-
.hover\:ty-text-success\+:hover {
|
|
1160
|
-
color: var(--ty-color-success-bold) !important;
|
|
1161
|
-
}
|
|
1162
|
-
|
|
1163
|
-
.hover\:ty-text-success:hover {
|
|
1164
|
-
color: var(--ty-color-success) !important;
|
|
1165
|
-
}
|
|
1166
|
-
|
|
1167
|
-
.hover\:ty-text-success-:hover {
|
|
1168
|
-
color: var(--ty-color-success-soft) !important;
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
.hover\:ty-text-success--:hover {
|
|
1172
|
-
color: var(--ty-color-success-faint) !important;
|
|
1173
|
-
}
|
|
1174
|
-
|
|
1175
|
-
/* Danger text hover states */
|
|
1176
|
-
.hover\:ty-text-danger\+\+:hover {
|
|
1177
|
-
color: var(--ty-color-danger-strong) !important;
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
|
-
.hover\:ty-text-danger\+:hover {
|
|
1181
|
-
color: var(--ty-color-danger-bold) !important;
|
|
1182
|
-
}
|
|
1183
|
-
|
|
1184
|
-
.hover\:ty-text-danger:hover {
|
|
1185
|
-
color: var(--ty-color-danger) !important;
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
.hover\:ty-text-danger-:hover {
|
|
1189
|
-
color: var(--ty-color-danger-soft) !important;
|
|
1190
|
-
}
|
|
1191
|
-
|
|
1192
|
-
.hover\:ty-text-danger--:hover {
|
|
1193
|
-
color: var(--ty-color-danger-faint) !important;
|
|
1194
|
-
}
|
|
1195
|
-
|
|
1196
|
-
/* Warning text hover states */
|
|
1197
|
-
.hover\:ty-text-warning\+\+:hover {
|
|
1198
|
-
color: var(--ty-color-warning-strong) !important;
|
|
1199
|
-
}
|
|
1200
|
-
|
|
1201
|
-
.hover\:ty-text-warning\+:hover {
|
|
1202
|
-
color: var(--ty-color-warning-bold) !important;
|
|
1203
|
-
}
|
|
1204
|
-
|
|
1205
|
-
.hover\:ty-text-warning:hover {
|
|
1206
|
-
color: var(--ty-color-warning) !important;
|
|
1207
|
-
}
|
|
1208
|
-
|
|
1209
|
-
.hover\:ty-text-warning-:hover {
|
|
1210
|
-
color: var(--ty-color-warning-soft) !important;
|
|
1211
|
-
}
|
|
1212
|
-
|
|
1213
|
-
.hover\:ty-text-warning--:hover {
|
|
1214
|
-
color: var(--ty-color-warning-faint) !important;
|
|
1215
|
-
}
|
|
1216
|
-
|
|
1217
|
-
/* Neutral text hover states */
|
|
1218
|
-
.hover\:ty-text-neutral\+\+:hover {
|
|
1219
|
-
color: var(--ty-color-neutral-strong) !important;
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
|
-
.hover\:ty-text-neutral + :hover {
|
|
1223
|
-
color: var(--ty-color-neutral-bold) !important;
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1226
|
-
.hover\:ty-text-neutral:hover {
|
|
1227
|
-
color: var(--ty-color-neutral) !important;
|
|
1228
|
-
}
|
|
1229
|
-
|
|
1230
|
-
.hover\:ty-text-neutral-:hover {
|
|
1231
|
-
color: var(--ty-color-neutral-soft) !important;
|
|
1232
|
-
}
|
|
1233
|
-
|
|
1234
|
-
.hover\:ty-text-neutral--:hover {
|
|
1235
|
-
color: var(--ty-color-neutral-faint) !important;
|
|
1236
|
-
}
|
|
1237
|
-
|
|
1238
|
-
/* Hover states for borders */
|
|
1239
|
-
/* Base border hover states */
|
|
1240
|
-
.hover\:ty-border\+\+:hover {
|
|
1241
|
-
border-color: var(--ty-border-strong) !important;
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
.hover\:ty-border\+:hover {
|
|
1245
|
-
border-color: var(--ty-border-bold) !important;
|
|
1246
|
-
}
|
|
1247
|
-
|
|
1248
|
-
.hover\:ty-border:hover {
|
|
1249
|
-
border-color: var(--ty-border) !important;
|
|
1250
|
-
}
|
|
1251
|
-
|
|
1252
|
-
.hover\:ty-border-:hover {
|
|
1253
|
-
border-color: var(--ty-border-soft) !important;
|
|
1254
|
-
}
|
|
1255
|
-
|
|
1256
|
-
.hover\:ty-border--:hover {
|
|
1257
|
-
border-color: var(--ty-border-faint) !important;
|
|
1258
|
-
}
|
|
1259
|
-
|
|
1260
|
-
/* Semantic border hover states */
|
|
1261
|
-
.hover\:ty-border-primary:hover {
|
|
1262
|
-
border-color: var(--ty-border-primary) !important;
|
|
1263
|
-
}
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
.hover\:ty-border-success:hover {
|
|
1267
|
-
border-color: var(--ty-border-success) !important;
|
|
1268
|
-
}
|
|
1269
|
-
|
|
1270
|
-
.hover\:ty-border-danger:hover {
|
|
1271
|
-
border-color: var(--ty-border-danger) !important;
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
.hover\:ty-border-warning:hover {
|
|
1275
|
-
border-color: var(--ty-border-warning) !important;
|
|
1276
|
-
}
|
|
1277
|
-
|
|
1278
|
-
.hover\:ty-border-neutral:hover {
|
|
1279
|
-
border-color: var(--ty-border-neutral) !important;
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1282
|
-
.focus\:ty-border\+\+:focus {
|
|
1283
|
-
border-color: var(--ty-border-strong) !important;
|
|
1284
|
-
}
|
|
1285
|
-
|
|
1286
|
-
.focus\:ty-border + :focus {
|
|
1287
|
-
border-color: var(--ty-border-bold) !important;
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
.focus\:ty-border:focus {
|
|
1291
|
-
border-color: var(--ty-border) !important;
|
|
1292
|
-
}
|
|
1293
|
-
|
|
1294
|
-
.focus\:ty-border-:focus {
|
|
1295
|
-
border-color: var(--ty-border-soft) !important;
|
|
1296
|
-
}
|
|
1297
|
-
|
|
1298
|
-
.focus\:ty-border--:focus {
|
|
1299
|
-
border-color: var(--ty-border-faint) !important;
|
|
1300
|
-
}
|
|
1301
|
-
|
|
1302
|
-
/* Semantic border focus states */
|
|
1303
|
-
.focus\:ty-border-primary:focus {
|
|
1304
|
-
border-color: var(--ty-border-primary) !important;
|
|
1305
|
-
}
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
.focus\:ty-border-success:focus {
|
|
1309
|
-
border-color: var(--ty-border-success) !important;
|
|
1310
|
-
}
|
|
1311
|
-
|
|
1312
|
-
.focus\:ty-border-danger:focus {
|
|
1313
|
-
border-color: var(--ty-border-danger) !important;
|
|
1314
|
-
}
|
|
1315
|
-
|
|
1316
|
-
.focus\:ty-border-warning:focus {
|
|
1317
|
-
border-color: var(--ty-border-warning) !important;
|
|
1318
|
-
}
|
|
1319
|
-
|
|
1320
|
-
.focus\:ty-border-neutral:focus {
|
|
1321
|
-
border-color: var(--ty-border-neutral) !important;
|
|
1322
|
-
}
|
|
1323
|
-
|
|
1324
|
-
/* =================================================================
|
|
1325
|
-
RESPONSIVE VARIANTS
|
|
1326
|
-
================================================================= */
|
|
1327
|
-
|
|
1328
|
-
/* Small screens and up */
|
|
1329
|
-
@media (min-width: 640px) {
|
|
1330
|
-
.sm\:ty-bg-primary {
|
|
1331
|
-
background-color: var(--ty-bg-primary);
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
|
-
.sm\:ty-text-primary {
|
|
1335
|
-
color: var(--ty-color-primary);
|
|
1336
|
-
}
|
|
1337
|
-
}
|
|
1338
|
-
|
|
1339
|
-
/* Medium screens and up */
|
|
1340
|
-
@media (min-width: 768px) {
|
|
1341
|
-
.md\:ty-bg-primary {
|
|
1342
|
-
background-color: var(--ty-bg-primary);
|
|
1343
|
-
}
|
|
1344
|
-
|
|
1345
|
-
.md\:ty-text-primary {
|
|
1346
|
-
color: var(--ty-color-primary);
|
|
1347
|
-
}
|
|
1348
|
-
}
|
|
1349
|
-
|
|
1350
|
-
/* Large screens and up */
|
|
1351
|
-
@media (min-width: 1024px) {
|
|
1352
|
-
.lg\:ty-bg-primary {
|
|
1353
|
-
background-color: var(--ty-bg-primary);
|
|
1354
|
-
}
|
|
1355
|
-
|
|
1356
|
-
.lg\:ty-text-primary {
|
|
1357
|
-
color: var(--ty-color-primary);
|
|
1358
|
-
}
|
|
1359
|
-
}
|
|
1360
|
-
|
|
1361
|
-
/* =================================================================
|
|
1362
|
-
MOBILE FONT SIZE
|
|
1363
|
-
Prevents iOS Safari auto-zoom on input focus (requires >= 16px)
|
|
1364
|
-
and improves readability on small screens.
|
|
1365
|
-
================================================================= */
|
|
1366
|
-
|
|
1367
|
-
@media (max-width: 768px) {
|
|
1368
|
-
:root {
|
|
1369
|
-
--ty-font-sm: 1rem;
|
|
1370
|
-
}
|
|
1371
|
-
}
|
|
1372
|
-
|
|
1373
|
-
/* =================================================================
|
|
1374
|
-
MODAL BACKDROP ZOOM (opt-in)
|
|
1375
|
-
While any <ty-modal backdrop-zoom open> is open, the component toggles
|
|
1376
|
-
.ty-modal-zoom on <html> and the page body scales down slightly
|
|
1377
|
-
(Vaul/shadcn-style). The modal itself renders in the top layer, which
|
|
1378
|
-
escapes ancestor transforms — only the page behind it moves.
|
|
1379
|
-
Caveat: a scaled <body> becomes the containing block for position:fixed
|
|
1380
|
-
descendants — apps with fixed headers/sidebars should not use backdrop-zoom.
|
|
1381
|
-
================================================================= */
|
|
1382
|
-
|
|
1383
|
-
body {
|
|
1384
|
-
transition: scale var(--ty-modal-duration, 200ms) ease-out;
|
|
1385
|
-
}
|
|
1386
|
-
|
|
1387
|
-
html.ty-modal-zoom body {
|
|
1388
|
-
scale: 0.99;
|
|
1389
|
-
transform-origin: 50% 50%;
|
|
1390
|
-
}
|
|
1
|
+
ty-icon:not(:defined){display:inline-block;aspect-ratio:1 / 1;opacity:0;transition:opacity .15s ease-in}ty-icon:not(:defined),ty-icon:not(:defined)[size=md]{width:1em;height:1em}ty-icon:not(:defined)[size=xs]{width:.75em;height:.75em}ty-icon:not(:defined)[size=sm]{width:.875em;height:.875em}ty-icon:not(:defined)[size=lg]{width:1.25em;height:1.25em}ty-icon:not(:defined)[size=xl]{width:1.5em;height:1.5em}ty-icon:not(:defined)[size="2xl"]{width:2em;height:2em}ty-icon:not(:defined)[size="12"]{width:12px;height:12px}ty-icon:not(:defined)[size="14"]{width:14px;height:14px}ty-icon:not(:defined)[size="16"]{width:16px;height:16px}ty-icon:not(:defined)[size="18"]{width:18px;height:18px}ty-icon:not(:defined)[size="20"]{width:20px;height:20px}ty-icon:not(:defined)[size="24"]{width:24px;height:24px}ty-icon:not(:defined)[size="32"]{width:32px;height:32px}ty-icon:not(:defined)[size="48"]{width:48px;height:48px}ty-icon:not(:defined)[size="64"]{width:64px;height:64px}ty-icon:not(:defined)[size="80"]{width:80px;height:80px}ty-icon:not(:defined)[size="96"]{width:96px;height:96px}ty-icon{opacity:1}html{--ty-bg-faint: #f8fafc;--ty-bg-soft: #f1f5f9;--ty-bg: #ffffff;--ty-bg-bold: #f8fafc;--ty-bg-strong: #e2e8f0;--ty-focus-ring-gap: #ffffff;--ty-border-width: 1px;--ty-scrollbar-thumb: rgba(0, 0, 0, .35);--ty-scrollbar-thumb-hover: rgba(0, 0, 0, .5);--ty-scrollbar-thumb-active: rgba(0, 0, 0, .6);--ty-scrollbar-track: transparent;--ty-scrollbar-track-hover: rgba(0, 0, 0, .06);--ty-elevated-border-width: var(--ty-border-width);--ty-elevated-border-style: solid;--ty-floating-border-width: var(--ty-border-width);--ty-floating-border-style: solid;--ty-canvas-border: transparent;--ty-canvas-border-width: var(--ty-border-width);--ty-canvas-border-style: solid;--ty-content-border-width: var(--ty-border-width);--ty-content-border-style: solid;--ty-input-border-width: var(--ty-border-width);--ty-input-border-style: solid;--ty-divide-color: var(--ty-border);--ty-divide-width: var(--ty-border-width);--ty-modal-bg: #ffffff;--ty-modal-color: #111827;--ty-modal-border: #e5e7eb;--ty-modal-backdrop: rgba(0, 0, 0, .5);--ty-modal-backdrop-blur: blur(2px);--ty-modal-border-radius: 16px;--ty-modal-shadow: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--ty-modal-duration: .2s;--ty-modal-sm-width: 300px;--ty-modal-md-width: 500px;--ty-modal-lg-width: 700px;--ty-modal-xl-width: 900px;--ty-modal-full-width: 95vw;--ty-modal-full-height: 95vh;--ty-label-color: #374151;--ty-spacing-0: 0;--ty-spacing-px: 1px;--ty-spacing-mini: .125rem;--ty-spacing-1: .25rem;--ty-spacing-2: .5rem;--ty-spacing-3: .75rem;--ty-spacing-4: 1rem;--ty-spacing-5: 1.25rem;--ty-spacing-6: 1.5rem;--ty-spacing-7: 1.75rem;--ty-spacing-8: 2rem;--ty-spacing-9: 2.25rem;--ty-spacing-10: 2.5rem;--ty-spacing-12: 3rem;--ty-spacing-16: 4rem;--ty-spacing-20: 5rem;--ty-spacing-24: 6rem;--ty-radius-none: 0;--ty-radius-sm: .25rem;--ty-radius-base: .375rem;--ty-radius-md: .5rem;--ty-radius-lg: .75rem;--ty-radius-xl: 1rem;--ty-radius-2xl: 1.5rem;--ty-radius-3xl: 2rem;--ty-radius-full: 9999px;--ty-shadow-none: none;--ty-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--ty-shadow-base: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--ty-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--ty-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--ty-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--ty-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--ty-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--ty-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, monospace;--ty-font-xxs: .625rem;--ty-font-xs: .75rem;--ty-font-sm: .875rem;--ty-font-base: 1rem;--ty-font-lg: 1.125rem;--ty-font-xl: 1.25rem;--ty-font-2xl: 1.5rem;--ty-font-3xl: 1.875rem;--ty-font-4xl: 2.25rem;--ty-font-5xl: 3rem;--ty-leading-xxs: .9375rem;--ty-leading-xs: 1.05rem;--ty-leading-sm: 1.3125rem;--ty-leading-base: 1.5rem;--ty-leading-lg: 1.6875rem;--ty-leading-xl: 1.75rem;--ty-leading-2xl: 2rem;--ty-leading-3xl: 2.25rem;--ty-leading-4xl: 2.5rem;--ty-leading-5xl: 1;--ty-tracking-xxs: -.015em;--ty-tracking-xs: 0;--ty-tracking-sm: -.013em;--ty-tracking-base: -.011em;--ty-tracking-lg: 0;--ty-tracking-tight: -.022em;--ty-tracking-title: -.012em;--ty-font-thin: 100;--ty-font-light: 300;--ty-font-normal: 400;--ty-font-medium: 510;--ty-font-semibold: 590;--ty-font-bold: 680;--ty-font-extrabold: 800;--ty-weight-action: var(--ty-font-medium);--ty-weight-label: 440;--ty-button-depth: .35;--ty-button-border-l: -.08;--ty-button-border-l-neutral: -.25;--ty-line-height-none: 1;--ty-line-height-tight: 1.25;--ty-line-height-snug: 1.375;--ty-line-height-normal: 1.5;--ty-line-height-relaxed: 1.625;--ty-line-height-loose: 2;--ty-transition-none: none;--ty-transition-all: var(--ty-local-transition, all .15s cubic-bezier(.4, 0, .2, 1));--ty-transition-colors: var(--ty-local-transition, bg-color, border-color, color, fill, stroke .15s cubic-bezier(.4, 0, .2, 1));--ty-transition-shadow: var(--ty-local-transition, box-shadow .15s cubic-bezier(.4, 0, .2, 1));--ty-transition-transform: var(--ty-local-transition, transform .15s cubic-bezier(.4, 0, .2, 1));--ty-size-xs: 1.75rem;--ty-size-sm: 2rem;--ty-size-md: 2.25rem;--ty-size-lg: 2.5rem;--ty-size-xl: 2.75rem;--ty-z-auto: auto;--ty-z-0: 0;--ty-z-10: 10;--ty-z-20: 20;--ty-z-30: 30;--ty-z-40: 40;--ty-z-50: 50;--ty-z-sticky: 1020;--ty-z-fixed: 1030;--ty-z-modal-backdrop: 1040;--ty-z-modal: 1050;--ty-z-popover: 1060;--ty-z-tooltip: 1070;--ty-z-dropdown: 1080;--ty-scroll-shadow-top: radial-gradient( ellipse 100% 30% at center, rgba(0, 0, 0, .1), rgba(0, 0, 0, 0), transparent );--ty-scroll-shadow-bottom: radial-gradient( ellipse 100% 20% at center, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0), transparent );--ty-scroll-shadow-transition: opacity .2s ease-out;--ty-tooltip-bg: #262626;--ty-tooltip-color: #f5f5f5;--ty-tooltip-border: #404040;--ty-calendar-other-month-color: #6b7280}html.dark,html[data-theme=dark]{--ty-weight-action: var(--ty-font-normal);--ty-weight-label: var(--ty-font-normal);--ty-button-border-l: 0;--ty-button-border-l-neutral: .5;--ty-bg-faint: #0f1419;--ty-bg-soft: #111827;--ty-bg: #1f2937;--ty-bg-bold: #374151;--ty-bg-strong: #6b7280;--ty-focus-ring-gap: #1f2937;--ty-scrollbar-thumb: rgba(255, 255, 255, .13);--ty-scrollbar-thumb-hover: rgba(255, 255, 255, .22);--ty-scrollbar-thumb-active: rgba(255, 255, 255, .3);--ty-scrollbar-track: transparent;--ty-scrollbar-track-hover: rgba(255, 255, 255, .04);--ty-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .2);--ty-shadow-base: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--ty-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--ty-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .3), 0 4px 6px -4px rgba(0, 0, 0, .3);--ty-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .3), 0 8px 10px -6px rgba(0, 0, 0, .3);--ty-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .5);--ty-label-color: #d1d5db;--ty-modal-bg: var(--ty-bg-bold);--ty-modal-color: var(--ty-color-neutral-bold);--ty-modal-border: var(--ty-border);--ty-modal-backdrop: rgba(0, 0, 0, .7);--ty-modal-shadow: 0 20px 25px -5px rgba(0, 0, 0, .4), 0 10px 10px -5px rgba(0, 0, 0, .2);--ty-scroll-shadow-top: radial-gradient( ellipse 100% 30% at center, rgba(172, 172, 172, .2), rgba(0, 0, 0, 0), transparent );--ty-scroll-shadow-bottom: radial-gradient( ellipse 100% 20% at center, rgba(172, 172, 172, .3), rgba(0, 0, 0, 0), transparent );--ty-calendar-other-month-color: #8a8a8a}::selection{background-color:var(--ty-selection-bg, var(--ty-bg-primary-bold));color:var(--ty-selection-color, var(--ty-text-strong))}::-moz-selection{background-color:var(--ty-selection-bg, var(--ty-color-primary));color:var(--ty-selection-color, var(--ty-text-strong))}pre ::selection,code ::selection,pre::-moz-selection,code::-moz-selection{background-color:var(--ty-color-warning-soft);color:var(--ty-color-neutral-strong)}html.dark pre ::selection,html.dark code ::selection,html.dark pre::-moz-selection,html.dark code::-moz-selection{background-color:var(--ty-color-warning);color:var(--ty-bg-strong)}input::selection,textarea::selection,input::-moz-selection,textarea::-moz-selection{background-color:var(--ty-color-primary);color:#fff}html.dark input::selection,html.dark textarea::selection,html.dark input::-moz-selection,html.dark textarea::-moz-selection{background-color:var(--ty-color-primary-soft);color:var(--ty-color-primary-strong)}.ty-selection-primary ::selection,.ty-selection-primary::-moz-selection{background-color:var(--ty-color-primary-soft);color:var(--ty-color-primary-strong)}.ty-selection-success ::selection,.ty-selection-success::-moz-selection{background-color:var(--ty-color-success-soft);color:var(--ty-color-success-strong)}.ty-selection-warning ::selection,.ty-selection-warning::-moz-selection{background-color:var(--ty-color-warning-soft);color:var(--ty-color-warning-strong)}.ty-selection-danger ::selection,.ty-selection-danger::-moz-selection{background-color:var(--ty-color-danger-soft);color:var(--ty-color-danger-strong)}.ty-selection-neutral ::selection,.ty-selection-neutral::-moz-selection{background-color:var(--ty-color-neutral-soft);color:var(--ty-color-neutral-strong)}html.dark .ty-selection-primary ::selection,html.dark .ty-selection-primary::-moz-selection{background-color:var(--ty-color-primary);color:#fff}html.dark .ty-selection-success ::selection,html.dark .ty-selection-success::-moz-selection{background-color:var(--ty-color-success);color:#fff}html.dark .ty-selection-warning ::selection,html.dark .ty-selection-warning::-moz-selection{background-color:var(--ty-color-warning);color:var(--ty-bg-strong)}html.dark .ty-selection-danger ::selection,html.dark .ty-selection-danger::-moz-selection{background-color:var(--ty-color-danger);color:#fff}html.dark .ty-selection-neutral ::selection,html.dark .ty-selection-neutral::-moz-selection{background-color:var(--ty-color-neutral);color:#fff}html *,html :before,html :after{border-color:var(--ty-border)}.ty-elevated{box-sizing:border-box!important;background-color:var(--ty-surface-elevated)!important;border:var(--ty-elevated-border-width, var(--ty-border-width, 1px)) var(--ty-elevated-border-style, solid) var(--ty-elevated-border, transparent)!important;box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a!important;--ty-divide-color: var(--ty-elevated-border)}.ty-floating{box-sizing:border-box!important;background-color:var(--ty-surface-floating)!important;border:var(--ty-floating-border-width, var(--ty-border-width, 1px)) var(--ty-floating-border-style, solid) var(--ty-floating-border, transparent)!important;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a!important;--ty-divide-color: var(--ty-floating-border)}.ty-canvas{box-sizing:border-box!important;background-color:var(--ty-surface-canvas)!important;border:var(--ty-canvas-border-width, var(--ty-border-width, 1px)) var(--ty-canvas-border-style, solid) var(--ty-canvas-border, transparent)!important;--ty-divide-color: var(--ty-canvas-border)}.ty-content{box-sizing:border-box!important;background-color:var(--ty-surface-content)!important;border:var(--ty-content-border-width, var(--ty-border-width, 1px)) var(--ty-content-border-style, solid) var(--ty-content-border, transparent)!important;--ty-divide-color: var(--ty-content-border)}.ty-input{box-sizing:border-box!important;background-color:var(--ty-input-bg)!important;border:var(--ty-input-border-width, var(--ty-border-width, 1px)) var(--ty-input-border-style, solid) var(--ty-input-border, transparent)!important;--ty-divide-color: var(--ty-input-border)}.ty-divide-y>*+*{border-top:var(--ty-divide-width, var(--ty-border-width, 1px)) solid var(--ty-divide-color, var(--ty-border))}.ty-divide-x>*+*{border-left:var(--ty-divide-width, var(--ty-border-width, 1px)) solid var(--ty-divide-color, var(--ty-border))}html.dark .ty-elevated{background-color:var(--ty-surface-elevated)!important;box-shadow:0 1px 3px #0003,0 1px 2px -1px #0003!important}html.dark .ty-floating{background-color:var(--ty-surface-floating)!important;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -2px #0000004d!important}html.dark .ty-high-elevation{background-color:var(--ty-surface-floating)!important;box-shadow:0 10px 15px -3px #0006,0 4px 6px -4px #0006!important}html.dark .ty-sunken{background-color:var(--ty-surface-input)!important;box-shadow:inset 0 1px 2px #0000001a!important}.ty-bg-primary{background-color:var(--ty-bg-primary)}.ty-bg-primary\+{background-color:var(--ty-bg-primary-bold)}.ty-bg-primary-{background-color:var(--ty-bg-primary-soft)}.ty-bg-success{background-color:var(--ty-bg-success)}.ty-bg-success\+{background-color:var(--ty-bg-success-bold)}.ty-bg-success-{background-color:var(--ty-bg-success-soft)}.ty-bg-danger{background-color:var(--ty-bg-danger)}.ty-bg-danger\+{background-color:var(--ty-bg-danger-bold)}.ty-bg-danger-{background-color:var(--ty-bg-danger-soft)}.ty-bg-warning{background-color:var(--ty-bg-warning)}.ty-bg-warning\+{background-color:var(--ty-bg-warning-bold)}.ty-bg-warning-{background-color:var(--ty-bg-warning-soft)}.ty-bg-neutral{background-color:var(--ty-bg-neutral)}.ty-bg-neutral\+{background-color:var(--ty-bg-neutral-bold)}.ty-bg-neutral-{background-color:var(--ty-bg-neutral-soft)}.ty-text{color:var(--ty-text)!important}.ty-text\+{color:var(--ty-text-bold)!important}.ty-text\+\+{color:var(--ty-text-strong)!important}.ty-text-{color:var(--ty-text-soft)!important}.ty-text--{color:var(--ty-text-faint)!important}.ty-text-primary\+\+{color:var(--ty-color-primary-strong)!important}.ty-text-primary\+{color:var(--ty-color-primary-bold)!important}.ty-text-primary{color:var(--ty-color-primary)!important}.ty-text-primary-{color:var(--ty-color-primary-soft)!important}.ty-text-primary--{color:var(--ty-color-primary-faint)!important}.ty-text-success\+\+{color:var(--ty-color-success-strong)!important}.ty-text-success\+{color:var(--ty-color-success-bold)!important}.ty-text-success{color:var(--ty-color-success)!important}.ty-text-success-{color:var(--ty-color-success-soft)!important}.ty-text-success--{color:var(--ty-color-success-faint)!important}.ty-text-danger\+\+{color:var(--ty-color-danger-strong)!important}.ty-text-danger\+{color:var(--ty-color-danger-bold)!important}.ty-text-danger{color:var(--ty-color-danger)!important}.ty-text-danger-{color:var(--ty-color-danger-soft)!important}.ty-text-danger--{color:var(--ty-color-danger-faint)!important}.ty-text-warning\+\+{color:var(--ty-color-warning-strong)!important}.ty-text-warning\+{color:var(--ty-color-warning-bold)!important}.ty-text-warning{color:var(--ty-color-warning)!important}.ty-text-warning-{color:var(--ty-color-warning-soft)!important}.ty-text-warning--{color:var(--ty-color-warning-faint)!important}.ty-text-neutral\+\+{color:var(--ty-color-neutral-strong)!important}.ty-text-neutral\+{color:var(--ty-color-neutral-bold)!important}.ty-text-neutral{color:var(--ty-color-neutral)!important}.ty-text-neutral-{color:var(--ty-color-neutral-soft)!important}.ty-text-neutral--{color:var(--ty-color-neutral-faint)!important}.ty-border{border-color:var(--ty-border)!important}.ty-border\+{border-color:var(--ty-border-bold)!important}.ty-border\+\+{border-color:var(--ty-border-strong)!important}.ty-border-{border-color:var(--ty-border-soft)}.ty-border--{border-color:var(--ty-border-faint)}.ty-border-primary{border-color:var(--ty-border-primary)}.ty-border-success{border-color:var(--ty-border-success)}.ty-border-danger{border-color:var(--ty-border-danger)}.ty-border-warning{border-color:var(--ty-border-warning)}.ty-border-neutral{border-color:var(--ty-border-neutral)}.ty-card{background-color:var(--ty-surface-elevated);color:var(--ty-color-neutral-bold)}.ty-card-elevated{background-color:var(--ty-surface-floating);box-shadow:var(--ty-shadow-md)}.ty-input-bg{background-color:var(--ty-input-bg)}.ty-input-border{border-color:var(--ty-input-border)}.ty-input-focus{border-color:var(--ty-input-border-focus)}.ty-modal-bg{background-color:var(--ty-modal-bg)}.ty-modal-backdrop{background-color:var(--ty-modal-backdrop)}.hover\:ty-bg-neutral--:hover{background-color:var(--ty-bg-neutral-faint)!important}.hover\:ty-bg-neutral-:hover{background-color:var(--ty-bg-neutral-soft)!important}.hover\:ty-bg-neutral:hover{background-color:var(--ty-bg-neutral)!important}.hover\:ty-bg-neutral\+:hover{background-color:var(--ty-bg-neutral-bold)!important}.hover\:ty-bg-neutral\+\+:hover{background-color:var(--ty-bg-neutral-strong)!important}.hover\:ty-bg-primary:hover{background-color:var(--ty-bg-primary)!important}.hover\:ty-bg-primary\+:hover{background-color:var(--ty-bg-primary-bold)!important}.hover\:ty-bg-success:hover{background-color:var(--ty-bg-success)!important}.hover\:ty-bg-success\+:hover{background-color:var(--ty-bg-success-bold)!important}.hover\:ty-bg-danger:hover{background-color:var(--ty-bg-danger)!important}.hover\:ty-bg-danger\+:hover{background-color:var(--ty-bg-danger-bold)!important}.hover\:ty-bg-danger-:hover{background-color:var(--ty-bg-danger-soft)!important}.hover\:ty-text:hover{color:var(--ty-text)!important}.hover\:ty-text\+:hover{color:var(--ty-text-bold)!important}.hover\:ty-text\+\+:hover{color:var(--ty-text-strong)!important}.hover\:ty-text-:hover{color:var(--ty-text-soft)!important}.hover\:ty-text--:hover{color:var(--ty-text-faint)!important}.hover\:ty-text-primary\+\+:hover{color:var(--ty-color-primary-strong)!important}.hover\:ty-text-primary\+:hover{color:var(--ty-color-primary-bold)!important}.hover\:ty-text-primary:hover{color:var(--ty-color-primary)!important}.hover\:ty-text-primary-:hover{color:var(--ty-color-primary-soft)!important}.hover\:ty-text-primary--:hover{color:var(--ty-color-primary-faint)!important}.hover\:ty-text-success\+\+:hover{color:var(--ty-color-success-strong)!important}.hover\:ty-text-success\+:hover{color:var(--ty-color-success-bold)!important}.hover\:ty-text-success:hover{color:var(--ty-color-success)!important}.hover\:ty-text-success-:hover{color:var(--ty-color-success-soft)!important}.hover\:ty-text-success--:hover{color:var(--ty-color-success-faint)!important}.hover\:ty-text-danger\+\+:hover{color:var(--ty-color-danger-strong)!important}.hover\:ty-text-danger\+:hover{color:var(--ty-color-danger-bold)!important}.hover\:ty-text-danger:hover{color:var(--ty-color-danger)!important}.hover\:ty-text-danger-:hover{color:var(--ty-color-danger-soft)!important}.hover\:ty-text-danger--:hover{color:var(--ty-color-danger-faint)!important}.hover\:ty-text-warning\+\+:hover{color:var(--ty-color-warning-strong)!important}.hover\:ty-text-warning\+:hover{color:var(--ty-color-warning-bold)!important}.hover\:ty-text-warning:hover{color:var(--ty-color-warning)!important}.hover\:ty-text-warning-:hover{color:var(--ty-color-warning-soft)!important}.hover\:ty-text-warning--:hover{color:var(--ty-color-warning-faint)!important}.hover\:ty-text-neutral\+\+:hover{color:var(--ty-color-neutral-strong)!important}.hover\:ty-text-neutral+:hover{color:var(--ty-color-neutral-bold)!important}.hover\:ty-text-neutral:hover{color:var(--ty-color-neutral)!important}.hover\:ty-text-neutral-:hover{color:var(--ty-color-neutral-soft)!important}.hover\:ty-text-neutral--:hover{color:var(--ty-color-neutral-faint)!important}.hover\:ty-border\+\+:hover{border-color:var(--ty-border-strong)!important}.hover\:ty-border\+:hover{border-color:var(--ty-border-bold)!important}.hover\:ty-border:hover{border-color:var(--ty-border)!important}.hover\:ty-border-:hover{border-color:var(--ty-border-soft)!important}.hover\:ty-border--:hover{border-color:var(--ty-border-faint)!important}.hover\:ty-border-primary:hover{border-color:var(--ty-border-primary)!important}.hover\:ty-border-success:hover{border-color:var(--ty-border-success)!important}.hover\:ty-border-danger:hover{border-color:var(--ty-border-danger)!important}.hover\:ty-border-warning:hover{border-color:var(--ty-border-warning)!important}.hover\:ty-border-neutral:hover{border-color:var(--ty-border-neutral)!important}.focus\:ty-border\+\+:focus{border-color:var(--ty-border-strong)!important}.focus\:ty-border+:focus{border-color:var(--ty-border-bold)!important}.focus\:ty-border:focus{border-color:var(--ty-border)!important}.focus\:ty-border-:focus{border-color:var(--ty-border-soft)!important}.focus\:ty-border--:focus{border-color:var(--ty-border-faint)!important}.focus\:ty-border-primary:focus{border-color:var(--ty-border-primary)!important}.focus\:ty-border-success:focus{border-color:var(--ty-border-success)!important}.focus\:ty-border-danger:focus{border-color:var(--ty-border-danger)!important}.focus\:ty-border-warning:focus{border-color:var(--ty-border-warning)!important}.focus\:ty-border-neutral:focus{border-color:var(--ty-border-neutral)!important}@media(min-width:640px){.sm\:ty-bg-primary{background-color:var(--ty-bg-primary)}.sm\:ty-text-primary{color:var(--ty-color-primary)}}@media(min-width:768px){.md\:ty-bg-primary{background-color:var(--ty-bg-primary)}.md\:ty-text-primary{color:var(--ty-color-primary)}}@media(min-width:1024px){.lg\:ty-bg-primary{background-color:var(--ty-bg-primary)}.lg\:ty-text-primary{color:var(--ty-color-primary)}}@media(max-width:768px){:root{--ty-font-sm: 1rem}}body{transition:scale var(--ty-modal-duration, .2s) ease-out}html.ty-modal-zoom body{scale:.99;transform-origin:50% 50%}
|