@usetheo/ui 0.1.0-next.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/CHANGELOG.md +227 -0
- package/LICENSE +201 -0
- package/README.md +347 -0
- package/dist/fonts/LICENSE-GEIST.txt +92 -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.d.ts +3063 -0
- package/dist/index.js +7746 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +88 -0
- package/dist/tokens.css +230 -0
- package/package.json +520 -0
- package/registry/index.json +700 -0
- package/registry/r/agent-composer.json +22 -0
- package/registry/r/agent-editor.json +27 -0
- package/registry/r/agent-error-card.json +22 -0
- package/registry/r/agent-event.json +24 -0
- package/registry/r/agent-handoff.json +22 -0
- package/registry/r/agent-profile.json +23 -0
- package/registry/r/agent-starting-state.json +22 -0
- package/registry/r/agent-stream.json +27 -0
- package/registry/r/agent-streaming.json +22 -0
- package/registry/r/agent-timeline.json +22 -0
- package/registry/r/agent-types.json +15 -0
- package/registry/r/approval-card.json +25 -0
- package/registry/r/artifact-preview.json +22 -0
- package/registry/r/attachment-chip.json +24 -0
- package/registry/r/audit-log-entry.json +23 -0
- package/registry/r/auto-compact-notice.json +22 -0
- package/registry/r/avatar.json +23 -0
- package/registry/r/badge.json +22 -0
- package/registry/r/browser-controls.json +22 -0
- package/registry/r/build-log-stream.json +19 -0
- package/registry/r/button.json +23 -0
- package/registry/r/capability-indicator.json +23 -0
- package/registry/r/card.json +22 -0
- package/registry/r/chat-composer.json +23 -0
- package/registry/r/chat-message.json +21 -0
- package/registry/r/chat-thread.json +20 -0
- package/registry/r/chat-types.json +15 -0
- package/registry/r/checkbox.json +23 -0
- package/registry/r/cn.json +19 -0
- package/registry/r/command-palette.json +25 -0
- package/registry/r/context-card.json +23 -0
- package/registry/r/context-window-bar.json +20 -0
- package/registry/r/cost-meter.json +22 -0
- package/registry/r/created-files-card.json +23 -0
- package/registry/r/cron-job-card.json +22 -0
- package/registry/r/cron-jobs-list.json +23 -0
- package/registry/r/deployment-row.json +23 -0
- package/registry/r/dialog.json +23 -0
- package/registry/r/diff-viewer.json +20 -0
- package/registry/r/domain-config.json +25 -0
- package/registry/r/empty-state.json +20 -0
- package/registry/r/env-var-editor.json +25 -0
- package/registry/r/folder-context-card.json +23 -0
- package/registry/r/folder-selector.json +22 -0
- package/registry/r/form-field.json +23 -0
- package/registry/r/hook-config.json +22 -0
- package/registry/r/hook-event-log.json +22 -0
- package/registry/r/input.json +19 -0
- package/registry/r/intent-selector.json +24 -0
- package/registry/r/label.json +22 -0
- package/registry/r/lane-board.json +20 -0
- package/registry/r/live-region-context.json +16 -0
- package/registry/r/login-split.json +20 -0
- package/registry/r/mcp-server-card.json +22 -0
- package/registry/r/mcp-server-list.json +23 -0
- package/registry/r/memory-editor.json +23 -0
- package/registry/r/mention-menu.json +23 -0
- package/registry/r/metrics-panel.json +22 -0
- package/registry/r/mode-types.json +15 -0
- package/registry/r/model-card.json +23 -0
- package/registry/r/model-selector.json +23 -0
- package/registry/r/permission-matrix.json +22 -0
- package/registry/r/permission-modal.json +24 -0
- package/registry/r/permission-types.json +15 -0
- package/registry/r/preview-env-card.json +25 -0
- package/registry/r/preview-panel.json +21 -0
- package/registry/r/progress-checklist.json +23 -0
- package/registry/r/project-card.json +25 -0
- package/registry/r/project-switcher.json +22 -0
- package/registry/r/quick-action-chips.json +21 -0
- package/registry/r/radio-group.json +23 -0
- package/registry/r/recent-folders-list.json +22 -0
- package/registry/r/rollback-ui.json +24 -0
- package/registry/r/rule-card.json +23 -0
- package/registry/r/rule-editor.json +28 -0
- package/registry/r/rule-types.json +18 -0
- package/registry/r/run-stats.json +22 -0
- package/registry/r/running-tasks-panel.json +22 -0
- package/registry/r/safe-href.json +16 -0
- package/registry/r/scroll-area.json +22 -0
- package/registry/r/select.json +23 -0
- package/registry/r/session-list-item.json +20 -0
- package/registry/r/session-timeline.json +22 -0
- package/registry/r/sheet.json +24 -0
- package/registry/r/sidebar.json +19 -0
- package/registry/r/skeleton.json +19 -0
- package/registry/r/skill-card.json +24 -0
- package/registry/r/skill-editor.json +28 -0
- package/registry/r/skills-list.json +23 -0
- package/registry/r/social-auth-row.json +21 -0
- package/registry/r/steps-rail.json +20 -0
- package/registry/r/sub-agent-dispatch.json +22 -0
- package/registry/r/switch.json +22 -0
- package/registry/r/system-prompt-editor.json +22 -0
- package/registry/r/tabs.json +22 -0
- package/registry/r/tailwind-preset.json +19 -0
- package/registry/r/task-header.json +24 -0
- package/registry/r/task-plan.json +22 -0
- package/registry/r/task-types.json +15 -0
- package/registry/r/terminal-panel.json +22 -0
- package/registry/r/textarea.json +19 -0
- package/registry/r/theme-provider.json +59 -0
- package/registry/r/theme-script.json +18 -0
- package/registry/r/theo-ui-provider.json +20 -0
- package/registry/r/toast.json +30 -0
- package/registry/r/token-usage-chart.json +20 -0
- package/registry/r/tokens.json +21 -0
- package/registry/r/tool-call-card.json +23 -0
- package/registry/r/tool-call.json +22 -0
- package/registry/r/tool-result.json +20 -0
- package/registry/r/tools-list.json +23 -0
- package/registry/r/tooltip.json +22 -0
- package/registry/r/topnav.json +22 -0
- package/registry/r/types.json +15 -0
package/dist/styles.css
ADDED
|
@@ -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/tokens.css
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/* Theo UI — Design System "Violet Forge" tokens.
|
|
2
|
+
*
|
|
3
|
+
* Tokens normativos. Não edite valores aqui sem revisão do design system.
|
|
4
|
+
* Referência: docs/design-system.md
|
|
5
|
+
*
|
|
6
|
+
* Estratégia:
|
|
7
|
+
* - CSS custom properties para todas as cores, scales e durations.
|
|
8
|
+
* - Default é light. Dark é ativado via [data-theme="dark"] ou .dark.
|
|
9
|
+
* - HSL split (h s l) em vez de hex permite alpha via color-mix() ou hsl(var(--x) / .5).
|
|
10
|
+
*
|
|
11
|
+
* Roxo Theo: #7C3AED → hsl(262 83% 58%)
|
|
12
|
+
* Burnt sienna: #C96442 → hsl(15 54% 53%)
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/* `:root` and `[data-theme="dark"]` declarations are intentionally NOT wrapped
|
|
16
|
+
* in `@layer base` so they apply at the document level regardless of whether
|
|
17
|
+
* the consumer's CSS pipeline runs Tailwind's preflight. The texture utilities
|
|
18
|
+
* below remain in `@layer utilities` because that layer affects ordering only,
|
|
19
|
+
* not the cascade root.
|
|
20
|
+
*/
|
|
21
|
+
:root {
|
|
22
|
+
/* Base palette ------------------------------------------------------- *
|
|
23
|
+
* Neutrals are 100% desaturated (Vercel-style). Color comes from the
|
|
24
|
+
* primary (violet) + accent (burnt sienna) tokens below — never from
|
|
25
|
+
* surface tints.
|
|
26
|
+
*/
|
|
27
|
+
--background: 0 0% 100%; /* #FFFFFF */
|
|
28
|
+
--foreground: 0 0% 4%; /* #0A0A0A */
|
|
29
|
+
|
|
30
|
+
--card: 0 0% 100%; /* #FFFFFF */
|
|
31
|
+
--card-foreground: 0 0% 4%;
|
|
32
|
+
|
|
33
|
+
--popover: 0 0% 100%;
|
|
34
|
+
--popover-foreground: 0 0% 4%;
|
|
35
|
+
|
|
36
|
+
/* Primary — Theo violet (equity) ------------------------------------- */
|
|
37
|
+
--primary: 262 83% 58%; /* #7C3AED */
|
|
38
|
+
--primary-deep: 263 70% 42%; /* #5B21B6 — pressed */
|
|
39
|
+
--primary-glow: 263 90% 76%; /* #A78BFA — hover halo */
|
|
40
|
+
--primary-foreground: 0 0% 100%;
|
|
41
|
+
|
|
42
|
+
/* Secondary — neutral muted ----------------------------------------- */
|
|
43
|
+
--secondary: 0 0% 96%; /* #F5F5F5 */
|
|
44
|
+
--secondary-foreground: 0 0% 4%;
|
|
45
|
+
|
|
46
|
+
/* Accent — burnt sienna --------------------------------------------- */
|
|
47
|
+
--accent: 15 54% 53%; /* #C96442 */
|
|
48
|
+
--accent-deep: 15 55% 40%; /* #9C4A2E */
|
|
49
|
+
--accent-foreground: 0 0% 100%;
|
|
50
|
+
|
|
51
|
+
/* Muted ------------------------------------------------------------- */
|
|
52
|
+
--muted: 0 0% 96%;
|
|
53
|
+
--muted-foreground: 0 0% 45%; /* #737373 */
|
|
54
|
+
|
|
55
|
+
/* Surfaces, borders, inputs ----------------------------------------- */
|
|
56
|
+
--border: 0 0% 91%; /* #E8E8E8 — Vercel-style hairline */
|
|
57
|
+
--input: 0 0% 91%;
|
|
58
|
+
--ring: 262 83% 58%; /* matches primary */
|
|
59
|
+
|
|
60
|
+
/* Semantics --------------------------------------------------------- */
|
|
61
|
+
--success: 142 71% 36%; /* #16A34A */
|
|
62
|
+
--success-foreground: 0 0% 100%;
|
|
63
|
+
--warning: 33 92% 44%; /* #D97706 */
|
|
64
|
+
--warning-foreground: 0 0% 100%;
|
|
65
|
+
--destructive: 0 72% 51%; /* #DC2626 */
|
|
66
|
+
--destructive-foreground: 0 0% 100%;
|
|
67
|
+
--info: 217 91% 60%; /* #3B82F6 */
|
|
68
|
+
--info-foreground: 0 0% 100%;
|
|
69
|
+
|
|
70
|
+
/* Radii ------------------------------------------------------------- */
|
|
71
|
+
--radius-none: 0px;
|
|
72
|
+
--radius-sm: 4px;
|
|
73
|
+
--radius-md: 6px;
|
|
74
|
+
--radius-lg: 10px;
|
|
75
|
+
--radius-xl: 14px;
|
|
76
|
+
--radius-2xl: 20px;
|
|
77
|
+
--radius-full: 9999px;
|
|
78
|
+
/* shadcn compat */
|
|
79
|
+
--radius: 14px;
|
|
80
|
+
|
|
81
|
+
/* Spacing scale (4px base) ------------------------------------------ */
|
|
82
|
+
--space-1: 4px;
|
|
83
|
+
--space-2: 8px;
|
|
84
|
+
--space-3: 12px;
|
|
85
|
+
--space-4: 16px;
|
|
86
|
+
--space-5: 20px;
|
|
87
|
+
--space-6: 24px;
|
|
88
|
+
--space-8: 32px;
|
|
89
|
+
--space-10: 40px;
|
|
90
|
+
--space-12: 48px;
|
|
91
|
+
--space-16: 64px;
|
|
92
|
+
--space-20: 80px;
|
|
93
|
+
--space-24: 96px;
|
|
94
|
+
--space-32: 128px;
|
|
95
|
+
|
|
96
|
+
/* Elevation — theme-aware (uses --foreground for shadow ink,
|
|
97
|
+
* --primary for the signature glow, so swapping themes recolors them).
|
|
98
|
+
*/
|
|
99
|
+
--shadow-sm: 0 1px 2px 0 hsl(var(--foreground) / 0.06);
|
|
100
|
+
--shadow-md: 0 2px 8px -2px hsl(var(--foreground) / 0.08), 0 1px 3px hsl(var(--foreground) / 0.06);
|
|
101
|
+
--shadow-lg: 0 12px 32px -8px hsl(var(--foreground) / 0.12), 0 4px 12px
|
|
102
|
+
hsl(var(--foreground) / 0.08);
|
|
103
|
+
--shadow-glow: 0 0 24px hsl(var(--primary) / 0.25);
|
|
104
|
+
--shadow-glow-strong: 0 0 32px hsl(var(--primary) / 0.4);
|
|
105
|
+
|
|
106
|
+
/* Motion ------------------------------------------------------------ */
|
|
107
|
+
--ease-out-soft: cubic-bezier(0.22, 1, 0.36, 1);
|
|
108
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
109
|
+
--ease-snap: cubic-bezier(0.85, 0, 0.15, 1);
|
|
110
|
+
--duration-fast: 120ms;
|
|
111
|
+
--duration-base: 200ms;
|
|
112
|
+
--duration-slow: 360ms;
|
|
113
|
+
--stagger: 60ms;
|
|
114
|
+
|
|
115
|
+
/* Typography (Geist family — Vercel-inspired Violet Forge) ---------- */
|
|
116
|
+
--font-display: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
117
|
+
--font-body: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
118
|
+
--font-mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Dark mode — dominante --------------------------------------------- *
|
|
122
|
+
* Vercel-aligned grayscale: pure neutrals (0% saturation) for every
|
|
123
|
+
* surface and text layer. Color only in primary (violet), accent (burnt
|
|
124
|
+
* sienna), and semantic tokens (success/warning/destructive/info).
|
|
125
|
+
*
|
|
126
|
+
* Activated exclusively via the `.dark` class on `<html>` (set by
|
|
127
|
+
* `ThemeProvider`, `ThemeScript`, or consumers manually). The previous
|
|
128
|
+
* `[data-theme="dark"]` companion selector was dead — `data-theme` holds
|
|
129
|
+
* the theme NAME, never the literal `"dark"`.
|
|
130
|
+
*/
|
|
131
|
+
.dark {
|
|
132
|
+
--background: 0 0% 4%; /* #0A0A0A */
|
|
133
|
+
--foreground: 0 0% 96%; /* #F5F5F5 */
|
|
134
|
+
|
|
135
|
+
--card: 0 0% 7%; /* #121212 */
|
|
136
|
+
--card-foreground: 0 0% 96%;
|
|
137
|
+
|
|
138
|
+
--popover: 0 0% 9%; /* #171717 */
|
|
139
|
+
--popover-foreground: 0 0% 96%;
|
|
140
|
+
|
|
141
|
+
--primary: 262 83% 58%;
|
|
142
|
+
--primary-deep: 263 70% 42%;
|
|
143
|
+
--primary-glow: 263 90% 76%;
|
|
144
|
+
--primary-foreground: 0 0% 100%;
|
|
145
|
+
|
|
146
|
+
--secondary: 0 0% 11%; /* #1C1C1C */
|
|
147
|
+
--secondary-foreground: 0 0% 96%;
|
|
148
|
+
|
|
149
|
+
--accent: 15 54% 53%;
|
|
150
|
+
--accent-deep: 15 55% 40%;
|
|
151
|
+
--accent-foreground: 0 0% 100%;
|
|
152
|
+
|
|
153
|
+
--muted: 0 0% 11%;
|
|
154
|
+
--muted-foreground: 0 0% 60%; /* #999 — Vercel gray-500 */
|
|
155
|
+
|
|
156
|
+
--border: 0 0% 16%; /* #292929 */
|
|
157
|
+
--input: 0 0% 11%;
|
|
158
|
+
--ring: 262 83% 58%;
|
|
159
|
+
|
|
160
|
+
--success: 152 79% 52%; /* #22E58C */
|
|
161
|
+
--success-foreground: 0 0% 4%;
|
|
162
|
+
--warning: 38 92% 50%; /* #F59E0B */
|
|
163
|
+
--warning-foreground: 0 0% 4%;
|
|
164
|
+
--destructive: 350 100% 65%; /* #FF4F6D */
|
|
165
|
+
--destructive-foreground: 0 0% 4%;
|
|
166
|
+
--info: 213 100% 70%; /* #5FB3FF */
|
|
167
|
+
--info-foreground: 0 0% 4%;
|
|
168
|
+
|
|
169
|
+
/* In dark mode, shadows are heavier ink (against the dark surface) and
|
|
170
|
+
* the glow brightens. Both still derive from theme tokens.
|
|
171
|
+
*/
|
|
172
|
+
--shadow-sm: 0 1px 2px 0 hsl(0 0% 0% / 0.4);
|
|
173
|
+
--shadow-md: 0 2px 8px -2px hsl(0 0% 0% / 0.5), 0 1px 3px hsl(0 0% 0% / 0.4);
|
|
174
|
+
--shadow-lg: 0 12px 32px -8px hsl(0 0% 0% / 0.6), 0 4px 12px hsl(0 0% 0% / 0.4);
|
|
175
|
+
--shadow-glow: 0 0 24px hsl(var(--primary-glow) / 0.4);
|
|
176
|
+
--shadow-glow-strong: 0 0 36px hsl(var(--primary-glow) / 0.6);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* Reduced motion — neutralizes durations and transitions for users who
|
|
180
|
+
* request prefers-reduced-motion: reduce. Components that use animation as
|
|
181
|
+
* semantic state (e.g. a spinner on a running step) can opt back in with
|
|
182
|
+
* Tailwind's `motion-safe:` prefix.
|
|
183
|
+
*
|
|
184
|
+
* Reference: WCAG 2.3.3 Animation from Interactions (Level AAA).
|
|
185
|
+
*/
|
|
186
|
+
@media (prefers-reduced-motion: reduce) {
|
|
187
|
+
:root {
|
|
188
|
+
--duration-fast: 0ms;
|
|
189
|
+
--duration-base: 0ms;
|
|
190
|
+
--duration-slow: 0ms;
|
|
191
|
+
--stagger: 0ms;
|
|
192
|
+
}
|
|
193
|
+
*,
|
|
194
|
+
*::before,
|
|
195
|
+
*::after {
|
|
196
|
+
animation-duration: 0.001ms !important;
|
|
197
|
+
animation-iteration-count: 1 !important;
|
|
198
|
+
transition-duration: 0.001ms !important;
|
|
199
|
+
scroll-behavior: auto !important;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* Texture utilities (signature) ---------------------------------------- */
|
|
204
|
+
@layer utilities {
|
|
205
|
+
.bg-dotted-violet {
|
|
206
|
+
background-image: radial-gradient(hsl(var(--primary) / 0.08) 1px, transparent 1px);
|
|
207
|
+
background-size: 20px 20px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.bg-dotted-violet-strong {
|
|
211
|
+
background-image: radial-gradient(hsl(var(--primary) / 0.16) 1px, transparent 1px);
|
|
212
|
+
background-size: 20px 20px;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.bg-hero-glow {
|
|
216
|
+
background-image: radial-gradient(
|
|
217
|
+
ellipse 60% 50% at 70% 0%,
|
|
218
|
+
hsl(var(--primary) / 0.18) 0%,
|
|
219
|
+
transparent 60%
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.bg-paper-grain {
|
|
224
|
+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0.06 0 0 0 0 0.04 0 0 0 0 0.08 0 0 0 0.18 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.text-balance {
|
|
228
|
+
text-wrap: balance;
|
|
229
|
+
}
|
|
230
|
+
}
|