@riverbankcms/sdk 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +298 -2
  2. package/dist/cli/index.js +1996 -618
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/cli/init-docs/content/agents-section.md +11 -0
  5. package/dist/cli/init-docs/content/cli-reference.md +15 -1
  6. package/dist/cli/init-docs/content/workflow-add-block.md +7 -0
  7. package/dist/cli/init-docs/content/workflow-block-extensions.md +361 -0
  8. package/dist/cli/init-docs/content/workflow-cmsify-page.md +357 -0
  9. package/dist/cli/init-docs/content/workflow-content-types.md +328 -0
  10. package/dist/cli/init-docs/content/workflow-create-page.md +9 -0
  11. package/dist/cli/init-docs/content/workflow-custom-block.md +446 -0
  12. package/dist/client/client.d.mts +2 -2
  13. package/dist/client/client.d.ts +2 -2
  14. package/dist/client/client.js +262 -17
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +262 -17
  17. package/dist/client/client.mjs.map +1 -1
  18. package/dist/client/hooks.d.mts +2 -2
  19. package/dist/client/hooks.d.ts +2 -2
  20. package/dist/client/hooks.js +6 -6
  21. package/dist/client/hooks.js.map +1 -1
  22. package/dist/client/hooks.mjs +6 -6
  23. package/dist/client/hooks.mjs.map +1 -1
  24. package/dist/client/rendering/client.js +29 -6
  25. package/dist/client/rendering/client.js.map +1 -1
  26. package/dist/client/rendering/client.mjs +29 -6
  27. package/dist/client/rendering/client.mjs.map +1 -1
  28. package/dist/client/usePage--LiGLbVz.d.mts +7195 -0
  29. package/dist/client/usePage-BwQJlxpe.d.mts +7218 -0
  30. package/dist/client/usePage-Ds-ow1-d.d.ts +7195 -0
  31. package/dist/client/usePage-Duc2GC-H.d.ts +7218 -0
  32. package/dist/client/usePage-DyzrgxqR.d.mts +7215 -0
  33. package/dist/client/usePage-lTWkuVMZ.d.ts +7215 -0
  34. package/dist/server/{Layout-CZ-kxKfl.d.ts → Layout-BHGokJmV.d.ts} +1 -1
  35. package/dist/server/{Layout-ESG8zvrk.d.mts → Layout-CXkMcTR4.d.mts} +1 -1
  36. package/dist/server/chunk-274Y2CUE.js +341 -0
  37. package/dist/server/chunk-274Y2CUE.js.map +1 -0
  38. package/dist/server/{chunk-IJTJH4J3.js → chunk-2WL52ZOE.js} +8 -8
  39. package/dist/server/{chunk-IJTJH4J3.js.map → chunk-2WL52ZOE.js.map} +1 -1
  40. package/dist/server/{chunk-DAXWU3S3.js → chunk-5HGVBSWA.js} +9 -9
  41. package/dist/server/{chunk-DAXWU3S3.js.map → chunk-5HGVBSWA.js.map} +1 -1
  42. package/dist/server/chunk-7WJGJY3B.js +7 -0
  43. package/dist/server/chunk-7WJGJY3B.js.map +1 -0
  44. package/dist/server/chunk-AGAOKSPY.mjs +22 -0
  45. package/dist/server/chunk-AGAOKSPY.mjs.map +1 -0
  46. package/dist/server/{chunk-A3UZ2LDH.mjs → chunk-BOYBN4KN.mjs} +3 -3
  47. package/dist/server/chunk-BOYBN4KN.mjs.map +1 -0
  48. package/dist/server/{chunk-FUFPKTSI.mjs → chunk-CKZDJBMC.mjs} +33 -9
  49. package/dist/server/chunk-CKZDJBMC.mjs.map +1 -0
  50. package/dist/server/{chunk-PGZJUNCY.mjs → chunk-E4R5ILRE.mjs} +3 -3
  51. package/dist/server/{chunk-MFNWLB5G.js → chunk-EC2AA2IP.js} +275 -297
  52. package/dist/server/chunk-EC2AA2IP.js.map +1 -0
  53. package/dist/server/{chunk-HE3RTUDX.js → chunk-F4U4LC5D.js} +8 -8
  54. package/dist/server/{chunk-HE3RTUDX.js.map → chunk-F4U4LC5D.js.map} +1 -1
  55. package/dist/server/{chunk-T5PAA22U.mjs → chunk-H44G72AB.mjs} +2 -2
  56. package/dist/server/{chunk-KGORQCHF.js → chunk-JVLQDZTZ.js} +6 -6
  57. package/dist/server/{chunk-KGORQCHF.js.map → chunk-JVLQDZTZ.js.map} +1 -1
  58. package/dist/server/{chunk-ADD3O2QO.mjs → chunk-KKUR3PDT.mjs} +4 -4
  59. package/dist/server/chunk-NTG7XP3E.js +264 -0
  60. package/dist/server/chunk-NTG7XP3E.js.map +1 -0
  61. package/dist/server/{chunk-TR7MSLWL.mjs → chunk-OSTUHBFE.mjs} +3 -3
  62. package/dist/server/chunk-PAHSKNY5.mjs +264 -0
  63. package/dist/server/chunk-PAHSKNY5.mjs.map +1 -0
  64. package/dist/server/chunk-PSN6HXUD.js +22 -0
  65. package/dist/server/chunk-PSN6HXUD.js.map +1 -0
  66. package/dist/server/{chunk-GRFFJUCO.mjs → chunk-QS6ZTLLB.mjs} +242 -264
  67. package/dist/server/chunk-QS6ZTLLB.mjs.map +1 -0
  68. package/dist/server/{chunk-K44OPKLA.js → chunk-R6T3Z4W5.js} +3 -3
  69. package/dist/server/{chunk-K44OPKLA.js.map → chunk-R6T3Z4W5.js.map} +1 -1
  70. package/dist/server/{chunk-KDCVCDW6.js → chunk-RIROJYPX.js} +4 -4
  71. package/dist/server/{chunk-KDCVCDW6.js.map → chunk-RIROJYPX.js.map} +1 -1
  72. package/dist/server/chunk-SVEQVEA5.mjs +341 -0
  73. package/dist/server/chunk-SVEQVEA5.mjs.map +1 -0
  74. package/dist/server/{chunk-HDHY4236.mjs → chunk-TBN35TGI.mjs} +6 -6
  75. package/dist/server/{chunk-HDHY4236.mjs.map → chunk-TBN35TGI.mjs.map} +1 -1
  76. package/dist/server/{chunk-5GCSRTIU.mjs → chunk-TBX6CXBM.mjs} +2 -2
  77. package/dist/server/{chunk-6ERSDFTY.js → chunk-U2F4BWKW.js} +3 -3
  78. package/dist/server/chunk-U2F4BWKW.js.map +1 -0
  79. package/dist/server/chunk-WWGVFOLS.mjs +7 -0
  80. package/dist/server/chunk-WWGVFOLS.mjs.map +1 -0
  81. package/dist/server/{chunk-TLZHVGTL.js → chunk-X4REO3S7.js} +4 -4
  82. package/dist/server/{chunk-TLZHVGTL.js.map → chunk-X4REO3S7.js.map} +1 -1
  83. package/dist/server/{chunk-BNHK7YOC.mjs → chunk-YUD7ONZG.mjs} +2 -2
  84. package/dist/server/{chunk-F2NDLDDA.js → chunk-ZJXFRSTC.js} +92 -68
  85. package/dist/server/chunk-ZJXFRSTC.js.map +1 -0
  86. package/dist/server/{components-iEDvl2Yw.d.mts → components-Bqn4xmR6.d.mts} +74 -5
  87. package/dist/server/{components-CE48wJM1.d.ts → components-C7j9yzAt.d.ts} +74 -5
  88. package/dist/server/components.d.mts +5 -5
  89. package/dist/server/components.d.ts +5 -5
  90. package/dist/server/components.js +7 -5
  91. package/dist/server/components.js.map +1 -1
  92. package/dist/server/components.mjs +6 -4
  93. package/dist/server/config-validation.js +5 -5
  94. package/dist/server/config-validation.mjs +4 -4
  95. package/dist/server/config.js +5 -5
  96. package/dist/server/config.mjs +4 -4
  97. package/dist/server/data.d.mts +2 -2
  98. package/dist/server/data.d.ts +2 -2
  99. package/dist/server/data.js +3 -3
  100. package/dist/server/data.mjs +2 -2
  101. package/dist/server/{index-BHLK2mgQ.d.ts → index-Bns_1a4N.d.ts} +1 -1
  102. package/dist/server/{index-DTBg8eXj.d.ts → index-CHp2kyp0.d.ts} +2 -2
  103. package/dist/server/{index-Cgvb5fVQ.d.mts → index-CPDT8kn9.d.mts} +1 -1
  104. package/dist/server/{index-BrH_NIRO.d.mts → index-Cm9nMPkf.d.mts} +2 -2
  105. package/dist/server/index.d.mts +193 -215
  106. package/dist/server/index.d.ts +193 -215
  107. package/dist/server/index.js +9 -288
  108. package/dist/server/index.js.map +1 -1
  109. package/dist/server/index.mjs +10 -289
  110. package/dist/server/index.mjs.map +1 -1
  111. package/dist/server/{loadContent-BUK6IVJf.d.ts → loadContent-DD7J5_WO.d.ts} +3 -3
  112. package/dist/server/{loadContent-au9Weoy0.d.mts → loadContent-DTEgYI-l.d.mts} +3 -3
  113. package/dist/server/{loadPage-DiHEl8BA.d.mts → loadPage-B578Xg2W.d.mts} +2 -2
  114. package/dist/server/{loadPage-JOIbF7ih.d.ts → loadPage-Dkiimbsg.d.ts} +2 -2
  115. package/dist/server/loadPage-IBX7FXGH.mjs +11 -0
  116. package/dist/server/loadPage-KG74OG4V.js +11 -0
  117. package/dist/server/{loadPage-CMHYAW2J.js.map → loadPage-KG74OG4V.js.map} +1 -1
  118. package/dist/server/metadata.d.mts +4 -4
  119. package/dist/server/metadata.d.ts +4 -4
  120. package/dist/server/navigation.d.mts +2 -2
  121. package/dist/server/navigation.d.ts +2 -2
  122. package/dist/server/next.d.mts +5 -5
  123. package/dist/server/next.d.ts +5 -5
  124. package/dist/server/next.js +17 -14
  125. package/dist/server/next.js.map +1 -1
  126. package/dist/server/next.mjs +9 -6
  127. package/dist/server/next.mjs.map +1 -1
  128. package/dist/server/prebuild-loader.d.mts +87 -0
  129. package/dist/server/prebuild-loader.d.ts +87 -0
  130. package/dist/server/prebuild-loader.js +15 -0
  131. package/dist/server/prebuild-loader.js.map +1 -0
  132. package/dist/server/prebuild-loader.mjs +15 -0
  133. package/dist/server/prebuild-loader.mjs.map +1 -0
  134. package/dist/server/prebuild-types.d.mts +201 -0
  135. package/dist/server/prebuild-types.d.ts +201 -0
  136. package/dist/server/prebuild-types.js +1 -0
  137. package/dist/server/prebuild-types.js.map +1 -0
  138. package/dist/server/prebuild-types.mjs +1 -0
  139. package/dist/server/prebuild-types.mjs.map +1 -0
  140. package/dist/server/prebuild.d.mts +46 -0
  141. package/dist/server/prebuild.d.ts +46 -0
  142. package/dist/server/prebuild.js +10 -0
  143. package/dist/server/prebuild.js.map +1 -0
  144. package/dist/server/prebuild.mjs +10 -0
  145. package/dist/server/prebuild.mjs.map +1 -0
  146. package/dist/server/rendering/server.d.mts +4 -4
  147. package/dist/server/rendering/server.d.ts +4 -4
  148. package/dist/server/rendering/server.js +7 -7
  149. package/dist/server/rendering/server.mjs +6 -6
  150. package/dist/server/rendering.d.mts +8 -8
  151. package/dist/server/rendering.d.ts +8 -8
  152. package/dist/server/rendering.js +11 -9
  153. package/dist/server/rendering.js.map +1 -1
  154. package/dist/server/rendering.mjs +10 -8
  155. package/dist/server/routing.d.mts +3 -3
  156. package/dist/server/routing.d.ts +3 -3
  157. package/dist/server/routing.js +1 -1
  158. package/dist/server/routing.mjs +1 -1
  159. package/dist/server/server.d.mts +5 -5
  160. package/dist/server/server.d.ts +5 -5
  161. package/dist/server/server.js +9 -6
  162. package/dist/server/server.js.map +1 -1
  163. package/dist/server/server.mjs +8 -5
  164. package/dist/server/theme-bridge.js +8 -8
  165. package/dist/server/theme-bridge.mjs +2 -2
  166. package/dist/server/{types-BAM1kcGA.d.mts → types-B6P_iaDz.d.mts} +295 -1
  167. package/dist/server/{types-_SNCu2ZZ.d.ts → types-C4jfCjaP.d.ts} +295 -1
  168. package/dist/server/{types-DDNKxQXw.d.mts → types-CSvCkmYi.d.mts} +12 -3
  169. package/dist/server/{types-CmBB0Osp.d.ts → types-gKcrQV09.d.ts} +12 -3
  170. package/dist/styles/index.css +419 -0
  171. package/package.json +17 -3
  172. package/dist/server/chunk-6ERSDFTY.js.map +0 -1
  173. package/dist/server/chunk-A3UZ2LDH.mjs.map +0 -1
  174. package/dist/server/chunk-F2NDLDDA.js.map +0 -1
  175. package/dist/server/chunk-FUFPKTSI.mjs.map +0 -1
  176. package/dist/server/chunk-GRFFJUCO.mjs.map +0 -1
  177. package/dist/server/chunk-MFNWLB5G.js.map +0 -1
  178. package/dist/server/loadPage-AWYZ2QA2.mjs +0 -11
  179. package/dist/server/loadPage-CMHYAW2J.js +0 -11
  180. package/src/styles/index.css +0 -10
  181. /package/dist/server/{chunk-PGZJUNCY.mjs.map → chunk-E4R5ILRE.mjs.map} +0 -0
  182. /package/dist/server/{chunk-T5PAA22U.mjs.map → chunk-H44G72AB.mjs.map} +0 -0
  183. /package/dist/server/{chunk-ADD3O2QO.mjs.map → chunk-KKUR3PDT.mjs.map} +0 -0
  184. /package/dist/server/{chunk-TR7MSLWL.mjs.map → chunk-OSTUHBFE.mjs.map} +0 -0
  185. /package/dist/server/{chunk-5GCSRTIU.mjs.map → chunk-TBX6CXBM.mjs.map} +0 -0
  186. /package/dist/server/{chunk-BNHK7YOC.mjs.map → chunk-YUD7ONZG.mjs.map} +0 -0
  187. /package/dist/server/{loadPage-AWYZ2QA2.mjs.map → loadPage-IBX7FXGH.mjs.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { A as APIEndpoints } from './types-_SNCu2ZZ.js';
1
+ import { A as APIEndpoints } from './types-C4jfCjaP.js';
2
2
  import './schema-DYtW0zEu.js';
3
3
 
4
4
  type SiteResponse = NonNullable<APIEndpoints['getSite']['response']>;
@@ -6,6 +6,7 @@ type PageResponse = NonNullable<APIEndpoints['getContentByPath']['response']>;
6
6
  type EntriesResponse = NonNullable<APIEndpoints['listPublishedEntries']['response']>;
7
7
  type EntryResponse = NonNullable<APIEndpoints['getPublishedEntryPreview']['response']>;
8
8
  type PublicFormResponse = NonNullable<APIEndpoints['getPublicFormById']['response']>;
9
+ type PublicFormsResponse = NonNullable<APIEndpoints['listPublicForms']['response']>;
9
10
  type PublicBookingServicesResponse = NonNullable<APIEndpoints['getPublicBookingServices']['response']>;
10
11
  type PublicEventsResponse = NonNullable<APIEndpoints['listPublicEvents']['response']>;
11
12
  type ResolveEventOccurrenceResponse = NonNullable<APIEndpoints['resolveEventOccurrence']['response']>;
@@ -287,11 +288,19 @@ interface RiverbankClient {
287
288
  slug: string;
288
289
  } & SdkMethodOptions): Promise<EntryResponse>;
289
290
  /**
290
- * Fetch a public form definition by ID
291
+ * Fetch a public form definition by ID or slug.
292
+ * When using slug, siteId is required for lookup.
291
293
  */
292
294
  getPublicFormById(params: {
293
295
  formId: string;
296
+ siteId?: string;
294
297
  } & SdkMethodOptions): Promise<PublicFormResponse>;
298
+ /**
299
+ * Fetch all forms for a site (used for prebuild cache)
300
+ */
301
+ getForms(params: {
302
+ siteId: string;
303
+ } & SdkMethodOptions): Promise<PublicFormsResponse>;
295
304
  /**
296
305
  * Fetch public booking services for a site
297
306
  */
@@ -411,4 +420,4 @@ interface RiverbankClient {
411
420
  getCircuitState(): CircuitState;
412
421
  }
413
422
 
414
- export type { CircuitState as C, EntriesResponse as E, GetEntriesBaseParams as G, PageResponse as P, RiverbankClient as R, SiteResponse as S, RiverbankClientConfig as a, EntryResponse as b, ResolveEventOccurrenceResponse as c, EntriesResponseWithMeta as d, PaginationMeta as e, ResilienceConfig as f, ResilienceStatus as g, ResilienceSource as h, RetryConfig as i, CircuitBreakerConfig as j };
423
+ export type { CircuitState as C, EntriesResponse as E, GetEntriesBaseParams as G, PageResponse as P, RiverbankClient as R, SiteResponse as S, RiverbankClientConfig as a, EntryResponse as b, EntriesResponseWithMeta as c, PaginationMeta as d, ResilienceConfig as e, ResilienceStatus as f, ResilienceSource as g, RetryConfig as h, CircuitBreakerConfig as i, ResolveEventOccurrenceResponse as j };
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Builder SDK Base Styles
3
+ *
4
+ * These styles are required for Builder blocks to render correctly.
5
+ * Import this in your app's global CSS file:
6
+ *
7
+ * @import "@riverbankcms/sdk/styles.css";
8
+ */
9
+
10
+ /* === @riverbankcms/blocks theme === */
11
+ /* Fallback defaults so preview doesn't look broken before ThemeScope injects vars */
12
+ :root {
13
+ /* --tb-primary: 17 24 39;
14
+ --tb-text: 17 24 39;
15
+ --tb-muted: 107 114 128;
16
+ --tb-bg: 255 255 255;
17
+ --tb-surface: 248 250 252;
18
+ --tb-border: 229 231 235;
19
+
20
+ --radius-control: 12px;
21
+ --radius-card: 12px;
22
+
23
+ --shadow-elev: 0 1px 2px rgba(0,0,0,.06);
24
+
25
+ --fs-h1: 32px;
26
+ --fs-h2: 24px;
27
+ --fs-h3: 20px;
28
+ --fs-body: 16px;
29
+
30
+ --font-heading: ui-sans-serif, system-ui, sans-serif;
31
+ --font-body: ui-sans-serif, system-ui, sans-serif;
32
+
33
+ --motion-duration: 180ms;
34
+ --motion-ease: cubic-bezier(.2,.8,.2,1); */
35
+ }
36
+
37
+ /*
38
+ * Theme Scope Styles
39
+ *
40
+ * IMPORTANT: All :where(.theme-scope) selectors are wrapped in :where() to give them
41
+ * zero specificity. This allows SDK site custom styles to easily override
42
+ * theme defaults without needing !important or high-specificity selectors.
43
+ *
44
+ * Example: `h4 { color: white; }` will override `:where(:where(.theme-scope)) h4`
45
+ */
46
+
47
+ :where(:where(.theme-scope)) {
48
+ font-family: var(--font-body);
49
+ letter-spacing: var(--ls-body);
50
+ line-height: var(--lh-body);
51
+ font-weight: var(--font-weight-body);
52
+
53
+ & h1, & h2, & h3, & h4, & h5, & h6 {
54
+ font-family: var(--font-heading);
55
+ color: rgb(var(--tb-text));
56
+ font-weight: var(--font-weight-heading);
57
+ text-transform: var(--tt-heading);
58
+ font-variant-caps: var(--fv-heading);
59
+ }
60
+ }
61
+
62
+ /* Heading typographic overrides (fallback to defaults when not provided) */
63
+ :where(:where(.theme-scope)) h1 { letter-spacing: var(--ls-h1, var(--ls-heading)); line-height: var(--lh-h1, var(--lh-heading)); font-weight: var(--fw-h1, var(--font-weight-heading)); }
64
+ :where(:where(.theme-scope)) h2 { letter-spacing: var(--ls-h2, var(--ls-heading)); line-height: var(--lh-h2, var(--lh-heading)); font-weight: var(--fw-h2, var(--font-weight-heading)); }
65
+ :where(:where(.theme-scope)) h3 { letter-spacing: var(--ls-h3, var(--ls-heading)); line-height: var(--lh-h3, var(--lh-heading)); font-weight: var(--fw-h3, var(--font-weight-heading)); }
66
+ :where(:where(.theme-scope)) h4, :where(:where(.theme-scope)) h5, :where(:where(.theme-scope)) h6 { letter-spacing: var(--ls-heading); line-height: var(--lh-heading); }
67
+ :where(:where(.theme-scope)) h4 { font-weight: var(--fw-h4, var(--font-weight-heading)); }
68
+ :where(:where(.theme-scope)) h5 { font-weight: var(--fw-h5, var(--font-weight-heading)); }
69
+ :where(:where(.theme-scope)) h6 { font-weight: var(--fw-h6, var(--font-weight-heading)); }
70
+
71
+ /* Rich text element spacing based on theme rhythm */
72
+ :where(.theme-scope) .prose h1 { margin-top: calc(var(--rt-space-y) * 1.6); margin-bottom: calc(var(--rt-space-y) * 0.8); }
73
+ :where(.theme-scope) .prose h2 { margin-top: calc(var(--rt-space-y) * 1.4); margin-bottom: calc(var(--rt-space-y) * 0.7); }
74
+ :where(.theme-scope) .prose h3 { margin-top: calc(var(--rt-space-y) * 1.2); margin-bottom: calc(var(--rt-space-y) * 0.6); }
75
+ :where(.theme-scope) .prose h4 { margin-top: calc(var(--rt-space-y) * 1.0); margin-bottom: calc(var(--rt-space-y) * 0.5); }
76
+ :where(.theme-scope) .prose h5 { margin-top: calc(var(--rt-space-y) * 0.9); margin-bottom: calc(var(--rt-space-y) * 0.45); }
77
+ :where(.theme-scope) .prose h6 { margin-top: calc(var(--rt-space-y) * 0.8); margin-bottom: calc(var(--rt-space-y) * 0.40); }
78
+ :where(.theme-scope) .prose p { margin: var(--rt-space-y) 0; }
79
+ :where(.theme-scope) .prose ul, :where(.theme-scope) .prose ol { margin: var(--rt-space-y) 0; padding-left: 1.25rem; }
80
+ :where(.theme-scope) .prose blockquote { margin: calc(var(--rt-space-y) * 1.0) 0; padding-left: 1rem; border-left: 3px solid rgb(var(--tb-border)); }
81
+
82
+ /* Prose color overrides - use theme CSS variables instead of hardcoded colors
83
+ * This makes prose elements automatically adapt to light/dark themes */
84
+ :where(.theme-scope) .prose {
85
+ /* Body text inherits from parent, which should already have theme color */
86
+ color: inherit;
87
+ }
88
+
89
+ :where(.theme-scope) .prose p,
90
+ :where(.theme-scope) .prose li {
91
+ /* Body text uses inherited color (set by fragment via textColorStyle) */
92
+ color: inherit;
93
+ }
94
+
95
+ :where(.theme-scope) .prose h1,
96
+ :where(.theme-scope) .prose h2,
97
+ :where(.theme-scope) .prose h3,
98
+ :where(.theme-scope) .prose h4,
99
+ :where(.theme-scope) .prose h5,
100
+ :where(.theme-scope) .prose h6 {
101
+ /* Headings inherit from parent or use theme text color */
102
+ color: inherit;
103
+ }
104
+
105
+ :where(.theme-scope) .prose strong,
106
+ :where(.theme-scope) .prose b {
107
+ /* Bold text inherits color but increases weight */
108
+ color: inherit;
109
+ font-weight: 600;
110
+ }
111
+
112
+ :where(.theme-scope) .prose em,
113
+ :where(.theme-scope) .prose i {
114
+ /* Italic text inherits color */
115
+ color: inherit;
116
+ }
117
+
118
+ :where(.theme-scope) .prose a {
119
+ /* Links use primary color from theme */
120
+ color: rgb(var(--tb-primary));
121
+ text-decoration: underline;
122
+ text-decoration-color: rgba(var(--tb-primary), 0.3);
123
+ transition: color 150ms ease, text-decoration-color 150ms ease;
124
+ }
125
+
126
+ :where(.theme-scope) .prose a:hover {
127
+ color: rgb(var(--tb-primary));
128
+ text-decoration-color: rgb(var(--tb-primary));
129
+ }
130
+
131
+ :where(.theme-scope) .prose blockquote {
132
+ /* Blockquotes use muted text color */
133
+ color: rgb(var(--tb-mutedText));
134
+ border-left-color: rgb(var(--tb-border));
135
+ }
136
+
137
+ :where(.theme-scope) .prose code {
138
+ /* Inline code uses text color with surface background */
139
+ color: inherit;
140
+ background-color: rgba(var(--tb-surface), 0.5);
141
+ padding: 0.125rem 0.25rem;
142
+ border-radius: 0.25rem;
143
+ font-size: 0.875em;
144
+ }
145
+
146
+ :where(.theme-scope) .prose pre {
147
+ /* Code blocks */
148
+ background-color: rgb(var(--tb-surface));
149
+ color: rgb(var(--tb-text));
150
+ border: 1px solid rgb(var(--tb-border));
151
+ border-radius: 0.5rem;
152
+ padding: 1rem;
153
+ overflow-x: auto;
154
+ }
155
+
156
+ :where(.theme-scope) .prose pre code {
157
+ /* Code inside pre blocks */
158
+ background-color: transparent;
159
+ padding: 0;
160
+ color: inherit;
161
+ }
162
+
163
+ :where(.theme-scope) .prose hr {
164
+ /* Horizontal rules */
165
+ border-color: rgb(var(--tb-border));
166
+ }
167
+
168
+ :where(.theme-scope) .prose ul > li::marker,
169
+ :where(.theme-scope) .prose ol > li::marker {
170
+ /* List markers use muted text color */
171
+ color: rgb(var(--tb-mutedText));
172
+ }
173
+
174
+ /*
175
+ /* Density helpers */
176
+ :where(.theme-scope) .section-pad { padding-top: 4rem; padding-bottom: 4rem; }
177
+ :where(.theme-scope)[data-density="airy"] .section-pad { padding-top: 4.5rem; padding-bottom: 4.5rem; }
178
+ :where(.theme-scope)[data-density="compact"] .section-pad { padding-top: 3rem; padding-bottom: 3rem; }
179
+
180
+ :where(.theme-scope) .rounded-control { border-radius: var(--radius-control); }
181
+ :where(.theme-scope) .rounded-card { border-radius: var(--radius-card); }
182
+
183
+ :where(.theme-scope) .shadow-elev { box-shadow: var(--shadow-elev); }
184
+
185
+ :where(.theme-scope) .font-heading { font-family: var(--font-heading); }
186
+ :where(.theme-scope) .font-body { font-family: var(--font-body); }
187
+
188
+ :where(.theme-scope) .text-h1 { font-size: var(--fs-h1); line-height: 1.1; }
189
+ :where(.theme-scope) .text-h2 { font-size: var(--fs-h2); line-height: 1.15; }
190
+ :where(.theme-scope) .text-h3 { font-size: var(--fs-h3); line-height: 1.2; }
191
+ :where(.theme-scope) .text-body-size { font-size: var(--fs-body); }
192
+
193
+ :where(.theme-scope) .transition-theme { transition: all var(--motion-duration) var(--motion-ease); }
194
+ :where(.theme-scope) .transition-theme-standard { transition: all var(--motion-duration) var(--motion-ease); }
195
+ :where(.theme-scope) .transition-theme-subtle { transition: all calc(var(--motion-duration) * 0.75) var(--motion-ease); }
196
+ :where(.theme-scope) .transition-theme-expressive { transition: all calc(var(--motion-duration) * 1.35) var(--motion-ease); }
197
+
198
+ /* Gradient utility helpers (Tailwind-compatible) */
199
+ /* These set gradient stop variables so classes like bg-gradient-to-r work with theme tokens */
200
+ /* Base tokens */
201
+ :where(.theme-scope) .from-background { --tw-gradient-from: rgb(var(--tb-background)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-background)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
202
+ :where(.theme-scope) .to-background { --tw-gradient-to: rgb(var(--tb-background)) var(--tw-gradient-to-position); }
203
+ :where(.theme-scope) .from-surface { --tw-gradient-from: rgb(var(--tb-surface)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-surface)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
204
+ :where(.theme-scope) .to-surface { --tw-gradient-to: rgb(var(--tb-surface)) var(--tw-gradient-to-position); }
205
+ :where(.theme-scope) .from-text { --tw-gradient-from: rgb(var(--tb-text)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-text)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
206
+ :where(.theme-scope) .to-text { --tw-gradient-to: rgb(var(--tb-text)) var(--tw-gradient-to-position); }
207
+ :where(.theme-scope) .from-border { --tw-gradient-from: rgb(var(--tb-border)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-border)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
208
+ :where(.theme-scope) .to-border { --tw-gradient-to: rgb(var(--tb-border)) var(--tw-gradient-to-position); }
209
+ :where(.theme-scope) .from-success { --tw-gradient-from: rgb(var(--tb-success)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-success)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
210
+ :where(.theme-scope) .to-success { --tw-gradient-to: rgb(var(--tb-success)) var(--tw-gradient-to-position); }
211
+ :where(.theme-scope) .from-warning { --tw-gradient-from: rgb(var(--tb-warning)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-warning)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
212
+ :where(.theme-scope) .to-warning { --tw-gradient-to: rgb(var(--tb-warning)) var(--tw-gradient-to-position); }
213
+ :where(.theme-scope) .from-info { --tw-gradient-from: rgb(var(--tb-info)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-info)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
214
+ :where(.theme-scope) .to-info { --tw-gradient-to: rgb(var(--tb-info)) var(--tw-gradient-to-position); }
215
+ :where(.theme-scope) .from-primary { --tw-gradient-from: rgb(var(--tb-primary)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
216
+ :where(.theme-scope) .to-primary { --tw-gradient-to: rgb(var(--tb-primary)) var(--tw-gradient-to-position); }
217
+ :where(.theme-scope) .from-secondary { --tw-gradient-from: rgb(var(--tb-secondary)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
218
+ :where(.theme-scope) .to-secondary { --tw-gradient-to: rgb(var(--tb-secondary)) var(--tw-gradient-to-position); }
219
+ :where(.theme-scope) .from-accent { --tw-gradient-from: rgb(var(--tb-accent)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
220
+ :where(.theme-scope) .to-accent { --tw-gradient-to: rgb(var(--tb-accent)) var(--tw-gradient-to-position); }
221
+
222
+ /* Shade tokens (50..950) for primary */
223
+ :where(.theme-scope) .from-primary-50 { --tw-gradient-from: rgb(var(--tb-primary-50)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-50)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
224
+ :where(.theme-scope) .to-primary-50 { --tw-gradient-to: rgb(var(--tb-primary-50)) var(--tw-gradient-to-position); }
225
+ :where(.theme-scope) .from-primary-100 { --tw-gradient-from: rgb(var(--tb-primary-100)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-100)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
226
+ :where(.theme-scope) .to-primary-100 { --tw-gradient-to: rgb(var(--tb-primary-100)) var(--tw-gradient-to-position); }
227
+ :where(.theme-scope) .from-primary-200 { --tw-gradient-from: rgb(var(--tb-primary-200)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-200)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
228
+ :where(.theme-scope) .to-primary-200 { --tw-gradient-to: rgb(var(--tb-primary-200)) var(--tw-gradient-to-position); }
229
+ :where(.theme-scope) .from-primary-300 { --tw-gradient-from: rgb(var(--tb-primary-300)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-300)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
230
+ :where(.theme-scope) .to-primary-300 { --tw-gradient-to: rgb(var(--tb-primary-300)) var(--tw-gradient-to-position); }
231
+ :where(.theme-scope) .from-primary-400 { --tw-gradient-from: rgb(var(--tb-primary-400)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-400)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
232
+ :where(.theme-scope) .to-primary-400 { --tw-gradient-to: rgb(var(--tb-primary-400)) var(--tw-gradient-to-position); }
233
+ :where(.theme-scope) .from-primary-500 { --tw-gradient-from: rgb(var(--tb-primary-500)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-500)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
234
+ :where(.theme-scope) .to-primary-500 { --tw-gradient-to: rgb(var(--tb-primary-500)) var(--tw-gradient-to-position); }
235
+ :where(.theme-scope) .from-primary-600 { --tw-gradient-from: rgb(var(--tb-primary-600)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-600)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
236
+ :where(.theme-scope) .to-primary-600 { --tw-gradient-to: rgb(var(--tb-primary-600)) var(--tw-gradient-to-position); }
237
+ :where(.theme-scope) .from-primary-700 { --tw-gradient-from: rgb(var(--tb-primary-700)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-700)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
238
+ :where(.theme-scope) .to-primary-700 { --tw-gradient-to: rgb(var(--tb-primary-700)) var(--tw-gradient-to-position); }
239
+ :where(.theme-scope) .from-primary-800 { --tw-gradient-from: rgb(var(--tb-primary-800)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-800)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
240
+ :where(.theme-scope) .to-primary-800 { --tw-gradient-to: rgb(var(--tb-primary-800)) var(--tw-gradient-to-position); }
241
+ :where(.theme-scope) .from-primary-900 { --tw-gradient-from: rgb(var(--tb-primary-900)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-900)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
242
+ :where(.theme-scope) .to-primary-900 { --tw-gradient-to: rgb(var(--tb-primary-900)) var(--tw-gradient-to-position); }
243
+ :where(.theme-scope) .from-primary-950 { --tw-gradient-from: rgb(var(--tb-primary-950)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-primary-950)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
244
+ :where(.theme-scope) .to-primary-950 { --tw-gradient-to: rgb(var(--tb-primary-950)) var(--tw-gradient-to-position); }
245
+
246
+ /* Shade tokens (50..950) for secondary */
247
+ :where(.theme-scope) .from-secondary-50 { --tw-gradient-from: rgb(var(--tb-secondary-50)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-50)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
248
+ :where(.theme-scope) .to-secondary-50 { --tw-gradient-to: rgb(var(--tb-secondary-50)) var(--tw-gradient-to-position); }
249
+ :where(.theme-scope) .from-secondary-100 { --tw-gradient-from: rgb(var(--tb-secondary-100)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-100)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
250
+ :where(.theme-scope) .to-secondary-100 { --tw-gradient-to: rgb(var(--tb-secondary-100)) var(--tw-gradient-to-position); }
251
+ :where(.theme-scope) .from-secondary-200 { --tw-gradient-from: rgb(var(--tb-secondary-200)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-200)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
252
+ :where(.theme-scope) .to-secondary-200 { --tw-gradient-to: rgb(var(--tb-secondary-200)) var(--tw-gradient-to-position); }
253
+ :where(.theme-scope) .from-secondary-300 { --tw-gradient-from: rgb(var(--tb-secondary-300)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-300)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
254
+ :where(.theme-scope) .to-secondary-300 { --tw-gradient-to: rgb(var(--tb-secondary-300)) var(--tw-gradient-to-position); }
255
+ :where(.theme-scope) .from-secondary-400 { --tw-gradient-from: rgb(var(--tb-secondary-400)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-400)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
256
+ :where(.theme-scope) .to-secondary-400 { --tw-gradient-to: rgb(var(--tb-secondary-400)) var(--tw-gradient-to-position); }
257
+ :where(.theme-scope) .from-secondary-500 { --tw-gradient-from: rgb(var(--tb-secondary-500)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-500)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
258
+ :where(.theme-scope) .to-secondary-500 { --tw-gradient-to: rgb(var(--tb-secondary-500)) var(--tw-gradient-to-position); }
259
+ :where(.theme-scope) .from-secondary-600 { --tw-gradient-from: rgb(var(--tb-secondary-600)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-600)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
260
+ :where(.theme-scope) .to-secondary-600 { --tw-gradient-to: rgb(var(--tb-secondary-600)) var(--tw-gradient-to-position); }
261
+ :where(.theme-scope) .from-secondary-700 { --tw-gradient-from: rgb(var(--tb-secondary-700)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-700)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
262
+ :where(.theme-scope) .to-secondary-700 { --tw-gradient-to: rgb(var(--tb-secondary-700)) var(--tw-gradient-to-position); }
263
+ :where(.theme-scope) .from-secondary-800 { --tw-gradient-from: rgb(var(--tb-secondary-800)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-800)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
264
+ :where(.theme-scope) .to-secondary-800 { --tw-gradient-to: rgb(var(--tb-secondary-800)) var(--tw-gradient-to-position); }
265
+ :where(.theme-scope) .from-secondary-900 { --tw-gradient-from: rgb(var(--tb-secondary-900)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-900)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
266
+ :where(.theme-scope) .to-secondary-900 { --tw-gradient-to: rgb(var(--tb-secondary-900)) var(--tw-gradient-to-position); }
267
+ :where(.theme-scope) .from-secondary-950 { --tw-gradient-from: rgb(var(--tb-secondary-950)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-secondary-950)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
268
+ :where(.theme-scope) .to-secondary-950 { --tw-gradient-to: rgb(var(--tb-secondary-950)) var(--tw-gradient-to-position); }
269
+
270
+ /* Shade tokens (50..950) for accent */
271
+ :where(.theme-scope) .from-accent-50 { --tw-gradient-from: rgb(var(--tb-accent-50)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-50)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
272
+ :where(.theme-scope) .to-accent-50 { --tw-gradient-to: rgb(var(--tb-accent-50)) var(--tw-gradient-to-position); }
273
+ :where(.theme-scope) .from-accent-100 { --tw-gradient-from: rgb(var(--tb-accent-100)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-100)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
274
+ :where(.theme-scope) .to-accent-100 { --tw-gradient-to: rgb(var(--tb-accent-100)) var(--tw-gradient-to-position); }
275
+ :where(.theme-scope) .from-accent-200 { --tw-gradient-from: rgb(var(--tb-accent-200)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-200)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
276
+ :where(.theme-scope) .to-accent-200 { --tw-gradient-to: rgb(var(--tb-accent-200)) var(--tw-gradient-to-position); }
277
+ :where(.theme-scope) .from-accent-300 { --tw-gradient-from: rgb(var(--tb-accent-300)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-300)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
278
+ :where(.theme-scope) .to-accent-300 { --tw-gradient-to: rgb(var(--tb-accent-300)) var(--tw-gradient-to-position); }
279
+ :where(.theme-scope) .from-accent-400 { --tw-gradient-from: rgb(var(--tb-accent-400)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-400)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
280
+ :where(.theme-scope) .to-accent-400 { --tw-gradient-to: rgb(var(--tb-accent-400)) var(--tw-gradient-to-position); }
281
+ :where(.theme-scope) .from-accent-500 { --tw-gradient-from: rgb(var(--tb-accent-500)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-500)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
282
+ :where(.theme-scope) .to-accent-500 { --tw-gradient-to: rgb(var(--tb-accent-500)) var(--tw-gradient-to-position); }
283
+ :where(.theme-scope) .from-accent-600 { --tw-gradient-from: rgb(var(--tb-accent-600)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-600)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
284
+ :where(.theme-scope) .to-accent-600 { --tw-gradient-to: rgb(var(--tb-accent-600)) var(--tw-gradient-to-position); }
285
+ :where(.theme-scope) .from-accent-700 { --tw-gradient-from: rgb(var(--tb-accent-700)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-700)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
286
+ :where(.theme-scope) .to-accent-700 { --tw-gradient-to: rgb(var(--tb-accent-700)) var(--tw-gradient-to-position); }
287
+ :where(.theme-scope) .from-accent-800 { --tw-gradient-from: rgb(var(--tb-accent-800)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-800)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
288
+ :where(.theme-scope) .to-accent-800 { --tw-gradient-to: rgb(var(--tb-accent-800)) var(--tw-gradient-to-position); }
289
+ :where(.theme-scope) .from-accent-900 { --tw-gradient-from: rgb(var(--tb-accent-900)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-900)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
290
+ :where(.theme-scope) .to-accent-900 { --tw-gradient-to: rgb(var(--tb-accent-900)) var(--tw-gradient-to-position); }
291
+ :where(.theme-scope) .from-accent-950 { --tw-gradient-from: rgb(var(--tb-accent-950)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-accent-950)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
292
+ :where(.theme-scope) .to-accent-950 { --tw-gradient-to: rgb(var(--tb-accent-950)) var(--tw-gradient-to-position); }
293
+
294
+ /* Shade tokens (50..950) for neutral */
295
+ :where(.theme-scope) .from-neutral-50 { --tw-gradient-from: rgb(var(--tb-neutral-50)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-50)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
296
+ :where(.theme-scope) .to-neutral-50 { --tw-gradient-to: rgb(var(--tb-neutral-50)) var(--tw-gradient-to-position); }
297
+ :where(.theme-scope) .from-neutral-100 { --tw-gradient-from: rgb(var(--tb-neutral-100)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-100)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
298
+ :where(.theme-scope) .to-neutral-100 { --tw-gradient-to: rgb(var(--tb-neutral-100)) var(--tw-gradient-to-position); }
299
+ :where(.theme-scope) .from-neutral-200 { --tw-gradient-from: rgb(var(--tb-neutral-200)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-200)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
300
+ :where(.theme-scope) .to-neutral-200 { --tw-gradient-to: rgb(var(--tb-neutral-200)) var(--tw-gradient-to-position); }
301
+ :where(.theme-scope) .from-neutral-300 { --tw-gradient-from: rgb(var(--tb-neutral-300)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-300)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
302
+ :where(.theme-scope) .to-neutral-300 { --tw-gradient-to: rgb(var(--tb-neutral-300)) var(--tw-gradient-to-position); }
303
+ :where(.theme-scope) .from-neutral-400 { --tw-gradient-from: rgb(var(--tb-neutral-400)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-400)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
304
+ :where(.theme-scope) .to-neutral-400 { --tw-gradient-to: rgb(var(--tb-neutral-400)) var(--tw-gradient-to-position); }
305
+ :where(.theme-scope) .from-neutral-500 { --tw-gradient-from: rgb(var(--tb-neutral-500)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-500)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
306
+ :where(.theme-scope) .to-neutral-500 { --tw-gradient-to: rgb(var(--tb-neutral-500)) var(--tw-gradient-to-position); }
307
+ :where(.theme-scope) .from-neutral-600 { --tw-gradient-from: rgb(var(--tb-neutral-600)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-600)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
308
+ :where(.theme-scope) .to-neutral-600 { --tw-gradient-to: rgb(var(--tb-neutral-600)) var(--tw-gradient-to-position); }
309
+ :where(.theme-scope) .from-neutral-700 { --tw-gradient-from: rgb(var(--tb-neutral-700)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-700)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
310
+ :where(.theme-scope) .to-neutral-700 { --tw-gradient-to: rgb(var(--tb-neutral-700)) var(--tw-gradient-to-position); }
311
+ :where(.theme-scope) .from-neutral-800 { --tw-gradient-from: rgb(var(--tb-neutral-800)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-800)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
312
+ :where(.theme-scope) .to-neutral-800 { --tw-gradient-to: rgb(var(--tb-neutral-800)) var(--tw-gradient-to-position); }
313
+ :where(.theme-scope) .from-neutral-900 { --tw-gradient-from: rgb(var(--tb-neutral-900)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-900)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
314
+ :where(.theme-scope) .to-neutral-900 { --tw-gradient-to: rgb(var(--tb-neutral-900)) var(--tw-gradient-to-position); }
315
+ :where(.theme-scope) .from-neutral-950 { --tw-gradient-from: rgb(var(--tb-neutral-950)) var(--tw-gradient-from-position); --tw-gradient-to: rgb(var(--tb-neutral-950)) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); }
316
+ :where(.theme-scope) .to-neutral-950 { --tw-gradient-to: rgb(var(--tb-neutral-950)) var(--tw-gradient-to-position); }
317
+
318
+ :where(.theme-scope) .nav-underline-grow {
319
+ position: relative;
320
+ overflow: visible;
321
+ }
322
+ :where(.theme-scope) .nav-underline-grow::after {
323
+ content: "";
324
+ position: absolute;
325
+ left: 0;
326
+ bottom: var(--nav-underline-offset, -0.35em);
327
+ width: 100%;
328
+ height: 2px;
329
+ background-color: currentColor;
330
+ transform: scaleX(0);
331
+ transform-origin: left center;
332
+ transition: transform calc(var(--motion-duration) * 1.1) var(--motion-ease);
333
+ }
334
+ :where(.theme-scope) .nav-underline-grow:hover::after,
335
+ :where(.theme-scope) .nav-underline-grow.nav-underline-active[data-active="true"]::after {
336
+ transform: scaleX(1);
337
+ }
338
+ :where(.theme-scope) .nav-underline-offset-tight { --nav-underline-offset: -0.2em; }
339
+ :where(.theme-scope) .nav-underline-offset-normal { --nav-underline-offset: -0.3em; }
340
+ :where(.theme-scope) .nav-underline-offset-loose { --nav-underline-offset: -0.45em; }
341
+
342
+ :where(.theme-scope) .card-surface {
343
+ background: rgb(var(--tb-surface));
344
+ border: 1px solid rgb(var(--tb-border));
345
+ border-radius: var(--radius-card);
346
+ box-shadow: var(--shadow-elev);
347
+ }
348
+ :where(.theme-scope) .media-rounded { border-radius: var(--radius-card); }
349
+
350
+ :where(.theme-scope) .is-placeholder::after {
351
+ content: "Placeholder";
352
+ position: absolute; top: .5rem; left: .5rem;
353
+ font-size: 11px;
354
+ background: color-mix(in oklab, rgb(var(--tb-bg)), rgb(var(--tb-text)) 10%);
355
+ color: rgb(var(--tb-text));
356
+ padding: .15rem .35rem; border-radius: 4px;
357
+ opacity: .85;
358
+ }
359
+
360
+ /* Status badges - theme-aware styling for capacity indicators */
361
+ :where(.theme-scope) .badge-status {
362
+ display: inline-flex;
363
+ align-items: center;
364
+ padding: 0.125rem 0.625rem;
365
+ border-radius: 9999px;
366
+ font-size: 0.75rem;
367
+ font-weight: 500;
368
+ line-height: 1.25rem;
369
+ }
370
+
371
+ /* All badges use a subtle theme-aware style by default */
372
+ :where(.theme-scope) .badge-status-available {
373
+ background-color: rgba(var(--tb-secondary), 0.15);
374
+ color: rgb(var(--tb-secondary-700, var(--tb-secondary)));
375
+ }
376
+
377
+ :where(.theme-scope) .badge-status-low {
378
+ background-color: rgba(var(--tb-accent), 0.15);
379
+ color: rgb(var(--tb-accent-700, var(--tb-accent)));
380
+ }
381
+
382
+ :where(.theme-scope) .badge-status-sold-out {
383
+ background-color: rgba(var(--tb-text), 0.1);
384
+ color: rgb(var(--tb-mutedText));
385
+ }
386
+
387
+ /* Event list empty state - theme-aware */
388
+ :where(.theme-scope) .event-list-empty {
389
+ background-color: rgb(var(--tb-surface));
390
+ border-color: rgb(var(--tb-border));
391
+ }
392
+
393
+
394
+ @keyframes accordion-down {
395
+ from {
396
+ height: 0;
397
+ }
398
+ to {
399
+ height: var(--radix-accordion-content-height);
400
+ }
401
+ }
402
+
403
+ @keyframes accordion-up {
404
+ from {
405
+ height: var(--radix-accordion-content-height);
406
+ }
407
+ to {
408
+ height: 0;
409
+ }
410
+ }
411
+
412
+ .theme-scope [data-animation="accordion"][data-state="open"] {
413
+ animation: accordion-down 0.25s ease-out;
414
+ }
415
+
416
+ .theme-scope [data-animation="accordion"][data-state="closed"] {
417
+ animation: accordion-up 0.2s ease-in;
418
+ }
419
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riverbankcms/sdk",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "Riverbank CMS SDK for headless content consumption",
5
5
  "main": "./dist/server/index.js",
6
6
  "module": "./dist/server/index.mjs",
@@ -129,11 +129,25 @@
129
129
  "import": "./dist/server/webhooks.mjs",
130
130
  "require": "./dist/server/webhooks.js"
131
131
  },
132
- "./styles.css": "./src/styles/index.css"
132
+ "./prebuild": {
133
+ "types": "./dist/server/prebuild.d.ts",
134
+ "import": "./dist/server/prebuild.mjs",
135
+ "require": "./dist/server/prebuild.js"
136
+ },
137
+ "./prebuild/loader": {
138
+ "types": "./dist/server/prebuild-loader.d.ts",
139
+ "import": "./dist/server/prebuild-loader.mjs",
140
+ "require": "./dist/server/prebuild-loader.js"
141
+ },
142
+ "./prebuild/types": {
143
+ "types": "./dist/server/prebuild-types.d.ts",
144
+ "import": "./dist/server/prebuild-types.mjs",
145
+ "require": "./dist/server/prebuild-types.js"
146
+ },
147
+ "./styles.css": "./dist/styles/index.css"
133
148
  },
134
149
  "files": [
135
150
  "dist",
136
- "src/styles",
137
151
  "README.md"
138
152
  ],
139
153
  "scripts": {