docyard 0.7.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -1
  3. data/CHANGELOG.md +20 -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/config/branding_resolver.rb +126 -17
  10. data/lib/docyard/config/constants.rb +6 -4
  11. data/lib/docyard/config/validator.rb +122 -99
  12. data/lib/docyard/config.rb +36 -43
  13. data/lib/docyard/initializer.rb +15 -76
  14. data/lib/docyard/navigation/breadcrumb_builder.rb +133 -0
  15. data/lib/docyard/navigation/prev_next_builder.rb +4 -1
  16. data/lib/docyard/navigation/sidebar/children_discoverer.rb +51 -0
  17. data/lib/docyard/navigation/sidebar/config_parser.rb +136 -108
  18. data/lib/docyard/navigation/sidebar/file_resolver.rb +78 -0
  19. data/lib/docyard/navigation/sidebar/file_system_scanner.rb +2 -1
  20. data/lib/docyard/navigation/sidebar/item.rb +45 -7
  21. data/lib/docyard/navigation/sidebar/local_config_loader.rb +51 -0
  22. data/lib/docyard/navigation/sidebar/metadata_extractor.rb +69 -0
  23. data/lib/docyard/navigation/sidebar/metadata_reader.rb +47 -0
  24. data/lib/docyard/navigation/sidebar/path_prefixer.rb +34 -0
  25. data/lib/docyard/navigation/sidebar/renderer.rb +55 -37
  26. data/lib/docyard/navigation/sidebar/sorter.rb +21 -0
  27. data/lib/docyard/navigation/sidebar/tree_builder.rb +99 -26
  28. data/lib/docyard/navigation/sidebar/tree_filter.rb +55 -0
  29. data/lib/docyard/navigation/sidebar_builder.rb +105 -36
  30. data/lib/docyard/rendering/icon_helpers.rb +13 -0
  31. data/lib/docyard/rendering/icons/phosphor.rb +23 -1
  32. data/lib/docyard/rendering/markdown.rb +5 -0
  33. data/lib/docyard/rendering/renderer.rb +74 -34
  34. data/lib/docyard/rendering/template_resolver.rb +172 -0
  35. data/lib/docyard/routing/fallback_resolver.rb +92 -0
  36. data/lib/docyard/search/build_indexer.rb +1 -1
  37. data/lib/docyard/search/dev_indexer.rb +51 -6
  38. data/lib/docyard/search/pagefind_support.rb +2 -0
  39. data/lib/docyard/server/asset_handler.rb +24 -19
  40. data/lib/docyard/server/pagefind_handler.rb +63 -0
  41. data/lib/docyard/server/preview_server.rb +1 -1
  42. data/lib/docyard/server/rack_application.rb +81 -64
  43. data/lib/docyard/templates/assets/css/code.css +18 -51
  44. data/lib/docyard/templates/assets/css/components/breadcrumbs.css +143 -0
  45. data/lib/docyard/templates/assets/css/components/callout.css +67 -67
  46. data/lib/docyard/templates/assets/css/components/code-block.css +180 -282
  47. data/lib/docyard/templates/assets/css/components/heading-anchor.css +28 -15
  48. data/lib/docyard/templates/assets/css/components/icon.css +0 -1
  49. data/lib/docyard/templates/assets/css/components/logo.css +0 -2
  50. data/lib/docyard/templates/assets/css/components/nav-menu.css +237 -0
  51. data/lib/docyard/templates/assets/css/components/navigation.css +186 -167
  52. data/lib/docyard/templates/assets/css/components/prev-next.css +76 -47
  53. data/lib/docyard/templates/assets/css/components/search.css +186 -174
  54. data/lib/docyard/templates/assets/css/components/tab-bar.css +163 -0
  55. data/lib/docyard/templates/assets/css/components/table-of-contents.css +127 -114
  56. data/lib/docyard/templates/assets/css/components/tabs.css +119 -160
  57. data/lib/docyard/templates/assets/css/components/theme-toggle.css +48 -44
  58. data/lib/docyard/templates/assets/css/landing.css +815 -0
  59. data/lib/docyard/templates/assets/css/layout.css +489 -87
  60. data/lib/docyard/templates/assets/css/main.css +1 -3
  61. data/lib/docyard/templates/assets/css/markdown.css +111 -93
  62. data/lib/docyard/templates/assets/css/reset.css +0 -3
  63. data/lib/docyard/templates/assets/css/typography.css +43 -41
  64. data/lib/docyard/templates/assets/css/variables.css +268 -208
  65. data/lib/docyard/templates/assets/favicon.svg +7 -8
  66. data/lib/docyard/templates/assets/fonts/Inter-Variable.ttf +0 -0
  67. data/lib/docyard/templates/assets/js/components/code-block.js +24 -42
  68. data/lib/docyard/templates/assets/js/components/heading-anchor.js +26 -24
  69. data/lib/docyard/templates/assets/js/components/navigation.js +181 -70
  70. data/lib/docyard/templates/assets/js/components/search.js +0 -75
  71. data/lib/docyard/templates/assets/js/components/sidebar-toggle.js +29 -0
  72. data/lib/docyard/templates/assets/js/components/tab-navigation.js +145 -0
  73. data/lib/docyard/templates/assets/js/components/table-of-contents.js +153 -66
  74. data/lib/docyard/templates/assets/js/components/tabs.js +31 -69
  75. data/lib/docyard/templates/assets/js/theme.js +0 -3
  76. data/lib/docyard/templates/assets/logo-dark.svg +8 -2
  77. data/lib/docyard/templates/assets/logo.svg +7 -4
  78. data/lib/docyard/templates/config/docyard.yml.erb +37 -34
  79. data/lib/docyard/templates/errors/404.html.erb +1 -1
  80. data/lib/docyard/templates/errors/500.html.erb +1 -1
  81. data/lib/docyard/templates/layouts/default.html.erb +18 -67
  82. data/lib/docyard/templates/layouts/splash.html.erb +176 -0
  83. data/lib/docyard/templates/partials/_breadcrumbs.html.erb +24 -0
  84. data/lib/docyard/templates/partials/_code_block.html.erb +5 -3
  85. data/lib/docyard/templates/partials/_doc_footer.html.erb +25 -0
  86. data/lib/docyard/templates/partials/_features.html.erb +15 -0
  87. data/lib/docyard/templates/partials/_footer.html.erb +42 -0
  88. data/lib/docyard/templates/partials/_head.html.erb +22 -0
  89. data/lib/docyard/templates/partials/_header.html.erb +49 -0
  90. data/lib/docyard/templates/partials/_heading_anchor.html.erb +3 -1
  91. data/lib/docyard/templates/partials/_hero.html.erb +27 -0
  92. data/lib/docyard/templates/partials/_nav_group.html.erb +25 -11
  93. data/lib/docyard/templates/partials/_nav_leaf.html.erb +1 -1
  94. data/lib/docyard/templates/partials/_nav_menu.html.erb +42 -0
  95. data/lib/docyard/templates/partials/_nav_nested_section.html.erb +11 -0
  96. data/lib/docyard/templates/partials/_nav_section.html.erb +1 -1
  97. data/lib/docyard/templates/partials/_prev_next.html.erb +8 -2
  98. data/lib/docyard/templates/partials/_scripts.html.erb +7 -0
  99. data/lib/docyard/templates/partials/_search_modal.html.erb +2 -6
  100. data/lib/docyard/templates/partials/_search_trigger.html.erb +2 -6
  101. data/lib/docyard/templates/partials/_sidebar.html.erb +21 -4
  102. data/lib/docyard/templates/partials/_tab_bar.html.erb +25 -0
  103. data/lib/docyard/templates/partials/_table_of_contents.html.erb +12 -12
  104. data/lib/docyard/templates/partials/_table_of_contents_toggle.html.erb +1 -3
  105. data/lib/docyard/templates/partials/_tabs.html.erb +2 -2
  106. data/lib/docyard/templates/partials/_theme_toggle.html.erb +2 -11
  107. data/lib/docyard/version.rb +1 -1
  108. metadata +33 -5
  109. data/lib/docyard/templates/markdown/getting-started/installation.md.erb +0 -77
  110. data/lib/docyard/templates/markdown/guides/configuration.md.erb +0 -202
  111. data/lib/docyard/templates/markdown/guides/markdown-features.md.erb +0 -247
  112. data/lib/docyard/templates/markdown/index.md.erb +0 -82
@@ -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
  }