banhaten 0.1.3 → 0.3.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 (275) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/CONTRIBUTING.md +44 -0
  3. package/README.md +65 -13
  4. package/SECURITY.md +15 -0
  5. package/banhaten.config.example.json +0 -2
  6. package/docs/design-system/README.md +9 -0
  7. package/docs/design-system/adoption-quality-remediation.md +87 -0
  8. package/docs/design-system/agent-usage.md +13 -0
  9. package/docs/design-system/appearance-presets.md +6 -1
  10. package/docs/design-system/component-docs-pattern.md +81 -0
  11. package/docs/design-system/component-implementation-ownership-audit.md +244 -0
  12. package/docs/design-system/component-quality-audit-2026-08-20.md +223 -0
  13. package/docs/design-system/component-showcase-consistency-report.md +2 -0
  14. package/docs/design-system/component-token-consistency-audit.md +13 -3
  15. package/docs/design-system/components/README.md +4 -2
  16. package/docs/design-system/components/accordion.md +16 -0
  17. package/docs/design-system/components/activity-feed.md +17 -1
  18. package/docs/design-system/components/activity-heatmap.md +73 -0
  19. package/docs/design-system/components/alert-dialog.md +17 -0
  20. package/docs/design-system/components/alert.md +46 -14
  21. package/docs/design-system/components/aspect-ratio.md +15 -0
  22. package/docs/design-system/components/attribute.md +16 -0
  23. package/docs/design-system/components/autocomplete.md +19 -0
  24. package/docs/design-system/components/avatar.md +18 -0
  25. package/docs/design-system/components/badge.md +19 -0
  26. package/docs/design-system/components/banner.md +19 -1
  27. package/docs/design-system/components/breadcrumbs.md +17 -0
  28. package/docs/design-system/components/button-group.md +35 -0
  29. package/docs/design-system/components/button.md +18 -0
  30. package/docs/design-system/components/card.md +26 -1
  31. package/docs/design-system/components/carousel.md +20 -3
  32. package/docs/design-system/components/catalog-components.md +18 -1
  33. package/docs/design-system/components/chart.md +15 -0
  34. package/docs/design-system/components/checkbox.md +16 -0
  35. package/docs/design-system/components/collapsible.md +15 -0
  36. package/docs/design-system/components/command.md +15 -0
  37. package/docs/design-system/components/context-menu.md +15 -0
  38. package/docs/design-system/components/date-picker.md +21 -1
  39. package/docs/design-system/components/divider.md +16 -0
  40. package/docs/design-system/components/empty-state.md +17 -0
  41. package/docs/design-system/components/field.md +17 -0
  42. package/docs/design-system/components/file-upload.md +18 -0
  43. package/docs/design-system/components/hover-card.md +15 -0
  44. package/docs/design-system/components/input-group.md +17 -0
  45. package/docs/design-system/components/input-otp.md +18 -0
  46. package/docs/design-system/components/input.md +43 -7
  47. package/docs/design-system/components/item.md +72 -0
  48. package/docs/design-system/components/kbd.md +18 -0
  49. package/docs/design-system/components/label.md +16 -0
  50. package/docs/design-system/components/menu.md +17 -0
  51. package/docs/design-system/components/menubar.md +15 -0
  52. package/docs/design-system/components/modal.md +25 -4
  53. package/docs/design-system/components/native-select.md +18 -0
  54. package/docs/design-system/components/navigation-menu.md +15 -0
  55. package/docs/design-system/components/onboarding-step-list-item.md +16 -1
  56. package/docs/design-system/components/page-header.md +17 -1
  57. package/docs/design-system/components/pagination.md +31 -8
  58. package/docs/design-system/components/popover.md +19 -0
  59. package/docs/design-system/components/progress-slider.md +18 -0
  60. package/docs/design-system/components/progress.md +17 -0
  61. package/docs/design-system/components/radio-card.md +16 -0
  62. package/docs/design-system/components/radio-group.md +17 -0
  63. package/docs/design-system/components/resizable.md +15 -0
  64. package/docs/design-system/components/scroll-area.md +20 -1
  65. package/docs/design-system/components/segmented-control.md +71 -0
  66. package/docs/design-system/components/select.md +44 -7
  67. package/docs/design-system/components/sheet.md +17 -0
  68. package/docs/design-system/components/sidebar.md +17 -0
  69. package/docs/design-system/components/skeleton.md +18 -0
  70. package/docs/design-system/components/slideout.md +17 -0
  71. package/docs/design-system/components/slider.md +20 -0
  72. package/docs/design-system/components/social-button.md +21 -3
  73. package/docs/design-system/components/spinner.md +16 -0
  74. package/docs/design-system/components/steps.md +19 -0
  75. package/docs/design-system/components/table.md +36 -4
  76. package/docs/design-system/components/tabs.md +17 -0
  77. package/docs/design-system/components/tag.md +17 -0
  78. package/docs/design-system/components/textarea.md +16 -0
  79. package/docs/design-system/components/timeline.md +17 -0
  80. package/docs/design-system/components/toast.md +17 -0
  81. package/docs/design-system/components/toggle.md +17 -0
  82. package/docs/design-system/components/toolbar.md +21 -1
  83. package/docs/design-system/components/tooltip.md +18 -1
  84. package/docs/design-system/density-and-elevation.md +61 -0
  85. package/docs/design-system/direction-and-localization.md +23 -0
  86. package/docs/design-system/form-recipes.md +73 -0
  87. package/docs/design-system/gap-promotion-policy.md +21 -0
  88. package/docs/design-system/gap-promotion-report.md +100 -0
  89. package/docs/design-system/installation.md +68 -0
  90. package/docs/design-system/launch-comparison-shadcn.md +98 -0
  91. package/docs/design-system/registry-and-cli.md +30 -7
  92. package/docs/design-system/release-policy.md +30 -0
  93. package/docs/design-system/roadmap.md +14 -0
  94. package/docs/design-system/support-matrix.md +23 -0
  95. package/docs/design-system/tabs.md +1 -1
  96. package/docs/design-system/token-governance.md +23 -1
  97. package/package.json +30 -15
  98. package/registry/component-contract.json +40 -0
  99. package/registry/components/alert-dialog.tsx +2 -2
  100. package/registry/components/alert.tsx +101 -76
  101. package/registry/components/autocomplete.tsx +23 -9
  102. package/registry/components/avatar.tsx +14 -10
  103. package/registry/components/badge.tsx +18 -18
  104. package/registry/components/button-group.tsx +324 -5
  105. package/registry/components/button.tsx +38 -17
  106. package/registry/components/card.tsx +87 -62
  107. package/registry/components/carousel.tsx +67 -5
  108. package/registry/components/chart.tsx +36 -3
  109. package/registry/components/checkbox.tsx +3 -3
  110. package/registry/components/collapsible.tsx +1 -1
  111. package/registry/components/command.tsx +38 -4
  112. package/registry/components/context-menu.tsx +1 -1
  113. package/registry/components/date-picker.tsx +312 -135
  114. package/registry/components/expanded/ActivityFeed.tsx +9 -22
  115. package/registry/components/expanded/ActivityHeatmap.tsx +64 -0
  116. package/registry/components/expanded/Banner.tsx +3 -4
  117. package/registry/components/expanded/Breadcrumbs.tsx +8 -5
  118. package/registry/components/expanded/CatalogComponentsShowcase.tsx +16 -17
  119. package/registry/components/expanded/CatalogDivider.tsx +4 -3
  120. package/registry/components/expanded/EmptyState.tsx +1 -1
  121. package/registry/components/expanded/FileUpload.tsx +16 -7
  122. package/registry/components/expanded/OnboardingStepListItem.tsx +2 -6
  123. package/registry/components/expanded/PageHeader.tsx +47 -56
  124. package/registry/components/expanded/Slideout.tsx +29 -424
  125. package/registry/components/expanded/Steps.tsx +151 -13
  126. package/registry/components/expanded/Table.tsx +161 -82
  127. package/registry/components/expanded/Timeline.tsx +14 -27
  128. package/registry/components/expanded/activityFeed.css +9 -9
  129. package/registry/components/expanded/activityHeatmap.css +66 -0
  130. package/registry/components/expanded/banner.css +21 -11
  131. package/registry/components/expanded/breadcrumbs.css +2 -2
  132. package/registry/components/expanded/divider.css +1 -1
  133. package/registry/components/expanded/emptyState.css +1 -1
  134. package/registry/components/expanded/fileUpload.css +7 -7
  135. package/registry/components/expanded/onboardingStepListItem.css +2 -2
  136. package/registry/components/expanded/pageHeader.css +14 -11
  137. package/registry/components/expanded/slideout.css +10 -690
  138. package/registry/components/expanded/steps.css +78 -15
  139. package/registry/components/expanded/table.css +60 -69
  140. package/registry/components/expanded/timeline.css +19 -18
  141. package/registry/components/field.tsx +61 -8
  142. package/registry/components/input-content.ts +1 -0
  143. package/registry/components/input-otp.tsx +13 -3
  144. package/registry/components/input.tsx +68 -43
  145. package/registry/components/item.tsx +189 -0
  146. package/registry/components/kbd.tsx +111 -4
  147. package/registry/components/menu.tsx +87 -251
  148. package/registry/components/menubar.tsx +1 -1
  149. package/registry/components/modal.tsx +143 -103
  150. package/registry/components/native-select.tsx +2 -2
  151. package/registry/components/navigation-menu.tsx +1 -1
  152. package/registry/components/pagination.css +36 -0
  153. package/registry/components/pagination.tsx +88 -64
  154. package/registry/components/popover.tsx +162 -664
  155. package/registry/components/progress-slider.tsx +1 -1
  156. package/registry/components/radio-card.tsx +116 -87
  157. package/registry/components/resizable.tsx +36 -2
  158. package/registry/components/scroll-area.tsx +30 -6
  159. package/registry/components/segmented-control.tsx +87 -0
  160. package/registry/components/select-content.tsx +2 -2
  161. package/registry/components/select.tsx +86 -27
  162. package/registry/components/sheet.tsx +1 -1
  163. package/registry/components/sidebar.tsx +12 -6
  164. package/registry/components/skeleton.css +0 -3
  165. package/registry/components/social-button.tsx +59 -30
  166. package/registry/components/spinner.tsx +18 -55
  167. package/registry/components/table-elements.tsx +128 -0
  168. package/registry/components/tabs.css +1 -1
  169. package/registry/components/tabs.tsx +13 -14
  170. package/registry/components/tag.tsx +3 -3
  171. package/registry/components/textarea.tsx +3 -3
  172. package/registry/components/toast.tsx +16 -11
  173. package/registry/components/toggle.tsx +4 -4
  174. package/registry/components/toolbar.tsx +94 -22
  175. package/registry/components/tooltip.tsx +2 -2
  176. package/registry/examples/alert-demo.tsx +25 -5
  177. package/registry/examples/attribute-demo.tsx +1 -1
  178. package/registry/examples/autocomplete-demo.tsx +3 -3
  179. package/registry/examples/avatar-demo.tsx +14 -11
  180. package/registry/examples/badge-demo.tsx +1 -1
  181. package/registry/examples/button-demo.tsx +6 -6
  182. package/registry/examples/button-group-demo.tsx +23 -2
  183. package/registry/examples/card-demo.tsx +46 -8
  184. package/registry/examples/carousel-demo.tsx +20 -2
  185. package/registry/examples/chart-demo.tsx +1 -1
  186. package/registry/examples/checkbox-demo.tsx +5 -5
  187. package/registry/examples/collection-filter-bar-demo.tsx +135 -0
  188. package/registry/examples/command-demo.tsx +3 -3
  189. package/registry/examples/{expanded/command-bar-demo.tsx → command-palette-demo.tsx} +5 -15
  190. package/registry/examples/context-menu-demo.tsx +1 -1
  191. package/registry/examples/control-density-contract-demo.tsx +61 -0
  192. package/registry/examples/date-picker-demo.tsx +12 -12
  193. package/registry/examples/divider-demo.tsx +3 -3
  194. package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -0
  195. package/registry/examples/expanded/banner-demo.tsx +1 -1
  196. package/registry/examples/expanded/breadcrumbs-demo.tsx +4 -4
  197. package/registry/examples/expanded/empty-state-demo.tsx +1 -1
  198. package/registry/examples/expanded/file-upload-demo.tsx +1 -1
  199. package/registry/examples/expanded/onboarding-step-demo.tsx +1 -1
  200. package/registry/examples/expanded/slideout-demo.tsx +2 -2
  201. package/registry/examples/expanded/steps-demo.tsx +1 -1
  202. package/registry/examples/expanded/tabs-demo.tsx +1 -1
  203. package/registry/examples/expanded/timeline-demo.tsx +1 -1
  204. package/registry/examples/hover-card-demo.tsx +2 -2
  205. package/registry/examples/input-demo.tsx +6 -6
  206. package/registry/examples/input-otp-demo.tsx +4 -4
  207. package/registry/examples/item-demo.tsx +46 -0
  208. package/registry/examples/kbd-demo.tsx +1 -1
  209. package/registry/examples/label-demo.tsx +1 -1
  210. package/registry/examples/menu-demo.tsx +1 -1
  211. package/registry/examples/modal-demo.tsx +67 -9
  212. package/registry/examples/navigation-menu-demo.tsx +1 -1
  213. package/registry/examples/pagination-demo.tsx +10 -7
  214. package/registry/examples/popover-demo.tsx +19 -19
  215. package/registry/examples/progress-demo.tsx +1 -1
  216. package/registry/examples/progress-slider-demo.tsx +1 -1
  217. package/registry/examples/radio-card-demo.tsx +4 -4
  218. package/registry/examples/radio-group-demo.tsx +2 -2
  219. package/registry/examples/resizable-demo.tsx +1 -1
  220. package/registry/examples/results-toolbar-demo.tsx +44 -0
  221. package/registry/examples/scroll-area-demo.tsx +3 -3
  222. package/registry/examples/segmented-control-demo.tsx +39 -0
  223. package/registry/examples/select-demo.tsx +1 -1
  224. package/registry/examples/sidebar-demo.tsx +5 -3
  225. package/registry/examples/slider-demo.tsx +3 -3
  226. package/registry/examples/social-button-demo.tsx +18 -8
  227. package/registry/examples/spinner-demo.tsx +13 -13
  228. package/registry/examples/tabs-demo.tsx +1 -1
  229. package/registry/examples/tag-demo.tsx +1 -1
  230. package/registry/examples/textarea-demo.tsx +4 -4
  231. package/registry/examples/toast-demo.tsx +1 -1
  232. package/registry/examples/toggle-demo.tsx +6 -6
  233. package/registry/examples/tooltip-demo.tsx +4 -4
  234. package/registry/guidance/USAGE.md +27 -0
  235. package/registry/hooks/use-direction.ts +193 -13
  236. package/registry/index.json +5668 -375
  237. package/registry/styles/globals.css +2404 -3999
  238. package/registry.json +156 -149
  239. package/schema/config.schema.json +11 -8
  240. package/schema/registry.schema.json +150 -45
  241. package/schema/tokens.schema.json +134 -34
  242. package/src/cli/command-line.js +194 -0
  243. package/src/cli/config-editors.js +9 -0
  244. package/src/cli/doctor.js +399 -0
  245. package/src/cli/file-transaction.js +295 -0
  246. package/src/cli/global-css.js +153 -0
  247. package/src/cli/index.js +567 -1613
  248. package/src/cli/install-plan.js +592 -0
  249. package/src/cli/install-receipt.js +171 -0
  250. package/src/cli/jsonc.js +203 -0
  251. package/src/cli/package-install-state.js +254 -0
  252. package/src/cli/package-manager.js +238 -0
  253. package/src/cli/package-plan.js +185 -0
  254. package/src/cli/package-version.js +97 -0
  255. package/src/cli/registry-query.js +207 -0
  256. package/src/cli/reporting.js +55 -0
  257. package/src/cli/schema-validation.js +19 -0
  258. package/src/cli/source-scanner.js +686 -0
  259. package/src/cli/vite-config.js +478 -0
  260. package/tokens/banhaten.tokens.json +4444 -331
  261. package/docs/design-system/components/command-bar.md +0 -57
  262. package/registry/components/expanded/BannerBoard.tsx +0 -225
  263. package/registry/components/expanded/CatalogTag.tsx +0 -85
  264. package/registry/components/expanded/CommandBar.tsx +0 -386
  265. package/registry/components/expanded/IconExplorer.tsx +0 -612
  266. package/registry/components/expanded/TimelineShowcase.tsx +0 -158
  267. package/registry/components/expanded/commandBar.css +0 -470
  268. package/registry/components/expanded/iconExplorer.css +0 -764
  269. package/registry/components/expanded/iconPacks.ts +0 -866
  270. package/registry/components/expanded/tag.css +0 -148
  271. package/registry/examples/expanded/icons-demo.tsx +0 -5
  272. package/tokens/Color mode.zip +0 -0
  273. package/tokens/Numbers.zip +0 -0
  274. package/tokens/Radius.zip +0 -0
  275. package/tokens/Theme.zip +0 -0
@@ -1,764 +0,0 @@
1
- .icons-page {
2
- --icons-bg: var(--bh-bg-grouped);
3
- --icons-surface: var(--bh-bg-raised);
4
- --icons-surface-soft: var(--bh-bg-subtle);
5
- --icons-text: var(--bh-content-default);
6
- --icons-muted: var(--bh-content-muted);
7
- --icons-border: var(--bh-border-subtle);
8
- --icons-border-strong: var(--bh-border-strong);
9
- --icons-brand: var(--bh-interactive-brand-default);
10
- --icons-brand-dark: var(--bh-content-brand-strong);
11
- --icons-brand-soft: var(--bh-bg-brand-soft);
12
- --icons-warm: var(--bh-content-warning-default);
13
- --icons-warm-soft: var(--bh-bg-warning-subtle);
14
- --icons-danger: var(--bh-content-danger-default);
15
- --icons-radius: var(--bh-radius-lg-8);
16
- --icons-shadow: var(--shadow-component-default);
17
-
18
- min-height: 100vh;
19
- display: grid;
20
- grid-template-columns: var(--bh-icon-explorer-nav-column) minmax(0, 1fr);
21
- background: var(--icons-bg);
22
- color: var(--icons-text);
23
- font-family: var(--bh-font-family);
24
- letter-spacing: 0;
25
- }
26
-
27
- .icons-page *,
28
- .icons-page *::before,
29
- .icons-page *::after {
30
- box-sizing: border-box;
31
- }
32
-
33
- .icons-page button,
34
- .icons-page input,
35
- .icons-page select {
36
- font: inherit;
37
- }
38
-
39
- .icons-page button {
40
- cursor: pointer;
41
- }
42
-
43
- .icons-page button:disabled {
44
- cursor: wait;
45
- opacity: var(--bh-opacity-subtle);
46
- }
47
-
48
- .icons-page h1,
49
- .icons-page h2,
50
- .icons-page h3,
51
- .icons-page p {
52
- margin: 0;
53
- }
54
-
55
- .icons-page iconify-icon {
56
- display: inline-block;
57
- color: currentColor;
58
- vertical-align: -0.14em;
59
- }
60
-
61
- .icons-sidebar {
62
- height: 100vh;
63
- position: sticky;
64
- top: 0;
65
- overflow: auto;
66
- border-right: var(--bh-space-xxxs-1) solid var(--icons-border);
67
- background: var(--icons-surface);
68
- padding: calc(var(--bh-space-4xl-20) + var(--bh-space-xxs-2)) calc(var(--bh-space-xl-12) + var(--bh-space-sm-6)) calc(var(--bh-space-5xl-24) + var(--bh-space-xs-4));
69
- }
70
-
71
- .icons-sidebar__header {
72
- display: flex;
73
- align-items: center;
74
- gap: var(--bh-space-lg-10);
75
- margin-bottom: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
76
- }
77
-
78
- .icons-sidebar__header h1 {
79
- font-size: var(--bh-text-heading-xs-semibold-font-size);
80
- line-height: 1.2;
81
- font-weight: var(--bh-font-weight-bold);
82
- }
83
-
84
- .icons-sidebar__header p,
85
- .icons-topbar p,
86
- .icons-panel__header span,
87
- .icons-pack__copy span,
88
- .icons-compare-card p,
89
- .icons-compare-card > div:first-child span {
90
- color: var(--icons-muted);
91
- font-size: var(--bh-text-body-2xs-regular-font-size);
92
- line-height: 1.35;
93
- }
94
-
95
- .icons-mark {
96
- width: calc(var(--bh-space-6xl-32) + var(--bh-space-xxs-2));
97
- height: calc(var(--bh-space-6xl-32) + var(--bh-space-xxs-2));
98
- border-radius: var(--icons-radius);
99
- display: grid;
100
- place-items: center;
101
- color: var(--bh-content-on-brand);
102
- background: var(--icons-text);
103
- }
104
-
105
- .icons-sidebar__tools {
106
- display: grid;
107
- gap: var(--bh-space-lg-10);
108
- margin: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6)) 0;
109
- }
110
-
111
- .icons-input,
112
- .icons-select {
113
- width: 100%;
114
- height: calc(var(--bh-space-6xl-32) + var(--bh-space-sm-6));
115
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
116
- border-radius: var(--icons-radius);
117
- background: var(--bh-bg-raised);
118
- color: var(--icons-text);
119
- padding: 0 var(--bh-space-xl-12);
120
- outline: none;
121
- }
122
-
123
- .icons-input:focus,
124
- .icons-select:focus {
125
- border-color: var(--icons-brand);
126
- box-shadow: var(--shadow-button-focus);
127
- }
128
-
129
- .icons-pack-list {
130
- display: grid;
131
- gap: var(--bh-space-md-8);
132
- }
133
-
134
- .icons-pack {
135
- width: 100%;
136
- display: grid;
137
- grid-template-columns: var(--bh-icon-explorer-pack-column) minmax(0, 1fr);
138
- gap: var(--bh-space-lg-10);
139
- align-items: center;
140
- border: var(--bh-space-xxxs-1) solid transparent;
141
- border-radius: var(--icons-radius);
142
- background: transparent;
143
- color: var(--icons-text);
144
- padding: calc(var(--bh-space-md-8) + var(--bh-space-xxxs-1));
145
- text-align: left;
146
- }
147
-
148
- .icons-pack:hover {
149
- background: var(--bh-bg-muted);
150
- }
151
-
152
- .icons-pack.is-active {
153
- background: var(--icons-brand-soft);
154
- border-color: var(--bh-border-brand-subtle);
155
- }
156
-
157
- .icons-pack__glyph {
158
- width: calc(var(--bh-space-7xl-40) + var(--bh-space-xxs-2));
159
- height: calc(var(--bh-space-7xl-40) + var(--bh-space-xxs-2));
160
- border-radius: var(--icons-radius);
161
- display: grid;
162
- place-items: center;
163
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
164
- background: var(--bh-bg-raised);
165
- color: var(--icons-brand-dark);
166
- }
167
-
168
- .icons-pack__copy {
169
- min-width: 0;
170
- display: grid;
171
- gap: calc(var(--bh-space-xxs-2) + var(--bh-space-xxxs-1));
172
- }
173
-
174
- .icons-pack__copy strong {
175
- min-width: 0;
176
- font-size: var(--bh-text-body-xs-regular-font-size);
177
- line-height: 1.25;
178
- overflow: hidden;
179
- text-overflow: ellipsis;
180
- white-space: nowrap;
181
- }
182
-
183
- .icons-main {
184
- min-width: 0;
185
- }
186
-
187
- .icons-topbar {
188
- position: sticky;
189
- top: 0;
190
- z-index: 5;
191
- min-height: var(--bh-icon-explorer-topbar-min-height);
192
- display: grid;
193
- grid-template-columns: minmax(0, 1fr) auto;
194
- gap: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
195
- align-items: center;
196
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6)) calc(var(--bh-space-5xl-24) + var(--bh-space-xxs-2));
197
- border-bottom: var(--bh-space-xxxs-1) solid var(--icons-border);
198
- background: var(--bh-icon-explorer-topbar-bg);
199
- backdrop-filter: blur(var(--bh-space-2xl-14));
200
- }
201
-
202
- .icons-topbar h2 {
203
- font-size: var(--bh-text-heading-md-semibold-font-size);
204
- line-height: 1.15;
205
- font-weight: var(--bh-font-weight-bold);
206
- }
207
-
208
- .icons-topbar code {
209
- color: var(--icons-brand-dark);
210
- font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
211
- }
212
-
213
- .icons-tabs {
214
- display: inline-flex;
215
- align-items: center;
216
- gap: var(--bh-space-xs-4);
217
- padding: var(--bh-space-xs-4);
218
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
219
- border-radius: var(--icons-radius);
220
- background: var(--bh-bg-raised);
221
- }
222
-
223
- .icons-tab {
224
- min-height: var(--bh-space-6xl-32);
225
- border: 0;
226
- border-radius: var(--bh-radius-md-6);
227
- padding: 0 calc(var(--bh-space-lg-10) + var(--bh-space-xxxs-1));
228
- background: transparent;
229
- color: var(--icons-muted);
230
- font-size: var(--bh-text-body-xs-regular-font-size);
231
- font-weight: var(--bh-font-weight-bold);
232
- }
233
-
234
- .icons-tab.is-active {
235
- background: var(--icons-text);
236
- color: var(--bh-content-on-brand);
237
- }
238
-
239
- .icons-content {
240
- max-width: var(--bh-icon-explorer-canvas-max-width);
241
- margin: 0 auto;
242
- padding: var(--bh-space-5xl-24) calc(var(--bh-space-5xl-24) + var(--bh-space-xxs-2)) var(--bh-space-8xl-48);
243
- display: grid;
244
- gap: calc(var(--bh-space-4xl-20) + var(--bh-space-xxs-2));
245
- }
246
-
247
- .icons-panel,
248
- .icons-compare-card {
249
- background: var(--icons-surface);
250
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
251
- border-radius: var(--icons-radius);
252
- box-shadow: var(--icons-shadow);
253
- }
254
-
255
- .icons-summary-grid {
256
- display: grid;
257
- grid-template-columns: minmax(0, 1.25fr) minmax(var(--bh-icon-explorer-preview-column), 0.75fr);
258
- gap: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
259
- }
260
-
261
- .icons-hero-panel {
262
- display: grid;
263
- grid-template-columns: auto minmax(0, 1fr);
264
- gap: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
265
- align-items: center;
266
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
267
- }
268
-
269
- .icons-hero-glyph {
270
- width: var(--bh-icon-explorer-detail-preview-size);
271
- height: var(--bh-icon-explorer-detail-preview-size);
272
- border-radius: var(--icons-radius);
273
- display: grid;
274
- place-items: center;
275
- color: var(--icons-brand-dark);
276
- background: var(--icons-brand-soft);
277
- border: var(--bh-space-xxxs-1) solid var(--bh-border-brand-subtle);
278
- }
279
-
280
- .icons-hero-copy {
281
- min-width: 0;
282
- display: grid;
283
- gap: var(--bh-space-lg-10);
284
- }
285
-
286
- .icons-hero-copy h3 {
287
- font-size: var(--bh-text-heading-lg-semibold-font-size);
288
- line-height: 1.05;
289
- font-weight: var(--bh-font-weight-bold);
290
- }
291
-
292
- .icons-hero-copy p {
293
- max-width: var(--bh-icon-explorer-detail-max-width);
294
- color: var(--icons-muted);
295
- font-size: var(--bh-text-body-sm-regular-font-size);
296
- line-height: 1.55;
297
- }
298
-
299
- .icons-tags,
300
- .icons-links,
301
- .icons-variants,
302
- .icons-button-row {
303
- display: flex;
304
- flex-wrap: wrap;
305
- gap: var(--bh-space-md-8);
306
- }
307
-
308
- .icons-tag {
309
- min-height: calc(var(--bh-space-5xl-24) + var(--bh-space-xxs-2));
310
- border-radius: var(--bh-radius-full);
311
- display: inline-flex;
312
- align-items: center;
313
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
314
- background: var(--bh-bg-subtle);
315
- color: var(--icons-text);
316
- padding: 0 calc(var(--bh-space-md-8) + var(--bh-space-xxxs-1));
317
- font-size: var(--bh-text-body-2xs-regular-font-size);
318
- font-weight: var(--bh-font-weight-bold);
319
- }
320
-
321
- .icons-tag.is-warm {
322
- background: var(--icons-warm-soft);
323
- border-color: var(--bh-border-warning-subtle);
324
- color: var(--bh-content-warning-strong);
325
- }
326
-
327
- .icons-links a {
328
- color: var(--icons-brand-dark);
329
- text-decoration: none;
330
- font-size: var(--bh-text-body-2xs-regular-font-size);
331
- font-weight: var(--bh-font-weight-bold);
332
- }
333
-
334
- .icons-links a:hover {
335
- text-decoration: underline;
336
- }
337
-
338
- .icons-panel__header {
339
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6)) calc(var(--bh-space-xl-12) + var(--bh-space-sm-6)) 0;
340
- display: flex;
341
- justify-content: space-between;
342
- align-items: flex-start;
343
- gap: var(--bh-space-xl-12);
344
- }
345
-
346
- .icons-panel__header h3 {
347
- font-size: var(--bh-text-body-md-font-size);
348
- line-height: 1.2;
349
- font-weight: var(--bh-font-weight-bold);
350
- }
351
-
352
- .icons-score-list,
353
- .icons-controls {
354
- display: grid;
355
- gap: var(--bh-space-xl-12);
356
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
357
- }
358
-
359
- .icons-score {
360
- display: grid;
361
- gap: var(--bh-space-sm-6);
362
- }
363
-
364
- .icons-score span {
365
- display: flex;
366
- justify-content: space-between;
367
- gap: var(--bh-space-xl-12);
368
- color: var(--icons-text);
369
- font-size: var(--bh-text-body-2xs-regular-font-size);
370
- font-style: normal;
371
- }
372
-
373
- .icons-score em {
374
- color: var(--icons-muted);
375
- font-style: normal;
376
- }
377
-
378
- .icons-score div {
379
- height: var(--bh-space-md-8);
380
- overflow: hidden;
381
- border-radius: var(--bh-radius-full);
382
- background: var(--bh-bg-muted);
383
- }
384
-
385
- .icons-score i {
386
- display: block;
387
- height: 100%;
388
- border-radius: inherit;
389
- background: var(--icons-brand);
390
- }
391
-
392
- .icons-variants {
393
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
394
- }
395
-
396
- .icons-variant {
397
- min-height: var(--bh-space-6xl-32);
398
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
399
- border-radius: var(--bh-radius-full);
400
- background: var(--bh-bg-raised);
401
- color: var(--icons-text);
402
- padding: 0 var(--bh-space-xl-12);
403
- font-size: var(--bh-text-body-2xs-regular-font-size);
404
- font-weight: var(--bh-font-weight-bold);
405
- }
406
-
407
- .icons-variant.is-active {
408
- border-color: var(--icons-brand);
409
- background: var(--icons-brand);
410
- color: var(--bh-content-on-brand);
411
- }
412
-
413
- .icons-sample-grid {
414
- display: grid;
415
- grid-template-columns: repeat(6, minmax(var(--bh-icon-explorer-grid-column-min), 1fr));
416
- gap: var(--bh-space-lg-10);
417
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
418
- }
419
-
420
- .icons-sample {
421
- min-height: calc(var(--bh-space-9xl-64) + var(--bh-space-xl-12));
422
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
423
- border-radius: var(--icons-radius);
424
- background: var(--icons-surface-soft);
425
- color: var(--icons-text);
426
- display: grid;
427
- place-items: center;
428
- gap: var(--bh-space-md-8);
429
- padding: var(--bh-space-lg-10) var(--bh-space-sm-6);
430
- }
431
-
432
- .icons-sample span {
433
- max-width: 100%;
434
- color: var(--icons-muted);
435
- font-size: var(--bh-text-body-3xs-regular-font-size);
436
- line-height: 1.2;
437
- overflow: hidden;
438
- text-overflow: ellipsis;
439
- white-space: nowrap;
440
- }
441
-
442
- .icons-component-grid {
443
- display: grid;
444
- grid-template-columns: minmax(var(--bh-icon-explorer-preview-column), 0.9fr) minmax(0, 1.1fr);
445
- gap: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
446
- }
447
-
448
- .icons-controls label {
449
- min-height: var(--bh-space-8xl-48);
450
- display: flex;
451
- align-items: center;
452
- justify-content: space-between;
453
- gap: var(--bh-space-xl-12);
454
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
455
- border-radius: var(--icons-radius);
456
- background: var(--icons-surface-soft);
457
- padding: var(--bh-space-lg-10) var(--bh-space-xl-12);
458
- }
459
-
460
- .icons-controls span {
461
- color: var(--icons-text);
462
- font-size: var(--bh-text-body-xs-regular-font-size);
463
- font-weight: var(--bh-font-weight-bold);
464
- }
465
-
466
- .icons-controls input[type="range"] {
467
- width: var(--bh-icon-explorer-swatch-width);
468
- accent-color: var(--icons-brand);
469
- }
470
-
471
- .icons-preview {
472
- display: grid;
473
- gap: var(--bh-space-2xl-14);
474
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
475
- }
476
-
477
- .preview-button {
478
- min-height: var(--bh-space-7xl-40);
479
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
480
- border-radius: var(--icons-radius);
481
- display: inline-flex;
482
- align-items: center;
483
- justify-content: center;
484
- gap: var(--bh-space-md-8);
485
- background: var(--bh-bg-raised);
486
- color: var(--icons-text);
487
- padding: 0 calc(var(--bh-space-xl-12) + var(--bh-space-xxxs-1));
488
- font-size: var(--bh-text-body-xs-regular-font-size);
489
- font-weight: var(--bh-font-weight-bold);
490
- }
491
-
492
- .preview-button.is-primary {
493
- border-color: var(--icons-text);
494
- background: var(--icons-text);
495
- color: var(--bh-content-on-brand);
496
- }
497
-
498
- .preview-button.is-danger {
499
- border-color: var(--bh-border-danger-subtle);
500
- background: var(--bh-bg-danger-subtle);
501
- color: var(--icons-danger);
502
- }
503
-
504
- .preview-button.is-icon-only {
505
- width: var(--bh-space-7xl-40);
506
- padding: 0;
507
- }
508
-
509
- .icons-field-row {
510
- display: grid;
511
- grid-template-columns: minmax(0, 1fr) var(--bh-icon-explorer-drawer-column);
512
- gap: var(--bh-space-lg-10);
513
- }
514
-
515
- .icons-field {
516
- height: calc(var(--bh-space-7xl-40) + var(--bh-space-xxs-2));
517
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
518
- border-radius: var(--icons-radius);
519
- display: flex;
520
- align-items: center;
521
- gap: var(--bh-space-md-8);
522
- background: var(--bh-bg-raised);
523
- color: var(--icons-muted);
524
- padding: 0 var(--bh-space-xl-12);
525
- font-size: var(--bh-text-body-xs-regular-font-size);
526
- }
527
-
528
- .icons-field.is-select {
529
- justify-content: space-between;
530
- }
531
-
532
- .icons-field.is-select span {
533
- display: inline-flex;
534
- align-items: center;
535
- gap: var(--bh-space-md-8);
536
- min-width: 0;
537
- }
538
-
539
- .icons-menu-preview,
540
- .icons-table-preview,
541
- .icons-empty-preview {
542
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
543
- border-radius: var(--icons-radius);
544
- background: var(--bh-bg-raised);
545
- overflow: hidden;
546
- }
547
-
548
- .icons-menu-row,
549
- .icons-table-row {
550
- display: grid;
551
- align-items: center;
552
- gap: var(--bh-space-lg-10);
553
- min-height: calc(var(--bh-space-7xl-40) + var(--bh-space-xxs-2));
554
- border-bottom: var(--bh-space-xxxs-1) solid var(--icons-border);
555
- color: var(--icons-text);
556
- padding: 0 var(--bh-space-xl-12);
557
- font-size: var(--bh-text-body-xs-regular-font-size);
558
- }
559
-
560
- .icons-menu-row:last-child,
561
- .icons-table-row:last-child {
562
- border-bottom: 0;
563
- }
564
-
565
- .icons-menu-row {
566
- grid-template-columns: var(--bh-icon-explorer-row-icon-column) minmax(0, 1fr) auto;
567
- }
568
-
569
- .icons-menu-row em {
570
- min-height: calc(var(--bh-space-4xl-20) + var(--bh-space-xxs-2));
571
- border-radius: var(--bh-radius-full);
572
- display: inline-flex;
573
- align-items: center;
574
- gap: var(--bh-space-xs-4);
575
- background: var(--bh-bg-success-subtle);
576
- color: var(--bh-content-success-strong);
577
- padding: 0 var(--bh-space-md-8);
578
- font-size: var(--bh-text-body-3xs-regular-font-size);
579
- font-style: normal;
580
- font-weight: var(--bh-font-weight-bold);
581
- }
582
-
583
- .icons-menu-row small {
584
- color: var(--icons-muted);
585
- font-size: var(--bh-text-body-2xs-regular-font-size);
586
- }
587
-
588
- .icons-table-row {
589
- grid-template-columns: var(--bh-icon-explorer-list-column) 1.1fr 0.8fr 0.8fr auto;
590
- }
591
-
592
- .icons-empty-preview {
593
- min-height: var(--bh-icon-explorer-selected-min-height);
594
- display: grid;
595
- place-items: center;
596
- padding: var(--bh-space-5xl-24);
597
- text-align: center;
598
- }
599
-
600
- .icons-empty-preview > div {
601
- max-width: var(--bh-icon-explorer-request-max-width);
602
- display: grid;
603
- place-items: center;
604
- gap: var(--bh-space-lg-10);
605
- }
606
-
607
- .icons-empty-preview span {
608
- width: calc(var(--bh-space-8xl-48) + var(--bh-space-sm-6));
609
- height: calc(var(--bh-space-8xl-48) + var(--bh-space-sm-6));
610
- display: grid;
611
- place-items: center;
612
- border-radius: var(--icons-radius);
613
- background: var(--bh-bg-brand-subtle);
614
- color: var(--icons-brand-dark);
615
- }
616
-
617
- .icons-empty-preview h3 {
618
- font-size: var(--bh-text-body-md-font-size);
619
- line-height: 1.2;
620
- }
621
-
622
- .icons-empty-preview p {
623
- color: var(--icons-muted);
624
- font-size: var(--bh-text-body-xs-regular-font-size);
625
- line-height: 1.45;
626
- }
627
-
628
- .icons-catalog-tools {
629
- display: grid;
630
- grid-template-columns: minmax(0, 1fr) var(--bh-icon-explorer-group-column) auto;
631
- gap: var(--bh-space-lg-10);
632
- align-items: center;
633
- padding: calc(var(--bh-space-xl-12) + var(--bh-space-sm-6));
634
- }
635
-
636
- .icons-error {
637
- border: var(--bh-space-xxxs-1) solid var(--bh-border-danger-subtle);
638
- border-radius: var(--icons-radius);
639
- background: var(--bh-bg-danger-subtle);
640
- color: var(--icons-danger);
641
- padding: var(--bh-space-2xl-14);
642
- font-size: var(--bh-text-body-xs-regular-font-size);
643
- }
644
-
645
- .icons-catalog-grid {
646
- display: grid;
647
- grid-template-columns: repeat(auto-fill, minmax(var(--bh-icon-explorer-grid-card-min), 1fr));
648
- gap: var(--bh-space-lg-10);
649
- }
650
-
651
- .icons-catalog-card {
652
- min-height: var(--bh-icon-explorer-grid-card-min-height);
653
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
654
- border-radius: var(--icons-radius);
655
- display: grid;
656
- grid-template-rows: 1fr auto;
657
- place-items: center;
658
- gap: var(--bh-space-md-8);
659
- background: var(--bh-bg-raised);
660
- color: var(--icons-text);
661
- padding: var(--bh-space-xl-12) var(--bh-space-md-8) var(--bh-space-lg-10);
662
- text-align: center;
663
- }
664
-
665
- .icons-catalog-card span {
666
- max-width: 100%;
667
- color: var(--icons-muted);
668
- font-size: var(--bh-text-body-3xs-regular-font-size);
669
- line-height: 1.25;
670
- overflow: hidden;
671
- text-overflow: ellipsis;
672
- white-space: nowrap;
673
- }
674
-
675
- .icons-load-more {
676
- justify-self: center;
677
- }
678
-
679
- .icons-compare-grid {
680
- display: grid;
681
- grid-template-columns: repeat(auto-fill, minmax(var(--bh-icon-explorer-family-card-min), 1fr));
682
- gap: var(--bh-space-xl-12);
683
- }
684
-
685
- .icons-compare-card {
686
- display: grid;
687
- gap: var(--bh-space-xl-12);
688
- padding: var(--bh-space-2xl-14);
689
- }
690
-
691
- .icons-compare-card > div:first-child {
692
- display: flex;
693
- align-items: center;
694
- justify-content: space-between;
695
- gap: var(--bh-space-lg-10);
696
- }
697
-
698
- .icons-compare-card strong {
699
- font-size: var(--bh-text-body-xs-regular-font-size);
700
- }
701
-
702
- .icons-compare-icons {
703
- display: grid;
704
- grid-template-columns: repeat(5, 1fr);
705
- gap: var(--bh-space-md-8);
706
- }
707
-
708
- .icons-compare-icons span {
709
- width: calc(var(--bh-space-6xl-32) + var(--bh-space-xs-4));
710
- height: calc(var(--bh-space-6xl-32) + var(--bh-space-xs-4));
711
- border: var(--bh-space-xxxs-1) solid var(--icons-border);
712
- border-radius: var(--bh-radius-md-6);
713
- display: grid;
714
- place-items: center;
715
- background: var(--icons-surface-soft);
716
- color: var(--icons-text);
717
- }
718
-
719
- /* Approved exception: media query breakpoints stay literal because CSS vars are not reliable in query conditions. */
720
- @media (max-width: 980px) {
721
- .icons-page {
722
- grid-template-columns: 1fr;
723
- }
724
-
725
- .icons-sidebar {
726
- position: relative;
727
- height: auto;
728
- border-right: 0;
729
- border-bottom: var(--bh-space-xxxs-1) solid var(--icons-border);
730
- }
731
-
732
- .icons-pack-list {
733
- grid-template-columns: repeat(auto-fill, minmax(var(--bh-icon-explorer-mobile-card-min), 1fr));
734
- }
735
-
736
- .icons-topbar,
737
- .icons-summary-grid,
738
- .icons-component-grid,
739
- .icons-field-row,
740
- .icons-catalog-tools {
741
- grid-template-columns: 1fr;
742
- }
743
- }
744
-
745
- @media (max-width: 620px) {
746
- .icons-topbar,
747
- .icons-content,
748
- .icons-sidebar {
749
- padding-left: var(--bh-space-3xl-16);
750
- padding-right: var(--bh-space-3xl-16);
751
- }
752
-
753
- .icons-sample-grid {
754
- grid-template-columns: repeat(3, 1fr);
755
- }
756
-
757
- .icons-table-row {
758
- grid-template-columns: var(--bh-icon-explorer-list-column) minmax(0, 1fr) auto;
759
- }
760
-
761
- .icons-table-row > span {
762
- display: none;
763
- }
764
- }