@fjell/core 4.4.6 → 4.4.12

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