@usetheo/ui 0.35.3 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/composites/stepper/stepper.d.ts +6 -0
- package/dist/components/primitives/card/card.d.ts +19 -0
- package/dist/components/primitives/dialog/dialog.d.ts +2 -0
- package/dist/components/primitives/sidebar/sidebar.d.ts +62 -4
- package/dist/components.css +2 -0
- package/dist/fonts/geist-400.woff2 +0 -0
- package/dist/fonts/geist-500.woff2 +0 -0
- package/dist/fonts/geist-600.woff2 +0 -0
- package/dist/fonts/geist-mono-400.woff2 +0 -0
- package/dist/fonts/geist-mono-500.woff2 +0 -0
- package/dist/fonts/geist-mono-600.woff2 +0 -0
- package/dist/fonts-cdn.css +28 -0
- package/dist/fonts.css +75 -0
- package/dist/index.js +63 -23
- package/dist/preset.css +27 -0
- package/dist/styles-v3-legacy.css +88 -0
- package/dist/styles.css +137 -0
- package/dist/tokens-v4.css +223 -0
- package/dist/tokens.css +315 -0
- package/package.json +15 -4
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
@import "./fonts.css";
|
|
2
|
+
@import "./tokens.css";
|
|
3
|
+
|
|
4
|
+
@tailwind base;
|
|
5
|
+
@tailwind components;
|
|
6
|
+
@tailwind utilities;
|
|
7
|
+
|
|
8
|
+
@layer base {
|
|
9
|
+
* {
|
|
10
|
+
border-color: hsl(var(--border));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
html {
|
|
14
|
+
font-family: var(--font-body);
|
|
15
|
+
-webkit-font-smoothing: antialiased;
|
|
16
|
+
-moz-osx-font-smoothing: grayscale;
|
|
17
|
+
text-rendering: optimizeLegibility;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
body {
|
|
21
|
+
background-color: hsl(var(--background));
|
|
22
|
+
color: hsl(var(--foreground));
|
|
23
|
+
/* OpenType ligatures globally — Geist's "liga" feature is structural
|
|
24
|
+
* and gives the Vercel-tight glyph combinations. */
|
|
25
|
+
font-feature-settings: "liga" 1, "ss01" 1;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Display headings inherit theme display font (Geist by default).
|
|
29
|
+
* Per-size tracking is set in tailwind.config.ts; this is the safety net. */
|
|
30
|
+
h1,
|
|
31
|
+
h2,
|
|
32
|
+
h3,
|
|
33
|
+
h4 {
|
|
34
|
+
font-family: var(--font-display);
|
|
35
|
+
font-weight: 600;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Code surfaces: use the mono token + tabular numerals so columns of
|
|
39
|
+
* numbers line up in tables/logs/metrics. */
|
|
40
|
+
code,
|
|
41
|
+
pre,
|
|
42
|
+
kbd,
|
|
43
|
+
samp {
|
|
44
|
+
font-family: var(--font-mono);
|
|
45
|
+
font-feature-settings: "tnum" 1, "liga" 1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Focus ring — violet (signature) */
|
|
49
|
+
:focus-visible {
|
|
50
|
+
outline: 2px solid hsl(var(--ring));
|
|
51
|
+
outline-offset: 2px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Selection — soft violet */
|
|
55
|
+
::selection {
|
|
56
|
+
background-color: hsl(var(--primary) / 0.25);
|
|
57
|
+
color: hsl(var(--foreground));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Native scrollbar fallback (Violet Forge).
|
|
61
|
+
* Used for native browser scroll on elements that don't wrap in <ScrollArea>.
|
|
62
|
+
* Components that DO use <ScrollArea> hide the native scrollbar via Radix.
|
|
63
|
+
*/
|
|
64
|
+
*::-webkit-scrollbar {
|
|
65
|
+
width: 10px;
|
|
66
|
+
height: 10px;
|
|
67
|
+
}
|
|
68
|
+
*::-webkit-scrollbar-track {
|
|
69
|
+
background: transparent;
|
|
70
|
+
}
|
|
71
|
+
*::-webkit-scrollbar-thumb {
|
|
72
|
+
background-color: hsl(var(--primary) / 0.25);
|
|
73
|
+
border: 2px solid transparent;
|
|
74
|
+
background-clip: content-box;
|
|
75
|
+
border-radius: 9999px;
|
|
76
|
+
transition: background-color var(--duration-fast) var(--ease-out-soft);
|
|
77
|
+
}
|
|
78
|
+
*::-webkit-scrollbar-thumb:hover {
|
|
79
|
+
background-color: hsl(var(--primary) / 0.5);
|
|
80
|
+
}
|
|
81
|
+
*::-webkit-scrollbar-thumb:active {
|
|
82
|
+
background-color: hsl(var(--primary) / 0.75);
|
|
83
|
+
}
|
|
84
|
+
* {
|
|
85
|
+
scrollbar-width: thin;
|
|
86
|
+
scrollbar-color: hsl(var(--primary) / 0.3) transparent;
|
|
87
|
+
}
|
|
88
|
+
}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/* Theo UI — Tailwind v4 prebuilt entry stylesheet.
|
|
2
|
+
*
|
|
3
|
+
* What ships at `@theokit/ui/styles.css` since RFC 0008 follow-up
|
|
4
|
+
* (`0.5.1-next.0`). Consumer imports this once and the framework's
|
|
5
|
+
* Tailwind v4 build picks up:
|
|
6
|
+
* - `@import "tailwindcss"` — Tailwind v4 core (preflight + utilities)
|
|
7
|
+
* - `@import "./fonts.css"` — self-hosted Geist + Geist Mono @font-face
|
|
8
|
+
* - `@import "./tokens.css"` — runtime `--*` vars (theme cascade target)
|
|
9
|
+
* - `@import "./tokens-v4.css"` — `@theme { --color-*, --text-*, … }`
|
|
10
|
+
* namespace Tailwind v4 reads to emit utilities
|
|
11
|
+
* - `@layer base` — `border-color`, body font, focus ring, scrollbar
|
|
12
|
+
* styling that depend on the runtime vars
|
|
13
|
+
*
|
|
14
|
+
* v3-only consumers (Tailwind 3.x + the shadcn registry preset) should
|
|
15
|
+
* load `@theokit/ui/styles-v3-legacy.css` instead — that file is the
|
|
16
|
+
* unchanged `@tailwind base; @tailwind components; @tailwind utilities`
|
|
17
|
+
* variant. See RFC 0008 follow-up.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
@import "tailwindcss";
|
|
21
|
+
@import "./fonts.css";
|
|
22
|
+
@import "./tokens.css";
|
|
23
|
+
@import "./tokens-v4.css";
|
|
24
|
+
|
|
25
|
+
@layer base {
|
|
26
|
+
* {
|
|
27
|
+
border-color: hsl(var(--border));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Tailwind v4 preflight regression compensation —
|
|
31
|
+
* v4 intentionally dropped the `button { cursor: pointer }` rule
|
|
32
|
+
* (https://tailwindcss.com/docs/upgrade-guide#default-button-cursor)
|
|
33
|
+
* so every native <button> renders with the default arrow cursor.
|
|
34
|
+
*
|
|
35
|
+
* Library authors are expected to opt in explicitly per button. The
|
|
36
|
+
* Violet Forge `<Button>` primitive does so (see its CVA). For the
|
|
37
|
+
* dozens of native <button> elements composites render directly,
|
|
38
|
+
* we restore the v3 behavior here — scoped to *interactive* buttons:
|
|
39
|
+
*
|
|
40
|
+
* - `:not(:disabled)` skips the HTML `disabled` attribute path
|
|
41
|
+
* (browser already shows `cursor: default` for disabled, but the
|
|
42
|
+
* rule below stays explicit for clarity).
|
|
43
|
+
* - `:not([aria-disabled="true"])` skips the ARIA-disabled path
|
|
44
|
+
* (where the button stays focusable but acts as no-op).
|
|
45
|
+
*
|
|
46
|
+
* This is an EXPLICIT opt-in by the library author for consumers who
|
|
47
|
+
* imported `@theokit/ui/styles.css` — it does NOT alter Tailwind's
|
|
48
|
+
* global preflight, only this stylesheet's @layer base.
|
|
49
|
+
*/
|
|
50
|
+
button:not(:disabled):not([aria-disabled="true"]),
|
|
51
|
+
[role="button"]:not([aria-disabled="true"]) {
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
html {
|
|
56
|
+
font-family: var(--font-body);
|
|
57
|
+
-webkit-font-smoothing: antialiased;
|
|
58
|
+
-moz-osx-font-smoothing: grayscale;
|
|
59
|
+
text-rendering: optimizeLegibility;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
body {
|
|
63
|
+
background-color: hsl(var(--background));
|
|
64
|
+
color: hsl(var(--foreground));
|
|
65
|
+
/* OpenType ligatures globally — Geist's "liga" feature is structural
|
|
66
|
+
* and gives the Vercel-tight glyph combinations. */
|
|
67
|
+
font-feature-settings: "liga" 1, "ss01" 1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Display headings inherit theme display font (Geist by default).
|
|
71
|
+
* Per-size tracking is set in tokens-v4.css; this is the safety net. */
|
|
72
|
+
h1,
|
|
73
|
+
h2,
|
|
74
|
+
h3,
|
|
75
|
+
h4 {
|
|
76
|
+
font-family: var(--font-display);
|
|
77
|
+
font-weight: 600;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Code surfaces: use the mono token + tabular numerals so columns of
|
|
81
|
+
* numbers line up in tables/logs/metrics. */
|
|
82
|
+
code,
|
|
83
|
+
pre,
|
|
84
|
+
kbd,
|
|
85
|
+
samp {
|
|
86
|
+
font-family: var(--font-mono);
|
|
87
|
+
font-feature-settings: "tnum" 1, "liga" 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Focus ring — violet (signature) */
|
|
91
|
+
:focus-visible {
|
|
92
|
+
outline: 2px solid hsl(var(--ring));
|
|
93
|
+
outline-offset: 2px;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Selection — soft violet */
|
|
97
|
+
::selection {
|
|
98
|
+
background-color: hsl(var(--primary) / 0.25);
|
|
99
|
+
color: hsl(var(--foreground));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Native scrollbar fallback (Violet Forge).
|
|
103
|
+
* Used for native browser scroll on elements that don't wrap in <ScrollArea>.
|
|
104
|
+
* Components that DO use <ScrollArea> hide the native scrollbar via Radix.
|
|
105
|
+
*/
|
|
106
|
+
*::-webkit-scrollbar {
|
|
107
|
+
width: 10px;
|
|
108
|
+
height: 10px;
|
|
109
|
+
}
|
|
110
|
+
*::-webkit-scrollbar-track {
|
|
111
|
+
background: transparent;
|
|
112
|
+
}
|
|
113
|
+
*::-webkit-scrollbar-thumb {
|
|
114
|
+
background-color: hsl(var(--primary) / 0.25);
|
|
115
|
+
border: 2px solid transparent;
|
|
116
|
+
background-clip: content-box;
|
|
117
|
+
border-radius: 9999px;
|
|
118
|
+
transition: background-color var(--duration-fast) var(--ease-out-soft);
|
|
119
|
+
}
|
|
120
|
+
*::-webkit-scrollbar-thumb:hover {
|
|
121
|
+
background-color: hsl(var(--primary) / 0.5);
|
|
122
|
+
}
|
|
123
|
+
*::-webkit-scrollbar-thumb:active {
|
|
124
|
+
background-color: hsl(var(--primary) / 0.75);
|
|
125
|
+
}
|
|
126
|
+
* {
|
|
127
|
+
scrollbar-width: thin;
|
|
128
|
+
scrollbar-color: hsl(var(--primary) / 0.3) transparent;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* RFC 0008 follow-up #2 — pre-compiled utility rules. The bytes here
|
|
133
|
+
* are emitted at build time by `scripts/build-precompiled-css.ts` so
|
|
134
|
+
* consumers do not depend on Tailwind v4 `@source` scanning the
|
|
135
|
+
* library's node_modules tree (which breaks under pnpm symlinks).
|
|
136
|
+
*/
|
|
137
|
+
@import "./components.css";
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/* Theo UI — Tailwind v4 theme aliases.
|
|
2
|
+
*
|
|
3
|
+
* Companion to `tokens.css`. The base file declares the v3-style runtime
|
|
4
|
+
* variables (`--primary`, `--background`, …) that `<ThemeProvider>` and
|
|
5
|
+
* `[data-theme]` cascades mutate at runtime. This file declares the
|
|
6
|
+
* Tailwind v4 `@theme` namespace (`--color-primary`, `--color-background`,
|
|
7
|
+
* …) by aliasing back to those runtime vars via `hsl(var(--*))`.
|
|
8
|
+
*
|
|
9
|
+
* Why two layers:
|
|
10
|
+
* - `<ThemeProvider>` (and the 10 built-in themes) sets `--primary`
|
|
11
|
+
* etc. at runtime — that's the theme switch surface.
|
|
12
|
+
* - Tailwind v4 resolves color utilities exclusively through
|
|
13
|
+
* `--color-*` tokens declared in `@theme`. Without these aliases
|
|
14
|
+
* `bg-primary`, `text-muted-foreground`, `border-border`, etc. emit
|
|
15
|
+
* a className with no matching CSS rule.
|
|
16
|
+
*
|
|
17
|
+
* The indirection (`--color-primary: var(--primary)`) preserves the
|
|
18
|
+
* runtime theme cascade — browsers resolve `var(--color-primary)` →
|
|
19
|
+
* `var(--primary)` → current `[data-theme]` value at paint time.
|
|
20
|
+
*
|
|
21
|
+
* See RFC 0008 follow-up.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/* `@theme inline` (Tailwind v4 keyword) preserves the var() reference at
|
|
25
|
+
* runtime instead of inlining the value at build time. Without `inline`,
|
|
26
|
+
* `--color-primary: var(--primary)` would resolve to whatever `--primary`
|
|
27
|
+
* was when Tailwind compiled the CSS — breaking the theme cascade.
|
|
28
|
+
* See https://tailwindcss.com/docs/theme#using-your-theme-variables-in-arbitrary-values
|
|
29
|
+
*/
|
|
30
|
+
@theme inline {
|
|
31
|
+
/* Color tokens ------------------------------------------------------ */
|
|
32
|
+
--color-background: var(--background);
|
|
33
|
+
--color-foreground: var(--foreground);
|
|
34
|
+
|
|
35
|
+
--color-card: var(--card);
|
|
36
|
+
--color-card-foreground: var(--card-foreground);
|
|
37
|
+
|
|
38
|
+
--color-popover: var(--popover);
|
|
39
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
40
|
+
|
|
41
|
+
--color-primary: var(--primary);
|
|
42
|
+
--color-primary-deep: var(--primary-deep);
|
|
43
|
+
--color-primary-glow: var(--primary-glow);
|
|
44
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
45
|
+
|
|
46
|
+
--color-secondary: var(--secondary);
|
|
47
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
48
|
+
|
|
49
|
+
--color-accent: var(--accent);
|
|
50
|
+
--color-accent-deep: var(--accent-deep);
|
|
51
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
52
|
+
|
|
53
|
+
--color-muted: var(--muted);
|
|
54
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
55
|
+
|
|
56
|
+
--color-border: var(--border);
|
|
57
|
+
--color-input: var(--input);
|
|
58
|
+
--color-ring: var(--ring);
|
|
59
|
+
|
|
60
|
+
--color-success: var(--success);
|
|
61
|
+
--color-success-foreground: var(--success-foreground);
|
|
62
|
+
--color-warning: var(--warning);
|
|
63
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
64
|
+
--color-destructive: var(--destructive);
|
|
65
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
66
|
+
--color-info: var(--info);
|
|
67
|
+
--color-info-foreground: var(--info-foreground);
|
|
68
|
+
|
|
69
|
+
/* Status group (D4) ------------------------------------------------- */
|
|
70
|
+
--color-status-online: var(--status-online);
|
|
71
|
+
--color-status-online-foreground: var(--status-online-foreground);
|
|
72
|
+
--color-status-offline: var(--status-offline);
|
|
73
|
+
--color-status-offline-foreground: var(--status-offline-foreground);
|
|
74
|
+
--color-status-degraded: var(--status-degraded);
|
|
75
|
+
--color-status-degraded-foreground: var(--status-degraded-foreground);
|
|
76
|
+
--color-status-info: var(--status-info);
|
|
77
|
+
--color-status-info-foreground: var(--status-info-foreground);
|
|
78
|
+
|
|
79
|
+
/* Fonts ------------------------------------------------------------- */
|
|
80
|
+
--font-display: var(--font-display);
|
|
81
|
+
--font-sans: var(--font-body);
|
|
82
|
+
--font-mono: var(--font-mono);
|
|
83
|
+
|
|
84
|
+
/* Violet Forge typescale -------------------------------------------- *
|
|
85
|
+
* Compound text utilities: each `--text-{name}` declares the size,
|
|
86
|
+
* with companion `--*--line-height`, `--*--letter-spacing`, and
|
|
87
|
+
* `--*--font-weight` properties Tailwind v4 picks up automatically.
|
|
88
|
+
*/
|
|
89
|
+
--text-display-2xl: 64px;
|
|
90
|
+
--text-display-2xl--line-height: 1;
|
|
91
|
+
--text-display-2xl--letter-spacing: -0.0464em;
|
|
92
|
+
--text-display-2xl--font-weight: 600;
|
|
93
|
+
|
|
94
|
+
--text-display-xl: 48px;
|
|
95
|
+
--text-display-xl--line-height: 1.05;
|
|
96
|
+
--text-display-xl--letter-spacing: -0.05em;
|
|
97
|
+
--text-display-xl--font-weight: 600;
|
|
98
|
+
|
|
99
|
+
--text-display-lg: 40px;
|
|
100
|
+
--text-display-lg--line-height: 1.1;
|
|
101
|
+
--text-display-lg--letter-spacing: -0.05em;
|
|
102
|
+
--text-display-lg--font-weight: 600;
|
|
103
|
+
|
|
104
|
+
--text-display-md: 32px;
|
|
105
|
+
--text-display-md--line-height: 1.2;
|
|
106
|
+
--text-display-md--letter-spacing: -0.04em;
|
|
107
|
+
--text-display-md--font-weight: 600;
|
|
108
|
+
|
|
109
|
+
--text-headline: 28px;
|
|
110
|
+
--text-headline--line-height: 1.25;
|
|
111
|
+
--text-headline--letter-spacing: -0.035em;
|
|
112
|
+
--text-headline--font-weight: 600;
|
|
113
|
+
|
|
114
|
+
--text-title-lg: 24px;
|
|
115
|
+
--text-title-lg--line-height: 1.33;
|
|
116
|
+
--text-title-lg--letter-spacing: -0.04em;
|
|
117
|
+
--text-title-lg--font-weight: 600;
|
|
118
|
+
|
|
119
|
+
--text-title-md: 20px;
|
|
120
|
+
--text-title-md--line-height: 1.4;
|
|
121
|
+
--text-title-md--letter-spacing: -0.03em;
|
|
122
|
+
--text-title-md--font-weight: 600;
|
|
123
|
+
|
|
124
|
+
--text-body-lg: 18px;
|
|
125
|
+
--text-body-lg--line-height: 1.56;
|
|
126
|
+
--text-body-lg--letter-spacing: -0.01em;
|
|
127
|
+
--text-body-lg--font-weight: 400;
|
|
128
|
+
|
|
129
|
+
--text-body-md: 14px;
|
|
130
|
+
--text-body-md--line-height: 1.43;
|
|
131
|
+
--text-body-md--letter-spacing: 0;
|
|
132
|
+
--text-body-md--font-weight: 400;
|
|
133
|
+
|
|
134
|
+
--text-body-sm: 13px;
|
|
135
|
+
--text-body-sm--line-height: 1.46;
|
|
136
|
+
--text-body-sm--font-weight: 400;
|
|
137
|
+
|
|
138
|
+
--text-label: 14px;
|
|
139
|
+
--text-label--line-height: 1.43;
|
|
140
|
+
--text-label--font-weight: 500;
|
|
141
|
+
|
|
142
|
+
--text-label-caps: 12px;
|
|
143
|
+
--text-label-caps--line-height: 1.33;
|
|
144
|
+
--text-label-caps--letter-spacing: 0.04em;
|
|
145
|
+
--text-label-caps--font-weight: 500;
|
|
146
|
+
|
|
147
|
+
--text-code-md: 14px;
|
|
148
|
+
--text-code-md--line-height: 1.5;
|
|
149
|
+
--text-code-md--font-weight: 400;
|
|
150
|
+
|
|
151
|
+
--text-code-sm: 13px;
|
|
152
|
+
--text-code-sm--line-height: 1.54;
|
|
153
|
+
--text-code-sm--font-weight: 500;
|
|
154
|
+
|
|
155
|
+
/* Radii — Tailwind v4 reads the value directly (no var indirection). */
|
|
156
|
+
--radius-none: 0px;
|
|
157
|
+
--radius-sm: 4px;
|
|
158
|
+
--radius-md: 6px;
|
|
159
|
+
--radius-lg: 10px;
|
|
160
|
+
--radius-xl: 14px;
|
|
161
|
+
--radius-2xl: 20px;
|
|
162
|
+
--radius-full: 9999px;
|
|
163
|
+
|
|
164
|
+
/* Shadows — alias to tokens.css computed values (which already use
|
|
165
|
+
* `hsl(var(--foreground) / …)` so theme-switch keeps them in step). */
|
|
166
|
+
--shadow-sm: var(--shadow-sm);
|
|
167
|
+
--shadow-md: var(--shadow-md);
|
|
168
|
+
--shadow-lg: var(--shadow-lg);
|
|
169
|
+
--shadow-glow: var(--shadow-glow);
|
|
170
|
+
--shadow-glow-strong: var(--shadow-glow-strong);
|
|
171
|
+
|
|
172
|
+
/* Motion ------------------------------------------------------------ */
|
|
173
|
+
--ease-out-soft: var(--ease-out-soft);
|
|
174
|
+
--ease-snap: var(--ease-snap);
|
|
175
|
+
|
|
176
|
+
/* Container queries (T5.5) — Tailwind v4 native @container support.
|
|
177
|
+
* Sizes drive `@<size>:<utility>` variants for container-relative responsive
|
|
178
|
+
* design (components that adapt to their parent's width, not the viewport).
|
|
179
|
+
* Default sizes mirror Tailwind v4 defaults; declared explicitly so the
|
|
180
|
+
* preset ships consistent values.
|
|
181
|
+
*/
|
|
182
|
+
--container-3xs: 16rem;
|
|
183
|
+
--container-2xs: 18rem;
|
|
184
|
+
--container-xs: 20rem;
|
|
185
|
+
--container-sm: 24rem;
|
|
186
|
+
--container-md: 28rem;
|
|
187
|
+
--container-lg: 32rem;
|
|
188
|
+
--container-xl: 36rem;
|
|
189
|
+
--container-2xl: 42rem;
|
|
190
|
+
--container-3xl: 48rem;
|
|
191
|
+
--container-4xl: 56rem;
|
|
192
|
+
--container-5xl: 64rem;
|
|
193
|
+
--container-6xl: 72rem;
|
|
194
|
+
--container-7xl: 80rem;
|
|
195
|
+
|
|
196
|
+
/* Animations — declare so `animate-fade-in-up` and `animate-pulse-glow`
|
|
197
|
+
* resolve. Keyframes are declared below (outside @theme — Tailwind v4
|
|
198
|
+
* picks them up via the @keyframes namespace).
|
|
199
|
+
*/
|
|
200
|
+
--animate-fade-in-up: fade-in-up var(--duration-base) var(--ease-out-soft) both;
|
|
201
|
+
--animate-pulse-glow: pulse-glow 1.5s var(--ease-in-out) infinite;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@keyframes fade-in-up {
|
|
205
|
+
0% {
|
|
206
|
+
opacity: 0;
|
|
207
|
+
transform: translateY(8px);
|
|
208
|
+
}
|
|
209
|
+
100% {
|
|
210
|
+
opacity: 1;
|
|
211
|
+
transform: translateY(0);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
@keyframes pulse-glow {
|
|
216
|
+
0%,
|
|
217
|
+
100% {
|
|
218
|
+
box-shadow: 0 0 0 0 color-mix(in oklch, var(--primary) 50%, transparent);
|
|
219
|
+
}
|
|
220
|
+
50% {
|
|
221
|
+
box-shadow: 0 0 0 8px transparent;
|
|
222
|
+
}
|
|
223
|
+
}
|