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,199 +1,255 @@
1
- /* Navigation Components */
2
-
3
- /* Sidebar navigation */
4
1
  .sidebar nav {
5
2
  flex: 1;
6
3
  overflow-y: auto;
4
+ overflow-x: hidden;
7
5
  }
8
6
 
9
- /* Section headers */
10
7
  .nav-section {
11
- margin-bottom: 0;
12
- padding-bottom: var(--space-5);
13
- }
14
-
15
- .nav-section:last-child {
16
- padding-bottom: 0;
17
- }
18
-
19
- .nav-section:first-child {
20
- margin-top: 0;
8
+ padding: var(--spacing-2);
9
+ display: flex;
10
+ flex-direction: column;
11
+ width: 100%;
12
+ min-width: 0;
13
+ position: relative;
14
+ overflow: hidden;
21
15
  }
22
16
 
23
17
  .nav-section-title {
24
- font-size: 0.6875rem;
25
- font-weight: var(--font-weight-semibold);
26
- color: var(--color-text-tertiary);
27
- text-transform: uppercase;
28
- letter-spacing: 0.1em;
29
- padding: 0 var(--space-3);
30
- margin-bottom: var(--space-3);
31
- margin-top: 0;
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--spacing-2);
21
+ height: 2rem;
22
+ padding: 0 var(--spacing-2);
23
+ font-size: var(--text-xs);
24
+ font-weight: var(--font-medium);
25
+ color: oklch(from var(--sidebar-foreground) l c h / 70%);
26
+ border-radius: var(--radius-md);
27
+ margin: 0;
28
+ flex-shrink: 0;
29
+ outline: none;
30
+ transition: margin var(--transition-base), opacity var(--transition-base);
32
31
  pointer-events: none;
33
32
  user-select: none;
34
33
  }
35
34
 
36
- .nav-section:not(:first-child) {
37
- margin-top: var(--space-3);
38
- padding-top: 0;
35
+ .nav-section-icon {
36
+ display: inline-flex;
37
+ align-items: center;
38
+ flex-shrink: 0;
39
39
  }
40
40
 
41
- .nav-section:not(:first-child) .nav-section-title {
42
- margin-top: 0;
41
+ .nav-section-icon .docyard-icon {
42
+ width: 1rem;
43
+ height: 1rem;
43
44
  }
44
45
 
45
46
  .sidebar nav ul {
46
47
  list-style: none;
47
48
  padding: 0;
48
49
  margin: 0;
50
+ display: flex;
51
+ flex-direction: column;
52
+ width: 100%;
53
+ min-width: 0;
54
+ gap: var(--spacing-1);
49
55
  }
50
56
 
51
57
  .sidebar nav li {
52
58
  margin: 0;
59
+ position: relative;
60
+ min-width: 0;
53
61
  }
54
62
 
55
63
  .sidebar nav a {
56
64
  display: flex;
57
65
  align-items: center;
58
- gap: var(--space-2);
59
- padding: 0.5rem var(--space-3);
60
- font-size: 0.875rem;
61
- color: var(--color-text-secondary);
66
+ gap: var(--spacing-2);
67
+ height: 2.25rem;
68
+ padding: var(--spacing-2);
69
+ font-size: var(--text-sm);
70
+ color: var(--sidebar-foreground);
62
71
  text-decoration: none;
63
- border-radius: var(--radius-md);
64
- transition: color var(--transition-fast);
65
- line-height: 1.4;
66
- font-weight: var(--font-weight-medium);
72
+ border-radius: var(--radius-lg);
73
+ transition: all var(--transition-fast);
74
+ line-height: 1.5;
75
+ font-weight: var(--font-normal);
76
+ width: 100%;
77
+ text-align: left;
78
+ overflow: hidden;
79
+ outline: none;
67
80
  }
68
81
 
69
82
  .sidebar nav a:hover {
70
- color: var(--color-text);
83
+ background-color: var(--sidebar-accent);
84
+ color: var(--sidebar-accent-foreground);
71
85
  text-decoration: none;
72
86
  }
73
87
 
88
+ .sidebar nav a:focus-visible {
89
+ outline: none;
90
+ box-shadow: 0 0 0 2px var(--sidebar-ring);
91
+ }
92
+
74
93
  .sidebar nav a.active {
75
- color: var(--color-primary);
76
- font-weight: var(--font-weight-semibold);
94
+ background-color: oklch(from var(--sidebar-primary) l c h / 10%);
95
+ color: var(--sidebar-primary);
96
+ text-shadow: -0.2px 0 0 currentColor, 0.2px 0 0 currentColor;
77
97
  }
78
98
 
79
- /* Nested navigation */
80
- .sidebar nav ul ul {
81
- margin-left: var(--space-3);
82
- margin-top: 0.125rem;
83
- margin-bottom: 0.125rem;
84
- padding-left: var(--space-4);
85
- position: relative;
99
+ .sidebar nav a.active:hover {
100
+ background-color: oklch(from var(--sidebar-primary) l c h / 10%);
101
+ color: var(--sidebar-primary);
86
102
  }
87
103
 
88
- .sidebar nav ul ul::before {
89
- content: '';
90
- position: absolute;
91
- left: 0;
92
- top: 0;
93
- bottom: 0;
94
- width: 1px;
95
- background-color: rgba(148, 163, 184, 0.24);
104
+ .sidebar nav ul ul {
105
+ margin-left: 0.875rem;
106
+ margin-right: 0.875rem;
107
+ padding-left: 0.625rem;
108
+ padding-right: 0.625rem;
109
+ padding-top: 0.125rem;
110
+ padding-bottom: 0.125rem;
111
+ border-left: 1px solid var(--sidebar-border);
112
+ gap: var(--spacing-1);
113
+ display: flex;
114
+ flex-direction: column;
115
+ min-width: 0;
116
+ width: auto;
96
117
  }
97
118
 
98
119
  .sidebar nav ul ul li {
99
120
  position: relative;
100
- }
101
-
102
- /* Active indicator with :has() support */
103
- @supports selector(:has(*)) {
104
- .sidebar nav ul ul li:has(> a.active)::before {
105
- content: '';
106
- position: absolute;
107
- left: calc(-1 * var(--space-4));
108
- top: 0;
109
- bottom: 0;
110
- width: 2px;
111
- background-color: var(--color-primary);
112
- z-index: 1;
113
- }
121
+ min-width: 0;
114
122
  }
115
123
 
116
124
  .sidebar nav ul ul a {
117
- font-size: 0.8125rem;
118
- padding: 0.375rem var(--space-3);
119
- color: var(--color-text-secondary);
125
+ display: flex;
126
+ align-items: center;
127
+ gap: var(--spacing-2);
128
+ height: 1.75rem;
129
+ padding: 0 var(--spacing-2);
130
+ font-size: var(--text-sm);
131
+ color: var(--sidebar-foreground);
120
132
  line-height: 1.5;
121
- font-weight: var(--font-weight-normal);
122
- position: relative;
133
+ font-weight: var(--font-normal);
134
+ border-radius: var(--radius-md);
135
+ min-width: 0;
136
+ overflow: hidden;
123
137
  }
124
138
 
125
139
  .sidebar nav ul ul a:hover {
126
- color: var(--color-text);
127
- background-color: transparent;
140
+ background-color: var(--sidebar-accent);
141
+ color: var(--sidebar-accent-foreground);
128
142
  }
129
143
 
130
144
  .sidebar nav ul ul a.active {
131
- color: var(--color-primary);
132
- background-color: transparent;
133
- font-weight: var(--font-weight-semibold);
145
+ background-color: oklch(from var(--sidebar-primary) l c h / 10%);
146
+ color: var(--sidebar-primary);
147
+ text-shadow: -0.2px 0 0 currentColor, 0.2px 0 0 currentColor;
134
148
  }
135
149
 
136
- /* Top level nav items spacing */
137
- .sidebar nav>ul>li {
138
- margin-bottom: 0.125rem;
150
+ .nav-nested-section {
151
+ display: flex;
152
+ flex-direction: column;
139
153
  }
140
154
 
141
- .sidebar nav ul li {
142
- margin-bottom: 0;
155
+ .nav-nested-section-title {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: var(--spacing-2);
159
+ height: 2rem;
160
+ padding: 0 var(--spacing-2);
161
+ font-size: var(--text-xs);
162
+ font-weight: var(--font-medium);
163
+ color: oklch(from var(--sidebar-foreground) l c h / 70%);
164
+ margin: var(--spacing-2) 0 0 0;
165
+ flex-shrink: 0;
166
+ pointer-events: none;
167
+ user-select: none;
168
+ }
169
+
170
+ .nav-nested-section-children {
171
+ display: flex;
172
+ flex-direction: column;
143
173
  }
144
174
 
145
- /* Collapsible/Accordion items */
146
- .nav-group-toggle {
175
+ .nav-group {
176
+ display: flex;
177
+ flex-direction: column;
178
+ }
179
+
180
+ .nav-group-header {
147
181
  display: flex;
148
182
  align-items: center;
149
183
  justify-content: space-between;
184
+ gap: 0;
150
185
  width: 100%;
151
- padding: 0.5rem var(--space-3);
152
- font-size: 0.875rem;
153
- color: var(--color-text-secondary);
154
- text-decoration: none;
155
- border-radius: var(--radius-md);
156
- transition: color var(--transition-fast);
157
- line-height: 1.4;
158
- font-weight: var(--font-weight-medium);
159
- background: none;
160
- border: none;
186
+ height: 2.25rem;
187
+ padding: var(--spacing-2);
188
+ font-size: var(--text-sm);
189
+ color: var(--sidebar-foreground);
190
+ border-radius: var(--radius-lg);
191
+ line-height: 1.5;
192
+ font-weight: var(--font-normal);
161
193
  text-align: left;
194
+ text-decoration: none;
162
195
  cursor: pointer;
196
+ outline: none;
197
+ transition: all var(--transition-fast);
163
198
  }
164
199
 
165
- .nav-group-title {
166
- display: flex;
167
- align-items: center;
168
- gap: var(--space-2);
169
- flex: 1;
200
+ .nav-group-header--link {
201
+ background: transparent;
170
202
  }
171
203
 
172
- .nav-group-toggle:hover {
173
- color: var(--color-text);
204
+ .nav-group-header--button {
205
+ background: transparent;
206
+ border: none;
207
+ }
208
+
209
+ .nav-group-header:hover {
210
+ background-color: var(--sidebar-accent);
211
+ color: var(--sidebar-accent-foreground);
212
+ text-decoration: none;
174
213
  }
175
214
 
176
- .nav-group-toggle:focus-visible {
177
- outline: 0.125rem solid var(--color-primary);
178
- outline-offset: 0.125rem;
215
+ .nav-group-header:focus-visible {
216
+ box-shadow: 0 0 0 2px var(--sidebar-ring);
217
+ }
218
+
219
+ .nav-group-header.active {
220
+ background-color: oklch(from var(--sidebar-primary) l c h / 10%);
221
+ color: var(--sidebar-primary);
222
+ text-shadow: -0.2px 0 0 currentColor, 0.2px 0 0 currentColor;
223
+ }
224
+
225
+ .nav-group-title {
226
+ display: flex;
227
+ align-items: center;
228
+ gap: var(--spacing-2);
229
+ flex: 1;
230
+ min-width: 0;
179
231
  }
180
232
 
181
233
  .nav-group-icon {
182
234
  display: inline-flex;
183
- color: var(--color-text-tertiary);
235
+ color: var(--muted-foreground);
184
236
  flex-shrink: 0;
185
237
  }
186
238
 
187
239
  .nav-group-icon .docyard-icon {
188
240
  width: 1rem;
189
241
  height: 1rem;
190
- transition: transform var(--transition-fast);
242
+ transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
191
243
  }
192
244
 
193
- .nav-group-toggle[aria-expanded="true"] .nav-group-icon .docyard-icon {
245
+ [data-nav-toggle][aria-expanded="true"] .nav-group-icon .docyard-icon {
194
246
  transform: rotate(90deg);
195
247
  }
196
248
 
249
+ [data-nav-toggle][aria-expanded="false"] .nav-group-icon .docyard-icon {
250
+ transition: transform 0.2s cubic-bezier(0.4, 0, 1, 1);
251
+ }
252
+
197
253
  .nav-group-children {
198
254
  overflow: hidden;
199
255
  transition: max-height var(--transition-base);
@@ -203,81 +259,42 @@
203
259
  max-height: 0;
204
260
  }
205
261
 
206
- /* Mobile menu toggle button */
207
262
  .mobile-menu-toggle {
208
263
  display: none;
209
264
  background: transparent;
210
265
  border: none;
211
- padding: var(--space-2);
266
+ padding: var(--spacing-2);
212
267
  cursor: pointer;
213
- width: 2.25rem;
214
- height: 2.25rem;
268
+ width: 2rem;
269
+ height: 2rem;
215
270
  align-items: center;
216
271
  justify-content: center;
217
- border-radius: var(--radius-md);
218
- transition: background-color var(--transition-fast);
272
+ border-radius: var(--radius-4xl);
273
+ color: var(--muted-foreground);
274
+ transition: all var(--transition-fast);
219
275
  }
220
276
 
221
277
  .mobile-menu-toggle:hover {
222
- background: var(--color-bg-secondary);
278
+ background: var(--muted);
279
+ color: var(--foreground);
280
+ }
281
+
282
+ .mobile-menu-toggle:focus-visible {
283
+ outline: none;
284
+ box-shadow: 0 0 0 var(--ring-width) oklch(from var(--ring) l c h / 50%);
223
285
  }
224
286
 
225
- @media (max-width: 768px) {
287
+ @media (max-width: 1024px) {
226
288
  .mobile-menu-toggle {
227
289
  display: flex;
228
290
  }
229
291
  }
230
292
 
231
- /* Sidebar footer */
232
- .sidebar-footer {
233
- margin-top: auto;
234
- padding: var(--space-3) var(--space-5) var(--space-5);
235
- }
236
-
237
- .sidebar-footer-link {
238
- display: flex;
239
- align-items: center;
240
- gap: var(--space-2);
241
- text-decoration: none;
242
- padding: var(--space-2);
243
- border-radius: var(--radius-md);
244
- transition: background-color var(--transition-fast);
245
- }
246
-
247
- .sidebar-footer-link:hover {
248
- text-decoration: none;
249
- }
250
-
251
- .sidebar-footer-link:hover .external-icon {
252
- opacity: 0.5;
253
- }
254
-
255
- .sidebar-footer-text {
256
- flex: 1;
257
- }
258
-
259
- .sidebar-footer-title {
260
- margin: 0;
261
- font-size: 0.6875rem;
262
- color: var(--color-text-tertiary);
263
- font-weight: var(--font-weight-medium);
264
- line-height: 1.4;
265
- }
266
-
267
- .external-icon {
268
- width: 0.75rem;
269
- height: 0.75rem;
270
- color: var(--color-text-secondary);
271
- opacity: 0;
272
- transition: opacity var(--transition-fast);
273
- flex-shrink: 0;
274
- }
275
-
276
- /* Icon styling */
277
293
  .nav-item-icon {
278
294
  display: inline-flex;
279
295
  align-items: center;
280
296
  flex-shrink: 0;
297
+ color: inherit;
281
298
  }
282
299
 
283
300
  .nav-item-icon .docyard-icon {
@@ -287,6 +304,10 @@
287
304
 
288
305
  .nav-item-text {
289
306
  flex: 1;
307
+ min-width: 0;
308
+ overflow: hidden;
309
+ text-overflow: ellipsis;
310
+ white-space: nowrap;
290
311
  }
291
312
 
292
313
  .nav-item-external {
@@ -301,19 +322,24 @@
301
322
  height: 0.75rem;
302
323
  }
303
324
 
304
- /* Reduced motion support */
305
325
  @media (prefers-reduced-motion: reduce) {
326
+
306
327
  .sidebar nav a,
307
- .nav-group-toggle,
328
+ .nav-group-header,
308
329
  .nav-group-icon .docyard-icon,
309
330
  .nav-group-children,
310
- .mobile-menu-toggle,
311
- .sidebar-footer-link,
312
- .external-icon {
331
+ .mobile-menu-toggle {
313
332
  transition: none;
314
333
  }
315
334
 
316
- .nav-group-toggle[aria-expanded="true"] .nav-group-icon .docyard-icon {
335
+ [data-nav-toggle][aria-expanded="true"] .nav-group-icon .docyard-icon {
317
336
  transform: none;
318
337
  }
319
338
  }
339
+
340
+ .sidebar .docyard-badge {
341
+ margin-left: auto;
342
+ flex-shrink: 0;
343
+ padding: 0.0625rem 0.375rem;
344
+ font-size: 0.625rem;
345
+ }
@@ -1,83 +1,105 @@
1
- /* Previous/Next Navigation Footer */
2
-
3
1
  .doc-footer {
4
- margin-top: 48px;
5
- padding-top: 24px;
6
- border-top: 1px solid var(--color-border);
2
+ margin-top: var(--spacing-12);
3
+ padding-top: var(--spacing-8);
4
+ border-top: 1px solid var(--hr-color);
7
5
  }
8
6
 
9
7
  .pager {
10
- display: grid;
11
- grid-template-columns: repeat(2, 1fr);
12
- gap: 8px;
8
+ display: flex;
9
+ gap: var(--spacing-4);
13
10
  }
14
11
 
15
12
  .pager-link {
16
- display: block;
17
- padding: 16px;
18
- border: 1px solid var(--color-border);
19
- border-radius: 8px;
20
- text-decoration: none !important;
21
- transition: border-color 0.25s ease, background-color 0.25s ease;
22
- outline: none;
23
- background-color: transparent;
13
+ flex: 1;
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: var(--spacing-1);
17
+ padding: var(--spacing-4) var(--spacing-5);
18
+ border-radius: var(--radius-xl);
19
+ text-decoration: none;
20
+ background: transparent;
21
+ transition: background 0.3s ease;
24
22
  }
25
23
 
26
24
  .pager-link:hover {
27
- border-color: var(--color-primary);
28
- background-color: var(--color-background-soft);
25
+ background: var(--muted);
26
+ }
27
+
28
+ .pager-link:active {
29
+ background: oklch(from var(--muted) calc(l - 0.02) c h);
29
30
  }
30
31
 
31
32
  .pager-link:focus-visible {
32
- outline: 2px solid var(--color-primary);
33
- outline-offset: 2px;
34
- border-radius: 8px;
33
+ outline: none;
34
+ box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--ring);
35
35
  }
36
36
 
37
37
  .pager-link.prev {
38
- text-align: left;
38
+ align-items: flex-start;
39
39
  }
40
40
 
41
41
  .pager-link.next {
42
+ align-items: flex-end;
42
43
  text-align: right;
43
44
  }
44
45
 
45
46
  .pager-label {
46
- display: block;
47
- font-size: 13px;
48
- font-weight: 500;
49
- color: var(--color-text-secondary);
50
- margin-bottom: 0px;
51
- text-decoration: none !important;
47
+ display: flex;
48
+ align-items: center;
49
+ gap: var(--spacing-2);
50
+ font-size: var(--text-xs);
51
+ font-weight: var(--font-medium);
52
+ color: var(--muted-foreground);
53
+ }
54
+
55
+ .pager-link.next .pager-label {
56
+ justify-content: flex-end;
57
+ }
58
+
59
+ .pager-label .docyard-icon {
60
+ display: inline-flex;
61
+ opacity: 0.5;
62
+ transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
63
+ }
64
+
65
+ .pager-label .docyard-icon svg {
66
+ width: 1rem;
67
+ height: 1rem;
68
+ }
69
+
70
+ .pager-link:hover .pager-label .docyard-icon {
71
+ opacity: 1;
72
+ }
73
+
74
+ .pager-link.prev:hover .pager-label .docyard-icon {
75
+ transform: translateX(-4px);
76
+ }
77
+
78
+ .pager-link.next:hover .pager-label .docyard-icon {
79
+ transform: translateX(4px);
52
80
  }
53
81
 
54
82
  .pager-title {
55
- display: block;
56
- font-size: 14px;
57
- font-weight: 500;
58
- color: var(--color-text-primary);
83
+ font-size: var(--text-sm);
84
+ font-weight: var(--font-medium);
85
+ color: var(--foreground);
59
86
  overflow: hidden;
60
87
  text-overflow: ellipsis;
61
88
  white-space: nowrap;
62
- text-decoration: none !important;
63
89
  }
64
90
 
65
- /* Mobile responsive */
66
- @media (max-width: 640px) {
67
- .doc-footer {
68
- margin-top: 48px;
69
- }
70
-
91
+ @media (max-width: 1024px) {
71
92
  .pager {
72
- grid-template-columns: 1fr;
93
+ flex-direction: column;
94
+ gap: var(--spacing-2);
73
95
  }
74
96
 
75
- .pager-link.next {
76
- margin-left: 0;
97
+ .pager-link {
98
+ padding: var(--spacing-3) var(--spacing-4);
77
99
  }
78
100
 
79
- .pager-link {
80
- width: 100%;
101
+ .pager-label .docyard-icon {
102
+ opacity: 0.5;
81
103
  }
82
104
 
83
105
  .pager-title {
@@ -86,21 +108,19 @@
86
108
  }
87
109
  }
88
110
 
89
- /* Reduced motion accessibility */
90
111
  @media (prefers-reduced-motion: reduce) {
91
- .pager-link {
112
+ .pager-link,
113
+ .pager-label .docyard-icon {
92
114
  transition: none;
93
115
  }
94
116
  }
95
117
 
96
- /* Print: hide navigation */
97
118
  @media print {
98
119
  .doc-footer {
99
120
  display: none;
100
121
  }
101
122
  }
102
123
 
103
- /* Visually hidden utility (for screen readers) */
104
124
  .visually-hidden {
105
125
  position: absolute;
106
126
  width: 1px;