odac 1.4.3 → 1.4.5

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 (63) hide show
  1. package/.agent/rules/coding.md +2 -2
  2. package/.agent/rules/memory.md +5 -1
  3. package/.github/workflows/release.yml +2 -0
  4. package/.husky/pre-push +0 -1
  5. package/.kiro/steering/coding.md +27 -0
  6. package/.kiro/steering/memory.md +56 -0
  7. package/.kiro/steering/project.md +30 -0
  8. package/.kiro/steering/workflow.md +16 -0
  9. package/CHANGELOG.md +98 -0
  10. package/README.md +2 -1
  11. package/client/odac.js +121 -2
  12. package/docs/ai/skills/backend/authentication.md +7 -5
  13. package/docs/ai/skills/backend/controllers.md +24 -3
  14. package/docs/ai/skills/backend/forms.md +8 -6
  15. package/docs/ai/skills/backend/image-processing.md +93 -0
  16. package/docs/ai/skills/backend/request_response.md +2 -2
  17. package/docs/ai/skills/backend/routing.md +11 -0
  18. package/docs/ai/skills/backend/structure.md +1 -1
  19. package/docs/ai/skills/backend/views.md +34 -9
  20. package/docs/ai/skills/frontend/navigation.md +45 -1
  21. package/docs/ai/skills/frontend/realtime.md +18 -2
  22. package/docs/backend/05-controllers/02-your-trusty-odac-assistant.md +24 -0
  23. package/docs/backend/07-views/03-template-syntax.md +65 -15
  24. package/docs/backend/07-views/03-variables.md +22 -7
  25. package/docs/backend/07-views/11-image-optimization.md +197 -0
  26. package/docs/frontend/02-ajax-navigation/01-quick-start.md +22 -0
  27. package/docs/frontend/02-ajax-navigation/03-advanced-usage.md +51 -0
  28. package/package.json +5 -2
  29. package/src/Auth.js +8 -4
  30. package/src/Config.js +5 -0
  31. package/src/Database/ConnectionFactory.js +16 -0
  32. package/src/Ipc.js +3 -2
  33. package/src/Lang.js +17 -10
  34. package/src/Odac.js +1 -0
  35. package/src/Request.js +20 -20
  36. package/src/Route.js +39 -3
  37. package/src/Validator.js +5 -5
  38. package/src/View/Image.js +495 -0
  39. package/src/View.js +4 -0
  40. package/template/controller/page/about.js +3 -3
  41. package/template/controller/page/index.js +2 -2
  42. package/template/public/assets/js/app.js +38 -54
  43. package/template/skeleton/main.html +4 -4
  44. package/template/view/content/about.html +64 -60
  45. package/template/view/content/home.html +148 -175
  46. package/template/view/css/app.css +46 -0
  47. package/template/view/footer/main.html +10 -9
  48. package/template/view/header/main.html +34 -11
  49. package/test/Auth/verifyMagicLink.test.js +281 -0
  50. package/test/Client/load.test.js +306 -0
  51. package/test/Lang/get.test.js +37 -11
  52. package/test/Odac/image.test.js +61 -0
  53. package/test/Route/set.test.js +102 -0
  54. package/test/View/Image/buildFilename.test.js +62 -0
  55. package/test/View/Image/hash.test.js +59 -0
  56. package/test/View/Image/isAvailable.test.js +15 -0
  57. package/test/View/Image/parse.test.js +83 -0
  58. package/test/View/Image/process.test.js +38 -0
  59. package/test/View/Image/render.test.js +117 -0
  60. package/test/View/Image/serve.test.js +56 -0
  61. package/test/View/Image/url.test.js +53 -0
  62. package/test/View/constructor.test.js +10 -0
  63. package/template/public/assets/css/style.css +0 -1835
@@ -1,1835 +0,0 @@
1
- /* ============================================
2
- Odac Template Stylesheet
3
- Modern, responsive design with smooth transitions
4
- ============================================ */
5
-
6
- /* CSS Variables - Dark Theme with Indigo */
7
- :root {
8
- /* Indigo Color Palette */
9
- --primary: #6366f1;
10
- --primary-dark: #4f46e5;
11
- --primary-light: #818cf8;
12
- --accent: #8b5cf6;
13
- --success: #10b981;
14
- --error: #ef4444;
15
-
16
- /* Dark Theme Colors */
17
- --bg-primary: #0f172a;
18
- --bg-secondary: #1e293b;
19
- --bg-tertiary: #334155;
20
- --text-primary: #f1f5f9;
21
- --text-secondary: #cbd5e1;
22
- --text-muted: #94a3b8;
23
- --border: #334155;
24
- --shadow: rgba(0, 0, 0, 0.3);
25
-
26
- /* Additional Color Variables */
27
- --white: #ffffff;
28
- --text-dark: #0f172a;
29
- --text-light: #cbd5e1;
30
- --secondary: #cbd5e1;
31
-
32
- /* Card & Surface */
33
- --card-bg: #1e293b;
34
- --code-bg: #0f172a;
35
- --code-color: #e2e8f0;
36
-
37
- /* Typography */
38
- --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
39
- --font-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
40
-
41
- /* Spacing */
42
- --spacing-xs: 0.5rem;
43
- --spacing-sm: 1rem;
44
- --spacing-md: 2rem;
45
- --spacing-lg: 3rem;
46
- --spacing-xl: 4rem;
47
-
48
- /* Layout */
49
- --max-width: 1200px;
50
- --border-radius: 0.5rem;
51
- --transition: all 0.3s ease;
52
- }
53
-
54
- /* ============================================
55
- Reset & Base Styles
56
- ============================================ */
57
-
58
- * {
59
- margin: 0;
60
- padding: 0;
61
- box-sizing: border-box;
62
- }
63
-
64
- html {
65
- font-size: 16px;
66
- scroll-behavior: smooth;
67
- }
68
-
69
- body {
70
- font-family: var(--font-sans);
71
- color: var(--text-primary);
72
- line-height: 1.6;
73
- background-color: var(--bg-primary);
74
- -webkit-font-smoothing: antialiased;
75
- -moz-osx-font-smoothing: grayscale;
76
- }
77
-
78
- /* ============================================
79
- Typography
80
- ============================================ */
81
-
82
- h1,
83
- h2,
84
- h3,
85
- h4,
86
- h5,
87
- h6 {
88
- font-weight: 700;
89
- line-height: 1.2;
90
- margin-bottom: var(--spacing-sm);
91
- color: var(--text-primary);
92
- }
93
-
94
- h1 {
95
- font-size: 2.5rem;
96
- }
97
-
98
- h2 {
99
- font-size: 2rem;
100
- }
101
-
102
- h3 {
103
- font-size: 1.5rem;
104
- }
105
-
106
- p {
107
- margin-bottom: var(--spacing-sm);
108
- color: var(--text-secondary);
109
- }
110
-
111
- a {
112
- color: var(--primary);
113
- text-decoration: none;
114
- transition: var(--transition);
115
- }
116
-
117
- a:hover {
118
- color: var(--primary-dark);
119
- }
120
-
121
- code {
122
- font-family: var(--font-mono);
123
- background-color: var(--secondary);
124
- color: var(--text-dark);
125
- padding: 0.2rem 0.4rem;
126
- border-radius: 0.25rem;
127
- font-size: 0.9em;
128
- }
129
-
130
- pre {
131
- font-family: var(--font-mono);
132
- background-color: var(--secondary);
133
- color: var(--text-dark);
134
- padding: var(--spacing-sm);
135
- border-radius: var(--border-radius);
136
- overflow-x: auto;
137
- margin-bottom: var(--spacing-sm);
138
- }
139
-
140
- pre code {
141
- background: none;
142
- padding: 0;
143
- }
144
-
145
- /* ============================================
146
- Layout & Container
147
- ============================================ */
148
-
149
- .container {
150
- max-width: var(--max-width);
151
- margin: 0 auto;
152
- padding: 0 var(--spacing-sm);
153
- }
154
-
155
- /* ============================================
156
- Header & Navigation
157
- ============================================ */
158
-
159
- .navbar {
160
- background-color: var(--bg-secondary);
161
- color: var(--text-primary);
162
- border-bottom: 1px solid var(--border);
163
- position: sticky;
164
- top: 0;
165
- z-index: 100;
166
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
167
- padding: var(--spacing-sm) 0;
168
- backdrop-filter: blur(10px);
169
- }
170
-
171
- .navbar .container {
172
- display: flex;
173
- justify-content: space-between;
174
- align-items: center;
175
- }
176
-
177
- .nav-brand {
178
- display: flex;
179
- align-items: center;
180
- gap: 0.5rem;
181
- font-size: 1.5rem;
182
- font-weight: 700;
183
- color: var(--primary);
184
- }
185
-
186
- .brand-icon {
187
- font-size: 1.75rem;
188
- }
189
-
190
- .brand-name {
191
- font-weight: 700;
192
- }
193
-
194
- .nav-links {
195
- display: flex;
196
- gap: var(--spacing-sm);
197
- align-items: center;
198
- }
199
-
200
- .nav-link {
201
- color: var(--text-secondary);
202
- font-weight: 500;
203
- padding: 0.5rem 1rem;
204
- border-radius: var(--border-radius);
205
- transition: var(--transition);
206
- text-decoration: none;
207
- }
208
-
209
- .nav-link:hover,
210
- .nav-link.active {
211
- color: var(--primary);
212
- background-color: var(--bg-tertiary);
213
- }
214
-
215
- header {
216
- background-color: var(--bg-secondary);
217
- color: var(--text-primary);
218
- border-bottom: 1px solid var(--border);
219
- position: sticky;
220
- top: 0;
221
- z-index: 100;
222
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
223
- }
224
-
225
- header .container {
226
- display: flex;
227
- justify-content: space-between;
228
- align-items: center;
229
- padding-top: var(--spacing-sm);
230
- padding-bottom: var(--spacing-sm);
231
- }
232
-
233
- .header-content {
234
- display: flex;
235
- justify-content: space-between;
236
- align-items: center;
237
- width: 100%;
238
- }
239
-
240
- .logo {
241
- font-size: 1.5rem;
242
- font-weight: 700;
243
- color: var(--primary);
244
- display: flex;
245
- align-items: center;
246
- gap: 0.5rem;
247
- }
248
-
249
- .logo-icon {
250
- font-size: 1.75rem;
251
- }
252
-
253
- .logo-text {
254
- font-weight: 700;
255
- }
256
-
257
- nav ul {
258
- list-style: none;
259
- display: flex;
260
- gap: var(--spacing-md);
261
- align-items: center;
262
- }
263
-
264
- .nav {
265
- display: flex;
266
- gap: var(--spacing-sm);
267
- }
268
-
269
- nav a {
270
- color: var(--text-light);
271
- font-weight: 500;
272
- padding: 0.5rem 1rem;
273
- border-radius: var(--border-radius);
274
- transition: var(--transition);
275
- }
276
-
277
- nav a:hover,
278
- nav a.active {
279
- color: var(--text-dark);
280
- background-color: var(--secondary);
281
- }
282
-
283
- /* ============================================
284
- Hero Section
285
- ============================================ */
286
-
287
- .hero {
288
- text-align: center;
289
- padding: var(--spacing-xl) 0;
290
- background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-primary) 100%);
291
- color: var(--text-primary);
292
- border-bottom: 1px solid var(--border);
293
- }
294
-
295
- .hero-content {
296
- max-width: 100%;
297
- margin: 0 auto;
298
- padding: 0 var(--spacing-md);
299
- }
300
-
301
- .hero h1,
302
- .hero-title {
303
- font-size: 3rem;
304
- margin-bottom: var(--spacing-sm);
305
- background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
306
- -webkit-background-clip: text;
307
- -webkit-text-fill-color: transparent;
308
- background-clip: text;
309
- }
310
-
311
- .hero p,
312
- .hero-subtitle,
313
- .hero-description {
314
- font-size: 1.25rem;
315
- color: var(--text-secondary);
316
- max-width: 700px;
317
- margin: 0 auto var(--spacing-md);
318
- }
319
-
320
- .hero-subtitle {
321
- font-size: 1.5rem;
322
- font-weight: 600;
323
- color: var(--text-primary);
324
- }
325
-
326
- .hero-description {
327
- font-size: 1.125rem;
328
- }
329
-
330
- .hero-buttons {
331
- display: flex;
332
- gap: var(--spacing-sm);
333
- justify-content: center;
334
- flex-wrap: wrap;
335
- }
336
-
337
- /* ============================================
338
- Feature Cards
339
- ============================================ */
340
-
341
- .features {
342
- padding: var(--spacing-xl) 0;
343
- }
344
-
345
- .section-title {
346
- text-align: center;
347
- font-size: 2.5rem;
348
- margin-bottom: var(--spacing-md);
349
- color: var(--text-primary);
350
- background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
351
- -webkit-background-clip: text;
352
- -webkit-text-fill-color: transparent;
353
- background-clip: text;
354
- }
355
-
356
- .features-grid,
357
- .feature-grid {
358
- display: grid;
359
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
360
- gap: var(--spacing-md);
361
- margin-top: var(--spacing-md);
362
- }
363
-
364
- .feature-card {
365
- background: var(--white);
366
- color: var(--text-dark);
367
- border: 1px solid var(--border);
368
- border-radius: var(--border-radius);
369
- padding: var(--spacing-md);
370
- transition: var(--transition);
371
- box-shadow: 0 2px 4px var(--shadow);
372
- }
373
-
374
- .feature-card:hover {
375
- transform: translateY(-4px);
376
- box-shadow: 0 8px 16px var(--shadow);
377
- }
378
-
379
- .feature-icon {
380
- font-size: 3rem;
381
- margin-bottom: var(--spacing-sm);
382
- display: block;
383
- }
384
-
385
- .feature-card h3,
386
- .feature-title {
387
- color: var(--text-dark);
388
- margin-bottom: var(--spacing-xs);
389
- }
390
-
391
- .feature-card p,
392
- .feature-description {
393
- color: var(--text-light);
394
- margin-bottom: 0;
395
- }
396
-
397
- /* ============================================
398
- Buttons
399
- ============================================ */
400
-
401
- .btn {
402
- display: inline-block;
403
- padding: 0.75rem 1.5rem;
404
- border-radius: var(--border-radius);
405
- font-weight: 600;
406
- text-align: center;
407
- cursor: pointer;
408
- transition: var(--transition);
409
- border: none;
410
- font-size: 1rem;
411
- font-family: var(--font-sans);
412
- }
413
-
414
- .btn-primary {
415
- background-color: var(--primary);
416
- color: white;
417
- box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
418
- }
419
-
420
- .btn-primary:hover {
421
- background-color: var(--primary-dark);
422
- transform: translateY(-2px);
423
- box-shadow: 0 8px 20px rgba(99, 102, 241, 0.4);
424
- }
425
-
426
- .btn-secondary {
427
- background-color: var(--bg-tertiary);
428
- color: var(--text-primary);
429
- border: 1px solid var(--border);
430
- }
431
-
432
- .btn-secondary:hover {
433
- background-color: var(--bg-secondary);
434
- border-color: var(--primary);
435
- }
436
-
437
- .btn-success {
438
- background-color: var(--success);
439
- color: white;
440
- }
441
-
442
- .btn-success:hover {
443
- background-color: #059669;
444
- }
445
-
446
- /* ============================================
447
- Forms
448
- ============================================ */
449
-
450
- .form-section {
451
- padding: var(--spacing-xl) 0;
452
- background-color: var(--secondary);
453
- color: var(--text-dark);
454
- }
455
-
456
- form {
457
- max-width: 600px;
458
- margin: 0 auto;
459
- background: var(--white);
460
- color: var(--text-dark);
461
- padding: var(--spacing-md);
462
- border-radius: var(--border-radius);
463
- box-shadow: 0 4px 8px var(--shadow);
464
- }
465
-
466
- .form-group {
467
- margin-bottom: var(--spacing-sm);
468
- }
469
-
470
- label,
471
- .form-label {
472
- display: block;
473
- margin-bottom: var(--spacing-xs);
474
- font-weight: 600;
475
- color: var(--text-dark);
476
- }
477
-
478
- input[type='text'],
479
- input[type='email'],
480
- textarea,
481
- .form-input {
482
- width: 100%;
483
- padding: 0.75rem;
484
- border: 1px solid var(--border);
485
- border-radius: var(--border-radius);
486
- font-family: var(--font-sans);
487
- font-size: 1rem;
488
- transition: var(--transition);
489
- }
490
-
491
- input:focus,
492
- textarea:focus,
493
- .form-input:focus {
494
- outline: none;
495
- border-color: var(--primary);
496
- box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
497
- }
498
-
499
- textarea,
500
- textarea.form-input {
501
- resize: vertical;
502
- min-height: 120px;
503
- }
504
-
505
- .form-error {
506
- color: var(--error);
507
- font-size: 0.875rem;
508
- margin-top: var(--spacing-xs);
509
- display: block;
510
- min-height: 1.25rem;
511
- }
512
-
513
- .form-error:empty {
514
- display: none;
515
- }
516
-
517
- .form-error.show {
518
- display: block;
519
- }
520
-
521
- input.error,
522
- textarea.error {
523
- border-color: var(--error);
524
- }
525
-
526
- .form-success {
527
- background-color: var(--accent);
528
- color: var(--white);
529
- padding: var(--spacing-sm);
530
- border-radius: var(--border-radius);
531
- margin-top: var(--spacing-sm);
532
- display: none;
533
- }
534
-
535
- .form-success.show {
536
- display: block;
537
- }
538
-
539
- [odac-form-success] {
540
- background-color: var(--accent);
541
- color: var(--white);
542
- padding: var(--spacing-sm);
543
- border-radius: var(--border-radius);
544
- margin-top: var(--spacing-sm);
545
- display: none;
546
- }
547
-
548
- [odac-form-success]:not(:empty) {
549
- display: block;
550
- }
551
-
552
- /* ============================================
553
- Demo Section
554
- ============================================ */
555
-
556
- .demo,
557
- .demo-section {
558
- padding: var(--spacing-xl) 0;
559
- background: var(--secondary);
560
- color: var(--text-dark);
561
- }
562
-
563
- .demo-grid {
564
- display: grid;
565
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
566
- gap: var(--spacing-md);
567
- margin-top: var(--spacing-md);
568
- }
569
-
570
- .demo-card {
571
- background: var(--white);
572
- color: var(--text-dark);
573
- border: 1px solid var(--border);
574
- border-radius: var(--border-radius);
575
- padding: var(--spacing-md);
576
- box-shadow: 0 2px 4px var(--shadow);
577
- }
578
-
579
- .demo-title {
580
- color: var(--text-dark);
581
- margin-bottom: var(--spacing-xs);
582
- }
583
-
584
- .demo-description {
585
- color: var(--text-light);
586
- margin-bottom: var(--spacing-md);
587
- }
588
-
589
- .demo-box {
590
- background: var(--white);
591
- color: var(--text-dark);
592
- border: 1px solid var(--border);
593
- border-radius: var(--border-radius);
594
- padding: var(--spacing-md);
595
- margin-top: var(--spacing-md);
596
- box-shadow: 0 2px 4px var(--shadow);
597
- }
598
-
599
- .contact-form {
600
- margin-top: var(--spacing-sm);
601
- }
602
-
603
- .stats-display {
604
- background: var(--secondary);
605
- color: var(--text-dark);
606
- padding: var(--spacing-sm);
607
- border-radius: var(--border-radius);
608
- margin-top: var(--spacing-sm);
609
- display: none;
610
- }
611
-
612
- .stats-display.show {
613
- display: block;
614
- }
615
-
616
- .stats-display p {
617
- margin-bottom: var(--spacing-xs);
618
- color: var(--text-dark);
619
- }
620
-
621
- .stats-grid {
622
- display: grid;
623
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
624
- gap: var(--spacing-sm);
625
- }
626
-
627
- .stat-item {
628
- background: var(--white);
629
- color: var(--text-dark);
630
- padding: var(--spacing-sm);
631
- border-radius: var(--border-radius);
632
- border-left: 3px solid var(--primary);
633
- }
634
-
635
- .stat-item strong {
636
- color: var(--text-dark);
637
- display: block;
638
- margin-bottom: 0.25rem;
639
- }
640
-
641
- /* ============================================
642
- Code Examples
643
- ============================================ */
644
-
645
- .code-examples {
646
- padding: var(--spacing-xl) 0;
647
- }
648
-
649
- .examples-grid {
650
- display: grid;
651
- grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
652
- gap: var(--spacing-md);
653
- margin-top: var(--spacing-md);
654
- }
655
-
656
- .code-example {
657
- margin: var(--spacing-md) 0;
658
- }
659
-
660
- .code-example h4 {
661
- margin-bottom: var(--spacing-xs);
662
- color: var(--text-dark);
663
- }
664
-
665
- .example-title {
666
- color: var(--text-dark);
667
- margin-bottom: var(--spacing-xs);
668
- font-size: 1.5rem;
669
- }
670
-
671
- .example-description {
672
- color: var(--text-light);
673
- margin-bottom: var(--spacing-sm);
674
- }
675
-
676
- .cta {
677
- text-align: center;
678
- margin-top: var(--spacing-xl);
679
- padding: var(--spacing-lg);
680
- background: var(--secondary);
681
- color: var(--text-dark);
682
- border-radius: var(--border-radius);
683
- }
684
-
685
- .cta-text {
686
- font-size: 1.25rem;
687
- color: var(--text-dark);
688
- margin-bottom: var(--spacing-sm);
689
- font-weight: 600;
690
- }
691
-
692
- /* ============================================
693
- Footer
694
- ============================================ */
695
-
696
- footer {
697
- background-color: var(--text-dark);
698
- color: var(--white);
699
- padding: var(--spacing-md) 0;
700
- margin-top: var(--spacing-xl);
701
- text-align: center;
702
- }
703
-
704
- .footer-content {
705
- display: flex;
706
- flex-direction: column;
707
- gap: var(--spacing-sm);
708
- align-items: center;
709
- }
710
-
711
- footer p {
712
- color: var(--secondary);
713
- margin-bottom: 0;
714
- }
715
-
716
- footer a {
717
- color: var(--white);
718
- text-decoration: underline;
719
- }
720
-
721
- footer a:hover {
722
- color: var(--primary);
723
- }
724
-
725
- /* ============================================
726
- About Page Styles
727
- ============================================ */
728
-
729
- .content-section {
730
- padding: var(--spacing-lg) 0;
731
- }
732
-
733
- .content-section h2 {
734
- margin-bottom: var(--spacing-md);
735
- text-align: center;
736
- }
737
-
738
- .lead {
739
- font-size: 1.25rem;
740
- color: var(--text-light);
741
- max-width: 700px;
742
- margin: 0 auto;
743
- }
744
-
745
- .component-grid {
746
- display: grid;
747
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
748
- gap: var(--spacing-md);
749
- margin-top: var(--spacing-md);
750
- }
751
-
752
- .component-card {
753
- background: var(--white);
754
- color: var(--text-dark);
755
- border: 1px solid var(--border);
756
- border-radius: var(--border-radius);
757
- padding: var(--spacing-md);
758
- transition: var(--transition);
759
- }
760
-
761
- .component-card:hover {
762
- box-shadow: 0 4px 8px var(--shadow);
763
- transform: translateY(-2px);
764
- }
765
-
766
- .component-card h3 {
767
- margin-bottom: var(--spacing-xs);
768
- }
769
-
770
- .philosophy-list {
771
- list-style: none;
772
- max-width: 700px;
773
- margin: var(--spacing-md) auto;
774
- }
775
-
776
- .philosophy-list li {
777
- padding: var(--spacing-sm);
778
- margin-bottom: var(--spacing-sm);
779
- background: var(--white);
780
- color: var(--text-dark);
781
- border-radius: var(--border-radius);
782
- box-shadow: 0 2px 4px var(--shadow);
783
- line-height: 1.6;
784
- }
785
-
786
- .philosophy-list li * {
787
- color: inherit;
788
- }
789
-
790
- .philosophy-list strong {
791
- color: var(--primary);
792
- font-weight: 600;
793
- }
794
-
795
- .philosophy-list code {
796
- background-color: var(--bg-tertiary);
797
- color: var(--text-primary);
798
- padding: 0.2rem 0.4rem;
799
- border-radius: 0.25rem;
800
- }
801
-
802
- .links-grid {
803
- display: grid;
804
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
805
- gap: var(--spacing-md);
806
- margin-top: var(--spacing-md);
807
- }
808
-
809
- .link-card {
810
- background: var(--white);
811
- color: var(--text-dark);
812
- border: 2px solid var(--border);
813
- border-radius: var(--border-radius);
814
- padding: var(--spacing-md);
815
- transition: var(--transition);
816
- display: block;
817
- }
818
-
819
- .link-card:hover {
820
- border-color: var(--primary);
821
- box-shadow: 0 4px 12px var(--shadow);
822
- transform: translateY(-2px);
823
- }
824
-
825
- .link-card h3 {
826
- color: var(--text-dark);
827
- margin-bottom: var(--spacing-xs);
828
- }
829
-
830
- .link-card p {
831
- color: var(--text-light);
832
- margin-bottom: 0;
833
- }
834
-
835
- /* ============================================
836
- Documentation Page Styles
837
- ============================================ */
838
-
839
- .docs-page {
840
- padding: var(--spacing-md) 0;
841
- }
842
-
843
- .docs-header {
844
- text-align: center;
845
- padding: var(--spacing-lg) 0;
846
- background: var(--secondary);
847
- color: var(--text-dark);
848
- border-radius: var(--border-radius);
849
- margin-bottom: var(--spacing-lg);
850
- }
851
-
852
- .docs-intro {
853
- font-size: 1.125rem;
854
- color: var(--text-light);
855
- max-width: 700px;
856
- margin: 0 auto;
857
- }
858
-
859
- .examples-container {
860
- margin: var(--spacing-lg) 0;
861
- }
862
-
863
- .example-card {
864
- background: var(--white);
865
- color: var(--text-dark);
866
- border: 1px solid var(--border);
867
- border-radius: var(--border-radius);
868
- padding: var(--spacing-md);
869
- margin-bottom: var(--spacing-md);
870
- box-shadow: 0 2px 4px var(--shadow);
871
- }
872
-
873
- .example-title {
874
- color: var(--text-dark);
875
- margin-bottom: var(--spacing-xs);
876
- }
877
-
878
- .example-description {
879
- color: var(--text-light);
880
- margin-bottom: var(--spacing-sm);
881
- }
882
-
883
- .code-block {
884
- background: var(--text-dark);
885
- border-radius: var(--border-radius);
886
- padding: var(--spacing-sm);
887
- overflow-x: auto;
888
- }
889
-
890
- .code-block pre {
891
- background: transparent;
892
- margin: 0;
893
- padding: 0;
894
- }
895
-
896
- .code-block code {
897
- color: #e5e7eb;
898
- background: transparent;
899
- font-size: 0.875rem;
900
- line-height: 1.6;
901
- }
902
-
903
- .resources-section {
904
- margin: var(--spacing-xl) 0;
905
- padding: var(--spacing-lg) 0;
906
- background: var(--secondary);
907
- color: var(--text-dark);
908
- border-radius: var(--border-radius);
909
- }
910
-
911
- .resources-section h2 {
912
- text-align: center;
913
- margin-bottom: var(--spacing-md);
914
- }
915
-
916
- .resource-cards {
917
- display: grid;
918
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
919
- gap: var(--spacing-md);
920
- max-width: var(--max-width);
921
- margin: 0 auto;
922
- padding: 0 var(--spacing-sm);
923
- }
924
-
925
- .resource-card {
926
- background: var(--white);
927
- color: var(--text-dark);
928
- border: 1px solid var(--border);
929
- border-radius: var(--border-radius);
930
- padding: var(--spacing-md);
931
- transition: var(--transition);
932
- }
933
-
934
- .resource-card:hover {
935
- box-shadow: 0 4px 12px var(--shadow);
936
- transform: translateY(-2px);
937
- }
938
-
939
- .resource-card h3 {
940
- color: var(--text-dark);
941
- margin-bottom: var(--spacing-xs);
942
- }
943
-
944
- .resource-card p {
945
- color: var(--text-light);
946
- margin-bottom: var(--spacing-sm);
947
- }
948
-
949
- .resource-link {
950
- color: var(--primary);
951
- font-weight: 600;
952
- display: inline-block;
953
- margin-top: var(--spacing-xs);
954
- }
955
-
956
- .resource-link:hover {
957
- color: var(--primary-dark);
958
- }
959
-
960
- .features-overview {
961
- margin: var(--spacing-xl) 0;
962
- }
963
-
964
- .features-overview h2 {
965
- text-align: center;
966
- margin-bottom: var(--spacing-md);
967
- }
968
-
969
- .feature-list {
970
- max-width: 800px;
971
- margin: 0 auto;
972
- }
973
-
974
- .feature-item {
975
- padding: var(--spacing-sm);
976
- margin-bottom: var(--spacing-sm);
977
- background: var(--white);
978
- color: var(--text-dark);
979
- border-left: 4px solid var(--primary);
980
- border-radius: var(--border-radius);
981
- }
982
-
983
- .feature-item h4 {
984
- color: var(--text-dark);
985
- margin-bottom: var(--spacing-xs);
986
- }
987
-
988
- .feature-item p {
989
- color: var(--text-light);
990
- margin-bottom: 0;
991
- }
992
-
993
- .getting-started {
994
- margin: var(--spacing-xl) 0;
995
- padding: var(--spacing-lg);
996
- background: var(--white);
997
- border-radius: var(--border-radius);
998
- border: 1px solid var(--border);
999
- }
1000
-
1001
- .getting-started h2 {
1002
- text-align: center;
1003
- margin-bottom: var(--spacing-md);
1004
- }
1005
-
1006
- .steps-list {
1007
- max-width: 700px;
1008
- margin: 0 auto;
1009
- padding-left: var(--spacing-md);
1010
- }
1011
-
1012
- .steps-list li {
1013
- margin-bottom: var(--spacing-sm);
1014
- padding-left: var(--spacing-xs);
1015
- color: var(--text-light);
1016
- }
1017
-
1018
- .steps-list strong {
1019
- color: var(--text-dark);
1020
- }
1021
-
1022
- .tips-section {
1023
- margin: var(--spacing-xl) 0;
1024
- padding: var(--spacing-lg);
1025
- background: var(--secondary);
1026
- color: var(--text-dark);
1027
- border-radius: var(--border-radius);
1028
- }
1029
-
1030
- .tips-section h2 {
1031
- text-align: center;
1032
- margin-bottom: var(--spacing-md);
1033
- }
1034
-
1035
- .tips-list {
1036
- max-width: 700px;
1037
- margin: 0 auto;
1038
- list-style: none;
1039
- }
1040
-
1041
- .tips-list li {
1042
- padding: var(--spacing-sm);
1043
- margin-bottom: var(--spacing-sm);
1044
- background: var(--white);
1045
- color: var(--text-dark);
1046
- border-radius: var(--border-radius);
1047
- border-left: 3px solid var(--accent);
1048
- }
1049
-
1050
- .tips-list strong {
1051
- color: var(--text-dark);
1052
- }
1053
-
1054
- /* ============================================
1055
- Utility Classes
1056
- ============================================ */
1057
-
1058
- /* Spacing */
1059
- .mt-xs {
1060
- margin-top: var(--spacing-xs);
1061
- }
1062
- .mt-sm {
1063
- margin-top: var(--spacing-sm);
1064
- }
1065
- .mt-md {
1066
- margin-top: var(--spacing-md);
1067
- }
1068
- .mt-lg {
1069
- margin-top: var(--spacing-lg);
1070
- }
1071
- .mt-xl {
1072
- margin-top: var(--spacing-xl);
1073
- }
1074
-
1075
- .mb-xs {
1076
- margin-bottom: var(--spacing-xs);
1077
- }
1078
- .mb-sm {
1079
- margin-bottom: var(--spacing-sm);
1080
- }
1081
- .mb-md {
1082
- margin-bottom: var(--spacing-md);
1083
- }
1084
- .mb-lg {
1085
- margin-bottom: var(--spacing-lg);
1086
- }
1087
- .mb-xl {
1088
- margin-bottom: var(--spacing-xl);
1089
- }
1090
-
1091
- .pt-xs {
1092
- padding-top: var(--spacing-xs);
1093
- }
1094
- .pt-sm {
1095
- padding-top: var(--spacing-sm);
1096
- }
1097
- .pt-md {
1098
- padding-top: var(--spacing-md);
1099
- }
1100
- .pt-lg {
1101
- padding-top: var(--spacing-lg);
1102
- }
1103
- .pt-xl {
1104
- padding-top: var(--spacing-xl);
1105
- }
1106
-
1107
- .pb-xs {
1108
- padding-bottom: var(--spacing-xs);
1109
- }
1110
- .pb-sm {
1111
- padding-bottom: var(--spacing-sm);
1112
- }
1113
- .pb-md {
1114
- padding-bottom: var(--spacing-md);
1115
- }
1116
- .pb-lg {
1117
- padding-bottom: var(--spacing-lg);
1118
- }
1119
- .pb-xl {
1120
- padding-bottom: var(--spacing-xl);
1121
- }
1122
-
1123
- /* Text Alignment */
1124
- .text-center {
1125
- text-align: center;
1126
- }
1127
- .text-left {
1128
- text-align: left;
1129
- }
1130
- .text-right {
1131
- text-align: right;
1132
- }
1133
-
1134
- /* Display */
1135
- .hidden {
1136
- display: none;
1137
- }
1138
- .block {
1139
- display: block;
1140
- }
1141
- .inline-block {
1142
- display: inline-block;
1143
- }
1144
- .flex {
1145
- display: flex;
1146
- }
1147
- .grid {
1148
- display: grid;
1149
- }
1150
-
1151
- /* Flexbox Utilities */
1152
- .flex-center {
1153
- display: flex;
1154
- justify-content: center;
1155
- align-items: center;
1156
- }
1157
-
1158
- .flex-between {
1159
- display: flex;
1160
- justify-content: space-between;
1161
- align-items: center;
1162
- }
1163
-
1164
- .flex-column {
1165
- display: flex;
1166
- flex-direction: column;
1167
- }
1168
-
1169
- .gap-xs {
1170
- gap: var(--spacing-xs);
1171
- }
1172
- .gap-sm {
1173
- gap: var(--spacing-sm);
1174
- }
1175
- .gap-md {
1176
- gap: var(--spacing-md);
1177
- }
1178
- .gap-lg {
1179
- gap: var(--spacing-lg);
1180
- }
1181
-
1182
- /* ============================================
1183
- Responsive Breakpoints
1184
- ============================================ */
1185
-
1186
- /* Tablet: 768px - 1024px */
1187
- @media (max-width: 1024px) {
1188
- :root {
1189
- --spacing-lg: 2.5rem;
1190
- --spacing-xl: 3rem;
1191
- }
1192
-
1193
- .hero h1 {
1194
- font-size: 2.5rem;
1195
- }
1196
-
1197
- .features-grid {
1198
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1199
- }
1200
- }
1201
-
1202
- /* Mobile: < 768px */
1203
- @media (max-width: 768px) {
1204
- :root {
1205
- --spacing-md: 1.5rem;
1206
- --spacing-lg: 2rem;
1207
- --spacing-xl: 2.5rem;
1208
- }
1209
-
1210
- html {
1211
- font-size: 14px;
1212
- }
1213
-
1214
- h1 {
1215
- font-size: 2rem;
1216
- }
1217
-
1218
- h2 {
1219
- font-size: 1.75rem;
1220
- }
1221
-
1222
- h3 {
1223
- font-size: 1.25rem;
1224
- }
1225
-
1226
- .hero h1 {
1227
- font-size: 2rem;
1228
- }
1229
-
1230
- .hero p {
1231
- font-size: 1rem;
1232
- }
1233
-
1234
- .navbar .container {
1235
- flex-direction: column;
1236
- gap: var(--spacing-sm);
1237
- }
1238
-
1239
- .nav-links {
1240
- flex-direction: column;
1241
- gap: var(--spacing-xs);
1242
- width: 100%;
1243
- }
1244
-
1245
- .nav-link {
1246
- display: block;
1247
- text-align: center;
1248
- }
1249
-
1250
- .header-content {
1251
- flex-direction: column;
1252
- gap: var(--spacing-sm);
1253
- }
1254
-
1255
- .nav {
1256
- flex-direction: column;
1257
- gap: var(--spacing-xs);
1258
- width: 100%;
1259
- }
1260
-
1261
- nav ul {
1262
- flex-direction: column;
1263
- gap: var(--spacing-xs);
1264
- width: 100%;
1265
- }
1266
-
1267
- nav a {
1268
- display: block;
1269
- text-align: center;
1270
- }
1271
-
1272
- .hero-buttons {
1273
- flex-direction: column;
1274
- align-items: stretch;
1275
- }
1276
-
1277
- .btn {
1278
- width: 100%;
1279
- }
1280
-
1281
- .features-grid,
1282
- .feature-grid {
1283
- grid-template-columns: 1fr;
1284
- }
1285
-
1286
- .demo-grid {
1287
- grid-template-columns: 1fr;
1288
- }
1289
-
1290
- .examples-grid {
1291
- grid-template-columns: 1fr;
1292
- }
1293
-
1294
- form {
1295
- padding: var(--spacing-sm);
1296
- }
1297
- }
1298
-
1299
- /* Small Mobile: < 480px */
1300
- @media (max-width: 480px) {
1301
- .container {
1302
- padding: 0 var(--spacing-xs);
1303
- }
1304
-
1305
- .hero {
1306
- padding: var(--spacing-md) 0;
1307
- }
1308
-
1309
- .features,
1310
- .form-section,
1311
- .demo-section {
1312
- padding: var(--spacing-md) 0;
1313
- }
1314
- }
1315
-
1316
- /* ============================================
1317
- Animations & Transitions
1318
- ============================================ */
1319
-
1320
- @keyframes fadeIn {
1321
- from {
1322
- opacity: 0;
1323
- transform: translateY(20px);
1324
- }
1325
- to {
1326
- opacity: 1;
1327
- transform: translateY(0);
1328
- }
1329
- }
1330
-
1331
- .fade-in {
1332
- animation: fadeIn 0.6s ease-out;
1333
- }
1334
-
1335
- /* Smooth page transitions */
1336
- [odac-page] {
1337
- animation: fadeIn 0.4s ease-out;
1338
- }
1339
-
1340
- /* Loading state */
1341
- .loading {
1342
- opacity: 0.6;
1343
- pointer-events: none;
1344
- }
1345
-
1346
- /* Hover effects for interactive elements */
1347
- .interactive {
1348
- transition: var(--transition);
1349
- cursor: pointer;
1350
- }
1351
-
1352
- .interactive:hover {
1353
- transform: scale(1.02);
1354
- }
1355
-
1356
- /* Focus visible for accessibility */
1357
- *:focus-visible {
1358
- outline: 2px solid var(--primary);
1359
- outline-offset: 2px;
1360
- }
1361
-
1362
- /* Getting Started Page Styles */
1363
- .hero-actions {
1364
- display: flex;
1365
- gap: 1rem;
1366
- margin-top: 2rem;
1367
- flex-wrap: wrap;
1368
- justify-content: center;
1369
- }
1370
-
1371
- .hero-actions .btn {
1372
- text-decoration: none;
1373
- color: white;
1374
- }
1375
-
1376
- .hero-actions .btn-primary {
1377
- color: white !important;
1378
- }
1379
-
1380
- .hero-actions .btn-primary:hover {
1381
- color: white !important;
1382
- }
1383
-
1384
- .hero-actions .btn-secondary {
1385
- color: var(--text-primary);
1386
- }
1387
-
1388
- .hero-actions .btn-secondary:hover {
1389
- color: var(--text-primary);
1390
- }
1391
-
1392
- .structure-grid {
1393
- display: grid;
1394
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1395
- gap: 2rem;
1396
- margin-top: 2rem;
1397
- }
1398
-
1399
- .structure-item {
1400
- padding: 1.5rem;
1401
- background: var(--card-bg);
1402
- color: var(--text-primary);
1403
- border-radius: 8px;
1404
- border: 1px solid var(--border);
1405
- }
1406
-
1407
- .structure-icon {
1408
- font-size: 2.5rem;
1409
- margin-bottom: 1rem;
1410
- }
1411
-
1412
- .structure-title {
1413
- font-size: 1.25rem;
1414
- font-weight: 600;
1415
- margin-bottom: 0.5rem;
1416
- color: var(--text-primary);
1417
- }
1418
-
1419
- .structure-description {
1420
- color: var(--text-secondary);
1421
- margin-bottom: 1rem;
1422
- line-height: 1.6;
1423
- }
1424
-
1425
- .structure-path {
1426
- display: inline-block;
1427
- padding: 0.25rem 0.75rem;
1428
- background: var(--code-bg);
1429
- border-radius: 4px;
1430
- font-family: var(--font-mono);
1431
- font-size: 0.875rem;
1432
- color: var(--code-color);
1433
- border: 1px solid var(--border);
1434
- }
1435
-
1436
- .quickstart-grid {
1437
- display: flex;
1438
- flex-direction: column;
1439
- gap: 2rem;
1440
- margin-top: 2rem;
1441
- max-width: 900px;
1442
- margin-left: auto;
1443
- margin-right: auto;
1444
- }
1445
-
1446
- .quickstart-step {
1447
- position: relative;
1448
- padding: 2rem 1.5rem;
1449
- background: var(--card-bg);
1450
- color: var(--text-primary);
1451
- border-radius: 8px;
1452
- border: 1px solid var(--border);
1453
- }
1454
-
1455
- .step-number {
1456
- position: absolute;
1457
- top: -1rem;
1458
- left: 1.5rem;
1459
- width: 2.5rem;
1460
- height: 2.5rem;
1461
- display: flex;
1462
- align-items: center;
1463
- justify-content: center;
1464
- background: var(--primary);
1465
- color: white;
1466
- border-radius: 50%;
1467
- font-weight: 700;
1468
- font-size: 1.25rem;
1469
- box-shadow: 0 4px 12px rgba(99, 102, 241, 0.4);
1470
- }
1471
-
1472
- .step-title {
1473
- font-size: 1.125rem;
1474
- font-weight: 600;
1475
- margin-bottom: 0.75rem;
1476
- color: var(--text-primary);
1477
- }
1478
-
1479
- .step-description {
1480
- color: var(--text-secondary);
1481
- line-height: 1.6;
1482
- margin-bottom: 1rem;
1483
- }
1484
-
1485
- .code-snippet {
1486
- background: var(--code-bg);
1487
- color: var(--code-color);
1488
- padding: 1rem;
1489
- border-radius: 6px;
1490
- overflow-x: auto;
1491
- font-family: var(--font-mono);
1492
- font-size: 0.875rem;
1493
- line-height: 1.5;
1494
- border: 1px solid var(--border);
1495
- }
1496
-
1497
- .code-snippet code {
1498
- background: none;
1499
- padding: 0;
1500
- color: inherit;
1501
- }
1502
-
1503
- .features-list {
1504
- display: flex;
1505
- flex-direction: column;
1506
- gap: 1.5rem;
1507
- margin-top: 2rem;
1508
- }
1509
-
1510
- .feature-item {
1511
- display: flex;
1512
- gap: 1.5rem;
1513
- padding: 1.5rem;
1514
- background: var(--card-bg);
1515
- color: var(--text-primary);
1516
- border-radius: 8px;
1517
- border: 1px solid var(--border);
1518
- transition:
1519
- transform 0.2s,
1520
- box-shadow 0.2s,
1521
- border-color 0.2s;
1522
- }
1523
-
1524
- .feature-item:hover {
1525
- transform: translateY(-2px);
1526
- box-shadow: 0 8px 24px rgba(99, 102, 241, 0.2);
1527
- border-color: var(--primary);
1528
- }
1529
-
1530
- .feature-item .feature-icon {
1531
- font-size: 2rem;
1532
- flex-shrink: 0;
1533
- }
1534
-
1535
- .feature-content h3 {
1536
- font-size: 1.125rem;
1537
- font-weight: 600;
1538
- margin-bottom: 0.5rem;
1539
- color: var(--text-primary);
1540
- }
1541
-
1542
- .feature-content p {
1543
- color: var(--text-secondary);
1544
- line-height: 1.6;
1545
- }
1546
-
1547
- .feature-content code {
1548
- background: var(--code-bg);
1549
- padding: 0.125rem 0.375rem;
1550
- border-radius: 3px;
1551
- font-family: var(--font-mono);
1552
- font-size: 0.875rem;
1553
- color: var(--code-color);
1554
- border: 1px solid var(--border);
1555
- }
1556
-
1557
- .resources {
1558
- background: var(--bg-secondary);
1559
- color: var(--text-primary);
1560
- padding: 4rem 0;
1561
- border-top: 1px solid var(--border);
1562
- }
1563
-
1564
- .resources-grid {
1565
- display: grid;
1566
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1567
- gap: 2rem;
1568
- margin-top: 2rem;
1569
- }
1570
-
1571
- .resource-card {
1572
- display: block;
1573
- padding: 2rem;
1574
- background: var(--bg-primary);
1575
- color: var(--text-primary);
1576
- border-radius: 8px;
1577
- border: 1px solid var(--border);
1578
- text-decoration: none;
1579
- transition:
1580
- transform 0.2s,
1581
- box-shadow 0.2s,
1582
- border-color 0.2s;
1583
- }
1584
-
1585
- .resource-card:hover {
1586
- transform: translateY(-4px);
1587
- box-shadow: 0 8px 24px rgba(99, 102, 241, 0.3);
1588
- border-color: var(--primary);
1589
- }
1590
-
1591
- .resource-icon {
1592
- font-size: 3rem;
1593
- margin-bottom: 1rem;
1594
- }
1595
-
1596
- .resource-card h3 {
1597
- font-size: 1.25rem;
1598
- font-weight: 600;
1599
- margin-bottom: 0.5rem;
1600
- color: var(--text-primary);
1601
- }
1602
-
1603
- .resource-card p {
1604
- color: var(--text-secondary);
1605
- line-height: 1.6;
1606
- }
1607
-
1608
- .next-steps {
1609
- margin-top: 3rem;
1610
- padding: 2rem;
1611
- background: var(--bg-primary);
1612
- border-radius: 8px;
1613
- border: 1px solid var(--border);
1614
- text-align: center;
1615
- }
1616
-
1617
- .next-steps h3 {
1618
- font-size: 1.5rem;
1619
- font-weight: 600;
1620
- margin-bottom: 1rem;
1621
- color: var(--text-primary);
1622
- }
1623
-
1624
- .next-steps p {
1625
- color: var(--text-secondary);
1626
- line-height: 1.8;
1627
- margin-bottom: 0.5rem;
1628
- }
1629
-
1630
- .next-steps code {
1631
- background: var(--code-bg);
1632
- padding: 0.125rem 0.5rem;
1633
- border-radius: 3px;
1634
- font-family: var(--font-mono);
1635
- font-size: 0.875rem;
1636
- color: var(--code-color);
1637
- border: 1px solid var(--border);
1638
- }
1639
-
1640
- .next-steps a {
1641
- color: var(--primary);
1642
- text-decoration: none;
1643
- font-weight: 500;
1644
- }
1645
-
1646
- .next-steps a:hover {
1647
- color: var(--primary-light);
1648
- text-decoration: underline;
1649
- }
1650
-
1651
- .section-description {
1652
- text-align: center;
1653
- color: var(--text-secondary);
1654
- font-size: 1.125rem;
1655
- margin-top: 0.5rem;
1656
- max-width: 600px;
1657
- margin-left: auto;
1658
- margin-right: auto;
1659
- }
1660
-
1661
- /* Page Hero (for About and Docs pages) */
1662
- .page-hero {
1663
- text-align: center;
1664
- padding: 3rem 0 2rem;
1665
- border-bottom: 1px solid var(--border);
1666
- margin-bottom: 3rem;
1667
- }
1668
-
1669
- .page-hero h1 {
1670
- font-size: 2.5rem;
1671
- margin-bottom: 1rem;
1672
- }
1673
-
1674
- .page-hero .lead {
1675
- font-size: 1.25rem;
1676
- color: var(--text-secondary);
1677
- max-width: 700px;
1678
- margin: 0 auto;
1679
- }
1680
-
1681
- /* Content Sections */
1682
- .content-section {
1683
- margin-bottom: 3rem;
1684
- }
1685
-
1686
- .content-section h2 {
1687
- font-size: 2rem;
1688
- margin-bottom: 1.5rem;
1689
- color: var(--text-primary);
1690
- }
1691
-
1692
- .content-section p {
1693
- font-size: 1.125rem;
1694
- line-height: 1.8;
1695
- color: var(--text-secondary);
1696
- margin-bottom: 1.5rem;
1697
- }
1698
-
1699
- .content-section code {
1700
- background: var(--code-bg);
1701
- padding: 0.125rem 0.5rem;
1702
- border-radius: 3px;
1703
- font-family: var(--font-mono);
1704
- font-size: 0.875rem;
1705
- color: var(--code-color);
1706
- border: 1px solid var(--border);
1707
- }
1708
-
1709
- /* Component Grid */
1710
- .component-grid {
1711
- display: grid;
1712
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1713
- gap: 1.5rem;
1714
- margin-top: 2rem;
1715
- }
1716
-
1717
- .component-card {
1718
- padding: 1.5rem;
1719
- background: var(--card-bg);
1720
- border-radius: 8px;
1721
- border: 1px solid var(--border);
1722
- transition:
1723
- transform 0.2s,
1724
- border-color 0.2s;
1725
- }
1726
-
1727
- .component-card:hover {
1728
- transform: translateY(-2px);
1729
- border-color: var(--primary);
1730
- }
1731
-
1732
- .component-card h3 {
1733
- font-size: 1.25rem;
1734
- margin-bottom: 0.75rem;
1735
- color: var(--text-primary);
1736
- }
1737
-
1738
- .component-card p {
1739
- color: var(--text-secondary);
1740
- line-height: 1.6;
1741
- margin: 0;
1742
- }
1743
-
1744
- /* Links Grid */
1745
- .links-grid {
1746
- display: grid;
1747
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1748
- gap: 1.5rem;
1749
- margin-top: 2rem;
1750
- }
1751
-
1752
- .link-card {
1753
- display: block;
1754
- padding: 2rem;
1755
- background: var(--card-bg);
1756
- border-radius: 8px;
1757
- border: 1px solid var(--border);
1758
- text-decoration: none;
1759
- color: inherit;
1760
- transition:
1761
- transform 0.2s,
1762
- border-color 0.2s,
1763
- box-shadow 0.2s;
1764
- }
1765
-
1766
- .link-card:hover {
1767
- transform: translateY(-4px);
1768
- border-color: var(--primary);
1769
- box-shadow: 0 8px 24px rgba(99, 102, 241, 0.3);
1770
- }
1771
-
1772
- .link-card h3 {
1773
- font-size: 1.25rem;
1774
- margin-bottom: 0.5rem;
1775
- color: var(--text-primary);
1776
- }
1777
-
1778
- .link-card p {
1779
- color: var(--text-secondary);
1780
- margin: 0;
1781
- }
1782
-
1783
- /* Example Sections */
1784
- .example-section {
1785
- margin-bottom: 4rem;
1786
- }
1787
-
1788
- .example-section h2 {
1789
- font-size: 2rem;
1790
- margin-bottom: 1rem;
1791
- color: var(--text-primary);
1792
- }
1793
-
1794
- .example-section > p {
1795
- font-size: 1.125rem;
1796
- color: var(--text-secondary);
1797
- margin-bottom: 2rem;
1798
- }
1799
-
1800
- .code-example {
1801
- margin-bottom: 2rem;
1802
- }
1803
-
1804
- .code-example h3 {
1805
- font-size: 1rem;
1806
- font-weight: 600;
1807
- color: var(--text-secondary);
1808
- margin-bottom: 0.5rem;
1809
- text-transform: uppercase;
1810
- letter-spacing: 0.05em;
1811
- }
1812
-
1813
- .code-example .code-block {
1814
- background: var(--code-bg);
1815
- border: 1px solid var(--border);
1816
- border-radius: 8px;
1817
- padding: 1.5rem;
1818
- overflow-x: auto;
1819
- }
1820
-
1821
- .code-example .code-block code {
1822
- font-family: var(--font-mono);
1823
- font-size: 0.875rem;
1824
- line-height: 1.6;
1825
- color: var(--code-color);
1826
- background: none;
1827
- border: none;
1828
- padding: 0;
1829
- }
1830
-
1831
- .code-example .code-block pre {
1832
- margin: 0;
1833
- white-space: pre-wrap;
1834
- word-wrap: break-word;
1835
- }