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,20 +1,29 @@
1
- /* Code Block Component */
2
-
3
1
  .docyard-code-block {
4
2
  position: relative;
5
- margin: var(--space-6) 0;
3
+ margin: var(--spacing-4) 0;
4
+ border-radius: var(--radius-2xl);
5
+ overflow: hidden;
6
+ background-color: var(--code-block-bg);
7
+ border: 1px solid var(--code-block-border);
6
8
  }
7
9
 
8
- .docyard-code-block .highlight {
10
+ .docyard-code-block .highlight,
11
+ .dark .docyard-code-block .highlight {
9
12
  margin: 0;
13
+ border: none;
14
+ border-radius: 0;
15
+ background-color: transparent;
10
16
  }
11
17
 
12
- /* Titled Code Block Layout */
13
- .docyard-code-block--titled {
14
- border: 1px solid var(--color-border);
15
- border-radius: var(--radius-lg);
16
- overflow: hidden;
17
- background-color: var(--color-code-bg);
18
+ .docyard-code-block .highlight pre,
19
+ .dark .docyard-code-block .highlight pre {
20
+ margin: 0;
21
+ background-color: transparent;
22
+ }
23
+
24
+ .docyard-code-block .highlight pre code,
25
+ .dark .docyard-code-block .highlight pre code {
26
+ background-color: transparent;
18
27
  }
19
28
 
20
29
  .docyard-code-block--titled .docyard-code-block__body {
@@ -25,33 +34,21 @@
25
34
  display: block;
26
35
  }
27
36
 
28
- .docyard-code-block--titled .highlight {
29
- margin: 0;
30
- border: none;
31
- border-radius: 0;
32
- box-shadow: none;
33
- }
34
-
35
- .docyard-code-block--titled .highlight pre {
36
- margin: 0;
37
- }
38
-
39
37
  .docyard-code-block--titled .highlight pre code {
40
38
  display: block;
41
- padding: var(--space-4);
39
+ padding: var(--spacing-4);
42
40
  }
43
41
 
44
- /* Code Block Header */
45
42
  .docyard-code-block__header {
46
43
  display: flex;
47
44
  align-items: center;
48
- gap: var(--space-2);
49
- padding: var(--space-3) var(--space-4);
50
- background: var(--color-bg-secondary);
51
- border-bottom: 1px solid var(--color-border);
52
- font-size: var(--font-size-sm);
53
- font-weight: var(--font-weight-semibold);
54
- color: var(--color-text-secondary);
45
+ gap: var(--spacing-2);
46
+ padding: var(--spacing-2) var(--spacing-4);
47
+ background: var(--code-block-header-bg);
48
+ border-bottom: 1px solid var(--code-block-header-border);
49
+ font-size: var(--text-xs);
50
+ font-weight: var(--font-medium);
51
+ color: var(--muted-foreground);
55
52
  }
56
53
 
57
54
  .docyard-code-block__icon {
@@ -79,7 +76,6 @@
79
76
  white-space: nowrap;
80
77
  }
81
78
 
82
- /* Copy button in header */
83
79
  .docyard-code-block__header .docyard-code-block__copy {
84
80
  position: relative;
85
81
  top: auto;
@@ -87,46 +83,34 @@
87
83
  flex-shrink: 0;
88
84
  }
89
85
 
90
- /* Body wrapper for titled blocks */
91
86
  .docyard-code-block__body {
92
87
  position: relative;
93
88
  }
94
89
 
95
- /* Line Numbers Layout */
96
- .docyard-code-block--line-numbers {
97
- border: 1px solid var(--color-border);
98
- border-radius: var(--radius-lg);
99
- background-color: var(--color-code-bg);
100
- overflow: hidden;
101
- }
102
-
103
90
  .docyard-code-block--line-numbers .docyard-code-block__body {
104
91
  display: flex;
105
92
  }
106
93
 
107
94
  .docyard-code-block--line-numbers .highlight {
108
- border: none;
109
- border-radius: 0;
110
95
  flex: 1;
111
96
  min-width: 0;
112
97
  }
113
98
 
114
99
  .docyard-code-block__lines {
115
100
  flex-shrink: 0;
116
- padding: var(--space-4) 0;
117
- border-right: 1px solid var(--color-border);
101
+ padding: var(--spacing-4) 0;
118
102
  text-align: right;
119
103
  user-select: none;
120
- color: var(--color-text-tertiary);
104
+ background-color: var(--code-block-gutter-bg);
105
+ color: oklch(from var(--muted-foreground) l c h / 60%);
121
106
  font-family: var(--font-mono);
122
- font-size: var(--font-size-sm);
123
- line-height: var(--line-height-relaxed);
124
- background-color: var(--color-code-bg);
107
+ font-size: var(--text-sm);
108
+ line-height: var(--leading-relaxed);
125
109
  }
126
110
 
127
111
  .docyard-code-block__lines span {
128
112
  display: block;
129
- padding: 0 var(--space-3);
113
+ padding: 0 var(--spacing-3);
130
114
  min-width: 2.5rem;
131
115
  }
132
116
 
@@ -134,144 +118,137 @@
134
118
  flex: 1;
135
119
  min-width: 0;
136
120
  overflow-x: auto;
121
+ overscroll-behavior-x: contain;
122
+ }
123
+
124
+ .docyard-code-block__scroll-spacer {
125
+ display: inline;
126
+ padding-right: 5rem;
127
+ }
128
+
129
+ .docyard-code-block:not(.docyard-code-block--titled) .docyard-code-block__copy {
130
+ backdrop-filter: blur(8px);
131
+ -webkit-backdrop-filter: blur(8px);
137
132
  }
138
133
 
139
- /* Line Highlighting */
140
134
  .docyard-code-line {
141
135
  display: block;
142
136
  }
143
137
 
144
138
  .docyard-code-line--highlighted {
145
- background-color: rgba(var(--color-primary-rgb), 0.1);
146
- border-left: 3px solid var(--color-primary);
147
- margin-left: calc(-1 * var(--space-4));
148
- margin-right: calc(-1 * var(--space-4));
149
- padding-left: calc(var(--space-4) - 3px);
150
- padding-right: var(--space-4);
139
+ background-color: oklch(from var(--primary) l c h / 10%);
140
+ border-left: 3px solid var(--primary);
141
+ margin-left: calc(-1 * var(--spacing-4));
142
+ margin-right: calc(-1 * var(--spacing-4));
143
+ padding-left: calc(var(--spacing-4) - 3px);
144
+ padding-right: var(--spacing-4);
151
145
  }
152
146
 
153
- /* Highlighted line number */
154
147
  .docyard-code-block__line--highlighted {
155
- background-color: rgba(var(--color-primary-rgb), 0.15);
156
- color: var(--color-primary);
148
+ background-color: oklch(from var(--primary) l c h / 15%);
149
+ color: var(--primary);
157
150
  font-weight: 500;
158
151
  }
159
152
 
160
- /* Diff line styles */
161
153
  .docyard-code-line--diff-add {
162
- background-color: var(--color-diff-add-bg);
163
- border-left: 3px solid var(--color-diff-add-border);
164
- margin-left: calc(-1 * var(--space-4));
165
- margin-right: calc(-1 * var(--space-4));
166
- padding-left: calc(var(--space-4) - 3px);
167
- padding-right: var(--space-4);
154
+ background-color: var(--diff-add-background);
155
+ border-left: 3px solid var(--diff-add-border);
156
+ margin-left: calc(-1 * var(--spacing-4));
157
+ margin-right: calc(-1 * var(--spacing-4));
158
+ padding-left: calc(var(--spacing-4) - 3px);
159
+ padding-right: var(--spacing-4);
168
160
  }
169
161
 
170
162
  .docyard-code-line--diff-remove {
171
- background-color: var(--color-diff-remove-bg);
172
- border-left: 3px solid var(--color-diff-remove-border);
173
- margin-left: calc(-1 * var(--space-4));
174
- margin-right: calc(-1 * var(--space-4));
175
- padding-left: calc(var(--space-4) - 3px);
176
- padding-right: var(--space-4);
163
+ background-color: var(--diff-remove-background);
164
+ border-left: 3px solid var(--diff-remove-border);
165
+ margin-left: calc(-1 * var(--spacing-4));
166
+ margin-right: calc(-1 * var(--spacing-4));
167
+ padding-left: calc(var(--spacing-4) - 3px);
168
+ padding-right: var(--spacing-4);
177
169
  }
178
170
 
179
- /* Error/Warning line styles */
180
171
  .docyard-code-line--error {
181
- background-color: var(--color-code-error-bg, rgba(239, 68, 68, 0.15));
182
- border-left: 3px solid var(--color-code-error-border, #ef4444);
183
- margin-left: calc(-1 * var(--space-4));
184
- margin-right: calc(-1 * var(--space-4));
185
- padding-left: calc(var(--space-4) - 3px);
186
- padding-right: var(--space-4);
172
+ background-color: var(--code-error-background);
173
+ border-left: 3px solid var(--code-error-border);
174
+ margin-left: calc(-1 * var(--spacing-4));
175
+ margin-right: calc(-1 * var(--spacing-4));
176
+ padding-left: calc(var(--spacing-4) - 3px);
177
+ padding-right: var(--spacing-4);
187
178
  }
188
179
 
189
180
  .docyard-code-line--warning {
190
- background-color: var(--color-code-warning-bg, rgba(245, 158, 11, 0.15));
191
- border-left: 3px solid var(--color-code-warning-border, #f59e0b);
192
- margin-left: calc(-1 * var(--space-4));
193
- margin-right: calc(-1 * var(--space-4));
194
- padding-left: calc(var(--space-4) - 3px);
195
- padding-right: var(--space-4);
181
+ background-color: var(--code-warning-background);
182
+ border-left: 3px solid var(--code-warning-border);
183
+ margin-left: calc(-1 * var(--spacing-4));
184
+ margin-right: calc(-1 * var(--spacing-4));
185
+ padding-left: calc(var(--spacing-4) - 3px);
186
+ padding-right: var(--spacing-4);
196
187
  }
197
188
 
198
- /* Diff gutter indicators */
199
189
  .docyard-code-block__line--diff-add {
200
- background-color: var(--color-diff-add-gutter-bg);
201
- color: var(--color-diff-add-indicator);
190
+ background-color: var(--diff-add-gutter);
191
+ color: var(--diff-add-indicator);
202
192
  font-weight: 500;
203
193
  }
204
194
 
205
195
  .docyard-code-block__line--diff-remove {
206
- background-color: var(--color-diff-remove-gutter-bg);
207
- color: var(--color-diff-remove-indicator);
196
+ background-color: var(--diff-remove-gutter);
197
+ color: var(--diff-remove-indicator);
208
198
  font-weight: 500;
209
199
  }
210
200
 
211
- /* Error/Warning line number indicators */
212
201
  .docyard-code-block__line--error {
213
- background-color: var(--color-code-error-gutter-bg, rgba(239, 68, 68, 0.2));
214
- color: var(--color-code-error-indicator, #991b1b);
202
+ background-color: var(--code-error-gutter);
203
+ color: var(--code-error-indicator);
215
204
  font-weight: 500;
216
205
  }
217
206
 
218
207
  .docyard-code-block__line--warning {
219
- background-color: var(--color-code-warning-gutter-bg, rgba(245, 158, 11, 0.2));
220
- color: var(--color-code-warning-indicator, #78350f);
208
+ background-color: var(--code-warning-gutter);
209
+ color: var(--code-warning-indicator);
221
210
  font-weight: 500;
222
211
  }
223
212
 
224
- /* Diff-only gutter */
225
- .docyard-code-block--diff:not(.docyard-code-block--line-numbers) {
226
- border: 1px solid var(--color-border);
227
- border-radius: var(--radius-lg);
228
- background-color: var(--color-code-bg);
229
- overflow: hidden;
230
- }
231
-
232
213
  .docyard-code-block--diff:not(.docyard-code-block--line-numbers) .docyard-code-block__body {
233
214
  display: flex;
234
215
  }
235
216
 
236
217
  .docyard-code-block--diff:not(.docyard-code-block--line-numbers) .highlight {
237
- border: none;
238
- border-radius: 0;
239
218
  flex: 1;
240
219
  min-width: 0;
241
220
  }
242
221
 
243
222
  .docyard-code-block__diff-gutter {
244
223
  flex-shrink: 0;
245
- padding: var(--space-4) 0;
246
- border-right: 1px solid var(--color-border);
224
+ padding: var(--spacing-4) 0;
247
225
  text-align: center;
248
226
  user-select: none;
249
- color: var(--color-text-tertiary);
227
+ background-color: var(--code-block-gutter-bg);
228
+ color: oklch(from var(--muted-foreground) l c h / 60%);
250
229
  font-family: var(--font-mono);
251
- font-size: var(--font-size-sm);
252
- line-height: var(--line-height-relaxed);
253
- background-color: var(--color-code-bg);
230
+ font-size: var(--text-sm);
231
+ line-height: var(--leading-relaxed);
254
232
  }
255
233
 
256
234
  .docyard-code-block__diff-gutter span {
257
235
  display: block;
258
- padding: 0 var(--space-2);
236
+ padding: 0 var(--spacing-2);
259
237
  min-width: 1.5rem;
260
238
  }
261
239
 
262
240
  .docyard-code-block__diff-indicator--add {
263
- background-color: var(--color-diff-add-gutter-bg);
264
- color: var(--color-diff-add-indicator);
241
+ background-color: var(--diff-add-gutter);
242
+ color: var(--diff-add-indicator);
265
243
  font-weight: 600;
266
244
  }
267
245
 
268
246
  .docyard-code-block__diff-indicator--remove {
269
- background-color: var(--color-diff-remove-gutter-bg);
270
- color: var(--color-diff-remove-indicator);
247
+ background-color: var(--diff-remove-gutter);
248
+ color: var(--diff-remove-indicator);
271
249
  font-weight: 600;
272
250
  }
273
251
 
274
- /* With line numbers - reset margins, they extend via negative margin */
275
252
  .docyard-code-block--line-numbers .docyard-code-line {
276
253
  margin-left: 0;
277
254
  margin-right: 0;
@@ -282,11 +259,10 @@
282
259
  .docyard-code-block--line-numbers .docyard-code-line--diff-remove,
283
260
  .docyard-code-block--line-numbers .docyard-code-line--error,
284
261
  .docyard-code-block--line-numbers .docyard-code-line--warning {
285
- margin-left: calc(-1 * var(--space-4));
286
- margin-right: calc(-1 * var(--space-4));
262
+ margin-left: calc(-1 * var(--spacing-4));
263
+ margin-right: calc(-1 * var(--spacing-4));
287
264
  }
288
265
 
289
- /* With diff gutter - reset margins, they extend via negative margin */
290
266
  .docyard-code-block--diff:not(.docyard-code-block--line-numbers) .docyard-code-line {
291
267
  margin-left: 0;
292
268
  margin-right: 0;
@@ -294,30 +270,10 @@
294
270
 
295
271
  .docyard-code-block--diff:not(.docyard-code-block--line-numbers) .docyard-code-line--diff-add,
296
272
  .docyard-code-block--diff:not(.docyard-code-block--line-numbers) .docyard-code-line--diff-remove {
297
- margin-left: calc(-1 * var(--space-4));
298
- margin-right: calc(-1 * var(--space-4));
273
+ margin-left: calc(-1 * var(--spacing-4));
274
+ margin-right: calc(-1 * var(--spacing-4));
299
275
  }
300
276
 
301
- /* Error/Warning blocks without line numbers */
302
- .docyard-code-block--has-error:not(.docyard-code-block--line-numbers):not(.docyard-code-block--diff),
303
- .docyard-code-block--has-warning:not(.docyard-code-block--line-numbers):not(.docyard-code-block--diff) {
304
- border: 1px solid var(--color-border);
305
- border-radius: var(--radius-lg);
306
- background-color: var(--color-code-bg);
307
- overflow: hidden;
308
- }
309
-
310
- .docyard-code-block--has-error:not(.docyard-code-block--line-numbers):not(.docyard-code-block--diff) .highlight,
311
- .docyard-code-block--has-warning:not(.docyard-code-block--line-numbers):not(.docyard-code-block--diff) .highlight {
312
- border: none;
313
- border-radius: 0;
314
- }
315
-
316
- .docyard-code-block__content .highlight {
317
- background-color: transparent;
318
- }
319
-
320
- /* Focus Effect */
321
277
  .docyard-code-block--has-focus .docyard-code-line {
322
278
  opacity: 0.4;
323
279
  filter: blur(0.5px);
@@ -329,47 +285,11 @@
329
285
  filter: none;
330
286
  }
331
287
 
332
- /* On hover, reveal all lines */
333
288
  .docyard-code-block--has-focus:hover .docyard-code-line {
334
289
  opacity: 1;
335
290
  filter: none;
336
291
  }
337
292
 
338
- /* Dark mode line numbers */
339
- .dark .docyard-code-block--line-numbers {
340
- background-color: #161b22;
341
- }
342
-
343
- .dark .docyard-code-block__lines {
344
- background-color: #161b22;
345
- border-right-color: var(--color-border);
346
- }
347
-
348
- /* Dark mode diff */
349
- .dark .docyard-code-block--diff:not(.docyard-code-block--line-numbers) {
350
- background-color: #161b22;
351
- }
352
-
353
- .dark .docyard-code-block__diff-gutter {
354
- background-color: #161b22;
355
- border-right-color: var(--color-border);
356
- }
357
-
358
- /* Dark mode titled block */
359
- .dark .docyard-code-block--titled {
360
- background-color: #161b22;
361
- }
362
-
363
- .dark .docyard-code-block__header {
364
- background-color: rgba(255, 255, 255, 0.03);
365
- }
366
-
367
- /* Titled block with line numbers */
368
- .docyard-code-block--titled.docyard-code-block--line-numbers {
369
- display: block;
370
- border: 1px solid var(--color-border);
371
- }
372
-
373
293
  .docyard-code-block--titled.docyard-code-block--line-numbers .docyard-code-block__body {
374
294
  display: flex;
375
295
  }
@@ -379,12 +299,6 @@
379
299
  min-width: 0;
380
300
  }
381
301
 
382
- /* Titled block with diff */
383
- .docyard-code-block--titled.docyard-code-block--diff:not(.docyard-code-block--line-numbers) {
384
- display: block;
385
- border: 1px solid var(--color-border);
386
- }
387
-
388
302
  .docyard-code-block--titled.docyard-code-block--diff:not(.docyard-code-block--line-numbers) .docyard-code-block__body {
389
303
  display: flex;
390
304
  }
@@ -394,27 +308,25 @@
394
308
  min-width: 0;
395
309
  }
396
310
 
397
- /* Inside tabs - with :has() support */
398
311
  @supports selector(:has(*)) {
399
312
  .docyard-tabs__panel:has(> [class*="language-"]:only-child) .docyard-code-block {
400
313
  margin: 0;
401
314
  }
402
315
 
403
316
  .docyard-tabs__panel:not(:has(> [class*="language-"]:only-child)) .docyard-code-block {
404
- margin: var(--space-4) 0;
317
+ margin: var(--spacing-4) 0;
405
318
  }
406
319
  }
407
320
 
408
- /* Inside tabs - fallback for browsers without :has() */
409
321
  @supports not selector(:has(*)) {
410
322
  .docyard-tabs__panel .docyard-code-block {
411
- margin: var(--space-4) 0;
323
+ margin: var(--spacing-4) 0;
412
324
  }
413
325
  }
414
326
 
415
- /* Inside callouts */
416
327
  .docyard-callout__body .docyard-code-block {
417
- margin: var(--space-4) 0;
328
+ margin: var(--spacing-4) 0;
329
+ background-color: var(--background);
418
330
  }
419
331
 
420
332
  .docyard-callout__body .docyard-code-block:first-child {
@@ -427,115 +339,133 @@
427
339
 
428
340
  .docyard-code-block__copy {
429
341
  position: absolute;
430
- top: var(--space-3);
431
- right: var(--space-3);
432
- display: flex;
342
+ top: var(--spacing-3);
343
+ right: var(--spacing-3);
344
+ display: inline-flex;
433
345
  align-items: center;
434
346
  justify-content: center;
435
- width: 32px;
436
- height: 32px;
437
- padding: 0;
438
- border: 1px solid var(--color-border);
439
- border-radius: var(--radius-md);
440
- background-color: var(--color-bg);
441
- color: var(--color-text-secondary);
347
+ gap: var(--spacing-1-5);
348
+ height: 1.75rem;
349
+ padding: 0 var(--spacing-2-5);
350
+ border: none;
351
+ border-radius: 9999px;
352
+ background-color: var(--code-block-copy-bg);
353
+ color: var(--muted-foreground);
442
354
  cursor: pointer;
443
- transition: background-color var(--transition-base), border-color var(--transition-base), color var(--transition-base);
355
+ flex-shrink: 0;
356
+
357
+ transition:
358
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
359
+ background-color 0.2s ease,
360
+ color 0.2s ease,
361
+ box-shadow 0.2s ease;
362
+
363
+ box-shadow: var(--code-block-copy-shadow);
444
364
  }
445
365
 
446
366
  .docyard-code-block__copy:hover {
447
- background-color: var(--color-bg-secondary);
448
- border-color: var(--color-text-tertiary);
449
- color: var(--color-text);
367
+ background-color: var(--code-block-copy-bg-hover);
368
+ color: var(--foreground);
369
+
370
+ box-shadow: var(--code-block-copy-shadow-hover);
450
371
  }
451
372
 
452
373
  .docyard-code-block__copy:active {
453
- transform: scale(0.95);
374
+ transform: scale(0.92);
375
+ transition:
376
+ transform 0.1s cubic-bezier(0.4, 0, 1, 1),
377
+ background-color 0.1s ease,
378
+ box-shadow 0.1s ease;
379
+
380
+ box-shadow: var(--code-block-copy-shadow-active);
454
381
  }
455
382
 
456
383
  .docyard-code-block__copy:focus-visible {
457
- outline: 2px solid var(--color-primary);
458
- outline-offset: 2px;
384
+ outline: none;
385
+ box-shadow:
386
+ 0 1px 2px oklch(from var(--foreground) l c h / 5%),
387
+ 0 0 0 2px var(--background),
388
+ 0 0 0 4px var(--ring);
389
+ }
390
+
391
+ .docyard-code-block__copy-icon {
392
+ display: inline-flex;
393
+ align-items: center;
394
+ justify-content: center;
395
+ flex-shrink: 0;
396
+ }
397
+
398
+ .docyard-code-block__copy-icon svg {
399
+ width: 0.875rem;
400
+ height: 0.875rem;
459
401
  }
460
402
 
461
- /* Icon sizing */
462
- .docyard-code-block__copy svg {
463
- width: 16px;
464
- height: 16px;
465
- transition: transform 0.2s ease, opacity 0.2s ease;
403
+ .docyard-code-block__copy-text {
404
+ font-size: var(--text-xs);
405
+ font-weight: var(--font-medium);
406
+ font-family: var(--font-sans);
407
+ line-height: 1;
466
408
  }
467
409
 
468
- /* Success state */
469
410
  .docyard-code-block__copy.is-success {
470
- opacity: 1;
471
- visibility: visible;
472
- background-color: var(--color-primary);
473
- border-color: var(--color-primary);
411
+ background-color: var(--primary);
474
412
  color: white;
475
- animation: success-pulse 0.4s ease;
413
+ box-shadow:
414
+ 0 1px 2px oklch(from var(--primary) l c h / 20%),
415
+ 0 0 0 1px oklch(from var(--primary) l c h / 30%);
476
416
  }
477
417
 
478
418
  .docyard-code-block__copy.is-success:hover {
479
- background-color: var(--color-primary-hover);
480
- border-color: var(--color-primary-hover);
419
+ background-color: oklch(from var(--primary) calc(l - 0.03) c h);
481
420
  color: white;
421
+ box-shadow:
422
+ 0 2px 4px oklch(from var(--primary) l c h / 25%),
423
+ 0 0 0 1px oklch(from var(--primary) l c h / 35%);
482
424
  }
483
425
 
484
- .docyard-code-block__copy.is-success svg {
485
- animation: check-pop 0.3s ease;
486
- }
487
-
488
- /* Success animation */
489
- @keyframes success-pulse {
490
- 0% {
491
- transform: scale(1);
492
- }
493
-
494
- 50% {
495
- transform: scale(1.1);
496
- }
497
-
498
- 100% {
499
- transform: scale(1);
500
- }
426
+ .docyard-code-block__copy.is-success .docyard-code-block__copy-icon svg {
427
+ animation: check-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
501
428
  }
502
429
 
503
430
  @keyframes check-pop {
504
431
  0% {
505
- transform: scale(0) rotate(-45deg);
506
432
  opacity: 0;
433
+ transform: scale(0);
434
+ }
435
+
436
+ 40% {
437
+ opacity: 1;
438
+ transform: scale(1.2);
507
439
  }
508
440
 
509
- 50% {
510
- transform: scale(1.2) rotate(10deg);
441
+ 70% {
442
+ transform: scale(0.9);
511
443
  }
512
444
 
513
445
  100% {
514
- transform: scale(1) rotate(0deg);
515
446
  opacity: 1;
447
+ transform: scale(1);
516
448
  }
517
449
  }
518
450
 
519
- /* Error state */
520
451
  .docyard-code-block__copy.is-error {
521
452
  opacity: 1;
522
453
  visibility: visible;
523
- background-color: #ef4444;
524
- border-color: #ef4444;
454
+ background-color: var(--destructive);
455
+ border-color: var(--destructive);
525
456
  color: white;
526
457
  }
527
458
 
528
459
  .docyard-code-block__copy.is-error:hover {
529
- background-color: #dc2626;
530
- border-color: #dc2626;
460
+ background-color: oklch(from var(--destructive) calc(l - 0.05) c h);
461
+ border-color: oklch(from var(--destructive) calc(l - 0.05) c h);
531
462
  color: white;
532
463
  }
533
464
 
534
- /* Mobile responsive - header */
535
465
  @media (max-width: 640px) {
536
466
  .docyard-code-block__header {
537
- padding: var(--space-2) var(--space-3);
538
- gap: var(--space-2);
467
+ padding: var(--spacing-2) var(--spacing-3);
468
+ gap: var(--spacing-2);
539
469
  }
540
470
 
541
471
  .docyard-code-block__icon .docyard-icon {
@@ -544,47 +474,25 @@
544
474
  }
545
475
 
546
476
  .docyard-code-block__header .docyard-code-block__copy {
547
- width: 28px;
548
- height: 28px;
477
+ height: 1.5rem;
478
+ padding: 0 var(--spacing-2);
479
+ gap: var(--spacing-1);
549
480
  }
550
481
 
551
- .docyard-code-block__header .docyard-code-block__copy svg {
552
- width: 14px;
553
- height: 14px;
482
+ .docyard-code-block__copy-icon svg {
483
+ width: 0.75rem;
484
+ height: 0.75rem;
554
485
  }
555
- }
556
-
557
- /* Dark mode adjustments */
558
- .dark .docyard-code-block__copy {
559
- background-color: var(--color-bg-secondary);
560
- border-color: var(--color-border);
561
- }
562
-
563
- .dark .docyard-code-block__copy:hover {
564
- background-color: var(--color-bg-tertiary);
565
- border-color: var(--color-text-tertiary);
566
- }
567
486
 
568
- /* Dark mode success state */
569
- .dark .docyard-code-block__copy.is-success {
570
- background-color: var(--color-primary);
571
- border-color: var(--color-primary);
572
- }
573
-
574
- .dark .docyard-code-block__copy.is-success:hover {
575
- background-color: var(--color-primary-hover);
576
- border-color: var(--color-primary-hover);
577
- }
578
-
579
- .dark .docyard-code-block__copy.is-error {
580
- background-color: #ef4444;
581
- border-color: #ef4444;
487
+ .docyard-code-block__copy-text {
488
+ font-size: 0.625rem;
489
+ }
582
490
  }
583
491
 
584
- /* Reduced motion */
585
492
  @media (prefers-reduced-motion: reduce) {
493
+
586
494
  .docyard-code-block__copy,
587
- .docyard-code-block__copy svg {
495
+ .docyard-code-block__copy-icon svg {
588
496
  transition: none;
589
497
  animation: none;
590
498
  }