decantr 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 (382) hide show
  1. package/AGENTS.md +868 -0
  2. package/CHANGELOG.md +255 -0
  3. package/CLAUDE.md +178 -0
  4. package/LICENSE +21 -0
  5. package/README.md +229 -0
  6. package/cli/art.js +127 -0
  7. package/cli/commands/a11y.js +61 -0
  8. package/cli/commands/audit.js +225 -0
  9. package/cli/commands/build.js +38 -0
  10. package/cli/commands/dev.js +18 -0
  11. package/cli/commands/doctor.js +197 -0
  12. package/cli/commands/figma-sync.js +48 -0
  13. package/cli/commands/figma-tokens.js +55 -0
  14. package/cli/commands/generate.js +26 -0
  15. package/cli/commands/init.js +116 -0
  16. package/cli/commands/lint.js +209 -0
  17. package/cli/commands/mcp.js +530 -0
  18. package/cli/commands/migrate.js +175 -0
  19. package/cli/commands/test.js +38 -0
  20. package/cli/commands/validate.js +354 -0
  21. package/cli/index.js +113 -0
  22. package/package.json +95 -0
  23. package/reference/atoms.md +517 -0
  24. package/reference/behaviors.md +384 -0
  25. package/reference/build-tooling.md +275 -0
  26. package/reference/color-guidelines.md +965 -0
  27. package/reference/component-lifecycle.md +137 -0
  28. package/reference/compound-spacing.md +95 -0
  29. package/reference/decantation-process.md +499 -0
  30. package/reference/dev-server-routes.md +93 -0
  31. package/reference/form-system.md +253 -0
  32. package/reference/i18n.md +336 -0
  33. package/reference/icons.md +576 -0
  34. package/reference/llm-primer.md +953 -0
  35. package/reference/plugins.md +252 -0
  36. package/reference/registry-consumption.md +76 -0
  37. package/reference/router.md +217 -0
  38. package/reference/shells.md +116 -0
  39. package/reference/spatial-guidelines.md +541 -0
  40. package/reference/ssr.md +234 -0
  41. package/reference/state-data.md +215 -0
  42. package/reference/state-patterns.md +166 -0
  43. package/reference/state.md +194 -0
  44. package/reference/style-system.md +110 -0
  45. package/reference/tokens.md +460 -0
  46. package/src/app.js +19 -0
  47. package/src/chart/_animate.js +266 -0
  48. package/src/chart/_base.js +109 -0
  49. package/src/chart/_data.js +209 -0
  50. package/src/chart/_format.js +106 -0
  51. package/src/chart/_interact.js +364 -0
  52. package/src/chart/_palette.js +105 -0
  53. package/src/chart/_renderer.js +52 -0
  54. package/src/chart/_scene.js +262 -0
  55. package/src/chart/_shared.js +371 -0
  56. package/src/chart/index.js +637 -0
  57. package/src/chart/layouts/_layout-base.js +328 -0
  58. package/src/chart/layouts/cartesian.js +148 -0
  59. package/src/chart/layouts/hierarchy.js +562 -0
  60. package/src/chart/layouts/polar.js +101 -0
  61. package/src/chart/renderers/canvas.js +179 -0
  62. package/src/chart/renderers/svg.js +256 -0
  63. package/src/chart/renderers/webgpu.js +715 -0
  64. package/src/chart/types/_type-base.js +26 -0
  65. package/src/chart/types/area.js +134 -0
  66. package/src/chart/types/bar.js +173 -0
  67. package/src/chart/types/box-plot.js +125 -0
  68. package/src/chart/types/bubble.js +63 -0
  69. package/src/chart/types/candlestick.js +115 -0
  70. package/src/chart/types/chord.js +85 -0
  71. package/src/chart/types/combination.js +108 -0
  72. package/src/chart/types/funnel.js +68 -0
  73. package/src/chart/types/gauge.js +163 -0
  74. package/src/chart/types/heatmap.js +98 -0
  75. package/src/chart/types/histogram.js +71 -0
  76. package/src/chart/types/line.js +111 -0
  77. package/src/chart/types/org-chart.js +93 -0
  78. package/src/chart/types/pie.js +81 -0
  79. package/src/chart/types/radar.js +96 -0
  80. package/src/chart/types/radial.js +68 -0
  81. package/src/chart/types/range-area.js +55 -0
  82. package/src/chart/types/range-bar.js +61 -0
  83. package/src/chart/types/sankey.js +73 -0
  84. package/src/chart/types/scatter.js +66 -0
  85. package/src/chart/types/sparkline.js +81 -0
  86. package/src/chart/types/sunburst.js +69 -0
  87. package/src/chart/types/swimlane.js +88 -0
  88. package/src/chart/types/treemap.js +62 -0
  89. package/src/chart/types/waterfall.js +100 -0
  90. package/src/components/_base.js +1658 -0
  91. package/src/components/_behaviors.js +1140 -0
  92. package/src/components/_primitives.js +534 -0
  93. package/src/components/_qr-encoder.js +539 -0
  94. package/src/components/accordion.js +207 -0
  95. package/src/components/affix.js +62 -0
  96. package/src/components/alert-dialog.js +75 -0
  97. package/src/components/alert.js +47 -0
  98. package/src/components/aspect-ratio.js +24 -0
  99. package/src/components/avatar-group.js +55 -0
  100. package/src/components/avatar.js +38 -0
  101. package/src/components/back-top.js +75 -0
  102. package/src/components/badge.js +74 -0
  103. package/src/components/banner.js +68 -0
  104. package/src/components/breadcrumb.js +162 -0
  105. package/src/components/button.js +115 -0
  106. package/src/components/calendar.js +131 -0
  107. package/src/components/card.js +192 -0
  108. package/src/components/carousel.js +98 -0
  109. package/src/components/cascader.js +261 -0
  110. package/src/components/checkbox.js +80 -0
  111. package/src/components/chip.js +81 -0
  112. package/src/components/code-block.js +82 -0
  113. package/src/components/collapsible.js +50 -0
  114. package/src/components/color-palette.js +438 -0
  115. package/src/components/color-picker.js +314 -0
  116. package/src/components/combobox.js +181 -0
  117. package/src/components/command.js +174 -0
  118. package/src/components/comment.js +206 -0
  119. package/src/components/context-menu.js +76 -0
  120. package/src/components/data-table.js +724 -0
  121. package/src/components/date-picker.js +217 -0
  122. package/src/components/date-range-picker.js +244 -0
  123. package/src/components/datetime-picker.js +271 -0
  124. package/src/components/descriptions.js +68 -0
  125. package/src/components/drawer.js +179 -0
  126. package/src/components/dropdown.js +88 -0
  127. package/src/components/empty.js +41 -0
  128. package/src/components/float-button.js +90 -0
  129. package/src/components/form.js +106 -0
  130. package/src/components/hover-card.js +49 -0
  131. package/src/components/icon.js +87 -0
  132. package/src/components/image.js +97 -0
  133. package/src/components/index.js +117 -0
  134. package/src/components/input-group.js +75 -0
  135. package/src/components/input-number.js +155 -0
  136. package/src/components/input-otp.js +178 -0
  137. package/src/components/input.js +91 -0
  138. package/src/components/kbd.js +36 -0
  139. package/src/components/label.js +25 -0
  140. package/src/components/list.js +118 -0
  141. package/src/components/masked-input.js +236 -0
  142. package/src/components/mentions.js +165 -0
  143. package/src/components/menu.js +259 -0
  144. package/src/components/message.js +80 -0
  145. package/src/components/modal.js +147 -0
  146. package/src/components/navigation-menu.js +166 -0
  147. package/src/components/notification.js +84 -0
  148. package/src/components/pagination.js +104 -0
  149. package/src/components/placeholder.js +132 -0
  150. package/src/components/popconfirm.js +70 -0
  151. package/src/components/popover.js +58 -0
  152. package/src/components/progress.js +61 -0
  153. package/src/components/qrcode.js +251 -0
  154. package/src/components/radiogroup.js +120 -0
  155. package/src/components/range-slider.js +176 -0
  156. package/src/components/rate.js +186 -0
  157. package/src/components/resizable.js +83 -0
  158. package/src/components/result.js +57 -0
  159. package/src/components/scroll-area.js +43 -0
  160. package/src/components/segmented.js +97 -0
  161. package/src/components/select.js +165 -0
  162. package/src/components/separator.js +31 -0
  163. package/src/components/shell.js +407 -0
  164. package/src/components/skeleton.js +39 -0
  165. package/src/components/slider.js +141 -0
  166. package/src/components/sortable-list.js +176 -0
  167. package/src/components/space.js +42 -0
  168. package/src/components/spinner.js +112 -0
  169. package/src/components/splitter.js +147 -0
  170. package/src/components/statistic.js +136 -0
  171. package/src/components/steps.js +99 -0
  172. package/src/components/switch.js +95 -0
  173. package/src/components/table.js +44 -0
  174. package/src/components/tabs.js +216 -0
  175. package/src/components/tag.js +115 -0
  176. package/src/components/textarea.js +82 -0
  177. package/src/components/time-picker.js +153 -0
  178. package/src/components/time-range-picker.js +170 -0
  179. package/src/components/timeline.js +226 -0
  180. package/src/components/toast.js +71 -0
  181. package/src/components/toggle.js +213 -0
  182. package/src/components/tooltip.js +57 -0
  183. package/src/components/tour.js +159 -0
  184. package/src/components/transfer.js +163 -0
  185. package/src/components/tree-select.js +274 -0
  186. package/src/components/tree.js +141 -0
  187. package/src/components/typography.js +136 -0
  188. package/src/components/upload.js +118 -0
  189. package/src/components/visually-hidden.js +20 -0
  190. package/src/components/watermark.js +124 -0
  191. package/src/core/index.js +539 -0
  192. package/src/core/lifecycle.js +69 -0
  193. package/src/css/atoms.js +651 -0
  194. package/src/css/components.js +940 -0
  195. package/src/css/derive.js +1296 -0
  196. package/src/css/index.js +265 -0
  197. package/src/css/runtime.js +268 -0
  198. package/src/css/styles/addons/bioluminescent.js +93 -0
  199. package/src/css/styles/addons/clay.js +70 -0
  200. package/src/css/styles/addons/clean.js +57 -0
  201. package/src/css/styles/addons/command-center.js +143 -0
  202. package/src/css/styles/addons/dopamine.js +83 -0
  203. package/src/css/styles/addons/editorial.js +80 -0
  204. package/src/css/styles/addons/glassmorphism.js +99 -0
  205. package/src/css/styles/addons/liquid-glass.js +105 -0
  206. package/src/css/styles/addons/prismatic.js +100 -0
  207. package/src/css/styles/addons/retro.js +63 -0
  208. package/src/css/styles/auradecantism.js +96 -0
  209. package/src/css/theme-registry.js +444 -0
  210. package/src/data/entity.js +281 -0
  211. package/src/data/index.js +13 -0
  212. package/src/data/persist.js +225 -0
  213. package/src/data/query.js +839 -0
  214. package/src/data/realtime.js +299 -0
  215. package/src/data/url.js +177 -0
  216. package/src/data/worker.js +134 -0
  217. package/src/explorer/archetypes.js +243 -0
  218. package/src/explorer/atoms.js +228 -0
  219. package/src/explorer/charts.js +497 -0
  220. package/src/explorer/components.js +129 -0
  221. package/src/explorer/foundations.js +949 -0
  222. package/src/explorer/icons.js +178 -0
  223. package/src/explorer/patterns.js +247 -0
  224. package/src/explorer/recipes.js +194 -0
  225. package/src/explorer/shared/pattern-examples.js +1337 -0
  226. package/src/explorer/shared/showcase-renderer.js +958 -0
  227. package/src/explorer/shared/spec-table.js +41 -0
  228. package/src/explorer/shared/usage-links.js +87 -0
  229. package/src/explorer/shell-config.js +10 -0
  230. package/src/explorer/shells.js +551 -0
  231. package/src/explorer/styles.js +161 -0
  232. package/src/explorer/tokens.js +262 -0
  233. package/src/explorer/tools.js +525 -0
  234. package/src/form/index.js +804 -0
  235. package/src/i18n/index.js +251 -0
  236. package/src/icons/essential.js +479 -0
  237. package/src/icons/index.js +53 -0
  238. package/src/plugins/index.js +282 -0
  239. package/src/registry/archetypes/content-site.json +71 -0
  240. package/src/registry/archetypes/docs-explorer.json +23 -0
  241. package/src/registry/archetypes/ecommerce.json +104 -0
  242. package/src/registry/archetypes/financial-dashboard.json +77 -0
  243. package/src/registry/archetypes/index.json +41 -0
  244. package/src/registry/archetypes/portfolio.json +82 -0
  245. package/src/registry/archetypes/recipe-community.json +159 -0
  246. package/src/registry/archetypes/saas-dashboard.json +86 -0
  247. package/src/registry/architect/cross-cutting.json +45 -0
  248. package/src/registry/architect/domains/ecommerce.json +294 -0
  249. package/src/registry/architect/domains/financial-services.json +302 -0
  250. package/src/registry/architect/index.json +26 -0
  251. package/src/registry/architect/traits.json +379 -0
  252. package/src/registry/atoms.json +16 -0
  253. package/src/registry/chart-showcase.json +160 -0
  254. package/src/registry/chart.json +136 -0
  255. package/src/registry/components.json +8616 -0
  256. package/src/registry/core.json +216 -0
  257. package/src/registry/css.json +319 -0
  258. package/src/registry/data.json +135 -0
  259. package/src/registry/foundations.json +11 -0
  260. package/src/registry/icons.json +463 -0
  261. package/src/registry/index.json +101 -0
  262. package/src/registry/patterns/activity-feed.json +37 -0
  263. package/src/registry/patterns/article-content.json +27 -0
  264. package/src/registry/patterns/auth-form.json +37 -0
  265. package/src/registry/patterns/author-card.json +20 -0
  266. package/src/registry/patterns/card-grid.json +127 -0
  267. package/src/registry/patterns/category-nav.json +26 -0
  268. package/src/registry/patterns/chart-grid.json +36 -0
  269. package/src/registry/patterns/chat-interface.json +37 -0
  270. package/src/registry/patterns/checklist-card.json +55 -0
  271. package/src/registry/patterns/comparison-panel.json +27 -0
  272. package/src/registry/patterns/component-showcase.json +24 -0
  273. package/src/registry/patterns/contact-form.json +31 -0
  274. package/src/registry/patterns/cta-section.json +20 -0
  275. package/src/registry/patterns/data-table.json +37 -0
  276. package/src/registry/patterns/detail-header.json +83 -0
  277. package/src/registry/patterns/detail-panel.json +27 -0
  278. package/src/registry/patterns/explorer-shell.json +22 -0
  279. package/src/registry/patterns/filter-bar.json +33 -0
  280. package/src/registry/patterns/filter-sidebar.json +27 -0
  281. package/src/registry/patterns/form-sections.json +110 -0
  282. package/src/registry/patterns/goal-tracker.json +27 -0
  283. package/src/registry/patterns/hero.json +107 -0
  284. package/src/registry/patterns/index.json +47 -0
  285. package/src/registry/patterns/kpi-grid.json +36 -0
  286. package/src/registry/patterns/media-gallery.json +20 -0
  287. package/src/registry/patterns/order-history.json +20 -0
  288. package/src/registry/patterns/pagination.json +19 -0
  289. package/src/registry/patterns/photo-to-recipe.json +36 -0
  290. package/src/registry/patterns/pipeline-tracker.json +28 -0
  291. package/src/registry/patterns/post-list.json +27 -0
  292. package/src/registry/patterns/pricing-table.json +32 -0
  293. package/src/registry/patterns/scorecard.json +28 -0
  294. package/src/registry/patterns/search-bar.json +20 -0
  295. package/src/registry/patterns/specimen-grid.json +19 -0
  296. package/src/registry/patterns/stat-card.json +55 -0
  297. package/src/registry/patterns/stats-bar.json +55 -0
  298. package/src/registry/patterns/steps-card.json +55 -0
  299. package/src/registry/patterns/table-of-contents.json +19 -0
  300. package/src/registry/patterns/testimonials.json +21 -0
  301. package/src/registry/patterns/timeline.json +27 -0
  302. package/src/registry/patterns/token-inspector.json +21 -0
  303. package/src/registry/patterns/wizard.json +27 -0
  304. package/src/registry/recipe-auradecantism.json +69 -0
  305. package/src/registry/recipe-clean.json +65 -0
  306. package/src/registry/recipe-command-center.json +78 -0
  307. package/src/registry/router.json +73 -0
  308. package/src/registry/schema/README.md +197 -0
  309. package/src/registry/skeletons.json +259 -0
  310. package/src/registry/state.json +137 -0
  311. package/src/registry/tokens.json +40 -0
  312. package/src/router/hash.js +17 -0
  313. package/src/router/history.js +18 -0
  314. package/src/router/index.js +598 -0
  315. package/src/ssr/index.js +922 -0
  316. package/src/state/arrays.js +181 -0
  317. package/src/state/devtools.js +647 -0
  318. package/src/state/index.js +498 -0
  319. package/src/state/middleware.js +288 -0
  320. package/src/state/scheduler.js +206 -0
  321. package/src/state/store.js +300 -0
  322. package/src/tags/index.js +19 -0
  323. package/src/tannins/auth.js +396 -0
  324. package/src/test/dom.js +352 -0
  325. package/src/test/index.js +62 -0
  326. package/src/test/state.js +306 -0
  327. package/tools/a11y-audit.js +487 -0
  328. package/tools/analyzer.js +315 -0
  329. package/tools/audit.js +706 -0
  330. package/tools/builder.js +1422 -0
  331. package/tools/css-extract.js +188 -0
  332. package/tools/dev-server.js +316 -0
  333. package/tools/dts-gen.js +1260 -0
  334. package/tools/figma-components.js +329 -0
  335. package/tools/figma-patterns.js +516 -0
  336. package/tools/figma-plugin/code.js +453 -0
  337. package/tools/figma-plugin/manifest.json +14 -0
  338. package/tools/figma-plugin/ui.html +268 -0
  339. package/tools/figma-render.js +293 -0
  340. package/tools/figma-tokens.js +712 -0
  341. package/tools/figma-upload.js +318 -0
  342. package/tools/generate.js +738 -0
  343. package/tools/icons.js +133 -0
  344. package/tools/init-templates.js +265 -0
  345. package/tools/install-hooks.sh +5 -0
  346. package/tools/migrations/0.5.0.js +53 -0
  347. package/tools/migrations/0.6.0.js +95 -0
  348. package/tools/minify.js +170 -0
  349. package/tools/pre-commit +4 -0
  350. package/tools/registry.js +662 -0
  351. package/tools/reset-playground.js +61 -0
  352. package/tools/starter-templates/content-site/app.js +49 -0
  353. package/tools/starter-templates/content-site/essence.js +19 -0
  354. package/tools/starter-templates/content-site/pages.js +31 -0
  355. package/tools/starter-templates/ecommerce/app.js +50 -0
  356. package/tools/starter-templates/ecommerce/essence.js +19 -0
  357. package/tools/starter-templates/ecommerce/pages.js +31 -0
  358. package/tools/starter-templates/landing-page/app.js +38 -0
  359. package/tools/starter-templates/landing-page/essence.js +18 -0
  360. package/tools/starter-templates/landing-page/pages.js +21 -0
  361. package/tools/starter-templates/portfolio/app.js +45 -0
  362. package/tools/starter-templates/portfolio/essence.js +19 -0
  363. package/tools/starter-templates/portfolio/pages.js +33 -0
  364. package/tools/starter-templates/saas-dashboard/app.js +70 -0
  365. package/tools/starter-templates/saas-dashboard/essence.js +19 -0
  366. package/tools/starter-templates/saas-dashboard/pages.js +31 -0
  367. package/tools/verify-pack.js +203 -0
  368. package/types/chart.d.ts +77 -0
  369. package/types/components.d.ts +587 -0
  370. package/types/core.d.ts +89 -0
  371. package/types/css.d.ts +149 -0
  372. package/types/data.d.ts +238 -0
  373. package/types/form.d.ts +164 -0
  374. package/types/i18n.d.ts +51 -0
  375. package/types/icons.d.ts +27 -0
  376. package/types/index.d.ts +13 -0
  377. package/types/router.d.ts +116 -0
  378. package/types/ssr.d.ts +102 -0
  379. package/types/state.d.ts +83 -0
  380. package/types/tags.d.ts +62 -0
  381. package/types/tannins.d.ts +63 -0
  382. package/types/test.d.ts +48 -0
@@ -0,0 +1,940 @@
1
+ /**
2
+ * Shared component visual CSS — colors, backgrounds, borders, shadows.
3
+ * Same rules for all styles; visual differences come from token values.
4
+ * Injected into @layer d.theme alongside style-specific component CSS.
5
+ *
6
+ * @module css/components
7
+ */
8
+
9
+ export const componentCSSMap = {
10
+ // ═══════════════════════════════════════════════════════════════
11
+ // GLOBAL — suppress default outline on inner inputs where the
12
+ // parent wrapper already shows a :focus-within ring
13
+ // ═══════════════════════════════════════════════════════════════
14
+ global: [
15
+ '.d-input-wrap .d-input:focus-visible,.d-textarea-wrap .d-textarea:focus-visible,.d-combobox-input-wrap .d-combobox-input:focus-visible,.d-inputnumber .d-inputnumber-input:focus-visible,.d-inputnumber .d-inputnumber-step:focus-visible,.d-select .d-select:focus-visible,.d-cascader-trigger .d-cascader-input:focus-visible,.d-command-input-wrap .d-command-input:focus-visible,.d-colorpicker-trigger:focus-visible{outline:none}',
16
+ ].join(''),
17
+
18
+ // ═══════════════════════════════════════════════════════════════
19
+ // BUTTON
20
+ // ═══════════════════════════════════════════════════════════════
21
+ button: [
22
+ '.d-btn{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-group-radius, var(--d-radius));border-width:var(--d-group-border, var(--d-border-width));color:var(--d-fg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
23
+ '.d-btn:hover{background:var(--d-border);transform:translate(var(--d-hover-translate));box-shadow:var(--d-hover-shadow)}',
24
+ '.d-btn:active{transform:translate(var(--d-active-translate)) scale(var(--d-active-scale));box-shadow:var(--d-active-shadow)}',
25
+ '.d-btn-primary{background:var(--d-primary);color:var(--d-primary-fg);border-color:var(--d-primary)}',
26
+ '.d-btn-primary:hover{background:var(--d-primary-hover);border-color:var(--d-primary-hover)}',
27
+ '.d-btn-primary:active{background:var(--d-primary-active)}',
28
+ '.d-btn-secondary{background:var(--d-accent-subtle);color:var(--d-accent-on-subtle);border-color:var(--d-accent-border)}',
29
+ '.d-btn-secondary:hover{background:var(--d-accent-hover);color:var(--d-accent-fg);border-color:var(--d-accent-hover)}',
30
+ '.d-btn-secondary:active{background:var(--d-accent-active)}',
31
+ '.d-btn-tertiary{background:var(--d-tertiary);color:var(--d-tertiary-fg);border-color:var(--d-tertiary)}',
32
+ '.d-btn-tertiary:hover{background:var(--d-tertiary-hover);border-color:var(--d-tertiary-hover)}',
33
+ '.d-btn-tertiary:active{background:var(--d-tertiary-active)}',
34
+ '.d-btn-destructive{background:var(--d-error);color:var(--d-error-fg);border-color:var(--d-error)}',
35
+ '.d-btn-destructive:hover{background:var(--d-error-hover);border-color:var(--d-error-hover)}',
36
+ '.d-btn-destructive:active{background:var(--d-error-active)}',
37
+ '.d-btn-success{background:var(--d-success);color:var(--d-success-fg);border-color:var(--d-success)}',
38
+ '.d-btn-success:hover{background:var(--d-success-hover);border-color:var(--d-success-hover)}',
39
+ '.d-btn-warning{background:var(--d-warning);color:var(--d-warning-fg);border-color:var(--d-warning)}',
40
+ '.d-btn-warning:hover{background:var(--d-warning-hover);border-color:var(--d-warning-hover)}',
41
+ '.d-btn-outline{background:transparent;border:var(--d-border-width-strong) var(--d-border-style) var(--d-primary);border-width:var(--d-group-border, var(--d-border-width-strong));color:var(--d-primary)}',
42
+ '.d-btn-outline:hover{background:var(--d-primary-subtle);border-color:var(--d-primary-hover);color:var(--d-primary-hover)}',
43
+ '.d-btn-ghost{background:transparent;border-color:transparent}',
44
+ '.d-btn-ghost:hover{background:var(--d-surface-1)}',
45
+ '.d-btn-link{background:transparent;border:none;color:var(--d-primary);text-decoration:underline}',
46
+ '.d-btn-link:hover{color:var(--d-primary-hover)}',
47
+ '.d-btn-group>.d-btn{border-color:var(--d-border)}',
48
+ ].join(''),
49
+
50
+ // ═══════════════════════════════════════════════════════════════
51
+ // TOGGLE
52
+ // ═══════════════════════════════════════════════════════════════
53
+ toggle: [
54
+ '.d-toggle{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius);color:var(--d-fg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
55
+ '.d-toggle:hover{background:var(--d-border);transform:translate(var(--d-hover-translate));box-shadow:var(--d-hover-shadow)}',
56
+ '.d-toggle:active{transform:translate(var(--d-active-translate)) scale(var(--d-active-scale))}',
57
+ '.d-toggle[aria-pressed="true"]{background:var(--d-primary-subtle);color:var(--d-primary-on-subtle);border-color:var(--d-primary-border)}',
58
+ '.d-toggle[aria-pressed="true"]:hover{background:var(--d-primary-subtle);filter:brightness(0.95)}',
59
+ '.d-toggle-outline{background:transparent;border-color:var(--d-border-strong)}',
60
+ '.d-toggle-outline:hover{background:var(--d-surface-1)}',
61
+ '.d-toggle-outline[aria-pressed="true"]{background:var(--d-primary-subtle);color:var(--d-primary-on-subtle);border-color:var(--d-primary-border)}',
62
+ // ── Toggle Group (segmented pill container) ──
63
+ '.d-toggle-group{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
64
+ '.d-toggle-group>.d-toggle{background:transparent;border:none;border-radius:var(--d-radius-inner);color:var(--d-muted)}',
65
+ '.d-toggle-group>.d-toggle:hover{background:var(--d-surface-0);color:var(--d-fg);transform:none;box-shadow:none}',
66
+ '.d-toggle-group>.d-toggle:active{transform:none}',
67
+ '.d-toggle-group>.d-toggle[aria-pressed="true"],.d-toggle-group>.d-toggle[aria-checked="true"]{background:transparent;box-shadow:none;color:var(--d-selection-fg)}',
68
+ '.d-toggle-indicator{background:var(--d-selection-bg);box-shadow:var(--d-selection-shadow)}',
69
+ ].join(''),
70
+
71
+ // ═══════════════════════════════════════════════════════════════
72
+ // SPINNER
73
+ // ═══════════════════════════════════════════════════════════════
74
+ spinner: [
75
+ '.d-spinner{color:var(--d-primary)}',
76
+ '.d-spinner-dots>span,.d-spinner-pulse>span,.d-spinner-bars>span,.d-spinner-orbit>span{color:inherit;background:currentColor}',
77
+ '.d-btn-primary .d-spinner,.d-btn-secondary .d-spinner,.d-btn-tertiary .d-spinner,.d-btn-destructive .d-spinner,.d-btn-success .d-spinner,.d-btn-warning .d-spinner{color:inherit}',
78
+ ].join(''),
79
+
80
+ // ═══════════════════════════════════════════════════════════════
81
+ // CARD
82
+ // ═══════════════════════════════════════════════════════════════
83
+ card: [
84
+ '.d-card{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);border-radius:var(--d-radius-lg);box-shadow:var(--d-elevation-1);color:var(--d-fg);backdrop-filter:var(--d-surface-1-filter);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
85
+ '.d-card-hover:hover{box-shadow:var(--d-elevation-2);transform:translate(var(--d-hover-translate))}',
86
+ '.d-card-footer{border-top:var(--d-border-width) var(--d-border-style) var(--d-border)}',
87
+ '.d-card-inner{background:var(--d-surface-0);box-shadow:none;border:var(--d-border-width) var(--d-border-style) var(--d-border)}',
88
+ '.d-card-borderless{border-color:transparent}',
89
+ '.d-card-actions{border-top:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-muted-fg)}',
90
+ '.d-card-actions>*:hover{color:var(--d-primary)}',
91
+ '.d-card-grid-hover>*{transition:all var(--d-duration-fast) var(--d-easing-standard)}',
92
+ '.d-card-grid-hover>*:hover{background:var(--d-surface-0);box-shadow:var(--d-elevation-1)}',
93
+ '.d-card-meta-description{color:var(--d-muted-fg)}',
94
+ ].join(''),
95
+
96
+ // ═══════════════════════════════════════════════════════════════
97
+ // INPUT
98
+ // ═══════════════════════════════════════════════════════════════
99
+ input: [
100
+ // .d-input-wrap visual (bg, border, focus) now handled by .d-field in d.base layer
101
+ '.d-input{color:var(--d-fg)}',
102
+ '.d-input::placeholder{color:var(--d-muted)}',
103
+ // ── INPUT GROUP / COMPACT GROUP — visual ──
104
+ // Group draws the outer border. Children are borderless. Separators between children.
105
+ '.d-input-group{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
106
+ '.d-input-group:focus-within{border-color:var(--d-ring);box-shadow:0 0 0 var(--d-focus-ring-width) var(--d-primary-subtle)}',
107
+ '.d-input-group-error{border-color:var(--d-error)}',
108
+ '.d-input-group-error:focus-within{border-color:var(--d-error);box-shadow:0 0 0 var(--d-focus-ring-width) var(--d-error-subtle)}',
109
+ // Horizontal separators
110
+ '.d-input-group>:not(:first-child){border-left:var(--d-border-width) var(--d-border-style) var(--d-border)}',
111
+ '.d-input-group-error>:not(:first-child){border-left-color:var(--d-error)}',
112
+ // Vertical — panel-level radius, container clips children
113
+ '.d-input-group-vertical{border-radius:var(--d-radius-panel)}',
114
+ // Vertical separators (override horizontal)
115
+ '.d-input-group-vertical>:not(:first-child){border-left-width:0;border-top:var(--d-border-width) var(--d-border-style) var(--d-border)}',
116
+ '.d-input-group-error.d-input-group-vertical>:not(:first-child){border-top-color:var(--d-error)}',
117
+ // Addon visual
118
+ '.d-input-group-addon{background:var(--d-surface-1);border-radius:var(--d-group-radius, var(--d-radius));color:var(--d-muted);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
119
+ '.d-input-group:not([data-disabled]) .d-input-group-addon:hover{background:var(--d-surface-0)}',
120
+ '.d-input-group:focus-within .d-input-group-addon{color:var(--d-fg)}',
121
+ '.d-input-group-error .d-input-group-addon{color:var(--d-error)}',
122
+ // Compact group — same outer-border pattern
123
+ '.d-compact-group{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
124
+ '.d-compact-group:focus-within{border-color:var(--d-ring);box-shadow:0 0 0 var(--d-focus-ring-width) var(--d-primary-subtle)}',
125
+ '.d-compact-group>:not(:first-child){border-left:var(--d-border-width) var(--d-border-style) var(--d-border)}',
126
+ ].join(''),
127
+
128
+ // ═══════════════════════════════════════════════════════════════
129
+ // INPUT NUMBER
130
+ // ═══════════════════════════════════════════════════════════════
131
+ 'input-number': [
132
+ // .d-inputnumber visual (bg, border, focus) now handled by .d-field in d.base layer
133
+ '.d-inputnumber-step{color:var(--d-muted);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
134
+ '.d-inputnumber-step:hover{color:var(--d-fg);background:var(--d-surface-1)}',
135
+ '.d-inputnumber-step:active{background:var(--d-surface-0)}',
136
+ ].join(''),
137
+
138
+ // ═══════════════════════════════════════════════════════════════
139
+ // INPUT OTP
140
+ // ═══════════════════════════════════════════════════════════════
141
+ 'input-otp': [
142
+ // .d-otp-slot visual (bg, border) now handled by .d-field in d.base layer
143
+ '.d-otp-separator{color:var(--d-muted)}',
144
+ ].join(''),
145
+
146
+ // ═══════════════════════════════════════════════════════════════
147
+ // TEXTAREA
148
+ // ═══════════════════════════════════════════════════════════════
149
+ textarea: [
150
+ // .d-textarea-wrap visual (bg, border, focus) now handled by .d-field in d.base layer
151
+ '.d-textarea{color:var(--d-fg);resize:vertical}',
152
+ '.d-textarea::placeholder{color:var(--d-muted)}',
153
+ ].join(''),
154
+
155
+ // ═══════════════════════════════════════════════════════════════
156
+ // BADGE
157
+ // ═══════════════════════════════════════════════════════════════
158
+ badge: [
159
+ '.d-badge{background:var(--d-primary);color:var(--d-primary-fg);border-radius:var(--d-radius-full)}',
160
+ '.d-badge-dot{background:var(--d-primary)}',
161
+ '.d-badge-dot.d-badge-processing{animation:d-pulse 2s ease-in-out infinite}',
162
+ ].join(''),
163
+
164
+ // ═══════════════════════════════════════════════════════════════
165
+ // TAG
166
+ // ═══════════════════════════════════════════════════════════════
167
+ tag: [
168
+ '.d-tag{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius);color:var(--d-fg)}',
169
+ '.d-tag-close{color:var(--d-muted)}',
170
+ '.d-tag-close:hover{color:var(--d-fg)}',
171
+ ].join(''),
172
+
173
+ // ═══════════════════════════════════════════════════════════════
174
+ // CHIP
175
+ // ═══════════════════════════════════════════════════════════════
176
+ chip: [
177
+ '.d-chip{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-fg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
178
+ '.d-chip-outline{background:transparent}',
179
+ '.d-chip-filled{background:var(--d-primary);color:var(--d-primary-fg);border-color:var(--d-primary)}',
180
+ '.d-chip-selected{background:var(--d-primary-subtle);border-color:var(--d-primary);color:var(--d-primary-on-subtle)}',
181
+ '.d-chip-interactive:hover{background:var(--d-border);transform:translate(var(--d-hover-translate))}',
182
+ '.d-chip-remove{color:var(--d-muted)}',
183
+ '.d-chip-remove:hover{color:var(--d-error)}',
184
+ ].join(''),
185
+
186
+ // ═══════════════════════════════════════════════════════════════
187
+ // CHECKBOX
188
+ // ═══════════════════════════════════════════════════════════════
189
+ checkbox: [
190
+ '.d-checkbox{color:var(--d-fg)}',
191
+ '.d-checkbox-check{border-radius:var(--d-checkbox-radius,4px);border:var(--d-border-width) var(--d-border-style) var(--d-border);background:var(--d-bg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
192
+ '.d-checkbox:has(:checked) .d-checkbox-check,.d-checkbox-inline:has(:checked) .d-checkbox-check{background:var(--d-primary);border-color:var(--d-primary);color:var(--d-primary-fg)}',
193
+ '.d-checkbox:has(:indeterminate) .d-checkbox-check,.d-checkbox-inline:has(:indeterminate) .d-checkbox-check{background:var(--d-primary);border-color:var(--d-primary);color:var(--d-primary-fg)}',
194
+ '.d-checkbox[data-error] .d-checkbox-check{border-color:var(--d-error)}',
195
+ '.d-checkbox[data-success] .d-checkbox-check{border-color:var(--d-success)}',
196
+ ].join(''),
197
+
198
+ // ═══════════════════════════════════════════════════════════════
199
+ // SWITCH
200
+ // ═══════════════════════════════════════════════════════════════
201
+ switch: [
202
+ '.d-switch-track{background:var(--d-border);border:var(--d-border-width) var(--d-border-style) var(--d-border);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
203
+ '.d-switch-thumb{background:var(--d-bg);box-shadow:var(--d-elevation-1);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
204
+ '.d-switch:has(:checked) .d-switch-track{background:var(--d-primary);border-color:var(--d-primary)}',
205
+ ].join(''),
206
+
207
+ // ═══════════════════════════════════════════════════════════════
208
+ // RADIO GROUP
209
+ // ═══════════════════════════════════════════════════════════════
210
+ 'radio-group': [
211
+ '.d-radio-indicator{border:var(--d-border-width) var(--d-border-style) var(--d-border);background:var(--d-bg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
212
+ '.d-radio:has(:checked) .d-radio-indicator{border-color:var(--d-primary)}',
213
+ '.d-radio-dot{background:var(--d-primary)}',
214
+ '.d-radio-label{color:var(--d-fg)}',
215
+ ].join(''),
216
+
217
+ // ═══════════════════════════════════════════════════════════════
218
+ // SELECT
219
+ // ═══════════════════════════════════════════════════════════════
220
+ select: [
221
+ // .d-select-wrap/.d-select visual (bg, border, focus) now handled by .d-field in d.base layer
222
+ '.d-select-open .d-field{border-color:var(--d-field-border-focus);box-shadow:var(--d-group-shadow,var(--d-field-ring))}',
223
+ '.d-select-dropdown{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
224
+ '.d-select-option{color:var(--d-fg);transition:background var(--d-duration-fast) var(--d-easing-standard)}',
225
+ // Unified listitem state contract — hover/highlight/active for all dropdown types
226
+ '.d-select-option:hover,.d-select-option-highlight,.d-combobox-option:hover,.d-combobox-option-highlight,.d-dropdown-item:hover,.d-dropdown-item-highlight,.d-cascader-option:hover,.d-cascader-option-highlight,.d-menu-item:hover,.d-menu-item-highlight{background:var(--d-surface-1);color:var(--d-fg)}',
227
+ '.d-select-option-active,.d-combobox-option-active{background:var(--d-primary);color:var(--d-primary-fg)}',
228
+ '.d-select-option-active:hover,.d-combobox-option-active:hover{background:var(--d-primary-hover);color:var(--d-primary-fg)}',
229
+ // .d-select-error removed — error state now via .d-field[data-error] in d.base
230
+ '.d-select-multi-tag{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border)}',
231
+ ].join(''),
232
+
233
+ // ═══════════════════════════════════════════════════════════════
234
+ // COMBOBOX
235
+ // ═══════════════════════════════════════════════════════════════
236
+ combobox: [
237
+ // .d-combobox-input-wrap visual (bg, border, focus) now handled by .d-field in d.base layer
238
+ '.d-combobox-input{color:var(--d-fg)}',
239
+ '.d-combobox-input::placeholder{color:var(--d-muted)}',
240
+ '.d-combobox-arrow{color:var(--d-muted)}',
241
+ '.d-combobox-listbox{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
242
+ '.d-combobox-option{color:var(--d-fg);transition:background var(--d-duration-fast) var(--d-easing-standard)}',
243
+ // Combobox hover/highlight/active handled by unified listitem contract above
244
+ '.d-combobox-empty{color:var(--d-muted)}',
245
+ // .d-combobox-error removed — error state now via .d-field[data-error] in d.base
246
+ ].join(''),
247
+
248
+ // ═══════════════════════════════════════════════════════════════
249
+ // SLIDER
250
+ // ═══════════════════════════════════════════════════════════════
251
+ slider: [
252
+ '.d-slider-track{background:var(--d-border)}',
253
+ '.d-slider-fill{background:var(--d-primary)}',
254
+ '.d-slider-thumb{background:var(--d-bg);border:2px solid var(--d-primary);box-shadow:var(--d-elevation-1)}',
255
+ '.d-slider-thumb:hover{box-shadow:0 0 0 4px var(--d-primary-subtle)}',
256
+ '.d-slider-active .d-slider-thumb{box-shadow:0 0 0 6px var(--d-primary-subtle)}',
257
+ '.d-slider-value{color:var(--d-fg)}',
258
+ '.d-slider-mark{color:var(--d-muted)}',
259
+ ].join(''),
260
+
261
+ // ═══════════════════════════════════════════════════════════════
262
+ // RATE
263
+ // ═══════════════════════════════════════════════════════════════
264
+ rate: [
265
+ '.d-rate-star{color:var(--d-muted)}',
266
+ '.d-rate-star-active{color:var(--d-warning)}',
267
+ '.d-rate-star-half{color:var(--d-warning);opacity:0.55}',
268
+ '.d-rate-star:hover:not([disabled]){color:var(--d-warning-hover)}',
269
+ ].join(''),
270
+
271
+ // ═══════════════════════════════════════════════════════════════
272
+ // COLOR PICKER
273
+ // ═══════════════════════════════════════════════════════════════
274
+ 'color-picker': [
275
+ // .d-colorpicker-trigger visual (bg, border, focus) now handled by .d-field in d.base layer
276
+ '.d-colorpicker-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
277
+ ].join(''),
278
+
279
+ // ═══════════════════════════════════════════════════════════════
280
+ // COLOR PALETTE
281
+ // ═══════════════════════════════════════════════════════════════
282
+ 'color-palette': [
283
+ '.d-colorpalette-swatch-color{box-shadow:var(--d-elevation-1)}',
284
+ '.d-colorpalette-swatch-color:hover{box-shadow:var(--d-elevation-2)}',
285
+ '.d-colorpalette-contrast{background:rgba(0,0,0,0.35);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}',
286
+ ].join(''),
287
+
288
+ // ═══════════════════════════════════════════════════════════════
289
+ // DATE PICKER
290
+ // ═══════════════════════════════════════════════════════════════
291
+ 'date-picker': [
292
+ '.d-datepicker-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2);color:var(--d-fg)}',
293
+ '.d-datepicker-day:hover{background:var(--d-surface-1)}',
294
+ '.d-datepicker-day:active:not(.d-datepicker-day-selected){background:var(--d-surface-2)}',
295
+ '.d-datepicker-day-selected{background:var(--d-primary);color:var(--d-primary-fg)}',
296
+ '.d-datepicker-day-selected:hover{background:var(--d-primary-hover);color:var(--d-primary-fg)}',
297
+ '.d-datepicker-day-selected:active{background:var(--d-primary-active);color:var(--d-primary-fg)}',
298
+ '.d-datepicker-day-today.d-datepicker-day-selected{box-shadow:inset 0 0 0 1px var(--d-primary-fg)}',
299
+ '.d-datepicker-title:hover{background:var(--d-surface-1)}',
300
+ '.d-datepicker-title:active{background:var(--d-surface-2)}',
301
+ '.d-datepicker-nav-btn{color:var(--d-muted)}',
302
+ '.d-datepicker-nav-btn:hover{color:var(--d-fg);background:var(--d-surface-1)}',
303
+ '.d-datepicker-nav-btn:active{background:var(--d-surface-2)}',
304
+ '.d-datepicker-month:hover,.d-datepicker-year:hover{background:var(--d-surface-1)}',
305
+ '.d-datepicker-month:active,.d-datepicker-year:active{background:var(--d-surface-2)}',
306
+ '.d-datepicker-month.d-datepicker-day-selected,.d-datepicker-year.d-datepicker-day-selected{background:var(--d-primary);color:var(--d-primary-fg)}',
307
+ '.d-datepicker-month.d-datepicker-day-selected:hover,.d-datepicker-year.d-datepicker-day-selected:hover{background:var(--d-primary-hover)}',
308
+ ].join(''),
309
+
310
+ // ═══════════════════════════════════════════════════════════════
311
+ // DATETIME PICKER
312
+ // ═══════════════════════════════════════════════════════════════
313
+ 'datetime-picker': [
314
+ '.d-datetimepicker-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2);color:var(--d-fg)}',
315
+ ].join(''),
316
+
317
+ // ═══════════════════════════════════════════════════════════════
318
+ // TIME PICKER
319
+ // ═══════════════════════════════════════════════════════════════
320
+ 'time-picker': [
321
+ '.d-timepicker-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
322
+ '.d-timepicker-cell:hover{background:var(--d-surface-1)}',
323
+ '.d-timepicker-cell-selected{background:var(--d-primary);color:var(--d-primary-fg)}',
324
+ ].join(''),
325
+
326
+ // ═══════════════════════════════════════════════════════════════
327
+ // UPLOAD
328
+ // ═══════════════════════════════════════════════════════════════
329
+ upload: [
330
+ '.d-upload-dragger{border-color:var(--d-border);background:var(--d-surface-0);color:var(--d-muted)}',
331
+ '.d-upload-dragger:hover{border-color:var(--d-primary);color:var(--d-primary)}',
332
+ '.d-upload-dragger-active{border-color:var(--d-primary);background:var(--d-primary-subtle)}',
333
+ '.d-upload-item{background:var(--d-surface-1)}',
334
+ ].join(''),
335
+
336
+ // ═══════════════════════════════════════════════════════════════
337
+ // TRANSFER
338
+ // ═══════════════════════════════════════════════════════════════
339
+ transfer: [
340
+ '.d-transfer-panel{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);background:var(--d-bg)}',
341
+ '.d-transfer-header{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border);background:var(--d-surface-1)}',
342
+ '.d-transfer-item:hover{background:var(--d-surface-1)}',
343
+ ].join(''),
344
+
345
+ // ═══════════════════════════════════════════════════════════════
346
+ // CASCADER
347
+ // ═══════════════════════════════════════════════════════════════
348
+ cascader: [
349
+ // .d-cascader-trigger visual (bg, border, focus) now handled by .d-field in d.base layer
350
+ '.d-cascader-input::placeholder{color:var(--d-muted)}',
351
+ '.d-cascader-dropdown{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
352
+ '.d-cascader-column:not(:last-child){border-right:var(--d-border-width) var(--d-border-style) var(--d-border)}',
353
+ '.d-cascader-option:hover{background:var(--d-surface-1)}',
354
+ '.d-cascader-option-active{background:var(--d-primary-subtle);color:var(--d-primary-on-subtle)}',
355
+ '.d-cascader-option-active:hover{background:var(--d-primary-subtle);color:var(--d-primary-on-subtle)}',
356
+ ].join(''),
357
+
358
+ // ═══════════════════════════════════════════════════════════════
359
+ // MENTIONS
360
+ // ═══════════════════════════════════════════════════════════════
361
+ mentions: [
362
+ '.d-mentions-dropdown{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
363
+ '.d-mentions-option:hover{background:var(--d-surface-1)}',
364
+ ].join(''),
365
+
366
+ // ═══════════════════════════════════════════════════════════════
367
+ // LABEL
368
+ // ═══════════════════════════════════════════════════════════════
369
+ label: [
370
+ '.d-label{color:var(--d-fg)}',
371
+ ].join(''),
372
+
373
+ // ═══════════════════════════════════════════════════════════════
374
+ // MODAL
375
+ // ═══════════════════════════════════════════════════════════════
376
+ modal: [
377
+ '.d-modal-panel{background:var(--d-surface-2);backdrop-filter:var(--d-surface-2-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-2-border);border-radius:var(--d-radius-lg);box-shadow:var(--d-elevation-3);color:var(--d-fg);animation:d-scalein var(--d-duration-normal) var(--d-easing-decelerate)}',
378
+ '.d-modal-close,.d-drawer-close,.d-notification-close,.d-tour-close{color:var(--d-muted);border-radius:var(--d-radius-inner);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
379
+ '.d-modal-close:hover,.d-drawer-close:hover,.d-notification-close:hover,.d-tour-close:hover{color:var(--d-fg);background:var(--d-surface-1)}',
380
+ ].join(''),
381
+
382
+ // ═══════════════════════════════════════════════════════════════
383
+ // ALERT DIALOG
384
+ // ═══════════════════════════════════════════════════════════════
385
+ 'alert-dialog': [
386
+ '.d-alertdialog-panel{background:var(--d-surface-2);backdrop-filter:var(--d-surface-2-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-2-border);border-radius:var(--d-radius-lg);box-shadow:var(--d-elevation-3);color:var(--d-fg);animation:d-scalein var(--d-duration-normal) var(--d-easing-decelerate)}',
387
+ ].join(''),
388
+
389
+ // ═══════════════════════════════════════════════════════════════
390
+ // DRAWER
391
+ // ═══════════════════════════════════════════════════════════════
392
+ drawer: [
393
+ '.d-drawer-panel{background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);box-shadow:var(--d-elevation-3);color:var(--d-fg)}',
394
+ '.d-drawer-left{animation:d-slidein-l var(--d-duration-normal) var(--d-easing-decelerate)}',
395
+ '.d-drawer-right{animation:d-slidein-r var(--d-duration-normal) var(--d-easing-decelerate)}',
396
+ '.d-drawer-top{animation:d-slidein-t var(--d-duration-normal) var(--d-easing-decelerate)}',
397
+ '.d-drawer-bottom{animation:d-slidein-b var(--d-duration-normal) var(--d-easing-decelerate)}',
398
+ ].join(''),
399
+
400
+ // ═══════════════════════════════════════════════════════════════
401
+ // TOOLTIP
402
+ // ═══════════════════════════════════════════════════════════════
403
+ tooltip: [
404
+ '.d-tooltip{background:var(--d-fg);color:var(--d-bg);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
405
+ ].join(''),
406
+
407
+ // ═══════════════════════════════════════════════════════════════
408
+ // POPOVER
409
+ // ═══════════════════════════════════════════════════════════════
410
+ popover: [
411
+ '.d-popover-content{background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2);color:var(--d-fg);animation:d-scalein var(--d-duration-fast) var(--d-easing-decelerate)}',
412
+ ].join(''),
413
+
414
+ // ═══════════════════════════════════════════════════════════════
415
+ // HOVER CARD
416
+ // ═══════════════════════════════════════════════════════════════
417
+ 'hover-card': [
418
+ '.d-hovercard-content{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2);color:var(--d-fg)}',
419
+ ].join(''),
420
+
421
+ // ═══════════════════════════════════════════════════════════════
422
+ // DROPDOWN
423
+ // ═══════════════════════════════════════════════════════════════
424
+ dropdown: [
425
+ '.d-dropdown-menu{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
426
+ '.d-dropdown-item{color:var(--d-fg);transition:background var(--d-duration-fast) var(--d-easing-standard)}',
427
+ // Dropdown item hover/highlight handled by unified listitem contract in SELECT section
428
+ '.d-dropdown-separator{background:var(--d-border)}',
429
+ ].join(''),
430
+
431
+ // ═══════════════════════════════════════════════════════════════
432
+ // CONTEXT MENU
433
+ // ═══════════════════════════════════════════════════════════════
434
+ 'context-menu': [
435
+ '.d-contextmenu{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
436
+ ].join(''),
437
+
438
+ // ═══════════════════════════════════════════════════════════════
439
+ // COMMAND PALETTE
440
+ // ═══════════════════════════════════════════════════════════════
441
+ 'command-palette': [
442
+ '.d-command-panel{background:var(--d-surface-2);backdrop-filter:var(--d-surface-2-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-2-border);border-radius:var(--d-radius-lg);box-shadow:var(--d-elevation-3);color:var(--d-fg)}',
443
+ '.d-command-input-wrap{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border)}',
444
+ '.d-command-item:hover,.d-command-item-highlight{background:var(--d-item-hover-bg)}',
445
+ ].join(''),
446
+
447
+ // ═══════════════════════════════════════════════════════════════
448
+ // POPCONFIRM
449
+ // ═══════════════════════════════════════════════════════════════
450
+ popconfirm: [
451
+ '.d-popconfirm{background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2);color:var(--d-fg)}',
452
+ ].join(''),
453
+
454
+ // ═══════════════════════════════════════════════════════════════
455
+ // TABS
456
+ // ═══════════════════════════════════════════════════════════════
457
+ tabs: [
458
+ '.d-tabs-list{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border)}',
459
+ '.d-tab{color:var(--d-muted);border-bottom:var(--d-border-width-strong) solid transparent;transition:all var(--d-duration-fast) var(--d-easing-standard)}',
460
+ '.d-tab:hover:not([disabled]){color:var(--d-fg)}',
461
+ '.d-tab-active{color:var(--d-primary);border-bottom-color:var(--d-primary)}',
462
+ '.d-tab[disabled]{color:var(--d-muted)}',
463
+ '.d-tabs-vertical .d-tabs-list{border-bottom:none;border-right:var(--d-border-width) var(--d-border-style) var(--d-border)}',
464
+ '.d-tabs-vertical .d-tab{border-bottom:none;border-left:var(--d-border-width-strong) solid transparent}',
465
+ '.d-tabs-vertical .d-tab-active{border-left-color:var(--d-primary);border-bottom-color:transparent}',
466
+ ].join(''),
467
+
468
+ // ═══════════════════════════════════════════════════════════════
469
+ // ACCORDION / COLLAPSIBLE
470
+ // ═══════════════════════════════════════════════════════════════
471
+ accordion: [
472
+ '.d-accordion-trigger{color:var(--d-fg)}',
473
+ '.d-accordion-content{color:var(--d-muted-fg)}',
474
+ ].join(''),
475
+
476
+ // ═══════════════════════════════════════════════════════════════
477
+ // SEPARATOR
478
+ // ═══════════════════════════════════════════════════════════════
479
+ separator: [
480
+ '.d-separator{background:var(--d-border)}',
481
+ '.d-separator-line{background:var(--d-border)}',
482
+ '.d-separator-vertical{background:var(--d-border)}',
483
+ ].join(''),
484
+
485
+ // ═══════════════════════════════════════════════════════════════
486
+ // BREADCRUMB
487
+ // ═══════════════════════════════════════════════════════════════
488
+ breadcrumb: [
489
+ '.d-breadcrumb-link{color:var(--d-muted);transition:color var(--d-duration-fast) var(--d-easing-standard)}',
490
+ '.d-breadcrumb-link:hover{color:var(--d-primary)}',
491
+ '.d-breadcrumb-separator{color:var(--d-muted)}',
492
+ '.d-breadcrumb-current{color:var(--d-fg)}',
493
+ '.d-breadcrumb-ellipsis{color:var(--d-muted);transition:color var(--d-duration-fast) var(--d-easing-standard),background var(--d-duration-fast) var(--d-easing-standard)}',
494
+ '.d-breadcrumb-ellipsis:hover{color:var(--d-fg);background:var(--d-surface-1)}',
495
+ '.d-breadcrumb-menu{background:var(--d-bg);border:1px solid var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
496
+ ].join(''),
497
+
498
+ // ═══════════════════════════════════════════════════════════════
499
+ // PAGINATION
500
+ // ═══════════════════════════════════════════════════════════════
501
+ pagination: [
502
+ '.d-pagination-btn{border-radius:var(--d-radius-inner);color:var(--d-muted);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
503
+ '.d-pagination-btn:hover{background:var(--d-surface-1);color:var(--d-fg)}',
504
+ '.d-pagination-active{background:var(--d-primary);color:var(--d-primary-fg)}',
505
+ '.d-pagination-active:hover{background:var(--d-primary-hover);color:var(--d-primary-fg)}',
506
+ '.d-pagination-ellipsis{color:var(--d-muted)}',
507
+ ].join(''),
508
+
509
+ // ═══════════════════════════════════════════════════════════════
510
+ // TABLE
511
+ // ═══════════════════════════════════════════════════════════════
512
+ table: [
513
+ '.d-table{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-lg);overflow:hidden}',
514
+ '.d-th{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border);background:var(--d-surface-1);color:var(--d-fg)}',
515
+ '.d-td{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-fg)}',
516
+ '.d-table-striped tbody .d-tr:nth-child(even){background:var(--d-surface-1)}',
517
+ '.d-table-hover .d-tr:hover{background:var(--d-primary-subtle)}',
518
+ '.d-table-row-selected{background:var(--d-primary-subtle)}',
519
+ '.d-table-sticky{background:var(--d-surface-1)}',
520
+ '.d-table-footer{border-top:var(--d-border-width) var(--d-border-style) var(--d-border)}',
521
+ ].join(''),
522
+
523
+ // ═══════════════════════════════════════════════════════════════
524
+ // LIST
525
+ // ═══════════════════════════════════════════════════════════════
526
+ list: [
527
+ '.d-list{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);background:var(--d-bg)}',
528
+ '.d-list-item{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border)}',
529
+ '.d-list-item:last-child{border-bottom:none}',
530
+ ].join(''),
531
+
532
+ // ═══════════════════════════════════════════════════════════════
533
+ // TREE
534
+ // ═══════════════════════════════════════════════════════════════
535
+ tree: [
536
+ '.d-tree-node-content:hover{background:var(--d-item-hover-bg)}',
537
+ '.d-tree-node-selected .d-tree-node-label{color:var(--d-primary)}',
538
+ ].join(''),
539
+
540
+ // ═══════════════════════════════════════════════════════════════
541
+ // AVATAR
542
+ // ═══════════════════════════════════════════════════════════════
543
+ avatar: [
544
+ '.d-avatar{border-radius:50%;background:var(--d-primary);border:2px solid var(--d-border)}',
545
+ '.d-avatar-fallback{color:var(--d-primary-fg)}',
546
+ ].join(''),
547
+
548
+ // ═══════════════════════════════════════════════════════════════
549
+ // PROGRESS
550
+ // ═══════════════════════════════════════════════════════════════
551
+ progress: [
552
+ '.d-progress{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);border-radius:var(--d-radius-full);overflow:hidden}',
553
+ '.d-progress-bar{background:var(--d-primary);border-radius:var(--d-radius-full)}',
554
+ '.d-progress-success .d-progress-bar{background:var(--d-success)}',
555
+ '.d-progress-warning .d-progress-bar{background:var(--d-warning)}',
556
+ '.d-progress-error .d-progress-bar{background:var(--d-error)}',
557
+ '.d-progress-label{color:var(--d-fg)}',
558
+ ].join(''),
559
+
560
+ // ═══════════════════════════════════════════════════════════════
561
+ // SKELETON
562
+ // ═══════════════════════════════════════════════════════════════
563
+ skeleton: [
564
+ '.d-skeleton{background:var(--d-surface-1);background-image:linear-gradient(90deg,var(--d-surface-1),var(--d-border),var(--d-surface-1));background-size:200% 100%}',
565
+ ].join(''),
566
+
567
+ // ═══════════════════════════════════════════════════════════════
568
+ // ALERT
569
+ // ═══════════════════════════════════════════════════════════════
570
+ alert: [
571
+ '.d-alert{border-radius:var(--d-radius-panel);border:var(--d-border-width) var(--d-border-style) var(--d-border);background:var(--d-bg);color:var(--d-fg)}',
572
+ '.d-alert-info{background:var(--d-info-subtle);border-color:var(--d-info-border)}',
573
+ '.d-alert-success{background:var(--d-success-subtle);border-color:var(--d-success-border)}',
574
+ '.d-alert-warning{background:var(--d-warning-subtle);border-color:var(--d-warning-border)}',
575
+ '.d-alert-error{background:var(--d-error-subtle);border-color:var(--d-error-border)}',
576
+ '.d-alert-dismiss{color:var(--d-muted);border-radius:var(--d-radius-inner)}',
577
+ '.d-alert-dismiss:hover{color:var(--d-fg);background:var(--d-surface-1)}',
578
+ ].join(''),
579
+
580
+ // ═══════════════════════════════════════════════════════════════
581
+ // TOAST / NOTIFICATION / MESSAGE
582
+ // ═══════════════════════════════════════════════════════════════
583
+ toast: [
584
+ '.d-toast{border-radius:var(--d-radius-panel);background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);color:var(--d-fg);box-shadow:var(--d-elevation-2)}',
585
+ '.d-toast-info{border-left:var(--d-border-width-strong) solid var(--d-info)}',
586
+ '.d-toast-success{border-left:var(--d-border-width-strong) solid var(--d-success)}',
587
+ '.d-toast-warning{border-left:var(--d-border-width-strong) solid var(--d-warning)}',
588
+ '.d-toast-error{border-left:var(--d-border-width-strong) solid var(--d-error)}',
589
+ '.d-toast-close{color:var(--d-muted)}',
590
+ '.d-toast-close:hover{color:var(--d-fg)}',
591
+ // Notification
592
+ '.d-notification{border-radius:var(--d-radius-panel);background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);color:var(--d-fg);box-shadow:var(--d-elevation-2)}',
593
+ '.d-notification-info{border-left:var(--d-border-width-strong) solid var(--d-info)}',
594
+ '.d-notification-success{border-left:var(--d-border-width-strong) solid var(--d-success)}',
595
+ '.d-notification-warning{border-left:var(--d-border-width-strong) solid var(--d-warning)}',
596
+ '.d-notification-error{border-left:var(--d-border-width-strong) solid var(--d-error)}',
597
+ '.d-message{border-radius:var(--d-radius-panel);background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);color:var(--d-fg);box-shadow:var(--d-elevation-2)}',
598
+ ].join(''),
599
+
600
+ // ═══════════════════════════════════════════════════════════════
601
+ // RESULT
602
+ // ═══════════════════════════════════════════════════════════════
603
+ result: [
604
+ '.d-result{color:var(--d-fg)}',
605
+ ].join(''),
606
+
607
+ // ═══════════════════════════════════════════════════════════════
608
+ // DESCRIPTIONS
609
+ // ═══════════════════════════════════════════════════════════════
610
+ descriptions: [
611
+ '.d-descriptions-table{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
612
+ '.d-descriptions-label{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border);background:var(--d-surface-1)}',
613
+ '.d-descriptions-content{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border)}',
614
+ ].join(''),
615
+
616
+ // ═══════════════════════════════════════════════════════════════
617
+ // SEGMENTED CONTROL
618
+ // ═══════════════════════════════════════════════════════════════
619
+ 'segmented-control': [
620
+ '.d-segmented{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border)}',
621
+ '.d-segmented-item{color:var(--d-muted)}',
622
+ '.d-segmented-item:hover{color:var(--d-fg)}',
623
+ '.d-segmented-item[aria-checked="true"]{background:var(--d-selection-bg);color:var(--d-selection-fg);box-shadow:var(--d-selection-shadow)}',
624
+ ].join(''),
625
+
626
+ // ═══════════════════════════════════════════════════════════════
627
+ // STEPS
628
+ // ═══════════════════════════════════════════════════════════════
629
+ steps: [
630
+ '.d-step-icon{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-muted)}',
631
+ '.d-step-finish .d-step-icon{background:var(--d-primary-subtle);border-color:var(--d-primary);color:var(--d-primary-on-subtle)}',
632
+ '.d-step-process .d-step-icon{background:var(--d-primary);border-color:var(--d-primary);color:var(--d-primary-fg)}',
633
+ '.d-step-error .d-step-icon{background:var(--d-error-subtle);border-color:var(--d-error);color:var(--d-error-on-subtle)}',
634
+ '.d-step-connector{background:var(--d-border)}',
635
+ '.d-step-connector-done{background:var(--d-primary)}',
636
+ ].join(''),
637
+
638
+ // ═══════════════════════════════════════════════════════════════
639
+ // MENU / MENUBAR / NAVIGATION MENU
640
+ // ═══════════════════════════════════════════════════════════════
641
+ menu: [
642
+ '.d-menu{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-1)}',
643
+ '.d-menu-item{color:var(--d-fg);transition:background var(--d-duration-fast) var(--d-easing-standard)}',
644
+ '.d-menu-item-active{background:var(--d-primary-subtle);color:var(--d-primary-on-subtle)}',
645
+ '.d-menu-separator{background:var(--d-border)}',
646
+ '.d-menu-sub{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
647
+ '.d-menubar{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
648
+ '.d-menubar-item{color:var(--d-fg)}',
649
+ '.d-menubar-item:hover,.d-menubar-item-active{background:var(--d-surface-1)}',
650
+ '.d-navmenu-item{color:var(--d-fg)}',
651
+ '.d-navmenu-item:hover{color:var(--d-primary)}',
652
+ '.d-navmenu-item-active{color:var(--d-primary)}',
653
+ '.d-navmenu-content{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
654
+ '.d-navmenu-link-highlight{background:var(--d-surface-1)}',
655
+ ].join(''),
656
+
657
+ // ═══════════════════════════════════════════════════════════════
658
+ // CALENDAR
659
+ // ═══════════════════════════════════════════════════════════════
660
+ calendar: [
661
+ '.d-calendar{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
662
+ '.d-calendar-cell:hover{background:var(--d-surface-1)}',
663
+ ].join(''),
664
+
665
+ // ═══════════════════════════════════════════════════════════════
666
+ // CAROUSEL
667
+ // ═══════════════════════════════════════════════════════════════
668
+ carousel: [
669
+ '.d-carousel-nav{color:var(--d-fg);background:var(--d-bg);border-radius:var(--d-radius-full);box-shadow:var(--d-elevation-1)}',
670
+ '.d-carousel-dot{background:var(--d-border)}',
671
+ '.d-carousel-dot-active{background:var(--d-primary)}',
672
+ ].join(''),
673
+
674
+ // ═══════════════════════════════════════════════════════════════
675
+ // EMPTY
676
+ // ═══════════════════════════════════════════════════════════════
677
+ empty: [
678
+ '.d-empty{color:var(--d-muted)}',
679
+ ].join(''),
680
+
681
+ // ═══════════════════════════════════════════════════════════════
682
+ // PLACEHOLDER
683
+ // ═══════════════════════════════════════════════════════════════
684
+ placeholder: [
685
+ '.d-placeholder{background:linear-gradient(135deg,var(--d-surface-0),var(--d-surface-1));border-radius:var(--d-radius-panel);color:var(--d-muted)}',
686
+ '.d-placeholder-avatar{border-radius:50%;border:2px solid var(--d-border);background:linear-gradient(135deg,var(--d-primary-subtle),var(--d-surface-1))}',
687
+ '.d-placeholder-label{color:var(--d-muted-fg)}',
688
+ '.d-placeholder-animate{background:linear-gradient(90deg,var(--d-surface-0) 25%,var(--d-surface-1) 50%,var(--d-surface-0) 75%);background-size:200% 100%}',
689
+ ].join(''),
690
+
691
+ // ═══════════════════════════════════════════════════════════════
692
+ // IMAGE
693
+ // ═══════════════════════════════════════════════════════════════
694
+ image: [
695
+ '.d-image{border-radius:var(--d-radius-panel)}',
696
+ ].join(''),
697
+
698
+ // ═══════════════════════════════════════════════════════════════
699
+ // TIMELINE
700
+ // ═══════════════════════════════════════════════════════════════
701
+ timeline: [
702
+ '.d-timeline-dot{background:var(--d-primary)}',
703
+ '.d-timeline-line{background:var(--d-border)}',
704
+ '.d-timeline-tag{background:var(--d-surface-1);color:var(--d-muted-fg)}',
705
+ '.d-timeline-dot-active{color:var(--d-primary)}',
706
+ '.d-timeline-dot-pending{background:var(--d-primary)}',
707
+ '.d-timeline-skeleton .d-timeline-skel-bar{background:linear-gradient(90deg,var(--d-surface-0) 25%,var(--d-surface-1) 50%,var(--d-surface-0) 75%);background-size:200% 100%}',
708
+ '.d-timeline-item-clickable:hover .d-timeline-content{color:var(--d-primary)}',
709
+ ].join(''),
710
+
711
+ // ═══════════════════════════════════════════════════════════════
712
+ // COMMENT
713
+ // ═══════════════════════════════════════════════════════════════
714
+ comment: [
715
+ '.d-comment-author{color:var(--d-fg)}',
716
+ '.d-comment-time{color:var(--d-muted)}',
717
+ '.d-comment-content{color:var(--d-fg)}',
718
+ '.d-comment-action{color:var(--d-muted)}',
719
+ '.d-comment-action:hover{color:var(--d-primary)}',
720
+ '.d-comment-action-active{color:var(--d-primary)}',
721
+ '.d-comment-bordered{background:var(--d-surface-1)}',
722
+ '.d-comment-nested{border-color:var(--d-border)}',
723
+ ].join(''),
724
+
725
+ // ═══════════════════════════════════════════════════════════════
726
+ // QRCODE
727
+ // ═══════════════════════════════════════════════════════════════
728
+ qrcode: [
729
+ '.d-qrcode-bordered{background:var(--d-surface-1);border-color:var(--d-border);box-shadow:var(--d-elevation-1)}',
730
+ '.d-qrcode-status{background:var(--d-overlay)}',
731
+ ].join(''),
732
+
733
+ // ═══════════════════════════════════════════════════════════════
734
+ // KBD
735
+ // ═══════════════════════════════════════════════════════════════
736
+ kbd: [
737
+ '.d-kbd{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border);box-shadow:0 1px 0 var(--d-border);color:var(--d-fg)}',
738
+ ].join(''),
739
+
740
+ // ═══════════════════════════════════════════════════════════════
741
+ // TYPOGRAPHY
742
+ // ═══════════════════════════════════════════════════════════════
743
+ typography: [
744
+ '.d-text{color:var(--d-fg)}',
745
+ '.d-text-mark{background:var(--d-warning-subtle)}',
746
+ '.d-text-code{background:var(--d-surface-1);border:var(--d-border-width) var(--d-border-style) var(--d-border)}',
747
+ '.d-link{color:var(--d-primary)}',
748
+ '.d-link:hover{color:var(--d-primary-hover)}',
749
+ '.d-blockquote{border-left:3px solid var(--d-border);color:var(--d-muted-fg)}',
750
+ ].join(''),
751
+
752
+ // ═══════════════════════════════════════════════════════════════
753
+ // RESIZABLE
754
+ // ═══════════════════════════════════════════════════════════════
755
+ resizable: [
756
+ '.d-resizable{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
757
+ '.d-resizable-handle{background:var(--d-surface-0)}',
758
+ '.d-resizable-handle-bar{background:var(--d-border)}',
759
+ ].join(''),
760
+
761
+ // ═══════════════════════════════════════════════════════════════
762
+ // SCROLL AREA
763
+ // ═══════════════════════════════════════════════════════════════
764
+ 'scroll-area': [
765
+ '.d-scrollarea-viewport::-webkit-scrollbar-thumb{background:var(--d-border)}',
766
+ ].join(''),
767
+
768
+ // ═══════════════════════════════════════════════════════════════
769
+ // TOUR
770
+ // ═══════════════════════════════════════════════════════════════
771
+ tour: [
772
+ '.d-tour-popover{background:var(--d-surface-1);backdrop-filter:var(--d-surface-1-filter);border:var(--d-border-width) var(--d-border-style) var(--d-surface-1-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-3);color:var(--d-fg)}',
773
+ ].join(''),
774
+
775
+ // ═══════════════════════════════════════════════════════════════
776
+ // FLOAT BUTTON
777
+ // ═══════════════════════════════════════════════════════════════
778
+ 'float-button': [
779
+ '.d-float-btn{background:var(--d-primary);color:var(--d-primary-fg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
780
+ '.d-float-btn:hover{background:var(--d-primary-hover);box-shadow:var(--d-elevation-3)}',
781
+ ].join(''),
782
+
783
+ // ═══════════════════════════════════════════════════════════════
784
+ // SHARED OPTION
785
+ // ═══════════════════════════════════════════════════════════════
786
+ 'shared-option': [
787
+ '.d-option{color:var(--d-fg)}',
788
+ '.d-option:hover{background:var(--d-surface-1)}',
789
+ '.d-option-active{background:var(--d-surface-1)}',
790
+ ].join(''),
791
+
792
+ // ═══════════════════════════════════════════════════════════════
793
+ // DATE RANGE PICKER
794
+ // ═══════════════════════════════════════════════════════════════
795
+ 'date-range-picker': [
796
+ '.d-daterange-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
797
+ '.d-datepicker-day-in-range{background:var(--d-primary-subtle)}',
798
+ '.d-datepicker-day-range-start,.d-datepicker-day-range-end{background:var(--d-primary);color:var(--d-primary-fg)}',
799
+ '.d-daterange-presets button{color:var(--d-muted);transition:color var(--d-duration-fast) var(--d-easing-standard)}',
800
+ '.d-daterange-presets button:hover{color:var(--d-primary)}',
801
+ ].join(''),
802
+
803
+ // ═══════════════════════════════════════════════════════════════
804
+ // TIME RANGE PICKER
805
+ // ═══════════════════════════════════════════════════════════════
806
+ 'time-range-picker': [
807
+ '.d-timerange-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
808
+ '.d-timerange-cell:hover{background:var(--d-surface-1)}',
809
+ '.d-timerange-cell-selected{background:var(--d-primary);color:var(--d-primary-fg)}',
810
+ '.d-timerange-error{color:var(--d-error)}',
811
+ ].join(''),
812
+
813
+ // ═══════════════════════════════════════════════════════════════
814
+ // RANGE SLIDER
815
+ // ═══════════════════════════════════════════════════════════════
816
+ 'range-slider': [
817
+ '.d-rangeslider-track{background:var(--d-border)}',
818
+ '.d-rangeslider-fill{background:var(--d-primary)}',
819
+ '.d-rangeslider-thumb{background:var(--d-bg);border:2px solid var(--d-primary);box-shadow:var(--d-elevation-1)}',
820
+ '.d-rangeslider-thumb:hover{box-shadow:0 0 0 4px var(--d-primary-subtle)}',
821
+ '.d-rangeslider-thumb:focus-visible{box-shadow:0 0 0 4px var(--d-primary-subtle);outline:none}',
822
+ ].join(''),
823
+
824
+ // ═══════════════════════════════════════════════════════════════
825
+ // TREE SELECT
826
+ // ═══════════════════════════════════════════════════════════════
827
+ 'tree-select': [
828
+ '.d-treeselect-panel{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
829
+ '.d-treeselect-search{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border)}',
830
+ ].join(''),
831
+
832
+ // ═══════════════════════════════════════════════════════════════
833
+ // AVATAR GROUP
834
+ // ═══════════════════════════════════════════════════════════════
835
+ 'avatar-group': [
836
+ '.d-avatar-group-overflow{background:var(--d-surface-1);border:2px solid var(--d-border);color:var(--d-muted)}',
837
+ ].join(''),
838
+
839
+ // ═══════════════════════════════════════════════════════════════
840
+ // NAVIGATION MENU
841
+ // ═══════════════════════════════════════════════════════════════
842
+ 'navigation-menu': [
843
+ '.d-navmenu{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
844
+ '.d-navmenu-trigger{color:var(--d-fg);transition:color var(--d-duration-fast) var(--d-easing-standard)}',
845
+ '.d-navmenu-trigger:hover,.d-navmenu-trigger-active{color:var(--d-primary)}',
846
+ '.d-navmenu-content{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
847
+ '.d-navmenu-link{color:var(--d-fg);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
848
+ '.d-navmenu-link:hover{background:var(--d-surface-1);color:var(--d-primary)}',
849
+ '.d-navmenu-link-desc{color:var(--d-muted)}',
850
+ ].join(''),
851
+
852
+ // ═══════════════════════════════════════════════════════════════
853
+ // SPLITTER
854
+ // ═══════════════════════════════════════════════════════════════
855
+ splitter: [
856
+ '.d-splitter{border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel)}',
857
+ '.d-splitter-handle{background:var(--d-surface-0);transition:background var(--d-duration-fast) var(--d-easing-standard)}',
858
+ '.d-splitter-handle:hover{background:var(--d-surface-1)}',
859
+ '.d-splitter-handle-bar{background:var(--d-border)}',
860
+ ].join(''),
861
+
862
+ // ═══════════════════════════════════════════════════════════════
863
+ // BACK TOP
864
+ // ═══════════════════════════════════════════════════════════════
865
+ 'back-top': [
866
+ '.d-backtop{background:var(--d-primary);color:var(--d-primary-fg);border-radius:var(--d-radius-full);box-shadow:var(--d-elevation-2);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
867
+ '.d-backtop:hover{background:var(--d-primary-hover);box-shadow:var(--d-elevation-3)}',
868
+ ].join(''),
869
+
870
+ // ═══════════════════════════════════════════════════════════════
871
+ // DATA TABLE
872
+ // ═══════════════════════════════════════════════════════════════
873
+ 'data-table': [
874
+ '.d-datatable{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-lg);overflow:hidden}',
875
+ '.d-datatable-th{background:var(--d-surface-1);border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-fg)}',
876
+ '.d-datatable-th-sortable{cursor:pointer;user-select:none;transition:background var(--d-duration-fast) var(--d-easing-standard)}',
877
+ '.d-datatable-th-sortable:hover{background:var(--d-surface-0)}',
878
+ '.d-datatable-td{border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-fg)}',
879
+ '.d-datatable-td-editing{background:var(--d-primary-subtle)}',
880
+ '.d-datatable-row-selected{background:var(--d-primary-subtle)}',
881
+ '.d-datatable-pagination{border-top:var(--d-border-width) var(--d-border-style) var(--d-border);color:var(--d-muted)}',
882
+ '.d-datatable-pagination button{color:var(--d-muted);border-radius:var(--d-radius-inner);transition:all var(--d-duration-fast) var(--d-easing-standard)}',
883
+ '.d-datatable-pagination button:hover:not([disabled]){background:var(--d-surface-1);color:var(--d-fg)}',
884
+ '.d-datatable-empty{color:var(--d-muted)}',
885
+ '.d-datatable-filter-popup{background:var(--d-bg);border:var(--d-border-width) var(--d-border-style) var(--d-border);border-radius:var(--d-radius-panel);box-shadow:var(--d-elevation-2)}',
886
+ '.d-datatable-resize-handle{background:transparent;transition:background var(--d-duration-fast)}',
887
+ '.d-datatable-resize-handle:hover{background:var(--d-primary)}',
888
+ '.d-datatable-export-btn{color:var(--d-muted);transition:color var(--d-duration-fast)}',
889
+ '.d-datatable-export-btn:hover{color:var(--d-fg)}',
890
+ '.d-datatable-pinned-left{background:var(--d-bg)}',
891
+ '.d-datatable-pinned-right{background:var(--d-bg)}',
892
+ ].join(''),
893
+
894
+ // ═══════════════════════════════════════════════════════════════
895
+ // SHELL
896
+ // ═══════════════════════════════════════════════════════════════
897
+ shell: [
898
+ '.d-shell{background:var(--d-bg);color:var(--d-fg)}',
899
+ '.d-shell-header{background:var(--d-surface-0);border-bottom:var(--d-border-width) var(--d-border-style) var(--d-border)}',
900
+ '.d-shell-nav{background:var(--d-surface-0);border-right:var(--d-border-width) var(--d-border-style) var(--d-border)}',
901
+ '.d-shell-nav-right{border-right:none;border-left:var(--d-border-width) var(--d-border-style) var(--d-border)}',
902
+ '.d-shell-body{background:var(--d-bg)}',
903
+ '.d-shell-footer{background:var(--d-surface-0);border-top:var(--d-border-width) var(--d-border-style) var(--d-border)}',
904
+ '.d-shell-aside{background:var(--d-surface-0);border-left:var(--d-border-width) var(--d-border-style) var(--d-border)}',
905
+ ].join(''),
906
+
907
+ // ═══════════════════════════════════════════════════════════════
908
+ // PROSE — rich text content typography
909
+ // ═══════════════════════════════════════════════════════════════
910
+ prose: [
911
+ '.d-prose h1{font-size:var(--d-text-3xl);font-weight:var(--d-fw-heading,700);line-height:var(--d-lh-tight,1.1);margin-bottom:var(--d-sp-4)}',
912
+ '.d-prose h2{font-size:var(--d-text-2xl);font-weight:var(--d-fw-heading,700);line-height:var(--d-lh-tight,1.1);margin-top:var(--d-sp-8);margin-bottom:var(--d-sp-3)}',
913
+ '.d-prose h3{font-size:var(--d-text-xl);font-weight:var(--d-fw-title,600);line-height:var(--d-lh-snug,1.25);margin-top:var(--d-sp-6);margin-bottom:var(--d-sp-2)}',
914
+ '.d-prose h4{font-size:var(--d-text-lg);font-weight:var(--d-fw-title,600);line-height:var(--d-lh-snug,1.25);margin-top:var(--d-sp-4);margin-bottom:var(--d-sp-2)}',
915
+ '.d-prose p{margin-bottom:var(--d-sp-4);line-height:var(--d-lh-relaxed,1.6)}',
916
+ '.d-prose blockquote{border-left:3px solid var(--d-primary);padding-left:var(--d-sp-4);margin:var(--d-sp-4) 0;color:var(--d-muted-fg);font-style:italic}',
917
+ '.d-prose code{background:var(--d-surface-1);padding:0.15em 0.3em;border-radius:var(--d-radius-sm);font-family:var(--d-font-mono);font-size:0.9em}',
918
+ '.d-prose pre{background:var(--d-surface-1);padding:var(--d-sp-4);border-radius:var(--d-radius);overflow-x:auto;margin:var(--d-sp-4) 0}',
919
+ '.d-prose pre code{background:none;padding:0;border-radius:0;font-size:0.85em;line-height:1.6}',
920
+ '.d-prose ul,.d-prose ol{padding-left:var(--d-sp-6);margin-bottom:var(--d-sp-4)}',
921
+ '.d-prose li{margin-bottom:var(--d-sp-1);line-height:var(--d-lh-relaxed,1.6)}',
922
+ '.d-prose hr{border:none;border-top:1px solid var(--d-border);margin:var(--d-sp-8) 0}',
923
+ '.d-prose a{color:var(--d-primary);text-decoration:underline}',
924
+ '.d-prose a:hover{color:var(--d-primary-hover)}',
925
+ '.d-prose img{max-width:100%;border-radius:var(--d-radius)}',
926
+ '.d-prose table{width:100%;border-collapse:collapse;margin:var(--d-sp-4) 0}',
927
+ '.d-prose th,.d-prose td{padding:var(--d-sp-2) var(--d-sp-3);border-bottom:1px solid var(--d-border);text-align:left}',
928
+ '.d-prose th{font-weight:var(--d-fw-title,600);background:var(--d-surface-0)}',
929
+ ].join(''),
930
+
931
+ // ═══════════════════════════════════════════════════════════════
932
+ // DIVIDE — child separator borders
933
+ // ═══════════════════════════════════════════════════════════════
934
+ divide: [
935
+ '.d-divide-y>:not(:first-child){border-top:1px solid var(--d-border)}',
936
+ '.d-divide-x>:not(:first-child){border-left:1px solid var(--d-border)}',
937
+ ].join(''),
938
+ };
939
+
940
+ export const componentCSS = Object.values(componentCSSMap).join('');