docyard 0.6.0 → 0.8.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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -1
  3. data/CHANGELOG.md +34 -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 +82 -50
  8. data/lib/docyard/builder.rb +20 -10
  9. data/lib/docyard/cli.rb +6 -3
  10. data/lib/docyard/components/aliases.rb +29 -0
  11. data/lib/docyard/components/processors/callout_processor.rb +124 -0
  12. data/lib/docyard/components/processors/code_block_diff_preprocessor.rb +106 -0
  13. data/lib/docyard/components/processors/code_block_focus_preprocessor.rb +79 -0
  14. data/lib/docyard/components/processors/code_block_options_preprocessor.rb +78 -0
  15. data/lib/docyard/components/processors/code_block_processor.rb +175 -0
  16. data/lib/docyard/components/processors/code_snippet_import_preprocessor.rb +127 -0
  17. data/lib/docyard/components/processors/heading_anchor_processor.rb +39 -0
  18. data/lib/docyard/components/processors/icon_processor.rb +53 -0
  19. data/lib/docyard/components/processors/table_of_contents_processor.rb +68 -0
  20. data/lib/docyard/components/processors/table_wrapper_processor.rb +22 -0
  21. data/lib/docyard/components/processors/tabs_processor.rb +48 -0
  22. data/lib/docyard/components/support/code_block/feature_extractor.rb +117 -0
  23. data/lib/docyard/components/support/code_block/icon_detector.rb +44 -0
  24. data/lib/docyard/components/support/code_block/line_parser.rb +84 -0
  25. data/lib/docyard/components/support/code_block/line_wrapper.rb +50 -0
  26. data/lib/docyard/components/support/code_block/patterns.rb +55 -0
  27. data/lib/docyard/components/support/code_detector.rb +61 -0
  28. data/lib/docyard/components/support/tabs/icon_detector.rb +62 -0
  29. data/lib/docyard/components/support/tabs/parser.rb +195 -0
  30. data/lib/docyard/components/support/tabs/range_finder.rb +46 -0
  31. data/lib/docyard/config/branding_resolver.rb +183 -0
  32. data/lib/docyard/{constants.rb → config/constants.rb} +7 -4
  33. data/lib/docyard/config/validator.rb +122 -99
  34. data/lib/docyard/config.rb +38 -36
  35. data/lib/docyard/initializer.rb +15 -76
  36. data/lib/docyard/navigation/breadcrumb_builder.rb +133 -0
  37. data/lib/docyard/{prev_next_builder.rb → navigation/prev_next_builder.rb} +6 -3
  38. data/lib/docyard/navigation/sidebar/children_discoverer.rb +51 -0
  39. data/lib/docyard/navigation/sidebar/config_parser.rb +208 -0
  40. data/lib/docyard/navigation/sidebar/file_resolver.rb +78 -0
  41. data/lib/docyard/{sidebar → navigation/sidebar}/file_system_scanner.rb +2 -1
  42. data/lib/docyard/navigation/sidebar/item.rb +96 -0
  43. data/lib/docyard/navigation/sidebar/local_config_loader.rb +51 -0
  44. data/lib/docyard/navigation/sidebar/metadata_extractor.rb +69 -0
  45. data/lib/docyard/navigation/sidebar/metadata_reader.rb +47 -0
  46. data/lib/docyard/navigation/sidebar/path_prefixer.rb +34 -0
  47. data/lib/docyard/navigation/sidebar/renderer.rb +144 -0
  48. data/lib/docyard/navigation/sidebar/sorter.rb +21 -0
  49. data/lib/docyard/navigation/sidebar/tree_builder.rb +139 -0
  50. data/lib/docyard/navigation/sidebar/tree_filter.rb +55 -0
  51. data/lib/docyard/navigation/sidebar_builder.rb +159 -0
  52. data/lib/docyard/rendering/icon_helpers.rb +13 -0
  53. data/lib/docyard/{icons → rendering/icons}/phosphor.rb +26 -1
  54. data/lib/docyard/{markdown.rb → rendering/markdown.rb} +19 -13
  55. data/lib/docyard/rendering/renderer.rb +163 -0
  56. data/lib/docyard/rendering/template_resolver.rb +172 -0
  57. data/lib/docyard/routing/fallback_resolver.rb +92 -0
  58. data/lib/docyard/search/build_indexer.rb +74 -0
  59. data/lib/docyard/search/dev_indexer.rb +155 -0
  60. data/lib/docyard/search/pagefind_support.rb +33 -0
  61. data/lib/docyard/{asset_handler.rb → server/asset_handler.rb} +24 -19
  62. data/lib/docyard/{server.rb → server/dev_server.rb} +32 -9
  63. data/lib/docyard/server/pagefind_handler.rb +63 -0
  64. data/lib/docyard/{preview_server.rb → server/preview_server.rb} +2 -2
  65. data/lib/docyard/server/rack_application.rb +192 -0
  66. data/lib/docyard/server/resolution_result.rb +29 -0
  67. data/lib/docyard/{router.rb → server/router.rb} +4 -4
  68. data/lib/docyard/templates/assets/css/code.css +18 -51
  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/code-block.css +180 -282
  72. data/lib/docyard/templates/assets/css/components/heading-anchor.css +28 -15
  73. data/lib/docyard/templates/assets/css/components/icon.css +0 -1
  74. data/lib/docyard/templates/assets/css/components/logo.css +0 -2
  75. data/lib/docyard/templates/assets/css/components/nav-menu.css +237 -0
  76. data/lib/docyard/templates/assets/css/components/navigation.css +186 -167
  77. data/lib/docyard/templates/assets/css/components/prev-next.css +76 -47
  78. data/lib/docyard/templates/assets/css/components/search.css +561 -0
  79. data/lib/docyard/templates/assets/css/components/tab-bar.css +163 -0
  80. data/lib/docyard/templates/assets/css/components/table-of-contents.css +127 -114
  81. data/lib/docyard/templates/assets/css/components/tabs.css +119 -160
  82. data/lib/docyard/templates/assets/css/components/theme-toggle.css +48 -44
  83. data/lib/docyard/templates/assets/css/landing.css +815 -0
  84. data/lib/docyard/templates/assets/css/layout.css +503 -87
  85. data/lib/docyard/templates/assets/css/main.css +1 -3
  86. data/lib/docyard/templates/assets/css/markdown.css +111 -93
  87. data/lib/docyard/templates/assets/css/reset.css +0 -3
  88. data/lib/docyard/templates/assets/css/typography.css +43 -41
  89. data/lib/docyard/templates/assets/css/variables.css +268 -208
  90. data/lib/docyard/templates/assets/favicon.svg +7 -8
  91. data/lib/docyard/templates/assets/fonts/Inter-Variable.ttf +0 -0
  92. data/lib/docyard/templates/assets/js/components/code-block.js +24 -42
  93. data/lib/docyard/templates/assets/js/components/heading-anchor.js +26 -24
  94. data/lib/docyard/templates/assets/js/components/navigation.js +181 -70
  95. data/lib/docyard/templates/assets/js/components/search.js +610 -0
  96. data/lib/docyard/templates/assets/js/components/sidebar-toggle.js +29 -0
  97. data/lib/docyard/templates/assets/js/components/tab-navigation.js +145 -0
  98. data/lib/docyard/templates/assets/js/components/table-of-contents.js +153 -66
  99. data/lib/docyard/templates/assets/js/components/tabs.js +31 -69
  100. data/lib/docyard/templates/assets/js/theme.js +0 -3
  101. data/lib/docyard/templates/assets/logo-dark.svg +8 -2
  102. data/lib/docyard/templates/assets/logo.svg +7 -4
  103. data/lib/docyard/templates/config/docyard.yml.erb +37 -34
  104. data/lib/docyard/templates/errors/404.html.erb +1 -1
  105. data/lib/docyard/templates/errors/500.html.erb +1 -1
  106. data/lib/docyard/templates/layouts/default.html.erb +19 -56
  107. data/lib/docyard/templates/layouts/splash.html.erb +176 -0
  108. data/lib/docyard/templates/partials/_breadcrumbs.html.erb +24 -0
  109. data/lib/docyard/templates/partials/_code_block.html.erb +6 -4
  110. data/lib/docyard/templates/partials/_doc_footer.html.erb +25 -0
  111. data/lib/docyard/templates/partials/_features.html.erb +15 -0
  112. data/lib/docyard/templates/partials/_footer.html.erb +42 -0
  113. data/lib/docyard/templates/partials/_head.html.erb +22 -0
  114. data/lib/docyard/templates/partials/_header.html.erb +49 -0
  115. data/lib/docyard/templates/partials/_heading_anchor.html.erb +3 -1
  116. data/lib/docyard/templates/partials/_hero.html.erb +27 -0
  117. data/lib/docyard/templates/partials/_nav_group.html.erb +25 -11
  118. data/lib/docyard/templates/partials/_nav_leaf.html.erb +1 -1
  119. data/lib/docyard/templates/partials/_nav_menu.html.erb +42 -0
  120. data/lib/docyard/templates/partials/_nav_nested_section.html.erb +11 -0
  121. data/lib/docyard/templates/partials/_nav_section.html.erb +1 -1
  122. data/lib/docyard/templates/partials/_prev_next.html.erb +9 -3
  123. data/lib/docyard/templates/partials/_scripts.html.erb +7 -0
  124. data/lib/docyard/templates/partials/_search_modal.html.erb +41 -0
  125. data/lib/docyard/templates/partials/_search_trigger.html.erb +18 -0
  126. data/lib/docyard/templates/partials/_sidebar.html.erb +21 -4
  127. data/lib/docyard/templates/partials/_tab_bar.html.erb +25 -0
  128. data/lib/docyard/templates/partials/_table_of_contents.html.erb +12 -12
  129. data/lib/docyard/templates/partials/_table_of_contents_toggle.html.erb +1 -3
  130. data/lib/docyard/templates/partials/_tabs.html.erb +2 -2
  131. data/lib/docyard/templates/partials/_theme_toggle.html.erb +2 -11
  132. data/lib/docyard/utils/html_helpers.rb +14 -0
  133. data/lib/docyard/utils/path_resolver.rb +2 -1
  134. data/lib/docyard/utils/url_helpers.rb +20 -0
  135. data/lib/docyard/version.rb +1 -1
  136. data/lib/docyard.rb +22 -15
  137. metadata +89 -50
  138. data/lib/docyard/components/callout_processor.rb +0 -121
  139. data/lib/docyard/components/code_block_diff_preprocessor.rb +0 -104
  140. data/lib/docyard/components/code_block_feature_extractor.rb +0 -113
  141. data/lib/docyard/components/code_block_focus_preprocessor.rb +0 -77
  142. data/lib/docyard/components/code_block_icon_detector.rb +0 -40
  143. data/lib/docyard/components/code_block_line_wrapper.rb +0 -46
  144. data/lib/docyard/components/code_block_options_preprocessor.rb +0 -76
  145. data/lib/docyard/components/code_block_patterns.rb +0 -51
  146. data/lib/docyard/components/code_block_processor.rb +0 -176
  147. data/lib/docyard/components/code_detector.rb +0 -59
  148. data/lib/docyard/components/code_line_parser.rb +0 -80
  149. data/lib/docyard/components/code_snippet_import_preprocessor.rb +0 -125
  150. data/lib/docyard/components/heading_anchor_processor.rb +0 -34
  151. data/lib/docyard/components/icon_detector.rb +0 -57
  152. data/lib/docyard/components/icon_processor.rb +0 -51
  153. data/lib/docyard/components/table_of_contents_processor.rb +0 -64
  154. data/lib/docyard/components/table_wrapper_processor.rb +0 -18
  155. data/lib/docyard/components/tabs_parser.rb +0 -191
  156. data/lib/docyard/components/tabs_processor.rb +0 -44
  157. data/lib/docyard/components/tabs_range_finder.rb +0 -42
  158. data/lib/docyard/rack_application.rb +0 -172
  159. data/lib/docyard/renderer.rb +0 -120
  160. data/lib/docyard/routing/resolution_result.rb +0 -31
  161. data/lib/docyard/sidebar/config_parser.rb +0 -180
  162. data/lib/docyard/sidebar/item.rb +0 -58
  163. data/lib/docyard/sidebar/renderer.rb +0 -137
  164. data/lib/docyard/sidebar/tree_builder.rb +0 -59
  165. data/lib/docyard/sidebar_builder.rb +0 -102
  166. data/lib/docyard/templates/markdown/getting-started/installation.md.erb +0 -77
  167. data/lib/docyard/templates/markdown/guides/configuration.md.erb +0 -202
  168. data/lib/docyard/templates/markdown/guides/markdown-features.md.erb +0 -247
  169. data/lib/docyard/templates/markdown/index.md.erb +0 -82
  170. /data/lib/docyard/{sidebar → navigation/sidebar}/title_extractor.rb +0 -0
  171. /data/lib/docyard/{icons → rendering/icons}/LICENSE.phosphor +0 -0
  172. /data/lib/docyard/{icons → rendering/icons}/file_types.rb +0 -0
  173. /data/lib/docyard/{icons.rb → rendering/icons.rb} +0 -0
  174. /data/lib/docyard/{language_mapping.rb → rendering/language_mapping.rb} +0 -0
  175. /data/lib/docyard/{file_watcher.rb → server/file_watcher.rb} +0 -0
  176. /data/lib/docyard/{errors.rb → utils/errors.rb} +0 -0
  177. /data/lib/docyard/{logging.rb → utils/logging.rb} +0 -0
@@ -1,113 +1,73 @@
1
- /* Tabs Component */
2
-
3
1
  .docyard-tabs {
4
- margin: var(--space-6) 0;
5
- border-radius: var(--radius-lg);
6
- overflow: hidden;
7
- background: var(--color-bg);
8
- border: 1px solid var(--color-border);
9
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
10
- }
11
-
12
- .dark .docyard-tabs {
13
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
2
+ margin: var(--spacing-6) 0;
14
3
  }
15
4
 
16
- /* Tab List Wrapper */
17
5
  .docyard-tabs__list-wrapper {
18
6
  position: relative;
19
- background: var(--color-bg-secondary);
20
7
  }
21
8
 
22
- .dark .docyard-tabs__list-wrapper {
23
- background: rgba(255, 255, 255, 0.03);
9
+ .docyard-tabs__list-wrapper::after {
10
+ content: '';
11
+ position: absolute;
12
+ bottom: 0;
13
+ left: 0;
14
+ right: 0;
15
+ height: 1px;
16
+ background: var(--border);
24
17
  }
25
18
 
26
- /* Tab List Container */
27
19
  .docyard-tabs__list {
28
20
  display: flex;
29
- gap: var(--space-2);
30
- padding: 0 var(--space-4);
31
- background: transparent;
21
+ align-items: center;
22
+ gap: var(--spacing-1);
32
23
  position: relative;
33
24
  overflow-x: auto;
25
+ overscroll-behavior-x: contain;
34
26
  -webkit-overflow-scrolling: touch;
35
27
  scrollbar-width: none;
36
28
  margin: 0;
29
+ padding-bottom: var(--spacing-3);
37
30
  }
38
31
 
39
32
  .docyard-tabs__list::-webkit-scrollbar {
40
33
  display: none;
41
34
  }
42
35
 
43
- /* Bottom border line */
44
- .docyard-tabs__list::after {
45
- content: '';
46
- position: absolute;
47
- bottom: 0;
48
- left: 0;
49
- right: 0;
50
- height: 2px;
51
- background: var(--color-border);
52
- z-index: 0;
53
- }
54
-
55
- /* Individual Tab Button */
56
36
  .docyard-tabs__tab {
57
- display: flex;
37
+ display: inline-flex;
58
38
  align-items: center;
59
- gap: var(--space-2);
60
- padding: var(--space-4) var(--space-4);
39
+ justify-content: center;
40
+ gap: var(--spacing-1-5);
41
+ padding: var(--spacing-2) var(--spacing-3);
61
42
  background: transparent;
62
43
  border: none;
63
- border-radius: 0;
64
- font-size: var(--font-size-sm);
65
- font-weight: var(--font-weight-semibold);
44
+ border-radius: var(--radius-md);
45
+ font-size: var(--text-sm);
46
+ font-weight: var(--font-medium);
66
47
  font-family: var(--font-sans);
67
- color: var(--color-text-secondary);
48
+ color: var(--muted-foreground);
68
49
  cursor: pointer;
69
- transition: color 0.2s ease, background-color 0.2s ease;
50
+ transition: color 0.15s ease;
70
51
  position: relative;
71
52
  white-space: nowrap;
72
53
  flex-shrink: 0;
73
54
  line-height: 1.5;
74
- z-index: 1;
55
+ outline: none;
75
56
  }
76
57
 
77
58
  .docyard-tabs__tab:hover {
78
- color: var(--color-primary);
79
- background: rgba(0, 0, 0, 0.02);
80
- }
81
-
82
- .dark .docyard-tabs__tab:hover {
83
- background: rgba(255, 255, 255, 0.04);
59
+ color: var(--foreground);
84
60
  }
85
61
 
86
62
  .docyard-tabs__tab[aria-selected="true"] {
87
- color: var(--color-primary);
88
- background: var(--color-code-bg);
63
+ color: var(--foreground);
89
64
  }
90
65
 
91
- /* Cover the border-bottom for active tab */
92
- .docyard-tabs__tab[aria-selected="true"]::after {
93
- content: '';
94
- position: absolute;
95
- bottom: 0;
96
- left: 0;
97
- right: 0;
98
- height: 2px;
99
- background: var(--color-code-bg);
100
- z-index: 2;
101
- }
102
-
103
- /* Focus state */
104
66
  .docyard-tabs__tab:focus-visible {
105
- outline: 2px solid var(--color-primary);
67
+ outline: 2px solid var(--ring);
106
68
  outline-offset: 2px;
107
- z-index: 1;
108
69
  }
109
70
 
110
- /* Tab Icon Container */
111
71
  .docyard-tabs__icon {
112
72
  display: inline-flex;
113
73
  align-items: center;
@@ -125,7 +85,22 @@
125
85
  height: 100%;
126
86
  }
127
87
 
128
- /* Scroll Indicators */
88
+ .docyard-tabs__indicator {
89
+ position: absolute;
90
+ bottom: 0;
91
+ left: 0;
92
+ height: 2px;
93
+ background: var(--foreground);
94
+ border-radius: 1px;
95
+ pointer-events: none;
96
+ z-index: 1;
97
+
98
+ transition:
99
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
100
+ width 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
101
+ will-change: transform, width;
102
+ }
103
+
129
104
  .docyard-tabs__scroll-indicator {
130
105
  position: absolute;
131
106
  top: 0;
@@ -134,135 +109,125 @@
134
109
  pointer-events: none;
135
110
  z-index: 2;
136
111
  opacity: 0;
137
- transition: opacity var(--transition-base);
112
+ transition: opacity 0.2s ease;
138
113
  }
139
114
 
140
115
  .docyard-tabs__scroll-indicator--left {
141
116
  left: 0;
142
- background: linear-gradient(to right,
143
- var(--color-bg-secondary),
144
- transparent);
117
+ background: linear-gradient(to right, var(--background), transparent);
145
118
  }
146
119
 
147
120
  .docyard-tabs__scroll-indicator--right {
148
121
  right: 0;
149
- background: linear-gradient(to left,
150
- var(--color-bg-secondary),
151
- transparent);
122
+ background: linear-gradient(to left, var(--background), transparent);
152
123
  }
153
124
 
154
125
  .docyard-tabs__scroll-indicator.is-visible {
155
126
  opacity: 1;
156
127
  }
157
128
 
158
- /* Slide Indicator */
159
- .docyard-tabs__indicator {
160
- position: absolute;
161
- top: 0;
162
- left: 0;
163
- height: 2px;
164
- background: var(--color-primary);
165
- transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
166
- width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
167
- will-change: transform, width;
168
- pointer-events: none;
169
- z-index: 3;
170
- }
171
-
172
- /* Tab Panel Container */
173
129
  .docyard-tabs__panel {
174
- padding: 0;
130
+ padding: var(--spacing-6) 0;
175
131
  display: none;
176
132
  outline: none;
177
- background: var(--color-bg);
178
- }
179
-
180
- /* Panel base styles */
181
- .docyard-tabs__panel p {
182
- margin-bottom: 0;
133
+ font-size: var(--text-base);
183
134
  }
184
135
 
185
136
  .docyard-tabs__panel[aria-hidden="false"] {
186
137
  display: block;
138
+ animation: tabContentFadeIn 0.3s cubic-bezier(0.16, 1, 0.3, 1);
187
139
  }
188
140
 
189
- /* Panel content spacing */
190
- .docyard-tabs__panel>*:first-child {
191
- margin-top: 0;
141
+ @keyframes tabContentFadeIn {
142
+ from {
143
+ opacity: 0;
144
+ transform: translateY(4px);
145
+ }
146
+ to {
147
+ opacity: 1;
148
+ transform: translateY(0);
149
+ }
192
150
  }
193
151
 
194
- .docyard-tabs__panel>*:last-child {
195
- margin-bottom: 0;
152
+ .docyard-tabs__panel[data-direction="left"][aria-hidden="false"] {
153
+ animation: tabContentSlideFromLeft 0.3s cubic-bezier(0.16, 1, 0.3, 1);
196
154
  }
197
155
 
198
- /* Code blocks inside tabs */
199
- .docyard-tabs__panel .docyard-code-block {
200
- margin: 0;
156
+ .docyard-tabs__panel[data-direction="right"][aria-hidden="false"] {
157
+ animation: tabContentSlideFromRight 0.3s cubic-bezier(0.16, 1, 0.3, 1);
201
158
  }
202
159
 
203
- /* Reset code block styling in tabs */
204
- .docyard-tabs__panel .docyard-code-block .highlight {
205
- border: none;
206
- border-radius: 0;
207
- box-shadow: none;
208
- background: transparent;
160
+ @keyframes tabContentSlideFromLeft {
161
+ from {
162
+ opacity: 0;
163
+ transform: translateX(-8px);
164
+ }
165
+ to {
166
+ opacity: 1;
167
+ transform: translateX(0);
168
+ }
209
169
  }
210
170
 
211
- /* Panel styles with :has() support */
212
- @supports selector(:has(*)) {
213
- .docyard-tabs__panel:not(:has(> [class*="language-"]:only-child)) {
214
- padding: var(--space-6);
171
+ @keyframes tabContentSlideFromRight {
172
+ from {
173
+ opacity: 0;
174
+ transform: translateX(8px);
215
175
  }
216
-
217
- .docyard-tabs__panel:has(> [class*="language-"]:only-child) {
218
- background: var(--color-code-bg);
176
+ to {
177
+ opacity: 1;
178
+ transform: translateX(0);
219
179
  }
180
+ }
220
181
 
221
- .docyard-tabs__panel:has(> [class*="language-"]:only-child) .highlight pre {
222
- padding: var(--space-6);
223
- background: transparent;
224
- }
182
+ .docyard-tabs__panel > *:first-child {
183
+ margin-top: 0;
225
184
  }
226
185
 
227
- /* Fallback for browsers without :has() */
228
- @supports not selector(:has(*)) {
229
- .docyard-tabs__panel {
230
- padding: var(--space-6);
231
- }
186
+ .docyard-tabs__panel > *:last-child {
187
+ margin-bottom: 0;
188
+ }
189
+
190
+ .docyard-tabs__panel p {
191
+ margin-bottom: var(--spacing-4);
192
+ }
193
+
194
+ .docyard-tabs__panel p:last-child {
195
+ margin-bottom: 0;
196
+ }
197
+
198
+ .docyard-tabs__panel .docyard-code-block {
199
+ margin: var(--spacing-4) 0;
200
+ }
201
+
202
+ .docyard-tabs__panel .docyard-code-block:first-child {
203
+ margin-top: 0;
232
204
  }
233
205
 
234
- /* Code blocks with siblings */
235
- .docyard-tabs__panel .docyard-code-block:not(:only-child) .highlight {
236
- border: 1px solid var(--color-border);
237
- border-radius: var(--radius-lg);
238
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.03);
239
- margin: var(--space-4) 0;
240
- background: var(--color-code-bg);
206
+ .docyard-tabs__panel .docyard-code-block:last-child {
207
+ margin-bottom: 0;
241
208
  }
242
209
 
243
- /* Inline code inside tabs */
244
- .docyard-tabs__panel :not(pre)>code {
245
- background-color: var(--color-code-bg);
210
+ .docyard-tabs__panel :not(pre) > code {
211
+ background-color: oklch(from var(--input) l c h / 30%);
246
212
  padding: 0.125rem 0.375rem;
247
213
  border-radius: var(--radius-sm);
248
214
  font-size: 0.9em;
249
215
  }
250
216
 
251
- /* Mobile responsive */
252
217
  @media (max-width: 640px) {
253
218
  .docyard-tabs {
254
- margin: var(--space-4) 0;
219
+ margin: var(--spacing-4) 0;
255
220
  }
256
221
 
257
222
  .docyard-tabs__list {
258
- padding: 0 var(--space-3);
259
- gap: var(--space-1);
223
+ gap: 0;
224
+ padding-bottom: var(--spacing-2);
260
225
  }
261
226
 
262
227
  .docyard-tabs__tab {
263
- padding: var(--space-3) var(--space-3);
264
- font-size: var(--font-size-sm);
265
- gap: var(--space-2);
228
+ padding: var(--spacing-1-5) var(--spacing-2);
229
+ font-size: var(--text-sm);
230
+ gap: var(--spacing-1);
266
231
  }
267
232
 
268
233
  .docyard-tabs__icon .docyard-icon {
@@ -271,35 +236,29 @@
271
236
  }
272
237
 
273
238
  .docyard-tabs__panel {
274
- padding: var(--space-4);
275
- }
276
-
277
- .docyard-tabs__panel pre code {
278
- font-size: var(--font-size-sm);
279
- }
280
-
281
- .docyard-tabs__panel .highlighter-rouge:not(:only-child) .highlight pre code {
282
- padding: var(--space-3) !important;
283
- font-size: var(--font-size-sm);
239
+ padding: var(--spacing-4) 0;
284
240
  }
285
241
  }
286
242
 
287
- /* Reduced motion support */
288
243
  @media (prefers-reduced-motion: reduce) {
289
244
  .docyard-tabs__tab,
290
- .docyard-tabs__indicator {
245
+ .docyard-tabs__indicator,
246
+ .docyard-tabs__panel[aria-hidden="false"] {
291
247
  transition: none;
248
+ animation: none;
292
249
  }
293
250
  }
294
251
 
295
- /* High contrast mode support */
296
252
  @media (prefers-contrast: high) {
297
- .docyard-tabs {
298
- box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.2);
253
+ .docyard-tabs__list-wrapper::after {
254
+ height: 2px;
255
+ }
256
+
257
+ .docyard-tabs__indicator {
258
+ height: 3px;
299
259
  }
300
260
 
301
261
  .docyard-tabs__tab[aria-selected="true"] {
302
- outline: 2px solid var(--color-primary);
303
- outline-offset: -2px;
262
+ text-decoration: underline;
304
263
  }
305
264
  }
@@ -1,69 +1,73 @@
1
- /* Theme Toggle */
2
1
  .theme-toggle {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ width: 2.25rem;
6
+ height: 2.25rem;
3
7
  padding: 0;
4
- margin-left: var(--space-4);
5
- background: none;
6
- border: none;
8
+ margin-left: var(--spacing-3);
9
+ background: transparent;
10
+ border: 1px solid transparent;
11
+ border-radius: var(--radius-4xl);
7
12
  cursor: pointer;
8
- position: relative;
13
+ color: var(--muted-foreground);
14
+ transition: background-color var(--transition-fast), color var(--transition-fast);
15
+ outline: none;
16
+ flex-shrink: 0;
9
17
  }
10
18
 
11
- .theme-toggle-track {
12
- display: flex;
13
- align-items: center;
14
- justify-content: space-between;
15
- position: relative;
16
- width: 3.25rem;
17
- height: 1.75rem;
18
- padding: 0 0.375rem;
19
- border-radius: 0.875rem;
20
- background-color: var(--color-border);
21
- border: 1px solid var(--color-border);
22
- transition: background-color 0.25s ease;
19
+ .theme-toggle:hover {
20
+ background-color: var(--muted);
21
+ color: var(--foreground);
23
22
  }
24
23
 
25
- .theme-toggle:hover .theme-toggle-track {
26
- background-color: var(--color-border-secondary);
24
+ .dark .theme-toggle:hover {
25
+ background-color: oklch(from var(--muted) l c h / 50%);
27
26
  }
28
27
 
29
- .theme-toggle-icon {
30
- position: relative;
31
- z-index: 1;
32
- flex-shrink: 0;
28
+ .theme-toggle:focus-visible {
29
+ outline: none;
30
+ border-color: var(--ring);
31
+ box-shadow: 0 0 0 var(--ring-width) oklch(from var(--ring) l c h / 50%);
32
+ }
33
+
34
+ .theme-toggle-sun,
35
+ .theme-toggle-moon {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
33
39
  }
34
40
 
35
- .theme-toggle-sun-icon {
36
- color: var(--color-warning);
41
+ .theme-toggle-sun .docyard-icon,
42
+ .theme-toggle-moon .docyard-icon {
43
+ width: 1.125rem;
44
+ height: 1.125rem;
37
45
  }
38
46
 
39
- .theme-toggle-moon-icon {
40
- color: var(--color-text-tertiary);
47
+ .theme-toggle-sun {
48
+ display: none;
41
49
  }
42
50
 
43
- .dark .theme-toggle-moon-icon {
44
- color: var(--color-primary);
51
+ .theme-toggle-moon {
52
+ display: flex;
45
53
  }
46
54
 
47
- .theme-toggle-thumb {
48
- position: absolute;
49
- top: 0.125rem;
50
- left: 0.125rem;
51
- width: 1.375rem;
52
- height: 1.375rem;
53
- background-color: var(--color-bg);
54
- border-radius: 50%;
55
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
56
- transition: transform 0.25s ease;
55
+ .dark .theme-toggle-sun {
56
+ display: flex;
57
57
  }
58
58
 
59
- .dark .theme-toggle-thumb {
60
- transform: translateX(1.5rem);
59
+ .dark .theme-toggle-moon {
60
+ display: none;
61
+ }
62
+
63
+ @media (max-width: 1024px) {
64
+ .theme-toggle {
65
+ margin-left: var(--spacing-1);
66
+ }
61
67
  }
62
68
 
63
- /* Reduced motion support */
64
69
  @media (prefers-reduced-motion: reduce) {
65
- .theme-toggle-track,
66
- .theme-toggle-thumb {
70
+ .theme-toggle {
67
71
  transition: none;
68
72
  }
69
73
  }