@fjell/registry 4.4.7 → 4.4.9

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 (54) hide show
  1. package/README.md +81 -4
  2. package/dist/Registry.cjs +20 -1
  3. package/dist/Registry.js +20 -1
  4. package/dist/RegistryHub.cjs +17 -1
  5. package/dist/RegistryHub.js +17 -1
  6. package/dist/index.cjs +35 -0
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/types.d.ts +15 -0
  9. package/docs/README.md +74 -0
  10. package/docs/index.html +17 -0
  11. package/docs/memory-data/scaling-10-instances.json +206 -206
  12. package/docs/memory-data/scaling-100-instances.json +206 -206
  13. package/docs/memory-data/scaling-1000-instances.json +108 -108
  14. package/docs/memory-data/scaling-10000-instances.json +49 -49
  15. package/docs/memory-data/scaling-20-instances.json +208 -208
  16. package/docs/memory-data/scaling-200-instances.json +201 -201
  17. package/docs/memory-data/scaling-2000-instances.json +107 -107
  18. package/docs/memory-data/scaling-50-instances.json +206 -206
  19. package/docs/memory-data/scaling-500-instances.json +108 -108
  20. package/docs/memory-data/scaling-5000-instances.json +49 -49
  21. package/docs/memory-overhead.svg +17 -17
  22. package/docs/memory.md +111 -111
  23. package/docs/package.json +35 -0
  24. package/docs/public/README.md +623 -0
  25. package/docs/public/TIMING_NODE_OPTIMIZATION.md +207 -0
  26. package/docs/public/examples/coordinates-example.ts +253 -0
  27. package/docs/public/examples/multi-level-keys.ts +374 -0
  28. package/docs/public/examples/registry-hub-coordinates-example.ts +370 -0
  29. package/docs/public/examples/registry-hub-types.ts +437 -0
  30. package/docs/public/examples/simple-example.ts +250 -0
  31. package/docs/public/examples-README.md +222 -0
  32. package/docs/public/fjell-icon.svg +1 -0
  33. package/docs/public/icon.png +0 -0
  34. package/docs/public/icon2.png +0 -0
  35. package/docs/public/memory-overhead.svg +120 -0
  36. package/docs/public/memory.md +430 -0
  37. package/docs/public/pano.png +0 -0
  38. package/docs/public/pano2.png +0 -0
  39. package/docs/public/timing-range.svg +176 -0
  40. package/docs/public/timing.md +483 -0
  41. package/docs/src/App.css +1175 -0
  42. package/docs/src/App.test.tsx +50 -0
  43. package/docs/src/App.tsx +583 -0
  44. package/docs/src/index.css +40 -0
  45. package/docs/src/main.tsx +10 -0
  46. package/docs/src/test/setup.ts +1 -0
  47. package/docs/timing-range.svg +41 -41
  48. package/docs/timing.md +101 -101
  49. package/docs/tsconfig.node.json +13 -0
  50. package/docs/vitest.config.ts +14 -0
  51. package/examples/README.md +35 -0
  52. package/examples/coordinates-example.ts +253 -0
  53. package/examples/registry-hub-coordinates-example.ts +370 -0
  54. package/package.json +1 -1
@@ -0,0 +1,1175 @@
1
+ :root {
2
+ --color-primary: #2D3748;
3
+ --color-secondary: #4A5568;
4
+ --color-accent: #667EEA;
5
+ --color-accent-light: #764BA2;
6
+ --color-background: #FAFAFA;
7
+ --color-surface: #FFFFFF;
8
+ --color-border: #E2E8F0;
9
+ --color-text: #2D3748;
10
+ --color-text-light: #718096;
11
+ --color-text-muted: #A0AEC0;
12
+
13
+ --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
14
+ --gradient-text: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
15
+ --gradient-subtle: linear-gradient(135deg, #fdfbfb 0%, #ebedee 100%);
16
+ --gradient-mystery: linear-gradient(135deg, rgba(0, 0, 0, 0.7) 0%, rgba(45, 55, 72, 0.8) 50%, rgba(0, 0, 0, 0.6) 100%);
17
+
18
+ --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
19
+ --font-display: 'SF Pro Display', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
20
+
21
+ --sidebar-width: 320px;
22
+ --header-height: 160px;
23
+ --content-max-width: 1000px;
24
+
25
+ --transition-smooth: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
26
+ --transition-fast: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
27
+ --transition-mystery: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
28
+ }
29
+
30
+ * {
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ html {
35
+ scroll-behavior: smooth;
36
+ }
37
+
38
+ body {
39
+ margin: 0;
40
+ padding: 0;
41
+ font-family: var(--font-primary);
42
+ background: var(--color-background);
43
+ color: var(--color-text);
44
+ line-height: 1.7;
45
+ font-weight: 400;
46
+ -webkit-font-smoothing: antialiased;
47
+ -moz-osx-font-smoothing: grayscale;
48
+ overflow-x: hidden;
49
+ }
50
+
51
+ .app {
52
+ min-height: 100vh;
53
+ display: flex;
54
+ flex-direction: column;
55
+ position: relative;
56
+ }
57
+
58
+ /* ===== ANIMATED BACKGROUND ===== */
59
+ @keyframes pan-landscape {
60
+ 0% {
61
+ background-position: center 0%;
62
+ }
63
+
64
+ 100% {
65
+ background-position: center 15%;
66
+ }
67
+ }
68
+
69
+ @keyframes mystery-fade-in {
70
+ 0% {
71
+ opacity: 0;
72
+ transform: translateY(30px);
73
+ }
74
+
75
+ 100% {
76
+ opacity: 1;
77
+ transform: translateY(0);
78
+ }
79
+ }
80
+
81
+ @keyframes mystery-glow {
82
+
83
+ 0%,
84
+ 100% {
85
+ box-shadow: 0 0 20px rgba(102, 126, 234, 0.3);
86
+ }
87
+
88
+ 50% {
89
+ box-shadow: 0 0 40px rgba(102, 126, 234, 0.6);
90
+ }
91
+ }
92
+
93
+ /* ===== HEADER ===== */
94
+ .header {
95
+ position: fixed;
96
+ top: 0;
97
+ left: 0;
98
+ right: 0;
99
+ height: var(--header-height);
100
+ background-image: url('/pano.png');
101
+ background-size: cover;
102
+ background-position: center 0%;
103
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
104
+ z-index: 1000;
105
+ transition: var(--transition-smooth);
106
+ overflow: hidden;
107
+ animation: pan-landscape 60s ease-in-out infinite alternate;
108
+ }
109
+
110
+ .header::before {
111
+ content: '';
112
+ position: absolute;
113
+ top: 0;
114
+ left: 0;
115
+ right: 0;
116
+ bottom: 0;
117
+ background: var(--gradient-mystery);
118
+ backdrop-filter: blur(2px);
119
+ z-index: 1;
120
+ }
121
+
122
+ .header-container {
123
+ height: 100%;
124
+ max-width: 1400px;
125
+ margin: 0 auto;
126
+ padding: 0 2rem;
127
+ display: flex;
128
+ align-items: center;
129
+ justify-content: space-between;
130
+ position: relative;
131
+ z-index: 2;
132
+ }
133
+
134
+ .brand {
135
+ display: flex;
136
+ flex-direction: column;
137
+ gap: 0.5rem;
138
+ animation: mystery-fade-in 1.2s ease-out 0.3s both;
139
+ margin-left: 1rem;
140
+ }
141
+
142
+ .brand-title {
143
+ margin: 0;
144
+ font-family: var(--font-display);
145
+ font-size: 2.5rem;
146
+ font-weight: 700;
147
+ letter-spacing: -0.02em;
148
+ line-height: 1.1;
149
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
150
+ }
151
+
152
+ .brand-fjell {
153
+ color: rgba(255, 255, 255, 0.95);
154
+ }
155
+
156
+ .brand-registry {
157
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 50%, #4facfe 100%);
158
+ -webkit-background-clip: text;
159
+ -webkit-text-fill-color: transparent;
160
+ background-clip: text;
161
+ filter: drop-shadow(0 0 10px rgba(240, 147, 251, 0.5));
162
+ }
163
+
164
+ .brand-tagline {
165
+ margin: 0;
166
+ font-size: 1rem;
167
+ color: rgba(255, 255, 255, 0.8);
168
+ font-weight: 400;
169
+ letter-spacing: 0.02em;
170
+ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
171
+ }
172
+
173
+ .gradient-text {
174
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 50%, #4facfe 100%);
175
+ -webkit-background-clip: text;
176
+ -webkit-text-fill-color: transparent;
177
+ background-clip: text;
178
+ font-weight: 600;
179
+ filter: drop-shadow(0 0 8px rgba(240, 147, 251, 0.4));
180
+ }
181
+
182
+ .header-actions {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: 1.5rem;
186
+ animation: mystery-fade-in 1.2s ease-out 0.6s both;
187
+ }
188
+
189
+ .header-link {
190
+ padding: 0.75rem 1.5rem;
191
+ text-decoration: none;
192
+ color: rgba(255, 255, 255, 0.9);
193
+ font-weight: 500;
194
+ font-size: 0.875rem;
195
+ border: 1px solid rgba(255, 255, 255, 0.3);
196
+ border-radius: 2rem;
197
+ transition: var(--transition-fast);
198
+ letter-spacing: 0.01em;
199
+ backdrop-filter: blur(10px);
200
+ background: rgba(255, 255, 255, 0.1);
201
+ }
202
+
203
+ .header-link:hover {
204
+ border-color: rgba(240, 147, 251, 0.8);
205
+ color: #f093fb;
206
+ background: rgba(255, 255, 255, 0.9);
207
+ transform: translateY(-2px);
208
+ box-shadow: 0 8px 32px rgba(240, 147, 251, 0.3);
209
+ }
210
+
211
+ .menu-toggle {
212
+ display: none;
213
+ flex-direction: column;
214
+ gap: 4px;
215
+ background: none;
216
+ border: none;
217
+ cursor: pointer;
218
+ padding: 0.5rem;
219
+ }
220
+
221
+ .menu-line {
222
+ width: 20px;
223
+ height: 2px;
224
+ background: rgba(255, 255, 255, 0.9);
225
+ border-radius: 1px;
226
+ transition: var(--transition-fast);
227
+ }
228
+
229
+ /* ===== LAYOUT ===== */
230
+ .layout {
231
+ display: flex;
232
+ margin-top: var(--header-height);
233
+ min-height: calc(100vh - var(--header-height));
234
+ }
235
+
236
+ /* ===== SIDEBAR ===== */
237
+ .sidebar {
238
+ width: var(--sidebar-width);
239
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.95) 0%, rgba(250, 250, 250, 0.9) 100%);
240
+ backdrop-filter: blur(20px);
241
+ border-right: 1px solid rgba(226, 232, 240, 0.5);
242
+ position: fixed;
243
+ left: 0;
244
+ top: var(--header-height);
245
+ bottom: 0;
246
+ overflow-y: auto;
247
+ z-index: 100;
248
+ transform: translateX(0);
249
+ transition: var(--transition-smooth);
250
+ }
251
+
252
+ .nav-content {
253
+ padding: 3rem 2rem;
254
+ height: 100%;
255
+ position: relative;
256
+ }
257
+
258
+ /* ===== ARTISTIC LOGO PLACEMENT ===== */
259
+ .fjell-logo {
260
+ position: absolute;
261
+ bottom: 2rem;
262
+ left: 50%;
263
+ transform: translateX(-50%);
264
+ width: 80px;
265
+ height: 80px;
266
+ opacity: 0.15;
267
+ transition: var(--transition-mystery);
268
+ filter: grayscale(1) brightness(0.8);
269
+ animation: mystery-glow 8s ease-in-out infinite;
270
+ object-fit: contain;
271
+ z-index: 10;
272
+ border-radius: 8px;
273
+ }
274
+
275
+ .fjell-logo:hover {
276
+ opacity: 0.4;
277
+ transform: translateX(-50%) scale(1.1);
278
+ filter: grayscale(0) brightness(1.2);
279
+ }
280
+
281
+ .nav-header {
282
+ margin-bottom: 3rem;
283
+ animation: mystery-fade-in 1s ease-out 0.8s both;
284
+ }
285
+
286
+ .nav-title {
287
+ margin: 0 0 0.5rem 0;
288
+ font-family: var(--font-display);
289
+ font-size: 1.25rem;
290
+ font-weight: 600;
291
+ color: var(--color-text);
292
+ letter-spacing: -0.01em;
293
+ }
294
+
295
+ .nav-subtitle {
296
+ margin: 0;
297
+ font-size: 0.875rem;
298
+ color: var(--color-text-light);
299
+ font-weight: 400;
300
+ }
301
+
302
+ .nav-sections {
303
+ display: flex;
304
+ flex-direction: column;
305
+ gap: 0.5rem;
306
+ animation: mystery-fade-in 1s ease-out 1s both;
307
+ }
308
+
309
+ .nav-item {
310
+ display: flex;
311
+ align-items: center;
312
+ gap: 1rem;
313
+ padding: 1.25rem;
314
+ background: none;
315
+ border: none;
316
+ border-radius: 1rem;
317
+ cursor: pointer;
318
+ transition: var(--transition-fast);
319
+ text-align: left;
320
+ width: 100%;
321
+ }
322
+
323
+ .nav-item:hover {
324
+ background: var(--gradient-subtle);
325
+ transform: translateX(4px);
326
+ }
327
+
328
+ .nav-item.active {
329
+ background: var(--gradient-primary);
330
+ color: white;
331
+ transform: translateX(8px);
332
+ box-shadow: 0 8px 32px rgba(102, 126, 234, 0.3);
333
+ }
334
+
335
+
336
+
337
+ .nav-item-content {
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 0.25rem;
341
+ }
342
+
343
+ .nav-item-title {
344
+ font-weight: 600;
345
+ font-size: 0.95rem;
346
+ color: var(--color-text);
347
+ letter-spacing: -0.01em;
348
+ }
349
+
350
+ .nav-item.active .nav-item-title {
351
+ color: white;
352
+ }
353
+
354
+ .nav-item-subtitle {
355
+ font-size: 0.8rem;
356
+ color: var(--color-text-light);
357
+ font-weight: 400;
358
+ line-height: 1.4;
359
+ }
360
+
361
+ .nav-item.active .nav-item-subtitle {
362
+ color: rgba(255, 255, 255, 0.8);
363
+ }
364
+
365
+ /* ===== MAIN CONTENT ===== */
366
+ .main {
367
+ flex: 1;
368
+ margin-left: var(--sidebar-width);
369
+ background: linear-gradient(135deg, #fdfbfb 0%, #ebedee 100%);
370
+ animation: mystery-fade-in 1.2s ease-out 1.2s both;
371
+ }
372
+
373
+ .content-container {
374
+ max-width: var(--content-max-width);
375
+ margin: 0 auto;
376
+ padding: 4rem 2rem;
377
+ }
378
+
379
+ .content-wrapper {
380
+ display: flex;
381
+ flex-direction: column;
382
+ gap: 3rem;
383
+ }
384
+
385
+ .content-header {
386
+ display: flex;
387
+ flex-direction: column;
388
+ gap: 1rem;
389
+ margin-bottom: 2rem;
390
+ }
391
+
392
+ .content-header {
393
+ margin-bottom: 1rem;
394
+ }
395
+
396
+ .breadcrumb {
397
+ display: flex;
398
+ align-items: center;
399
+ gap: 0.5rem;
400
+ font-size: 0.875rem;
401
+ }
402
+
403
+ .section-header {
404
+ text-align: right;
405
+ float: right;
406
+ margin-top: -2rem;
407
+ margin-bottom: 1rem;
408
+ }
409
+
410
+ .section-header .content-title {
411
+ margin: 0;
412
+ font-size: 1.5rem;
413
+ font-weight: 600;
414
+ color: var(--color-primary);
415
+ }
416
+
417
+ .section-header .content-subtitle {
418
+ margin: 0.25rem 0 0 0;
419
+ font-size: 0.875rem;
420
+ color: var(--color-text-muted);
421
+ }
422
+
423
+ .breadcrumb-home {
424
+ color: var(--color-text-muted);
425
+ opacity: 0.7;
426
+ }
427
+
428
+ .breadcrumb-separator {
429
+ color: var(--color-text-muted);
430
+ opacity: 0.5;
431
+ }
432
+
433
+ .breadcrumb-current {
434
+ color: var(--color-primary);
435
+ font-weight: 600;
436
+ }
437
+
438
+ .content-title {
439
+ margin: 0;
440
+ font-family: var(--font-display);
441
+ font-size: 3rem;
442
+ font-weight: 700;
443
+ letter-spacing: -0.03em;
444
+ line-height: 1.1;
445
+ background: var(--gradient-text);
446
+ -webkit-background-clip: text;
447
+ -webkit-text-fill-color: transparent;
448
+ background-clip: text;
449
+ }
450
+
451
+ .content-subtitle {
452
+ margin: 0;
453
+ font-size: 1.125rem;
454
+ color: var(--color-text-light);
455
+ font-weight: 400;
456
+ letter-spacing: 0.01em;
457
+ line-height: 1.6;
458
+ }
459
+
460
+ /* ===== CONTENT STYLES ===== */
461
+ .content {
462
+ background: var(--color-surface);
463
+ border-radius: 1.5rem;
464
+ padding: 3rem;
465
+ border: 1px solid var(--color-border);
466
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
467
+ }
468
+
469
+ .content-h1 {
470
+ margin: 0 0 2rem 0;
471
+ font-family: var(--font-display);
472
+ font-size: 2.25rem;
473
+ font-weight: 700;
474
+ letter-spacing: -0.02em;
475
+ color: var(--color-text);
476
+ line-height: 1.2;
477
+ border-bottom: 1px solid var(--color-border);
478
+ padding-bottom: 1rem;
479
+ }
480
+
481
+ .content-h2 {
482
+ margin: 3rem 0 1.5rem 0;
483
+ font-family: var(--font-display);
484
+ font-size: 1.75rem;
485
+ font-weight: 600;
486
+ letter-spacing: -0.01em;
487
+ color: var(--color-text);
488
+ line-height: 1.3;
489
+ }
490
+
491
+ .content-h3 {
492
+ margin: 2rem 0 1rem 0;
493
+ font-size: 1.25rem;
494
+ font-weight: 600;
495
+ color: var(--color-text);
496
+ line-height: 1.4;
497
+ }
498
+
499
+ .content h4 {
500
+ margin: 1.5rem 0 0.75rem 0;
501
+ font-size: 1.125rem;
502
+ font-weight: 600;
503
+ color: var(--color-text);
504
+ }
505
+
506
+ .content p {
507
+ margin: 1.5rem 0;
508
+ line-height: 1.7;
509
+ color: var(--color-text);
510
+ }
511
+
512
+ .content ul,
513
+ .content ol {
514
+ margin: 1.5rem 0;
515
+ padding-left: 2rem;
516
+ }
517
+
518
+ .content li {
519
+ margin: 0.75rem 0;
520
+ line-height: 1.7;
521
+ }
522
+
523
+ .content blockquote {
524
+ margin: 2rem 0;
525
+ padding: 1.5rem 2rem;
526
+ border-left: 4px solid var(--color-accent);
527
+ background: var(--gradient-subtle);
528
+ border-radius: 0 1rem 1rem 0;
529
+ color: var(--color-text);
530
+ font-style: italic;
531
+ }
532
+
533
+ .content table {
534
+ width: 100%;
535
+ border-collapse: collapse;
536
+ margin: 2rem 0;
537
+ border-radius: 1rem;
538
+ overflow: hidden;
539
+ border: 1px solid var(--color-border);
540
+ }
541
+
542
+ .content th,
543
+ .content td {
544
+ padding: 1rem 1.5rem;
545
+ text-align: left;
546
+ border-bottom: 1px solid var(--color-border);
547
+ }
548
+
549
+ .content th {
550
+ background: var(--gradient-subtle);
551
+ font-weight: 600;
552
+ color: var(--color-text);
553
+ font-size: 0.9rem;
554
+ }
555
+
556
+ .content tr:last-child td {
557
+ border-bottom: none;
558
+ }
559
+
560
+ .content a {
561
+ color: var(--color-accent);
562
+ text-decoration: none;
563
+ font-weight: 500;
564
+ border-bottom: 1px solid transparent;
565
+ transition: var(--transition-fast);
566
+ }
567
+
568
+ .content a:hover {
569
+ border-bottom-color: var(--color-accent);
570
+ }
571
+
572
+ .content code {
573
+ background: var(--gradient-subtle);
574
+ color: var(--color-text);
575
+ padding: 0.25rem 0.5rem;
576
+ border-radius: 0.375rem;
577
+ font-size: 0.875rem;
578
+ font-family: 'SF Mono', 'Monaco', 'Cascadia Code', 'Roboto Mono', monospace;
579
+ font-weight: 500;
580
+ }
581
+
582
+ .content pre {
583
+ margin: 2rem 0;
584
+ border-radius: 1rem;
585
+ overflow: hidden;
586
+ border: 1px solid var(--color-border);
587
+ }
588
+
589
+ .content pre code {
590
+ background: none;
591
+ padding: 0;
592
+ font-size: 0.875rem;
593
+ font-weight: 400;
594
+ }
595
+
596
+ /* ===== NAVIGATION SUGGESTIONS ===== */
597
+ .content-navigation {
598
+ display: flex;
599
+ justify-content: flex-end;
600
+ margin-top: 3rem;
601
+ }
602
+
603
+ .nav-suggestion {
604
+ display: flex;
605
+ flex-direction: column;
606
+ align-items: flex-end;
607
+ gap: 0.25rem;
608
+ padding: 1rem 1.5rem;
609
+ background: var(--gradient-primary);
610
+ color: white;
611
+ border: none;
612
+ border-radius: 1rem;
613
+ cursor: pointer;
614
+ transition: var(--transition-fast);
615
+ text-align: right;
616
+ }
617
+
618
+ .nav-suggestion:hover {
619
+ transform: translateY(-2px);
620
+ box-shadow: 0 8px 32px rgba(102, 126, 234, 0.3);
621
+ }
622
+
623
+ .nav-suggestion-label {
624
+ font-size: 0.8rem;
625
+ opacity: 0.8;
626
+ font-weight: 500;
627
+ letter-spacing: 0.05em;
628
+ text-transform: uppercase;
629
+ }
630
+
631
+ .nav-suggestion-title {
632
+ font-size: 1rem;
633
+ font-weight: 600;
634
+ letter-spacing: -0.01em;
635
+ }
636
+
637
+ /* ===== LOADING ===== */
638
+ .loading {
639
+ display: flex;
640
+ flex-direction: column;
641
+ align-items: center;
642
+ justify-content: center;
643
+ padding: 8rem 0;
644
+ background: radial-gradient(circle at center, rgba(102, 126, 234, 0.05) 0%, transparent 70%);
645
+ }
646
+
647
+ .loading-animation {
648
+ display: flex;
649
+ gap: 0.75rem;
650
+ margin-bottom: 2rem;
651
+ position: relative;
652
+ }
653
+
654
+ .loading-dot {
655
+ width: 12px;
656
+ height: 12px;
657
+ border-radius: 50%;
658
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
659
+ animation: loading-mystery 2s ease-in-out infinite both;
660
+ box-shadow: 0 0 20px rgba(102, 126, 234, 0.4);
661
+ }
662
+
663
+ .loading-dot:nth-child(1) {
664
+ animation-delay: -0.4s;
665
+ }
666
+
667
+ .loading-dot:nth-child(2) {
668
+ animation-delay: -0.2s;
669
+ }
670
+
671
+ .loading-dot:nth-child(3) {
672
+ animation-delay: 0s;
673
+ }
674
+
675
+ @keyframes loading-mystery {
676
+
677
+ 0%,
678
+ 80%,
679
+ 100% {
680
+ transform: scale(0.6) translateY(0);
681
+ opacity: 0.3;
682
+ box-shadow: 0 0 10px rgba(102, 126, 234, 0.2);
683
+ }
684
+
685
+ 40% {
686
+ transform: scale(1.2) translateY(-20px);
687
+ opacity: 1;
688
+ box-shadow: 0 0 30px rgba(240, 147, 251, 0.6);
689
+ }
690
+ }
691
+
692
+ .loading-text {
693
+ font-size: 1rem;
694
+ color: var(--color-text-light);
695
+ font-weight: 500;
696
+ letter-spacing: 0.05em;
697
+ text-transform: uppercase;
698
+ opacity: 0.7;
699
+ animation: mystery-fade-in 2s ease-out 0.5s both;
700
+ }
701
+
702
+ .loading-text::after {
703
+ content: '...';
704
+ animation: loading-dots 1.5s steps(4, end) infinite;
705
+ }
706
+
707
+ @keyframes loading-dots {
708
+
709
+ 0%,
710
+ 20% {
711
+ color: transparent;
712
+ text-shadow: .25em 0 0 transparent, .5em 0 0 transparent;
713
+ }
714
+
715
+ 40% {
716
+ color: var(--color-text-light);
717
+ text-shadow: .25em 0 0 transparent, .5em 0 0 transparent;
718
+ }
719
+
720
+ 60% {
721
+ text-shadow: .25em 0 0 var(--color-text-light), .5em 0 0 transparent;
722
+ }
723
+
724
+ 80%,
725
+ 100% {
726
+ text-shadow: .25em 0 0 var(--color-text-light), .5em 0 0 var(--color-text-light);
727
+ }
728
+ }
729
+
730
+ /* ===== FOOTER ===== */
731
+ .footer {
732
+ background: var(--color-surface);
733
+ border-top: 1px solid var(--color-border);
734
+ margin-top: auto;
735
+ }
736
+
737
+ .footer-container {
738
+ max-width: 1400px;
739
+ margin: 0 auto;
740
+ padding: 2rem;
741
+ }
742
+
743
+ .footer-content {
744
+ display: flex;
745
+ flex-direction: column;
746
+ align-items: center;
747
+ gap: 0.5rem;
748
+ text-align: center;
749
+ }
750
+
751
+ .footer-text {
752
+ margin: 0;
753
+ font-size: 0.9rem;
754
+ color: var(--color-text);
755
+ font-weight: 500;
756
+ }
757
+
758
+ .footer-license {
759
+ margin: 0;
760
+ font-size: 0.8rem;
761
+ color: var(--color-text-light);
762
+ font-weight: 400;
763
+ }
764
+
765
+ /* ===== RESPONSIVE ===== */
766
+ @media (max-width: 1024px) {
767
+ :root {
768
+ --sidebar-width: 280px;
769
+ --content-max-width: 900px;
770
+ --header-height: 140px;
771
+ }
772
+
773
+ .content-container {
774
+ padding: 3rem 1.5rem;
775
+ }
776
+
777
+ .content {
778
+ padding: 2.5rem;
779
+ }
780
+
781
+ .fjell-logo {
782
+ width: 60px;
783
+ height: 60px;
784
+ }
785
+ }
786
+
787
+ @media (max-width: 768px) {
788
+ .menu-toggle {
789
+ display: flex;
790
+ }
791
+
792
+ .header-link {
793
+ display: none;
794
+ }
795
+
796
+ .sidebar {
797
+ transform: translateX(-100%);
798
+ }
799
+
800
+ .sidebar-open {
801
+ transform: translateX(0);
802
+ }
803
+
804
+ .main {
805
+ margin-left: 0;
806
+ }
807
+
808
+ .header-container {
809
+ padding: 0 2rem;
810
+ }
811
+
812
+ .brand {
813
+ margin-left: 0.5rem;
814
+ }
815
+
816
+ .brand-title {
817
+ font-size: 2rem;
818
+ }
819
+
820
+ .brand-tagline {
821
+ font-size: 0.9rem;
822
+ }
823
+
824
+ .content-container {
825
+ padding: 2rem 1rem;
826
+ }
827
+
828
+ .content {
829
+ padding: 2rem;
830
+ border-radius: 1rem;
831
+ }
832
+
833
+ .content-title {
834
+ font-size: 2.25rem;
835
+ }
836
+
837
+ .content-subtitle {
838
+ font-size: 1rem;
839
+ }
840
+
841
+ .nav-content {
842
+ padding: 2rem 1.5rem;
843
+ }
844
+
845
+ .nav-item {
846
+ padding: 1rem;
847
+ }
848
+
849
+ .fjell-logo {
850
+ width: 50px;
851
+ height: 50px;
852
+ bottom: 1rem;
853
+ }
854
+ }
855
+
856
+ @media (max-width: 480px) {
857
+ :root {
858
+ --header-height: 120px;
859
+ }
860
+
861
+ .header-container {
862
+ padding: 0 1.5rem;
863
+ }
864
+
865
+ .brand {
866
+ margin-left: 0;
867
+ }
868
+
869
+ .brand-title {
870
+ font-size: 1.75rem;
871
+ }
872
+
873
+ .content-container {
874
+ padding: 1.5rem 0.5rem;
875
+ }
876
+
877
+ .content {
878
+ padding: 1.5rem;
879
+ margin: 0;
880
+ border-radius: 0.75rem;
881
+ }
882
+
883
+ .content-title {
884
+ font-size: 2rem;
885
+ }
886
+
887
+ .nav-content {
888
+ padding: 1.5rem 1rem;
889
+ }
890
+
891
+ .fjell-logo {
892
+ width: 40px;
893
+ height: 40px;
894
+ }
895
+ }
896
+
897
+ /* Example content styling */
898
+ .example-content {
899
+ display: flex;
900
+ flex-direction: column;
901
+ gap: 2rem;
902
+ }
903
+
904
+ .example-description {
905
+ background: linear-gradient(135deg, var(--surface-01) 0%, var(--surface-02) 100%);
906
+ border: 1px solid var(--border-secondary);
907
+ border-radius: 0.75rem;
908
+ padding: 2rem;
909
+ margin-bottom: 1.5rem;
910
+ }
911
+
912
+ .example-description h2 {
913
+ color: var(--accent-primary);
914
+ margin-bottom: 1rem;
915
+ font-size: 1.75rem;
916
+ font-weight: 600;
917
+ }
918
+
919
+ .example-description ul {
920
+ list-style: none;
921
+ padding: 0;
922
+ margin: 1rem 0;
923
+ }
924
+
925
+ .example-description li {
926
+ padding: 0.5rem 0;
927
+ padding-left: 1.5rem;
928
+ position: relative;
929
+ }
930
+
931
+ .example-description li::before {
932
+ content: "→";
933
+ position: absolute;
934
+ left: 0;
935
+ color: var(--accent-primary);
936
+ font-weight: bold;
937
+ }
938
+
939
+ .example-description code {
940
+ background: var(--surface-03);
941
+ color: var(--accent-secondary);
942
+ padding: 0.25rem 0.5rem;
943
+ border-radius: 0.25rem;
944
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
945
+ font-size: 0.9em;
946
+ }
947
+
948
+ .example-code {
949
+ background: var(--surface-02);
950
+ border-radius: 0.75rem;
951
+ overflow: hidden;
952
+ border: 1px solid var(--border-secondary);
953
+ }
954
+
955
+ .example-run {
956
+ background: var(--surface-01);
957
+ border: 1px solid var(--border-secondary);
958
+ border-radius: 0.75rem;
959
+ padding: 1.5rem;
960
+ }
961
+
962
+ .example-run h3 {
963
+ color: var(--accent-primary);
964
+ margin-bottom: 1rem;
965
+ font-size: 1.25rem;
966
+ font-weight: 600;
967
+ }
968
+
969
+ /* Performance content styling */
970
+ .performance-content {
971
+ display: flex;
972
+ flex-direction: column;
973
+ gap: 2rem;
974
+ }
975
+
976
+ .performance-charts {
977
+ display: grid;
978
+ grid-template-columns: 1fr 1fr;
979
+ gap: 2rem;
980
+ margin-top: 2rem;
981
+ }
982
+
983
+ .clickable-chart {
984
+ cursor: pointer;
985
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
986
+ }
987
+
988
+ .clickable-chart:hover {
989
+ transform: scale(1.02);
990
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
991
+ }
992
+
993
+ /* Fullscreen modal */
994
+ .fullscreen-modal {
995
+ position: fixed;
996
+ top: 0;
997
+ left: 0;
998
+ right: 0;
999
+ bottom: 0;
1000
+ background: rgba(0, 0, 0, 0.9);
1001
+ display: flex;
1002
+ align-items: center;
1003
+ justify-content: center;
1004
+ z-index: 9999;
1005
+ cursor: pointer;
1006
+ }
1007
+
1008
+ .fullscreen-content {
1009
+ position: relative;
1010
+ max-width: 95vw;
1011
+ max-height: 95vh;
1012
+ cursor: default;
1013
+ }
1014
+
1015
+ .fullscreen-image {
1016
+ max-width: 100%;
1017
+ max-height: 95vh;
1018
+ object-fit: contain;
1019
+ border-radius: 0.5rem;
1020
+ }
1021
+
1022
+ .close-button {
1023
+ position: absolute;
1024
+ top: -20px;
1025
+ right: -20px;
1026
+ background: var(--accent-primary);
1027
+ color: white;
1028
+ border: none;
1029
+ width: 40px;
1030
+ height: 40px;
1031
+ border-radius: 50%;
1032
+ font-size: 24px;
1033
+ cursor: pointer;
1034
+ display: flex;
1035
+ align-items: center;
1036
+ justify-content: center;
1037
+ transition: background 0.2s ease;
1038
+ }
1039
+
1040
+ .close-button:hover {
1041
+ background: var(--accent-secondary);
1042
+ }
1043
+
1044
+ .svg-display {
1045
+ background: var(--surface-01);
1046
+ border: 1px solid var(--border-secondary);
1047
+ border-radius: 0.75rem;
1048
+ padding: 2rem;
1049
+ text-align: center;
1050
+ }
1051
+
1052
+ .svg-display h2 {
1053
+ color: var(--accent-primary);
1054
+ margin-bottom: 1.5rem;
1055
+ font-size: 1.5rem;
1056
+ font-weight: 600;
1057
+ }
1058
+
1059
+ .performance-chart {
1060
+ max-width: 100%;
1061
+ height: auto;
1062
+ border-radius: 0.5rem;
1063
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
1064
+ }
1065
+
1066
+ /* Examples grid styling */
1067
+ .examples-content {
1068
+ display: flex;
1069
+ flex-direction: column;
1070
+ gap: 2rem;
1071
+ }
1072
+
1073
+ .examples-grid {
1074
+ display: grid;
1075
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
1076
+ gap: 1.5rem;
1077
+ margin-top: 2rem;
1078
+ }
1079
+
1080
+ .example-card {
1081
+ background: linear-gradient(135deg, var(--surface-01) 0%, var(--surface-02) 100%);
1082
+ border: 1px solid var(--border-secondary);
1083
+ border-radius: 0.75rem;
1084
+ padding: 1.5rem;
1085
+ transition: all 0.3s ease;
1086
+ }
1087
+
1088
+ .example-card:hover {
1089
+ transform: translateY(-2px);
1090
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
1091
+ border-color: var(--accent-primary);
1092
+ }
1093
+
1094
+ .example-card h3 {
1095
+ color: var(--accent-primary);
1096
+ margin-bottom: 0.75rem;
1097
+ font-size: 1.25rem;
1098
+ font-weight: 600;
1099
+ }
1100
+
1101
+ .example-card p {
1102
+ color: var(--text-secondary);
1103
+ margin-bottom: 1rem;
1104
+ line-height: 1.5;
1105
+ }
1106
+
1107
+ .example-card details {
1108
+ margin-top: 1rem;
1109
+ }
1110
+
1111
+ .example-card summary {
1112
+ color: var(--accent-secondary);
1113
+ cursor: pointer;
1114
+ font-weight: 500;
1115
+ padding: 0.5rem 0;
1116
+ border-bottom: 1px solid var(--border-secondary);
1117
+ margin-bottom: 1rem;
1118
+ }
1119
+
1120
+ .example-card summary:hover {
1121
+ color: var(--accent-primary);
1122
+ }
1123
+
1124
+ .example-code-block {
1125
+ background: var(--surface-03);
1126
+ border-radius: 0.5rem;
1127
+ overflow: hidden;
1128
+ border: 1px solid var(--border-secondary);
1129
+ }
1130
+
1131
+ /* Responsive adjustments for new content */
1132
+ @media (max-width: 768px) {
1133
+ .header-container {
1134
+ padding: 0.75rem 1rem;
1135
+ }
1136
+
1137
+ .example-description {
1138
+ padding: 1.5rem;
1139
+ }
1140
+
1141
+ .example-run {
1142
+ padding: 1rem;
1143
+ }
1144
+
1145
+ .svg-display {
1146
+ padding: 1rem;
1147
+ }
1148
+
1149
+ .performance-chart {
1150
+ width: 100%;
1151
+ }
1152
+
1153
+ .performance-charts {
1154
+ grid-template-columns: 1fr;
1155
+ gap: 1rem;
1156
+ }
1157
+
1158
+ .examples-grid {
1159
+ grid-template-columns: 1fr;
1160
+ gap: 1rem;
1161
+ }
1162
+
1163
+ .example-card {
1164
+ padding: 1rem;
1165
+ }
1166
+
1167
+ .content-header {
1168
+ flex-direction: column;
1169
+ gap: 1rem;
1170
+ }
1171
+
1172
+ .section-header {
1173
+ text-align: left;
1174
+ }
1175
+ }