@snowztech/ui-css 0.2.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,582 @@
1
+ /* src/tokens.css */
2
+ :root {
3
+ --sn-font-mono:
4
+ "JetBrains Mono",
5
+ ui-monospace,
6
+ "SF Mono",
7
+ Menlo,
8
+ Consolas,
9
+ monospace;
10
+ --sn-font-sans:
11
+ "JetBrains Mono",
12
+ ui-monospace,
13
+ "SF Mono",
14
+ Menlo,
15
+ Consolas,
16
+ monospace;
17
+ --sn-text-2xs: 11px;
18
+ --sn-text-xs: 12px;
19
+ --sn-text-sm: 13px;
20
+ --sn-text-base: 14px;
21
+ --sn-text-md: 15px;
22
+ --sn-text-lg: 17px;
23
+ --sn-text-xl: 20px;
24
+ --sn-text-2xl: 24px;
25
+ --sn-text-3xl: 28px;
26
+ --sn-text-4xl: 36px;
27
+ --sn-leading-tight: 1.2;
28
+ --sn-leading-normal: 1.55;
29
+ --sn-leading-relaxed: 1.75;
30
+ --sn-s-1: 4px;
31
+ --sn-s-2: 8px;
32
+ --sn-s-3: 12px;
33
+ --sn-s-4: 16px;
34
+ --sn-s-5: 20px;
35
+ --sn-s-6: 24px;
36
+ --sn-s-7: 32px;
37
+ --sn-s-8: 40px;
38
+ --sn-s-9: 48px;
39
+ --sn-s-10: 64px;
40
+ --sn-s-11: 80px;
41
+ --sn-s-12: 96px;
42
+ --sn-r-none: 0;
43
+ --sn-r-xs: 2px;
44
+ --sn-r-sm: 4px;
45
+ --sn-r-md: 6px;
46
+ --sn-r-lg: 8px;
47
+ --sn-fast: 100ms;
48
+ --sn-base: 160ms;
49
+ --sn-ease: cubic-bezier(0.2, 0, 0, 1);
50
+ --sn-bg: #0a0a0a;
51
+ --sn-bg-elev-1: #111111;
52
+ --sn-bg-elev-2: #181818;
53
+ --sn-bg-inset: #050505;
54
+ --sn-border: #1f1f1f;
55
+ --sn-border-strong: #2a2a2a;
56
+ --sn-border-subtle: #161616;
57
+ --sn-fg: #e8e8e8;
58
+ --sn-fg-muted: #888888;
59
+ --sn-fg-subtle: #666666;
60
+ --sn-fg-faint: #444444;
61
+ --sn-fg-inverse: #0a0a0a;
62
+ --sn-accent: #8ab4f8;
63
+ --sn-accent-hover: #a8c7fa;
64
+ --sn-accent-active: #6c9eed;
65
+ --sn-accent-fg: #0a0a0a;
66
+ --sn-accent-soft: rgba(138, 180, 248, 0.10);
67
+ --sn-accent-border: rgba(138, 180, 248, 0.24);
68
+ --sn-success: #7fc77f;
69
+ --sn-warning: #d4a857;
70
+ --sn-danger: #d77070;
71
+ --sn-success-soft: rgba(127, 199, 127, 0.10);
72
+ --sn-warning-soft: rgba(212, 168, 87, 0.10);
73
+ --sn-danger-soft: rgba(215, 112, 112, 0.10);
74
+ --sn-shadow-sm: none;
75
+ --sn-shadow-md: 0 0 0 1px var(--sn-border);
76
+ --sn-shadow-lg: 0 0 0 1px var(--sn-border-strong);
77
+ }
78
+ [data-theme=light] {
79
+ --sn-bg: #f7f7f5;
80
+ --sn-bg-elev-1: #ffffff;
81
+ --sn-bg-elev-2: #ffffff;
82
+ --sn-bg-inset: #efefec;
83
+ --sn-border: #e2e2dd;
84
+ --sn-border-strong: #c8c8c2;
85
+ --sn-border-subtle: #ececea;
86
+ --sn-fg: #161616;
87
+ --sn-fg-muted: #6a6a6a;
88
+ --sn-fg-subtle: #888888;
89
+ --sn-fg-faint: #b0b0ad;
90
+ --sn-fg-inverse: #ffffff;
91
+ --sn-accent: #2a64d6;
92
+ --sn-accent-hover: #1f56c2;
93
+ --sn-accent-active: #194ba8;
94
+ --sn-accent-fg: #ffffff;
95
+ --sn-accent-soft: rgba(42, 100, 214, 0.08);
96
+ --sn-accent-border: rgba(42, 100, 214, 0.24);
97
+ }
98
+
99
+ /* src/base.css */
100
+ *,
101
+ *::before,
102
+ *::after {
103
+ box-sizing: border-box;
104
+ }
105
+ html,
106
+ body {
107
+ margin: 0;
108
+ padding: 0;
109
+ }
110
+ html,
111
+ body {
112
+ height: 100%;
113
+ }
114
+ body {
115
+ font-family: var(--sn-font-mono);
116
+ font-size: var(--sn-text-sm);
117
+ line-height: var(--sn-leading-normal);
118
+ color: var(--sn-fg);
119
+ background: var(--sn-bg);
120
+ -webkit-font-smoothing: antialiased;
121
+ }
122
+ ::selection {
123
+ background: var(--sn-accent-soft);
124
+ color: var(--sn-fg);
125
+ }
126
+ a {
127
+ color: var(--sn-accent);
128
+ text-decoration: none;
129
+ }
130
+ a:hover {
131
+ color: var(--sn-accent-hover);
132
+ }
133
+ @keyframes sn-spin {
134
+ to {
135
+ transform: rotate(360deg);
136
+ }
137
+ }
138
+ @keyframes sn-pulse {
139
+ 0%, 100% {
140
+ opacity: 0.3;
141
+ }
142
+ 50% {
143
+ opacity: 1;
144
+ }
145
+ }
146
+ @keyframes sn-blink {
147
+ 50% {
148
+ opacity: 0;
149
+ }
150
+ }
151
+
152
+ /* src/components/btn.css */
153
+ .sn-btn {
154
+ display: inline-flex;
155
+ align-items: center;
156
+ justify-content: center;
157
+ gap: 8px;
158
+ font-family: var(--sn-font-mono);
159
+ font-size: var(--sn-text-sm);
160
+ font-weight: 500;
161
+ line-height: 1;
162
+ border-radius: var(--sn-r-xs);
163
+ padding: 0 14px;
164
+ height: 30px;
165
+ border: 1px solid transparent;
166
+ cursor: pointer;
167
+ transition:
168
+ background var(--sn-fast) var(--sn-ease),
169
+ border-color var(--sn-fast) var(--sn-ease),
170
+ color var(--sn-fast) var(--sn-ease);
171
+ white-space: nowrap;
172
+ user-select: none;
173
+ background: transparent;
174
+ color: var(--sn-fg);
175
+ }
176
+ .sn-btn:focus-visible {
177
+ outline: 1px solid var(--sn-accent);
178
+ outline-offset: 1px;
179
+ }
180
+ .sn-btn[disabled] {
181
+ opacity: 0.4;
182
+ cursor: not-allowed;
183
+ }
184
+ .sn-btn--sm {
185
+ height: 24px;
186
+ font-size: var(--sn-text-xs);
187
+ padding: 0 10px;
188
+ }
189
+ .sn-btn--lg {
190
+ height: 36px;
191
+ font-size: var(--sn-text-sm);
192
+ padding: 0 18px;
193
+ }
194
+ .sn-btn--primary {
195
+ background: var(--sn-fg);
196
+ color: var(--sn-fg-inverse);
197
+ border-color: var(--sn-fg);
198
+ }
199
+ .sn-btn--primary:hover {
200
+ background: var(--sn-fg-muted);
201
+ border-color: var(--sn-fg-muted);
202
+ }
203
+ .sn-btn--secondary {
204
+ background: transparent;
205
+ color: var(--sn-fg);
206
+ border-color: var(--sn-border-strong);
207
+ }
208
+ .sn-btn--secondary:hover {
209
+ border-color: var(--sn-fg-muted);
210
+ }
211
+ .sn-btn--ghost {
212
+ background: transparent;
213
+ color: var(--sn-fg-muted);
214
+ }
215
+ .sn-btn--ghost:hover {
216
+ color: var(--sn-fg);
217
+ }
218
+ .sn-btn--accent {
219
+ background: var(--sn-accent);
220
+ color: var(--sn-accent-fg);
221
+ border-color: var(--sn-accent);
222
+ }
223
+ .sn-btn--accent:hover {
224
+ background: var(--sn-accent-hover);
225
+ border-color: var(--sn-accent-hover);
226
+ }
227
+ .sn-btn--danger {
228
+ background: transparent;
229
+ color: var(--sn-danger);
230
+ border-color: var(--sn-border-strong);
231
+ }
232
+ .sn-btn--danger:hover {
233
+ border-color: var(--sn-danger);
234
+ }
235
+
236
+ /* src/components/input.css */
237
+ .sn-input {
238
+ font-family: var(--sn-font-mono);
239
+ font-size: var(--sn-text-sm);
240
+ color: var(--sn-fg);
241
+ background: transparent;
242
+ border: 1px solid var(--sn-border-strong);
243
+ border-radius: var(--sn-r-xs);
244
+ padding: 0 10px;
245
+ height: 30px;
246
+ width: 100%;
247
+ transition: border-color var(--sn-fast) var(--sn-ease);
248
+ }
249
+ .sn-input::placeholder {
250
+ color: var(--sn-fg-faint);
251
+ }
252
+ .sn-input:hover {
253
+ border-color: var(--sn-fg-muted);
254
+ }
255
+ .sn-input:focus {
256
+ outline: none;
257
+ border-color: var(--sn-accent);
258
+ }
259
+
260
+ /* src/components/card.css */
261
+ .sn-card {
262
+ background: transparent;
263
+ border: 1px solid var(--sn-border);
264
+ border-radius: var(--sn-r-xs);
265
+ padding: var(--sn-s-5);
266
+ }
267
+ .sn-card--rounded {
268
+ border-radius: var(--sn-r-lg);
269
+ }
270
+ .sn-card--accent {
271
+ border-color: var(--sn-accent-border);
272
+ background: var(--sn-accent-soft);
273
+ }
274
+ .sn-card--inset {
275
+ background: var(--sn-bg-inset);
276
+ }
277
+
278
+ /* src/components/badge.css */
279
+ .sn-badge {
280
+ display: inline-flex;
281
+ align-items: center;
282
+ gap: 4px;
283
+ font-family: var(--sn-font-mono);
284
+ font-size: var(--sn-text-2xs);
285
+ font-weight: 400;
286
+ padding: 2px 6px;
287
+ border-radius: var(--sn-r-xs);
288
+ border: 1px solid var(--sn-border);
289
+ color: var(--sn-fg-muted);
290
+ height: 18px;
291
+ text-transform: lowercase;
292
+ }
293
+ .sn-badge--accent {
294
+ color: var(--sn-accent);
295
+ border-color: var(--sn-accent-border);
296
+ }
297
+ .sn-badge--success {
298
+ color: var(--sn-success);
299
+ border-color: rgba(127, 199, 127, 0.30);
300
+ }
301
+ .sn-badge--warning {
302
+ color: var(--sn-warning);
303
+ border-color: rgba(212, 168, 87, 0.30);
304
+ }
305
+ .sn-badge--danger {
306
+ color: var(--sn-danger);
307
+ border-color: rgba(215, 112, 112, 0.30);
308
+ }
309
+
310
+ /* src/components/kbd.css */
311
+ .sn-kbd {
312
+ font-family: var(--sn-font-mono);
313
+ font-size: var(--sn-text-2xs);
314
+ border: 1px solid var(--sn-border-strong);
315
+ border-radius: var(--sn-r-xs);
316
+ padding: 1px 5px;
317
+ color: var(--sn-fg-muted);
318
+ }
319
+
320
+ /* src/components/divider.css */
321
+ .sn-divider {
322
+ height: 1px;
323
+ background: var(--sn-border);
324
+ border: 0;
325
+ margin: 0;
326
+ }
327
+
328
+ /* src/components/meta.css */
329
+ .sn-meta {
330
+ font-family: var(--sn-font-mono);
331
+ font-size: var(--sn-text-2xs);
332
+ letter-spacing: 0.04em;
333
+ text-transform: uppercase;
334
+ color: var(--sn-fg-faint);
335
+ }
336
+ .sn-prompt {
337
+ color: var(--sn-fg-faint);
338
+ user-select: none;
339
+ }
340
+ .sn-prompt::before {
341
+ content: "\203a ";
342
+ }
343
+
344
+ /* src/components/icon.css */
345
+ .sn-icon {
346
+ display: inline-block;
347
+ vertical-align: middle;
348
+ flex-shrink: 0;
349
+ color: currentColor;
350
+ }
351
+
352
+ /* src/components/mark.css */
353
+ .sn-mark {
354
+ display: inline-block;
355
+ vertical-align: middle;
356
+ flex-shrink: 0;
357
+ color: currentColor;
358
+ width: var(--sn-mark-size, 32px);
359
+ height: var(--sn-mark-size, 32px);
360
+ }
361
+ .sn-mark--xs {
362
+ --sn-mark-size: 16px;
363
+ }
364
+ .sn-mark--sm {
365
+ --sn-mark-size: 24px;
366
+ }
367
+ .sn-mark--md {
368
+ --sn-mark-size: 32px;
369
+ }
370
+ .sn-mark--lg {
371
+ --sn-mark-size: 48px;
372
+ }
373
+ .sn-mark--xl {
374
+ --sn-mark-size: 64px;
375
+ }
376
+ .sn-mark--accent {
377
+ color: var(--sn-accent);
378
+ }
379
+ .sn-mark--muted {
380
+ color: var(--sn-fg-muted);
381
+ }
382
+ .sn-wordmark {
383
+ font-family: var(--sn-font-mono);
384
+ font-size: var(--sn-wordmark-size, 18px);
385
+ font-weight: 700;
386
+ letter-spacing: -0.01em;
387
+ color: currentColor;
388
+ line-height: 1;
389
+ }
390
+ .sn-wordmark__dot {
391
+ color: var(--sn-accent);
392
+ }
393
+
394
+ /* src/components/monogram.css */
395
+ .sn-monogram {
396
+ display: inline-flex;
397
+ align-items: center;
398
+ justify-content: center;
399
+ flex-shrink: 0;
400
+ background: var(--sn-monogram-bg, var(--sn-bg));
401
+ color: var(--sn-monogram-fg, var(--sn-fg));
402
+ width: var(--sn-monogram-size, 64px);
403
+ height: var(--sn-monogram-size, 64px);
404
+ border-radius: var(--sn-monogram-radius, var(--sn-r-md));
405
+ }
406
+ .sn-monogram--xs {
407
+ --sn-monogram-size: 32px;
408
+ --sn-monogram-radius: var(--sn-r-xs);
409
+ }
410
+ .sn-monogram--sm {
411
+ --sn-monogram-size: 48px;
412
+ --sn-monogram-radius: var(--sn-r-sm);
413
+ }
414
+ .sn-monogram--md {
415
+ --sn-monogram-size: 64px;
416
+ --sn-monogram-radius: var(--sn-r-md);
417
+ }
418
+ .sn-monogram--lg {
419
+ --sn-monogram-size: 96px;
420
+ --sn-monogram-radius: var(--sn-r-lg);
421
+ }
422
+ .sn-monogram--inverse {
423
+ --sn-monogram-bg: var(--sn-fg);
424
+ --sn-monogram-fg: var(--sn-bg);
425
+ }
426
+
427
+ /* src/components/avatar.css */
428
+ .sn-avatar {
429
+ display: inline-flex;
430
+ align-items: center;
431
+ justify-content: center;
432
+ width: var(--sn-avatar-size, 32px);
433
+ height: var(--sn-avatar-size, 32px);
434
+ border-radius: 50%;
435
+ background: var(--sn-bg-elev-1);
436
+ color: var(--sn-fg-muted);
437
+ font-family: var(--sn-font-mono);
438
+ font-size: max(10px, calc(var(--sn-avatar-size, 32px) * 0.38));
439
+ font-weight: 500;
440
+ overflow: hidden;
441
+ flex-shrink: 0;
442
+ vertical-align: middle;
443
+ }
444
+ .sn-avatar--square {
445
+ border-radius: var(--sn-r-xs);
446
+ }
447
+ .sn-avatar--ring {
448
+ box-shadow: 0 0 0 1px var(--sn-border-strong);
449
+ }
450
+ .sn-avatar--xs {
451
+ --sn-avatar-size: 20px;
452
+ }
453
+ .sn-avatar--sm {
454
+ --sn-avatar-size: 28px;
455
+ }
456
+ .sn-avatar--md {
457
+ --sn-avatar-size: 32px;
458
+ }
459
+ .sn-avatar--lg {
460
+ --sn-avatar-size: 48px;
461
+ }
462
+ .sn-avatar--xl {
463
+ --sn-avatar-size: 64px;
464
+ }
465
+ .sn-avatar > img {
466
+ width: 100%;
467
+ height: 100%;
468
+ object-fit: cover;
469
+ display: block;
470
+ }
471
+ .sn-avatar-stack {
472
+ display: inline-flex;
473
+ }
474
+ .sn-avatar-stack > * + * {
475
+ margin-left: var(--sn-avatar-overlap, -8px);
476
+ }
477
+
478
+ /* src/components/pulse.css */
479
+ .sn-pulse {
480
+ display: inline-flex;
481
+ align-items: center;
482
+ gap: var(--sn-s-2);
483
+ color: var(--sn-fg-muted);
484
+ font-size: var(--sn-text-sm);
485
+ }
486
+ .sn-pulse__dot {
487
+ position: relative;
488
+ display: inline-flex;
489
+ width: var(--sn-pulse-size, 8px);
490
+ height: var(--sn-pulse-size, 8px);
491
+ flex-shrink: 0;
492
+ }
493
+ .sn-pulse__dot::before,
494
+ .sn-pulse__dot::after {
495
+ content: "";
496
+ position: absolute;
497
+ inset: 0;
498
+ border-radius: 50%;
499
+ background: var(--sn-pulse-color, var(--sn-success));
500
+ }
501
+ .sn-pulse__dot::before {
502
+ opacity: 0.6;
503
+ animation: sn-pulse 2s ease-in-out infinite;
504
+ }
505
+ .sn-pulse--success {
506
+ --sn-pulse-color: var(--sn-success);
507
+ }
508
+ .sn-pulse--warning {
509
+ --sn-pulse-color: var(--sn-warning);
510
+ }
511
+ .sn-pulse--danger {
512
+ --sn-pulse-color: var(--sn-danger);
513
+ }
514
+ .sn-pulse--accent {
515
+ --sn-pulse-color: var(--sn-accent);
516
+ }
517
+
518
+ /* src/components/copy-button.css */
519
+ .sn-copy-btn {
520
+ appearance: none;
521
+ border: 1px solid transparent;
522
+ background: transparent;
523
+ color: var(--sn-fg-muted);
524
+ padding: 6px;
525
+ cursor: pointer;
526
+ display: inline-flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ border-radius: var(--sn-r-xs);
530
+ transition: color var(--sn-fast) var(--sn-ease), border-color var(--sn-fast) var(--sn-ease);
531
+ }
532
+ .sn-copy-btn:hover {
533
+ color: var(--sn-fg);
534
+ }
535
+ .sn-copy-btn:focus-visible {
536
+ outline: 1px solid var(--sn-accent);
537
+ outline-offset: 1px;
538
+ }
539
+ .sn-copy-btn[data-copied=true],
540
+ .sn-copy-btn[data-copied=true]:hover {
541
+ color: var(--sn-success);
542
+ }
543
+ .sn-copy-btn .sn-copy-btn__copied {
544
+ display: none;
545
+ }
546
+ .sn-copy-btn[data-copied=true] .sn-copy-btn__copied {
547
+ display: inline-flex;
548
+ }
549
+ .sn-copy-btn[data-copied=true] .sn-copy-btn__idle {
550
+ display: none;
551
+ }
552
+
553
+ /* src/components/theme-toggle.css */
554
+ .sn-theme-toggle {
555
+ appearance: none;
556
+ border: none;
557
+ background: transparent;
558
+ padding: 6px;
559
+ cursor: pointer;
560
+ display: inline-flex;
561
+ align-items: center;
562
+ justify-content: center;
563
+ transition: opacity var(--sn-base);
564
+ }
565
+ .sn-theme-toggle:focus-visible {
566
+ outline: 1px solid var(--sn-accent);
567
+ outline-offset: 1px;
568
+ }
569
+ .sn-theme-toggle__indicator {
570
+ display: inline-block;
571
+ width: var(--sn-theme-toggle-size, 12px);
572
+ height: var(--sn-theme-toggle-size, 12px);
573
+ border-radius: 50%;
574
+ border: 1px solid var(--sn-fg-muted);
575
+ background: var(--sn-fg);
576
+ transition: background var(--sn-base) var(--sn-ease);
577
+ }
578
+ [data-theme=light] .sn-theme-toggle__indicator {
579
+ background: transparent;
580
+ }
581
+
582
+ /* src/index.css */
@@ -0,0 +1 @@
1
+ :root{--sn-font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sn-font-sans: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sn-text-2xs: 11px;--sn-text-xs: 12px;--sn-text-sm: 13px;--sn-text-base: 14px;--sn-text-md: 15px;--sn-text-lg: 17px;--sn-text-xl: 20px;--sn-text-2xl: 24px;--sn-text-3xl: 28px;--sn-text-4xl: 36px;--sn-leading-tight: 1.2;--sn-leading-normal: 1.55;--sn-leading-relaxed: 1.75;--sn-s-1: 4px;--sn-s-2: 8px;--sn-s-3: 12px;--sn-s-4: 16px;--sn-s-5: 20px;--sn-s-6: 24px;--sn-s-7: 32px;--sn-s-8: 40px;--sn-s-9: 48px;--sn-s-10: 64px;--sn-s-11: 80px;--sn-s-12: 96px;--sn-r-none: 0;--sn-r-xs: 2px;--sn-r-sm: 4px;--sn-r-md: 6px;--sn-r-lg: 8px;--sn-fast: .1s;--sn-base: .16s;--sn-ease: cubic-bezier(.2, 0, 0, 1);--sn-bg: #0a0a0a;--sn-bg-elev-1: #111111;--sn-bg-elev-2: #181818;--sn-bg-inset: #050505;--sn-border: #1f1f1f;--sn-border-strong: #2a2a2a;--sn-border-subtle: #161616;--sn-fg: #e8e8e8;--sn-fg-muted: #888888;--sn-fg-subtle: #666666;--sn-fg-faint: #444444;--sn-fg-inverse: #0a0a0a;--sn-accent: #8ab4f8;--sn-accent-hover: #a8c7fa;--sn-accent-active: #6c9eed;--sn-accent-fg: #0a0a0a;--sn-accent-soft: rgba(138, 180, 248, .1);--sn-accent-border: rgba(138, 180, 248, .24);--sn-success: #7fc77f;--sn-warning: #d4a857;--sn-danger: #d77070;--sn-success-soft: rgba(127, 199, 127, .1);--sn-warning-soft: rgba(212, 168, 87, .1);--sn-danger-soft: rgba(215, 112, 112, .1);--sn-shadow-sm: none;--sn-shadow-md: 0 0 0 1px var(--sn-border);--sn-shadow-lg: 0 0 0 1px var(--sn-border-strong)}[data-theme=light]{--sn-bg: #f7f7f5;--sn-bg-elev-1: #ffffff;--sn-bg-elev-2: #ffffff;--sn-bg-inset: #efefec;--sn-border: #e2e2dd;--sn-border-strong: #c8c8c2;--sn-border-subtle: #ececea;--sn-fg: #161616;--sn-fg-muted: #6a6a6a;--sn-fg-subtle: #888888;--sn-fg-faint: #b0b0ad;--sn-fg-inverse: #ffffff;--sn-accent: #2a64d6;--sn-accent-hover: #1f56c2;--sn-accent-active: #194ba8;--sn-accent-fg: #ffffff;--sn-accent-soft: rgba(42, 100, 214, .08);--sn-accent-border: rgba(42, 100, 214, .24)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html,body{height:100%}body{font-family:var(--sn-font-mono);font-size:var(--sn-text-sm);line-height:var(--sn-leading-normal);color:var(--sn-fg);background:var(--sn-bg);-webkit-font-smoothing:antialiased}::selection{background:var(--sn-accent-soft);color:var(--sn-fg)}a{color:var(--sn-accent);text-decoration:none}a:hover{color:var(--sn-accent-hover)}@keyframes sn-spin{to{transform:rotate(360deg)}}@keyframes sn-pulse{0%,to{opacity:.3}50%{opacity:1}}@keyframes sn-blink{50%{opacity:0}}.sn-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--sn-font-mono);font-size:var(--sn-text-sm);font-weight:500;line-height:1;border-radius:var(--sn-r-xs);padding:0 14px;height:30px;border:1px solid transparent;cursor:pointer;transition:background var(--sn-fast) var(--sn-ease),border-color var(--sn-fast) var(--sn-ease),color var(--sn-fast) var(--sn-ease);white-space:nowrap;user-select:none;background:transparent;color:var(--sn-fg)}.sn-btn:focus-visible{outline:1px solid var(--sn-accent);outline-offset:1px}.sn-btn[disabled]{opacity:.4;cursor:not-allowed}.sn-btn--sm{height:24px;font-size:var(--sn-text-xs);padding:0 10px}.sn-btn--lg{height:36px;font-size:var(--sn-text-sm);padding:0 18px}.sn-btn--primary{background:var(--sn-fg);color:var(--sn-fg-inverse);border-color:var(--sn-fg)}.sn-btn--primary:hover{background:var(--sn-fg-muted);border-color:var(--sn-fg-muted)}.sn-btn--secondary{background:transparent;color:var(--sn-fg);border-color:var(--sn-border-strong)}.sn-btn--secondary:hover{border-color:var(--sn-fg-muted)}.sn-btn--ghost{background:transparent;color:var(--sn-fg-muted)}.sn-btn--ghost:hover{color:var(--sn-fg)}.sn-btn--accent{background:var(--sn-accent);color:var(--sn-accent-fg);border-color:var(--sn-accent)}.sn-btn--accent:hover{background:var(--sn-accent-hover);border-color:var(--sn-accent-hover)}.sn-btn--danger{background:transparent;color:var(--sn-danger);border-color:var(--sn-border-strong)}.sn-btn--danger:hover{border-color:var(--sn-danger)}.sn-input{font-family:var(--sn-font-mono);font-size:var(--sn-text-sm);color:var(--sn-fg);background:transparent;border:1px solid var(--sn-border-strong);border-radius:var(--sn-r-xs);padding:0 10px;height:30px;width:100%;transition:border-color var(--sn-fast) var(--sn-ease)}.sn-input::placeholder{color:var(--sn-fg-faint)}.sn-input:hover{border-color:var(--sn-fg-muted)}.sn-input:focus{outline:none;border-color:var(--sn-accent)}.sn-card{background:transparent;border:1px solid var(--sn-border);border-radius:var(--sn-r-xs);padding:var(--sn-s-5)}.sn-card--rounded{border-radius:var(--sn-r-lg)}.sn-card--accent{border-color:var(--sn-accent-border);background:var(--sn-accent-soft)}.sn-card--inset{background:var(--sn-bg-inset)}.sn-badge{display:inline-flex;align-items:center;gap:4px;font-family:var(--sn-font-mono);font-size:var(--sn-text-2xs);font-weight:400;padding:2px 6px;border-radius:var(--sn-r-xs);border:1px solid var(--sn-border);color:var(--sn-fg-muted);height:18px;text-transform:lowercase}.sn-badge--accent{color:var(--sn-accent);border-color:var(--sn-accent-border)}.sn-badge--success{color:var(--sn-success);border-color:#7fc77f4d}.sn-badge--warning{color:var(--sn-warning);border-color:#d4a8574d}.sn-badge--danger{color:var(--sn-danger);border-color:#d770704d}.sn-kbd{font-family:var(--sn-font-mono);font-size:var(--sn-text-2xs);border:1px solid var(--sn-border-strong);border-radius:var(--sn-r-xs);padding:1px 5px;color:var(--sn-fg-muted)}.sn-divider{height:1px;background:var(--sn-border);border:0;margin:0}.sn-meta{font-family:var(--sn-font-mono);font-size:var(--sn-text-2xs);letter-spacing:.04em;text-transform:uppercase;color:var(--sn-fg-faint)}.sn-prompt{color:var(--sn-fg-faint);user-select:none}.sn-prompt:before{content:"\203a "}.sn-icon{display:inline-block;vertical-align:middle;flex-shrink:0;color:currentColor}.sn-mark{display:inline-block;vertical-align:middle;flex-shrink:0;color:currentColor;width:var(--sn-mark-size, 32px);height:var(--sn-mark-size, 32px)}.sn-mark--xs{--sn-mark-size: 16px}.sn-mark--sm{--sn-mark-size: 24px}.sn-mark--md{--sn-mark-size: 32px}.sn-mark--lg{--sn-mark-size: 48px}.sn-mark--xl{--sn-mark-size: 64px}.sn-mark--accent{color:var(--sn-accent)}.sn-mark--muted{color:var(--sn-fg-muted)}.sn-wordmark{font-family:var(--sn-font-mono);font-size:var(--sn-wordmark-size, 18px);font-weight:700;letter-spacing:-.01em;color:currentColor;line-height:1}.sn-wordmark__dot{color:var(--sn-accent)}.sn-monogram{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--sn-monogram-bg, var(--sn-bg));color:var(--sn-monogram-fg, var(--sn-fg));width:var(--sn-monogram-size, 64px);height:var(--sn-monogram-size, 64px);border-radius:var(--sn-monogram-radius, var(--sn-r-md))}.sn-monogram--xs{--sn-monogram-size: 32px;--sn-monogram-radius: var(--sn-r-xs)}.sn-monogram--sm{--sn-monogram-size: 48px;--sn-monogram-radius: var(--sn-r-sm)}.sn-monogram--md{--sn-monogram-size: 64px;--sn-monogram-radius: var(--sn-r-md)}.sn-monogram--lg{--sn-monogram-size: 96px;--sn-monogram-radius: var(--sn-r-lg)}.sn-monogram--inverse{--sn-monogram-bg: var(--sn-fg);--sn-monogram-fg: var(--sn-bg)}.sn-avatar{display:inline-flex;align-items:center;justify-content:center;width:var(--sn-avatar-size, 32px);height:var(--sn-avatar-size, 32px);border-radius:50%;background:var(--sn-bg-elev-1);color:var(--sn-fg-muted);font-family:var(--sn-font-mono);font-size:max(10px,calc(var(--sn-avatar-size, 32px) * .38));font-weight:500;overflow:hidden;flex-shrink:0;vertical-align:middle}.sn-avatar--square{border-radius:var(--sn-r-xs)}.sn-avatar--ring{box-shadow:0 0 0 1px var(--sn-border-strong)}.sn-avatar--xs{--sn-avatar-size: 20px}.sn-avatar--sm{--sn-avatar-size: 28px}.sn-avatar--md{--sn-avatar-size: 32px}.sn-avatar--lg{--sn-avatar-size: 48px}.sn-avatar--xl{--sn-avatar-size: 64px}.sn-avatar>img{width:100%;height:100%;object-fit:cover;display:block}.sn-avatar-stack{display:inline-flex}.sn-avatar-stack>*+*{margin-left:var(--sn-avatar-overlap, -8px)}.sn-pulse{display:inline-flex;align-items:center;gap:var(--sn-s-2);color:var(--sn-fg-muted);font-size:var(--sn-text-sm)}.sn-pulse__dot{position:relative;display:inline-flex;width:var(--sn-pulse-size, 8px);height:var(--sn-pulse-size, 8px);flex-shrink:0}.sn-pulse__dot:before,.sn-pulse__dot:after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--sn-pulse-color, var(--sn-success))}.sn-pulse__dot:before{opacity:.6;animation:sn-pulse 2s ease-in-out infinite}.sn-pulse--success{--sn-pulse-color: var(--sn-success)}.sn-pulse--warning{--sn-pulse-color: var(--sn-warning)}.sn-pulse--danger{--sn-pulse-color: var(--sn-danger)}.sn-pulse--accent{--sn-pulse-color: var(--sn-accent)}.sn-copy-btn{appearance:none;border:1px solid transparent;background:transparent;color:var(--sn-fg-muted);padding:6px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--sn-r-xs);transition:color var(--sn-fast) var(--sn-ease),border-color var(--sn-fast) var(--sn-ease)}.sn-copy-btn:hover{color:var(--sn-fg)}.sn-copy-btn:focus-visible{outline:1px solid var(--sn-accent);outline-offset:1px}.sn-copy-btn[data-copied=true],.sn-copy-btn[data-copied=true]:hover{color:var(--sn-success)}.sn-copy-btn .sn-copy-btn__copied{display:none}.sn-copy-btn[data-copied=true] .sn-copy-btn__copied{display:inline-flex}.sn-copy-btn[data-copied=true] .sn-copy-btn__idle{display:none}.sn-theme-toggle{appearance:none;border:none;background:transparent;padding:6px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:opacity var(--sn-base)}.sn-theme-toggle:focus-visible{outline:1px solid var(--sn-accent);outline-offset:1px}.sn-theme-toggle__indicator{display:inline-block;width:var(--sn-theme-toggle-size, 12px);height:var(--sn-theme-toggle-size, 12px);border-radius:50%;border:1px solid var(--sn-fg-muted);background:var(--sn-fg);transition:background var(--sn-base) var(--sn-ease)}[data-theme=light] .sn-theme-toggle__indicator{background:transparent}
@@ -0,0 +1,96 @@
1
+ /* snowztech / design tokens
2
+ Pure CSS custom properties. Safe to import alone (no resets, no components). */
3
+
4
+ :root {
5
+ --sn-font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
6
+ --sn-font-sans: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
7
+
8
+ --sn-text-2xs: 11px;
9
+ --sn-text-xs: 12px;
10
+ --sn-text-sm: 13px;
11
+ --sn-text-base: 14px;
12
+ --sn-text-md: 15px;
13
+ --sn-text-lg: 17px;
14
+ --sn-text-xl: 20px;
15
+ --sn-text-2xl: 24px;
16
+ --sn-text-3xl: 28px;
17
+ --sn-text-4xl: 36px;
18
+
19
+ --sn-leading-tight: 1.2;
20
+ --sn-leading-normal: 1.55;
21
+ --sn-leading-relaxed: 1.75;
22
+
23
+ --sn-s-1: 4px; --sn-s-2: 8px; --sn-s-3: 12px;
24
+ --sn-s-4: 16px; --sn-s-5: 20px; --sn-s-6: 24px;
25
+ --sn-s-7: 32px; --sn-s-8: 40px; --sn-s-9: 48px;
26
+ --sn-s-10: 64px; --sn-s-11: 80px; --sn-s-12: 96px;
27
+
28
+ --sn-r-none: 0;
29
+ --sn-r-xs: 2px;
30
+ --sn-r-sm: 4px;
31
+ --sn-r-md: 6px;
32
+ --sn-r-lg: 8px;
33
+
34
+ --sn-fast: 100ms;
35
+ --sn-base: 160ms;
36
+ --sn-ease: cubic-bezier(0.2, 0, 0, 1);
37
+
38
+ /* dark, default */
39
+ --sn-bg: #0a0a0a;
40
+ --sn-bg-elev-1: #111111;
41
+ --sn-bg-elev-2: #181818;
42
+ --sn-bg-inset: #050505;
43
+
44
+ --sn-border: #1f1f1f;
45
+ --sn-border-strong: #2a2a2a;
46
+ --sn-border-subtle: #161616;
47
+
48
+ --sn-fg: #e8e8e8;
49
+ --sn-fg-muted: #888888;
50
+ --sn-fg-subtle: #666666;
51
+ --sn-fg-faint: #444444;
52
+ --sn-fg-inverse: #0a0a0a;
53
+
54
+ --sn-accent: #8ab4f8;
55
+ --sn-accent-hover: #a8c7fa;
56
+ --sn-accent-active: #6c9eed;
57
+ --sn-accent-fg: #0a0a0a;
58
+ --sn-accent-soft: rgba(138, 180, 248, 0.10);
59
+ --sn-accent-border: rgba(138, 180, 248, 0.24);
60
+
61
+ --sn-success: #7fc77f;
62
+ --sn-warning: #d4a857;
63
+ --sn-danger: #d77070;
64
+
65
+ --sn-success-soft: rgba(127, 199, 127, 0.10);
66
+ --sn-warning-soft: rgba(212, 168, 87, 0.10);
67
+ --sn-danger-soft: rgba(215, 112, 112, 0.10);
68
+
69
+ --sn-shadow-sm: none;
70
+ --sn-shadow-md: 0 0 0 1px var(--sn-border);
71
+ --sn-shadow-lg: 0 0 0 1px var(--sn-border-strong);
72
+ }
73
+
74
+ [data-theme="light"] {
75
+ --sn-bg: #f7f7f5;
76
+ --sn-bg-elev-1: #ffffff;
77
+ --sn-bg-elev-2: #ffffff;
78
+ --sn-bg-inset: #efefec;
79
+
80
+ --sn-border: #e2e2dd;
81
+ --sn-border-strong: #c8c8c2;
82
+ --sn-border-subtle: #ececea;
83
+
84
+ --sn-fg: #161616;
85
+ --sn-fg-muted: #6a6a6a;
86
+ --sn-fg-subtle: #888888;
87
+ --sn-fg-faint: #b0b0ad;
88
+ --sn-fg-inverse: #ffffff;
89
+
90
+ --sn-accent: #2a64d6;
91
+ --sn-accent-hover: #1f56c2;
92
+ --sn-accent-active: #194ba8;
93
+ --sn-accent-fg: #ffffff;
94
+ --sn-accent-soft: rgba(42, 100, 214, 0.08);
95
+ --sn-accent-border: rgba(42, 100, 214, 0.24);
96
+ }