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,44 +1,47 @@
1
- /* Search Trigger Button */
2
1
  .search-trigger {
3
2
  display: flex;
4
3
  align-items: center;
5
- gap: var(--space-3);
6
- padding: 8px 14px;
7
- background-color: var(--color-bg-secondary);
8
- border: 1px solid var(--color-border);
9
- border-radius: 12px;
4
+ gap: var(--spacing-2);
5
+ padding: var(--spacing-2) var(--spacing-3);
6
+ background-color: var(--search-trigger-bg);
7
+ border: 1px solid var(--search-trigger-border);
8
+ border-radius: var(--radius-4xl);
10
9
  cursor: pointer;
11
- color: var(--color-text-tertiary);
12
- font-size: var(--text-xs);
13
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
14
- min-width: 280px;
10
+ color: var(--muted-foreground);
11
+ font-size: var(--text-sm);
12
+ transition: all var(--transition-fast);
13
+ min-width: 400px;
14
+ height: 2.25rem;
15
15
  }
16
16
 
17
17
  .search-trigger:hover {
18
- border-color: var(--color-border-secondary);
18
+ background-color: var(--search-trigger-bg-hover);
19
+ border-color: var(--search-trigger-border-hover);
20
+ color: var(--foreground);
19
21
  }
20
22
 
21
23
  .search-trigger:focus-visible {
22
- outline: 2px solid var(--color-primary);
23
- outline-offset: 2px;
24
+ outline: none;
25
+ border-color: var(--ring);
26
+ box-shadow: 0 0 0 var(--ring-width) oklch(from var(--ring) l c h / 50%);
24
27
  }
25
28
 
26
29
  .search-trigger-icon {
27
30
  display: flex;
28
31
  flex-shrink: 0;
32
+ color: var(--muted-foreground);
29
33
  }
30
34
 
31
35
  .search-trigger-icon svg {
32
- width: 16px;
33
- height: 16px;
34
- opacity: 1;
36
+ width: 1rem;
37
+ height: 1rem;
35
38
  }
36
39
 
37
40
  .search-trigger-text {
38
41
  flex: 1;
39
42
  text-align: left;
40
- color: var(--color-text-tertiary);
41
- font-size: var(--text-xs);
43
+ color: var(--muted-foreground);
44
+ font-size: var(--text-sm);
42
45
  }
43
46
 
44
47
  .search-trigger-shortcut {
@@ -46,8 +49,8 @@
46
49
  align-items: center;
47
50
  gap: 2px;
48
51
  font-family: var(--font-mono);
49
- font-size: 11px;
50
- color: var(--color-text-secondary);
52
+ font-size: 0.6875rem;
53
+ color: var(--muted-foreground);
51
54
  background: none;
52
55
  border: none;
53
56
  padding: 0;
@@ -58,16 +61,14 @@
58
61
  }
59
62
 
60
63
  .search-trigger-shortcut-icon svg {
61
- width: 14px;
62
- height: 14px;
63
- opacity: 1;
64
+ width: 0.875rem;
65
+ height: 0.875rem;
64
66
  }
65
67
 
66
68
  .search-trigger-shortcut-text {
67
- opacity: 0.9;
69
+ opacity: 0.8;
68
70
  }
69
71
 
70
- /* Hide command icon on non-Mac, show "Ctrl" text instead */
71
72
  .search-trigger-shortcut[data-os="windows"] .search-trigger-shortcut-icon {
72
73
  display: none;
73
74
  }
@@ -76,25 +77,23 @@
76
77
  content: "Ctrl ";
77
78
  }
78
79
 
79
- /* Header Actions Container */
80
80
  .header-actions {
81
81
  display: flex;
82
82
  align-items: center;
83
- gap: var(--space-3);
83
+ gap: var(--spacing-3);
84
84
  }
85
85
 
86
- /* Search Modal */
87
86
  .search-modal {
88
87
  position: fixed;
89
88
  inset: 0;
90
- z-index: 100;
89
+ z-index: var(--z-modal);
91
90
  display: flex;
92
91
  align-items: flex-start;
93
92
  justify-content: center;
94
- padding-top: 16px;
93
+ padding-top: 10vh;
95
94
  opacity: 0;
96
95
  visibility: hidden;
97
- transition: opacity 0.15s ease, visibility 0.15s ease;
96
+ transition: opacity var(--transition-fast), visibility var(--transition-fast);
98
97
  }
99
98
 
100
99
  .search-modal.is-open {
@@ -109,35 +108,32 @@
109
108
  .search-modal-backdrop {
110
109
  position: fixed;
111
110
  inset: 0;
112
- background-color: rgba(0, 0, 0, 0.15);
111
+ background-color: var(--overlay-bg);
112
+ backdrop-filter: blur(var(--overlay-blur));
113
113
  opacity: 0;
114
- transition: opacity 0.15s ease;
114
+ transition: opacity var(--transition-fast);
115
115
  }
116
116
 
117
117
  .search-modal.is-open .search-modal-backdrop {
118
118
  opacity: 1;
119
119
  }
120
120
 
121
- .dark .search-modal-backdrop {
122
- background-color: rgba(0, 0, 0, 0.5);
123
- }
124
-
125
121
  .search-modal-container {
126
122
  position: relative;
127
123
  width: 100%;
128
- max-width: 640px;
129
- max-height: calc(100vh - 100px);
130
- margin: 0 var(--space-4);
131
- background-color: var(--color-bg);
132
- border: 1px solid var(--color-border);
133
- border-radius: 16px;
134
- box-shadow: 0 25px 80px rgba(0, 0, 0, 0.15);
124
+ max-width: 600px;
125
+ max-height: 80vh;
126
+ margin: 0 var(--spacing-4);
127
+ background-color: var(--background);
128
+ border: 1px solid var(--border);
129
+ border-radius: var(--radius-2xl);
130
+ box-shadow: var(--shadow-2xl);
135
131
  display: flex;
136
132
  flex-direction: column;
137
133
  overflow: hidden;
138
- transform: scale(0.98) translateY(-8px);
134
+ transform: scale(0.95) translateY(-10px);
139
135
  opacity: 0;
140
- transition: transform 0.2s ease, opacity 0.15s ease;
136
+ transition: transform var(--transition-base), opacity var(--transition-fast);
141
137
  }
142
138
 
143
139
  .search-modal.is-open .search-modal-container {
@@ -145,36 +141,36 @@
145
141
  opacity: 1;
146
142
  }
147
143
 
148
- .dark .search-modal-container {
149
- box-shadow: 0 16px 70px rgba(0, 0, 0, 0.5);
150
- }
151
-
152
- /* Search Modal Header */
153
144
  .search-modal-header {
154
145
  display: flex;
155
146
  align-items: center;
156
- gap: var(--space-3);
157
- padding: 16px 20px;
147
+ gap: var(--spacing-3);
148
+ padding: var(--spacing-4) var(--spacing-5);
149
+ border-bottom: 1px solid var(--border);
158
150
  }
159
151
 
160
152
  .search-modal-icon {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
161
156
  flex-shrink: 0;
162
- width: 20px;
163
- height: 20px;
164
- color: var(--color-text-tertiary);
157
+ width: 1.25rem;
158
+ height: 1.25rem;
159
+ color: var(--muted-foreground);
165
160
  }
166
161
 
167
162
  .search-modal-input {
168
163
  flex: 1;
169
164
  border: none;
170
165
  background: transparent;
171
- font-size: 16px;
172
- color: var(--color-text);
166
+ font-size: var(--text-base);
167
+ font-family: var(--font-sans);
168
+ color: var(--foreground);
173
169
  outline: none;
174
170
  }
175
171
 
176
172
  .search-modal-input::placeholder {
177
- color: var(--color-text-tertiary);
173
+ color: var(--muted-foreground);
178
174
  }
179
175
 
180
176
  .search-modal-close {
@@ -184,33 +180,31 @@
184
180
  background: none;
185
181
  border: none;
186
182
  cursor: pointer;
183
+ transition: opacity var(--transition-fast);
184
+ }
185
+
186
+ .search-modal-close:hover {
187
+ opacity: 0.7;
187
188
  }
188
189
 
189
190
  .search-modal-close-text {
190
191
  font-family: var(--font-mono);
191
- font-size: 10px;
192
+ font-size: 0.625rem;
192
193
  text-transform: uppercase;
193
- letter-spacing: 0.5px;
194
- color: var(--color-text-tertiary);
195
- background-color: var(--color-bg-secondary);
196
- border: 1px solid var(--color-border);
197
- border-radius: 4px;
198
- padding: 3px 6px;
194
+ letter-spacing: 0.05em;
195
+ color: var(--muted-foreground);
196
+ background-color: var(--muted);
197
+ border: 1px solid var(--border);
198
+ border-radius: var(--radius-sm);
199
+ padding: var(--spacing-1) var(--spacing-1-5);
199
200
  }
200
201
 
201
- .search-modal-close:hover .search-modal-close-text {
202
- color: var(--color-text-secondary);
203
- border-color: var(--color-border-secondary);
204
- }
205
-
206
- /* Search Modal Body */
207
202
  .search-modal-body {
208
203
  flex: 1;
209
204
  max-height: 400px;
210
205
  overflow-y: auto;
211
206
  overscroll-behavior: contain;
212
- padding: var(--space-3);
213
- border-top: 1px solid var(--color-border);
207
+ padding: var(--spacing-2);
214
208
  }
215
209
 
216
210
  .search-modal-body[hidden] {
@@ -221,8 +215,8 @@
221
215
  display: flex;
222
216
  align-items: center;
223
217
  justify-content: center;
224
- padding: var(--space-6) var(--space-4);
225
- color: var(--color-text-tertiary);
218
+ padding: var(--spacing-8) var(--spacing-4);
219
+ color: var(--muted-foreground);
226
220
  font-size: var(--text-sm);
227
221
  }
228
222
 
@@ -235,9 +229,9 @@
235
229
  flex-direction: column;
236
230
  align-items: center;
237
231
  justify-content: center;
238
- padding: var(--space-8) var(--space-4);
232
+ padding: var(--spacing-10) var(--spacing-4);
239
233
  text-align: center;
240
- gap: var(--space-2);
234
+ gap: var(--spacing-2);
241
235
  }
242
236
 
243
237
  .search-modal-empty[hidden] {
@@ -245,28 +239,40 @@
245
239
  }
246
240
 
247
241
  .search-empty-icon {
248
- width: 48px;
249
- height: 48px;
250
- color: var(--color-border);
251
- margin-bottom: var(--space-2);
242
+ display: flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ color: var(--muted-foreground);
246
+ margin-bottom: var(--spacing-4);
247
+ opacity: 0.4;
248
+ }
249
+
250
+ .search-empty-icon .docyard-icon {
251
+ width: 4rem;
252
+ height: 4rem;
253
+ }
254
+
255
+ .search-empty-icon .docyard-icon svg {
256
+ width: 100%;
257
+ height: 100%;
252
258
  }
253
259
 
254
260
  .search-empty-title {
255
- font-size: var(--text-base);
256
- font-weight: 500;
257
- color: var(--color-text-secondary);
261
+ font-size: var(--text-sm);
262
+ font-weight: var(--font-medium);
263
+ color: var(--foreground);
258
264
  }
259
265
 
260
266
  .search-empty-hint {
261
267
  font-size: var(--text-sm);
262
- color: var(--color-text-tertiary);
268
+ color: var(--muted-foreground);
263
269
  }
264
270
 
265
271
  .search-modal-spinner {
266
- width: 20px;
267
- height: 20px;
268
- border: 2px solid var(--color-border);
269
- border-top-color: var(--color-primary);
272
+ width: 1.25rem;
273
+ height: 1.25rem;
274
+ border: 2px solid var(--border);
275
+ border-top-color: var(--primary);
270
276
  border-radius: 50%;
271
277
  animation: search-spin 0.6s linear infinite;
272
278
  }
@@ -277,7 +283,6 @@
277
283
  }
278
284
  }
279
285
 
280
- /* Search Results */
281
286
  .search-modal-results {
282
287
  list-style: none;
283
288
  padding: 0;
@@ -288,51 +293,44 @@
288
293
  display: none;
289
294
  }
290
295
 
291
- /* Result Group (page + its sections) */
292
296
  .search-result-group {
293
297
  list-style: none;
294
298
  }
295
299
 
296
300
  .search-result-group+.search-result-group {
297
- margin-top: var(--space-1);
301
+ margin-top: var(--spacing-1);
298
302
  }
299
303
 
300
- /* Base result link */
301
304
  .search-result {
302
305
  display: flex;
303
306
  align-items: flex-start;
304
- gap: var(--space-3);
305
- padding: 10px 12px;
306
- border-radius: 8px;
307
+ gap: var(--spacing-3);
308
+ padding: var(--spacing-2) var(--spacing-3);
309
+ border-radius: var(--radius-lg);
307
310
  cursor: pointer;
308
311
  text-decoration: none;
309
- color: var(--color-text);
310
- transition: background-color 0.1s ease;
312
+ color: var(--foreground);
313
+ transition: background-color var(--transition-fast);
311
314
  }
312
315
 
313
316
  .search-result:hover,
314
317
  .search-result[aria-selected="true"] {
315
- background-color: var(--color-bg-tertiary, rgba(0, 0, 0, 0.06));
318
+ background-color: var(--accent);
316
319
  text-decoration: none;
317
320
  }
318
321
 
319
322
  .search-result:hover .search-result-title,
320
323
  .search-result[aria-selected="true"] .search-result-title {
321
- color: var(--color-primary);
324
+ color: var(--primary);
322
325
  text-decoration: none;
323
326
  }
324
327
 
325
- .dark .search-result:hover,
326
- .dark .search-result[aria-selected="true"] {
327
- background-color: rgba(255, 255, 255, 0.08);
328
- }
329
-
330
328
  .search-result-icon {
331
329
  flex-shrink: 0;
332
- width: 16px;
333
- height: 16px;
330
+ width: 1rem;
331
+ height: 1rem;
334
332
  margin-top: 2px;
335
- color: var(--color-text-tertiary);
333
+ color: var(--muted-foreground);
336
334
  }
337
335
 
338
336
  .search-result-content {
@@ -345,16 +343,18 @@
345
343
 
346
344
  .search-result-title {
347
345
  font-size: var(--text-sm);
348
- font-weight: 500;
346
+ font-weight: var(--font-medium);
347
+ color: var(--foreground);
349
348
  white-space: nowrap;
350
349
  overflow: hidden;
351
350
  text-overflow: ellipsis;
352
351
  text-decoration: none;
352
+ transition: color var(--transition-fast);
353
353
  }
354
354
 
355
355
  .search-result-excerpt {
356
356
  font-size: var(--text-xs);
357
- color: var(--color-text-tertiary);
357
+ color: var(--muted-foreground);
358
358
  white-space: nowrap;
359
359
  overflow: hidden;
360
360
  text-overflow: ellipsis;
@@ -362,143 +362,152 @@
362
362
  }
363
363
 
364
364
  .search-result-excerpt mark {
365
- background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
365
+ background-color: oklch(from var(--primary) l c h / 15%);
366
366
  color: inherit;
367
367
  font-weight: inherit;
368
368
  border-radius: 2px;
369
369
  padding: 0 1px;
370
370
  }
371
371
 
372
- /* Title highlight - light background like Stripe */
373
372
  .search-title-highlight {
374
- background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
373
+ background-color: oklch(from var(--primary) l c h / 15%);
375
374
  color: inherit;
376
375
  font-weight: inherit;
377
376
  border-radius: 2px;
378
377
  padding: 0 1px;
379
378
  }
380
379
 
381
- /* Page-level results */
382
380
  .search-result-page {
383
- font-weight: 500;
381
+ font-weight: var(--font-medium);
384
382
  }
385
383
 
386
- /* Sections list */
387
384
  .search-result-sections {
388
385
  list-style: none;
389
386
  padding: 0;
390
387
  margin: 0;
391
- padding-left: 12px;
388
+ padding-left: var(--spacing-3);
392
389
  }
393
390
 
394
391
  .search-result-section-item {
395
392
  position: relative;
396
393
  }
397
394
 
398
- /* Section result */
399
395
  .search-result-section {
400
- padding-left: 20px;
396
+ padding-left: var(--spacing-5);
401
397
  }
402
398
 
403
399
  .search-result-section .search-result-title {
404
- font-weight: 400;
405
- color: var(--color-text-secondary);
400
+ font-weight: var(--font-normal);
401
+ color: var(--muted-foreground);
406
402
  }
407
403
 
408
404
  .search-result-section:hover .search-result-title,
409
405
  .search-result-section[aria-selected="true"] .search-result-title {
410
- color: var(--color-primary);
406
+ color: var(--primary);
411
407
  }
412
408
 
413
- /* Tree connector line */
414
409
  .search-result-tree-line {
415
410
  position: absolute;
416
- left: 12px;
411
+ left: var(--spacing-3);
417
412
  top: 0;
418
413
  bottom: 50%;
419
- width: 12px;
420
- border-left: 1px solid var(--color-border);
421
- border-bottom: 1px solid var(--color-border);
422
- border-radius: 0 0 0 4px;
414
+ width: var(--spacing-3);
415
+ border-left: 1px solid var(--border);
416
+ border-bottom: 1px solid var(--border);
417
+ border-radius: 0 0 0 var(--radius-sm);
423
418
  }
424
419
 
425
420
  .search-result-section-item:last-child .search-result-tree-line {
426
421
  bottom: 50%;
427
422
  }
428
423
 
429
- /* Continuous line for middle items */
430
424
  .search-result-section-item:not(:last-child)::before {
431
425
  content: '';
432
426
  position: absolute;
433
- left: 12px;
427
+ left: var(--spacing-3);
434
428
  top: 50%;
435
429
  bottom: -50%;
436
430
  width: 1px;
437
- background-color: var(--color-border);
431
+ background-color: var(--border);
438
432
  }
439
433
 
440
- /* Load More Link */
441
434
  .search-load-more {
442
435
  list-style: none;
443
- padding: var(--space-3) var(--space-3);
436
+ padding: var(--spacing-3);
444
437
  }
445
438
 
446
439
  .search-load-more-btn {
447
- font-size: 14px;
448
- font-weight: 500;
449
- color: var(--color-primary);
440
+ font-size: var(--text-sm);
441
+ font-weight: var(--font-medium);
442
+ color: var(--primary);
450
443
  background: none;
451
444
  border: none;
452
445
  padding: 0;
453
446
  cursor: pointer;
447
+ transition: opacity var(--transition-fast);
454
448
  }
455
449
 
456
450
  .search-load-more-btn:hover {
457
451
  opacity: 0.8;
458
452
  }
459
453
 
460
- .search-load-more-btn:focus {
454
+ .search-load-more-btn:focus-visible {
461
455
  outline: none;
456
+ box-shadow: 0 0 0 var(--ring-width) var(--ring);
457
+ border-radius: var(--radius-sm);
462
458
  }
463
459
 
464
- /* Search Modal Footer */
465
460
  .search-modal-footer {
466
461
  display: flex;
467
462
  align-items: center;
468
- gap: var(--space-4);
469
- padding: 12px 20px;
470
- border-top: 1px solid var(--color-border);
471
- background-color: var(--color-bg-secondary);
472
- font-size: 11px;
473
- color: var(--color-text-tertiary);
463
+ gap: var(--spacing-4);
464
+ padding: var(--spacing-3) var(--spacing-5);
465
+ border-top: 1px solid var(--border);
466
+ background-color: var(--muted);
467
+ font-size: 0.6875rem;
468
+ color: var(--muted-foreground);
474
469
  }
475
470
 
476
471
  .search-modal-hint {
477
472
  display: flex;
478
473
  align-items: center;
479
- gap: 4px;
474
+ gap: var(--spacing-1);
480
475
  }
481
476
 
482
477
  .search-modal-hint kbd {
483
478
  display: inline-flex;
484
479
  align-items: center;
485
480
  justify-content: center;
486
- min-width: 18px;
487
- height: 18px;
488
- padding: 0 4px;
481
+ min-width: 1.125rem;
482
+ height: 1.125rem;
483
+ padding: 0 var(--spacing-1);
489
484
  font-family: var(--font-mono);
490
- font-size: 10px;
491
- background-color: var(--color-bg);
492
- border: 1px solid var(--color-border);
493
- border-radius: 3px;
485
+ font-size: 0.625rem;
486
+ background-color: var(--background);
487
+ border: 1px solid var(--border);
488
+ border-radius: var(--radius-sm);
494
489
  }
495
490
 
496
- /* Mobile Responsive */
497
- @media (max-width: 640px) {
491
+ @media (max-width: 1024px) {
492
+
493
+
498
494
  .search-trigger {
499
495
  min-width: auto;
500
- padding: var(--space-2);
501
- border-radius: var(--radius-md);
496
+ width: 2.25rem;
497
+ height: 2.25rem;
498
+ padding: 0;
499
+ background: transparent;
500
+ border-color: transparent;
501
+ justify-content: center;
502
+ }
503
+
504
+ .search-trigger:hover {
505
+ background-color: var(--muted);
506
+ border-color: transparent;
507
+ }
508
+
509
+ .dark .search-trigger:hover {
510
+ background-color: oklch(from var(--muted) l c h / 50%);
502
511
  }
503
512
 
504
513
  .search-trigger-text,
@@ -506,34 +515,34 @@
506
515
  display: none;
507
516
  }
508
517
 
509
- .search-trigger-icon {
510
- opacity: 0.7;
518
+ .search-trigger-icon .docyard-icon {
519
+ width: 1.25rem;
520
+ height: 1.25rem;
511
521
  }
512
522
 
513
- .search-modal {
514
- padding-top: 0;
515
- align-items: stretch;
523
+ .header-center {
524
+ flex: 0;
525
+ padding: 0;
526
+ margin-left: auto;
516
527
  }
517
528
 
518
- .search-modal-container {
519
- max-width: 100%;
520
- max-height: 100%;
521
- margin: 0;
522
- border-radius: 0;
523
- border: none;
529
+ .search-modal-header {
530
+ padding: var(--spacing-3) var(--spacing-4);
524
531
  }
525
532
 
526
- .search-modal-body {
527
- max-height: calc(100vh - 160px);
533
+ .search-modal-input {
534
+ font-size: var(--text-sm);
535
+ }
536
+
537
+ .search-modal-close {
538
+ display: none;
528
539
  }
529
540
 
530
541
  .search-modal-footer {
531
- flex-wrap: wrap;
532
- gap: var(--space-2);
542
+ display: none;
533
543
  }
534
544
  }
535
545
 
536
- /* Reduced Motion */
537
546
  @media (prefers-reduced-motion: reduce) {
538
547
  .search-modal-spinner {
539
548
  animation: none;
@@ -543,7 +552,10 @@
543
552
  .search-modal-backdrop,
544
553
  .search-modal-container,
545
554
  .search-trigger,
546
- .search-result {
555
+ .search-result,
556
+ .search-modal-close,
557
+ .search-result-title,
558
+ .search-load-more-btn {
547
559
  transition: none;
548
560
  }
549
561
  }