@hraness/design-kit 0.31.1

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 (345) hide show
  1. package/ARTICLE_COPY.md +208 -0
  2. package/HERO_FIELDS.md +55 -0
  3. package/ICONS.md +56 -0
  4. package/LANTERN_MATERIAL.md +60 -0
  5. package/LICENSE +21 -0
  6. package/MARKETING_COPY.md +49 -0
  7. package/MARKETING_PRESET.md +108 -0
  8. package/PALETTES.md +90 -0
  9. package/PAPER_THEME.md +128 -0
  10. package/README.md +745 -0
  11. package/STATUS_PAGES.md +67 -0
  12. package/STYLE.md +245 -0
  13. package/WRITING.md +72 -0
  14. package/dist/browser/index.js +2345 -0
  15. package/dist/chunk-44djxk16.js +6872 -0
  16. package/dist/chunk-5gtx3pza.js +9 -0
  17. package/dist/chunk-77391vmq.js +454 -0
  18. package/dist/chunk-7b1586eb.js +1209 -0
  19. package/dist/chunk-8834fh4n.js +6 -0
  20. package/dist/chunk-9t8xyqte.js +870 -0
  21. package/dist/chunk-cejpzyfh.js +446 -0
  22. package/dist/chunk-eh71jz57.js +429 -0
  23. package/dist/chunk-evb02bc1.js +516 -0
  24. package/dist/chunk-h4k7yv6x.js +368 -0
  25. package/dist/chunk-he8eznb1.js +760 -0
  26. package/dist/chunk-mr1vdcjq.js +404 -0
  27. package/dist/chunk-wzvdn8ey.js +116 -0
  28. package/dist/fonts/nebula-sans/social-fonts.generated.js +53 -0
  29. package/dist/icons.js +48 -0
  30. package/dist/index.js +237 -0
  31. package/dist/launch.js +41 -0
  32. package/dist/mockups/client.js +422 -0
  33. package/dist/mockups/index.js +1850 -0
  34. package/dist/portfolio.js +1549 -0
  35. package/dist/provider-marks.js +19 -0
  36. package/dist/react/charts.js +11 -0
  37. package/dist/react/hero-backdrop.js +8 -0
  38. package/dist/react/index.js +7252 -0
  39. package/dist/react/platform-install.js +10 -0
  40. package/dist/react/server.js +137 -0
  41. package/dist/stylex-manifest.json +1 -0
  42. package/dist/stylex.css +5392 -0
  43. package/dist/syntax-highlighting.js +15 -0
  44. package/dist/testing.js +250 -0
  45. package/package.json +377 -0
  46. package/portfolio-inventory.json +31 -0
  47. package/scripts/check-lantern-material-snapshot.d.mts +26 -0
  48. package/scripts/check-lantern-material-snapshot.mjs +126 -0
  49. package/scripts/check-marketing-snapshot.d.mts +12 -0
  50. package/scripts/check-marketing-snapshot.mjs +58 -0
  51. package/scripts/lantern-material-snapshot.ts +101 -0
  52. package/scripts/marketing-textures.ts +48 -0
  53. package/scripts/paper-theme-snapshot.ts +97 -0
  54. package/scripts/product-marketing-snapshot.ts +149 -0
  55. package/src/appearance-menu.css +266 -0
  56. package/src/appearance.ts +32 -0
  57. package/src/article-html.ts +269 -0
  58. package/src/article.ts +686 -0
  59. package/src/browser/appearance-menu.ts +604 -0
  60. package/src/browser/artifact-share.ts +164 -0
  61. package/src/browser/design-palette.ts +197 -0
  62. package/src/browser/foil.ts +124 -0
  63. package/src/browser/hero-light.ts +11 -0
  64. package/src/browser/index.ts +29 -0
  65. package/src/browser/status-field.ts +432 -0
  66. package/src/browser/status-page.ts +100 -0
  67. package/src/browser/sticky-offset.ts +82 -0
  68. package/src/browser/theme-color-sync.ts +213 -0
  69. package/src/charts.css +7 -0
  70. package/src/compiler-components.css +34 -0
  71. package/src/compiler-foundation.css +18 -0
  72. package/src/compiler-palettes.css +7 -0
  73. package/src/compiler-tokens.css +342 -0
  74. package/src/components.css +3 -0
  75. package/src/design-gallery.css +431 -0
  76. package/src/effects.css +14 -0
  77. package/src/fonts/geist-mono/GeistMono[wght].woff2 +0 -0
  78. package/src/fonts/geist-mono/OFL.txt +93 -0
  79. package/src/fonts/geist-mono/PROVENANCE.md +12 -0
  80. package/src/fonts/instrument-serif/OFL.txt +93 -0
  81. package/src/fonts/instrument-serif/UPSTREAM.md +14 -0
  82. package/src/fonts/instrument-serif/instrument-serif-latin-400.woff2 +0 -0
  83. package/src/fonts/nebula-sans/LICENSE.txt +96 -0
  84. package/src/fonts/nebula-sans/NebulaSans-Black.woff2 +0 -0
  85. package/src/fonts/nebula-sans/NebulaSans-BlackItalic.woff2 +0 -0
  86. package/src/fonts/nebula-sans/NebulaSans-Bold.otf +0 -0
  87. package/src/fonts/nebula-sans/NebulaSans-Bold.woff2 +0 -0
  88. package/src/fonts/nebula-sans/NebulaSans-BoldItalic.woff2 +0 -0
  89. package/src/fonts/nebula-sans/NebulaSans-Book.otf +0 -0
  90. package/src/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
  91. package/src/fonts/nebula-sans/NebulaSans-BookItalic.woff2 +0 -0
  92. package/src/fonts/nebula-sans/NebulaSans-Light.woff2 +0 -0
  93. package/src/fonts/nebula-sans/NebulaSans-LightItalic.woff2 +0 -0
  94. package/src/fonts/nebula-sans/NebulaSans-Medium.woff2 +0 -0
  95. package/src/fonts/nebula-sans/NebulaSans-MediumItalic.woff2 +0 -0
  96. package/src/fonts/nebula-sans/NebulaSans-Semibold.woff2 +0 -0
  97. package/src/fonts/nebula-sans/NebulaSans-SemiboldItalic.woff2 +0 -0
  98. package/src/fonts/nebula-sans/PROVENANCE.md +14 -0
  99. package/src/fonts/nebula-sans/social-fonts.generated.ts +3873 -0
  100. package/src/fonts.css +106 -0
  101. package/src/icons/act60/act60.svg +5 -0
  102. package/src/icons/act60/application.svg +9 -0
  103. package/src/icons/act60/chapter-compare.svg +3 -0
  104. package/src/icons/act60/decree-residence.svg +6 -0
  105. package/src/icons/act60/estimate.svg +7 -0
  106. package/src/icons/act60/export-services.svg +4 -0
  107. package/src/icons/act60/investor.svg +13 -0
  108. package/src/icons/act60/presence.svg +7 -0
  109. package/src/icons/aicharts/aicharts.svg +6 -0
  110. package/src/icons/aicharts/cost-compare.svg +4 -0
  111. package/src/icons/aicharts/task-audio.svg +7 -0
  112. package/src/icons/aicharts/task-coding.svg +6 -0
  113. package/src/icons/aicharts/task-images.svg +3 -0
  114. package/src/icons/aicharts/task-reasoning.svg +9 -0
  115. package/src/icons/aicharts/task-research.svg +5 -0
  116. package/src/icons/aicharts/task-video.svg +4 -0
  117. package/src/icons/manifest.json +1371 -0
  118. package/src/icons/platonik/conversation.svg +3 -0
  119. package/src/icons/platonik/creature.svg +7 -0
  120. package/src/icons/platonik/economy.svg +4 -0
  121. package/src/icons/platonik/keep-light.svg +6 -0
  122. package/src/icons/platonik/platonik.svg +7 -0
  123. package/src/icons/platonik/spark-route.svg +15 -0
  124. package/src/icons/receipts/act60-retry.receipt.json +888 -0
  125. package/src/icons/receipts/act60.receipt.json +1366 -0
  126. package/src/icons/receipts/aicharts.receipt.json +1546 -0
  127. package/src/icons/receipts/platonik.receipt.json +1011 -0
  128. package/src/icons/receipts/roughday.receipt.json +770 -0
  129. package/src/icons/receipts/shared.receipt.json +1296 -0
  130. package/src/icons/receipts/slopcamera.receipt.json +1495 -0
  131. package/src/icons/receipts/soundfish-retry.receipt.json +460 -0
  132. package/src/icons/receipts/soundfish.receipt.json +1709 -0
  133. package/src/icons/receipts/sponge.receipt.json +1743 -0
  134. package/src/icons/receipts/stripe-history-retry.receipt.json +145 -0
  135. package/src/icons/receipts/stripe-history.receipt.json +1202 -0
  136. package/src/icons/receipts/wordcell.receipt.json +1924 -0
  137. package/src/icons/roughday/finance.svg +7 -0
  138. package/src/icons/roughday/roughday.svg +6 -0
  139. package/src/icons/roughday/technology.svg +4 -0
  140. package/src/icons/roughday/world.svg +4 -0
  141. package/src/icons/sets/act60.json +63 -0
  142. package/src/icons/sets/aicharts.json +63 -0
  143. package/src/icons/sets/platonik.json +39 -0
  144. package/src/icons/sets/roughday.json +25 -0
  145. package/src/icons/sets/shared.json +12 -0
  146. package/src/icons/sets/slopcamera.json +47 -0
  147. package/src/icons/sets/soundfish.json +43 -0
  148. package/src/icons/sets/sponge.json +51 -0
  149. package/src/icons/sets/stripe-history.json +39 -0
  150. package/src/icons/sets/wordcell.json +51 -0
  151. package/src/icons/shared/agent-skill.svg +4 -0
  152. package/src/icons/shared/cli.svg +5 -0
  153. package/src/icons/shared/privacy.svg +3 -0
  154. package/src/icons/shared/research.svg +7 -0
  155. package/src/icons/shared/sdk.svg +3 -0
  156. package/src/icons/slopcamera/diagram.svg +3 -0
  157. package/src/icons/slopcamera/direct-scene.svg +5 -0
  158. package/src/icons/slopcamera/edit-video.svg +17 -0
  159. package/src/icons/slopcamera/mcp.svg +3 -0
  160. package/src/icons/slopcamera/native-world.svg +3 -0
  161. package/src/icons/slopcamera/slopcamera.svg +11 -0
  162. package/src/icons/soundfish/agent-ui.svg +7 -0
  163. package/src/icons/soundfish/collaborate.svg +5 -0
  164. package/src/icons/soundfish/compose.svg +3 -0
  165. package/src/icons/soundfish/hear.svg +6 -0
  166. package/src/icons/soundfish/human-ui.svg +6 -0
  167. package/src/icons/soundfish/share.svg +3 -0
  168. package/src/icons/soundfish/soundfish.svg +6 -0
  169. package/src/icons/sponge/api.svg +3 -0
  170. package/src/icons/sponge/documents.svg +3 -0
  171. package/src/icons/sponge/library.svg +3 -0
  172. package/src/icons/sponge/one-question.svg +5 -0
  173. package/src/icons/sponge/people-direct.svg +5 -0
  174. package/src/icons/sponge/read.svg +3 -0
  175. package/src/icons/sponge/save.svg +4 -0
  176. package/src/icons/sponge/sponge.svg +7 -0
  177. package/src/icons/stripe-history/company-history.svg +3 -0
  178. package/src/icons/stripe-history/evidence.svg +4 -0
  179. package/src/icons/stripe-history/independence.svg +7 -0
  180. package/src/icons/stripe-history/publications.svg +11 -0
  181. package/src/icons/stripe-history/sources.svg +6 -0
  182. package/src/icons/stripe-history/stripe-history.svg +3 -0
  183. package/src/icons/wordcell/backlinks.svg +6 -0
  184. package/src/icons/wordcell/capture.svg +6 -0
  185. package/src/icons/wordcell/git-provenance.svg +4 -0
  186. package/src/icons/wordcell/kb.svg +4 -0
  187. package/src/icons/wordcell/markdown.svg +4 -0
  188. package/src/icons/wordcell/scopes.svg +3 -0
  189. package/src/icons/wordcell/search.svg +7 -0
  190. package/src/icons.generated.ts +734 -0
  191. package/src/icons.ts +51 -0
  192. package/src/index.ts +275 -0
  193. package/src/lantern-material.css +213 -0
  194. package/src/launch.ts +624 -0
  195. package/src/marketing-assets/UPSTREAM.md +18 -0
  196. package/src/marketing-assets/cells.svg +1 -0
  197. package/src/marketing-assets/grain.svg +1 -0
  198. package/src/marketing-forced-colors.css +12 -0
  199. package/src/mockups/client.tsx +415 -0
  200. package/src/mockups/core.tsx +318 -0
  201. package/src/mockups/frames.tsx +368 -0
  202. package/src/mockups/index.ts +14 -0
  203. package/src/mockups/surfaces.tsx +681 -0
  204. package/src/mockups.css +2607 -0
  205. package/src/palette-appearance.ts +45 -0
  206. package/src/palette-bridge.css +124 -0
  207. package/src/palette-color.ts +41 -0
  208. package/src/palette-system.css +721 -0
  209. package/src/palette-themes.ts +23 -0
  210. package/src/palette-tokens.stylex.ts +519 -0
  211. package/src/palettes.css +3 -0
  212. package/src/palettes.ts +161 -0
  213. package/src/paper-theme.css +244 -0
  214. package/src/plain-publication.css +1241 -0
  215. package/src/plain-site.css +397 -0
  216. package/src/platforms.ts +151 -0
  217. package/src/portfolio.generated.json +1595 -0
  218. package/src/portfolio.generated.ts +1596 -0
  219. package/src/portfolio.ts +226 -0
  220. package/src/product-marketing-foundation.css +433 -0
  221. package/src/product-marketing-preset.css +261 -0
  222. package/src/product-marketing.css +2186 -0
  223. package/src/provider-marks.generated.ts +112 -0
  224. package/src/provider-marks.ts +143 -0
  225. package/src/react/animated-rail-stage.stylex.ts +15 -0
  226. package/src/react/animated-rail-stage.tsx +51 -0
  227. package/src/react/app-shell.stylex.ts +104 -0
  228. package/src/react/app-shell.tsx +121 -0
  229. package/src/react/article.tsx +602 -0
  230. package/src/react/aurora-dots-background.tsx +34 -0
  231. package/src/react/charts.stylex.ts +563 -0
  232. package/src/react/charts.tsx +610 -0
  233. package/src/react/chat.stylex.ts +34 -0
  234. package/src/react/chat.tsx +155 -0
  235. package/src/react/design-gallery.tsx +943 -0
  236. package/src/react/design-palette.stylex.ts +124 -0
  237. package/src/react/design-palette.tsx +196 -0
  238. package/src/react/design-theme-context.tsx +41 -0
  239. package/src/react/effects.stylex.ts +325 -0
  240. package/src/react/fader.stylex.ts +71 -0
  241. package/src/react/fader.tsx +151 -0
  242. package/src/react/foil-card-math.ts +100 -0
  243. package/src/react/foil-card-surface.stylex.ts +326 -0
  244. package/src/react/foil-card-surface.tsx +742 -0
  245. package/src/react/foil-mark.tsx +35 -0
  246. package/src/react/foil.stylex.ts +163 -0
  247. package/src/react/haptics.ts +228 -0
  248. package/src/react/hero-backdrop.tsx +22 -0
  249. package/src/react/index.ts +38 -0
  250. package/src/react/keyboard-shortcuts.ts +228 -0
  251. package/src/react/lantern-material-gallery.tsx +166 -0
  252. package/src/react/lantern-material.stylex.ts +39 -0
  253. package/src/react/launch-beats.tsx +73 -0
  254. package/src/react/navigation-rail.stylex.ts +130 -0
  255. package/src/react/navigation-rail.tsx +228 -0
  256. package/src/react/particle-halo.tsx +115 -0
  257. package/src/react/phaser-dots.tsx +501 -0
  258. package/src/react/platform-icons.tsx +94 -0
  259. package/src/react/platform-install.stylex.ts +385 -0
  260. package/src/react/platform-install.tsx +389 -0
  261. package/src/react/playback-transport.stylex.ts +14 -0
  262. package/src/react/playback-transport.tsx +112 -0
  263. package/src/react/procedural-backdrop.tsx +192 -0
  264. package/src/react/procedural-recipe.ts +323 -0
  265. package/src/react/product-marketing.stylex.ts +4469 -0
  266. package/src/react/product-marketing.tsx +1611 -0
  267. package/src/react/production-data-preview-notice.stylex.ts +40 -0
  268. package/src/react/production-data-preview-notice.tsx +34 -0
  269. package/src/react/provider-mark.stylex.ts +132 -0
  270. package/src/react/provider-mark.tsx +120 -0
  271. package/src/react/relative-time.tsx +117 -0
  272. package/src/react/route-state.stylex.ts +39 -0
  273. package/src/react/route-state.tsx +350 -0
  274. package/src/react/server.ts +11 -0
  275. package/src/react/social-kit-panel.tsx +103 -0
  276. package/src/react/sticky-offset.tsx +33 -0
  277. package/src/react/surfaces.stylex.ts +179 -0
  278. package/src/react/surfaces.tsx +330 -0
  279. package/src/react/syntax-code.tsx +33 -0
  280. package/src/react/theme-color-sync.ts +1 -0
  281. package/src/react/theme-resolution.ts +11 -0
  282. package/src/react/theme.stylex.ts +276 -0
  283. package/src/react/theme.tsx +402 -0
  284. package/src/reading.css +72 -0
  285. package/src/relative-time.ts +185 -0
  286. package/src/reset.css +2 -0
  287. package/src/site-shell.css +16 -0
  288. package/src/status-page-html.ts +63 -0
  289. package/src/status-page.css +276 -0
  290. package/src/status-page.ts +323 -0
  291. package/src/styles.css +21 -0
  292. package/src/syntax-code-lexers.ts +303 -0
  293. package/src/syntax-highlighting.css +78 -0
  294. package/src/syntax-highlighting.ts +477 -0
  295. package/src/syntax-tokens.ts +33 -0
  296. package/src/testing.ts +307 -0
  297. package/src/tokens.css +3 -0
  298. package/src/typography.css +86 -0
  299. package/vendor/evilcharts/LICENSE +21 -0
  300. package/vendor/evilcharts/UPSTREAM.md +14 -0
  301. package/vendor/platform-marks/LICENSE +30 -0
  302. package/vendor/platform-marks/UPSTREAM.md +15 -0
  303. package/vendor/platform-marks/apple.svg +1 -0
  304. package/vendor/platform-marks/linux.svg +1 -0
  305. package/vendor/provider-marks/CRUSH-LICENSE.md +134 -0
  306. package/vendor/provider-marks/LICENSE +21 -0
  307. package/vendor/provider-marks/UPSTREAM.md +27 -0
  308. package/vendor/provider-marks/aider.svg +3 -0
  309. package/vendor/provider-marks/crush-heartbit.svg +8 -0
  310. package/vendor/provider-marks/lobehub/alibabacloud-color.svg +1 -0
  311. package/vendor/provider-marks/lobehub/alibabacloud.svg +1 -0
  312. package/vendor/provider-marks/lobehub/amp-color.svg +1 -0
  313. package/vendor/provider-marks/lobehub/amp.svg +1 -0
  314. package/vendor/provider-marks/lobehub/anthropic.svg +1 -0
  315. package/vendor/provider-marks/lobehub/claude-color.svg +1 -0
  316. package/vendor/provider-marks/lobehub/claude.svg +1 -0
  317. package/vendor/provider-marks/lobehub/claudecode-color.svg +1 -0
  318. package/vendor/provider-marks/lobehub/claudecode.svg +1 -0
  319. package/vendor/provider-marks/lobehub/codex-color.svg +1 -0
  320. package/vendor/provider-marks/lobehub/codex.svg +1 -0
  321. package/vendor/provider-marks/lobehub/cursor.svg +1 -0
  322. package/vendor/provider-marks/lobehub/deepseek-color.svg +1 -0
  323. package/vendor/provider-marks/lobehub/deepseek.svg +1 -0
  324. package/vendor/provider-marks/lobehub/devin-color.svg +1 -0
  325. package/vendor/provider-marks/lobehub/devin.svg +1 -0
  326. package/vendor/provider-marks/lobehub/gemini-color.svg +1 -0
  327. package/vendor/provider-marks/lobehub/gemini.svg +1 -0
  328. package/vendor/provider-marks/lobehub/geminicli-color.svg +1 -0
  329. package/vendor/provider-marks/lobehub/geminicli.svg +1 -0
  330. package/vendor/provider-marks/lobehub/goose.svg +1 -0
  331. package/vendor/provider-marks/lobehub/meta-color.svg +1 -0
  332. package/vendor/provider-marks/lobehub/meta.svg +1 -0
  333. package/vendor/provider-marks/lobehub/mistral-color.svg +1 -0
  334. package/vendor/provider-marks/lobehub/mistral.svg +1 -0
  335. package/vendor/provider-marks/lobehub/moonshot.svg +1 -0
  336. package/vendor/provider-marks/lobehub/nvidia-color.svg +1 -0
  337. package/vendor/provider-marks/lobehub/nvidia.svg +1 -0
  338. package/vendor/provider-marks/lobehub/openai.svg +1 -0
  339. package/vendor/provider-marks/lobehub/opencode.svg +1 -0
  340. package/vendor/provider-marks/lobehub/perplexity-color.svg +1 -0
  341. package/vendor/provider-marks/lobehub/perplexity.svg +1 -0
  342. package/vendor/provider-marks/lobehub/qwen-color.svg +1 -0
  343. package/vendor/provider-marks/lobehub/qwen.svg +1 -0
  344. package/vendor/provider-marks/lobehub/xai.svg +1 -0
  345. package/vendor/provider-marks/lobehub/zai.svg +1 -0
package/src/icons.ts ADDED
@@ -0,0 +1,51 @@
1
+ import { hranessIconAssets, type HranessIconAsset } from "./icons.generated.js";
2
+
3
+ /**
4
+ * Shared vetted Hraness icon library. Every admitted icon is generated as a
5
+ * member of a measured family by slopcamera `image icon --set`, then pinned
6
+ * in `src/icons/manifest.json` by byte hash and per-context/family metric
7
+ * bounds (scripts/generate-icons.ts, enforced by icons.test.ts). Products
8
+ * consume either the raw file (`@hraness/design-kit/icons/<file>`) or this
9
+ * module's typed artwork (`body` + `viewBox`, or `hranessIconMarkup`).
10
+ */
11
+
12
+ export type HranessIconContext = "card" | "hero" | "inline";
13
+ export type HranessIconId = keyof typeof hranessIconAssets;
14
+ export type HranessIconPurpose = "illustration" | "mark";
15
+ export type HranessIconSet = HranessIconAsset["set"];
16
+
17
+ export interface HranessIcon extends HranessIconAsset {
18
+ readonly id: HranessIconId;
19
+ }
20
+
21
+ export const hranessIcons: readonly HranessIcon[] = (
22
+ Object.keys(hranessIconAssets) as HranessIconId[]
23
+ )
24
+ .sort()
25
+ .map(id => ({ ...(hranessIconAssets[id] as HranessIconAsset), id }));
26
+
27
+ export function hranessIcon(id: HranessIconId): HranessIcon {
28
+ const asset: HranessIconAsset = hranessIconAssets[id];
29
+ return { ...asset, id };
30
+ }
31
+
32
+ /** All admitted icons in one generated family, sorted by id. */
33
+ export function hranessIconsForSet(set: string): readonly HranessIcon[] {
34
+ return hranessIcons.filter(icon => icon.set === set);
35
+ }
36
+
37
+ /** Complete standalone `<svg>` markup for inline rendering. */
38
+ export function hranessIconMarkup(id: HranessIconId): string {
39
+ const icon = hranessIcon(id);
40
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${icon.viewBox}" role="img">${icon.body}</svg>`;
41
+ }
42
+
43
+ /** `data:image/svg+xml` URI for `<img>` sources or CSS `url()` values. */
44
+ export function hranessIconDataUri(id: HranessIconId): string {
45
+ return `data:image/svg+xml,${encodeURIComponent(hranessIconMarkup(id))}`;
46
+ }
47
+
48
+ /** Package-relative asset path inside the `./icons/*` export. */
49
+ export function hranessIconPath(id: HranessIconId): string {
50
+ return `icons/${hranessIcon(id).file}`;
51
+ }
package/src/index.ts ADDED
@@ -0,0 +1,275 @@
1
+ export * from "./palettes.js";
2
+ export * from "./palette-appearance.js";
3
+ export * from "./palette-themes.js";
4
+ export * from "./syntax-highlighting.js";
5
+ export * from "./appearance.js";
6
+ export * from "./article.js";
7
+ export * from "./article-html.js";
8
+ export * from "./status-page.js";
9
+ export * from "./status-page-html.js";
10
+ export * from "./provider-marks.js";
11
+ export * from "./platforms.js";
12
+ export * from "./relative-time.js";
13
+
14
+ export const colors = {
15
+ light: {
16
+ background: "#fbf6f2",
17
+ foreground: "#201b19",
18
+ muted: "#6b625d",
19
+ faint: "#6b625d",
20
+ grid: "#eaded8",
21
+ line: "#bbaaa2",
22
+ controlBorder: "#8f8f8f",
23
+ surface: "#ffffff",
24
+ surfaceRaised: "#f3ece8",
25
+ surfaceHover: "#eaded8",
26
+ card: "#ffffff",
27
+ cardForeground: "#201b19",
28
+ popover: "#ffffff",
29
+ popoverForeground: "#201b19",
30
+ primary: "#201b19",
31
+ primaryForeground: "#fbf6f2",
32
+ secondary: "#f3ece8",
33
+ secondaryForeground: "#201b19",
34
+ accent: "#eaded8",
35
+ accentForeground: "#201b19",
36
+ info: "#0d61ac",
37
+ infoSoft: "#d8eaff",
38
+ focus: "#0d61ac",
39
+ scrim: "rgba(2, 2, 2, 0.44)",
40
+ disabled: "#e8ded9",
41
+ disabledForeground: "#717171",
42
+ inverse: "#201b19",
43
+ inverseForeground: "#fbf6f2",
44
+ success: "#2d6a42",
45
+ successSoft: "rgba(45, 106, 66, 0.12)",
46
+ warning: "#785f28",
47
+ warningSoft: "rgba(120, 95, 40, 0.12)",
48
+ danger: "#9f3631",
49
+ dangerSoft: "rgba(159, 54, 49, 0.12)",
50
+ },
51
+ dark: {
52
+ background: "#000000",
53
+ foreground: "#f2f2ed",
54
+ muted: "#8f938c",
55
+ faint: "#8f938c",
56
+ grid: "#1c1e1b",
57
+ line: "#5f645d",
58
+ controlBorder: "#666666",
59
+ surface: "#0d0e0c",
60
+ surfaceRaised: "#161814",
61
+ surfaceHover: "#1c1e1b",
62
+ card: "#0d0e0c",
63
+ cardForeground: "#f2f2ed",
64
+ popover: "#161814",
65
+ popoverForeground: "#f2f2ed",
66
+ primary: "#f2f2ed",
67
+ primaryForeground: "#0d0e0c",
68
+ secondary: "#252820",
69
+ secondaryForeground: "#f2f2ed",
70
+ accent: "#1c1e1b",
71
+ accentForeground: "#f2f2ed",
72
+ info: "#6aa9ed",
73
+ infoSoft: "#152d46",
74
+ focus: "#6aa9ed",
75
+ scrim: "rgba(0, 0, 0, 0.72)",
76
+ disabled: "#262626",
77
+ disabledForeground: "#777777",
78
+ inverse: "#f2f2ed",
79
+ inverseForeground: "#0d0e0c",
80
+ success: "#76b38e",
81
+ successSoft: "rgba(118, 179, 142, 0.12)",
82
+ warning: "#c9ad74",
83
+ warningSoft: "rgba(201, 173, 116, 0.12)",
84
+ danger: "#e18982",
85
+ dangerSoft: "rgba(225, 137, 130, 0.12)",
86
+ },
87
+ } as const;
88
+
89
+ export const auroraColors = {
90
+ light: {
91
+ violet: "oklch(0.82 0.048 312)",
92
+ rose: "oklch(0.85 0.044 12)",
93
+ gold: "oklch(0.92 0.036 96)",
94
+ mint: "oklch(0.9 0.036 172)",
95
+ cyan: "oklch(0.84 0.042 236)",
96
+ },
97
+ dark: {
98
+ violet: "oklch(0.58 0.045 312)",
99
+ rose: "oklch(0.61 0.04 12)",
100
+ gold: "oklch(0.69 0.035 96)",
101
+ mint: "oklch(0.63 0.035 172)",
102
+ cyan: "oklch(0.6 0.04 236)",
103
+ },
104
+ } as const;
105
+
106
+ export const chromeColors = {
107
+ light: {
108
+ deep: "rgb(52 52 64)",
109
+ shadow: "rgb(58 58 72)",
110
+ mid: "rgb(92 92 106)",
111
+ high: "rgb(88 88 100)",
112
+ glint: "rgb(100 100 112)",
113
+ },
114
+ dark: {
115
+ deep: "rgb(100 102 122)",
116
+ shadow: "rgb(112 114 136)",
117
+ mid: "rgb(166 168 190)",
118
+ high: "rgb(158 160 182)",
119
+ glint: "rgb(178 180 200)",
120
+ },
121
+ } as const;
122
+
123
+ /** Ordered metallic bands used by browser text effects. */
124
+ export const chromeGradientStops = {
125
+ light: [
126
+ [0, "rgb(52 52 64)"],
127
+ [10, "rgb(88 88 100)"],
128
+ [20, "rgb(58 58 72)"],
129
+ [32, "rgb(100 100 112)"],
130
+ [42, "rgb(64 64 78)"],
131
+ [52, "rgb(92 92 106)"],
132
+ [62, "rgb(54 54 68)"],
133
+ [72, "rgb(86 86 100)"],
134
+ [82, "rgb(56 56 70)"],
135
+ [91, "rgb(80 80 94)"],
136
+ [100, "rgb(60 60 74)"],
137
+ ],
138
+ dark: [
139
+ [0, "rgb(100 102 122)"],
140
+ [10, "rgb(158 160 182)"],
141
+ [20, "rgb(112 114 136)"],
142
+ [32, "rgb(178 180 200)"],
143
+ [42, "rgb(122 124 148)"],
144
+ [52, "rgb(166 168 190)"],
145
+ [62, "rgb(106 108 132)"],
146
+ [72, "rgb(160 162 186)"],
147
+ [82, "rgb(110 112 136)"],
148
+ [91, "rgb(152 154 178)"],
149
+ [100, "rgb(118 120 142)"],
150
+ ],
151
+ } as const;
152
+
153
+ export const spacing = [0, 4, 8, 12, 16, 20, 24, 32, 48, 64] as const;
154
+ export const radius = { sharp: 0, sm: 4, md: 8, lg: 12, round: 999 } as const;
155
+
156
+ /** Controls use a bounded curve; full pills and circles opt into radius.round. */
157
+ export const controlRadius = 16;
158
+
159
+ export const layout = {
160
+ chromeInset: 8,
161
+ edgeInset: 24,
162
+ } as const;
163
+
164
+ /** Opt-in document themes that sit above light/dark color appearance. */
165
+ export const siteThemes = {
166
+ plain: {
167
+ bodyClassName: "plain-site",
168
+ footerClassName: "plain-footer",
169
+ pageClassName: "plain-page",
170
+ },
171
+ } as const;
172
+
173
+ export const interaction = {
174
+ compactTarget: 40,
175
+ minimumTarget: 48,
176
+ controlHeight: 52,
177
+ primaryControlHeight: 56,
178
+ transportControlHeight: 64,
179
+ } as const;
180
+
181
+ export const motion = {
182
+ duration: {
183
+ instant: 0,
184
+ fast: 120,
185
+ standard: 180,
186
+ slow: 280,
187
+ },
188
+ distance: {
189
+ railEnter: 14,
190
+ railExit: 10,
191
+ },
192
+ easing: {
193
+ standard: "cubic-bezier(0.2, 0, 0, 1)",
194
+ emphasized: "cubic-bezier(0.16, 1, 0.3, 1)",
195
+ },
196
+ } as const;
197
+
198
+ export const elevation = {
199
+ none: "none",
200
+ low: "0 1px 2px oklch(0 0 0 / 0.08)",
201
+ raised: "0 8px 24px -12px oklch(0 0 0 / 0.22)",
202
+ overlay: "0 18px 48px -18px oklch(0 0 0 / 0.32)",
203
+ } as const;
204
+
205
+ /** Product-neutral stacking order for persistent chrome and portalled overlays. */
206
+ export const stacking = {
207
+ chrome: 50,
208
+ modal: 2_000,
209
+ tooltip: 3_000,
210
+ skipLink: 4_000,
211
+ } as const;
212
+
213
+ export const breakpoints = {
214
+ compact: 480,
215
+ medium: 768,
216
+ wide: 1_200,
217
+ canvas: 1_440,
218
+ } as const;
219
+
220
+ /** Shared HugeIcons rendering defaults across web and native surfaces. */
221
+ export const iconography = {
222
+ size: 20,
223
+ strokeWidth: 1.5,
224
+ } as const;
225
+
226
+ export const typeScale = {
227
+ caption: 12,
228
+ label: 14,
229
+ body: 16,
230
+ control: 16,
231
+ controlGlyph: 20,
232
+ heading: 24,
233
+ title: 32,
234
+ display: 56,
235
+ } as const;
236
+
237
+ export const fontWeights = {
238
+ regular: 450,
239
+ medium: 550,
240
+ bold: 700,
241
+ } as const;
242
+
243
+ export const fontFamilies = {
244
+ heading: "Nebula Sans",
245
+ mono: "ui-monospace",
246
+ text: "Nebula Sans",
247
+ } as const;
248
+
249
+ export const fontFallbacks = {
250
+ mono: ["SFMono-Regular", "Menlo", "Monaco", "Consolas", "monospace"],
251
+ text: ["system-ui", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "sans-serif"],
252
+ } as const;
253
+
254
+ const webTextStack = '"Nebula Sans", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
255
+ const webMonoStack = 'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace';
256
+
257
+ export const typography = {
258
+ fontText: webTextStack,
259
+ fontHeading: webTextStack,
260
+ fontMono: webMonoStack,
261
+ /** Optional open-source display face shipped by the `fonts.css` entry point. */
262
+ fontGeistMono: '"Geist Mono", ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',
263
+ /** @deprecated Prefer the semantic `fontText` token. */
264
+ fontSans: webTextStack,
265
+ } as const;
266
+
267
+ export type ColorMode = keyof typeof colors;
268
+ /** Semantic role shape for consumers that may override product-owned colors. */
269
+ export type ThemeColors = {
270
+ readonly [Role in keyof (typeof colors)["light"]]: string;
271
+ };
272
+
273
+ export function themeFor(mode: ColorMode): ThemeColors {
274
+ return colors[mode];
275
+ }
@@ -0,0 +1,213 @@
1
+ /* Lantern is an opt-in material, independent of palette and typography.
2
+ * All paint is deterministic CSS. No texture is placed over meaningful content.
3
+ * Opacity-only mixes use sRGB to preserve the source hue. Perceptual blends
4
+ * between two colored paints continue to use OKLCH. */
5
+ @layer base {
6
+ [data-hraness-material="lantern"] {
7
+ --hraness-material-module: 6rem;
8
+ --hraness-material-warm: var(--primary, var(--ui-primary, CanvasText));
9
+ --hraness-material-cool: var(--info, var(--ui-info, CanvasText));
10
+ --hraness-material-plane: var(--surface, var(--ui-background, Canvas));
11
+ --hraness-material-ink: var(--foreground, var(--ui-foreground, CanvasText));
12
+ --hraness-material-muted: var(--muted, var(--ui-muted-foreground, CanvasText));
13
+ --hraness-material-seam: color-mix(in oklch, var(--hraness-material-ink) 5%, var(--hraness-material-plane));
14
+ --hraness-material-outline: transparent;
15
+ --hraness-material-edge: rgb(255 255 255 / 0.14);
16
+ --hraness-material-shade: rgb(0 0 0 / 0.14);
17
+ --hraness-material-warm-plane: color-mix(in oklch, var(--hraness-material-warm) 12%, var(--hraness-material-plane));
18
+ --hraness-material-rest: inset 0 1px 0 var(--hraness-material-edge), 0 2px 5px rgb(0 0 0 / 0.05), 0 10px 28px -14px rgb(0 0 0 / 0.14);
19
+ --hraness-material-raised: inset 0 1px 0 var(--hraness-material-edge), 0 1px 3px rgb(0 0 0 / 0.08);
20
+ --hraness-material-inset: inset 2px 3px 7px rgb(0 0 0 / 0.08), inset -1px -1px 2px rgb(255 255 255 / 0.1);
21
+ --hraness-material-lift: inset 0 1px 0 var(--hraness-material-edge), -3px -3px 10px rgb(255 255 255 / 0.04), 2px 4px 8px rgb(0 0 0 / 0.07), 8px 18px 40px rgb(0 0 0 / 0.09);
22
+ --hraness-material-focus: var(--focus, var(--ui-ring, Highlight));
23
+ --hraness-material-duration: 160ms;
24
+ }
25
+ }
26
+
27
+ @layer components.hraness-design-kit.legacy {
28
+ /* Patterns are retired. The attribute values stay valid for compatibility,
29
+ and every one paints the uninterrupted palette background. */
30
+ :is([data-hraness-pattern="cells"], [data-hraness-pattern="weave"], [data-hraness-pattern="contour"], [data-hraness-pattern="mesh"], [data-hraness-pattern="none"]) {
31
+ --hraness-pattern-image: none;
32
+ --hraness-pattern-decoration: none;
33
+ --hraness-marketing-field-images: none;
34
+ --hraness-material-wall-images: none;
35
+ }
36
+
37
+ /* A quiet, opaque reading plane. The seam belongs to the surface perimeter. */
38
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-pane) {
39
+ background-color: var(--hraness-material-plane);
40
+ box-shadow: var(--hraness-material-rest);
41
+ border: 1px solid var(--hraness-material-outline);
42
+ border-radius: var(--radius-lg, 0.75rem);
43
+ color: var(--hraness-material-ink);
44
+ min-inline-size: 0;
45
+ }
46
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-pane[data-depth="raised"]) {
47
+ box-shadow: var(--hraness-material-lift);
48
+ }
49
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-pane[data-depth="inset"]) {
50
+ background-color: color-mix(in oklch, var(--background, Canvas) 70%, var(--hraness-material-plane));
51
+ box-shadow: var(--hraness-material-inset);
52
+ }
53
+
54
+ /* A translucent enclosure, only where content actually passes behind it.
55
+ * Resolve these tokens on the chrome itself for nested palette islands. */
56
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-chrome) {
57
+ --hraness-material-chrome-paint: var(--surface, var(--ui-background, Canvas));
58
+ --hraness-design-top-bar-edge: var(--hraness-material-outline);
59
+ --hraness-material-chrome-blur: none;
60
+ background-color: var(--hraness-material-chrome-paint);
61
+ border-block-end: 1px solid var(--hraness-material-outline);
62
+ box-shadow: inset 0 1px 0 var(--hraness-material-edge), 0 4px 12px rgb(0 0 0 / 0.04);
63
+ }
64
+ /* Bind the compiled TopBar's public paint seam at its own surface boundary. */
65
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-chrome.hraness-design-top-bar[data-surface="glass"]) {
66
+ --hraness-design-top-bar-background: var(--hraness-material-chrome-paint);
67
+ --hraness-design-top-bar-backdrop: var(--hraness-material-chrome-blur);
68
+ }
69
+ @supports (-webkit-backdrop-filter: blur(1px)) {
70
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-chrome) {
71
+ --hraness-material-chrome-paint: color-mix(in srgb, var(--surface, var(--ui-background, Canvas)) 90%, transparent);
72
+ --hraness-material-chrome-blur: blur(20px) saturate(1.1);
73
+ -webkit-backdrop-filter: var(--hraness-material-chrome-blur);
74
+ }
75
+ }
76
+ @supports (backdrop-filter: blur(1px)) {
77
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-chrome) {
78
+ --hraness-material-chrome-paint: color-mix(in srgb, var(--surface, var(--ui-background, Canvas)) 90%, transparent);
79
+ --hraness-material-chrome-blur: blur(20px) saturate(1.1);
80
+ backdrop-filter: var(--hraness-material-chrome-blur);
81
+ }
82
+ }
83
+
84
+ /* The wall is a flat palette plane. Its retired shaded faces, grain,
85
+ * patterns, and light washes no longer paint, whatever tokens say. */
86
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-wall) {
87
+ background-color: var(--background, var(--ui-background, Canvas));
88
+ background-image: none;
89
+ color: var(--hraness-material-ink);
90
+ }
91
+
92
+ /* A terminal remains a readable document. Source lines scroll intact;
93
+ * only its enclosure catches light. Syntax spans inherit semantic colors. */
94
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-terminal) {
95
+ min-inline-size: 0;
96
+ overflow: hidden;
97
+ border: 1px solid var(--hraness-material-outline);
98
+ border-radius: .875rem;
99
+ background: var(--hraness-material-plane);
100
+ color: var(--hraness-material-ink);
101
+ box-shadow: var(--hraness-material-lift);
102
+ }
103
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-terminal__bar) {
104
+ padding: .8rem 1.25rem;
105
+ background: linear-gradient(to bottom, color-mix(in oklch, white 5%, var(--hraness-material-plane)), var(--hraness-material-plane));
106
+ box-shadow: inset 0 1px 0 var(--hraness-material-edge), 0 1px 3px rgb(0 0 0 / 0.08);
107
+ color: var(--hraness-material-muted);
108
+ font: .8125rem/1.5 var(--font-mono, ui-monospace, monospace);
109
+ }
110
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-code) {
111
+ min-inline-size: 0;
112
+ max-inline-size: 100%;
113
+ margin: 0;
114
+ padding: 1.25rem;
115
+ overflow: auto;
116
+ background: var(--hraness-material-plane);
117
+ color: var(--hraness-material-ink);
118
+ font: .875rem/1.75 var(--font-mono, ui-monospace, monospace);
119
+ white-space: pre;
120
+ overflow-wrap: normal;
121
+ word-break: normal;
122
+ tab-size: 2;
123
+ }
124
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-code) code {
125
+ background: none;
126
+ padding: 0;
127
+ font: inherit;
128
+ white-space: inherit;
129
+ overflow-wrap: inherit;
130
+ word-break: inherit;
131
+ }
132
+
133
+ /* Plain HTML control adapters. Compiled UI primitives use the public
134
+ * lanternControlStyles recipes through their documented controlXstyle seam.
135
+ * Edge paint uses background images, leaving focus shadows and outlines alone. */
136
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-control) {
137
+ background-image: linear-gradient(to bottom, var(--hraness-material-edge), transparent 2px);
138
+ }
139
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-input) {
140
+ background-image: linear-gradient(to bottom, var(--hraness-material-shade), transparent 4px);
141
+ caret-color: var(--hraness-material-focus);
142
+ }
143
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-choice[aria-pressed="true"], .hraness-material-choice[aria-selected="true"], .hraness-material-choice[data-selected]) {
144
+ background-color: var(--hraness-material-warm-plane);
145
+ color: var(--hraness-material-ink);
146
+ background-image: linear-gradient(to top, var(--hraness-material-warm), var(--hraness-material-warm) 2px, transparent 2px);
147
+ }
148
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-control:disabled, .hraness-material-control[aria-disabled="true"], .hraness-material-control[data-disabled], .hraness-material-input:disabled) {
149
+ background-image: none;
150
+ }
151
+
152
+ /* A collection is a readable sequence, never a requirement to fill a grid.
153
+ * Products own grouping, columns and the meaning of each row. Rows stay
154
+ * unruled: the pane perimeter owns the only seam. */
155
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-rows) {
156
+ margin: 0;
157
+ padding: 0;
158
+ list-style: none;
159
+ }
160
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-disclosure > summary) {
161
+ cursor: pointer;
162
+ min-block-size: 2.75rem;
163
+ padding-block: 0.75rem;
164
+ }
165
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-disclosure > summary:focus-visible) {
166
+ outline: 2px solid var(--hraness-material-focus);
167
+ outline-offset: 3px;
168
+ }
169
+ [data-hraness-material="lantern"] ::selection {
170
+ background-color: var(--hraness-material-warm-plane);
171
+ color: var(--hraness-material-ink);
172
+ }
173
+
174
+ @media (prefers-reduced-motion: reduce) {
175
+ [data-hraness-material="lantern"] { --hraness-material-duration: 0ms; }
176
+ }
177
+ @media (prefers-reduced-transparency: reduce) {
178
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-chrome) {
179
+ --hraness-material-chrome-paint: var(--surface, var(--ui-background, Canvas));
180
+ --hraness-material-chrome-blur: none;
181
+ }
182
+ }
183
+ @media (forced-colors: active) {
184
+ [data-hraness-material="lantern"] {
185
+ --hraness-material-plane: Canvas;
186
+ --hraness-material-ink: CanvasText;
187
+ --hraness-material-muted: CanvasText;
188
+ --hraness-material-seam: CanvasText;
189
+ --hraness-material-outline: CanvasText;
190
+ --hraness-material-rest: none;
191
+ --hraness-material-focus: Highlight;
192
+ --hraness-material-warm-plane: Canvas;
193
+ --hraness-material-warm: Highlight;
194
+ --hraness-material-edge: transparent;
195
+ --hraness-material-raised: none;
196
+ --hraness-material-inset: none;
197
+ --hraness-material-lift: none;
198
+ }
199
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-wall, .hraness-material-chrome, .hraness-material-pane, .hraness-material-terminal, .hraness-material-terminal__bar, .hraness-material-code) {
200
+ --hraness-material-chrome-paint: Canvas;
201
+ --hraness-material-chrome-blur: none;
202
+ background-color: Canvas;
203
+ background-image: none;
204
+ box-shadow: none;
205
+ }
206
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-control, .hraness-material-input, .hraness-material-choice) { background-image: none; }
207
+ :where([data-hraness-material="lantern"], [data-hraness-material="lantern"] *):is(.hraness-material-choice[aria-pressed="true"], .hraness-material-choice[aria-selected="true"], .hraness-material-choice[data-selected]) {
208
+ background-color: Highlight;
209
+ color: HighlightText;
210
+ background-image: none;
211
+ }
212
+ }
213
+ }