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
@@ -0,0 +1,281 @@
1
+ .docyard-code-group {
2
+ margin: var(--spacing-4) 0;
3
+ border: 1px solid var(--code-block-border);
4
+ border-radius: var(--radius-2xl);
5
+ overflow: hidden;
6
+ background-color: var(--code-block-bg);
7
+ }
8
+
9
+ .docyard-code-group__tabs-wrapper {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: var(--spacing-2);
13
+ padding: var(--spacing-2) var(--spacing-4) 0;
14
+ background: var(--code-block-header-bg);
15
+ border-bottom: 1px solid var(--code-block-header-border);
16
+ font-size: var(--text-xs);
17
+ font-weight: var(--font-medium);
18
+ color: var(--muted-foreground);
19
+ }
20
+
21
+ .docyard-code-group__tabs-scroll-container {
22
+ position: relative;
23
+ flex: 1;
24
+ min-width: 0;
25
+ }
26
+
27
+ .docyard-code-group__tabs {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: 0;
31
+ position: relative;
32
+ overflow-x: auto;
33
+ overscroll-behavior-x: contain;
34
+ -webkit-overflow-scrolling: touch;
35
+ scrollbar-width: none;
36
+ margin: 0;
37
+ padding: 0 0 var(--spacing-2);
38
+ }
39
+
40
+ .docyard-code-group__tabs::-webkit-scrollbar {
41
+ display: none;
42
+ }
43
+
44
+ .docyard-code-group__tab {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ gap: var(--spacing-1-5);
49
+ padding: var(--spacing-2) var(--spacing-2-5);
50
+ background: transparent;
51
+ border: none;
52
+ font-size: var(--text-sm);
53
+ font-weight: inherit;
54
+ font-family: var(--font-sans);
55
+ color: inherit;
56
+ cursor: pointer;
57
+ transition: color 0.15s ease;
58
+ position: relative;
59
+ white-space: nowrap;
60
+ flex-shrink: 0;
61
+ line-height: 1.5;
62
+ outline: none;
63
+ max-width: 12rem;
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ }
67
+
68
+ .docyard-code-group__tab:hover {
69
+ color: var(--foreground);
70
+ }
71
+
72
+ .docyard-code-group__tab[aria-selected="true"] {
73
+ color: var(--foreground);
74
+ }
75
+
76
+ .docyard-code-group__tab:focus-visible {
77
+ outline: 2px solid var(--ring);
78
+ outline-offset: -2px;
79
+ border-radius: var(--radius-sm);
80
+ }
81
+
82
+ .docyard-code-group__tab .docyard-icon {
83
+ width: 1rem;
84
+ height: 1rem;
85
+ display: inline-flex;
86
+ flex-shrink: 0;
87
+ }
88
+
89
+ .docyard-code-group__tab .docyard-icon svg {
90
+ width: 100%;
91
+ height: 100%;
92
+ }
93
+
94
+ .docyard-code-group__indicator {
95
+ position: absolute;
96
+ bottom: 0;
97
+ left: 0;
98
+ height: 2px;
99
+ background: var(--primary);
100
+ border-radius: 1px;
101
+ pointer-events: none;
102
+ z-index: 1;
103
+ transition:
104
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
105
+ width 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
106
+ will-change: transform, width;
107
+ }
108
+
109
+ .docyard-code-group__tabs-scroll-container.can-scroll-left .docyard-code-group__tabs {
110
+ mask-image: linear-gradient(to right, transparent, black 2rem);
111
+ -webkit-mask-image: linear-gradient(to right, transparent, black 2rem);
112
+ }
113
+
114
+ .docyard-code-group__tabs-scroll-container.can-scroll-right .docyard-code-group__tabs {
115
+ mask-image: linear-gradient(to left, transparent, black 2rem);
116
+ -webkit-mask-image: linear-gradient(to left, transparent, black 2rem);
117
+ }
118
+
119
+ .docyard-code-group__tabs-scroll-container.can-scroll-left.can-scroll-right .docyard-code-group__tabs {
120
+ mask-image: linear-gradient(to right, transparent, black 2rem, black calc(100% - 2rem), transparent);
121
+ -webkit-mask-image: linear-gradient(to right, transparent, black 2rem, black calc(100% - 2rem), transparent);
122
+ }
123
+
124
+ .docyard-code-group__copy {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ gap: var(--spacing-1-5);
129
+ height: 1.75rem;
130
+ padding: 0 var(--spacing-2-5);
131
+ margin-bottom: var(--spacing-2);
132
+ border: none;
133
+ border-radius: 9999px;
134
+ background-color: var(--code-block-copy-bg);
135
+ color: var(--muted-foreground);
136
+ cursor: pointer;
137
+ flex-shrink: 0;
138
+ transition:
139
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
140
+ background-color 0.2s ease,
141
+ color 0.2s ease,
142
+ box-shadow 0.2s ease;
143
+ box-shadow: var(--code-block-copy-shadow);
144
+ }
145
+
146
+ .docyard-code-group__copy:hover {
147
+ background-color: var(--code-block-copy-bg-hover);
148
+ color: var(--foreground);
149
+ box-shadow: var(--code-block-copy-shadow-hover);
150
+ }
151
+
152
+ .docyard-code-group__copy:active {
153
+ transform: scale(0.92);
154
+ transition:
155
+ transform 0.1s cubic-bezier(0.4, 0, 1, 1),
156
+ background-color 0.1s ease,
157
+ box-shadow 0.1s ease;
158
+ box-shadow: var(--code-block-copy-shadow-active);
159
+ }
160
+
161
+ .docyard-code-group__copy:focus-visible {
162
+ outline: none;
163
+ box-shadow:
164
+ 0 1px 2px oklch(from var(--foreground) l c h / 5%),
165
+ 0 0 0 2px var(--background),
166
+ 0 0 0 4px var(--ring);
167
+ }
168
+
169
+ .docyard-code-group__copy.is-success {
170
+ background-color: var(--primary);
171
+ color: white;
172
+ box-shadow:
173
+ 0 1px 2px oklch(from var(--primary) l c h / 20%),
174
+ 0 0 0 1px oklch(from var(--primary) l c h / 30%);
175
+ }
176
+
177
+ .docyard-code-group__copy.is-success:hover {
178
+ background-color: oklch(from var(--primary) calc(l - 0.03) c h);
179
+ color: white;
180
+ box-shadow:
181
+ 0 2px 4px oklch(from var(--primary) l c h / 25%),
182
+ 0 0 0 1px oklch(from var(--primary) l c h / 35%);
183
+ }
184
+
185
+ .docyard-code-group__copy-icon {
186
+ display: inline-flex;
187
+ align-items: center;
188
+ justify-content: center;
189
+ flex-shrink: 0;
190
+ }
191
+
192
+ .docyard-code-group__copy-icon svg {
193
+ width: 0.875rem;
194
+ height: 0.875rem;
195
+ }
196
+
197
+ .docyard-code-group__copy-text {
198
+ font-size: var(--text-xs);
199
+ font-weight: var(--font-medium);
200
+ font-family: var(--font-sans);
201
+ line-height: 1;
202
+ }
203
+
204
+ .docyard-code-group__panels {
205
+ position: relative;
206
+ }
207
+
208
+ .docyard-code-group__panel {
209
+ display: none;
210
+ outline: none;
211
+ }
212
+
213
+ .docyard-code-group__panel[aria-hidden="false"] {
214
+ display: block;
215
+ }
216
+
217
+ .docyard-code-group__panel .docyard-code-block {
218
+ margin: 0;
219
+ border: none;
220
+ border-radius: 0;
221
+ background-color: transparent;
222
+ }
223
+
224
+ .docyard-code-group__panel .docyard-code-block__header {
225
+ display: none;
226
+ }
227
+
228
+ .docyard-code-group__panel .docyard-code-block__copy {
229
+ display: none;
230
+ }
231
+
232
+ .docyard-code-group__panel .docyard-code-block__content {
233
+ border-radius: 0;
234
+ }
235
+
236
+ .docyard-code-group__panel .docyard-code-block pre {
237
+ border-radius: 0;
238
+ }
239
+
240
+ @media (max-width: 640px) {
241
+ .docyard-code-group {
242
+ border-radius: var(--radius-xl);
243
+ }
244
+
245
+ .docyard-code-group__tabs-wrapper {
246
+ padding: var(--spacing-2) var(--spacing-3) 0;
247
+ gap: var(--spacing-2);
248
+ }
249
+
250
+ .docyard-code-group__tab {
251
+ padding: var(--spacing-1-5) var(--spacing-2);
252
+ gap: var(--spacing-1);
253
+ }
254
+
255
+ .docyard-code-group__tab .docyard-icon {
256
+ width: 0.875rem;
257
+ height: 0.875rem;
258
+ }
259
+
260
+ .docyard-code-group__copy {
261
+ height: 1.5rem;
262
+ padding: 0 var(--spacing-2);
263
+ gap: var(--spacing-1);
264
+ }
265
+
266
+ .docyard-code-group__copy-icon svg {
267
+ width: 0.75rem;
268
+ height: 0.75rem;
269
+ }
270
+
271
+ .docyard-code-group__copy-text {
272
+ font-size: 0.625rem;
273
+ }
274
+ }
275
+
276
+ @media (prefers-reduced-motion: reduce) {
277
+ .docyard-code-group__tab,
278
+ .docyard-code-group__indicator {
279
+ transition: none;
280
+ }
281
+ }
@@ -0,0 +1,22 @@
1
+ .docyard-figure {
2
+ margin: var(--spacing-6) 0;
3
+ padding: 0;
4
+ text-align: center;
5
+ }
6
+
7
+ .docyard-figure img {
8
+ display: inline-block;
9
+ max-width: 100%;
10
+ height: auto;
11
+ border-radius: var(--radius-xl);
12
+ border: 1px solid var(--border);
13
+ cursor: zoom-in;
14
+ }
15
+
16
+ .docyard-figure figcaption {
17
+ margin-top: var(--spacing-3);
18
+ font-size: var(--text-sm);
19
+ color: var(--muted-foreground);
20
+ text-align: center;
21
+ font-style: italic;
22
+ }
@@ -0,0 +1,124 @@
1
+ .docyard-filetree {
2
+ font-family: var(--font-mono);
3
+ font-size: var(--text-base);
4
+ line-height: 1.6;
5
+ margin: var(--spacing-4) 0;
6
+ }
7
+
8
+ .docyard-filetree__list {
9
+ list-style: none !important;
10
+ margin: 0 !important;
11
+ padding: 0 !important;
12
+ }
13
+
14
+ .docyard-filetree__list .docyard-filetree__list {
15
+ margin-left: var(--spacing-1) !important;
16
+ padding-left: var(--spacing-4) !important;
17
+ border-left: 1px solid var(--border);
18
+ overflow: hidden;
19
+ }
20
+
21
+ .docyard-filetree__item {
22
+ list-style: none !important;
23
+ margin: 0 !important;
24
+ padding: 0 !important;
25
+ }
26
+
27
+ .docyard-filetree__entry {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: var(--spacing-2);
31
+ padding: var(--spacing-1) var(--spacing-2);
32
+ margin: 0 calc(-1 * var(--spacing-2));
33
+ border-radius: var(--radius-md);
34
+ cursor: default;
35
+ white-space: nowrap;
36
+ transition: background-color 0.15s ease;
37
+ }
38
+
39
+ .docyard-filetree__item--folder.docyard-filetree__item--has-children > .docyard-filetree__entry {
40
+ cursor: pointer;
41
+ user-select: none;
42
+ }
43
+
44
+ .docyard-filetree__item--folder.docyard-filetree__item--has-children > .docyard-filetree__entry:hover {
45
+ background-color: var(--muted);
46
+ }
47
+
48
+ .docyard-filetree__item--folder.docyard-filetree__item--has-children > .docyard-filetree__entry:active {
49
+ background-color: oklch(from var(--muted) calc(l - 0.05) c h);
50
+ transform: scale(0.995);
51
+ transition: transform 0.1s cubic-bezier(0.4, 0, 1, 1), background-color 0.1s ease;
52
+ }
53
+
54
+ .docyard-filetree__entry .docyard-icon {
55
+ flex-shrink: 0;
56
+ display: inline-flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ width: 1.125rem;
60
+ height: 1.125rem;
61
+ transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
62
+ }
63
+
64
+ .docyard-filetree__entry .docyard-icon svg {
65
+ width: 100%;
66
+ height: 100%;
67
+ }
68
+
69
+ .docyard-filetree__entry .docyard-icon-folder-open,
70
+ .docyard-filetree__entry .docyard-icon-folder {
71
+ color: var(--muted-foreground);
72
+ }
73
+
74
+ .docyard-filetree__entry .docyard-icon-file-text {
75
+ color: var(--muted-foreground);
76
+ opacity: 0.6;
77
+ }
78
+
79
+ .docyard-filetree__name {
80
+ color: var(--foreground);
81
+ transition: color 0.15s ease;
82
+ }
83
+
84
+ .docyard-filetree__item--folder > .docyard-filetree__entry .docyard-filetree__name {
85
+ font-weight: var(--font-medium);
86
+ }
87
+
88
+ .docyard-filetree__item--folder.docyard-filetree__item--has-children > .docyard-filetree__entry:hover .docyard-filetree__name {
89
+ color: var(--foreground);
90
+ }
91
+
92
+ .docyard-filetree__comment {
93
+ color: var(--muted-foreground);
94
+ font-style: italic;
95
+ margin-left: var(--spacing-2);
96
+ opacity: 0.7;
97
+ font-size: var(--text-sm);
98
+ }
99
+
100
+ .docyard-filetree__item--highlighted > .docyard-filetree__entry {
101
+ background-color: oklch(from var(--primary) l c h / 10%);
102
+ }
103
+
104
+ .docyard-filetree__item--highlighted > .docyard-filetree__entry .docyard-filetree__name {
105
+ color: var(--primary);
106
+ }
107
+
108
+ .docyard-filetree__item--highlighted > .docyard-filetree__entry:hover {
109
+ background-color: oklch(from var(--primary) l c h / 15%);
110
+ }
111
+
112
+ .docyard-filetree__item--collapsed > .docyard-filetree__list {
113
+ display: none;
114
+ }
115
+
116
+ @media (max-width: 640px) {
117
+ .docyard-filetree {
118
+ font-size: var(--text-sm);
119
+ }
120
+
121
+ .docyard-filetree__list .docyard-filetree__list {
122
+ padding-left: var(--spacing-3) !important;
123
+ }
124
+ }
@@ -4,26 +4,36 @@
4
4
  .content h5[id],
5
5
  .content h6[id] {
6
6
  position: relative;
7
- scroll-margin-top: 100px;
7
+ scroll-margin-top: calc(var(--header-height) + var(--spacing-6));
8
+ }
9
+
10
+ .has-tabs .content h2[id],
11
+ .has-tabs .content h3[id],
12
+ .has-tabs .content h4[id],
13
+ .has-tabs .content h5[id],
14
+ .has-tabs .content h6[id] {
15
+ scroll-margin-top: calc(var(--header-height) + 3rem + var(--spacing-6));
8
16
  }
9
17
 
10
- /* Tablet: Account for both primary + secondary header */
11
18
  @media (max-width: 1280px) and (min-width: 1025px) {
19
+
12
20
  .content h2[id],
13
21
  .content h3[id],
14
22
  .content h4[id],
15
23
  .content h5[id],
16
24
  .content h6[id] {
17
- scroll-margin-top: calc(var(--header-height) + 3rem + var(--space-4));
25
+ scroll-margin-top: calc(var(--header-height) + 3rem + var(--spacing-6));
18
26
  }
19
27
  }
20
28
 
21
29
  .heading-anchor {
22
- float: left;
23
- margin-left: -0.75em;
24
- padding-right: 0.25em;
25
- font-weight: var(--font-weight-normal);
26
- color: var(--color-primary);
30
+ position: absolute;
31
+ left: -1.75rem;
32
+ top: 50%;
33
+ transform: translateY(-50%);
34
+ font-size: 1.25rem;
35
+ font-weight: var(--font-normal);
36
+ color: var(--primary);
27
37
  text-decoration: none !important;
28
38
  opacity: 0;
29
39
  transition: opacity var(--transition-fast);
@@ -42,10 +52,10 @@
42
52
  text-decoration: none !important;
43
53
  }
44
54
 
45
- .heading-anchor:focus {
46
- outline: 2px solid var(--color-primary);
47
- outline-offset: 2px;
48
- border-radius: 4px;
55
+ .heading-anchor:focus-visible {
56
+ outline: none;
57
+ box-shadow: 0 0 0 var(--ring-width) oklch(from var(--ring) l c h / 50%);
58
+ border-radius: var(--radius-sm);
49
59
  }
50
60
 
51
61
  .content h2[id]:hover .heading-anchor,
@@ -57,11 +67,22 @@
57
67
  }
58
68
 
59
69
  @media (max-width: 1024px) {
70
+ .content h2[id],
71
+ .content h3[id],
72
+ .content h4[id],
73
+ .content h5[id],
74
+ .content h6[id] {
75
+ display: flex;
76
+ align-items: center;
77
+ flex-wrap: wrap;
78
+ }
79
+
60
80
  .heading-anchor {
61
81
  position: static;
62
- margin-left: var(--space-2);
63
- float: none;
64
- opacity: 0.6;
82
+ margin-left: var(--spacing-2);
83
+ font-size: 1.1rem;
84
+ opacity: 0.4;
85
+ transform: none;
65
86
  }
66
87
 
67
88
  .heading-anchor:hover,
@@ -1,4 +1,3 @@
1
- /* Icon System */
2
1
  .docyard-icon {
3
2
  display: inline-flex;
4
3
  align-items: center;
@@ -0,0 +1,65 @@
1
+ .docyard-lightbox {
2
+ position: fixed;
3
+ inset: 0;
4
+ z-index: 9999;
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ background: oklch(from var(--background) l c h / 75%);
9
+ backdrop-filter: blur(16px);
10
+ opacity: 0;
11
+ visibility: hidden;
12
+ transition: opacity 0.2s ease, visibility 0.2s ease;
13
+ cursor: zoom-out;
14
+ }
15
+
16
+ .docyard-lightbox.active {
17
+ opacity: 1;
18
+ visibility: visible;
19
+ }
20
+
21
+ .docyard-lightbox img {
22
+ max-width: 90vw;
23
+ max-height: 90vh;
24
+ object-fit: contain;
25
+ border-radius: var(--radius-xl);
26
+ border: 1px solid var(--border);
27
+ transform: scale(0.95);
28
+ transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
29
+ cursor: default;
30
+ }
31
+
32
+ .docyard-lightbox.active img {
33
+ transform: scale(1);
34
+ }
35
+
36
+ .docyard-lightbox-close {
37
+ position: absolute;
38
+ top: var(--spacing-6);
39
+ right: var(--spacing-6);
40
+ width: 2.25rem;
41
+ height: 2.25rem;
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ background: transparent;
46
+ border: none;
47
+ border-radius: var(--radius-4xl);
48
+ color: var(--muted-foreground);
49
+ cursor: pointer;
50
+ transition: background-color var(--transition-fast), color var(--transition-fast);
51
+ }
52
+
53
+ .docyard-lightbox-close:hover {
54
+ color: var(--foreground);
55
+ background-color: var(--muted);
56
+ }
57
+
58
+ .dark .docyard-lightbox-close:hover {
59
+ background-color: oklch(from var(--muted) l c h / 50%);
60
+ }
61
+
62
+ .docyard-lightbox-close svg {
63
+ width: 18px;
64
+ height: 18px;
65
+ }
@@ -1,4 +1,3 @@
1
- /* Site Logo */
2
1
  .site-logo-container {
3
2
  display: flex;
4
3
  align-items: center;
@@ -30,7 +29,6 @@
30
29
  display: block;
31
30
  }
32
31
 
33
-
34
32
  @media (max-width: 1024px) {
35
33
  .site-logo {
36
34
  height: 1.75rem;