@telemetryos/cli 1.14.0 → 1.16.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.
Files changed (23) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/commands/archive.d.ts +13 -0
  3. package/dist/commands/archive.js +49 -0
  4. package/package.json +2 -2
  5. package/templates/claude-code/_claude/skills/tos-settings-ui/SKILL.md +128 -101
  6. package/templates/vite-react-typescript/index.html +1 -1
  7. package/templates/vite-react-typescript/public/assets/telemetryos-wordmark-dark.svg +11 -0
  8. package/templates/vite-react-typescript/src/components/FlickeringGrid.tsx +150 -0
  9. package/templates/vite-react-typescript/src/hooks/store.ts +32 -0
  10. package/templates/vite-react-typescript/src/themes.ts +226 -0
  11. package/templates/vite-react-typescript/src/views/Render.css +943 -5
  12. package/templates/vite-react-typescript/src/views/Render.tsx +139 -10
  13. package/templates/vite-react-typescript/src/views/Settings.tsx +145 -34
  14. package/templates/vite-react-typescript-web/index.html +1 -1
  15. package/templates/vite-react-typescript-web/public/assets/telemetryos-wordmark-dark.svg +11 -0
  16. package/templates/vite-react-typescript-web/src/components/FlickeringGrid.tsx +150 -0
  17. package/templates/vite-react-typescript-web/src/hooks/store.ts +35 -2
  18. package/templates/vite-react-typescript-web/src/themes.ts +226 -0
  19. package/templates/vite-react-typescript-web/src/views/Render.css +943 -5
  20. package/templates/vite-react-typescript-web/src/views/Render.tsx +139 -11
  21. package/templates/vite-react-typescript-web/src/views/Settings.tsx +156 -47
  22. /package/templates/vite-react-typescript-web/{assets → public/assets}/telemetryos-wordmark.svg +0 -0
  23. /package/templates/vite-react-typescript-web/{assets → public/assets}/tos-app.svg +0 -0
@@ -1,46 +1,973 @@
1
+ /* ══════════════════════════════════════
2
+ Keyframes
3
+ ══════════════════════════════════════ */
4
+
5
+ @keyframes fade-in {
6
+ from { opacity: 0; }
7
+ to { opacity: 1; }
8
+ }
9
+
10
+ /* ── Entrance: Fade Up ── */
11
+ @keyframes ent-fade-up {
12
+ from { opacity: 0; transform: translateY(2rem); }
13
+ to { opacity: 1; transform: translateY(0); }
14
+ }
15
+
16
+ /* ── Entrance: Scale ── */
17
+ @keyframes ent-scale {
18
+ from { opacity: 0; transform: scale(0.85); }
19
+ to { opacity: 1; transform: scale(1); }
20
+ }
21
+
22
+ /* ── Entrance: Slide (alternating left/right) ── */
23
+ @keyframes ent-slide-left {
24
+ from { opacity: 0; transform: translateX(-3rem); }
25
+ to { opacity: 1; transform: translateX(0); }
26
+ }
27
+
28
+ @keyframes ent-slide-right {
29
+ from { opacity: 0; transform: translateX(3rem); }
30
+ to { opacity: 1; transform: translateX(0); }
31
+ }
32
+
33
+ /* ── Entrance: Flip ── */
34
+ @keyframes ent-flip {
35
+ from { opacity: 0; transform: perspective(800px) rotateY(-90deg); }
36
+ to { opacity: 1; transform: perspective(800px) rotateY(0deg); }
37
+ }
38
+
39
+ /* ── Entrance: Drop ── */
40
+ @keyframes ent-drop {
41
+ 0% { opacity: 0; transform: translateY(-4rem) scale(0.9); }
42
+ 60% { opacity: 1; transform: translateY(0.4rem) scale(1.02); }
43
+ 80% { transform: translateY(-0.2rem) scale(0.99); }
44
+ 100% { opacity: 1; transform: translateY(0) scale(1); }
45
+ }
46
+
47
+ /* ── Entrance: Fade In (pure opacity, no movement) ── */
48
+ @keyframes ent-fade-in {
49
+ from { opacity: 0; }
50
+ to { opacity: 1; }
51
+ }
52
+
53
+ /* ── Entrance: Blur (focus pull) ── */
54
+ @keyframes ent-blur {
55
+ from { opacity: 0; filter: blur(1.2rem); }
56
+ to { opacity: 1; filter: blur(0); }
57
+ }
58
+
59
+ /* ── Entrance: Zoom (scale from tiny) ── */
60
+ @keyframes ent-zoom {
61
+ from { opacity: 0; transform: scale(0.3); }
62
+ to { opacity: 1; transform: scale(1); }
63
+ }
64
+
65
+ /* ── Entrance: Bounce ── */
66
+ @keyframes ent-bounce {
67
+ 0% { opacity: 0; transform: scale(0.9) translateY(2rem); }
68
+ 50% { opacity: 1; transform: scale(1.02) translateY(-0.4rem); }
69
+ 70% { transform: scale(0.99) translateY(0.15rem); }
70
+ 85% { transform: scale(1.005) translateY(-0.05rem); }
71
+ 100% { opacity: 1; transform: scale(1) translateY(0); }
72
+ }
73
+
74
+ /* ── Entrance: Unfold (3D X-axis rotation) ── */
75
+ @keyframes ent-unfold {
76
+ from { opacity: 0; transform: perspective(800px) rotateX(-90deg); }
77
+ to { opacity: 1; transform: perspective(800px) rotateX(0deg); }
78
+ }
79
+
80
+ /* ── Entrance: Rise (float up from deep below) ── */
81
+ @keyframes ent-rise {
82
+ from { opacity: 0; transform: translateY(6rem) scale(0.95); }
83
+ to { opacity: 1; transform: translateY(0) scale(1); }
84
+ }
85
+
86
+ /* ── Entrance: Glitch (digital stutter) ── */
87
+ @keyframes ent-glitch {
88
+ 0% { opacity: 0; transform: translate(-0.3rem, 0.2rem) skewX(-2deg); }
89
+ 20% { opacity: 0.7; transform: translate(0.3rem, -0.1rem) skewX(1deg); }
90
+ 40% { opacity: 0.4; transform: translate(-0.1rem, 0.1rem) skewX(-1deg); }
91
+ 60% { opacity: 0.8; transform: translate(0.2rem, 0) skewX(0.5deg); }
92
+ 80% { opacity: 0.9; transform: translate(-0.1rem, 0) skewX(0); }
93
+ 100% { opacity: 1; transform: translate(0) skewX(0); }
94
+ }
95
+
96
+ @keyframes breathe-glow {
97
+ 0%, 100% { opacity: 0.75; }
98
+ 50% { opacity: 1; }
99
+ }
100
+
101
+ @keyframes bg-drift {
102
+ 0% { background-position: 0% 0%; }
103
+ 50% { background-position: 100% 100%; }
104
+ 100% { background-position: 0% 0%; }
105
+ }
106
+
107
+ /* ══════════════════════════════════════
108
+ Base
109
+ ══════════════════════════════════════ */
110
+
1
111
  .render {
112
+ --page-padding: 1;
113
+ position: relative;
2
114
  flex: 1;
3
115
  display: flex;
4
116
  flex-direction: column;
5
117
  align-items: center;
118
+ justify-content: center;
119
+ gap: 2rem;
120
+ padding: calc(3rem * var(--page-padding));
121
+ overflow: hidden;
122
+ font-family: var(--font-family);
123
+ color: var(--primary);
124
+
125
+ /* Animated gradient background */
126
+ background:
127
+ radial-gradient(ellipse at 20% 50%, var(--bg-start) 0%, transparent 70%),
128
+ radial-gradient(ellipse at 80% 20%, var(--bg-mid) 0%, transparent 60%),
129
+ radial-gradient(ellipse at 50% 90%, var(--bg-end) 0%, transparent 70%),
130
+ linear-gradient(160deg, var(--bg-start) 0%, var(--bg-mid) 50%, var(--bg-end) 100%);
131
+ background-size: 200% 200%, 200% 200%, 200% 200%, 100% 100%;
132
+ animation: bg-drift 20s ease-in-out infinite, fade-in 0.6s ease-out;
133
+ }
134
+
135
+ /* ── Transparent background ── */
136
+
137
+ .render--no-bg {
138
+ background: transparent;
139
+ animation: none;
140
+ }
141
+
142
+ .render--no-bg::before {
143
+ display: none;
144
+ }
145
+
146
+ /* ── Density tiers ── */
147
+
148
+ .render--comfortable {
149
+ gap: 1.5rem;
150
+ padding: calc(2.5rem * var(--page-padding));
151
+ }
152
+
153
+ .render--compact {
154
+ gap: 1rem;
155
+ padding: calc(2rem * var(--page-padding));
156
+ }
157
+
158
+ .render--minimal {
159
+ gap: 0.6rem;
160
+ padding: calc(1.5rem * var(--page-padding));
161
+ }
162
+
163
+ /* ══════════════════════════════════════
164
+ Header
165
+ ══════════════════════════════════════ */
166
+
167
+ .content-header {
168
+ position: relative;
169
+ z-index: 2;
170
+ display: flex;
6
171
  justify-content: space-between;
172
+ align-items: center;
173
+ flex-shrink: 0;
174
+ }
175
+
176
+ .content-header__title {
177
+ margin: 0;
178
+ font-size: 4rem;
179
+ font-weight: 700;
180
+ line-height: 1;
181
+ white-space: nowrap;
182
+ overflow: hidden;
183
+ text-overflow: ellipsis;
184
+ }
185
+
186
+ .render--comfortable .content-header__title { font-size: 3.5rem; }
187
+ .render--compact .content-header__title { font-size: 3rem; }
188
+ .render--minimal .content-header__title { font-size: 2.4rem; }
189
+
190
+ .content-header__subtitle {
191
+ font-size: 2rem;
192
+ color: var(--secondary);
193
+ }
194
+
195
+ .render--compact .content-header__subtitle,
196
+ .render--comfortable .content-header__subtitle {
197
+ font-size: 1.6rem;
198
+ }
199
+
200
+ /* Portrait + compact: stack header */
201
+ .render--portrait.render--compact .content-header,
202
+ .render--portrait.render--minimal .content-header {
203
+ flex-direction: column;
204
+ align-items: flex-start;
205
+ gap: 0.3rem;
206
+ }
207
+
208
+ /* ══════════════════════════════════════
209
+ Body
210
+ ══════════════════════════════════════ */
211
+
212
+ .content-body {
213
+ position: relative;
214
+ z-index: 2;
215
+ flex: 1;
216
+ min-height: 0;
217
+ display: flex;
7
218
  gap: 2rem;
8
- padding: 3rem;
9
- color: hsl(210 40% 88%);
10
- background: hsl(212 28% 10%);
219
+ }
220
+
221
+ .render--comfortable .content-body { gap: 1.5rem; }
222
+ .render--compact .content-body { gap: 1rem; }
223
+ .render--minimal .content-body { gap: 0.6rem; }
224
+
225
+ .content-body--portrait {
226
+ flex-direction: column;
227
+ }
228
+
229
+ /* ══════════════════════════════════════
230
+ Content Card (primary)
231
+ ══════════════════════════════════════ */
232
+
233
+ .content-card {
234
+ flex: 1;
235
+ min-width: 0;
236
+ min-height: 0;
237
+ padding: 2.5rem;
238
+ border-radius: 1.5rem;
239
+ container-type: size;
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ background:
244
+ radial-gradient(ellipse at 20% 30%, rgba(255,255,255,0.08) 0%, transparent 60%),
245
+ linear-gradient(
246
+ 135deg,
247
+ var(--card-start) 0%,
248
+ var(--card-mid1) 33%,
249
+ var(--card-mid2) 66%,
250
+ var(--card-end) 100%
251
+ );
252
+ background-size: 200% 200%, 100% 100%;
253
+ box-shadow: 0 0.8rem 3rem var(--card-shadow);
254
+ }
255
+
256
+ .render--comfortable .content-card { padding: 2rem; }
257
+ .render--compact .content-card { padding: 1.5rem; border-radius: 1rem; }
258
+ .render--minimal .content-card { padding: 1rem; border-radius: 0.8rem; }
259
+
260
+ /* ══════════════════════════════════════
261
+ Detail Card (secondary items)
262
+ ══════════════════════════════════════ */
263
+
264
+ .detail-card {
265
+ display: flex;
266
+ align-items: center;
267
+ gap: 1rem;
268
+ padding: 1.2rem;
269
+ border-radius: 1rem;
270
+ container-type: size;
271
+ background: var(--card-bg);
272
+ border: 1px solid var(--card-border);
273
+ min-height: 0;
274
+ min-width: 0;
275
+ }
276
+
277
+ .render--compact .detail-card {
278
+ padding: 0.8rem;
279
+ gap: 0.5rem;
280
+ border-radius: 0.6rem;
281
+ }
282
+
283
+ .detail-card__icon {
284
+ flex-shrink: 0;
285
+ width: min(35cqh, 20cqw);
286
+ height: min(35cqh, 20cqw);
287
+ color: var(--accent);
288
+ }
289
+
290
+ .detail-card__info {
291
+ flex: 1;
292
+ min-width: 0;
293
+ display: flex;
294
+ flex-direction: column;
295
+ align-items: flex-end;
296
+ gap: 0.2rem;
297
+ }
298
+
299
+ .detail-card__info:first-child {
300
+ align-items: center;
301
+ }
302
+
303
+ .detail-card__value {
304
+ font-size: min(30cqh, 16cqw);
305
+ font-weight: 700;
306
+ line-height: 1;
307
+ color: var(--primary);
308
+ }
309
+
310
+ .detail-card__label {
311
+ font-size: min(16cqh, 9cqw);
312
+ color: var(--muted);
313
+ white-space: nowrap;
314
+ }
315
+
316
+ /* ══════════════════════════════════════
317
+ Detail Grid
318
+ ══════════════════════════════════════ */
319
+
320
+ .detail-grid {
321
+ --detail-cols: 2;
322
+ display: grid;
323
+ grid-template-columns: repeat(var(--detail-cols), 1fr);
324
+ grid-auto-rows: 1fr;
325
+ gap: 1.5rem;
326
+ flex: 0.6;
327
+ min-height: 0;
328
+ }
329
+
330
+ .render--comfortable .detail-grid { gap: 1rem; }
331
+ .render--compact .detail-grid { gap: 0.6rem; flex: 0.5; }
332
+
333
+ .detail-grid--portrait {
334
+ flex: 1;
335
+ min-height: 0;
336
+ }
337
+
338
+ /* ══════════════════════════════════════
339
+ Content Section (footer / secondary)
340
+ ══════════════════════════════════════ */
341
+
342
+ .content-section {
343
+ flex-shrink: 0;
344
+ display: flex;
345
+ gap: 1rem;
346
+ padding: 1.5rem 2rem;
347
+ border-radius: 1rem;
348
+ background: var(--card-bg);
349
+ border: 1px solid var(--card-border);
350
+ }
351
+
352
+ .render--comfortable .content-section { padding: 1.2rem 1.5rem; gap: 0.8rem; }
353
+ .render--compact .content-section { padding: 1rem 1.2rem; gap: 0.5rem; border-radius: 0.6rem; }
354
+ .render--minimal .content-section { padding: 0.8rem 1rem; gap: 0.4rem; }
355
+
356
+ /* ══════════════════════════════════════
357
+ Entrance Animations (driven by anim--* on .render)
358
+ ══════════════════════════════════════ */
359
+
360
+ /* Container entrance — overrides the default fade-in on .render */
361
+ .render.anim--flip { animation: bg-drift 20s ease-in-out infinite, ent-flip 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
362
+ .render.anim--fade { animation: bg-drift 20s ease-in-out infinite, ent-fade-up 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
363
+ .render.anim--scale { animation: bg-drift 20s ease-in-out infinite, ent-scale 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
364
+ .render.anim--slide { animation: bg-drift 20s ease-in-out infinite, ent-slide-left 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
365
+ .render.anim--drop { animation: bg-drift 20s ease-in-out infinite, ent-drop 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
366
+ .render.anim--fade-in { animation: bg-drift 20s ease-in-out infinite, ent-fade-in 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
367
+ .render.anim--blur { animation: bg-drift 20s ease-in-out infinite, ent-blur 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
368
+ .render.anim--zoom { animation: bg-drift 20s ease-in-out infinite, ent-zoom 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
369
+ .render.anim--bounce { animation: bg-drift 20s ease-in-out infinite, ent-bounce 0.8s cubic-bezier(0.22, 1, 0.36, 1); }
370
+ .render.anim--unfold { animation: bg-drift 20s ease-in-out infinite, ent-unfold 0.7s cubic-bezier(0.22, 1, 0.36, 1); transform-origin: top center; }
371
+ .render.anim--rise { animation: bg-drift 20s ease-in-out infinite, ent-rise 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
372
+ .render.anim--glitch { animation: bg-drift 20s ease-in-out infinite, ent-glitch 0.7s cubic-bezier(0.22, 1, 0.36, 1); }
373
+ .render.anim--none { animation: bg-drift 20s ease-in-out infinite; }
374
+
375
+ /* Shared entrance timing for child building blocks */
376
+ .render[class*="anim--"] .content-header,
377
+ .render[class*="anim--"] .content-card,
378
+ .render[class*="anim--"] .detail-card,
379
+ .render[class*="anim--"] .content-section {
380
+ opacity: 0;
381
+ animation-fill-mode: both;
382
+ animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
383
+ }
384
+
385
+ /* Stagger delays */
386
+ .render[class*="anim--"] .content-header { animation-delay: 0.05s; animation-duration: 0.6s; }
387
+ .render[class*="anim--"] .content-card { animation-delay: 0.18s; animation-duration: 0.7s; }
388
+ .render[class*="anim--"] .detail-card:nth-child(1) { animation-delay: 0.28s; animation-duration: 0.5s; }
389
+ .render[class*="anim--"] .detail-card:nth-child(2) { animation-delay: 0.35s; animation-duration: 0.5s; }
390
+ .render[class*="anim--"] .detail-card:nth-child(3) { animation-delay: 0.42s; animation-duration: 0.5s; }
391
+ .render[class*="anim--"] .detail-card:nth-child(4) { animation-delay: 0.49s; animation-duration: 0.5s; }
392
+ .render[class*="anim--"] .detail-card:nth-child(5) { animation-delay: 0.56s; animation-duration: 0.5s; }
393
+ .render[class*="anim--"] .detail-card:nth-child(6) { animation-delay: 0.63s; animation-duration: 0.5s; }
394
+ .render[class*="anim--"] .content-section { animation-delay: 0.55s; animation-duration: 0.6s; }
395
+
396
+ /* ── Flip ── */
397
+ .anim--flip .content-header,
398
+ .anim--flip .content-card,
399
+ .anim--flip .detail-card,
400
+ .anim--flip .content-section {
401
+ animation-name: ent-flip;
402
+ transform-origin: center center;
403
+ }
404
+
405
+ /* ── Fade Up ── */
406
+ .anim--fade .content-header,
407
+ .anim--fade .content-card,
408
+ .anim--fade .detail-card,
409
+ .anim--fade .content-section {
410
+ animation-name: ent-fade-up;
411
+ }
412
+
413
+ /* ── Scale ── */
414
+ .anim--scale .content-header,
415
+ .anim--scale .content-card,
416
+ .anim--scale .detail-card,
417
+ .anim--scale .content-section {
418
+ animation-name: ent-scale;
419
+ }
420
+
421
+ /* ── Slide (alternate directions) ── */
422
+ .anim--slide .content-header { animation-name: ent-slide-left; }
423
+ .anim--slide .content-card { animation-name: ent-slide-left; }
424
+ .anim--slide .detail-card:nth-child(odd) { animation-name: ent-slide-left; }
425
+ .anim--slide .detail-card:nth-child(even) { animation-name: ent-slide-right; }
426
+ .anim--slide .content-section { animation-name: ent-slide-right; }
427
+
428
+ /* ── Drop ── */
429
+ .anim--drop .content-header,
430
+ .anim--drop .content-card,
431
+ .anim--drop .detail-card,
432
+ .anim--drop .content-section {
433
+ animation-name: ent-drop;
434
+ }
435
+
436
+ /* ── Fade In ── */
437
+ .anim--fade-in .content-header,
438
+ .anim--fade-in .content-card,
439
+ .anim--fade-in .detail-card,
440
+ .anim--fade-in .content-section {
441
+ animation-name: ent-fade-in;
442
+ }
443
+
444
+ /* ── Blur ── */
445
+ .anim--blur .content-header,
446
+ .anim--blur .content-card,
447
+ .anim--blur .detail-card,
448
+ .anim--blur .content-section {
449
+ animation-name: ent-blur;
450
+ }
451
+
452
+ /* ── Zoom ── */
453
+ .anim--zoom .content-header,
454
+ .anim--zoom .content-card,
455
+ .anim--zoom .detail-card,
456
+ .anim--zoom .content-section {
457
+ animation-name: ent-zoom;
458
+ }
459
+
460
+ /* ── Bounce ── */
461
+ .anim--bounce .content-header,
462
+ .anim--bounce .content-card,
463
+ .anim--bounce .detail-card,
464
+ .anim--bounce .content-section {
465
+ animation-name: ent-bounce;
466
+ }
467
+
468
+ /* ── Unfold ── */
469
+ .anim--unfold .content-header,
470
+ .anim--unfold .content-card,
471
+ .anim--unfold .detail-card,
472
+ .anim--unfold .content-section {
473
+ animation-name: ent-unfold;
474
+ transform-origin: top center;
475
+ }
476
+
477
+ /* ── Rise ── */
478
+ .anim--rise .content-header,
479
+ .anim--rise .content-card,
480
+ .anim--rise .detail-card,
481
+ .anim--rise .content-section {
482
+ animation-name: ent-rise;
483
+ }
484
+
485
+ /* ── Glitch ── */
486
+ .anim--glitch .content-header,
487
+ .anim--glitch .content-card,
488
+ .anim--glitch .detail-card,
489
+ .anim--glitch .content-section {
490
+ animation-name: ent-glitch;
491
+ }
492
+
493
+ /* ── None (no entrance animation) ── */
494
+ .anim--none .content-header,
495
+ .anim--none .content-card,
496
+ .anim--none .detail-card,
497
+ .anim--none .content-section {
498
+ opacity: 1;
499
+ animation: none;
500
+ }
501
+
502
+ /* ══════════════════════════════════════
503
+ Text Shadow (readability)
504
+ ══════════════════════════════════════ */
505
+
506
+ .render {
507
+ text-shadow: 0 0.05rem 0.2rem rgba(0, 0, 0, 0.25);
508
+ }
509
+
510
+ /* ══════════════════════════════════════
511
+ TelemetryOS — Sweep
512
+ ══════════════════════════════════════ */
513
+
514
+ @keyframes tos-sweep-drift {
515
+ 0% { transform: translateX(-100%) skewX(-15deg); opacity: 0; }
516
+ 15% { opacity: 1; }
517
+ 85% { opacity: 1; }
518
+ 100% { transform: translateX(200%) skewX(-15deg); opacity: 0; }
519
+ }
520
+
521
+ @keyframes tos-glow-pulse {
522
+ 0%, 100% { opacity: 0.03; }
523
+ 50% { opacity: 0.07; }
524
+ }
525
+
526
+ .render--telemetryos { position: relative; }
527
+
528
+ .tos-sweep {
529
+ position: absolute;
530
+ inset: 0;
531
+ pointer-events: none;
532
+ z-index: 1;
533
+ overflow: hidden;
534
+ }
535
+
536
+ /* Diagonal light sweep */
537
+ .tos-sweep::before {
538
+ content: '';
539
+ position: absolute;
540
+ top: -20%;
541
+ left: 0;
542
+ width: 40%;
543
+ height: 140%;
544
+ background: linear-gradient(
545
+ 90deg,
546
+ transparent 0%,
547
+ rgba(255, 255, 255, 0.04) 30%,
548
+ rgba(255, 255, 255, 0.08) 50%,
549
+ rgba(255, 255, 255, 0.04) 70%,
550
+ transparent 100%
551
+ );
552
+ animation: tos-sweep-drift 8s ease-in-out infinite;
553
+ }
554
+
555
+ /* Soft ambient glow at bottom-right */
556
+ .tos-sweep::after {
557
+ content: '';
558
+ position: absolute;
559
+ bottom: -10%;
560
+ right: -10%;
561
+ width: 50%;
562
+ height: 50%;
563
+ border-radius: 50%;
564
+ background: radial-gradient(circle, rgba(0, 148, 255, 0.08) 0%, transparent 70%);
565
+ animation: tos-glow-pulse 6s ease-in-out infinite;
566
+ }
567
+
568
+ /* ══════════════════════════════════════
569
+ Solar Flare — Glitch
570
+ ══════════════════════════════════════ */
571
+
572
+ @keyframes solar-glitch-1 {
573
+ 0%, 100% { clip-path: inset(0 0 95% 0); transform: translate(0); }
574
+ 5% { clip-path: inset(20% 0 60% 0); transform: translate(-4px, 0); }
575
+ 10% { clip-path: inset(50% 0 30% 0); transform: translate(3px, 0); }
576
+ 15% { clip-path: inset(0 0 95% 0); transform: translate(0); }
577
+ 40% { clip-path: inset(70% 0 10% 0); transform: translate(2px, 0); }
578
+ 45% { clip-path: inset(10% 0 75% 0); transform: translate(-3px, 0); }
579
+ 50% { clip-path: inset(0 0 95% 0); transform: translate(0); }
580
+ 80% { clip-path: inset(40% 0 40% 0); transform: translate(4px, 0); }
581
+ 85% { clip-path: inset(85% 0 5% 0); transform: translate(-2px, 0); }
582
+ 90% { clip-path: inset(0 0 95% 0); transform: translate(0); }
583
+ }
584
+
585
+ @keyframes solar-glitch-2 {
586
+ 0%, 100% { clip-path: inset(0 0 95% 0); transform: translate(0); }
587
+ 8% { clip-path: inset(60% 0 20% 0); transform: translate(3px, 0); }
588
+ 12% { clip-path: inset(0 0 95% 0); transform: translate(0); }
589
+ 55% { clip-path: inset(30% 0 50% 0); transform: translate(-4px, 0); }
590
+ 60% { clip-path: inset(80% 0 5% 0); transform: translate(2px, 0); }
591
+ 65% { clip-path: inset(0 0 95% 0); transform: translate(0); }
592
+ 92% { clip-path: inset(5% 0 80% 0); transform: translate(-3px, 0); }
593
+ 96% { clip-path: inset(0 0 95% 0); transform: translate(0); }
594
+ }
595
+
596
+ @keyframes solar-heat-shimmer {
597
+ 0%, 100% { opacity: 0; }
598
+ 50% { opacity: 0.15; }
599
+ }
600
+
601
+ .render--solar-flare { position: relative; }
602
+
603
+ .solar-flare-bg {
604
+ position: absolute;
605
+ inset: 0;
606
+ pointer-events: none;
607
+ z-index: 1;
608
+ overflow: hidden;
609
+ }
610
+
611
+ /* Red/orange glitch slice */
612
+ .solar-flare-bg::before {
613
+ content: '';
614
+ position: absolute;
615
+ inset: 0;
616
+ background:
617
+ linear-gradient(180deg,
618
+ rgba(255, 109, 0, 0.15) 0%, rgba(191, 54, 12, 0.2) 15%,
619
+ transparent 30%, transparent 40%,
620
+ rgba(244, 81, 30, 0.18) 55%, rgba(255, 109, 0, 0.12) 70%,
621
+ transparent 85%
622
+ ),
623
+ linear-gradient(90deg,
624
+ transparent 0%, rgba(255, 109, 0, 0.06) 30%,
625
+ rgba(255, 69, 0, 0.1) 50%, rgba(255, 109, 0, 0.06) 70%,
626
+ transparent 100%
627
+ );
628
+ animation: solar-glitch-1 3s steps(2, jump-none) infinite;
629
+ }
630
+
631
+ /* Yellow/amber counter-shifted slice */
632
+ .solar-flare-bg::after {
633
+ content: '';
634
+ position: absolute;
635
+ inset: 0;
636
+ background:
637
+ linear-gradient(180deg,
638
+ transparent 0%, transparent 20%,
639
+ rgba(255, 213, 79, 0.15) 35%, rgba(255, 152, 0, 0.2) 45%,
640
+ transparent 60%, transparent 75%,
641
+ rgba(255, 109, 0, 0.12) 90%, rgba(244, 81, 30, 0.15) 100%
642
+ ),
643
+ linear-gradient(90deg,
644
+ rgba(255, 152, 0, 0.08) 0%, transparent 20%,
645
+ transparent 80%, rgba(255, 152, 0, 0.08) 100%
646
+ );
647
+ mix-blend-mode: screen;
648
+ animation: solar-glitch-2 5s steps(3, jump-none) infinite;
649
+ }
650
+
651
+ /* ══════════════════════════════════════
652
+ Arctic Aurora — Northern Lights
653
+ ══════════════════════════════════════ */
654
+
655
+ @keyframes arctic-aurora-drift {
656
+ from {
657
+ background-position: 50% 50%, 50% 50%;
658
+ }
659
+ to {
660
+ background-position: 350% 50%, 350% 50%;
661
+ }
662
+ }
663
+
664
+ .render--arctic-aurora { position: relative; }
665
+
666
+ .arctic-aurora-bg {
667
+ position: absolute;
668
+ inset: 0;
669
+ pointer-events: none;
670
+ z-index: 1;
671
+ overflow: hidden;
672
+ }
673
+
674
+ .arctic-aurora-bg::before {
675
+ content: '';
676
+ position: absolute;
677
+ inset: -40%;
678
+ width: 180%;
679
+ height: 180%;
680
+ background-image:
681
+ repeating-linear-gradient(100deg, rgba(66, 165, 245, 0.25) 0%, rgba(66, 165, 245, 0) 7%, transparent 10%, transparent 12%, rgba(66, 165, 245, 0.15) 16%),
682
+ repeating-linear-gradient(100deg, rgba(26, 35, 126, 0.4) 0%, rgba(57, 73, 171, 0.3) 7%, rgba(92, 107, 192, 0.2) 10%, rgba(66, 165, 245, 0.15) 12%, rgba(128, 222, 234, 0.2) 16%),
683
+ repeating-linear-gradient(130deg, rgba(128, 222, 234, 0.15) 0%, rgba(66, 165, 245, 0.2) 5%, transparent 8%, transparent 14%, rgba(92, 107, 192, 0.15) 18%);
684
+ background-size: 300% 200%, 200% 300%, 250% 250%;
685
+ filter: blur(12px);
686
+ opacity: 0.6;
687
+ animation: arctic-aurora-drift 60s linear infinite;
688
+ }
689
+
690
+ .arctic-aurora-bg::after {
691
+ content: '';
692
+ position: absolute;
693
+ inset: 0;
694
+ background: radial-gradient(ellipse at 50% 50%, transparent 30%, var(--bg-start, #0A1628) 80%);
695
+ }
696
+
697
+ /* ══════════════════════════════════════
698
+ Emerald Matrix — Flickering Grid (canvas)
699
+ ══════════════════════════════════════ */
700
+
701
+ .render--emerald-matrix { position: relative; }
702
+
703
+ .render--emerald-matrix .content-card {
704
+ position: relative;
705
+ overflow: hidden;
706
+ }
707
+
708
+ .render--emerald-matrix .content-card > *:not([style*="pointer-events"]) {
709
+ position: relative;
710
+ z-index: 2;
711
+ }
712
+
713
+ /* ══════════════════════════════════════
714
+ Neon Pulse — Aurora Glow
715
+ ══════════════════════════════════════ */
716
+
717
+ @keyframes neon-aurora-1 {
718
+ 0% { top: 0%; left: 50%; }
719
+ 25% { left: 0%; }
720
+ 50% { top: 100%; }
721
+ 75% { left: 100%; }
722
+ 100% { top: 0%; left: 50%; }
723
+ }
724
+
725
+ @keyframes neon-aurora-2 {
726
+ 0% { top: 50%; left: 100%; }
727
+ 25% { top: 100%; }
728
+ 50% { left: 0%; }
729
+ 75% { top: 0%; }
730
+ 100% { top: 50%; left: 100%; }
731
+ }
732
+
733
+ @keyframes neon-aurora-3 {
734
+ 0% { top: 100%; left: 50%; }
735
+ 25% { left: 100%; }
736
+ 50% { top: 0%; }
737
+ 75% { left: 0%; }
738
+ 100% { top: 100%; left: 50%; }
739
+ }
740
+
741
+ @keyframes neon-hue-shift {
742
+ to { filter: hue-rotate(360deg); }
743
+ }
744
+
745
+ .render--neon-pulse { position: relative; }
746
+
747
+ .neon-pulse-bg {
748
+ position: absolute;
749
+ inset: 0;
750
+ pointer-events: none;
751
+ z-index: 1;
11
752
  overflow: hidden;
753
+ animation: neon-hue-shift 30s linear infinite;
754
+ }
755
+
756
+ .neon-pulse-bg__orb {
757
+ position: absolute;
758
+ opacity: 0.5;
759
+ border-radius: 50%;
760
+ width: 0;
761
+ height: 0;
762
+ }
763
+
764
+ .neon-pulse-bg__orb:nth-child(1) {
765
+ box-shadow: 0 0 40vmax 40vmax rgba(0, 229, 255, 0.12);
766
+ animation: neon-aurora-1 19s linear infinite;
12
767
  }
13
768
 
769
+ .neon-pulse-bg__orb:nth-child(2) {
770
+ box-shadow: 0 0 40vmax 40vmax rgba(0, 188, 212, 0.10);
771
+ animation: neon-aurora-2 25s linear infinite;
772
+ }
773
+
774
+ .neon-pulse-bg__orb:nth-child(3) {
775
+ box-shadow: 0 0 40vmax 40vmax rgba(100, 0, 255, 0.08);
776
+ animation: neon-aurora-3 15s linear infinite;
777
+ }
778
+
779
+ /* ══════════════════════════════════════
780
+ The Matrix — "Construct"
781
+ ══════════════════════════════════════ */
782
+
783
+ @keyframes matrix-fall-slow {
784
+ from { background-position-y: 0; }
785
+ to { background-position-y: 200vh; }
786
+ }
787
+
788
+ @keyframes matrix-fall-med {
789
+ from { background-position-y: -50vh; }
790
+ to { background-position-y: 150vh; }
791
+ }
792
+
793
+ @keyframes matrix-border-glow {
794
+ 0%, 100% { border-color: rgba(0, 255, 65, 0.1); }
795
+ 50% { border-color: rgba(0, 255, 65, 0.25); }
796
+ }
797
+
798
+ .render--the-matrix { position: relative; }
799
+
800
+ /* Layer 1 — slow falling gradient columns */
801
+ .render--the-matrix::before {
802
+ content: '';
803
+ position: absolute;
804
+ inset: 0;
805
+ pointer-events: none;
806
+ z-index: 0;
807
+ background:
808
+ linear-gradient(180deg, rgba(0,255,65,0.18) 0%, rgba(0,255,65,0) 30%) 8% 0 / 2px 35vh no-repeat,
809
+ linear-gradient(180deg, rgba(0,255,65,0.12) 0%, rgba(0,255,65,0) 40%) 15% 0 / 1px 25vh no-repeat,
810
+ linear-gradient(180deg, rgba(0,255,65,0.20) 0%, rgba(0,255,65,0) 25%) 23% 0 / 2px 45vh no-repeat,
811
+ linear-gradient(180deg, rgba(0,255,65,0.10) 0%, rgba(0,255,65,0) 35%) 31% 0 / 1px 30vh no-repeat,
812
+ linear-gradient(180deg, rgba(0,255,65,0.15) 0%, rgba(0,255,65,0) 30%) 42% 0 / 2px 40vh no-repeat,
813
+ linear-gradient(180deg, rgba(0,255,65,0.18) 0%, rgba(0,255,65,0) 28%) 55% 0 / 1px 38vh no-repeat,
814
+ linear-gradient(180deg, rgba(0,255,65,0.12) 0%, rgba(0,255,65,0) 35%) 64% 0 / 2px 28vh no-repeat,
815
+ linear-gradient(180deg, rgba(0,255,65,0.22) 0%, rgba(0,255,65,0) 22%) 73% 0 / 1px 50vh no-repeat,
816
+ linear-gradient(180deg, rgba(0,255,65,0.14) 0%, rgba(0,255,65,0) 32%) 82% 0 / 2px 32vh no-repeat,
817
+ linear-gradient(180deg, rgba(0,255,65,0.16) 0%, rgba(0,255,65,0) 30%) 91% 0 / 1px 36vh no-repeat;
818
+ background-repeat: repeat-y;
819
+ animation: matrix-fall-slow 6s linear infinite;
820
+ }
821
+
822
+ .matrix-scanlines {
823
+ position: absolute;
824
+ inset: 0;
825
+ pointer-events: none;
826
+ z-index: 1;
827
+ overflow: hidden;
828
+ }
829
+
830
+ /* Layer 2 — faster falling columns, offset positions */
831
+ .matrix-scanlines::before {
832
+ content: '';
833
+ position: absolute;
834
+ inset: 0;
835
+ background:
836
+ linear-gradient(180deg, rgba(0,255,65,0.14) 0%, rgba(0,255,65,0) 28%) 5% 0 / 1px 32vh no-repeat,
837
+ linear-gradient(180deg, rgba(0,255,65,0.18) 0%, rgba(0,255,65,0) 25%) 19% 0 / 2px 42vh no-repeat,
838
+ linear-gradient(180deg, rgba(0,255,65,0.10) 0%, rgba(0,255,65,0) 38%) 28% 0 / 1px 22vh no-repeat,
839
+ linear-gradient(180deg, rgba(0,255,65,0.16) 0%, rgba(0,255,65,0) 30%) 37% 0 / 2px 35vh no-repeat,
840
+ linear-gradient(180deg, rgba(0,255,65,0.20) 0%, rgba(0,255,65,0) 22%) 48% 0 / 1px 48vh no-repeat,
841
+ linear-gradient(180deg, rgba(0,255,65,0.12) 0%, rgba(0,255,65,0) 34%) 59% 0 / 2px 26vh no-repeat,
842
+ linear-gradient(180deg, rgba(0,255,65,0.16) 0%, rgba(0,255,65,0) 28%) 68% 0 / 1px 38vh no-repeat,
843
+ linear-gradient(180deg, rgba(0,255,65,0.14) 0%, rgba(0,255,65,0) 32%) 78% 0 / 2px 30vh no-repeat,
844
+ linear-gradient(180deg, rgba(0,255,65,0.18) 0%, rgba(0,255,65,0) 26%) 87% 0 / 1px 44vh no-repeat,
845
+ linear-gradient(180deg, rgba(0,255,65,0.10) 0%, rgba(0,255,65,0) 36%) 95% 0 / 2px 24vh no-repeat;
846
+ background-repeat: repeat-y;
847
+ animation: matrix-fall-med 4s linear infinite;
848
+ }
849
+
850
+ /* Scanline overlay */
851
+ .matrix-scanlines::after {
852
+ content: '';
853
+ position: absolute;
854
+ inset: 0;
855
+ background: repeating-linear-gradient(
856
+ 0deg, transparent 0px, transparent 3px,
857
+ rgba(0, 255, 65, 0.025) 3px, rgba(0, 255, 65, 0.025) 4px
858
+ );
859
+ }
860
+
861
+ .render--the-matrix .content-card {
862
+ border: 1px solid rgba(0, 255, 65, 0.15);
863
+ border-radius: 0;
864
+ animation: ent-scale 0.4s ease-out 0.15s both, matrix-border-glow 4s ease-in-out infinite, bg-drift 15s ease-in-out infinite;
865
+ }
866
+
867
+ .render--the-matrix .detail-card {
868
+ border: 1px solid rgba(0, 255, 65, 0.08);
869
+ background: rgba(0, 255, 65, 0.02);
870
+ border-radius: 0;
871
+ }
872
+
873
+ .render--the-matrix .content-section { border: 1px solid rgba(0, 255, 65, 0.12); border-radius: 0; }
874
+
875
+ .matrix-glow {
876
+ text-shadow: 0 0 1rem rgba(0, 255, 65, 0.6), 0 0 3rem rgba(0, 255, 65, 0.3);
877
+ animation: breathe-glow 3s ease-in-out infinite;
878
+ }
879
+
880
+ /* ══════════════════════════════════════
881
+ Plain Light / Plain Dark — no chrome
882
+ ══════════════════════════════════════ */
883
+
884
+ .render--plain {
885
+ animation: none;
886
+ text-shadow: none;
887
+ }
888
+
889
+ .render--plain .content-card {
890
+ background: transparent;
891
+ box-shadow: none;
892
+ border: none;
893
+ border-radius: 0;
894
+ }
895
+
896
+ .render--plain .detail-card {
897
+ background: transparent;
898
+ border: none;
899
+ box-shadow: none;
900
+ }
901
+
902
+ .render--plain .content-section {
903
+ background: transparent;
904
+ border: none;
905
+ box-shadow: none;
906
+ }
907
+
908
+ /* ══════════════════════════════════════
909
+ Welcome Screen (default template content)
910
+ ══════════════════════════════════════ */
911
+
14
912
  .render__logo {
913
+ position: relative;
914
+ z-index: 2;
15
915
  width: 30rem;
16
916
  max-width: 50%;
17
917
  }
18
918
 
919
+ .render--comfortable .render__logo { width: 25rem; }
920
+ .render--compact .render__logo { width: 20rem; }
921
+ .render--minimal .render__logo { width: 15rem; }
922
+
19
923
  .render__hero {
924
+ position: relative;
925
+ z-index: 2;
20
926
  display: flex;
21
927
  flex-direction: column;
22
928
  align-items: center;
23
929
  gap: 2rem;
24
930
  }
25
931
 
932
+ .render--compact .render__hero,
933
+ .render--minimal .render__hero {
934
+ gap: 1rem;
935
+ }
936
+
26
937
  .render__hero-title {
27
938
  font-size: 5rem;
28
939
  font-weight: 600;
29
940
  text-align: center;
30
941
  }
31
942
 
943
+ .render--comfortable .render__hero-title { font-size: 4rem; }
944
+ .render--compact .render__hero-title { font-size: 3rem; }
945
+ .render--minimal .render__hero-title { font-size: 2.5rem; }
946
+
32
947
  .render__hero-subtitle {
33
948
  font-size: 3rem;
34
949
  text-align: center;
950
+ color: var(--secondary);
35
951
  }
36
952
 
953
+ .render--comfortable .render__hero-subtitle { font-size: 2.5rem; }
954
+ .render--compact .render__hero-subtitle { font-size: 2rem; }
955
+ .render--minimal .render__hero-subtitle { font-size: 1.5rem; }
956
+
37
957
  .render__docs-information {
958
+ position: relative;
959
+ z-index: 2;
38
960
  display: flex;
39
961
  flex-direction: column;
40
962
  align-items: center;
41
963
  gap: 2rem;
42
964
  }
43
965
 
966
+ .render--compact .render__docs-information,
967
+ .render--minimal .render__docs-information {
968
+ gap: 1rem;
969
+ }
970
+
44
971
  .render__docs-information-title {
45
972
  font-size: 2rem;
46
973
  font-weight: 600;
@@ -51,17 +978,28 @@
51
978
  font-size: 2rem;
52
979
  max-width: 60rem;
53
980
  text-align: center;
981
+ color: var(--secondary);
54
982
  }
55
983
 
984
+ .render--comfortable .render__docs-information-title,
985
+ .render--comfortable .render__docs-information-text { font-size: 1.6rem; }
986
+ .render--compact .render__docs-information-title,
987
+ .render--compact .render__docs-information-text { font-size: 1.4rem; }
988
+
56
989
  .render__docs-information-button {
57
990
  display: flex;
58
991
  align-items: center;
59
- background: rgb(248, 180, 53);
992
+ background: var(--accent);
60
993
  text-transform: uppercase;
61
994
  font-size: 2rem;
62
995
  text-decoration: none;
63
- color: black;
996
+ color: #000;
64
997
  font-weight: bold;
65
998
  padding: 1rem 2rem;
66
999
  border-radius: 1rem;
67
1000
  }
1001
+
1002
+ .render--compact .render__docs-information-button {
1003
+ font-size: 1.6rem;
1004
+ padding: 0.8rem 1.5rem;
1005
+ }