@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
@@ -0,0 +1,2186 @@
1
+ @import "./syntax-highlighting.css";
2
+ @import "./site-shell.css";
3
+
4
+ @layer components.hraness-design-kit.legacy {
5
+
6
+ /**
7
+ * Product-marketing grammar
8
+ *
9
+ * An opt-in narrative grammar for technical product sites. One typeface, one
10
+ * measured type scale, sentence-case labels, sculpted surfaces, soft radii, and
11
+ * one accent per product. Roles: site header with a published sticky
12
+ * clearance offset, hero with optional product frame, pillars, install,
13
+ * ordered flow, fact and stat strips, narrative section, primitives,
14
+ * interfaces, trust boundary, equal-height card rows with contained art
15
+ * wells, quotes, pricing,
16
+ * native questions, maker, closing call to action, and an in-flow site
17
+ * footer.
18
+ *
19
+ * Products bind the `--hraness-marketing-*` custom properties on the marketing
20
+ * root (`.hraness-marketing-page`) or on any role element. Every role reads
21
+ * the same properties, so a site sets its accent once.
22
+ */
23
+
24
+ :where(
25
+ .hraness-marketing-page,
26
+ .hraness-marketing-header,
27
+ .hraness-marketing-footer,
28
+ .hraness-marketing-hero,
29
+ .hraness-marketing-pillars,
30
+ .hraness-marketing-install,
31
+ .hraness-marketing-section,
32
+ .hraness-marketing-primitives,
33
+ .hraness-marketing-stats,
34
+ .hraness-marketing-interfaces,
35
+ .hraness-marketing-trust,
36
+ .hraness-marketing-quotes,
37
+ .hraness-marketing-pricing,
38
+ .hraness-marketing-questions,
39
+ .hraness-marketing-maker,
40
+ .hraness-marketing-related,
41
+ .hraness-marketing-cta,
42
+ .hraness-marketing-proof-frame
43
+ ) {
44
+ --hraness-marketing-ink: var(--foreground, CanvasText);
45
+ --hraness-marketing-muted: var(--muted, GrayText);
46
+ --hraness-marketing-background: var(--background, Canvas);
47
+ --hraness-marketing-surface: var(--surface, Canvas);
48
+ --hraness-marketing-line: color-mix(in srgb, var(--hraness-marketing-ink) 10%, transparent);
49
+ --hraness-marketing-line-strong: color-mix(in srgb, var(--hraness-marketing-ink) 22%, transparent);
50
+ --hraness-marketing-inverse: var(--inverse, CanvasText);
51
+ --hraness-marketing-inverse-ink: var(--inverse-foreground, Canvas);
52
+ --hraness-marketing-accent: var(--hraness-site-accent, var(--primary, oklch(0.55 0.21 262)));
53
+ --hraness-marketing-accent-ink: var(--hraness-site-accent-ink, var(--primary-foreground, white));
54
+ --hraness-marketing-accent-soft: color-mix(in srgb, var(--hraness-marketing-accent) 10%, transparent);
55
+ --hraness-marketing-text-font: var(--font-text, ui-sans-serif, system-ui, sans-serif);
56
+ --hraness-marketing-heading-font: var(--font-heading, var(--hraness-marketing-text-font));
57
+ --hraness-marketing-mono-font: var(--font-mono, ui-monospace, monospace);
58
+ --hraness-marketing-measure: 72rem;
59
+ --hraness-marketing-copy-measure: 54ch;
60
+ --hraness-marketing-prose-measure: 62ch;
61
+ --hraness-marketing-gutter: clamp(1.25rem, 4vw, 3rem);
62
+ --hraness-marketing-radius: 0.75rem;
63
+ --hraness-marketing-frame-radius: 1.125rem;
64
+ --hraness-marketing-rule: 1px solid var(--hraness-marketing-line);
65
+ --hraness-marketing-surface-rule: 1px solid transparent;
66
+ --hraness-marketing-chrome-rule: 1px solid var(--hraness-marketing-line);
67
+ --hraness-marketing-surface-shadow: 0 0 0 1px var(--hraness-marketing-line);
68
+ --hraness-marketing-chrome-shadow: none;
69
+ --hraness-marketing-shadow: 0 0 0 1px var(--hraness-marketing-line);
70
+ --hraness-marketing-section-space: clamp(4rem, 9vw, 7.5rem);
71
+ --hraness-marketing-heading-weight: 550;
72
+ --hraness-marketing-heading-tracking: -0.03em;
73
+ --hraness-marketing-action-height: 2.75rem;
74
+ --hraness-foil-1: light-dark(oklch(0.89 0.065 337), oklch(0.56 0.16 340));
75
+ --hraness-foil-2: light-dark(oklch(0.875 0.05 277), oklch(0.52 0.15 285));
76
+ --hraness-foil-3: light-dark(oklch(0.92 0.05 170), oklch(0.66 0.14 175));
77
+ --hraness-foil-4: light-dark(oklch(0.95 0.045 96), oklch(0.72 0.13 100));
78
+ --hraness-foil-5: light-dark(oklch(0.9 0.05 55), oklch(0.55 0.15 45));
79
+ --hraness-foil-6: light-dark(oklch(0.875 0.06 305), oklch(0.62 0.16 305));
80
+ --hraness-foil-edge: light-dark(black, white);
81
+ color: var(--hraness-marketing-ink);
82
+ font-family: var(--hraness-marketing-text-font);
83
+ }
84
+
85
+ .hraness-marketing-page {
86
+ background: var(--hraness-marketing-background);
87
+ color: var(--hraness-marketing-ink);
88
+ font-size: 1rem;
89
+ line-height: 1.55;
90
+ overflow-x: clip;
91
+ -webkit-font-smoothing: antialiased;
92
+ }
93
+
94
+ .hraness-marketing-page :where(p, li, dd) {
95
+ text-wrap: pretty;
96
+ }
97
+
98
+ .hraness-marketing-page :where(a) {
99
+ color: inherit;
100
+ text-decoration-thickness: 1px;
101
+ text-underline-offset: 0.16em;
102
+ }
103
+
104
+ .hraness-marketing-page :where(code, kbd, pre) {
105
+ font-family: var(--hraness-marketing-mono-font);
106
+ }
107
+
108
+ .hraness-marketing-page :where(pre) {
109
+ max-inline-size: 100%;
110
+ margin-block: 0;
111
+ padding: 1rem 1.15rem;
112
+ overflow: auto;
113
+ border-radius: var(--hraness-marketing-radius);
114
+ background: var(--hraness-marketing-surface);
115
+ color: var(--hraness-marketing-ink);
116
+ font-size: 0.85rem;
117
+ line-height: 1.6;
118
+ tab-size: 2;
119
+ white-space: pre;
120
+ overflow-wrap: normal;
121
+ word-break: normal;
122
+ }
123
+
124
+ .hraness-marketing-page :where(:not(pre) > code) {
125
+ padding: 0.08em 0.38em;
126
+ border-radius: 0.3em;
127
+ background: color-mix(in srgb, var(--hraness-marketing-ink) 7%, transparent);
128
+ font-size: 0.9em;
129
+ }
130
+
131
+ /* Labels: sentence case in the text face. Monospace stays with code. */
132
+ :where(
133
+ .hraness-marketing-hero__eyebrow,
134
+ .hraness-marketing-hero__name,
135
+ .hraness-marketing-proof__kicker,
136
+ .hraness-marketing-install__eyebrow,
137
+ .hraness-marketing-facts dt,
138
+ .hraness-marketing-stats dt,
139
+ .hraness-marketing-section__label,
140
+ .hraness-marketing-primitives__label,
141
+ .hraness-marketing-interfaces__label,
142
+ .hraness-marketing-trust__label,
143
+ .hraness-marketing-quotes__label,
144
+ .hraness-marketing-pricing__label,
145
+ .hraness-marketing-questions__label,
146
+ .hraness-marketing-maker__label,
147
+ .hraness-marketing-related__label,
148
+ .hraness-marketing-cta__eyebrow
149
+ ) {
150
+ margin: 0;
151
+ color: var(--hraness-marketing-muted);
152
+ font-family: var(--hraness-marketing-text-font);
153
+ font-size: 0.875rem;
154
+ font-weight: 500;
155
+ letter-spacing: 0;
156
+ line-height: 1.4;
157
+ text-transform: none;
158
+ }
159
+
160
+ .hraness-marketing-section__label[data-size="body"] {
161
+ font-size: 1rem;
162
+ }
163
+
164
+ /* Shared heading recipe. */
165
+ :where(
166
+ .hraness-marketing-hero__heading,
167
+ .hraness-marketing-proof__heading,
168
+ .hraness-marketing-install__heading,
169
+ .hraness-marketing-section__heading,
170
+ .hraness-marketing-primitives__heading,
171
+ .hraness-marketing-interfaces__heading,
172
+ .hraness-marketing-trust__heading,
173
+ .hraness-marketing-quotes__heading,
174
+ .hraness-marketing-pricing__heading,
175
+ .hraness-marketing-questions__heading,
176
+ .hraness-marketing-maker__heading,
177
+ .hraness-marketing-related__heading,
178
+ .hraness-marketing-cta__heading
179
+ ) {
180
+ margin: 0;
181
+ color: var(--hraness-marketing-ink);
182
+ font-family: var(--hraness-marketing-heading-font);
183
+ font-weight: var(--hraness-marketing-heading-weight);
184
+ letter-spacing: var(--hraness-marketing-h2-tracking, -0.012em);
185
+ line-height: var(--hraness-marketing-h2-leading, 1.15);
186
+ text-wrap: balance;
187
+ }
188
+
189
+ :where(
190
+ .hraness-marketing-section__heading,
191
+ .hraness-marketing-primitives__heading,
192
+ .hraness-marketing-interfaces__heading,
193
+ .hraness-marketing-trust__heading,
194
+ .hraness-marketing-quotes__heading,
195
+ .hraness-marketing-pricing__heading,
196
+ .hraness-marketing-questions__heading,
197
+ .hraness-marketing-maker__heading,
198
+ .hraness-marketing-related__heading
199
+ ) {
200
+ font-size: var(--hraness-paper-section-heading-size, clamp(1.75rem, 3vw, 2.5rem));
201
+ }
202
+
203
+ /* Lead and summary paragraphs under a heading. */
204
+ :where(
205
+ .hraness-marketing-hero__summary,
206
+ .hraness-marketing-hero__example,
207
+ .hraness-marketing-section__summary,
208
+ .hraness-marketing-primitives__header > p:last-child,
209
+ .hraness-marketing-interfaces__header > p:last-child,
210
+ .hraness-marketing-trust__header > p:last-child,
211
+ .hraness-marketing-quotes__header > p:last-child,
212
+ .hraness-marketing-pricing__header > p:last-child,
213
+ .hraness-marketing-questions__header > p:last-child,
214
+ .hraness-marketing-related__header > p:last-child,
215
+ .hraness-marketing-cta__summary
216
+ ) {
217
+ margin: 0;
218
+ color: var(--hraness-marketing-muted);
219
+ font-family: var(--hraness-marketing-text-font);
220
+ font-size: 1.125rem;
221
+ line-height: 1.5;
222
+ }
223
+
224
+ /* Container rhythm shared by every full-width role. */
225
+ :where(
226
+ .hraness-marketing-hero,
227
+ .hraness-marketing-pillars,
228
+ .hraness-marketing-install,
229
+ .hraness-marketing-section,
230
+ .hraness-marketing-primitives,
231
+ .hraness-marketing-stats,
232
+ .hraness-marketing-interfaces,
233
+ .hraness-marketing-trust,
234
+ .hraness-marketing-quotes,
235
+ .hraness-marketing-pricing,
236
+ .hraness-marketing-questions,
237
+ .hraness-marketing-maker,
238
+ .hraness-marketing-related,
239
+ .hraness-marketing-cta,
240
+ .hraness-marketing-proof-frame,
241
+ .hraness-marketing-data-table,
242
+ .hraness-marketing-code
243
+ ) {
244
+ inline-size: min(100%, var(--hraness-marketing-measure));
245
+ min-inline-size: 0;
246
+ margin-inline: auto;
247
+ }
248
+
249
+ .hraness-marketing-page > :where(
250
+ .hraness-marketing-hero,
251
+ .hraness-marketing-pillars,
252
+ .hraness-marketing-install,
253
+ .hraness-marketing-section,
254
+ .hraness-marketing-primitives,
255
+ .hraness-marketing-stats,
256
+ .hraness-marketing-interfaces,
257
+ .hraness-marketing-trust,
258
+ .hraness-marketing-quotes,
259
+ .hraness-marketing-pricing,
260
+ .hraness-marketing-questions,
261
+ .hraness-marketing-maker,
262
+ .hraness-marketing-related,
263
+ .hraness-marketing-cta,
264
+ .hraness-marketing-data-table
265
+ ) {
266
+ padding-inline: var(--hraness-marketing-gutter);
267
+ }
268
+
269
+ /* Direct children outside the grammar still honor the measure, gutter, and
270
+ block rhythm: a product-owned block cannot escape the column or touch the
271
+ viewport edge. */
272
+ .hraness-marketing-page > :where(
273
+ :not([data-hraness-marketing], script, style, link, meta, template)
274
+ ) {
275
+ inline-size: min(100%, var(--hraness-marketing-measure));
276
+ min-inline-size: 0;
277
+ margin-block: clamp(2rem, 5vw, 3.5rem);
278
+ margin-inline: auto;
279
+ padding-inline: var(--hraness-marketing-gutter);
280
+ }
281
+
282
+ /* Actions */
283
+
284
+ .hraness-marketing-hero__actions,
285
+ .hraness-marketing-cta__actions {
286
+ display: flex;
287
+ flex-wrap: wrap;
288
+ align-items: center;
289
+ gap: 0.65rem;
290
+ }
291
+
292
+ .hraness-marketing-action {
293
+ display: inline-flex;
294
+ min-block-size: var(--hraness-marketing-action-height);
295
+ align-items: center;
296
+ justify-content: center;
297
+ gap: 0.45rem;
298
+ padding: 0.6rem 1.1rem;
299
+ border: 1px solid var(--hraness-marketing-line-strong);
300
+ border-radius: var(--hraness-marketing-radius);
301
+ background: var(--hraness-marketing-surface);
302
+ color: var(--hraness-marketing-ink);
303
+ font-family: var(--hraness-marketing-text-font);
304
+ font-size: 0.95rem;
305
+ font-weight: 500;
306
+ line-height: 1.2;
307
+ text-decoration: none;
308
+ }
309
+
310
+ .hraness-marketing-action:hover {
311
+ background: color-mix(in oklch, var(--hraness-marketing-ink) 6%, var(--hraness-marketing-surface));
312
+ text-decoration: none;
313
+ }
314
+
315
+ .hraness-marketing-action:focus-visible {
316
+ outline: 2px solid var(--hraness-marketing-accent);
317
+ outline-offset: 2px;
318
+ }
319
+
320
+ .hraness-marketing-action[data-emphasis="primary"] {
321
+ --hraness-foil-surface: var(--hraness-marketing-accent);
322
+ color: var(--hraness-marketing-accent-ink);
323
+ }
324
+
325
+ .hraness-marketing-action[data-emphasis="primary"]:hover {
326
+ --hraness-foil-surface: color-mix(in oklch, var(--hraness-marketing-accent) 84%, black);
327
+ }
328
+
329
+ /* Site header */
330
+
331
+ .hraness-marketing-header {
332
+ --hraness-sticky-offset: calc(var(--hraness-marketing-header-height, 2.75rem) + 1px);
333
+ position: sticky;
334
+ inset-block-start: 0;
335
+ z-index: 40;
336
+ border-block-end: var(--hraness-marketing-chrome-rule);
337
+ box-shadow: var(--hraness-marketing-chrome-shadow);
338
+ }
339
+
340
+ /* marketing-header-paint:start */
341
+ /* Keep the browser aliases in separate feature queries: CSS optimizers can
342
+ * collapse adjacent aliases to the prefixed property and lose Chromium blur. */
343
+ .hraness-marketing-header {
344
+ --hraness-marketing-header-background: var(--hraness-marketing-background);
345
+ --hraness-marketing-header-backdrop: none;
346
+ background: var(--hraness-marketing-header-background);
347
+ }
348
+
349
+ @supports (-webkit-backdrop-filter: blur(1px)) {
350
+ .hraness-marketing-header {
351
+ --hraness-marketing-header-background: color-mix(in srgb, var(--hraness-marketing-background) 82%, transparent);
352
+ --hraness-marketing-header-backdrop: blur(14px) saturate(1.4);
353
+ -webkit-backdrop-filter: var(--hraness-marketing-header-backdrop);
354
+ }
355
+ }
356
+
357
+ @supports (backdrop-filter: blur(1px)) {
358
+ .hraness-marketing-header {
359
+ --hraness-marketing-header-background: color-mix(in srgb, var(--hraness-marketing-background) 82%, transparent);
360
+ --hraness-marketing-header-backdrop: blur(14px) saturate(1.4);
361
+ backdrop-filter: var(--hraness-marketing-header-backdrop);
362
+ }
363
+ }
364
+
365
+ @media (prefers-reduced-transparency: reduce), (forced-colors: active) {
366
+ .hraness-marketing-header {
367
+ --hraness-marketing-header-background: var(--hraness-marketing-background);
368
+ --hraness-marketing-header-backdrop: none;
369
+ }
370
+ }
371
+ /* marketing-header-paint:end */
372
+
373
+ .hraness-marketing-header__inner {
374
+ display: flex;
375
+ inline-size: min(100%, var(--hraness-marketing-measure));
376
+ min-block-size: var(--hraness-marketing-header-height, 2.75rem);
377
+ align-items: center;
378
+ gap: 0.5rem 1.25rem;
379
+ margin-inline: auto;
380
+ padding-inline: var(--hraness-marketing-gutter);
381
+ }
382
+
383
+ .hraness-marketing-header__brand {
384
+ display: inline-flex;
385
+ align-items: center;
386
+ gap: 0.4rem;
387
+ color: var(--hraness-marketing-ink);
388
+ font-size: 0.9375rem;
389
+ font-weight: 700;
390
+ letter-spacing: -0.04em;
391
+ text-decoration: none;
392
+ }
393
+
394
+ .hraness-marketing-header__brand :where(img, svg) {
395
+ block-size: 1.25rem;
396
+ inline-size: auto;
397
+ }
398
+
399
+ .hraness-marketing-header__nav {
400
+ display: flex;
401
+ flex-wrap: wrap;
402
+ align-items: center;
403
+ gap: 0.15rem 1.15rem;
404
+ margin-inline-start: auto;
405
+ }
406
+
407
+ .hraness-marketing-header__nav a {
408
+ color: var(--hraness-marketing-muted);
409
+ font-size: 0.85rem;
410
+ font-weight: 500;
411
+ text-decoration: none;
412
+ }
413
+
414
+ .hraness-marketing-header__nav a:hover,
415
+ .hraness-marketing-header__nav a[aria-current="page"] {
416
+ color: var(--hraness-marketing-ink);
417
+ }
418
+
419
+ .hraness-marketing-header__actions {
420
+ display: flex;
421
+ align-items: center;
422
+ gap: 0.5rem;
423
+ }
424
+
425
+ .hraness-marketing-header .hraness-marketing-action {
426
+ min-block-size: var(--hraness-marketing-header-action-height, 2rem);
427
+ padding-block: 0.3rem;
428
+ padding-inline: 0.8rem;
429
+ font-size: 0.85rem;
430
+ }
431
+
432
+ /* Sticky clearance: the header publishes --hraness-sticky-offset so the main
433
+ * landmark, hash targets, and the next sticky sibling clear its border box.
434
+ * The token height is the fallback; syncStickyOffset replaces it with the
435
+ * measured height when the header wraps. */
436
+ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([data-position="static"])),
437
+ .hraness-marketing-page:has(> :is(.hraness-marketing-header, .hraness-marketing-header-surface):not([data-position="static"])) {
438
+ --hraness-sticky-offset: calc(var(--hraness-marketing-header-height, 2.75rem) + 1px);
439
+ }
440
+
441
+ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([data-position="static"])) {
442
+ scroll-padding-block-start: var(--hraness-sticky-offset);
443
+ }
444
+
445
+ .hraness-marketing-main,
446
+ .hraness-marketing-header + :is(main, .hraness-marketing-main) {
447
+ scroll-margin-block-start: var(--hraness-sticky-offset);
448
+ }
449
+
450
+ .hraness-marketing-main[data-hraness-clearance="pad"],
451
+ .hraness-marketing-header[data-position="fixed"] + :is(main, .hraness-marketing-main) {
452
+ padding-block-start: var(--hraness-sticky-offset);
453
+ }
454
+
455
+ .hraness-sticky-below-chrome,
456
+ [data-hraness-sticky] {
457
+ position: sticky;
458
+ inset-block-start: var(--hraness-sticky-offset);
459
+ z-index: 30;
460
+ }
461
+
462
+ /* Site footer */
463
+
464
+ .hraness-marketing-footer {
465
+ border-block-start: var(--hraness-marketing-rule);
466
+ color: var(--hraness-marketing-muted);
467
+ font-size: 0.92rem;
468
+ }
469
+
470
+ .hraness-marketing-footer__inner {
471
+ display: flex;
472
+ flex-wrap: wrap;
473
+ align-items: center;
474
+ gap: 0.5rem 1.5rem;
475
+ inline-size: min(100%, var(--hraness-marketing-measure));
476
+ margin-inline: auto;
477
+ padding-block: var(--hraness-marketing-footer-space, 2rem 4rem);
478
+ padding-inline: var(--hraness-marketing-gutter);
479
+ }
480
+
481
+ .hraness-marketing-footer__brand {
482
+ display: inline-flex;
483
+ align-items: center;
484
+ gap: 0.4rem;
485
+ color: var(--hraness-marketing-ink);
486
+ font-size: 0.9375rem;
487
+ font-weight: 700;
488
+ letter-spacing: -0.04em;
489
+ text-decoration: none;
490
+ }
491
+
492
+ .hraness-marketing-footer__brand :where(img, svg) {
493
+ block-size: 1.25rem;
494
+ inline-size: auto;
495
+ }
496
+
497
+ .hraness-marketing-footer__name {
498
+ overflow: hidden;
499
+ text-overflow: ellipsis;
500
+ white-space: nowrap;
501
+ }
502
+
503
+ .hraness-marketing-footer__inner > :where(p) {
504
+ margin: 0;
505
+ max-inline-size: 48ch;
506
+ }
507
+
508
+ .hraness-marketing-footer__nav {
509
+ display: flex;
510
+ flex-wrap: wrap;
511
+ align-items: center;
512
+ gap: 0.15rem 1.15rem;
513
+ margin-inline-start: auto;
514
+ }
515
+
516
+ .hraness-marketing-footer__nav a {
517
+ color: var(--hraness-marketing-muted);
518
+ font-size: 0.85rem;
519
+ font-weight: 500;
520
+ text-decoration: none;
521
+ }
522
+
523
+ .hraness-marketing-footer__nav a:hover,
524
+ .hraness-marketing-footer__nav a[aria-current="page"] {
525
+ color: var(--hraness-marketing-ink);
526
+ }
527
+
528
+ /* Network footer composition
529
+ *
530
+ * A marketing footer directly followed by the shared network footer
531
+ * (`.hraness-site-footer` from `@hraness/site-footer`) reads as one band
532
+ * instead of two stacked bars: the product row's bottom space collapses to a
533
+ * compact gap, and the network footer's content inherits the marketing
534
+ * measure and gutter through its documented `--hraness-site-footer-measure`
535
+ * seam so both registers share one column at every width. The band keeps two
536
+ * edges: this landmark's top rule above the product row and the network
537
+ * footer's own hairline above the organization row.
538
+ */
539
+ .hraness-marketing-footer:has(+ .hraness-site-footer) {
540
+ --hraness-marketing-footer-space: 2rem 1.25rem;
541
+ }
542
+
543
+ .hraness-marketing-footer + .hraness-site-footer {
544
+ --hraness-site-footer-measure: calc(min(100%, var(--hraness-marketing-measure, 72rem)) - 2 * var(--hraness-marketing-gutter, clamp(1.25rem, 4vw, 3rem)));
545
+ }
546
+
547
+ /* Shared foil contract
548
+ *
549
+ * One pointer-tracked metallic chrome recipe shared by brand wordmarks,
550
+ * primary calls to action, and the shared site footer. Elements opt in with
551
+ * the hraness-foil / hraness-foil-text hooks; the marketing header brand,
552
+ * footer lockups carrying a transparent brandMark, and primary actions carry
553
+ * the treatment by default. attachFoil() from @hraness/design-kit/browser
554
+ * eases the two bounded inputs --hraness-foil-x and --hraness-foil-y on
555
+ * [data-foil] descendants between 8% and 92% around the resting center over
556
+ * roughly 85ms; the artwork and glyphs stay fixed while the radial light
557
+ * fields move, and --hraness-foil-glow stays CSS-owned. The spectrum lives in
558
+ * --hraness-foil-1 through --hraness-foil-6 so a site rethemes every foil
559
+ * surface from one marketing root; dark roots read the deeper palette where
560
+ * the pointer sheen stands out.
561
+ *
562
+ * The metallic image belongs to wordmarks and marks. Bordered foil surfaces
563
+ * keep a flat fill under one theme-aware monochrome edge -- black on light
564
+ * and white on dark through --hraness-foil-edge -- instead of the spectrum.
565
+ */
566
+
567
+ .hraness-foil,
568
+ .hraness-marketing-action[data-emphasis="primary"] {
569
+ --hraness-foil-glow: 0;
570
+ border-width: 2px;
571
+ border-style: solid;
572
+ border-color: var(--hraness-foil-edge, light-dark(black, white));
573
+ background-color: var(--hraness-foil-surface, var(--surface, var(--background, Canvas)));
574
+ box-shadow: 0 1px 4px color-mix(in srgb, var(--foreground, CanvasText) 12%, transparent);
575
+ }
576
+
577
+ .hraness-foil-text,
578
+ .hraness-marketing-header__brand,
579
+ .hraness-marketing-footer__brand[data-foil] {
580
+ --hraness-foil-glow: 0;
581
+ background-image: var(--hraness-foil-image,
582
+ radial-gradient(ellipse 24% 85% at var(--hraness-foil-x, 50%) var(--hraness-foil-y, 50%), color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 80%, var(--background, Canvas)) 0%, transparent 68%),
583
+ radial-gradient(ellipse 65% 160% at calc(100% - var(--hraness-foil-x, 50%)) calc(100% - var(--hraness-foil-y, 50%)), color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 98%, var(--background, Canvas)) 0%, transparent 72%),
584
+ linear-gradient(115deg, color-mix(in srgb, var(--hraness-foil-1, light-dark(oklch(0.89 0.065 337), oklch(0.56 0.16 340))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-2, light-dark(oklch(0.875 0.05 277), oklch(0.52 0.15 285))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-3, light-dark(oklch(0.92 0.05 170), oklch(0.66 0.14 175))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-4, light-dark(oklch(0.95 0.045 96), oklch(0.72 0.13 100))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-5, light-dark(oklch(0.9 0.05 55), oklch(0.55 0.15 45))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-6, light-dark(oklch(0.875 0.06 305), oklch(0.62 0.16 305))) var(--hraness-foil-reflection, 14%), transparent)),
585
+ linear-gradient(115deg, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 90%, var(--background, Canvas)) 0%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 100%, var(--background, Canvas)) 24%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 86%, var(--background, Canvas)) 39%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 100%, var(--background, Canvas)) 56%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 84%, var(--background, Canvas)) 82%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 100%, var(--background, Canvas)) 100%));
586
+ -webkit-background-clip: text;
587
+ background-clip: text;
588
+ color: transparent;
589
+ -webkit-text-fill-color: transparent;
590
+ filter: none;
591
+ }
592
+
593
+
594
+ /* The original image remains underneath as the no-mask/CSP/forced-color fallback.
595
+ * Only its exact alpha silhouette receives the shared metallic paint. */
596
+ .hraness-foil-mark { display: inline-flex; position: relative; flex-shrink: 0; color: var(--foreground, CanvasText); line-height: 0; vertical-align: middle; inline-size: var(--hraness-foil-size, 1.5rem); block-size: var(--hraness-foil-size, 1.5rem); }
597
+ .hraness-foil-mark__image { display: block; inline-size: 100%; block-size: 100%; object-fit: contain; }
598
+ .hraness-foil-mark__paint { --_hraness-foil-mark-display: none; display: var(--_hraness-foil-mark-display); position: absolute; inset: 0; pointer-events: none; mask-image: var(--hraness-foil-mask, linear-gradient(transparent, transparent)); mask-mode: alpha; mask-repeat: no-repeat; mask-position: center; mask-size: contain; background-image: var(--hraness-foil-image,
599
+ radial-gradient(ellipse 24% 85% at var(--hraness-foil-x, 50%) var(--hraness-foil-y, 50%), color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 80%, var(--background, Canvas)) 0%, transparent 68%),
600
+ radial-gradient(ellipse 65% 160% at calc(100% - var(--hraness-foil-x, 50%)) calc(100% - var(--hraness-foil-y, 50%)), color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 98%, var(--background, Canvas)) 0%, transparent 72%),
601
+ linear-gradient(115deg, color-mix(in srgb, var(--hraness-foil-1, light-dark(oklch(0.89 0.065 337), oklch(0.56 0.16 340))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-2, light-dark(oklch(0.875 0.05 277), oklch(0.52 0.15 285))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-3, light-dark(oklch(0.92 0.05 170), oklch(0.66 0.14 175))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-4, light-dark(oklch(0.95 0.045 96), oklch(0.72 0.13 100))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-5, light-dark(oklch(0.9 0.05 55), oklch(0.55 0.15 45))) var(--hraness-foil-reflection, 14%), transparent), color-mix(in srgb, var(--hraness-foil-6, light-dark(oklch(0.875 0.06 305), oklch(0.62 0.16 305))) var(--hraness-foil-reflection, 14%), transparent)),
602
+ linear-gradient(115deg, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 90%, var(--background, Canvas)) 0%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 100%, var(--background, Canvas)) 24%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 86%, var(--background, Canvas)) 39%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 100%, var(--background, Canvas)) 56%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 84%, var(--background, Canvas)) 82%, color-mix(in oklch, var(--hraness-foil-text-base, var(--foreground, CanvasText)) 100%, var(--background, Canvas)) 100%)); }
603
+ @supports (mask-image: linear-gradient(black, black)) {
604
+ .hraness-foil-mark__paint { --_hraness-foil-mark-display: block; }
605
+ }
606
+ @media (forced-colors: active) {
607
+ .hraness-foil,
608
+ .hraness-marketing-action[data-emphasis="primary"] {
609
+ background-image: none;
610
+ background-color: Canvas;
611
+ border-color: ButtonText;
612
+ box-shadow: none;
613
+ color: CanvasText;
614
+ }
615
+ .hraness-foil-text,
616
+ .hraness-marketing-header__brand,
617
+ .hraness-marketing-footer__brand[data-foil] {
618
+ background-image: none;
619
+ color: CanvasText;
620
+ -webkit-text-fill-color: CanvasText;
621
+ }
622
+ .hraness-foil-mark__paint { --_hraness-foil-mark-display: none; }
623
+ }
624
+
625
+ @media (hover: hover) {
626
+ .hraness-foil:hover:not(:disabled),
627
+ .hraness-foil-text:hover,
628
+ .hraness-marketing-header__brand:hover,
629
+ .hraness-marketing-footer__brand[data-foil]:hover,
630
+ .hraness-marketing-action[data-emphasis="primary"]:hover:not(:disabled) {
631
+ --hraness-foil-glow: 1;
632
+ }
633
+ }
634
+
635
+ :where([data-theme="dark"], .dark):where(
636
+ .hraness-marketing-page, .hraness-marketing-header, .hraness-marketing-footer,
637
+ .hraness-marketing-hero,
638
+ .hraness-marketing-pillars, .hraness-marketing-install, .hraness-marketing-section,
639
+ .hraness-marketing-primitives, .hraness-marketing-stats, .hraness-marketing-interfaces,
640
+ .hraness-marketing-trust, .hraness-marketing-quotes, .hraness-marketing-pricing,
641
+ .hraness-marketing-questions, .hraness-marketing-maker, .hraness-marketing-related,
642
+ .hraness-marketing-cta,
643
+ .hraness-marketing-proof-frame
644
+ ),
645
+ :where([data-theme="dark"], .dark) :where(
646
+ .hraness-marketing-page, .hraness-marketing-header, .hraness-marketing-footer,
647
+ .hraness-marketing-hero,
648
+ .hraness-marketing-pillars, .hraness-marketing-install, .hraness-marketing-section,
649
+ .hraness-marketing-primitives, .hraness-marketing-stats, .hraness-marketing-interfaces,
650
+ .hraness-marketing-trust, .hraness-marketing-quotes, .hraness-marketing-pricing,
651
+ .hraness-marketing-questions, .hraness-marketing-maker, .hraness-marketing-related,
652
+ .hraness-marketing-cta,
653
+ .hraness-marketing-proof-frame
654
+ ) {
655
+ --hraness-foil-1: oklch(0.56 0.16 340);
656
+ --hraness-foil-2: oklch(0.52 0.15 285);
657
+ --hraness-foil-3: oklch(0.66 0.14 175);
658
+ --hraness-foil-4: oklch(0.72 0.13 100);
659
+ --hraness-foil-5: oklch(0.55 0.15 45);
660
+ --hraness-foil-6: oklch(0.62 0.16 305);
661
+ --hraness-foil-edge: white;
662
+ }
663
+
664
+ @media (prefers-color-scheme: dark) {
665
+ :where(:root:not([data-theme="light"]):not(.light)) :where(
666
+ .hraness-marketing-page, .hraness-marketing-header, .hraness-marketing-footer,
667
+ .hraness-marketing-hero,
668
+ .hraness-marketing-pillars, .hraness-marketing-install, .hraness-marketing-section,
669
+ .hraness-marketing-primitives, .hraness-marketing-stats, .hraness-marketing-interfaces,
670
+ .hraness-marketing-trust, .hraness-marketing-quotes, .hraness-marketing-pricing,
671
+ .hraness-marketing-questions, .hraness-marketing-maker, .hraness-marketing-related,
672
+ .hraness-marketing-cta,
673
+ .hraness-marketing-proof-frame
674
+ ) {
675
+ --hraness-foil-1: oklch(0.56 0.16 340);
676
+ --hraness-foil-2: oklch(0.52 0.15 285);
677
+ --hraness-foil-3: oklch(0.66 0.14 175);
678
+ --hraness-foil-4: oklch(0.72 0.13 100);
679
+ --hraness-foil-5: oklch(0.55 0.15 45);
680
+ --hraness-foil-6: oklch(0.62 0.16 305);
681
+ --hraness-foil-edge: white;
682
+ }
683
+ }
684
+
685
+ /* Hero */
686
+
687
+ .hraness-marketing-hero {
688
+ position: relative;
689
+ isolation: isolate;
690
+ display: grid;
691
+ gap: clamp(2rem, 5vw, 3.5rem);
692
+ padding-block: var(--hraness-marketing-hero-space, clamp(3.5rem, 9vw, 7rem) clamp(2.5rem, 6vw, 4.5rem));
693
+ }
694
+
695
+ /* Hero backdrops are retired. Hand-authored markup that still ships the old
696
+ * backdrop hooks paints nothing and takes no space. */
697
+ .hraness-marketing-hero-backdrop {
698
+ display: none;
699
+ }
700
+
701
+ .hraness-marketing-hero__copy {
702
+ display: grid;
703
+ min-inline-size: 0;
704
+ justify-items: center;
705
+ gap: 1.25rem;
706
+ text-align: center;
707
+ }
708
+
709
+ .hraness-marketing-hero[data-align="start"] .hraness-marketing-hero__copy {
710
+ justify-items: start;
711
+ text-align: start;
712
+ }
713
+
714
+ /* A plain category label, not a badge. */
715
+ .hraness-marketing-hero__eyebrow {
716
+ display: inline-flex;
717
+ align-items: center;
718
+ gap: 0.45rem;
719
+ padding: 0;
720
+ border: 0;
721
+ border-radius: 0;
722
+ background: none;
723
+ color: var(--hraness-marketing-muted);
724
+ }
725
+
726
+ .hraness-marketing-hero__name {
727
+ position: absolute;
728
+ inline-size: 1px;
729
+ block-size: 1px;
730
+ margin: -1px;
731
+ padding: 0;
732
+ overflow: hidden;
733
+ clip: rect(0 0 0 0);
734
+ clip-path: inset(50%);
735
+ white-space: nowrap;
736
+ border: 0;
737
+ }
738
+
739
+ .hraness-marketing-hero__heading {
740
+ max-inline-size: 18ch;
741
+ font-size: var(--hraness-paper-heading-size, clamp(2.5rem, 5vw, 4.25rem));
742
+ letter-spacing: var(--hraness-marketing-heading-tracking);
743
+ line-height: var(--hraness-marketing-h1-leading, 1.05);
744
+ }
745
+
746
+ .hraness-marketing-hero__summary {
747
+ max-inline-size: var(--hraness-marketing-copy-measure);
748
+ font-size: var(--hraness-paper-summary-size, clamp(1.125rem, 1.6vw, 1.3rem));
749
+ line-height: var(--hraness-marketing-summary-leading, 1.6);
750
+ }
751
+
752
+ .hraness-marketing-hero__example {
753
+ max-inline-size: var(--hraness-marketing-example-measure, var(--hraness-marketing-copy-measure));
754
+ margin-block-start: -0.35rem;
755
+ color: var(--hraness-marketing-ink);
756
+ font-size: 1.05rem;
757
+ }
758
+
759
+ .hraness-marketing-hero__actions {
760
+ justify-content: center;
761
+ margin-block-start: 0.5rem;
762
+ }
763
+
764
+ .hraness-marketing-hero[data-align="start"] .hraness-marketing-hero__actions {
765
+ justify-content: flex-start;
766
+ }
767
+
768
+ .hraness-marketing-hero__boundary {
769
+ max-inline-size: var(--hraness-marketing-copy-measure);
770
+ margin: 0;
771
+ color: var(--hraness-marketing-muted);
772
+ font-size: 0.9rem;
773
+ line-height: 1.5;
774
+ }
775
+
776
+ .hraness-marketing-hero__frame {
777
+ min-inline-size: 0;
778
+ }
779
+
780
+ /* Accent band: the hero paints edge to edge in the product accent. */
781
+ .hraness-marketing-hero[data-tone="accent"] {
782
+ --hraness-marketing-ink: var(--hraness-marketing-accent-ink);
783
+ --hraness-marketing-muted: color-mix(in srgb, var(--hraness-marketing-accent-ink) 78%, transparent);
784
+ --hraness-marketing-line: color-mix(in srgb, var(--hraness-marketing-accent-ink) 22%, transparent);
785
+ --hraness-marketing-line-strong: color-mix(in srgb, var(--hraness-marketing-accent-ink) 40%, transparent);
786
+ --hraness-marketing-surface: color-mix(in srgb, var(--hraness-marketing-accent-ink) 12%, transparent);
787
+ background: var(--hraness-marketing-accent);
788
+ box-shadow: 0 0 0 100vmax var(--hraness-marketing-accent);
789
+ clip-path: inset(0 -100vmax);
790
+ color: var(--hraness-marketing-accent-ink);
791
+ }
792
+
793
+ .hraness-marketing-hero[data-tone="accent"] .hraness-marketing-hero__eyebrow {
794
+ color: var(--hraness-marketing-accent-ink);
795
+ }
796
+
797
+ .hraness-marketing-hero[data-tone="accent"] .hraness-marketing-action[data-emphasis="primary"] {
798
+ --hraness-foil-surface: var(--hraness-marketing-accent-ink);
799
+ color: var(--hraness-marketing-accent);
800
+ }
801
+
802
+ .hraness-marketing-hero[data-tone="accent"] .hraness-marketing-action[data-emphasis="primary"]:hover {
803
+ --hraness-foil-surface: color-mix(in oklch, var(--hraness-marketing-accent-ink) 90%, var(--hraness-marketing-accent));
804
+ }
805
+
806
+ .hraness-marketing-hero[data-tone="accent"] .hraness-marketing-action[data-emphasis="secondary"] {
807
+ border-color: var(--hraness-marketing-line-strong);
808
+ background: transparent;
809
+ color: var(--hraness-marketing-accent-ink);
810
+ }
811
+
812
+ /* Legacy proof aside: now a light card beneath the copy. */
813
+ .hraness-marketing-proof {
814
+ display: grid;
815
+ min-inline-size: 0;
816
+ gap: 1rem;
817
+ padding: clamp(1.25rem, 3vw, 2rem);
818
+ border: var(--hraness-marketing-surface-rule);
819
+ border-radius: var(--hraness-marketing-frame-radius);
820
+ background: var(--hraness-marketing-surface);
821
+ box-shadow: var(--hraness-marketing-shadow);
822
+ }
823
+
824
+ .hraness-marketing-proof__kicker {
825
+ margin: 0;
826
+ }
827
+
828
+ .hraness-marketing-proof__heading {
829
+ max-inline-size: 24ch;
830
+ font-size: var(--hraness-marketing-h3-size, clamp(1.75rem, 1.35rem + 1.6vw, 2.5rem));
831
+ }
832
+
833
+ /* Ordered flow */
834
+
835
+ .hraness-marketing-flow {
836
+ display: grid;
837
+ min-inline-size: 0;
838
+ margin: 0;
839
+ padding: 0;
840
+ list-style: none;
841
+ }
842
+
843
+ .hraness-marketing-flow__step {
844
+ display: grid;
845
+ min-inline-size: 0;
846
+ margin: 0;
847
+ padding-block: 1rem;
848
+ border-block-start: var(--hraness-marketing-rule);
849
+ gap: 0.85rem;
850
+ grid-template-columns: 2.25rem minmax(0, 1fr);
851
+ }
852
+
853
+ .hraness-marketing-flow__step:first-child {
854
+ border-block-start: 0;
855
+ }
856
+
857
+ .hraness-marketing-flow__number {
858
+ padding-block-start: 0.2rem;
859
+ color: var(--hraness-marketing-accent);
860
+ font-family: var(--hraness-marketing-mono-font);
861
+ font-size: 0.75rem;
862
+ font-weight: 500;
863
+ }
864
+
865
+ .hraness-marketing-flow__body {
866
+ display: grid;
867
+ min-inline-size: 0;
868
+ gap: 0.4rem;
869
+ }
870
+
871
+ .hraness-marketing-flow__label,
872
+ .hraness-marketing-flow__code,
873
+ .hraness-marketing-flow__detail {
874
+ display: block;
875
+ }
876
+
877
+ .hraness-marketing-flow__label {
878
+ font-size: 0.95rem;
879
+ font-weight: 600;
880
+ }
881
+
882
+ .hraness-marketing-flow__code {
883
+ inline-size: fit-content;
884
+ max-inline-size: 100%;
885
+ padding: 0.35rem 0.6rem;
886
+ border-radius: 0.4rem;
887
+ background: color-mix(in srgb, var(--hraness-marketing-ink) 7%, transparent);
888
+ color: inherit;
889
+ font-family: var(--hraness-marketing-mono-font);
890
+ font-size: 0.8rem;
891
+ overflow-wrap: anywhere;
892
+ }
893
+
894
+ .hraness-marketing-flow__detail {
895
+ margin: 0;
896
+ color: var(--hraness-marketing-muted);
897
+ font-size: 0.9rem;
898
+ line-height: 1.5;
899
+ }
900
+
901
+ /* Facts and stats */
902
+
903
+ .hraness-marketing-facts,
904
+ .hraness-marketing-stats__list {
905
+ display: grid;
906
+ margin: 0;
907
+ border-block: var(--hraness-marketing-rule);
908
+ grid-template-columns: repeat(var(--hraness-marketing-fact-columns, 4), minmax(0, 1fr));
909
+ }
910
+
911
+ .hraness-marketing-facts > div,
912
+ .hraness-marketing-stats__list > div {
913
+ min-inline-size: 0;
914
+ padding: 1.25rem clamp(0.8rem, 2vw, 1.5rem);
915
+ }
916
+
917
+ .hraness-marketing-facts > div + div,
918
+ .hraness-marketing-stats__list > div + div {
919
+ border-inline-start: var(--hraness-marketing-rule);
920
+ }
921
+
922
+ .hraness-marketing-facts dt,
923
+ .hraness-marketing-stats dt {
924
+ margin-block-end: 0.4rem;
925
+ }
926
+
927
+ .hraness-marketing-facts dd,
928
+ .hraness-marketing-stats dd {
929
+ margin: 0;
930
+ }
931
+
932
+ .hraness-marketing-facts :where(strong, span),
933
+ .hraness-marketing-stats :where(strong, span) {
934
+ display: block;
935
+ }
936
+
937
+ .hraness-marketing-facts strong {
938
+ font-size: 1.05rem;
939
+ font-weight: 600;
940
+ }
941
+
942
+ .hraness-marketing-stats strong {
943
+ font-family: var(--hraness-marketing-heading-font);
944
+ font-size: clamp(1.75rem, 3vw, 2.25rem);
945
+ font-weight: 500;
946
+ letter-spacing: -0.02em;
947
+ line-height: 1.1;
948
+ font-variant-numeric: tabular-nums;
949
+ }
950
+
951
+ .hraness-marketing-facts span,
952
+ .hraness-marketing-stats span {
953
+ margin-block-start: 0.3rem;
954
+ color: var(--hraness-marketing-muted);
955
+ font-size: 0.85rem;
956
+ line-height: 1.45;
957
+ }
958
+
959
+ .hraness-marketing-stats {
960
+ display: grid;
961
+ gap: 0.75rem;
962
+ padding-block: clamp(1.5rem, 4vw, 3rem);
963
+ }
964
+
965
+ /* Notice: one status or alert line that sits on the content edge of the
966
+ page column, never a full-bleed band. */
967
+ .hraness-marketing-notice {
968
+ box-sizing: border-box;
969
+ inline-size: calc(min(100%, var(--hraness-marketing-measure)) - 2 * var(--hraness-marketing-gutter));
970
+ min-inline-size: 0;
971
+ margin-block: clamp(1rem, 3vw, 1.5rem);
972
+ margin-inline: auto;
973
+ padding-block: 0.75rem;
974
+ padding-inline: 1rem;
975
+ border-inline-start: 3px solid var(--hraness-marketing-line-strong);
976
+ color: var(--hraness-marketing-ink);
977
+ font-family: var(--hraness-marketing-text-font);
978
+ font-size: 0.95rem;
979
+ line-height: 1.5;
980
+ overflow-wrap: anywhere;
981
+ }
982
+
983
+ .hraness-marketing-notice[data-tone="success"] {
984
+ border-inline-start-color: var(--hraness-marketing-accent);
985
+ }
986
+
987
+ .hraness-marketing-notice[data-tone="error"] {
988
+ border-inline-start-color: var(--danger, var(--hraness-marketing-accent));
989
+ }
990
+
991
+ .hraness-marketing-stats__source {
992
+ margin: 0;
993
+ color: var(--hraness-marketing-muted);
994
+ font-size: 0.85rem;
995
+ }
996
+
997
+ /* Pillars */
998
+
999
+ .hraness-marketing-pillars {
1000
+ display: grid;
1001
+ margin-block: 0;
1002
+ padding-block: 0;
1003
+ border-block: var(--hraness-marketing-rule);
1004
+ grid-template-columns: repeat(var(--hraness-marketing-pillar-columns, 3), minmax(0, 1fr));
1005
+ }
1006
+
1007
+ .hraness-marketing-pillars > div {
1008
+ display: grid;
1009
+ min-inline-size: 0;
1010
+ align-content: start;
1011
+ gap: 0.45rem;
1012
+ padding: clamp(1.25rem, 3vw, 2rem) clamp(1rem, 2.5vw, 1.75rem);
1013
+ }
1014
+
1015
+ .hraness-marketing-pillars > div + div {
1016
+ border-inline-start: var(--hraness-marketing-rule);
1017
+ }
1018
+
1019
+ .hraness-marketing-pillars dt {
1020
+ font-size: 1.05rem;
1021
+ font-weight: 600;
1022
+ letter-spacing: -0.01em;
1023
+ }
1024
+
1025
+ .hraness-marketing-pillars dd {
1026
+ margin: 0;
1027
+ color: var(--hraness-marketing-muted);
1028
+ font-size: 0.95rem;
1029
+ line-height: 1.5;
1030
+ }
1031
+
1032
+ /* Product frame */
1033
+
1034
+ .hraness-marketing-proof-frame {
1035
+ min-inline-size: 0;
1036
+ margin-block: 0;
1037
+ overflow: clip;
1038
+ border: var(--hraness-marketing-surface-rule);
1039
+ border-radius: var(--hraness-marketing-frame-radius);
1040
+ background: var(--hraness-marketing-surface);
1041
+ box-shadow: var(--hraness-marketing-shadow);
1042
+ }
1043
+
1044
+ .hraness-marketing-proof-frame__chrome {
1045
+ display: flex;
1046
+ align-items: center;
1047
+ gap: 0.75rem;
1048
+ padding: 0.8rem 1rem;
1049
+ background-image: var(--hraness-marketing-frame-chrome, none);
1050
+ box-shadow: var(--hraness-marketing-chrome-shadow);
1051
+ border-block-end: var(--hraness-marketing-chrome-rule);
1052
+ color: var(--hraness-marketing-muted);
1053
+ font-size: 0.78rem;
1054
+ }
1055
+
1056
+ .hraness-marketing-proof-frame__lights {
1057
+ display: inline-flex;
1058
+ gap: 0.35rem;
1059
+ }
1060
+
1061
+ .hraness-marketing-proof-frame__lights span {
1062
+ inline-size: 0.6rem;
1063
+ block-size: 0.6rem;
1064
+ border-radius: 999px;
1065
+ background: color-mix(in srgb, var(--hraness-marketing-ink) 18%, transparent);
1066
+ }
1067
+
1068
+ .hraness-marketing-proof-frame__title {
1069
+ flex: 1 1 auto;
1070
+ overflow: hidden;
1071
+ text-align: center;
1072
+ text-overflow: ellipsis;
1073
+ white-space: nowrap;
1074
+ }
1075
+
1076
+ .hraness-marketing-proof-frame[data-chrome="terminal"] .hraness-marketing-proof-frame__title {
1077
+ font-family: var(--hraness-marketing-mono-font);
1078
+ }
1079
+
1080
+ .hraness-marketing-proof-frame__address {
1081
+ flex: 0 1 32rem;
1082
+ min-inline-size: 0;
1083
+ margin-inline: auto;
1084
+ padding: 0.3rem 0.85rem;
1085
+ overflow: hidden;
1086
+ border-radius: 999px;
1087
+ background: color-mix(in srgb, var(--hraness-marketing-ink) 6%, transparent);
1088
+ color: var(--hraness-marketing-muted);
1089
+ font-family: var(--hraness-marketing-mono-font);
1090
+ font-size: 0.74rem;
1091
+ text-align: center;
1092
+ text-overflow: ellipsis;
1093
+ white-space: nowrap;
1094
+ }
1095
+
1096
+ .hraness-marketing-proof-frame__content {
1097
+ min-inline-size: 0;
1098
+ overflow: auto;
1099
+ }
1100
+
1101
+ .hraness-marketing-proof-frame__content > :where(img, video) {
1102
+ display: block;
1103
+ inline-size: 100%;
1104
+ block-size: auto;
1105
+ }
1106
+
1107
+ .hraness-marketing-proof-frame__content > :where(pre) {
1108
+ border-radius: 0;
1109
+ }
1110
+
1111
+ .hraness-marketing-proof-frame__caption {
1112
+ display: flex;
1113
+ flex-wrap: wrap;
1114
+ justify-content: space-between;
1115
+ gap: 0.25rem 1rem;
1116
+ padding: 0.75rem 0.95rem;
1117
+ border-block-start: var(--hraness-marketing-rule);
1118
+ color: var(--hraness-marketing-muted);
1119
+ font-size: 0.82rem;
1120
+ line-height: 1.45;
1121
+ }
1122
+
1123
+ .hraness-marketing-proof-frame__caption small {
1124
+ font-size: 0.78rem;
1125
+ }
1126
+
1127
+ /* Evidence blocks */
1128
+
1129
+ .hraness-marketing-data-table {
1130
+ min-inline-size: 0;
1131
+ margin-block: 0;
1132
+ font-size: 0.95rem;
1133
+ line-height: 1.5;
1134
+ }
1135
+
1136
+ .hraness-marketing-data-table__head {
1137
+ display: flex;
1138
+ flex-wrap: wrap;
1139
+ align-items: baseline;
1140
+ justify-content: space-between;
1141
+ gap: 0.3rem 1rem;
1142
+ margin-block-end: 0.75rem;
1143
+ }
1144
+
1145
+ .hraness-marketing-data-table__title {
1146
+ color: var(--hraness-marketing-ink);
1147
+ font-weight: var(--hraness-marketing-heading-weight);
1148
+ letter-spacing: -0.01em;
1149
+ }
1150
+
1151
+ .hraness-marketing-data-table__meta {
1152
+ color: var(--hraness-marketing-muted);
1153
+ font-size: 0.82rem;
1154
+ }
1155
+
1156
+ .hraness-marketing-data-table__scroll {
1157
+ max-inline-size: 100%;
1158
+ overflow-x: auto;
1159
+ border-block: var(--hraness-marketing-rule);
1160
+ }
1161
+
1162
+ .hraness-marketing-data-table__table {
1163
+ inline-size: 100%;
1164
+ border-collapse: collapse;
1165
+ font-variant-numeric: tabular-nums;
1166
+ }
1167
+
1168
+ .hraness-marketing-data-table__table :where(th, td) {
1169
+ padding: 0.55rem 0.9rem;
1170
+ text-align: start;
1171
+ vertical-align: baseline;
1172
+ }
1173
+
1174
+ .hraness-marketing-data-table__table thead :where(th) {
1175
+ color: var(--hraness-marketing-muted);
1176
+ font-size: 0.8rem;
1177
+ font-weight: 500;
1178
+ white-space: nowrap;
1179
+ }
1180
+
1181
+ .hraness-marketing-data-table__table tbody :where(th) {
1182
+ color: var(--hraness-marketing-ink);
1183
+ font-weight: 500;
1184
+ text-align: start;
1185
+ }
1186
+
1187
+ .hraness-marketing-data-table__table tbody :where(th, td) {
1188
+ border-block-start: var(--hraness-marketing-rule);
1189
+ }
1190
+
1191
+ .hraness-marketing-data-table__table :where([data-numeric]) {
1192
+ text-align: end;
1193
+ white-space: nowrap;
1194
+ }
1195
+
1196
+ .hraness-marketing-data-table__table :where(td[data-tone="positive"]) {
1197
+ color: var(--success, var(--hraness-marketing-accent));
1198
+ }
1199
+
1200
+ .hraness-marketing-data-table__table :where(td[data-tone="negative"]) {
1201
+ color: var(--danger, var(--hraness-marketing-muted));
1202
+ }
1203
+
1204
+ .hraness-marketing-data-table__note {
1205
+ margin: 0;
1206
+ margin-block-start: 0.8rem;
1207
+ max-inline-size: var(--hraness-marketing-prose-measure);
1208
+ color: var(--hraness-marketing-muted);
1209
+ font-size: 0.95rem;
1210
+ }
1211
+
1212
+ .hraness-marketing-code {
1213
+ min-inline-size: 0;
1214
+ }
1215
+
1216
+ /* Install */
1217
+
1218
+ .hraness-marketing-install {
1219
+ display: grid;
1220
+ padding: clamp(1.5rem, 4vw, 2.5rem);
1221
+ border: var(--hraness-marketing-rule);
1222
+ border-radius: var(--hraness-marketing-frame-radius);
1223
+ background: var(--hraness-marketing-surface);
1224
+ gap: clamp(1.25rem, 4vw, 3rem);
1225
+ grid-template-columns: minmax(12rem, 0.6fr) minmax(0, 1.4fr);
1226
+ scroll-margin-block-start: calc(var(--hraness-sticky-offset, 2.75rem) + 0.75rem);
1227
+ }
1228
+
1229
+ .hraness-marketing-page > .hraness-marketing-install {
1230
+ inline-size: min(100% - 2 * var(--hraness-marketing-gutter), var(--hraness-marketing-measure));
1231
+ padding-inline: clamp(1.5rem, 4vw, 2.5rem);
1232
+ }
1233
+
1234
+ .hraness-marketing-install__heading-group {
1235
+ display: grid;
1236
+ align-content: start;
1237
+ gap: 0.5rem;
1238
+ }
1239
+
1240
+ .hraness-marketing-install__heading {
1241
+ max-inline-size: 14ch;
1242
+ font-size: var(--hraness-marketing-h2-size, clamp(1.5rem, 2.6vw, 2rem));
1243
+ }
1244
+
1245
+ .hraness-marketing-install__commands,
1246
+ .hraness-marketing-section__body {
1247
+ min-inline-size: 0;
1248
+ }
1249
+
1250
+ .hraness-marketing-install__commands {
1251
+ display: grid;
1252
+ gap: 0.75rem;
1253
+ }
1254
+
1255
+ /* Narrative section */
1256
+
1257
+ .hraness-marketing-section,
1258
+ .hraness-marketing-primitives,
1259
+ .hraness-marketing-interfaces,
1260
+ .hraness-marketing-trust,
1261
+ .hraness-marketing-quotes,
1262
+ .hraness-marketing-pricing,
1263
+ .hraness-marketing-questions,
1264
+ .hraness-marketing-maker,
1265
+ .hraness-marketing-related {
1266
+ padding-block: var(--hraness-marketing-section-space);
1267
+ border-block-start: var(--hraness-marketing-rule);
1268
+ scroll-margin-block-start: calc(var(--hraness-sticky-offset, 2.75rem) + 0.75rem);
1269
+ }
1270
+
1271
+ /* A framed component already draws its own boundary; a ruled section directly
1272
+ after it would stack a redundant separator on the card edge. */
1273
+ :is(
1274
+ .hraness-marketing-install,
1275
+ .hraness-marketing-proof,
1276
+ .hraness-marketing-proof-frame
1277
+ ) + :is(
1278
+ .hraness-marketing-section,
1279
+ .hraness-marketing-primitives,
1280
+ .hraness-marketing-interfaces,
1281
+ .hraness-marketing-trust,
1282
+ .hraness-marketing-quotes,
1283
+ .hraness-marketing-pricing,
1284
+ .hraness-marketing-questions,
1285
+ .hraness-marketing-maker,
1286
+ .hraness-marketing-related,
1287
+ .hraness-marketing-cta
1288
+ ) {
1289
+ border-block-start: 0;
1290
+ }
1291
+
1292
+ .hraness-marketing-section,
1293
+ .hraness-marketing-interfaces,
1294
+ .hraness-marketing-trust,
1295
+ .hraness-marketing-questions,
1296
+ .hraness-marketing-related {
1297
+ display: grid;
1298
+ gap: clamp(1.5rem, 4vw, 3rem);
1299
+ }
1300
+
1301
+ .hraness-marketing-section__heading-group,
1302
+ .hraness-marketing-primitives__header,
1303
+ .hraness-marketing-interfaces__header,
1304
+ .hraness-marketing-trust__header,
1305
+ .hraness-marketing-quotes__header,
1306
+ .hraness-marketing-pricing__header,
1307
+ .hraness-marketing-questions__header,
1308
+ .hraness-marketing-maker__header,
1309
+ .hraness-marketing-related__header {
1310
+ display: grid;
1311
+ max-inline-size: var(--hraness-marketing-copy-measure);
1312
+ gap: 0.75rem;
1313
+ }
1314
+
1315
+ .hraness-marketing-section__body {
1316
+ display: grid;
1317
+ gap: 1rem;
1318
+ }
1319
+
1320
+ .hraness-marketing-section__body > :where(p) {
1321
+ max-inline-size: var(--hraness-marketing-prose-measure);
1322
+ margin: 0;
1323
+ }
1324
+
1325
+ .hraness-marketing-section__body > :first-child {
1326
+ margin-block-start: 0;
1327
+ }
1328
+
1329
+ .hraness-marketing-section__body > :last-child {
1330
+ margin-block-end: 0;
1331
+ }
1332
+
1333
+ .hraness-marketing-section[data-layout="split"],
1334
+ .hraness-marketing-section[data-layout="split-reverse"] {
1335
+ align-items: center;
1336
+ grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
1337
+ }
1338
+
1339
+ .hraness-marketing-section[data-layout="split-reverse"] > .hraness-marketing-section__heading-group {
1340
+ order: 2;
1341
+ }
1342
+
1343
+ .hraness-marketing-section[data-layout="split"] > .hraness-marketing-section__heading-group,
1344
+ .hraness-marketing-section[data-layout="split-reverse"] > .hraness-marketing-section__heading-group {
1345
+ max-inline-size: none;
1346
+ }
1347
+
1348
+ /* Related: labeled tiers of sibling cards */
1349
+
1350
+ .hraness-marketing-related__group {
1351
+ display: grid;
1352
+ gap: 1.5rem;
1353
+ min-inline-size: 0;
1354
+ }
1355
+
1356
+ .hraness-marketing-related__group-header {
1357
+ display: grid;
1358
+ max-inline-size: var(--hraness-marketing-copy-measure);
1359
+ gap: 0.5rem;
1360
+ }
1361
+
1362
+ /* Tier headings take the third heading size so a display face never renders
1363
+ * at caption size. */
1364
+ .hraness-marketing-related__group-heading {
1365
+ margin: 0;
1366
+ color: var(--hraness-marketing-ink);
1367
+ font-family: var(--hraness-marketing-heading-font);
1368
+ font-weight: var(--hraness-marketing-heading-weight);
1369
+ letter-spacing: var(--hraness-marketing-h2-tracking, -0.012em);
1370
+ line-height: var(--hraness-marketing-h3-leading, 1.15);
1371
+ text-wrap: balance;
1372
+ font-size: var(--hraness-marketing-h3-size, clamp(1.75rem, 1.35rem + 1.6vw, 2.5rem));
1373
+ }
1374
+
1375
+ .hraness-marketing-related__group-summary {
1376
+ margin: 0;
1377
+ color: var(--hraness-marketing-muted);
1378
+ font-family: var(--hraness-marketing-text-font);
1379
+ font-size: 1.125rem;
1380
+ line-height: 1.5;
1381
+ }
1382
+
1383
+ /* A related product is one linked row, as on the hraness.com project index:
1384
+ * its mark, its name, and its one-line description. Names and descriptions
1385
+ * stay in the text face at reading sizes. */
1386
+ .hraness-marketing-related__card {
1387
+ display: flex;
1388
+ flex-direction: row;
1389
+ align-items: center;
1390
+ position: relative;
1391
+ isolation: isolate;
1392
+ min-inline-size: 0;
1393
+ min-block-size: 100%;
1394
+ align-self: stretch;
1395
+ gap: 1rem;
1396
+ padding: clamp(1rem, 2vw, 1.25rem) clamp(1.125rem, 2.5vw, 1.5rem);
1397
+ border: var(--hraness-marketing-surface-rule);
1398
+ border-radius: var(--hraness-marketing-frame-radius);
1399
+ background: var(--hraness-marketing-surface);
1400
+ color: inherit;
1401
+ text-decoration: none;
1402
+ box-shadow: var(--hraness-marketing-surface-shadow);
1403
+ }
1404
+
1405
+ .hraness-marketing-related__card:hover {
1406
+ box-shadow: 0 0 0 1px var(--hraness-marketing-line-strong);
1407
+ }
1408
+
1409
+ .hraness-marketing-related__card:focus-visible {
1410
+ outline: 2px solid var(--hraness-marketing-accent);
1411
+ outline-offset: 2px;
1412
+ }
1413
+
1414
+ .hraness-marketing-related__card-mark {
1415
+ display: inline-flex;
1416
+ flex: 0 0 auto;
1417
+ align-items: center;
1418
+ justify-content: center;
1419
+ inline-size: 2.75rem;
1420
+ block-size: 2.75rem;
1421
+ }
1422
+
1423
+ .hraness-marketing-related__card-text {
1424
+ display: grid;
1425
+ gap: 0.25rem;
1426
+ min-inline-size: 0;
1427
+ }
1428
+
1429
+ .hraness-marketing-related__card-name {
1430
+ margin: 0;
1431
+ color: var(--hraness-marketing-ink);
1432
+ font-family: var(--hraness-marketing-text-font);
1433
+ font-size: 1.25rem;
1434
+ font-weight: 700;
1435
+ letter-spacing: -0.01em;
1436
+ line-height: 1.25;
1437
+ overflow-wrap: anywhere;
1438
+ }
1439
+
1440
+ .hraness-marketing-related__card-role {
1441
+ margin: 0;
1442
+ color: var(--hraness-marketing-ink);
1443
+ font-family: var(--hraness-marketing-text-font);
1444
+ font-size: 1.0625rem;
1445
+ line-height: 1.45;
1446
+ text-wrap: pretty;
1447
+ }
1448
+
1449
+ /* Primitives: numbered building blocks */
1450
+
1451
+ .hraness-marketing-primitives {
1452
+ display: grid;
1453
+ gap: clamp(1.5rem, 4vw, 3rem);
1454
+ }
1455
+
1456
+ .hraness-marketing-primitives__list {
1457
+ display: grid;
1458
+ align-items: stretch;
1459
+ margin: 0;
1460
+ padding: 0;
1461
+ list-style: none;
1462
+ gap: 1rem;
1463
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
1464
+ }
1465
+
1466
+ .hraness-marketing-primitives__list > * {
1467
+ min-block-size: 100%;
1468
+ align-self: stretch;
1469
+ }
1470
+
1471
+ .hraness-marketing-primitive {
1472
+ display: grid;
1473
+ min-inline-size: 0;
1474
+ min-block-size: 100%;
1475
+ align-content: start;
1476
+ gap: 0.6rem;
1477
+ padding: clamp(1.25rem, 2.5vw, 1.75rem);
1478
+ border: var(--hraness-marketing-surface-rule);
1479
+ border-radius: var(--hraness-marketing-frame-radius);
1480
+ background: var(--hraness-marketing-surface);
1481
+ box-shadow: var(--hraness-marketing-surface-shadow);
1482
+ }
1483
+
1484
+ .hraness-marketing-primitive__number {
1485
+ color: var(--hraness-marketing-accent);
1486
+ font-family: var(--hraness-marketing-mono-font);
1487
+ font-size: 0.78rem;
1488
+ font-weight: 500;
1489
+ }
1490
+
1491
+ .hraness-marketing-primitive__heading {
1492
+ margin: 0;
1493
+ font-size: 1.1rem;
1494
+ font-weight: 600;
1495
+ letter-spacing: -0.01em;
1496
+ }
1497
+
1498
+ .hraness-marketing-primitive p {
1499
+ margin: 0;
1500
+ color: var(--hraness-marketing-muted);
1501
+ font-size: 0.95rem;
1502
+ line-height: 1.5;
1503
+ }
1504
+
1505
+ .hraness-marketing-primitive > :where(pre, figure) {
1506
+ margin-block-start: 0.5rem;
1507
+ }
1508
+
1509
+ /* Interfaces and trust: cards */
1510
+
1511
+ .hraness-marketing-interface-grid,
1512
+ .hraness-marketing-trust-grid {
1513
+ display: grid;
1514
+ align-items: stretch;
1515
+ margin: 0;
1516
+ gap: 1rem;
1517
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
1518
+ }
1519
+
1520
+ .hraness-marketing-interface-grid > *,
1521
+ .hraness-marketing-trust-grid > * {
1522
+ min-block-size: 100%;
1523
+ align-self: stretch;
1524
+ }
1525
+
1526
+ .hraness-marketing-interface,
1527
+ .hraness-marketing-trust-item {
1528
+ display: grid;
1529
+ min-inline-size: 0;
1530
+ min-block-size: 100%;
1531
+ align-content: start;
1532
+ gap: 0.5rem;
1533
+ padding: clamp(1.25rem, 2.5vw, 1.75rem);
1534
+ border: var(--hraness-marketing-surface-rule);
1535
+ border-radius: var(--hraness-marketing-frame-radius);
1536
+ background: var(--hraness-marketing-surface);
1537
+ box-shadow: var(--hraness-marketing-surface-shadow);
1538
+ }
1539
+
1540
+ .hraness-marketing-interface :where(.hraness-marketing-interface__heading, p),
1541
+ .hraness-marketing-trust-item :where(dt, dd) {
1542
+ margin: 0;
1543
+ }
1544
+
1545
+ .hraness-marketing-interface__heading,
1546
+ .hraness-marketing-trust-item dt {
1547
+ font-size: 1.05rem;
1548
+ font-weight: 600;
1549
+ letter-spacing: -0.01em;
1550
+ }
1551
+
1552
+ .hraness-marketing-interface p,
1553
+ .hraness-marketing-trust-item dd {
1554
+ color: var(--hraness-marketing-muted);
1555
+ font-size: 0.95rem;
1556
+ line-height: 1.5;
1557
+ }
1558
+
1559
+ .hraness-marketing-interface pre {
1560
+ margin-block-start: 0.5rem;
1561
+ }
1562
+
1563
+ /* Equal-height product card rows. Direct children stretch to the tallest
1564
+ * item. Meta occupies a reserved two-line block so one long blurb does not
1565
+ * stagger the row. Titles wrap without clamping. Each card is a containing
1566
+ * block. The art well clips overflow and contains backgrounds so a logo
1567
+ * surface cannot paint through the gutter as one bar. */
1568
+ .hraness-marketing-card-row {
1569
+ display: grid;
1570
+ align-items: stretch;
1571
+ margin: 0;
1572
+ gap: 1rem;
1573
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
1574
+ }
1575
+
1576
+ .hraness-marketing-card-row > * {
1577
+ min-block-size: 100%;
1578
+ align-self: stretch;
1579
+ }
1580
+
1581
+ .hraness-marketing-card {
1582
+ display: flex;
1583
+ flex-direction: column;
1584
+ position: relative;
1585
+ isolation: isolate;
1586
+ min-inline-size: 0;
1587
+ min-block-size: 100%;
1588
+ gap: 0.5rem;
1589
+ padding: clamp(1.25rem, 2.5vw, 1.75rem);
1590
+ border: var(--hraness-marketing-surface-rule);
1591
+ border-radius: var(--hraness-marketing-frame-radius);
1592
+ background: var(--hraness-marketing-surface);
1593
+ color: inherit;
1594
+ text-decoration: none;
1595
+ box-shadow: var(--hraness-marketing-surface-shadow);
1596
+ }
1597
+
1598
+ .hraness-marketing-card__art {
1599
+ display: flex;
1600
+ flex: 0 0 auto;
1601
+ align-items: center;
1602
+ justify-content: center;
1603
+ position: relative;
1604
+ isolation: isolate;
1605
+ contain: paint;
1606
+ overflow: hidden;
1607
+ min-inline-size: 0;
1608
+ max-inline-size: 100%;
1609
+ inline-size: 100%;
1610
+ min-block-size: 2.75rem;
1611
+ border-radius: var(--hraness-marketing-radius);
1612
+ background-color: color-mix(in oklch, var(--hraness-marketing-ink) 8%, var(--hraness-marketing-surface));
1613
+ background-clip: border-box;
1614
+ background-origin: padding-box;
1615
+ background-attachment: scroll;
1616
+ }
1617
+
1618
+ .hraness-marketing-card__art > :is(img, svg, canvas, video) {
1619
+ max-inline-size: 100%;
1620
+ max-block-size: 100%;
1621
+ object-fit: contain;
1622
+ }
1623
+
1624
+ .hraness-marketing-card__title {
1625
+ margin: 0;
1626
+ font-size: 1.05rem;
1627
+ font-weight: 600;
1628
+ letter-spacing: -0.01em;
1629
+ overflow-wrap: anywhere;
1630
+ }
1631
+
1632
+ .hraness-marketing-card__meta {
1633
+ overflow: hidden;
1634
+ min-block-size: calc(var(--hraness-marketing-card-meta-lines, 2) * 1.45em);
1635
+ max-block-size: calc(var(--hraness-marketing-card-meta-lines, 2) * 1.45em);
1636
+ margin: 0;
1637
+ color: var(--hraness-marketing-muted);
1638
+ font-size: 0.85rem;
1639
+ line-height: 1.45;
1640
+ }
1641
+
1642
+ .hraness-marketing-card__body {
1643
+ display: flex;
1644
+ flex: 1 1 auto;
1645
+ flex-direction: column;
1646
+ min-block-size: 0;
1647
+ gap: 0.35rem;
1648
+ }
1649
+
1650
+ /* Quotes */
1651
+
1652
+ .hraness-marketing-quotes {
1653
+ display: grid;
1654
+ gap: clamp(1.5rem, 4vw, 3rem);
1655
+ }
1656
+
1657
+ .hraness-marketing-quote-grid {
1658
+ display: grid;
1659
+ align-items: stretch;
1660
+ margin: 0;
1661
+ padding: 0;
1662
+ list-style: none;
1663
+ gap: 1rem;
1664
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
1665
+ }
1666
+
1667
+ .hraness-marketing-quote-grid > * {
1668
+ min-block-size: 100%;
1669
+ align-self: stretch;
1670
+ }
1671
+
1672
+ .hraness-marketing-quote {
1673
+ display: grid;
1674
+ min-inline-size: 0;
1675
+ min-block-size: 100%;
1676
+ align-content: space-between;
1677
+ gap: 1.25rem;
1678
+ margin: 0;
1679
+ padding: clamp(1.25rem, 2.5vw, 1.75rem);
1680
+ border: var(--hraness-marketing-surface-rule);
1681
+ border-radius: var(--hraness-marketing-frame-radius);
1682
+ background: var(--hraness-marketing-surface);
1683
+ box-shadow: var(--hraness-marketing-surface-shadow);
1684
+ }
1685
+
1686
+ .hraness-marketing-quote blockquote {
1687
+ margin: 0;
1688
+ font-size: 1rem;
1689
+ line-height: 1.55;
1690
+ }
1691
+
1692
+ .hraness-marketing-quote blockquote p {
1693
+ margin: 0;
1694
+ }
1695
+
1696
+ .hraness-marketing-quote figcaption {
1697
+ display: flex;
1698
+ flex-wrap: wrap;
1699
+ align-items: baseline;
1700
+ gap: 0.25rem 0.5rem;
1701
+ color: var(--hraness-marketing-muted);
1702
+ font-size: 0.88rem;
1703
+ }
1704
+
1705
+ .hraness-marketing-quote figcaption strong {
1706
+ color: var(--hraness-marketing-ink);
1707
+ font-weight: 600;
1708
+ }
1709
+
1710
+ .hraness-marketing-quote figcaption a {
1711
+ color: inherit;
1712
+ text-decoration: none;
1713
+ }
1714
+
1715
+ .hraness-marketing-quote figcaption a:hover {
1716
+ text-decoration: underline;
1717
+ }
1718
+
1719
+ /* Pricing */
1720
+
1721
+ .hraness-marketing-pricing {
1722
+ display: grid;
1723
+ gap: clamp(1.5rem, 4vw, 3rem);
1724
+ }
1725
+
1726
+ .hraness-marketing-plan-grid {
1727
+ display: grid;
1728
+ align-items: stretch;
1729
+ margin: 0;
1730
+ padding: 0;
1731
+ list-style: none;
1732
+ gap: 1rem;
1733
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr));
1734
+ }
1735
+
1736
+ .hraness-marketing-plan-grid > * {
1737
+ min-block-size: 100%;
1738
+ align-self: stretch;
1739
+ }
1740
+
1741
+ .hraness-marketing-plan {
1742
+ display: grid;
1743
+ min-inline-size: 0;
1744
+ min-block-size: 100%;
1745
+ align-content: start;
1746
+ gap: 1rem;
1747
+ padding: clamp(1.5rem, 3vw, 2rem);
1748
+ border: var(--hraness-marketing-surface-rule);
1749
+ border-radius: var(--hraness-marketing-frame-radius);
1750
+ background: var(--hraness-marketing-surface);
1751
+ box-shadow: var(--hraness-marketing-surface-shadow);
1752
+ }
1753
+
1754
+ .hraness-marketing-plan[data-emphasis="primary"] {
1755
+ border-color: transparent;
1756
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--hraness-marketing-accent) 30%, transparent), var(--hraness-marketing-surface-shadow);
1757
+ }
1758
+
1759
+ .hraness-marketing-plan__name {
1760
+ margin: 0;
1761
+ font-size: 1.1rem;
1762
+ font-weight: 600;
1763
+ }
1764
+
1765
+ .hraness-marketing-plan__price {
1766
+ display: flex;
1767
+ align-items: baseline;
1768
+ gap: 0.35rem;
1769
+ margin: 0;
1770
+ }
1771
+
1772
+ .hraness-marketing-plan__price strong {
1773
+ font-family: var(--hraness-marketing-heading-font);
1774
+ font-size: 2.25rem;
1775
+ font-weight: 500;
1776
+ letter-spacing: -0.02em;
1777
+ line-height: 1;
1778
+ }
1779
+
1780
+ .hraness-marketing-plan__price span {
1781
+ color: var(--hraness-marketing-muted);
1782
+ font-size: 0.95rem;
1783
+ }
1784
+
1785
+ .hraness-marketing-plan__summary {
1786
+ margin: 0;
1787
+ color: var(--hraness-marketing-muted);
1788
+ font-size: 0.95rem;
1789
+ }
1790
+
1791
+ .hraness-marketing-plan__features {
1792
+ display: grid;
1793
+ margin: 0;
1794
+ padding: 0;
1795
+ list-style: none;
1796
+ gap: 0.5rem;
1797
+ font-size: 0.95rem;
1798
+ }
1799
+
1800
+ .hraness-marketing-plan__features li {
1801
+ display: grid;
1802
+ gap: 0.6rem;
1803
+ grid-template-columns: 1rem minmax(0, 1fr);
1804
+ }
1805
+
1806
+ .hraness-marketing-plan__features li::before {
1807
+ content: "";
1808
+ inline-size: 1rem;
1809
+ block-size: 1rem;
1810
+ margin-block-start: 0.2rem;
1811
+ border-radius: 999px;
1812
+ background:
1813
+ linear-gradient(var(--hraness-marketing-accent), var(--hraness-marketing-accent)) center / 0.4rem 0.4rem no-repeat,
1814
+ var(--hraness-marketing-accent-soft);
1815
+ }
1816
+
1817
+ .hraness-marketing-plan__note {
1818
+ margin: 0;
1819
+ color: var(--hraness-marketing-muted);
1820
+ font-size: 0.85rem;
1821
+ }
1822
+
1823
+ .hraness-marketing-plan .hraness-marketing-action {
1824
+ justify-self: start;
1825
+ }
1826
+
1827
+ /* Questions */
1828
+
1829
+ .hraness-marketing-question-list {
1830
+ display: grid;
1831
+ }
1832
+
1833
+ .hraness-marketing-question {
1834
+ border-block-start: var(--hraness-marketing-rule);
1835
+ }
1836
+
1837
+ .hraness-marketing-question:last-child {
1838
+ border-block-end: var(--hraness-marketing-rule);
1839
+ }
1840
+
1841
+ .hraness-marketing-question summary {
1842
+ display: flex;
1843
+ min-block-size: 3.25rem;
1844
+ align-items: center;
1845
+ justify-content: space-between;
1846
+ gap: 1rem;
1847
+ padding-block: 1rem;
1848
+ color: var(--hraness-marketing-ink);
1849
+ cursor: pointer;
1850
+ font-size: 1.05rem;
1851
+ font-weight: 500;
1852
+ list-style: none;
1853
+ }
1854
+
1855
+ .hraness-marketing-question summary::-webkit-details-marker {
1856
+ display: none;
1857
+ }
1858
+
1859
+ .hraness-marketing-question summary::after {
1860
+ content: "+";
1861
+ flex: 0 0 auto;
1862
+ color: var(--hraness-marketing-muted);
1863
+ font-size: 1.25rem;
1864
+ font-weight: 400;
1865
+ line-height: 1;
1866
+ }
1867
+
1868
+ .hraness-marketing-question[open] summary::after {
1869
+ transform: rotate(45deg);
1870
+ }
1871
+
1872
+ .hraness-marketing-question summary:focus-visible {
1873
+ outline: 2px solid var(--hraness-marketing-accent);
1874
+ outline-offset: 2px;
1875
+ border-radius: 0.25rem;
1876
+ }
1877
+
1878
+ .hraness-marketing-question__answer {
1879
+ max-inline-size: var(--hraness-marketing-prose-measure);
1880
+ padding-block: 0 1.5rem;
1881
+ color: var(--hraness-marketing-muted);
1882
+ line-height: 1.6;
1883
+ }
1884
+
1885
+ .hraness-marketing-question__answer > :first-child {
1886
+ margin-block-start: 0;
1887
+ }
1888
+
1889
+ .hraness-marketing-question__answer > :last-child {
1890
+ margin-block-end: 0;
1891
+ }
1892
+
1893
+ /* Maker */
1894
+
1895
+ .hraness-marketing-maker {
1896
+ display: grid;
1897
+ align-items: start;
1898
+ gap: clamp(1.5rem, 4vw, 3rem);
1899
+ grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
1900
+ }
1901
+
1902
+ .hraness-marketing-maker__portrait {
1903
+ inline-size: 4.5rem;
1904
+ block-size: 4.5rem;
1905
+ overflow: hidden;
1906
+ border-radius: 999px;
1907
+ background: var(--hraness-marketing-accent-soft);
1908
+ }
1909
+
1910
+ .hraness-marketing-maker__portrait :where(img, svg) {
1911
+ display: block;
1912
+ inline-size: 100%;
1913
+ block-size: 100%;
1914
+ object-fit: cover;
1915
+ }
1916
+
1917
+ .hraness-marketing-maker__body {
1918
+ display: grid;
1919
+ min-inline-size: 0;
1920
+ gap: 1rem;
1921
+ }
1922
+
1923
+ .hraness-marketing-maker__body > p {
1924
+ max-inline-size: var(--hraness-marketing-prose-measure);
1925
+ margin: 0;
1926
+ color: var(--hraness-marketing-muted);
1927
+ font-size: 1.05rem;
1928
+ line-height: 1.55;
1929
+ }
1930
+
1931
+ .hraness-marketing-maker__links {
1932
+ display: flex;
1933
+ flex-wrap: wrap;
1934
+ gap: 0.5rem 1.25rem;
1935
+ margin: 0;
1936
+ padding: 0;
1937
+ list-style: none;
1938
+ font-size: 0.95rem;
1939
+ font-weight: 500;
1940
+ }
1941
+
1942
+ /* Closing call to action */
1943
+
1944
+ .hraness-marketing-cta {
1945
+ display: grid;
1946
+ justify-items: center;
1947
+ gap: 1.25rem;
1948
+ padding-block: var(--hraness-marketing-section-space);
1949
+ border-block-start: var(--hraness-marketing-rule);
1950
+ text-align: center;
1951
+ }
1952
+
1953
+ .hraness-marketing-cta__heading {
1954
+ max-inline-size: 20ch;
1955
+ font-size: var(--hraness-paper-section-heading-size, clamp(2rem, 4vw, 3.25rem));
1956
+ letter-spacing: var(--hraness-marketing-h2-tracking, var(--hraness-marketing-heading-tracking));
1957
+ line-height: var(--hraness-marketing-h2-leading, 1.08);
1958
+ }
1959
+
1960
+ .hraness-marketing-cta__summary {
1961
+ max-inline-size: var(--hraness-marketing-copy-measure);
1962
+ }
1963
+
1964
+ .hraness-marketing-cta__actions {
1965
+ justify-content: center;
1966
+ margin-block-start: 0.5rem;
1967
+ }
1968
+
1969
+ .hraness-marketing-cta__footnote {
1970
+ margin: 0;
1971
+ color: var(--hraness-marketing-muted);
1972
+ font-size: 0.9rem;
1973
+ }
1974
+
1975
+ .hraness-marketing-cta[data-tone="accent"] {
1976
+ --hraness-marketing-ink: var(--hraness-marketing-accent-ink);
1977
+ --hraness-marketing-muted: color-mix(in srgb, var(--hraness-marketing-accent-ink) 78%, transparent);
1978
+ --hraness-marketing-line-strong: color-mix(in srgb, var(--hraness-marketing-accent-ink) 40%, transparent);
1979
+ --hraness-marketing-surface: transparent;
1980
+ border-block-start: 0;
1981
+ background: var(--hraness-marketing-accent);
1982
+ box-shadow: 0 0 0 100vmax var(--hraness-marketing-accent);
1983
+ clip-path: inset(0 -100vmax);
1984
+ color: var(--hraness-marketing-accent-ink);
1985
+ }
1986
+
1987
+ .hraness-marketing-cta[data-tone="accent"] .hraness-marketing-action[data-emphasis="primary"] {
1988
+ --hraness-foil-surface: var(--hraness-marketing-accent-ink);
1989
+ color: var(--hraness-marketing-accent);
1990
+ }
1991
+
1992
+ .hraness-marketing-cta[data-tone="accent"] .hraness-marketing-action[data-emphasis="secondary"] {
1993
+ background: transparent;
1994
+ color: var(--hraness-marketing-accent-ink);
1995
+ }
1996
+
1997
+ /* Responsive */
1998
+
1999
+ @media (max-width: 48rem) {
2000
+ /* Phones: brand, primary action, and appearance menu share the first row;
2001
+ * navigation takes a second full-bleed row that scrolls sideways without a
2002
+ * visible scrollbar. Every control keeps a 44px target. */
2003
+ .hraness-marketing-header__inner {
2004
+ flex-wrap: wrap;
2005
+ gap: 0 1rem;
2006
+ padding-block: 0.25rem 0;
2007
+ }
2008
+
2009
+ .hraness-marketing-header__brand {
2010
+ min-block-size: 2.75rem;
2011
+ min-inline-size: 0;
2012
+ }
2013
+
2014
+ .hraness-marketing-header__actions {
2015
+ margin-inline-start: auto;
2016
+ }
2017
+
2018
+ .hraness-marketing-header .hraness-marketing-action {
2019
+ min-block-size: max(2.75rem, var(--hraness-marketing-header-action-height, 2rem));
2020
+ }
2021
+
2022
+ .hraness-marketing-header__nav {
2023
+ order: 3;
2024
+ flex-grow: 1;
2025
+ flex-shrink: 0;
2026
+ flex-basis: 100%;
2027
+ flex-wrap: nowrap;
2028
+ gap: 0 1.25rem;
2029
+ margin-inline-start: calc(-1 * var(--hraness-marketing-gutter));
2030
+ margin-inline-end: calc(-1 * var(--hraness-marketing-gutter));
2031
+ padding-block: 0.25rem;
2032
+ padding-inline: var(--hraness-marketing-gutter);
2033
+ overflow-x: auto;
2034
+ scrollbar-width: none;
2035
+ /* The scrolling row never widens the header's intrinsic size. */
2036
+ contain: inline-size;
2037
+ }
2038
+
2039
+ .hraness-marketing-header__nav a {
2040
+ display: inline-flex;
2041
+ flex-shrink: 0;
2042
+ align-items: center;
2043
+ min-block-size: 2.75rem;
2044
+ white-space: nowrap;
2045
+ }
2046
+
2047
+ .hraness-marketing-hero__heading {
2048
+ max-inline-size: 16ch;
2049
+ }
2050
+
2051
+ .hraness-marketing-install,
2052
+ .hraness-marketing-section[data-layout="split"],
2053
+ .hraness-marketing-section[data-layout="split-reverse"],
2054
+ .hraness-marketing-maker {
2055
+ grid-template-columns: minmax(0, 1fr);
2056
+ }
2057
+
2058
+ .hraness-marketing-section[data-layout="split-reverse"] > .hraness-marketing-section__heading-group {
2059
+ order: 0;
2060
+ }
2061
+
2062
+ .hraness-marketing-facts,
2063
+ .hraness-marketing-stats__list {
2064
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2065
+ }
2066
+
2067
+ .hraness-marketing-facts > div:nth-child(odd),
2068
+ .hraness-marketing-stats__list > div:nth-child(odd) {
2069
+ border-inline-start: 0;
2070
+ }
2071
+
2072
+ .hraness-marketing-facts > div:nth-child(n + 3),
2073
+ .hraness-marketing-stats__list > div:nth-child(n + 3) {
2074
+ border-block-start: var(--hraness-marketing-rule);
2075
+ }
2076
+
2077
+ .hraness-marketing-pillars {
2078
+ grid-template-columns: minmax(0, 1fr);
2079
+ }
2080
+
2081
+ .hraness-marketing-pillars > div + div {
2082
+ border-inline-start: 0;
2083
+ border-block-start: var(--hraness-marketing-rule);
2084
+ }
2085
+
2086
+ .hraness-marketing-install__heading {
2087
+ max-inline-size: none;
2088
+ }
2089
+ }
2090
+
2091
+ @media (pointer: coarse) {
2092
+ .hraness-marketing-action,
2093
+ .hraness-marketing-question summary {
2094
+ min-block-size: 3rem;
2095
+ }
2096
+ }
2097
+
2098
+ @media (forced-colors: active) {
2099
+ .hraness-marketing-plan[data-emphasis="primary"] {
2100
+ border-color: CanvasText;
2101
+ box-shadow: none;
2102
+ }
2103
+ .hraness-marketing-proof-frame__chrome {
2104
+ border-block-end: 1px solid CanvasText;
2105
+ box-shadow: none;
2106
+ }
2107
+ .hraness-marketing-proof-frame__address {
2108
+ outline: 1px solid CanvasText;
2109
+ background: Canvas;
2110
+ }
2111
+ .hraness-marketing-header,
2112
+ .hraness-marketing-hero[data-tone="accent"],
2113
+ .hraness-marketing-cta[data-tone="accent"],
2114
+ .hraness-marketing-proof,
2115
+ .hraness-marketing-proof-frame,
2116
+ .hraness-marketing-install,
2117
+ .hraness-marketing-primitive,
2118
+ .hraness-marketing-interface,
2119
+ .hraness-marketing-trust-item,
2120
+ .hraness-marketing-card,
2121
+ .hraness-marketing-card__art,
2122
+ .hraness-marketing-related__card,
2123
+ .hraness-marketing-quote,
2124
+ .hraness-marketing-plan {
2125
+ border: 1px solid CanvasText;
2126
+ background: Canvas;
2127
+ box-shadow: none;
2128
+ color: CanvasText;
2129
+ }
2130
+
2131
+ .hraness-marketing-data-table__scroll,
2132
+ .hraness-marketing-data-table__table tbody :where(th, td) {
2133
+ border-color: CanvasText;
2134
+ }
2135
+
2136
+ .hraness-marketing-data-table__table thead :where(th),
2137
+ .hraness-marketing-data-table__table :where([data-tone]),
2138
+ .hraness-marketing-data-table__meta,
2139
+ .hraness-marketing-data-table__note {
2140
+ color: CanvasText;
2141
+ }
2142
+
2143
+ .hraness-marketing-hero__eyebrow {
2144
+ color: CanvasText;
2145
+ }
2146
+
2147
+ .hraness-foil {
2148
+ border-color: ButtonText;
2149
+ background-image: none;
2150
+ box-shadow: none;
2151
+ }
2152
+
2153
+ .hraness-foil {
2154
+ background-color: Canvas;
2155
+ color: CanvasText;
2156
+ }
2157
+
2158
+ .hraness-foil-text,
2159
+ .hraness-marketing-header__brand {
2160
+ background-image: none;
2161
+ color: CanvasText;
2162
+ -webkit-text-fill-color: CanvasText;
2163
+ filter: none;
2164
+ }
2165
+ }
2166
+
2167
+ /* Keep all meaningful hero content above the inert decorative backdrop. */
2168
+ .hraness-marketing-hero > :where(.hraness-marketing-hero__copy, .hraness-marketing-hero__frame, .hraness-marketing-proof, .hraness-marketing-facts) {
2169
+ position: relative;
2170
+ z-index: 1;
2171
+ }
2172
+
2173
+ }
2174
+
2175
+ /* Marketing action forced-colors compatibility: keep this final block self-contained. */
2176
+ @media (forced-colors: active) {
2177
+ .hraness-marketing-action,
2178
+ .hraness-marketing-action[data-emphasis="primary"],
2179
+ .hraness-marketing-hero[data-tone="accent"] .hraness-marketing-action,
2180
+ .hraness-marketing-cta[data-tone="accent"] .hraness-marketing-action {
2181
+ border-color: ButtonText;
2182
+ background: ButtonFace;
2183
+ color: ButtonText;
2184
+ box-shadow: none;
2185
+ }
2186
+ }