@gradial/aci 0.1.20-preview.2 → 0.1.20

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 (249) hide show
  1. package/README.md +48 -110
  2. package/bin/{aci → aci-darwin-arm64} +0 -0
  3. package/bin/aci.js +99 -6
  4. package/dist/assets/index.d.ts +3 -3
  5. package/dist/assets/index.js +3 -3
  6. package/dist/astro/index.d.ts +14 -3
  7. package/dist/astro/index.js +24 -5
  8. package/dist/content/assets.d.ts +17 -0
  9. package/dist/content/assets.js +65 -0
  10. package/dist/content/index.d.ts +2 -0
  11. package/dist/content/index.js +2 -0
  12. package/dist/content/provider.d.ts +19 -0
  13. package/dist/content/provider.js +7 -0
  14. package/dist/content/resolve-slots.d.ts +9 -0
  15. package/dist/content/resolve-slots.js +24 -0
  16. package/dist/content/types.d.ts +1 -1
  17. package/dist/define-component.d.ts +1 -2
  18. package/dist/define-component.js +73 -11
  19. package/dist/define-layout.d.ts +2 -0
  20. package/dist/define-layout.js +3 -0
  21. package/dist/dev/content-watch.d.ts +37 -0
  22. package/dist/dev/content-watch.js +154 -0
  23. package/dist/dev/index.d.ts +24 -43
  24. package/dist/dev/index.js +4 -169
  25. package/dist/index.d.ts +14 -5
  26. package/dist/index.js +8 -8
  27. package/dist/next/asset-route.d.ts +2 -0
  28. package/dist/next/asset-route.js +12 -4
  29. package/dist/next/config.d.ts +2 -2
  30. package/dist/next/config.js +6 -6
  31. package/dist/next/content-watch.js +6 -1
  32. package/dist/next/index.d.ts +2 -2
  33. package/dist/next/index.js +2 -2
  34. package/dist/next/middleware.d.ts +7 -3
  35. package/dist/next/middleware.js +12 -7
  36. package/dist/next/page.d.ts +16 -15
  37. package/dist/next/page.js +30 -10
  38. package/dist/next/render.d.ts +5 -0
  39. package/dist/next/render.js +17 -0
  40. package/dist/next/root-layout.d.ts +4 -0
  41. package/dist/next/root-layout.js +5 -0
  42. package/dist/next/server.d.ts +14 -13
  43. package/dist/next/server.js +13 -3
  44. package/dist/providers/file.d.ts +2 -0
  45. package/dist/providers/file.js +61 -1
  46. package/dist/providers/s3.d.ts +1 -0
  47. package/dist/providers/s3.js +14 -1
  48. package/dist/react/Media.d.ts +24 -0
  49. package/dist/react/Media.js +30 -0
  50. package/dist/react/Picture.d.ts +12 -0
  51. package/dist/react/Picture.js +11 -0
  52. package/dist/react/VideoPlayer.d.ts +13 -0
  53. package/dist/react/{GradialVideoPlayer.js → VideoPlayer.js} +6 -5
  54. package/dist/react/index.d.ts +333 -3
  55. package/dist/react/index.js +89 -3
  56. package/dist/registry.d.ts +15 -0
  57. package/dist/registry.js +10 -0
  58. package/dist/testing/index.d.ts +3 -0
  59. package/dist/testing/index.js +15 -2
  60. package/dist/types/block-ref.d.ts +26 -0
  61. package/dist/types/block-ref.js +28 -0
  62. package/dist/types/component.d.ts +36 -41
  63. package/dist/types/config.d.ts +1 -2
  64. package/dist/types/image.d.ts +33 -20
  65. package/dist/types/image.js +42 -50
  66. package/dist/types/index.d.ts +1 -0
  67. package/dist/types/index.js +1 -0
  68. package/dist/types/link.d.ts +38 -0
  69. package/dist/types/link.js +58 -0
  70. package/dist/types/media.d.ts +16 -35
  71. package/dist/types/media.js +15 -84
  72. package/dist/types/page.d.ts +1 -2
  73. package/dist/types/render-mode.d.ts +0 -1
  74. package/dist/types/renderer.d.ts +1 -1
  75. package/dist/types/rich-text.d.ts +40 -0
  76. package/dist/types/rich-text.js +39 -0
  77. package/dist/types/video.d.ts +7 -13
  78. package/dist/types/video.js +3 -3
  79. package/package.json +32 -74
  80. package/src/cli/compile-registry.mjs +236 -59
  81. package/src/cli/validate-content.mjs +38 -75
  82. package/src/types/image.ts +79 -60
  83. package/templates/astro/template/.aci.yaml +27 -0
  84. package/templates/astro/template/.storybook/main.ts +79 -0
  85. package/templates/astro/template/.storybook/manager.ts +6 -0
  86. package/templates/astro/template/.storybook/preview.ts +33 -0
  87. package/templates/astro/template/astro.config.mjs +37 -0
  88. package/templates/astro/template/package.json.tmpl +41 -0
  89. package/templates/astro/template/src/cms/contracts/layouts/index.ts +18 -0
  90. package/templates/astro/template/src/cms/registry.ts +28 -0
  91. package/templates/astro/template/src/components/chrome/Footer.astro +107 -0
  92. package/templates/astro/template/src/components/chrome/Header.astro +94 -0
  93. package/templates/astro/template/src/components/elements/AtomicBlock.astro +15 -0
  94. package/templates/astro/template/src/components/elements/AtomicBlocks.astro +16 -0
  95. package/templates/astro/template/src/components/elements/Button.astro +51 -0
  96. package/templates/astro/template/src/components/elements/ButtonBlock.astro +25 -0
  97. package/templates/astro/template/src/components/elements/Container.astro +11 -0
  98. package/templates/astro/template/src/components/elements/Icon.astro +31 -0
  99. package/templates/astro/template/src/components/elements/Logo.astro +29 -0
  100. package/templates/astro/template/src/components/elements/RemoteImage.astro +41 -0
  101. package/templates/astro/template/src/components/sections/ContainerSection.astro +32 -0
  102. package/templates/astro/template/src/components/sections/FeatureCard.astro +23 -0
  103. package/templates/astro/template/src/components/sections/FeatureGrid.astro +35 -0
  104. package/templates/astro/template/src/components/sections/HomeHero.astro +51 -0
  105. package/templates/astro/template/src/components/sections/StatsBar.astro +33 -0
  106. package/templates/astro/template/src/design-system/styles.css +399 -0
  107. package/templates/astro/template/src/design-system/tokens/colors.css +60 -0
  108. package/templates/astro/template/src/design-system/tokens/components.css +69 -0
  109. package/templates/astro/template/src/design-system/tokens/index.css +6 -0
  110. package/templates/astro/template/src/design-system/tokens/radii.css +5 -0
  111. package/templates/astro/template/src/design-system/tokens/shadows.css +5 -0
  112. package/templates/astro/template/src/design-system/tokens/spacing.css +13 -0
  113. package/templates/astro/template/src/design-system/tokens/typography.css +24 -0
  114. package/templates/astro/template/src/env.d.ts +1 -0
  115. package/templates/astro/template/src/fixtures/atomicBlocks.ts +33 -0
  116. package/templates/astro/template/src/fixtures/composition.ts +31 -0
  117. package/templates/astro/template/src/fixtures/index.ts +17 -0
  118. package/templates/astro/template/src/fixtures/sections.ts +39 -0
  119. package/templates/astro/template/src/layouts/SiteLayout.astro +30 -0
  120. package/templates/astro/template/src/pages/[...slug].astro +61 -0
  121. package/templates/astro/template/src/render/RenderPage.astro +66 -0
  122. package/templates/astro/template/src/stories/CompositionStoryFrame.astro +15 -0
  123. package/templates/astro/template/src/stories/HomeHero.stories.ts +24 -0
  124. package/templates/astro/template/src/stories/SectionStoryFrame.astro +16 -0
  125. package/templates/astro/template/src/stories/StoryDocFrame.astro +31 -0
  126. package/templates/astro/template/tsconfig.json +11 -0
  127. package/templates/common/.agents/AGENTS.md +37 -0
  128. package/templates/common/.agents/skills/aci/SKILL.md +162 -0
  129. package/templates/common/.agents/skills/authoring/SKILL.md +590 -0
  130. package/templates/common/.agents/skills/authoring/references/block-registry.md +151 -0
  131. package/templates/common/.agents/skills/authoring/references/contracts.md +153 -0
  132. package/templates/common/.agents/skills/authoring/references/design-system.md +171 -0
  133. package/templates/common/.agents/skills/authoring/references/image-assets.md +73 -0
  134. package/templates/common/.agents/skills/authoring/references/repo-structure.md +157 -0
  135. package/templates/common/.agents/skills/migration/SKILL.md +160 -0
  136. package/templates/common/.agents/skills/migration/references/analyzing-source.md +215 -0
  137. package/templates/common/.agents/skills/migration/references/component-migration.md +200 -0
  138. package/templates/common/.agents/skills/migration/references/selector-map.md +31 -0
  139. package/templates/common/.content/.gradial-dam/blobs/sha256/7f/bf/7fbfc7fe230ff12688c496f660119e41d9725c4504d82e310c15665c73c09292 +0 -0
  140. package/templates/common/.content/.gradial-dam/blobs/sha256/a0/f5/a0f506689de9b15a7055f70103a3f02cd3ba105771ae2de6754df2ede1210d3a +0 -0
  141. package/templates/common/.content/.gradial-dam/blobs/sha256/dd/b7/ddb7e9642be08317bcd4b2bd26b58ba8d0d34dd7239e03e684a4f3634fa3845b +0 -0
  142. package/templates/common/.content/.gradial-dam/blobs/sha256/fb/32/fb3260e8286ea8231ea1c77b9c0be92d6edd9026565731eb14cfdcfd6b1b75b3 +0 -0
  143. package/templates/common/.content/config/site.json +192 -0
  144. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/asset.json +9 -0
  145. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/editorial.json +14 -0
  146. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/governance.json +23 -0
  147. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/versions/v0001.json +37 -0
  148. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/asset.json +9 -0
  149. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/editorial.json +14 -0
  150. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/governance.json +23 -0
  151. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/versions/v0001.json +37 -0
  152. package/templates/common/.content/fragments/navbar/_index.json +25 -0
  153. package/templates/common/.content/fragments/site-footer/_index.json +62 -0
  154. package/templates/common/.content/pages/about/_index.json +51 -0
  155. package/templates/common/.content/pages/home/_index.json +112 -0
  156. package/templates/common/.content/schemas/site.schema.json +123 -0
  157. package/templates/common/README.md.tmpl +45 -0
  158. package/templates/common/contracts/components/button.contract.ts +19 -0
  159. package/templates/common/contracts/components/container.contract.ts +19 -0
  160. package/templates/common/contracts/components/featureCard.contract.ts +15 -0
  161. package/templates/common/contracts/components/featureGrid.contract.ts +16 -0
  162. package/templates/common/contracts/components/homeHero.contract.ts +36 -0
  163. package/templates/common/contracts/components/index.ts +21 -0
  164. package/templates/common/contracts/components/siteFooter.contract.ts +45 -0
  165. package/templates/common/contracts/components/siteNavigation.contract.ts +30 -0
  166. package/templates/common/contracts/components/statsBar.contract.ts +19 -0
  167. package/templates/common/design-system/styles.css +346 -0
  168. package/templates/common/design-system/tokens/colors.css +110 -0
  169. package/templates/common/design-system/tokens/components.css +86 -0
  170. package/templates/common/design-system/tokens/index.css +6 -0
  171. package/templates/common/design-system/tokens/radii.css +5 -0
  172. package/templates/common/design-system/tokens/shadows.css +9 -0
  173. package/templates/common/design-system/tokens/spacing.css +26 -0
  174. package/templates/common/design-system/tokens/typography.css +32 -0
  175. package/templates/common/eslint-rules/no-raw-tailwind-values.js +127 -0
  176. package/templates/common/public/assets/Dwire-model.png +0 -0
  177. package/templates/common/public/assets/bare-metal-logo.png +0 -0
  178. package/templates/common/public/assets/meridian-logo.svg +8 -0
  179. package/templates/common/public/assets/seattle.avif +0 -0
  180. package/templates/nextjs/template/.aci.yaml +25 -0
  181. package/templates/nextjs/template/.storybook/main.ts +13 -0
  182. package/templates/nextjs/template/.storybook/preview.ts +34 -0
  183. package/templates/nextjs/template/eslint.config.mjs +36 -0
  184. package/templates/nextjs/template/next-env.d.ts +6 -0
  185. package/templates/nextjs/template/next.config.ts +8 -0
  186. package/templates/nextjs/template/package.json.tmpl +46 -0
  187. package/templates/nextjs/template/postcss.config.mjs +7 -0
  188. package/templates/nextjs/template/src/app/[[...slug]]/page.tsx +8 -0
  189. package/templates/nextjs/template/src/app/gradial/assets/[releaseId]/[...path]/route.ts +31 -0
  190. package/templates/nextjs/template/src/app/layout.tsx +29 -0
  191. package/templates/nextjs/template/src/cms/contracts/components/button.contract.ts +19 -0
  192. package/templates/nextjs/template/src/cms/contracts/components/container.contract.ts +20 -0
  193. package/templates/nextjs/template/src/cms/contracts/components/homeHero.contract.ts +36 -0
  194. package/templates/nextjs/template/src/cms/contracts/components/index.ts +15 -0
  195. package/templates/nextjs/template/src/cms/contracts/components/siteFooter.contract.ts +45 -0
  196. package/templates/nextjs/template/src/cms/contracts/components/siteNavigation.contract.ts +30 -0
  197. package/templates/nextjs/template/src/cms/contracts/layouts/index.ts +16 -0
  198. package/templates/nextjs/template/src/cms/registry.ts +28 -0
  199. package/templates/nextjs/template/src/components/chrome/Footer.tsx +86 -0
  200. package/templates/nextjs/template/src/components/chrome/Header.tsx +74 -0
  201. package/templates/nextjs/template/src/components/elements/AtomicBlock.tsx +13 -0
  202. package/templates/nextjs/template/src/components/elements/Button.tsx +40 -0
  203. package/templates/nextjs/template/src/components/elements/ButtonBlock.tsx +18 -0
  204. package/templates/nextjs/template/src/components/elements/Container.tsx +14 -0
  205. package/templates/nextjs/template/src/components/elements/Icon.tsx +29 -0
  206. package/templates/nextjs/template/src/components/elements/Logo.tsx +38 -0
  207. package/templates/nextjs/template/src/components/sections/ContainerSection.tsx +28 -0
  208. package/templates/nextjs/template/src/components/sections/FeatureCard.tsx +25 -0
  209. package/templates/nextjs/template/src/components/sections/FeatureGrid.tsx +36 -0
  210. package/templates/nextjs/template/src/components/sections/HomeHero.tsx +62 -0
  211. package/templates/nextjs/template/src/components/sections/StatsBar.tsx +30 -0
  212. package/templates/nextjs/template/src/middleware.ts +4 -0
  213. package/templates/nextjs/template/src/stories/Button.stories.tsx +38 -0
  214. package/templates/nextjs/template/src/stories/Header.stories.tsx +30 -0
  215. package/templates/nextjs/template/src/stories/HomeHero.stories.tsx +33 -0
  216. package/templates/nextjs/template/tsconfig.json +23 -0
  217. package/templates/nextjs/template/vercel.json +6 -0
  218. package/dist/content/cache.test.d.ts +0 -1
  219. package/dist/content/cache.test.js +0 -86
  220. package/dist/content/contract.d.ts +0 -83
  221. package/dist/content/contract.js +0 -104
  222. package/dist/content/tailwind-validator.d.ts +0 -6
  223. package/dist/content/tailwind-validator.js +0 -31
  224. package/dist/content/validation.d.ts +0 -108
  225. package/dist/content/validation.js +0 -184
  226. package/dist/next/preview-banner.d.ts +0 -4
  227. package/dist/next/preview-banner.js +0 -51
  228. package/dist/next/preview.d.ts +0 -7
  229. package/dist/next/preview.js +0 -37
  230. package/dist/react/GradialMedia.d.ts +0 -24
  231. package/dist/react/GradialMedia.js +0 -31
  232. package/dist/react/GradialPicture.d.ts +0 -14
  233. package/dist/react/GradialPicture.js +0 -30
  234. package/dist/react/GradialVideoPlayer.d.ts +0 -13
  235. package/dist/sveltekit/index.d.ts +0 -23
  236. package/dist/sveltekit/index.js +0 -62
  237. package/dist/sveltekit/preview.d.ts +0 -5
  238. package/dist/sveltekit/preview.js +0 -33
  239. package/src/cli/verify-renderer.mjs +0 -73
  240. package/src/types/component.ts +0 -59
  241. package/src/types/config.ts +0 -38
  242. package/src/types/data.ts +0 -47
  243. package/src/types/index.ts +0 -10
  244. package/src/types/layout.ts +0 -29
  245. package/src/types/media.ts +0 -125
  246. package/src/types/page.ts +0 -48
  247. package/src/types/render-mode.ts +0 -18
  248. package/src/types/renderer.ts +0 -83
  249. package/src/types/video.ts +0 -66
@@ -0,0 +1,346 @@
1
+ @import "tailwindcss" source(none);
2
+ @import "./tokens/index.css";
3
+
4
+ @source "../**/*.{astro,tsx,svelte,ts,jsx}";
5
+ @source "../../.content/**/*.json";
6
+
7
+ :root {
8
+ color-scheme: light;
9
+ }
10
+
11
+ [dir="rtl"] {
12
+ --gradient-hero-overlay: var(--gradient-hero-overlay-rtl);
13
+ }
14
+
15
+ .theme-auto,
16
+ .theme-light {
17
+ color: var(--color-fg);
18
+ --color-fg: var(--color-text-primary);
19
+ --color-fg-muted: var(--color-text-secondary);
20
+ --color-surface-default: var(--color-white);
21
+ --color-surface-raised-default: var(--color-surface-100);
22
+ --color-edge: var(--color-border-default);
23
+ --color-icon-default: var(--color-text-tertiary);
24
+ --color-link-hover: var(--color-brand-600);
25
+ --color-callout-icon-bg-default: var(--color-callout-icon-bg-light);
26
+ --rich-text-quote-bg-default: var(--rich-text-quote-bg);
27
+ --rich-text-inline-code-bg-default: var(--rich-text-inline-code-bg);
28
+ --shadow-card-default: var(--shadow-card);
29
+ --gradient-cta-default: var(--gradient-cta);
30
+
31
+ --button-primary-bg: var(--color-accent-primary);
32
+ --button-primary-text: var(--color-white);
33
+ --button-primary-border: var(--color-accent-primary);
34
+ --button-primary-hover-bg: var(--color-brand-500);
35
+ --button-primary-hover-border: var(--color-brand-500);
36
+
37
+ --button-secondary-bg: var(--color-surface-100);
38
+ --button-secondary-text: var(--color-text-primary);
39
+ --button-secondary-border: var(--color-surface-200);
40
+
41
+ --button-outline-bg: transparent;
42
+ --button-outline-text: var(--color-text-primary);
43
+ --button-outline-border: var(--color-border-strong);
44
+
45
+ --button-tertiary-text: var(--color-accent-primary);
46
+ }
47
+
48
+ .theme-dark {
49
+ color: var(--color-fg);
50
+ color-scheme: dark;
51
+ --color-fg: var(--color-text-inverse);
52
+ --color-fg-muted: var(--color-surface-300);
53
+ --color-surface-default: var(--color-surface-900);
54
+ --color-surface-raised-default: var(--color-surface-800);
55
+ --color-chrome-surface-default: var(--color-surface-900);
56
+ --color-edge: var(--color-border-inverse);
57
+ --color-icon-default: var(--color-surface-400);
58
+ --color-link-hover: var(--color-brand-400);
59
+ --color-callout-icon-bg-default: var(--color-callout-icon-bg-dark);
60
+ --rich-text-quote-bg-default: var(--rich-text-quote-bg-dark);
61
+ --rich-text-inline-code-bg-default: var(--rich-text-inline-code-bg-dark);
62
+ --shadow-card-default: var(--shadow-card-dark);
63
+ --gradient-cta-default: var(--gradient-cta-dark);
64
+
65
+ --button-primary-bg: var(--color-brand-500);
66
+ --button-primary-text: var(--color-white);
67
+ --button-primary-border: var(--color-brand-500);
68
+ --button-primary-hover-bg: var(--color-brand-400);
69
+ --button-primary-hover-border: var(--color-brand-400);
70
+
71
+ --button-secondary-bg: var(--color-surface-800);
72
+ --button-secondary-text: var(--color-white);
73
+ --button-secondary-border: var(--color-surface-700);
74
+
75
+ --button-outline-bg: transparent;
76
+ --button-outline-text: var(--color-white);
77
+ --button-outline-border: var(--color-border-inverse);
78
+
79
+ --button-tertiary-text: var(--color-brand-400);
80
+ }
81
+
82
+ .theme-accent {
83
+ color: var(--color-fg);
84
+ --color-fg: var(--color-white);
85
+ --color-fg-muted: var(--color-surface-300);
86
+ --color-surface-default: var(--color-surface-800);
87
+ --color-surface-raised-default: var(--color-surface-700);
88
+ --color-edge: var(--color-border-inverse);
89
+ --color-icon-default: var(--color-white);
90
+ --color-link-hover: var(--color-warm-400);
91
+ --gradient-cta-default: var(--gradient-cta);
92
+ }
93
+
94
+ .bm-header {
95
+ background: var(--header-bg);
96
+ backdrop-filter: blur(12px);
97
+ -webkit-backdrop-filter: blur(12px);
98
+ --color-fg: var(--header-text);
99
+ --color-fg-muted: var(--header-muted);
100
+ --color-edge: var(--header-border);
101
+ --color-link-hover: var(--header-link-hover);
102
+ --color-icon-default: var(--header-icon);
103
+ --button-secondary-text: var(--color-text-primary);
104
+ --button-secondary-border: var(--color-surface-200);
105
+ --button-outline-text: var(--color-text-primary);
106
+ --button-outline-border: var(--header-border);
107
+ --button-tertiary-text: var(--color-accent-primary);
108
+ }
109
+
110
+ .bm-footer {
111
+ color: var(--footer-text);
112
+ background: var(--footer-bg);
113
+ --color-fg: var(--footer-text);
114
+ --color-fg-muted: var(--footer-muted);
115
+ --color-edge: var(--footer-border);
116
+ --color-link-hover: var(--footer-link-hover);
117
+ --color-icon-default: var(--footer-muted);
118
+ --button-primary-bg: var(--color-accent-primary);
119
+ --button-primary-text: var(--color-white);
120
+ --button-primary-border: var(--color-accent-primary);
121
+ --button-secondary-text: var(--color-text-primary);
122
+ --button-secondary-border: var(--color-surface-200);
123
+ --button-outline-text: var(--color-text-primary);
124
+ --button-outline-border: var(--footer-border);
125
+ --button-tertiary-text: var(--color-accent-primary);
126
+ }
127
+
128
+ @media (min-width: 1024px) {
129
+ .footer-main-grid {
130
+ grid-template-columns: 1fr 2fr;
131
+ }
132
+ }
133
+
134
+ .bm-mobile-nav {
135
+ color: var(--mobile-nav-text);
136
+ background: var(--mobile-nav-bg);
137
+ --color-fg: var(--mobile-nav-text);
138
+ --color-fg-muted: var(--mobile-nav-muted);
139
+ --color-edge: var(--mobile-nav-border);
140
+ --color-link-hover: var(--mobile-nav-link-hover);
141
+ --color-icon-default: var(--mobile-nav-muted);
142
+ --button-primary-bg: var(--color-accent-primary);
143
+ --button-primary-text: var(--color-white);
144
+ --button-primary-border: var(--color-accent-primary);
145
+ --button-secondary-text: var(--color-text-primary);
146
+ --button-secondary-border: var(--color-surface-200);
147
+ --button-outline-text: var(--color-text-primary);
148
+ --button-outline-border: var(--mobile-nav-border);
149
+ --button-tertiary-text: var(--color-accent-primary);
150
+ }
151
+
152
+ * {
153
+ box-sizing: border-box;
154
+ }
155
+
156
+ html {
157
+ scroll-behavior: smooth;
158
+ }
159
+
160
+ body {
161
+ margin: 0;
162
+ min-width: 320px;
163
+ background: var(--color-page);
164
+ color: var(--color-fg);
165
+ font-family: var(--font-family-base);
166
+ font-size: var(--text-size-body);
167
+ line-height: var(--leading-body);
168
+ -webkit-font-smoothing: antialiased;
169
+ text-rendering: optimizeLegibility;
170
+ }
171
+
172
+ button,
173
+ input,
174
+ select,
175
+ textarea {
176
+ font: inherit;
177
+ }
178
+
179
+ img,
180
+ svg {
181
+ display: block;
182
+ }
183
+
184
+ :focus-visible {
185
+ outline: 0.125rem solid var(--color-focus);
186
+ outline-offset: 0.125rem;
187
+ }
188
+
189
+ @layer base {
190
+ a {
191
+ color: inherit;
192
+ text-decoration: none;
193
+ }
194
+
195
+
196
+ h1, h2, h3, h4, h5, h6 {
197
+ margin-block: 0;
198
+ color: var(--color-fg);
199
+ font-family: var(--font-family-heading);
200
+ font-weight: var(--font-weight-semibold);
201
+ line-height: var(--leading-heading);
202
+ }
203
+
204
+ h1 {
205
+ font-size: var(--text-size-h1-mobile);
206
+ font-weight: var(--font-weight-bold);
207
+ line-height: var(--leading-tight);
208
+ letter-spacing: var(--letter-spacing-tight);
209
+ }
210
+
211
+ h2 { font-size: var(--text-size-h2-mobile); }
212
+ h3 { font-size: var(--text-size-h3); }
213
+ h4 { font-size: var(--text-size-h4); }
214
+ h5 { font-size: var(--text-size-body-large); }
215
+ h6 { font-size: var(--text-size-body); }
216
+
217
+ @media (min-width: 768px) {
218
+ h1 { font-size: var(--text-size-h1); }
219
+ h2 { font-size: var(--text-size-h2); }
220
+ }
221
+
222
+ p, ul, ol, blockquote, pre {
223
+ margin-block: 0;
224
+ }
225
+
226
+ ul { list-style: disc; padding-left: 1.4em; }
227
+ ol { list-style: decimal; padding-left: 1.4em; }
228
+ }
229
+
230
+ /* Rich text styles */
231
+ .bm-rich-text-section {
232
+ background: var(--color-surface-default);
233
+ padding: var(--spacing-section-y) var(--spacing-container);
234
+ }
235
+
236
+ .bm-rich-text-section--quiet {
237
+ background: var(--color-surface-muted);
238
+ }
239
+
240
+ .bm-rich-text {
241
+ max-width: var(--max-width-rich-text);
242
+ margin-inline: auto;
243
+ color: var(--color-fg);
244
+ }
245
+
246
+ .bm-rich-text--wide {
247
+ max-width: var(--max-width-rich-text-wide);
248
+ }
249
+
250
+ .bm-rich-text__eyebrow {
251
+ margin: 0 0 1rem;
252
+ color: var(--color-accent-primary);
253
+ font-size: var(--text-size-eyebrow);
254
+ font-weight: var(--font-weight-bold);
255
+ letter-spacing: var(--letter-spacing-label);
256
+ text-transform: uppercase;
257
+ }
258
+
259
+ .bm-rich-text__heading {
260
+ margin: 0;
261
+ color: var(--color-fg);
262
+ font-family: var(--font-family-heading);
263
+ font-size: var(--text-size-h2-mobile);
264
+ font-weight: var(--font-weight-semibold);
265
+ line-height: var(--leading-heading);
266
+ }
267
+
268
+ .bm-rich-text__body {
269
+ margin-top: var(--rich-text-heading-space);
270
+ color: var(--color-fg);
271
+ font-size: var(--text-size-body-large);
272
+ line-height: var(--leading-relaxed);
273
+ }
274
+
275
+ .bm-rich-text__body--inline {
276
+ margin-top: 0;
277
+ }
278
+
279
+ .bm-rich-text__body > * {
280
+ margin-block: 0;
281
+ }
282
+
283
+ .bm-rich-text__body > * + * {
284
+ margin-top: var(--rich-text-flow-space);
285
+ }
286
+
287
+ .bm-rich-text__body h2,
288
+ .bm-rich-text__body h3,
289
+ .bm-rich-text__body h4 {
290
+ color: var(--color-fg);
291
+ font-family: var(--font-family-heading);
292
+ font-weight: var(--font-weight-semibold);
293
+ line-height: var(--leading-heading);
294
+ }
295
+
296
+ .bm-rich-text__body h2 {
297
+ font-size: var(--text-size-h3);
298
+ }
299
+
300
+ .bm-rich-text__body h3,
301
+ .bm-rich-text__body h4 {
302
+ font-size: var(--text-size-body-large);
303
+ }
304
+
305
+ .bm-rich-text__body a {
306
+ color: var(--color-link-hover);
307
+ font-weight: var(--font-weight-semibold);
308
+ text-decoration: underline;
309
+ text-decoration-thickness: var(--rich-text-link-decoration-thickness);
310
+ text-underline-offset: var(--rich-text-link-underline-offset);
311
+ }
312
+
313
+ .bm-rich-text__body ul {
314
+ list-style: disc;
315
+ padding-left: var(--rich-text-list-indent);
316
+ }
317
+
318
+ .bm-rich-text__body ol {
319
+ list-style: decimal;
320
+ padding-left: var(--rich-text-list-indent);
321
+ }
322
+
323
+ .bm-rich-text__body li + li {
324
+ margin-top: 0.75rem;
325
+ }
326
+
327
+ .bm-rich-text__body blockquote {
328
+ border-left: var(--rich-text-blockquote-border-width) solid var(--rich-text-quote-border);
329
+ background: var(--rich-text-quote-bg-default);
330
+ padding: 1.25rem 1.5rem;
331
+ font-weight: var(--font-weight-medium);
332
+ }
333
+
334
+ .bm-rich-text__body code {
335
+ border-radius: 0.25rem;
336
+ background: var(--rich-text-inline-code-bg-default);
337
+ color: var(--rich-text-inline-code-text);
338
+ font-size: var(--text-size-caption);
339
+ padding: var(--rich-text-inline-code-padding);
340
+ }
341
+
342
+ @media (min-width: 768px) {
343
+ .bm-rich-text__heading {
344
+ font-size: var(--text-size-h2);
345
+ }
346
+ }
@@ -0,0 +1,110 @@
1
+ @theme {
2
+ --color-white: #ffffff;
3
+ --color-black: #000000;
4
+
5
+ /* Light palette — airy, modern */
6
+ --color-surface-50: #f8fafc;
7
+ --color-surface-100: #f1f5f9;
8
+ --color-surface-200: #e2e8f0;
9
+ --color-surface-300: #cbd5e1;
10
+ --color-surface-400: #94a3b8;
11
+ --color-surface-900: #0f172a;
12
+ --color-surface-950: #020617;
13
+
14
+ /* Brand accents — electric blue + warm orange */
15
+ --color-brand-500: #0ea5e9;
16
+ --color-brand-400: #38bdf8;
17
+ --color-brand-600: #0284c7;
18
+ --color-brand-300: #7dd3fc;
19
+ --color-brand-glow: rgba(14, 165, 233, 0.25);
20
+
21
+ --color-warm-500: #f97316;
22
+ --color-warm-400: #fb923c;
23
+ --color-warm-600: #ea580c;
24
+ --color-warm-300: #fdba74;
25
+
26
+ /* Text */
27
+ --color-text-primary: #0f172a;
28
+ --color-text-secondary: #475569;
29
+ --color-text-tertiary: #64748b;
30
+ --color-text-muted: #94a3b8;
31
+ --color-text-inverse: #ffffff;
32
+
33
+ /* Borders */
34
+ --color-border-subtle: rgba(15, 23, 42, 0.06);
35
+ --color-border-default: rgba(15, 23, 42, 0.1);
36
+ --color-border-strong: rgba(15, 23, 42, 0.16);
37
+ --color-border-inverse: rgba(255, 255, 255, 0.2);
38
+
39
+ /* Focus */
40
+ --color-focus: var(--color-brand-600);
41
+
42
+ /* Semantic aliases — light theme default */
43
+ --color-page: var(--color-white);
44
+ --color-page-inverse: var(--color-surface-900);
45
+ --color-page-light: var(--color-white);
46
+ --color-chrome-surface: var(--color-white);
47
+ --color-chrome-surface-default: var(--color-white);
48
+
49
+ --color-surface: var(--color-white);
50
+ --color-surface-muted: var(--color-surface-100);
51
+ --color-surface-raised: var(--color-surface-200);
52
+ --color-surface-dark: var(--color-surface-900);
53
+ --color-surface-raised-dark: var(--color-surface-800);
54
+
55
+ --color-fg: var(--color-text-primary);
56
+ --color-fg-muted: var(--color-text-secondary);
57
+ --color-fg-base-muted: var(--color-text-secondary);
58
+ --color-fg-inverse: var(--color-text-inverse);
59
+ --color-fg-inverse-soft: var(--color-surface-200);
60
+ --color-fg-inverse-muted: var(--color-surface-400);
61
+
62
+ --color-border: var(--color-border-default);
63
+ --color-edge: var(--color-border-default);
64
+ --color-edge-dark: var(--color-border-strong);
65
+ --color-edge-inverse: var(--color-border-inverse);
66
+
67
+ --color-accent-primary: var(--color-brand-600);
68
+ --color-accent-secondary: var(--color-brand-500);
69
+ --color-accent-tertiary: var(--color-warm-500);
70
+ --color-accent-pink: var(--color-brand-500);
71
+ --color-accent-blue: var(--color-brand-500);
72
+ --color-accent-warm: var(--color-warm-500);
73
+
74
+ --color-icon-default: var(--color-text-tertiary);
75
+ --color-link-hover: var(--color-brand-600);
76
+
77
+ /* Gradients */
78
+ --gradient-hero-base: radial-gradient(
79
+ ellipse 80% 60% at 50% 0%,
80
+ rgba(14, 165, 233, 0.12) 0%,
81
+ rgba(14, 165, 233, 0.04) 40%,
82
+ transparent 70%
83
+ );
84
+ --gradient-hero-overlay: linear-gradient(
85
+ 180deg,
86
+ rgba(255, 255, 255, 0.2) 0%,
87
+ rgba(255, 255, 255, 0.7) 60%,
88
+ rgba(255, 255, 255, 0.95) 100%
89
+ );
90
+ --gradient-hero-overlay-rtl: linear-gradient(
91
+ 180deg,
92
+ rgba(255, 255, 255, 0.95) 0%,
93
+ rgba(255, 255, 255, 0.7) 60%,
94
+ rgba(255, 255, 255, 0.2) 100%
95
+ );
96
+ --gradient-hero-radial: radial-gradient(
97
+ ellipse 60% 40% at 80% 20%,
98
+ rgba(249, 115, 22, 0.06) 0%,
99
+ transparent 60%
100
+ );
101
+ --gradient-card: linear-gradient(
102
+ 180deg,
103
+ rgba(255, 255, 255, 0.95) 0%,
104
+ rgba(241, 245, 249, 0.6) 100%
105
+ );
106
+ --gradient-cta: linear-gradient(135deg, var(--color-brand-500) 0%, var(--color-brand-400) 100%);
107
+ --gradient-cta-dark: linear-gradient(135deg, var(--color-surface-100) 0%, var(--color-surface-200) 100%);
108
+ --gradient-cta-default: var(--gradient-cta);
109
+ --gradient-top-rail: linear-gradient(90deg, var(--color-brand-500) 0%, var(--color-warm-500) 100%);
110
+ }
@@ -0,0 +1,86 @@
1
+ @theme {
2
+ --width-logo-mobile: 8rem;
3
+ --width-logo: 12rem;
4
+ --width-logo-footer-mobile: 9rem;
5
+ --width-logo-footer: 14rem;
6
+ --logo-filter: none;
7
+
8
+ --text-button: var(--text-size-base);
9
+ --leading-button: 1;
10
+ --button-hover-opacity: 0.92;
11
+ --transition-duration-fast: 200ms;
12
+
13
+ --button-primary-bg: var(--color-accent-primary);
14
+ --button-primary-text: var(--color-white);
15
+ --button-primary-border: var(--color-accent-primary);
16
+ --button-primary-hover-bg: var(--color-brand-500);
17
+ --button-primary-hover-border: var(--color-brand-500);
18
+
19
+ --button-secondary-bg: var(--color-surface-100);
20
+ --button-secondary-text: var(--color-text-primary);
21
+ --button-secondary-border: var(--color-surface-200);
22
+ --button-secondary-hover-bg: var(--color-surface-200);
23
+ --button-secondary-hover-border: var(--color-surface-300);
24
+
25
+ --button-outline-bg: transparent;
26
+ --button-outline-text: var(--color-text-primary);
27
+ --button-outline-border: var(--color-border-strong);
28
+ --button-outline-hover-bg: var(--color-surface-100);
29
+ --button-outline-hover-border: var(--color-text-primary);
30
+
31
+ --button-tertiary-bg: transparent;
32
+ --button-tertiary-text: var(--color-accent-primary);
33
+ --button-tertiary-border: transparent;
34
+ --button-tertiary-hover-bg: rgba(14, 165, 233, 0.08);
35
+ --button-tertiary-hover-text: var(--color-brand-600);
36
+
37
+ --button-ghost-bg: transparent;
38
+ --button-ghost-text: var(--color-text-primary);
39
+ --button-ghost-border: transparent;
40
+ --button-ghost-hover-bg: var(--color-surface-100);
41
+ --button-ghost-hover-text: var(--color-text-primary);
42
+
43
+ --header-bg: rgba(255, 255, 255, 0.85);
44
+ --header-text: var(--color-text-primary);
45
+ --header-muted: var(--color-text-secondary);
46
+ --header-border: var(--color-border-default);
47
+ --header-link-hover: var(--color-accent-primary);
48
+ --header-icon: var(--color-text-tertiary);
49
+ --header-scrolled-bg: var(--color-white);
50
+
51
+ --mobile-nav-bg: var(--color-white);
52
+ --mobile-nav-text: var(--color-text-primary);
53
+ --mobile-nav-muted: var(--color-text-secondary);
54
+ --mobile-nav-border: var(--color-border-default);
55
+ --mobile-nav-link-hover: var(--color-accent-primary);
56
+ --mobile-nav-link-size: 1.75rem;
57
+ --mobile-nav-link-line-height: 1.1;
58
+
59
+ --footer-bg: var(--color-surface-100);
60
+ --footer-text: var(--color-text-primary);
61
+ --footer-muted: var(--color-text-secondary);
62
+ --footer-border: var(--color-border-default);
63
+ --footer-link-hover: var(--color-accent-primary);
64
+ --footer-grid-columns: 1fr 2fr;
65
+
66
+ --color-callout-icon-bg-light: rgba(14, 165, 233, 0.08);
67
+ --color-callout-icon-bg-dark: rgba(14, 165, 233, 0.12);
68
+ --color-callout-icon-bg: var(--color-callout-icon-bg-light);
69
+ --callout-icon-color: var(--color-accent-primary);
70
+
71
+ --rich-text-flow-space: 1.5rem;
72
+ --rich-text-heading-space: 2rem;
73
+ --rich-text-link-decoration-thickness: 0.09em;
74
+ --rich-text-link-underline-offset: 0.18em;
75
+ --rich-text-list-indent: 1.4em;
76
+ --rich-text-blockquote-border-width: 0.25rem;
77
+ --rich-text-inline-code-padding: 0.08em 0.32em;
78
+ --rich-text-quote-border: var(--color-brand-500);
79
+ --rich-text-quote-bg: rgba(14, 165, 233, 0.06);
80
+ --rich-text-quote-bg-dark: rgba(14, 165, 233, 0.1);
81
+ --rich-text-quote-bg-default: var(--rich-text-quote-bg-light);
82
+ --rich-text-inline-code-bg: rgba(15, 23, 42, 0.06);
83
+ --rich-text-inline-code-bg-dark: rgba(255, 255, 255, 0.08);
84
+ --rich-text-inline-code-bg-default: var(--rich-text-inline-code-bg);
85
+ --rich-text-inline-code-text: var(--color-fg);
86
+ }
@@ -0,0 +1,6 @@
1
+ @import "./colors.css";
2
+ @import "./typography.css";
3
+ @import "./spacing.css";
4
+ @import "./shadows.css";
5
+ @import "./radii.css";
6
+ @import "./components.css";
@@ -0,0 +1,5 @@
1
+ @theme {
2
+ --radius-button: 0.5rem;
3
+ --radius-card: 0.875rem;
4
+ --radius-cta: 1rem;
5
+ }
@@ -0,0 +1,9 @@
1
+ @theme {
2
+ --shadow-card: 0 1px 3px rgba(15, 23, 42, 0.04), 0 12px 32px rgba(15, 23, 42, 0.08);
3
+ --shadow-card-dark: 0 1px 3px rgba(0, 0, 0, 0.1), 0 16px 40px rgba(0, 0, 0, 0.15);
4
+ --shadow-card-default: var(--shadow-card);
5
+ --shadow-elevated: 0 1px 3px rgba(15, 23, 42, 0.05), 0 20px 48px rgba(15, 23, 42, 0.12);
6
+ --shadow-glow: 0 0 30px rgba(14, 165, 233, 0.25);
7
+ --shadow-glow-sm: 0 0 15px rgba(14, 165, 233, 0.18);
8
+ --shadow-glow-lg: 0 0 40px rgba(14, 165, 233, 0.3);
9
+ }
@@ -0,0 +1,26 @@
1
+ @theme {
2
+ --max-width-container: 80rem;
3
+ --max-width-container-narrow: 48rem;
4
+ --max-width-rich-text: var(--max-width-container-narrow);
5
+ --max-width-rich-text-wide: 54rem;
6
+ --max-width-cta: 76rem;
7
+
8
+ --spacing-container: clamp(1rem, 5vw, 3rem);
9
+ --spacing-section-y: clamp(4rem, 8vw, 7rem);
10
+ --spacing-footer-y: clamp(4rem, 8vw, 6rem);
11
+ --spacing-cta-y: clamp(4rem, 8vw, 6rem);
12
+ --spacing-cta-x: clamp(1.5rem, 5vw, 5rem);
13
+ --spacing-card: 1.5rem;
14
+ --spacing-hero-py: clamp(8rem, 20vh, 14rem);
15
+
16
+ --height-header: 4.5rem;
17
+ --height-hero-min: 100svh;
18
+ --width-hero-content: 48rem;
19
+ --height-button-min: 3rem;
20
+
21
+ --spacing-button-x: 1.5rem;
22
+ --spacing-button-y: 0.875rem;
23
+
24
+ --z-header: 50;
25
+ --z-overlay: 60;
26
+ }
@@ -0,0 +1,32 @@
1
+ @theme {
2
+ --font-family-display: var(--font-inter), "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
3
+ --font-family-heading: var(--font-family-display);
4
+ --font-family-base: var(--font-inter), "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
5
+
6
+ --font-weight-regular: 400;
7
+ --font-weight-medium: 500;
8
+ --font-weight-semibold: 600;
9
+ --font-weight-bold: 700;
10
+
11
+ --text-size-brand: 1.5rem;
12
+ --text-size-eyebrow: 0.75rem;
13
+ --text-size-caption: 0.75rem;
14
+ --text-size-body-small: 0.875rem;
15
+ --text-size-body: 1rem;
16
+ --text-size-body-large: 1.125rem;
17
+ --text-size-h1-mobile: 3rem;
18
+ --text-size-h1: 4.5rem;
19
+ --text-size-h2-mobile: 2rem;
20
+ --text-size-h2: 3rem;
21
+ --text-size-h3: 1.25rem;
22
+ --text-size-h4: 1.125rem;
23
+
24
+ --leading-none: 1;
25
+ --leading-tight: 1.05;
26
+ --leading-heading: 1.1;
27
+ --leading-snug: 1.25;
28
+ --leading-body: 1.6;
29
+ --leading-relaxed: 1.7;
30
+ --letter-spacing-label: 0.08em;
31
+ --letter-spacing-tight: -0.02em;
32
+ }