@fjell/registry 4.4.10 → 4.4.13

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 (41) hide show
  1. package/MIGRATION_SUMMARY.md +200 -0
  2. package/dist/Registry.cjs +36 -3
  3. package/dist/Registry.js +36 -3
  4. package/dist/RegistryStats.cjs +200 -0
  5. package/dist/RegistryStats.d.ts +103 -0
  6. package/dist/RegistryStats.js +196 -0
  7. package/dist/index.cjs +229 -2
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.js +2 -1
  11. package/dist/types.d.ts +7 -0
  12. package/docs/README.md +5 -5
  13. package/docs/docs.config.ts +110 -0
  14. package/docs/index.html +1 -1
  15. package/docs/package.json +2 -4
  16. package/docs/public/api.md +527 -0
  17. package/docs/public/package.json +65 -0
  18. package/docs/src/index.css +1 -7
  19. package/docs/src/main.tsx +4 -2
  20. package/docs/src/types.d.ts +10 -0
  21. package/examples/README.md +19 -0
  22. package/examples/registry-statistics-example.ts +264 -0
  23. package/package.json +8 -7
  24. package/docs/memory-data/scaling-10-instances.json +0 -526
  25. package/docs/memory-data/scaling-100-instances.json +0 -526
  26. package/docs/memory-data/scaling-1000-instances.json +0 -276
  27. package/docs/memory-data/scaling-10000-instances.json +0 -126
  28. package/docs/memory-data/scaling-20-instances.json +0 -526
  29. package/docs/memory-data/scaling-200-instances.json +0 -526
  30. package/docs/memory-data/scaling-2000-instances.json +0 -276
  31. package/docs/memory-data/scaling-50-instances.json +0 -526
  32. package/docs/memory-data/scaling-500-instances.json +0 -276
  33. package/docs/memory-data/scaling-5000-instances.json +0 -126
  34. package/docs/memory-overhead.svg +0 -120
  35. package/docs/memory.md +0 -430
  36. package/docs/src/App.css +0 -1175
  37. package/docs/src/App.test.tsx +0 -50
  38. package/docs/src/App.tsx +0 -583
  39. package/docs/timing-range.svg +0 -174
  40. package/docs/timing.md +0 -483
  41. package/docs/tsconfig.node.json +0 -13
package/docs/src/App.css DELETED
@@ -1,1175 +0,0 @@
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
- }