docyard 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -1
  3. data/CHANGELOG.md +43 -1
  4. data/lib/docyard/build/asset_bundler.rb +22 -7
  5. data/lib/docyard/build/file_copier.rb +49 -27
  6. data/lib/docyard/build/sitemap_generator.rb +6 -6
  7. data/lib/docyard/build/static_generator.rb +85 -12
  8. data/lib/docyard/builder.rb +6 -6
  9. data/lib/docyard/components/aliases.rb +12 -0
  10. data/lib/docyard/components/processors/abbreviation_processor.rb +72 -0
  11. data/lib/docyard/components/processors/accordion_processor.rb +81 -0
  12. data/lib/docyard/components/processors/badge_processor.rb +72 -0
  13. data/lib/docyard/components/processors/callout_processor.rb +8 -2
  14. data/lib/docyard/components/processors/cards_processor.rb +100 -0
  15. data/lib/docyard/components/processors/code_block_options_preprocessor.rb +23 -2
  16. data/lib/docyard/components/processors/code_block_processor.rb +6 -0
  17. data/lib/docyard/components/processors/code_group_processor.rb +198 -0
  18. data/lib/docyard/components/processors/code_snippet_import_preprocessor.rb +6 -1
  19. data/lib/docyard/components/processors/custom_anchor_processor.rb +42 -0
  20. data/lib/docyard/components/processors/file_tree_processor.rb +151 -0
  21. data/lib/docyard/components/processors/image_caption_processor.rb +96 -0
  22. data/lib/docyard/components/processors/include_processor.rb +86 -0
  23. data/lib/docyard/components/processors/steps_processor.rb +89 -0
  24. data/lib/docyard/components/processors/tabs_processor.rb +9 -1
  25. data/lib/docyard/components/processors/tooltip_processor.rb +57 -0
  26. data/lib/docyard/components/processors/video_embed_processor.rb +196 -0
  27. data/lib/docyard/components/support/code_group/html_builder.rb +122 -0
  28. data/lib/docyard/components/support/markdown_code_block_helper.rb +56 -0
  29. data/lib/docyard/config/branding_resolver.rb +121 -17
  30. data/lib/docyard/config/constants.rb +6 -4
  31. data/lib/docyard/config/logo_detector.rb +39 -0
  32. data/lib/docyard/config/validator.rb +122 -99
  33. data/lib/docyard/config.rb +40 -42
  34. data/lib/docyard/initializer.rb +15 -76
  35. data/lib/docyard/navigation/breadcrumb_builder.rb +133 -0
  36. data/lib/docyard/navigation/prev_next_builder.rb +4 -1
  37. data/lib/docyard/navigation/sidebar/children_discoverer.rb +51 -0
  38. data/lib/docyard/navigation/sidebar/config_parser.rb +136 -108
  39. data/lib/docyard/navigation/sidebar/file_resolver.rb +90 -0
  40. data/lib/docyard/navigation/sidebar/file_system_scanner.rb +2 -1
  41. data/lib/docyard/navigation/sidebar/item.rb +50 -7
  42. data/lib/docyard/navigation/sidebar/local_config_loader.rb +51 -0
  43. data/lib/docyard/navigation/sidebar/metadata_extractor.rb +71 -0
  44. data/lib/docyard/navigation/sidebar/metadata_reader.rb +51 -0
  45. data/lib/docyard/navigation/sidebar/path_prefixer.rb +34 -0
  46. data/lib/docyard/navigation/sidebar/renderer.rb +60 -38
  47. data/lib/docyard/navigation/sidebar/sorter.rb +21 -0
  48. data/lib/docyard/navigation/sidebar/tree_builder.rb +100 -26
  49. data/lib/docyard/navigation/sidebar/tree_filter.rb +55 -0
  50. data/lib/docyard/navigation/sidebar_builder.rb +105 -36
  51. data/lib/docyard/rendering/icon_helpers.rb +13 -0
  52. data/lib/docyard/rendering/icons/phosphor.rb +26 -1
  53. data/lib/docyard/rendering/markdown.rb +29 -1
  54. data/lib/docyard/rendering/renderer.rb +75 -34
  55. data/lib/docyard/rendering/template_resolver.rb +172 -0
  56. data/lib/docyard/routing/fallback_resolver.rb +92 -0
  57. data/lib/docyard/search/build_indexer.rb +1 -1
  58. data/lib/docyard/search/dev_indexer.rb +51 -6
  59. data/lib/docyard/search/pagefind_support.rb +2 -0
  60. data/lib/docyard/server/asset_handler.rb +25 -19
  61. data/lib/docyard/server/pagefind_handler.rb +63 -0
  62. data/lib/docyard/server/preview_server.rb +1 -1
  63. data/lib/docyard/server/rack_application.rb +81 -64
  64. data/lib/docyard/templates/assets/css/code.css +18 -51
  65. data/lib/docyard/templates/assets/css/components/abbreviation.css +86 -0
  66. data/lib/docyard/templates/assets/css/components/accordion.css +138 -0
  67. data/lib/docyard/templates/assets/css/components/badges.css +47 -0
  68. data/lib/docyard/templates/assets/css/components/banner.css +202 -0
  69. data/lib/docyard/templates/assets/css/components/breadcrumbs.css +143 -0
  70. data/lib/docyard/templates/assets/css/components/callout.css +67 -67
  71. data/lib/docyard/templates/assets/css/components/cards.css +100 -0
  72. data/lib/docyard/templates/assets/css/components/code-block.css +190 -282
  73. data/lib/docyard/templates/assets/css/components/code-group.css +281 -0
  74. data/lib/docyard/templates/assets/css/components/figure.css +22 -0
  75. data/lib/docyard/templates/assets/css/components/file-tree.css +124 -0
  76. data/lib/docyard/templates/assets/css/components/heading-anchor.css +36 -15
  77. data/lib/docyard/templates/assets/css/components/icon.css +0 -1
  78. data/lib/docyard/templates/assets/css/components/lightbox.css +65 -0
  79. data/lib/docyard/templates/assets/css/components/logo.css +0 -2
  80. data/lib/docyard/templates/assets/css/components/nav-menu.css +237 -0
  81. data/lib/docyard/templates/assets/css/components/navigation.css +193 -167
  82. data/lib/docyard/templates/assets/css/components/prev-next.css +68 -48
  83. data/lib/docyard/templates/assets/css/components/search.css +186 -174
  84. data/lib/docyard/templates/assets/css/components/steps.css +122 -0
  85. data/lib/docyard/templates/assets/css/components/tab-bar.css +163 -0
  86. data/lib/docyard/templates/assets/css/components/table-of-contents.css +127 -114
  87. data/lib/docyard/templates/assets/css/components/tabs.css +119 -160
  88. data/lib/docyard/templates/assets/css/components/theme-toggle.css +48 -44
  89. data/lib/docyard/templates/assets/css/components/tooltip.css +113 -0
  90. data/lib/docyard/templates/assets/css/components/video.css +41 -0
  91. data/lib/docyard/templates/assets/css/landing.css +815 -0
  92. data/lib/docyard/templates/assets/css/layout.css +489 -87
  93. data/lib/docyard/templates/assets/css/main.css +1 -3
  94. data/lib/docyard/templates/assets/css/markdown.css +113 -93
  95. data/lib/docyard/templates/assets/css/reset.css +0 -3
  96. data/lib/docyard/templates/assets/css/typography.css +43 -41
  97. data/lib/docyard/templates/assets/css/variables.css +268 -208
  98. data/lib/docyard/templates/assets/favicon.svg +7 -8
  99. data/lib/docyard/templates/assets/fonts/Inter-Variable.ttf +0 -0
  100. data/lib/docyard/templates/assets/js/components/abbreviation.js +85 -0
  101. data/lib/docyard/templates/assets/js/components/banner.js +81 -0
  102. data/lib/docyard/templates/assets/js/components/code-block.js +24 -42
  103. data/lib/docyard/templates/assets/js/components/code-group.js +283 -0
  104. data/lib/docyard/templates/assets/js/components/file-tree.js +39 -0
  105. data/lib/docyard/templates/assets/js/components/heading-anchor.js +26 -24
  106. data/lib/docyard/templates/assets/js/components/lightbox.js +72 -0
  107. data/lib/docyard/templates/assets/js/components/navigation.js +181 -70
  108. data/lib/docyard/templates/assets/js/components/search.js +0 -75
  109. data/lib/docyard/templates/assets/js/components/sidebar-toggle.js +29 -0
  110. data/lib/docyard/templates/assets/js/components/tab-navigation.js +145 -0
  111. data/lib/docyard/templates/assets/js/components/table-of-contents.js +153 -66
  112. data/lib/docyard/templates/assets/js/components/tabs.js +31 -69
  113. data/lib/docyard/templates/assets/js/components/tooltip.js +118 -0
  114. data/lib/docyard/templates/assets/js/theme.js +0 -3
  115. data/lib/docyard/templates/assets/logo-dark.svg +8 -2
  116. data/lib/docyard/templates/assets/logo.svg +7 -4
  117. data/lib/docyard/templates/config/docyard.yml.erb +37 -34
  118. data/lib/docyard/templates/errors/404.html.erb +1 -1
  119. data/lib/docyard/templates/errors/500.html.erb +1 -1
  120. data/lib/docyard/templates/layouts/default.html.erb +19 -67
  121. data/lib/docyard/templates/layouts/splash.html.erb +177 -0
  122. data/lib/docyard/templates/partials/_accordion.html.erb +9 -0
  123. data/lib/docyard/templates/partials/_banner.html.erb +27 -0
  124. data/lib/docyard/templates/partials/_breadcrumbs.html.erb +24 -0
  125. data/lib/docyard/templates/partials/_card.html.erb +23 -0
  126. data/lib/docyard/templates/partials/_code_block.html.erb +5 -3
  127. data/lib/docyard/templates/partials/_doc_footer.html.erb +25 -0
  128. data/lib/docyard/templates/partials/_features.html.erb +15 -0
  129. data/lib/docyard/templates/partials/_footer.html.erb +42 -0
  130. data/lib/docyard/templates/partials/_head.html.erb +22 -0
  131. data/lib/docyard/templates/partials/_header.html.erb +49 -0
  132. data/lib/docyard/templates/partials/_heading_anchor.html.erb +3 -1
  133. data/lib/docyard/templates/partials/_hero.html.erb +27 -0
  134. data/lib/docyard/templates/partials/_nav_group.html.erb +31 -11
  135. data/lib/docyard/templates/partials/_nav_leaf.html.erb +4 -1
  136. data/lib/docyard/templates/partials/_nav_menu.html.erb +42 -0
  137. data/lib/docyard/templates/partials/_nav_nested_section.html.erb +11 -0
  138. data/lib/docyard/templates/partials/_nav_section.html.erb +1 -1
  139. data/lib/docyard/templates/partials/_prev_next.html.erb +8 -2
  140. data/lib/docyard/templates/partials/_scripts.html.erb +7 -0
  141. data/lib/docyard/templates/partials/_search_modal.html.erb +2 -6
  142. data/lib/docyard/templates/partials/_search_trigger.html.erb +2 -6
  143. data/lib/docyard/templates/partials/_sidebar.html.erb +21 -4
  144. data/lib/docyard/templates/partials/_step.html.erb +14 -0
  145. data/lib/docyard/templates/partials/_tab_bar.html.erb +25 -0
  146. data/lib/docyard/templates/partials/_table_of_contents.html.erb +12 -12
  147. data/lib/docyard/templates/partials/_table_of_contents_toggle.html.erb +1 -3
  148. data/lib/docyard/templates/partials/_tabs.html.erb +2 -2
  149. data/lib/docyard/templates/partials/_theme_toggle.html.erb +2 -11
  150. data/lib/docyard/version.rb +1 -1
  151. metadata +70 -5
  152. data/lib/docyard/templates/markdown/getting-started/installation.md.erb +0 -77
  153. data/lib/docyard/templates/markdown/guides/configuration.md.erb +0 -202
  154. data/lib/docyard/templates/markdown/guides/markdown-features.md.erb +0 -247
  155. data/lib/docyard/templates/markdown/index.md.erb +0 -82
@@ -1,147 +1,187 @@
1
- /* Design Tokens */
1
+ @font-face {
2
+ font-family: 'Inter';
3
+ src: url('/_docyard/fonts/Inter-Variable.ttf') format('truetype');
4
+ font-weight: 100 900;
5
+ font-style: normal;
6
+ font-display: optional;
7
+ }
2
8
 
3
9
  :root {
4
- /* Colors - Light Theme */
5
- --color-bg: #ffffff;
6
- --color-bg-secondary: #f9fafb;
7
- --color-bg-tertiary: #f3f4f6;
8
- --color-sidebar-bg: #f8fafc;
9
- --color-text: #0d1117;
10
- --color-text-secondary: #57606a;
11
- --color-text-tertiary: #8c959f;
12
- --color-border: #e4e7eb;
13
- --color-border-secondary: #f3f4f6;
14
- --color-primary: #2563eb;
15
- --color-primary-rgb: 37, 99, 235;
16
- --color-primary-hover: #1d4ed8;
17
- --color-primary-light: #eff6ff;
18
- --color-link: #0969da;
19
- --color-link-hover: #0550ae;
20
-
21
- /* Code colors */
22
- --color-code-bg: #f4f4f5;
23
- --color-code-text: #18181b;
24
- --color-code-border: transparent;
25
-
26
- /* Semantic colors */
27
- --color-success: #116329;
28
- --color-success-bg: #dafbe1;
29
- --color-warning: #7d4e00;
30
- --color-warning-bg: #fff8c5;
31
- --color-error: #cf222e;
32
- --color-error-bg: #ffebe9;
33
- --color-info: #0969da;
34
- --color-info-bg: #ddf4ff;
35
-
36
- /* Diff colors - Light Theme */
37
- --color-diff-add-bg: rgba(34, 197, 94, 0.15);
38
- --color-diff-add-border: #22c55e;
39
- --color-diff-add-gutter-bg: rgba(34, 197, 94, 0.2);
40
- --color-diff-add-indicator: #166534;
41
-
42
- --color-diff-remove-bg: rgba(239, 68, 68, 0.15);
43
- --color-diff-remove-border: #ef4444;
44
- --color-diff-remove-gutter-bg: rgba(239, 68, 68, 0.2);
45
- --color-diff-remove-indicator: #991b1b;
46
-
47
- /* Code error/warning colors - Light Theme */
48
- --color-code-error-bg: rgba(239, 68, 68, 0.15);
49
- --color-code-error-border: #ef4444;
50
- --color-code-error-gutter-bg: rgba(239, 68, 68, 0.2);
51
- --color-code-error-indicator: #991b1b;
52
- --color-code-warning-bg: rgba(245, 158, 11, 0.15);
53
- --color-code-warning-border: #f59e0b;
54
- --color-code-warning-gutter-bg: rgba(245, 158, 11, 0.2);
55
- --color-code-warning-indicator: #78350f;
56
-
57
- /* Callout colors - shadcn inspired */
58
- --callout-note: #0ea5e9;
59
- --callout-note-text: #0c4a6e;
60
- --callout-note-bg: #f0f9ff;
61
- --callout-note-border: #bae6fd;
10
+ --background: oklch(1 0 0);
11
+ --foreground: oklch(0.141 0.005 285.823);
12
+ --card: oklch(1 0 0);
13
+ --card-foreground: oklch(0.141 0.005 285.823);
14
+ --popover: oklch(1 0 0);
15
+ --popover-foreground: oklch(0.141 0.005 285.823);
16
+ --primary: oklch(0.61 0.11 222);
17
+ --primary-foreground: oklch(0.98 0.02 201);
18
+ --secondary: oklch(0.967 0.001 286.375);
19
+ --secondary-foreground: oklch(0.21 0.006 285.885);
20
+ --muted: oklch(0.967 0.001 286.375);
21
+ --muted-foreground: oklch(0.552 0.016 285.938);
22
+ --accent: oklch(0.967 0.001 286.375);
23
+ --accent-foreground: oklch(0.21 0.006 285.885);
24
+ --destructive: oklch(0.577 0.245 27.325);
25
+ --border: oklch(0.92 0.004 286.32);
26
+ --input: oklch(0.92 0.004 286.32);
27
+ --ring: oklch(0.705 0.015 286.067);
28
+
29
+ --sidebar: var(--background);
30
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
31
+ --sidebar-primary: oklch(0.61 0.11 222);
32
+ --sidebar-primary-foreground: oklch(0.98 0.02 201);
33
+ --sidebar-accent: oklch(0.967 0.001 286.375);
34
+ --sidebar-accent-foreground: oklch(0.141 0.005 285.823);
35
+ --sidebar-border: oklch(0.92 0.004 286.32);
36
+ --sidebar-ring: oklch(0.705 0.015 286.067);
37
+
38
+ --chart-1: oklch(0.87 0.12 207);
39
+ --chart-2: oklch(0.80 0.13 212);
40
+ --chart-3: oklch(0.71 0.13 215);
41
+ --chart-4: oklch(0.61 0.11 222);
42
+ --chart-5: oklch(0.52 0.09 223);
43
+
44
+ --code-background: oklch(0.967 0.001 286.375);
45
+ --code-foreground: oklch(0.141 0.005 285.823);
46
+
47
+ --success: #16a34a;
48
+ --success-background: #f0fdf4;
49
+ --warning: #ca8a04;
50
+ --warning-background: #fefce8;
51
+ --error: #dc2626;
52
+ --error-background: #fef2f2;
53
+
54
+ --diff-add-background: rgba(34, 197, 94, 0.15);
55
+ --diff-add-border: #22c55e;
56
+ --diff-add-gutter: rgba(34, 197, 94, 0.2);
57
+ --diff-add-indicator: #166534;
58
+ --diff-remove-background: rgba(239, 68, 68, 0.15);
59
+ --diff-remove-border: #ef4444;
60
+ --diff-remove-gutter: rgba(239, 68, 68, 0.2);
61
+ --diff-remove-indicator: #991b1b;
62
+
63
+ --code-error-background: rgba(239, 68, 68, 0.15);
64
+ --code-error-border: #ef4444;
65
+ --code-error-gutter: rgba(239, 68, 68, 0.2);
66
+ --code-error-indicator: #991b1b;
67
+ --code-warning-background: rgba(245, 158, 11, 0.15);
68
+ --code-warning-border: #f59e0b;
69
+ --code-warning-gutter: rgba(245, 158, 11, 0.2);
70
+ --code-warning-indicator: #78350f;
62
71
 
72
+ --callout-note: #0ea5e9;
73
+ --callout-note-foreground: #0c4a6e;
74
+ --callout-note-background: rgba(240, 249, 255, 0.5);
75
+ --callout-note-border: rgba(14, 165, 233, 0.2);
63
76
  --callout-tip: #22c55e;
64
- --callout-tip-text: #14532d;
65
- --callout-tip-bg: #f0fdf4;
66
- --callout-tip-border: #bbf7d0;
67
-
77
+ --callout-tip-foreground: #14532d;
78
+ --callout-tip-background: rgba(240, 253, 244, 0.5);
79
+ --callout-tip-border: rgba(34, 197, 94, 0.2);
68
80
  --callout-important: #a855f7;
69
- --callout-important-text: #581c87;
70
- --callout-important-bg: #faf5ff;
71
- --callout-important-border: #e9d5ff;
72
-
81
+ --callout-important-foreground: #581c87;
82
+ --callout-important-background: rgba(250, 245, 255, 0.5);
83
+ --callout-important-border: rgba(168, 85, 247, 0.2);
73
84
  --callout-warning: #f59e0b;
74
- --callout-warning-text: #78350f;
75
- --callout-warning-bg: #fffbeb;
76
- --callout-warning-border: #fde68a;
77
-
85
+ --callout-warning-foreground: #78350f;
86
+ --callout-warning-background: rgba(255, 251, 235, 0.5);
87
+ --callout-warning-border: rgba(245, 158, 11, 0.2);
78
88
  --callout-danger: #ef4444;
79
- --callout-danger-text: #7f1d1d;
80
- --callout-danger-bg: #fef2f2;
81
- --callout-danger-border: #fecaca;
82
-
83
- /* Typography */
84
- --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
85
- --font-mono: ui-monospace, 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Menlo, Consolas, 'Courier New', monospace;
86
-
87
- /* Font sizes */
88
- --font-size-xs: 0.75rem; /* 12px */
89
- --font-size-sm: 0.875rem; /* 14px */
90
- --font-size-base: 1rem; /* 16px */
91
- --font-size-lg: 1.125rem; /* 18px */
92
- --font-size-xl: 1.25rem; /* 20px */
93
- --font-size-2xl: 1.5rem; /* 24px */
94
- --font-size-3xl: 1.875rem; /* 30px */
95
- --font-size-4xl: 2.25rem; /* 36px */
96
-
97
- /* Font weights */
98
- --font-weight-normal: 400;
99
- --font-weight-medium: 500;
100
- --font-weight-semibold: 600;
101
- --font-weight-bold: 700;
102
-
103
- /* Line heights */
104
- --line-height-tight: 1.25;
105
- --line-height-normal: 1.5;
106
- --line-height-relaxed: 1.75;
107
-
108
- /* Spacing scale */
109
- --space-1: 0.25rem; /* 4px */
110
- --space-2: 0.5rem; /* 8px */
111
- --space-3: 0.75rem; /* 12px */
112
- --space-4: 1rem; /* 16px */
113
- --space-5: 1.25rem; /* 20px */
114
- --space-6: 1.5rem; /* 24px */
115
- --space-8: 2rem; /* 32px */
116
- --space-10: 2.5rem; /* 40px */
117
- --space-12: 3rem; /* 48px */
118
- --space-16: 4rem; /* 64px */
119
- --space-20: 5rem; /* 80px */
120
-
121
- /* Layout */
122
- --sidebar-width: 288px;
123
- --toc-width: 280px;
124
- --header-height: 64px;
125
- --content-max-width: 800px;
126
- --layout-max-width: 1440px;
127
-
128
- /* Border radius */
129
- --radius-sm: 0.25rem; /* 4px */
130
- --radius-md: 0.375rem; /* 6px */
131
- --radius-lg: 0.5rem; /* 8px */
132
- --radius-xl: 0.75rem; /* 12px */
133
-
134
- /* Shadows */
89
+ --callout-danger-foreground: #7f1d1d;
90
+ --callout-danger-background: rgba(254, 242, 242, 0.5);
91
+ --callout-danger-border: rgba(239, 68, 68, 0.2);
92
+
93
+ --code-block-bg: oklab(0 0 0 / 0.03);
94
+ --code-block-border: oklab(0 0 0 / 0.06);
95
+ --code-block-header-bg: oklab(0 0 0 / 0.02);
96
+ --code-block-header-border: oklab(0 0 0 / 0.04);
97
+ --code-block-gutter-bg: transparent;
98
+ --code-block-copy-bg: oklab(0 0 0 / 0.03);
99
+ --code-block-copy-bg-hover: oklab(0 0 0 / 0.06);
100
+ --code-block-copy-shadow: 0 1px 2px oklab(0 0 0 / 0.04), 0 0 0 1px oklab(0 0 0 / 0.04);
101
+ --code-block-copy-shadow-hover: 0 2px 4px oklab(0 0 0 / 0.06), 0 0 0 1px oklab(0 0 0 / 0.06);
102
+ --code-block-copy-shadow-active: 0 0 1px oklab(0 0 0 / 0.03), 0 0 0 1px oklab(0 0 0 / 0.02);
103
+
104
+ --search-trigger-bg: oklab(0 0 0 / 0.045);
105
+ --search-trigger-bg-hover: oklab(0 0 0 / 0.08);
106
+ --search-trigger-border: oklab(0 0 0 / 0.08);
107
+ --search-trigger-border-hover: oklab(0 0 0 / 0.12);
108
+
109
+ --overlay-bg: oklch(0 0 0 / 20%);
110
+ --overlay-blur: 5px;
111
+
112
+ --table-border: oklab(0 0 0 / 0.08);
113
+ --table-row-border: oklab(0 0 0 / 0.06);
114
+ --table-header-bg: oklab(0 0 0 / 0.03);
115
+
116
+ --hr-color: oklab(0 0 0 / 0.06);
117
+
118
+ --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
119
+ --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
120
+
121
+ --text-xs: 0.75rem;
122
+ --text-sm: 0.875rem;
123
+ --text-base: 1rem;
124
+ --text-lg: 1.125rem;
125
+ --text-xl: 1.25rem;
126
+ --text-2xl: 1.5rem;
127
+ --text-3xl: 1.875rem;
128
+ --text-4xl: 2.25rem;
129
+
130
+ --font-normal: 400;
131
+ --font-medium: 500;
132
+ --font-semibold: 600;
133
+ --font-bold: 700;
134
+
135
+ --leading-tight: 1.25;
136
+ --leading-normal: 1.5;
137
+ --leading-relaxed: 1.75;
138
+
139
+ --spacing-0: 0;
140
+ --spacing-0-5: 0.125rem;
141
+ --spacing-1: 0.25rem;
142
+ --spacing-1-5: 0.375rem;
143
+ --spacing-2: 0.5rem;
144
+ --spacing-2-5: 0.625rem;
145
+ --spacing-3: 0.75rem;
146
+ --spacing-4: 1rem;
147
+ --spacing-5: 1.25rem;
148
+ --spacing-6: 1.5rem;
149
+ --spacing-8: 2rem;
150
+ --spacing-10: 2.5rem;
151
+ --spacing-12: 3rem;
152
+ --spacing-16: 4rem;
153
+ --spacing-20: 5rem;
154
+
155
+ --sidebar-width: 16rem;
156
+ --sidebar-width-mobile: 18rem;
157
+ --toc-width: 17.5rem;
158
+ --header-height: 4rem;
159
+ --tab-bar-height: 3rem;
160
+ --content-max-width: 50rem;
161
+ --layout-max-width: 88rem;
162
+
163
+ --radius: 0.625rem;
164
+ --radius-sm: calc(var(--radius) - 4px);
165
+ --radius-md: calc(var(--radius) - 2px);
166
+ --radius-lg: var(--radius);
167
+ --radius-xl: calc(var(--radius) + 4px);
168
+ --radius-2xl: calc(var(--radius) + 8px);
169
+ --radius-3xl: calc(var(--radius) + 12px);
170
+ --radius-4xl: 9999px;
171
+
135
172
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
136
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
137
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
173
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
174
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
175
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
176
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
177
+
178
+ --ring-width: 3px;
179
+ --ring-offset: 0px;
138
180
 
139
- /* Transitions */
140
181
  --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
141
182
  --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
142
183
  --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
143
184
 
144
- /* Z-index scale */
145
185
  --z-base: 0;
146
186
  --z-header: 20;
147
187
  --z-secondary-header: 25;
@@ -152,99 +192,119 @@
152
192
  --z-tooltip: 60;
153
193
  }
154
194
 
155
- /* Dark Theme */
156
195
  .dark {
157
- /* Colors - Dark Theme */
158
- --color-bg: #0d1117;
159
- --color-bg-secondary: #161b22;
160
- --color-bg-tertiary: #1c2128;
161
- --color-sidebar-bg: #0d1117;
162
- --color-text: #e6edf3;
163
- --color-text-secondary: #8b949e;
164
- --color-text-tertiary: #6e7681;
165
- --color-border: #30363d;
166
- --color-border-secondary: #21262d;
167
- --color-primary: #3b82f6;
168
- --color-primary-rgb: 59, 130, 246;
169
- --color-primary-hover: #60a5fa;
170
- --color-primary-light: #1e3a8a;
171
- --color-link: #58a6ff;
172
- --color-link-hover: #79c0ff;
173
-
174
- /* Code colors */
175
- --color-code-bg: #161b22;
176
- --color-code-text: #e6edf3;
177
- --color-code-border: transparent;
178
-
179
- /* Semantic colors */
180
- --color-success: #3fb950;
181
- --color-success-bg: #1b3a21;
182
- --color-warning: #d29922;
183
- --color-warning-bg: #3d2e00;
184
- --color-error: #f85149;
185
- --color-error-bg: #4c1f1f;
186
- --color-info: #58a6ff;
187
- --color-info-bg: #1e3a5f;
188
-
189
- /* Diff colors - Dark Theme */
190
- --color-diff-add-bg: rgba(34, 197, 94, 0.1);
191
- --color-diff-add-border: #22c55e;
192
- --color-diff-add-gutter-bg: rgba(34, 197, 94, 0.15);
193
- --color-diff-add-indicator: #4ade80;
194
-
195
- --color-diff-remove-bg: rgba(239, 68, 68, 0.1);
196
- --color-diff-remove-border: #ef4444;
197
- --color-diff-remove-gutter-bg: rgba(239, 68, 68, 0.15);
198
- --color-diff-remove-indicator: #f87171;
199
-
200
- /* Code error/warning colors - Dark Theme */
201
- --color-code-error-bg: rgba(239, 68, 68, 0.1);
202
- --color-code-error-border: #ef4444;
203
- --color-code-error-gutter-bg: rgba(239, 68, 68, 0.15);
204
- --color-code-error-indicator: #f87171;
205
- --color-code-warning-bg: rgba(245, 158, 11, 0.1);
206
- --color-code-warning-border: #f59e0b;
207
- --color-code-warning-gutter-bg: rgba(245, 158, 11, 0.15);
208
- --color-code-warning-indicator: #fbbf24;
209
-
210
- /* Callout colors - Dark mode shadcn inspired */
196
+ --background: oklch(0.07 0 0);
197
+ --foreground: oklch(0.985 0 0);
198
+ --card: oklch(0.22 0.006 285.885);
199
+ --card-foreground: oklch(0.985 0 0);
200
+ --popover: oklch(0.22 0.006 285.885);
201
+ --popover-foreground: oklch(0.985 0 0);
202
+ --primary: oklch(0.71 0.13 215);
203
+ --primary-foreground: oklch(0.30 0.05 230);
204
+ --secondary: oklch(0.26 0.006 286.033);
205
+ --secondary-foreground: oklch(0.985 0 0);
206
+ --muted: oklch(0.26 0.006 286.033);
207
+ --muted-foreground: oklch(0.705 0.015 286.067);
208
+ --accent: oklch(0.26 0.006 286.033);
209
+ --accent-foreground: oklch(0.985 0 0);
210
+ --destructive: oklch(0.704 0.191 22.216);
211
+ --border: oklch(1 0 0 / 12%);
212
+ --input: oklch(1 0 0 / 15%);
213
+ --ring: oklch(0.552 0.016 285.938);
214
+
215
+ --sidebar: var(--background);
216
+ --sidebar-foreground: oklch(0.985 0 0);
217
+ --sidebar-primary: oklch(0.80 0.13 212);
218
+ --sidebar-primary-foreground: oklch(0.22 0.006 285.885);
219
+ --sidebar-accent: oklch(0.26 0.006 286.033);
220
+ --sidebar-accent-foreground: oklch(0.985 0 0);
221
+ --sidebar-border: oklch(1 0 0 / 12%);
222
+ --sidebar-ring: oklch(0.552 0.016 285.938);
223
+
224
+ --code-background: oklch(0.22 0.006 285.885);
225
+ --code-foreground: oklch(0.985 0 0);
226
+
227
+ --success: #4ade80;
228
+ --success-background: rgba(34, 197, 94, 0.1);
229
+ --warning: #fbbf24;
230
+ --warning-background: rgba(245, 158, 11, 0.1);
231
+ --error: #f87171;
232
+ --error-background: rgba(239, 68, 68, 0.1);
233
+
234
+ --diff-add-background: rgba(34, 197, 94, 0.1);
235
+ --diff-add-border: #22c55e;
236
+ --diff-add-gutter: rgba(34, 197, 94, 0.15);
237
+ --diff-add-indicator: #4ade80;
238
+ --diff-remove-background: rgba(239, 68, 68, 0.1);
239
+ --diff-remove-border: #ef4444;
240
+ --diff-remove-gutter: rgba(239, 68, 68, 0.15);
241
+ --diff-remove-indicator: #f87171;
242
+
243
+ --code-error-background: rgba(239, 68, 68, 0.1);
244
+ --code-error-border: #ef4444;
245
+ --code-error-gutter: rgba(239, 68, 68, 0.15);
246
+ --code-error-indicator: #f87171;
247
+ --code-warning-background: rgba(245, 158, 11, 0.1);
248
+ --code-warning-border: #f59e0b;
249
+ --code-warning-gutter: rgba(245, 158, 11, 0.15);
250
+ --code-warning-indicator: #fbbf24;
251
+
211
252
  --callout-note: #38bdf8;
212
- --callout-note-text: #7dd3fc;
213
- --callout-note-bg: rgba(7, 89, 133, 0.15);
253
+ --callout-note-foreground: #7dd3fc;
254
+ --callout-note-background: rgba(14, 165, 233, 0.1);
214
255
  --callout-note-border: rgba(14, 165, 233, 0.3);
215
-
216
256
  --callout-tip: #4ade80;
217
- --callout-tip-text: #86efac;
218
- --callout-tip-bg: rgba(20, 83, 45, 0.15);
257
+ --callout-tip-foreground: #86efac;
258
+ --callout-tip-background: rgba(34, 197, 94, 0.1);
219
259
  --callout-tip-border: rgba(34, 197, 94, 0.3);
220
-
221
260
  --callout-important: #c084fc;
222
- --callout-important-text: #d8b4fe;
223
- --callout-important-bg: rgba(88, 28, 135, 0.15);
261
+ --callout-important-foreground: #d8b4fe;
262
+ --callout-important-background: rgba(168, 85, 247, 0.1);
224
263
  --callout-important-border: rgba(168, 85, 247, 0.3);
225
-
226
264
  --callout-warning: #fbbf24;
227
- --callout-warning-text: #fcd34d;
228
- --callout-warning-bg: rgba(120, 53, 15, 0.15);
265
+ --callout-warning-foreground: #fcd34d;
266
+ --callout-warning-background: rgba(245, 158, 11, 0.1);
229
267
  --callout-warning-border: rgba(245, 158, 11, 0.3);
230
-
231
268
  --callout-danger: #f87171;
232
- --callout-danger-text: #fca5a5;
233
- --callout-danger-bg: rgba(127, 29, 29, 0.15);
269
+ --callout-danger-foreground: #fca5a5;
270
+ --callout-danger-background: rgba(239, 68, 68, 0.1);
234
271
  --callout-danger-border: rgba(239, 68, 68, 0.3);
235
272
 
236
- /* Shadows - Softer in dark mode */
273
+ --code-block-bg: oklab(1 0 0 / 0.045);
274
+ --code-block-border: oklab(1 0 0 / 0.06);
275
+ --code-block-header-bg: oklab(1 0 0 / 0.025);
276
+ --code-block-header-border: oklab(1 0 0 / 0.04);
277
+ --code-block-gutter-bg: transparent;
278
+ --code-block-copy-bg: oklab(1 0 0 / 0.05);
279
+ --code-block-copy-bg-hover: oklab(1 0 0 / 0.08);
280
+ --code-block-copy-shadow: 0 0 0 1px oklab(1 0 0 / 0.06);
281
+ --code-block-copy-shadow-hover: 0 0 0 1px oklab(1 0 0 / 0.1);
282
+ --code-block-copy-shadow-active: 0 0 0 1px oklab(1 0 0 / 0.04);
283
+
284
+ --search-trigger-bg: oklab(1 0 0 / 0.045);
285
+ --search-trigger-bg-hover: oklab(1 0 0 / 0.08);
286
+ --search-trigger-border: oklab(1 0 0 / 0.08);
287
+ --search-trigger-border-hover: oklab(1 0 0 / 0.12);
288
+
289
+ --overlay-bg: oklch(0 0 0 / 50%);
290
+
291
+ --table-border: oklab(1 0 0 / 0.12);
292
+ --table-row-border: oklab(1 0 0 / 0.1);
293
+ --table-header-bg: oklab(1 0 0 / 0.04);
294
+
295
+ --hr-color: oklab(1 0 0 / 0.08);
296
+
237
297
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
238
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4);
239
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5);
298
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4);
299
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4);
300
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4);
301
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5);
240
302
  }
241
303
 
242
- /* Mobile breakpoint adjustments */
243
304
  @media (max-width: 1024px) {
244
305
  :root {
245
- --sidebar-width: 100%;
246
- --header-height: 56px;
247
- --font-size-3xl: 1.5rem; /* Smaller on mobile */
248
- --font-size-4xl: 1.875rem; /* Smaller on mobile */
306
+ --header-height: 3.5rem;
307
+ --text-3xl: 1.5rem;
308
+ --text-4xl: 1.875rem;
249
309
  }
250
310
  }
@@ -1,16 +1,15 @@
1
1
  <svg width="531" height="769" viewBox="0 0 531 769" fill="none" xmlns="http://www.w3.org/2000/svg">
2
2
  <defs>
3
3
  <style>
4
+ .logo-accent { fill: #06B6D4; }
5
+ .logo-dark { fill: #18181B; }
6
+
4
7
  @media (prefers-color-scheme: dark) {
5
- path[fill="#1E1E1D"] {
6
- fill: #E5E5E5;
7
- }
8
- path[fill="#AB333D"] {
9
- fill: #DC2626;
10
- }
8
+ .logo-accent { fill: #22D3EE; }
9
+ .logo-dark { fill: #E4E4E7; }
11
10
  }
12
11
  </style>
13
12
  </defs>
14
- <path d="M359.643 59.1798C402.213 89.4398 449.713 123.6 502.063 160.99C510.793 167.23 515.873 170.31 519.293 178.05C523.253 187.02 521.733 198.11 515.883 205.77C513.77 208.536 510.93 211.2 507.363 213.76C379.643 305.353 309.413 355.73 296.673 364.89C287.987 371.136 282.07 374.8 278.923 375.88C269.703 379.026 260.263 378.636 250.603 374.71C248.243 373.75 244.497 371.416 239.363 367.71C199.963 339.29 177.32 322.99 171.433 318.81C128.863 288.54 81.3733 254.39 29.0233 216.99C20.2833 210.75 15.2033 207.67 11.7833 199.93C7.82332 190.96 9.34332 179.87 15.1933 172.21C17.3067 169.443 20.1467 166.78 23.7133 164.22C151.433 72.6264 221.663 22.2498 234.403 13.0898C243.09 6.84309 249.007 3.17976 252.153 2.09976C261.373 -1.04691 270.813 -0.656912 280.473 3.26976C282.833 4.22976 286.58 6.56309 291.713 10.2698C331.113 38.6898 353.757 54.9931 359.643 59.1798Z" fill="#AB333D"/>
15
- <path d="M467.383 298.01C483.943 286.23 505.033 289.93 519.063 303.51C524.457 308.723 528.033 314.713 529.793 321.48C530.433 323.92 530.733 330.946 530.693 342.56C530.647 356.206 530.657 427.233 530.723 555.64C530.723 566.633 530.513 573 530.093 574.74C527.033 587.29 518.333 592.61 506.693 601.06C504.313 602.786 430.877 656.346 286.383 761.74C275.623 769.59 261.793 770.79 250.113 764.36C249.18 763.846 245.86 761.513 240.153 757.36C150.56 692.066 74.8667 637.046 13.0733 592.3C6.70001 587.68 2.65667 581.73 0.943337 574.45C0.316671 571.783 0.00333476 564.803 0.00333476 553.51C-0.00333191 421.323 -4.06895e-06 348.98 0.0133293 336.48C0.0133293 332.84 -0.0766665 327.18 0.783334 323.18C4.59333 305.51 20.1033 293.29 37.4533 291.15C42.9467 290.476 48.8667 291.276 55.2133 293.55C58.28 294.643 63.3533 297.8 70.4333 303.02C75.98 307.113 82.4433 311.78 89.8233 317.02C128.563 344.526 178.703 380.303 240.243 424.35C242.73 426.13 245.853 428.246 249.613 430.7C257.443 435.8 268.453 436.24 277.213 433.14C279.8 432.22 284.54 429.283 291.433 424.33C394.46 350.276 453.11 308.17 467.383 298.01Z" fill="#1E1E1D"/>
13
+ <path class="logo-accent" d="M359.643 59.1798C402.213 89.4398 449.713 123.6 502.063 160.99C510.793 167.23 515.873 170.31 519.293 178.05C523.253 187.02 521.733 198.11 515.883 205.77C513.77 208.536 510.93 211.2 507.363 213.76C379.643 305.353 309.413 355.73 296.673 364.89C287.987 371.136 282.07 374.8 278.923 375.88C269.703 379.026 260.263 378.636 250.603 374.71C248.243 373.75 244.497 371.416 239.363 367.71C199.963 339.29 177.32 322.99 171.433 318.81C128.863 288.54 81.3733 254.39 29.0233 216.99C20.2833 210.75 15.2033 207.67 11.7833 199.93C7.82332 190.96 9.34332 179.87 15.1933 172.21C17.3067 169.443 20.1467 166.78 23.7133 164.22C151.433 72.6264 221.663 22.2498 234.403 13.0898C243.09 6.84309 249.007 3.17976 252.153 2.09976C261.373 -1.04691 270.813 -0.656912 280.473 3.26976C282.833 4.22976 286.58 6.56309 291.713 10.2698C331.113 38.6898 353.757 54.9931 359.643 59.1798Z"/>
14
+ <path class="logo-dark" d="M467.383 298.01C483.943 286.23 505.033 289.93 519.063 303.51C524.457 308.723 528.033 314.713 529.793 321.48C530.433 323.92 530.733 330.946 530.693 342.56C530.647 356.206 530.657 427.233 530.723 555.64C530.723 566.633 530.513 573 530.093 574.74C527.033 587.29 518.333 592.61 506.693 601.06C504.313 602.786 430.877 656.346 286.383 761.74C275.623 769.59 261.793 770.79 250.113 764.36C249.18 763.846 245.86 761.513 240.153 757.36C150.56 692.066 74.8667 637.046 13.0733 592.3C6.70001 587.68 2.65667 581.73 0.943337 574.45C0.316671 571.783 0.00333476 564.803 0.00333476 553.51C-0.00333191 421.323 -4.06895e-06 348.98 0.0133293 336.48C0.0133293 332.84 -0.0766665 327.18 0.783334 323.18C4.59333 305.51 20.1033 293.29 37.4533 291.15C42.9467 290.476 48.8667 291.276 55.2133 293.55C58.28 294.643 63.3533 297.8 70.4333 303.02C75.98 307.113 82.4433 311.78 89.8233 317.02C128.563 344.526 178.703 380.303 240.243 424.35C242.73 426.13 245.853 428.246 249.613 430.7C257.443 435.8 268.453 436.24 277.213 433.14C279.8 432.22 284.54 429.283 291.433 424.33C394.46 350.276 453.11 308.17 467.383 298.01Z"/>
16
15
  </svg>
@@ -0,0 +1,85 @@
1
+ function initializeAbbreviations() {
2
+ const abbreviations = document.querySelectorAll('.docyard-abbr');
3
+ if (abbreviations.length === 0) return;
4
+
5
+ const popover = createPopover();
6
+ document.body.appendChild(popover);
7
+
8
+ let hideTimeout;
9
+
10
+ abbreviations.forEach(abbr => {
11
+ abbr.addEventListener('mouseenter', () => {
12
+ clearTimeout(hideTimeout);
13
+ showPopover(popover, abbr);
14
+ });
15
+
16
+ abbr.addEventListener('mouseleave', () => {
17
+ hideTimeout = setTimeout(() => {
18
+ hidePopover(popover);
19
+ }, 100);
20
+ });
21
+ });
22
+ }
23
+
24
+ function createPopover() {
25
+ const popover = document.createElement('div');
26
+ popover.className = 'docyard-abbr-popover';
27
+ popover.innerHTML = `
28
+ <span class="docyard-abbr-popover__term"></span>
29
+ <span class="docyard-abbr-popover__definition"></span>
30
+ `;
31
+ return popover;
32
+ }
33
+
34
+ function showPopover(popover, abbr) {
35
+ const term = abbr.textContent;
36
+ const definition = abbr.dataset.definition;
37
+
38
+ popover.querySelector('.docyard-abbr-popover__term').textContent = term;
39
+ popover.querySelector('.docyard-abbr-popover__definition').textContent = definition;
40
+
41
+ const rect = abbr.getBoundingClientRect();
42
+ const scrollX = window.scrollX;
43
+ const scrollY = window.scrollY;
44
+
45
+ popover.style.visibility = 'hidden';
46
+ popover.classList.add('is-visible');
47
+ popover.classList.remove('is-below');
48
+
49
+ requestAnimationFrame(() => {
50
+ const popoverRect = popover.getBoundingClientRect();
51
+ let left = rect.left + scrollX + (rect.width / 2) - (popoverRect.width / 2);
52
+ let top = rect.top + scrollY - popoverRect.height - 8;
53
+
54
+ const viewportWidth = window.innerWidth;
55
+ const padding = 16;
56
+
57
+ if (left < padding) {
58
+ left = padding;
59
+ } else if (left + popoverRect.width > viewportWidth - padding) {
60
+ left = viewportWidth - popoverRect.width - padding;
61
+ }
62
+
63
+ if (top < scrollY + padding) {
64
+ top = rect.bottom + scrollY + 8;
65
+ popover.classList.add('is-below');
66
+ }
67
+
68
+ const arrowLeft = rect.left + scrollX + (rect.width / 2) - left;
69
+ popover.style.setProperty('--arrow-left', `${Math.max(12, Math.min(arrowLeft, popoverRect.width - 12))}px`);
70
+
71
+ popover.style.left = `${left}px`;
72
+ popover.style.top = `${top}px`;
73
+ popover.style.visibility = 'visible';
74
+ });
75
+ }
76
+
77
+ function hidePopover(popover) {
78
+ popover.classList.remove('is-visible');
79
+ }
80
+
81
+ if (document.readyState === 'loading') {
82
+ document.addEventListener('DOMContentLoaded', initializeAbbreviations);
83
+ } else {
84
+ initializeAbbreviations();
85
+ }