@astralui/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,584 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
2
+
3
+ /* ===== src/styles/tokens.css ===== */
4
+ /* Default UI font (override --astral-font-family to use your own; or self-host Inter). */
5
+
6
+
7
+ /* ============================================================================
8
+ AstralUI theme tokens - the --astral-* design variables. Every Astral token
9
+ (au-*, etc.) resolves through these + light-dark(), which is why `color-scheme`
10
+ is set per scheme here.
11
+
12
+ :root carries the scheme-independent palette + the DARK semantic defaults
13
+ (AstralUI defaults to dark). The [data-astral-scheme="light"] block overrides
14
+ only the ~12 vars that differ in light mode. Per-org brand/surface overrides
15
+ are layered on top at runtime by <AstralThemeProvider>.
16
+ ============================================================================ */
17
+
18
+ /* ── Base reset (so AstralUI works standalone, no external reset needed) ── */
19
+ *, *::before, *::after { box-sizing: border-box; }
20
+ html { font-size: 16px; -webkit-text-size-adjust: 100%; }
21
+ body {
22
+ margin: 0;
23
+ font-family: var(--astral-font-family);
24
+ font-size: 16px;
25
+ line-height: 1.55;
26
+ background: var(--astral-color-body);
27
+ color: var(--astral-color-text);
28
+ -webkit-font-smoothing: antialiased;
29
+ }
30
+ h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd { margin: 0; }
31
+ button, input, optgroup, select, textarea { font-family: inherit; font-size: 100%; }
32
+
33
+ :root {
34
+ color-scheme: dark;
35
+
36
+ --astral-font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif;
37
+ --astral-radius-md: calc(0.5rem * 1);
38
+
39
+ --astral-color-black: #000;
40
+ --astral-color-white: #fff;
41
+
42
+ /* palette shades - identical in both schemes */
43
+ --astral-color-blue-4: #4dabf7;
44
+ --astral-color-blue-5: #339af0;
45
+ --astral-color-blue-6: #228be6;
46
+ --astral-color-blue-7: #1c7ed6;
47
+ --astral-color-cyan-6: #15aabf;
48
+ --astral-color-cyan-8: #0c8599;
49
+ --astral-color-grape-6: #be4bdb;
50
+ --astral-color-grape-7: #ae3ec9;
51
+ --astral-color-indigo-6: #4c6ef5;
52
+ --astral-color-gray-0: #f8f9fa;
53
+ --astral-color-gray-1: #f1f3f5;
54
+ --astral-color-gray-2: #e9ecef;
55
+ --astral-color-gray-3: #dee2e6;
56
+ --astral-color-gray-4: #ced4da;
57
+ --astral-color-gray-5: #adb5bd;
58
+ --astral-color-gray-6: #868e96;
59
+ --astral-color-gray-7: #495057;
60
+ --astral-color-green-5: #51cf66;
61
+ --astral-color-green-6: #40c057;
62
+ --astral-color-green-7: #37b24d;
63
+ --astral-color-green-8: #2f9e44;
64
+ --astral-color-green-9: #2b8a3e;
65
+ --astral-color-orange-5: #ff922b;
66
+ --astral-color-orange-6: #fd7e14;
67
+ --astral-color-orange-7: #f76707;
68
+ --astral-color-orange-9: #d9480f;
69
+ --astral-color-red-5: #ff6b6b;
70
+ --astral-color-red-6: #fa5252;
71
+ --astral-color-red-7: #f03e3e;
72
+ --astral-color-red-8: #e03131;
73
+ --astral-color-teal-5: #20c997;
74
+ --astral-color-teal-6: #12b886;
75
+ --astral-color-teal-7: #0ca678;
76
+ --astral-color-teal-8: #099268;
77
+ --astral-color-violet-0: #f3f0ff;
78
+ --astral-color-violet-1: #e5dbff;
79
+ --astral-color-violet-2: #d0bfff;
80
+ --astral-color-violet-3: #b197fc;
81
+ --astral-color-violet-4: #9775fa;
82
+ --astral-color-violet-5: #845ef7;
83
+ --astral-color-violet-6: #7950f2;
84
+ --astral-color-violet-7: #7048e8;
85
+ --astral-color-violet-8: #6741d9;
86
+ --astral-color-violet-9: #5f3dc4;
87
+ --astral-color-yellow-5: #fcc419;
88
+ --astral-color-yellow-6: #fab005;
89
+ --astral-color-yellow-7: #f59f00;
90
+ --astral-color-yellow-8: #f08c00;
91
+ --astral-color-dark-0: #f4f4f5;
92
+ --astral-color-dark-1: #d4d4d8;
93
+ --astral-color-dark-2: #a1a1aa;
94
+ --astral-color-dark-3: #71717a;
95
+ --astral-color-dark-4: #3f3f46;
96
+ --astral-color-dark-5: #27272a;
97
+ --astral-color-dark-6: #1c1c20;
98
+ --astral-color-dark-7: #141417;
99
+ --astral-color-dark-8: #0e0e11;
100
+ --astral-color-dark-9: #09090b;
101
+
102
+ /* semantic / primary - DARK defaults */
103
+ --astral-color-text: #f4f4f5;
104
+ --astral-color-body: #141417;
105
+ --astral-color-dimmed: #a1a1aa;
106
+ --astral-color-default-border: #3f3f46;
107
+ --astral-color-default-hover: #27272a;
108
+ --astral-primary-color-filled: #6741d9;
109
+ --astral-primary-color-filled-hover: #5f3dc4;
110
+ --astral-primary-color-light: rgba(121, 80, 242, 0.15);
111
+ --astral-primary-color-light-hover: rgba(121, 80, 242, 0.2);
112
+ --astral-primary-color-light-color: #b197fc;
113
+ --astral-color-yellow-light: rgba(250, 176, 5, 0.15);
114
+ --astral-color-yellow-light-color: #ffe066;
115
+ }
116
+
117
+ /* LIGHT overrides - only the vars that differ from the dark defaults above */
118
+ [data-astral-scheme="light"] {
119
+ color-scheme: light;
120
+
121
+ --astral-color-text: #000;
122
+ --astral-color-body: #fff;
123
+ --astral-color-dimmed: #868e96;
124
+ --astral-color-default-border: #ced4da;
125
+ --astral-color-default-hover: #f8f9fa;
126
+ --astral-primary-color-filled: #7950f2;
127
+ --astral-primary-color-filled-hover: #7048e8;
128
+ --astral-primary-color-light: rgba(121, 80, 242, 0.1);
129
+ --astral-primary-color-light-hover: rgba(121, 80, 242, 0.12);
130
+ --astral-primary-color-light-color: #7950f2;
131
+ --astral-color-yellow-light: rgba(250, 176, 5, 0.1);
132
+ --astral-color-yellow-light-color: #fab005;
133
+ }
134
+
135
+
136
+ /* ===== src/styles/utilities.css ===== */
137
+ /* ============ AstralUI utilities + component primitives ============
138
+ Scoped under :root. Theme-aware via the --astral-* tokens + light-dark().
139
+ Set a brand color inline as --au-ic to tint accents (hero tile, highlights). */
140
+
141
+ :root{
142
+ --au-panel: var(--astral-app-card, light-dark(#ffffff, #16161b));
143
+ --au-surface-2: light-dark(var(--astral-color-gray-1), #1d1d24);
144
+ --au-line: var(--astral-color-default-border);
145
+ --au-text: var(--astral-color-text);
146
+ --au-dim: light-dark(var(--astral-color-gray-7), #a6a6b3);
147
+ --au-faint: light-dark(var(--astral-color-gray-6), #6f6f7d);
148
+ --au-brand: var(--astral-primary-color-filled);
149
+ --au-brand-text: light-dark(var(--astral-color-violet-7), var(--astral-color-violet-3));
150
+ --au-green: light-dark(#16a34a, #34d399);
151
+ --au-amber: light-dark(#d97706, #fbbf24);
152
+ --au-red: light-dark(#dc2626, #f87171);
153
+ --au-blue: light-dark(#2563eb, #60a5fa);
154
+ --au-ic: var(--astral-primary-color-filled);
155
+ --au-radius:16px;
156
+ --au-shadow: light-dark(0 1px 2px rgba(16,16,24,.06), 0 1px 2px rgba(0,0,0,.4)),
157
+ light-dark(0 8px 22px rgba(16,16,24,.05), 0 8px 24px rgba(0,0,0,.22));
158
+ font-family: var(--astral-font-family);
159
+ /* full-width: fill the content area (viewport minus the sidebar), not centered.
160
+ Inside the Clay modal/drawer this wrapper is constrained by the overlay anyway. */
161
+ }
162
+ :root .num{ font-variant-numeric:tabular-nums; }
163
+
164
+ /* ---------- back link ---------- */
165
+ .au-back{ display:inline-flex; align-items:center; gap:7px; color:var(--au-faint); font-size:12.5px; font-weight:600; text-decoration:none; margin-bottom:14px; transition:color .15s; }
166
+ .au-back:hover{ color:var(--au-text); }
167
+ .au-back svg{ width:15px; height:15px; }
168
+
169
+ /* ---------- hero ---------- */
170
+ .au-hero{ position:relative; overflow:hidden; background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:20px 22px; display:flex; align-items:center; gap:17px; }
171
+ .au-hero::before{ content:""; position:absolute; inset:0; pointer-events:none; background:radial-gradient(60% 120% at 0% 0%, color-mix(in srgb, var(--au-ic) 13%, transparent), transparent 70%); }
172
+ .au-hero > *{ position:relative; }
173
+ .au-tile{ width:56px; height:56px; border-radius:14px; display:grid; place-items:center; flex:0 0 auto; background:color-mix(in srgb, var(--au-ic) 18%, transparent); color:var(--au-ic); }
174
+ .au-tile svg{ width:28px; height:28px; }
175
+ .au-hmain{ flex:1; min-width:0; }
176
+ .au-hmain h1{ margin:0; font-size:21px; font-weight:700; letter-spacing:-.02em; color:var(--au-text); }
177
+ .au-hdesc{ margin-top:4px; font-size:12.5px; color:var(--au-dim); line-height:1.5; }
178
+ .au-hright{ display:flex; align-items:center; gap:12px; flex:0 0 auto; flex-wrap:wrap; justify-content:flex-end; }
179
+
180
+ /* ---------- status pill ---------- */
181
+ .au-status{ display:inline-flex; align-items:center; gap:7px; font-size:12px; font-weight:700; border-radius:999px; padding:5px 12px; white-space:nowrap; }
182
+ .au-status .dot{ width:7px; height:7px; border-radius:50%; flex:0 0 auto; }
183
+ .au-status.on{ color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); }
184
+ .au-status.on .dot{ background:var(--au-green); box-shadow:0 0 7px var(--au-green); }
185
+ .au-status.paused{ color:var(--au-amber); background:color-mix(in srgb, var(--au-amber) 14%, transparent); }
186
+ .au-status.paused .dot{ background:var(--au-amber); }
187
+ .au-status.off{ color:var(--au-faint); background:var(--au-surface-2); border:1px solid var(--au-line); }
188
+ .au-status.off .dot{ background:var(--au-faint); }
189
+
190
+ /* ---------- buttons ---------- */
191
+ .au-btn{ display:inline-flex; align-items:center; gap:7px; font:inherit; font-size:12.5px; font-weight:600; border-radius:10px; padding:9px 15px; cursor:pointer; border:1px solid var(--au-line); background:var(--au-surface-2); color:var(--au-dim); text-decoration:none; transition:color .15s, border-color .15s, filter .15s; white-space:nowrap; }
192
+ .au-btn:hover{ color:var(--au-text); border-color:color-mix(in srgb, var(--au-brand) 45%, transparent); }
193
+ .au-btn:disabled{ opacity:.5; cursor:not-allowed; }
194
+ .au-btn svg{ width:15px; height:15px; flex:0 0 auto; }
195
+ .au-btn.primary{ background:var(--au-brand); border-color:var(--au-brand); color:#fff; }
196
+ .au-btn.primary:hover{ filter:brightness(1.08); color:#fff; border-color:var(--au-brand); }
197
+ .au-btn.sm{ font-size:12px; padding:7px 12px; }
198
+ .au-ico{ width:36px; height:36px; border-radius:9px; display:grid; place-items:center; border:1px solid var(--au-line); background:var(--au-surface-2); color:var(--au-faint); cursor:pointer; flex:0 0 auto; transition:color .15s, border-color .15s; }
199
+ .au-ico:hover{ color:var(--au-red); border-color:color-mix(in srgb, var(--au-red) 40%, transparent); }
200
+ .au-ico.sm{ width:34px; height:34px; }
201
+ .au-ico svg{ width:16px; height:16px; }
202
+
203
+ /* ---------- alerts ---------- */
204
+ .au-alert{ display:flex; align-items:flex-start; gap:11px; margin-top:14px; padding:13px 15px; border-radius:12px; font-size:12.5px; line-height:1.5; color:var(--au-text); background:color-mix(in srgb, var(--au-green) 10%, transparent); border:1px solid color-mix(in srgb, var(--au-green) 30%, transparent); }
205
+ .au-alert svg{ width:17px; height:17px; flex:0 0 auto; color:var(--au-green); margin-top:1px; }
206
+ .au-alert.info{ background:color-mix(in srgb, var(--au-blue) 10%, transparent); border-color:color-mix(in srgb, var(--au-blue) 28%, transparent); }
207
+ .au-alert.info svg{ color:var(--au-blue); }
208
+ .au-alert.warn{ background:color-mix(in srgb, var(--au-amber) 11%, transparent); border-color:color-mix(in srgb, var(--au-amber) 30%, transparent); }
209
+ .au-alert.warn svg{ color:var(--au-amber); }
210
+ .au-alert.error{ background:color-mix(in srgb, var(--au-red) 10%, transparent); border-color:color-mix(in srgb, var(--au-red) 30%, transparent); }
211
+ .au-alert.error svg{ color:var(--au-red); }
212
+ .au-alert.col{ flex-direction:column; gap:9px; }
213
+
214
+ /* ---------- button color variants (used in the Clay drawer) ---------- */
215
+ .au-btn.danger{ color:var(--au-red); border-color:color-mix(in srgb, var(--au-red) 36%, transparent); background:color-mix(in srgb, var(--au-red) 12%, transparent); }
216
+ .au-btn.danger:hover{ color:var(--au-red); border-color:color-mix(in srgb, var(--au-red) 55%, transparent); filter:brightness(1.05); }
217
+ .au-btn.ok{ color:var(--au-green); border-color:color-mix(in srgb, var(--au-green) 38%, transparent); background:color-mix(in srgb, var(--au-green) 12%, transparent); }
218
+ .au-btn.ok:hover{ color:var(--au-green); filter:brightness(1.05); }
219
+ .au-btn.solidred{ color:#fff; background:var(--au-red); border-color:var(--au-red); }
220
+ .au-btn.solidred:hover{ filter:brightness(1.06); color:#fff; }
221
+ .au-btn.orange{ color:#fff; background:#EF8E2E; border-color:#EF8E2E; }
222
+ .au-btn.orange:hover{ filter:brightness(1.05); color:#fff; }
223
+ .au-btn.orange svg{ color:#fff; }
224
+ .au-btn.green{ color:#fff; background:var(--au-green); border-color:var(--au-green); }
225
+ .au-btn.green:hover{ filter:brightness(1.06); color:#fff; }
226
+ .au-btn.green svg{ color:#fff; }
227
+ .au-kbd{ font-family:inherit; font-size:11px; font-weight:700; padding:1px 6px; border-radius:5px;
228
+ background:var(--au-surface-2); border:1px solid var(--au-line); color:var(--au-text); }
229
+ .au-ck{ width:18px; height:18px; border-radius:5px; border:1.5px solid var(--au-line); background:var(--au-surface-2);
230
+ display:inline-grid; place-items:center; flex:0 0 auto; transition:background .12s, border-color .12s; }
231
+ .au-ck.on{ background:var(--au-brand); border-color:var(--au-brand); }
232
+ .au-ck svg{ width:11px; height:11px; color:#fff; display:block; }
233
+ .au-tag{ font-size:10.5px; font-weight:700; border-radius:6px; padding:2px 7px; color:var(--au-faint); background:var(--au-surface-2); white-space:nowrap; }
234
+ .au-tag.prem{ color:var(--au-amber, #d97706); background:color-mix(in srgb, var(--au-amber, #d97706) 14%, transparent); }
235
+ .au-tablewrap{ border:1px solid var(--au-line); border-radius:11px; overflow:auto; }
236
+ .au-table{ width:100%; border-collapse:collapse; font-size:12.5px; }
237
+ .au-table thead th{ text-align:left; font-size:10px; font-weight:700; letter-spacing:.04em; text-transform:uppercase;
238
+ color:var(--au-faint); padding:8px 10px; border-bottom:1px solid var(--au-line);
239
+ background:color-mix(in srgb, var(--au-surface-2) 55%, transparent); }
240
+ .au-table tbody td{ padding:8px 10px; border-bottom:1px solid var(--au-line); color:var(--au-text); vertical-align:middle; }
241
+ .au-table tbody tr:last-child td{ border-bottom:0; }
242
+ .au-table tbody tr:hover td{ background:var(--au-surface-2); }
243
+ .au-alert{ display:flex; align-items:flex-start; gap:9px; padding:10px 12px; border-radius:10px; font-size:12px; color:var(--au-text); line-height:1.5; }
244
+ .au-alert svg{ flex:0 0 auto; margin-top:1px; }
245
+ .au-alert.warn{ color:var(--au-amber, #d97706); background:color-mix(in srgb, var(--au-amber, #d97706) 10%, transparent); border:1px solid color-mix(in srgb, var(--au-amber, #d97706) 34%, var(--au-line)); }
246
+ .au-alert.err{ color:var(--au-red); background:color-mix(in srgb, var(--au-red) 9%, transparent); border:1px solid color-mix(in srgb, var(--au-red) 34%, var(--au-line)); }
247
+ .au-alert.brand{ color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 9%, transparent); border:1px solid color-mix(in srgb, var(--au-brand) 32%, var(--au-line)); }
248
+ .au-alert .t{ font-weight:700; margin-bottom:2px; }
249
+ .au-card{ border:1px solid var(--au-line); border-radius:12px; padding:13px 15px; background:color-mix(in srgb, var(--au-surface-2) 32%, transparent); }
250
+ .au-card-h{ font-size:10.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--au-faint); margin-bottom:9px; }
251
+ .au-mpill{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:700; border-radius:999px; padding:4px 11px; width:fit-content; }
252
+ .au-day{ width:22px; height:22px; border-radius:6px; display:inline-grid; place-items:center; font-size:10px; font-weight:700;
253
+ background:var(--au-surface-2); color:var(--au-faint); }
254
+ .au-day.on{ background:var(--au-brand); color:#fff; }
255
+ .au-divider{ height:1px; background:var(--au-line); border:0; margin:2px 0; }
256
+ .au-tcard{ border:1px solid var(--au-line); border-radius:12px; padding:14px; background:var(--au-surface-2);
257
+ cursor:pointer; transition:border-color .12s, filter .12s; }
258
+ .au-tcard:hover{ border-color:color-mix(in srgb, var(--au-brand) 45%, var(--au-line)); filter:brightness(1.02); }
259
+ .au-seg{ display:flex; gap:4px; padding:3px; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:10px; }
260
+ .au-seg button{ flex:1; background:none; border:0; border-radius:7px; padding:7px 10px; font:inherit; font-size:12.5px; font-weight:600;
261
+ color:var(--au-dim); cursor:pointer; transition:background .12s, color .12s; }
262
+ .au-seg button.on{ background:var(--au-panel); color:var(--au-text); box-shadow:0 1px 2px rgba(0,0,0,.12); }
263
+ .au-suggest{ font-size:11px; font-weight:600; border-radius:6px; padding:2px 8px; cursor:pointer; font-family:inherit;
264
+ color:var(--au-blue, #3b82f6); background:color-mix(in srgb, var(--au-blue, #3b82f6) 10%, transparent);
265
+ border:1px solid color-mix(in srgb, var(--au-blue, #3b82f6) 34%, var(--au-line)); }
266
+ .au-suggest:hover{ filter:brightness(1.05); }
267
+ .au-check{ display:flex; align-items:flex-start; gap:10px; cursor:pointer; }
268
+ .au-check .cl{ font-size:13px; color:var(--au-text); display:block; }
269
+ .au-check .cd{ font-size:11.5px; color:var(--au-faint); display:block; margin-top:1px; }
270
+
271
+ /* ---------- modal / drawer form layout ---------- */
272
+ .clay-form{ display:flex; flex-direction:column; gap:14px; }
273
+ .clay-actions{ display:flex; justify-content:flex-end; gap:9px; margin-top:4px; }
274
+ .clay-link{ font:inherit; font-size:12.5px; font-weight:600; color:var(--au-brand-text); cursor:pointer; background:none; border:0; padding:0; text-align:left; width:fit-content; }
275
+ .clay-link:hover{ text-decoration:underline; }
276
+ .clay-stats{ display:flex; gap:28px; }
277
+ .clay-stat .l{ font-size:11px; color:var(--au-faint); }
278
+ .clay-stat .v{ font-size:15px; font-weight:700; color:var(--au-text); margin-top:2px; font-variant-numeric:tabular-nums; }
279
+ .clay-tokrow{ display:flex; align-items:center; gap:9px; }
280
+ .clay-meta{ font-size:12px; color:var(--au-faint); }
281
+ .clay-meta b{ color:var(--au-dim); font-weight:600; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
282
+ .clay-errs-title{ font-size:12.5px; font-weight:700; color:var(--au-text); margin-bottom:4px; }
283
+ .clay-err{ padding:10px 0; border-top:1px solid var(--au-line); }
284
+ .clay-err:first-of-type{ border-top:0; }
285
+ .clay-err .top{ display:flex; gap:10px; align-items:center; font-size:11.5px; color:var(--au-dim); }
286
+ .clay-err .top .st{ font-weight:700; color:var(--au-amber); }
287
+ .clay-err .reason{ font-size:12px; color:var(--au-text); margin-top:3px; }
288
+ .clay-err .code{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:10.5px; color:var(--au-faint); margin-top:1px; }
289
+
290
+ /* ---------- custom text input / textarea (Astral) ---------- */
291
+ .au-field-label .req{ color:var(--au-red); }
292
+
293
+ /* inline field error */
294
+ .au-field-err{ color:var(--au-red); font-size:11.5px; margin-top:5px; }
295
+
296
+ /* ---------- 6-box code input ---------- */
297
+ .au-pin{ display:flex; gap:8px; }
298
+ .au-pin-box{ width:44px; height:50px; min-width:0; flex:1; max-width:52px; text-align:center; font-size:19px; font-weight:700; font-variant-numeric:tabular-nums; color:var(--au-text); background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:11px; outline:none; transition:border-color .15s, box-shadow .15s; }
299
+ .au-pin-box:focus{ border-color:color-mix(in srgb, var(--au-brand) 55%, transparent); box-shadow:0 0 0 3px color-mix(in srgb, var(--au-brand) 18%, transparent); }
300
+ .au-textarea{ width:100%; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:10px; padding:10px 13px; font:inherit; font-size:13px; color:var(--au-text); outline:none; resize:vertical; min-height:64px; line-height:1.5; }
301
+ .au-textarea:focus{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); }
302
+ .au-textarea::placeholder{ color:var(--au-faint); }
303
+
304
+ /* ---------- Astral modal ---------- */
305
+ .au-modal-overlay{ position:fixed; inset:0; z-index:300; background:rgba(8,8,12,.55); backdrop-filter:blur(2px); display:grid; place-items:center; padding:20px; }
306
+ .au-modal-panel{ width:100%; background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:0 24px 60px rgba(0,0,0,.45); max-height:calc(100dvh - 40px); overflow-y:auto; }
307
+ .au-modal-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:18px 20px 0; }
308
+ .au-modal-title{ font-size:16px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); }
309
+ .au-modal-x{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; border:0; background:transparent; color:var(--au-faint); cursor:pointer; flex:0 0 auto; }
310
+ .au-modal-x:hover{ background:var(--au-surface-2); color:var(--au-text); }
311
+ .au-modal-x svg{ width:18px; height:18px; }
312
+ .au-modal-body{ padding:16px 20px 20px; font-size:13px; }
313
+
314
+ /* ---------- Astral drawer ---------- */
315
+ .au-drawer-overlay{ position:fixed; inset:0; z-index:300; background:rgba(8,8,12,.5); display:flex; justify-content:flex-end; }
316
+ .au-drawer-panel{ height:100%; background:var(--au-panel); border-left:1px solid var(--au-line); box-shadow:-12px 0 40px rgba(0,0,0,.4); display:flex; flex-direction:column; max-width:100vw; }
317
+ .au-drawer-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:17px 20px; border-bottom:1px solid var(--au-line); flex:0 0 auto; }
318
+ .au-drawer-title{ font-size:16px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
319
+ .au-drawer-body{ padding:18px 20px; overflow-y:auto; flex:1; font-size:13px; }
320
+
321
+ /* ---------- Astral select ---------- */
322
+ .au-select{ position:relative; }
323
+ .au-select-trigger{ width:100%; cursor:pointer; justify-content:space-between; text-align:left; font:inherit; font-size:13px; color:var(--au-text); }
324
+ .au-select-trigger:disabled{ opacity:.55; cursor:not-allowed; }
325
+ .au-select-trigger > span:first-child{ flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
326
+ .au-select-trigger .ph{ color:var(--au-faint); }
327
+ .au-select-caret{ color:var(--au-faint); flex:0 0 auto; }
328
+ /* portaled to body + fixed-positioned (left/top|bottom/width/max-height set inline)
329
+ so it floats above the modal instead of being clipped by its overflow. */
330
+ .au-select-menu{ position:fixed; z-index:320; background:var(--au-panel); border:1px solid var(--au-line); border-radius:11px; box-shadow:0 14px 34px rgba(0,0,0,.4); padding:5px; overflow-y:auto; }
331
+ .au-select-search{ width:100%; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:8px; padding:8px 11px; font:inherit; font-size:12.5px; color:var(--au-text); outline:none; margin-bottom:5px; }
332
+ .au-select-search:focus{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); }
333
+ .au-select-opt{ display:block; width:100%; text-align:left; border:0; background:transparent; font:inherit; font-size:13px; color:var(--au-dim); padding:8px 10px; border-radius:8px; cursor:pointer; }
334
+ .au-select-opt:hover{ background:var(--au-surface-2); color:var(--au-text); }
335
+ .au-select-opt.on{ color:var(--au-brand-text); font-weight:600; }
336
+ .au-select-opt.au-select-create{ color:var(--au-brand-text); font-weight:600; }
337
+ .au-select-empty{ padding:10px; font-size:12px; color:var(--au-faint); text-align:center; }
338
+ .au-select-clear{ cursor:pointer; }
339
+ .au-select-clear:hover{ color:var(--au-text); }
340
+
341
+ /* ---------- Astral action menu (AstralMenu) ---------- */
342
+ .au-menu-anchor{ display:inline-flex; }
343
+ .au-menu{ position:fixed; z-index:320; background:var(--au-panel); border:1px solid var(--au-line); border-radius:11px; box-shadow:0 14px 34px rgba(0,0,0,.4); padding:6px; overflow-y:auto; }
344
+ .au-menu-item{ display:flex; align-items:center; gap:11px; width:100%; text-align:left; border:0; background:transparent; font:inherit; font-size:13px; font-weight:500; color:var(--au-dim); padding:9px 10px; border-radius:8px; cursor:pointer; }
345
+ .au-menu-item:hover{ background:var(--au-surface-2); color:var(--au-text); }
346
+ .au-menu-item:disabled{ opacity:.5; cursor:not-allowed; }
347
+ .au-menu-item.danger{ color:var(--au-red); }
348
+ .au-menu-item.danger:hover{ background:color-mix(in srgb, var(--au-red) 12%, transparent); color:var(--au-red); }
349
+ .au-menu-ic{ display:grid; place-items:center; flex:0 0 auto; color:var(--au-faint); }
350
+ .au-menu-item:hover .au-menu-ic{ color:inherit; }
351
+ .au-menu-item.danger .au-menu-ic{ color:inherit; }
352
+ .au-menu-ic svg{ width:16px; height:16px; display:block; }
353
+ .au-menu-label{ flex:1; min-width:0; }
354
+ .au-menu-divider{ height:1px; background:var(--au-line); margin:5px 4px; }
355
+
356
+ /* ---------- generic spinner (available wherever AstralOverlay/Astral modals load) ---------- */
357
+ .au-spinner{ width:18px; height:18px; border-radius:50%; border:2px solid var(--au-line); border-top-color:var(--au-brand); animation:au-spin .7s linear infinite; display:inline-block; box-sizing:border-box; flex:0 0 auto; }
358
+ @keyframes au-spin{ to{ transform:rotate(360deg); } }
359
+
360
+ /* ---------- access strip (webhook pages) ---------- */
361
+ .au-access{ display:flex; align-items:center; gap:11px; margin-top:14px; padding:11px 14px; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:12px; }
362
+ .au-lg{ width:30px; height:30px; border-radius:8px; flex:0 0 auto; display:grid; place-items:center; font-weight:800; font-size:11px; color:#fff; background:linear-gradient(135deg, var(--astral-color-violet-6), var(--astral-color-violet-4)); overflow:hidden; }
363
+ .au-lg img{ width:100%; height:100%; object-fit:cover; }
364
+ .au-access .au-ax{ flex:1; min-width:0; font-size:12.5px; color:var(--au-text); }
365
+ .au-access .au-ax b{ font-weight:650; }
366
+ .au-access .au-ax .s{ color:var(--au-faint); }
367
+ .au-access .au-chip{ font-size:10.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 16%, transparent); border-radius:6px; padding:3px 8px; white-space:nowrap; }
368
+ .au-access .au-chip.muted{ color:var(--au-faint); background:var(--au-panel); border:1px solid var(--au-line); }
369
+
370
+ /* ---------- panel ---------- */
371
+ .au-panel{ background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:18px 20px; margin-top:16px; }
372
+ .au-phead{ display:flex; align-items:center; gap:11px; margin-bottom:15px; }
373
+ .au-pic{ width:34px; height:34px; border-radius:10px; display:grid; place-items:center; background:color-mix(in srgb, var(--au-brand) 15%, transparent); color:var(--au-brand-text); flex:0 0 auto; }
374
+ .au-pic svg{ width:17px; height:17px; }
375
+ .au-pt{ flex:1; min-width:0; }
376
+ .au-pt .t{ font-size:14px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); }
377
+ .au-pt .h{ font-size:12px; color:var(--au-faint); margin-top:2px; }
378
+ .au-pt .h b{ color:var(--au-dim); font-weight:600; }
379
+ .au-badge-ok{ font-size:10.5px; font-weight:700; color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); border-radius:999px; padding:3px 9px; display:inline-flex; align-items:center; gap:5px; white-space:nowrap; }
380
+ .au-badge-ok .dot{ width:6px; height:6px; border-radius:50%; background:var(--au-green); }
381
+
382
+ /* ---------- webhook field ---------- */
383
+ .au-field-label{ font-size:11.5px; font-weight:600; color:var(--au-dim); margin-bottom:7px; }
384
+ .au-input{ display:flex; align-items:center; gap:9px; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:10px; padding:10px 13px; transition:border-color .15s; }
385
+ .au-input:focus-within{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); }
386
+ .au-input input{ flex:1; min-width:0; border:0; background:transparent; color:var(--au-text); font:inherit; font-size:13px; outline:none; }
387
+ .au-input input::placeholder{ color:var(--au-faint); letter-spacing:0; }
388
+ .au-input input:disabled{ cursor:not-allowed; }
389
+ .au-input .au-eye{ color:var(--au-faint); cursor:pointer; display:grid; place-items:center; flex:0 0 auto; background:none; border:0; padding:0; }
390
+ .au-input .au-eye:hover{ color:var(--au-text); }
391
+ .au-input .au-eye svg{ width:16px; height:16px; display:block; }
392
+ .au-actions{ display:flex; align-items:center; gap:9px; margin-top:14px; flex-wrap:wrap; }
393
+ .au-note{ font-size:11.5px; color:var(--au-faint); margin-top:10px; line-height:1.5; }
394
+
395
+ /* ---------- master toggle ---------- */
396
+ .au-toggle{ position:relative; width:38px; height:22px; border-radius:999px; background:var(--au-surface-2); border:1px solid var(--au-line); cursor:pointer; flex:0 0 auto; transition:background .15s, border-color .15s; padding:0; }
397
+ .au-toggle.on{ background:var(--au-brand); border-color:var(--au-brand); }
398
+ .au-toggle:disabled{ opacity:.5; cursor:not-allowed; }
399
+ .au-toggle i{ position:absolute; top:2px; left:2px; width:16px; height:16px; border-radius:50%; background:var(--au-faint); transition:left .15s, background .15s; }
400
+ .au-toggle.on i{ left:18px; background:#fff; }
401
+
402
+ /* ---------- drive-file picker row ---------- */
403
+ .au-drive-row{ transition:background .12s; }
404
+ .au-drive-row:hover{ background:var(--au-surface-2); }
405
+
406
+ /* ---------- skeleton shimmer ---------- */
407
+ .au-skel{ border-radius:10px; background:linear-gradient(90deg, var(--au-surface-2) 25%, var(--au-line) 37%, var(--au-surface-2) 63%); background-size:400% 100%; animation:au-shimmer 1.4s ease infinite; }
408
+ @keyframes au-shimmer{ 0%{ background-position:100% 0; } 100%{ background-position:-100% 0; } }
409
+
410
+ /* ---------- notification tiles ---------- */
411
+ .au-ntf-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:9px; }
412
+ .au-ntf{ display:flex; align-items:center; gap:11px; padding:11px 12px; border-radius:11px; border:1px solid var(--au-line); background:var(--au-surface-2); cursor:pointer; transition:border-color .15s, background .15s, opacity .15s; text-align:left; font:inherit; }
413
+ .au-ntf:hover{ border-color:color-mix(in srgb, var(--au-brand) 35%, transparent); }
414
+ .au-ntf.on{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); background:color-mix(in srgb, var(--au-brand) 9%, transparent); }
415
+ .au-ntf.dim{ opacity:.45; }
416
+ .au-ntf:disabled{ cursor:default; }
417
+ .au-nic{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; flex:0 0 auto; background:var(--au-panel); color:var(--au-faint); border:1px solid var(--au-line); }
418
+ .au-ntf.on .au-nic{ color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 16%, transparent); border-color:transparent; }
419
+ .au-nic svg{ width:15px; height:15px; }
420
+ .au-nl{ flex:1; min-width:0; font-size:12.5px; font-weight:550; color:var(--au-dim); }
421
+ .au-ntf.on .au-nl{ color:var(--au-text); font-weight:600; }
422
+ .au-chk{ color:var(--au-brand-text); opacity:0; flex:0 0 auto; display:grid; place-items:center; }
423
+ .au-ntf.on .au-chk{ opacity:1; }
424
+ .au-chk svg{ width:15px; height:15px; display:block; }
425
+ .au-savebar{ display:flex; justify-content:flex-end; margin-top:15px; }
426
+
427
+ /* ---------- capability cards (OAuth) ---------- */
428
+ .au-cap-grid{ display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:13px; margin-top:16px; }
429
+ .au-cap{ background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:16px 17px; }
430
+ .au-cap .c-top{ display:flex; align-items:center; gap:10px; margin-bottom:9px; }
431
+ .au-cap .c-ic{ width:34px; height:34px; border-radius:10px; display:grid; place-items:center; flex:0 0 auto; }
432
+ .au-cap .c-ic svg{ width:17px; height:17px; }
433
+ .au-cap .c-nm{ font-size:13.5px; font-weight:700; color:var(--au-text); }
434
+ .au-cap .c-desc{ font-size:12px; color:var(--au-dim); line-height:1.5; }
435
+ .au-cap .c-foot{ display:flex; align-items:center; gap:9px; margin-top:12px; }
436
+ .au-code{ flex:1; min-width:0; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:11.5px; color:var(--au-dim); background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:8px; padding:7px 10px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
437
+
438
+ /* ---------- account rows (OAuth) ---------- */
439
+ .au-secpanel{ margin-top:16px; }
440
+ .au-sec-title{ font-size:13.5px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); display:flex; align-items:center; gap:9px; margin:0 2px 11px; }
441
+ .au-sec-title .c{ font-size:10px; font-weight:700; color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 16%, transparent); border-radius:999px; padding:1px 7px; }
442
+ .au-acct{ display:flex; align-items:center; gap:14px; padding:13px 15px; border-radius:12px; background:var(--au-panel); border:1px solid var(--au-line); box-shadow:var(--au-shadow); }
443
+ .au-acct + .au-acct{ margin-top:10px; }
444
+ .au-av{ width:40px; height:40px; border-radius:10px; display:grid; place-items:center; flex:0 0 auto; background:color-mix(in srgb, var(--au-ic) 18%, transparent); color:var(--au-ic); }
445
+ .au-av svg{ width:20px; height:20px; }
446
+ .au-amain{ flex:1; min-width:0; }
447
+ .au-anm{ font-size:13.5px; font-weight:650; color:var(--au-text); display:flex; align-items:center; gap:9px; min-width:0; }
448
+ .au-anm .nm-txt{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
449
+ .au-anm .dot{ width:7px; height:7px; border-radius:50%; flex:0 0 auto; }
450
+ .au-anm .dot.live{ background:var(--au-green); box-shadow:0 0 7px var(--au-green); }
451
+ .au-anm .dot.idle{ background:var(--au-faint); }
452
+ .au-asub{ font-size:11.5px; color:var(--au-faint); margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
453
+ .au-atags{ display:flex; gap:6px; margin-top:6px; flex-wrap:wrap; }
454
+ .au-ttag{ font-size:10px; font-weight:600; border-radius:5px; padding:2px 7px; display:inline-flex; align-items:center; gap:4px; }
455
+ .au-ttag svg{ width:10px; height:10px; }
456
+ .au-ttag.sheets{ color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); }
457
+ .au-ttag.drive{ color:var(--au-blue); background:color-mix(in srgb, var(--au-blue) 14%, transparent); }
458
+ .au-aact{ display:flex; align-items:center; gap:8px; flex:0 0 auto; }
459
+
460
+ /* ---------- Clay table ---------- */
461
+ .au-tbl{ background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:7px 8px; margin-top:16px; }
462
+ .au-grow{ display:grid; grid-template-columns:1.5fr 1.2fr 0.9fr 0.6fr auto 36px; align-items:center; gap:14px; }
463
+ .au-thead{ padding:11px 14px 9px; font-size:10.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--au-faint); }
464
+ .au-thead .r{ text-align:right; }
465
+ .au-trow{ padding:13px 14px; border-radius:12px; cursor:pointer; transition:background .12s; border:0; background:transparent; font:inherit; text-align:left; width:100%; color:inherit; }
466
+ .au-trow:hover{ background:var(--au-surface-2); }
467
+ .au-trow + .au-trow{ box-shadow:inset 0 1px 0 var(--au-line); }
468
+ .au-trow:hover{ box-shadow:none; }
469
+ .au-cname{ font-size:13.5px; font-weight:650; color:var(--au-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
470
+ .au-csub{ font-size:11px; color:var(--au-faint); margin-top:2px; }
471
+ .au-clist{ font-size:12.5px; color:var(--au-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
472
+ .au-clist.muted{ color:var(--au-faint); font-style:italic; }
473
+ .au-cwhen{ font-size:12.5px; color:var(--au-dim); }
474
+ .au-cwhen.never{ color:var(--au-faint); }
475
+ .au-ctotal{ font-size:12.5px; font-weight:600; color:var(--au-text); text-align:right; }
476
+ .au-ctotal.zero{ color:var(--au-faint); font-weight:500; }
477
+ .au-pill{ font-size:11px; font-weight:700; border-radius:999px; padding:3px 10px; display:inline-flex; align-items:center; gap:6px; white-space:nowrap; justify-self:start; }
478
+ .au-pill .dot{ width:6px; height:6px; border-radius:50%; }
479
+ .au-pill.on{ color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); }
480
+ .au-pill.on .dot{ background:var(--au-green); }
481
+ .au-pill.idle{ color:var(--au-faint); background:var(--au-surface-2); border:1px solid var(--au-line); }
482
+ .au-pill.warn{ color:var(--au-amber); background:color-mix(in srgb, var(--au-amber) 14%, transparent); }
483
+ .au-gear{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; color:var(--au-faint); }
484
+ .au-trow:hover .au-gear{ color:var(--au-text); }
485
+ .au-gear svg{ width:16px; height:16px; }
486
+
487
+ /* ---------- empty state ---------- */
488
+ .au-empty{ display:flex; flex-direction:column; align-items:center; gap:10px; text-align:center; padding:34px 18px; color:var(--au-faint); font-size:13px; background:var(--au-panel); border:1px dashed var(--au-line); border-radius:var(--au-radius); margin-top:16px; }
489
+ .au-empty .e-ic{ width:46px; height:46px; border-radius:13px; display:grid; place-items:center; background:color-mix(in srgb, var(--au-ic) 16%, transparent); color:var(--au-ic); }
490
+ .au-empty .e-ic svg{ width:22px; height:22px; }
491
+ .au-empty .e-t{ font-size:14px; font-weight:650; color:var(--au-text); }
492
+
493
+ /* ---------- responsive ---------- */
494
+ @media (max-width:680px){
495
+ .au-hero{ flex-wrap:wrap; }
496
+ .au-hright{ width:100%; justify-content:flex-start; }
497
+ .au-grow{ grid-template-columns:1.4fr auto 36px; }
498
+ .au-grow .col-list, .au-grow .col-when, .au-grow .col-total{ display:none; }
499
+ }
500
+
501
+
502
+ /* ===== src/styles/toast.css ===== */
503
+ /* Astral toast host. Bottom-right stack, newest at the bottom (nearest the
504
+ corner). Theme-aware via the --astral-* tokens. */
505
+
506
+ .au-toast-host{
507
+ position: fixed;
508
+ right: 16px;
509
+ bottom: 16px;
510
+ z-index: 10000; /* above AstralModal/AstralMenu portals */
511
+ display: flex;
512
+ flex-direction: column;
513
+ gap: 10px;
514
+ width: 360px;
515
+ max-width: calc(100vw - 32px);
516
+ pointer-events: none;
517
+ font-family: var(--astral-font-family);
518
+ }
519
+
520
+ @keyframes au-toast-in{
521
+ from{ opacity: 0; transform: translateX(16px) scale(.98); }
522
+ to{ opacity: 1; transform: translateX(0) scale(1); }
523
+ }
524
+
525
+ .au-toast{
526
+ pointer-events: auto;
527
+ display: flex;
528
+ align-items: flex-start;
529
+ gap: 11px;
530
+ padding: 12px 13px;
531
+ border-radius: 12px;
532
+ border: 1px solid var(--astral-color-default-border);
533
+ border-left: 3px solid var(--au-toast-accent, var(--astral-color-default-border));
534
+ background: light-dark(#ffffff, var(--astral-color-dark-6));
535
+ box-shadow: light-dark(0 6px 22px rgba(16,16,24,.12), 0 8px 26px rgba(0,0,0,.45));
536
+ color: var(--astral-color-text);
537
+ animation: au-toast-in .18s ease;
538
+ }
539
+
540
+ .au-toast-lead{
541
+ flex: 0 0 auto;
542
+ display: grid;
543
+ place-items: center;
544
+ width: 24px;
545
+ height: 24px;
546
+ border-radius: 7px;
547
+ color: var(--au-toast-accent, var(--astral-color-dimmed));
548
+ background: color-mix(in srgb, var(--au-toast-accent, var(--astral-color-default-border)) 16%, transparent);
549
+ }
550
+ .au-toast-lead svg{ width: 16px; height: 16px; display: block; }
551
+
552
+ .au-toast-body{ flex: 1; min-width: 0; padding-top: 1px; }
553
+ .au-toast-title{ font-size: 13px; font-weight: 700; color: var(--astral-color-text); margin-bottom: 2px; line-height: 1.35; }
554
+ .au-toast-msg{ font-size: 12.5px; line-height: 1.45; color: var(--astral-color-dimmed); word-break: break-word; }
555
+ .au-toast-title + .au-toast-msg{ color: var(--astral-color-dimmed); }
556
+ /* when there's no title, the message is the primary line */
557
+ .au-toast-body > .au-toast-msg:only-child{ color: var(--astral-color-text); font-weight: 500; }
558
+
559
+ .au-toast-x{
560
+ flex: 0 0 auto;
561
+ display: grid;
562
+ place-items: center;
563
+ width: 22px;
564
+ height: 22px;
565
+ border: 0;
566
+ background: none;
567
+ border-radius: 6px;
568
+ color: var(--astral-color-dimmed);
569
+ cursor: pointer;
570
+ transition: color .12s, background .12s;
571
+ }
572
+ .au-toast-x:hover{ color: var(--astral-color-text); background: var(--astral-color-default-hover); }
573
+ .au-toast-x svg{ width: 14px; height: 14px; display: block; }
574
+
575
+ @keyframes au-toast-spin{ to{ transform: rotate(360deg); } }
576
+ .au-toast-spin{
577
+ width: 16px;
578
+ height: 16px;
579
+ border-radius: 50%;
580
+ border: 2px solid color-mix(in srgb, currentColor 30%, transparent);
581
+ border-top-color: currentColor;
582
+ animation: au-toast-spin .6s linear infinite;
583
+ display: block;
584
+ }
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@astralui/core",
3
+ "version": "0.1.0",
4
+ "description": "AstralUI - a self-contained, dependency-free React design system: theme engine (light/dark + per-brand theming), design tokens, and components (Modal, Drawer, Select, Menu, Toast, DateInput, PinInput, Spinner).",
5
+ "license": "MIT",
6
+ "author": "Unbounded Technologies",
7
+ "type": "module",
8
+ "sideEffects": [
9
+ "**/*.css"
10
+ ],
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "main": "./dist/index.cjs",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js",
21
+ "require": "./dist/index.cjs"
22
+ },
23
+ "./styles.css": "./dist/styles.css"
24
+ },
25
+ "scripts": {
26
+ "build": "tsup && node scripts/build-css.mjs",
27
+ "dev": "tsup --watch",
28
+ "typecheck": "tsc --noEmit",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "keywords": [
32
+ "react",
33
+ "design-system",
34
+ "ui",
35
+ "components",
36
+ "theme",
37
+ "dark-mode",
38
+ "astralui"
39
+ ],
40
+ "peerDependencies": {
41
+ "react": ">=18",
42
+ "react-dom": ">=18",
43
+ "@tabler/icons-react": ">=3"
44
+ },
45
+ "dependencies": {
46
+ "chroma-js": "^3.2.0"
47
+ },
48
+ "devDependencies": {
49
+ "@tabler/icons-react": "^3.0.0",
50
+ "@types/chroma-js": "^3.1.0",
51
+ "@types/react": "^19.0.0",
52
+ "@types/react-dom": "^19.0.0",
53
+ "react": "^19.0.0",
54
+ "react-dom": "^19.0.0",
55
+ "tsup": "^8.3.0",
56
+ "typescript": "^5.6.0"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ }
61
+ }