@backbay/glia 0.2.0-alpha.6 → 0.2.0-alpha.8

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 (226) hide show
  1. package/dist/audio/index.js +1145 -5
  2. package/dist/audio/index.js.map +1 -1
  3. package/dist/components/index.js +3187 -10
  4. package/dist/components/index.js.map +1 -1
  5. package/dist/core.js +19714 -12
  6. package/dist/core.js.map +1 -1
  7. package/dist/emotion/index.js +1 -1
  8. package/dist/emotion/index.js.map +1 -1
  9. package/dist/hooks/index.js +941 -6
  10. package/dist/hooks/index.js.map +1 -1
  11. package/dist/index.js +31841 -183
  12. package/dist/index.js.map +1 -1
  13. package/dist/primitives/index.js +21111 -57
  14. package/dist/primitives/index.js.map +1 -1
  15. package/dist/protocol/index.js +360 -2
  16. package/dist/protocol/index.js.map +1 -1
  17. package/dist/speakeasy/index.js +2786 -38
  18. package/dist/speakeasy/index.js.map +1 -1
  19. package/dist/styles.css +1 -1
  20. package/dist/theme/index.js +1150 -3
  21. package/dist/theme/index.js.map +1 -1
  22. package/dist/vision/index.js +370 -2
  23. package/dist/vision/index.js.map +1 -1
  24. package/dist/workspace/index.js +16824 -2
  25. package/dist/workspace/index.js.map +1 -1
  26. package/package.json +16 -10
  27. package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
  28. package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
  29. package/dist/BentoGrid-CDARICNM.js +0 -6
  30. package/dist/BentoGrid-CDARICNM.js.map +0 -1
  31. package/dist/CommandPalette-JCWJKRBY.js +0 -6
  32. package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
  33. package/dist/Glass-H4X4ZI4P.js +0 -7
  34. package/dist/Glass-H4X4ZI4P.js.map +0 -1
  35. package/dist/GlitchText-KLQ57PPY.js +0 -6
  36. package/dist/GlitchText-KLQ57PPY.js.map +0 -1
  37. package/dist/GlowButton-VGBPMZO7.js +0 -6
  38. package/dist/GlowButton-VGBPMZO7.js.map +0 -1
  39. package/dist/Graph3D-GO7N2EZQ.js +0 -540
  40. package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
  41. package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
  42. package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
  43. package/dist/KPIStat-PBQK27ZB.js +0 -6
  44. package/dist/KPIStat-PBQK27ZB.js.map +0 -1
  45. package/dist/NeonToast-W5F7MU3U.js +0 -6
  46. package/dist/NeonToast-W5F7MU3U.js.map +0 -1
  47. package/dist/ParticleField-WK6CNHWU.js +0 -51
  48. package/dist/ParticleField-WK6CNHWU.js.map +0 -1
  49. package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
  50. package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
  51. package/dist/ThreeDCard-VH5I3SSY.js +0 -6
  52. package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
  53. package/dist/TypingAnimation-GIWOHPIX.js +0 -6
  54. package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
  55. package/dist/alert-dialog-QOSYBIIE.js +0 -19
  56. package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
  57. package/dist/avatar-N5R37PCU.js +0 -10
  58. package/dist/avatar-N5R37PCU.js.map +0 -1
  59. package/dist/badge-GTVIIGPY.js +0 -8
  60. package/dist/badge-GTVIIGPY.js.map +0 -1
  61. package/dist/button-D7IMSV2D.js +0 -8
  62. package/dist/button-D7IMSV2D.js.map +0 -1
  63. package/dist/chunk-3CMPQOMY.js +0 -69
  64. package/dist/chunk-3CMPQOMY.js.map +0 -1
  65. package/dist/chunk-3OQT6IYR.js +0 -41
  66. package/dist/chunk-3OQT6IYR.js.map +0 -1
  67. package/dist/chunk-43B2WVLS.js +0 -85
  68. package/dist/chunk-43B2WVLS.js.map +0 -1
  69. package/dist/chunk-4SRFO5W3.js +0 -121
  70. package/dist/chunk-4SRFO5W3.js.map +0 -1
  71. package/dist/chunk-5IZELOOU.js +0 -362
  72. package/dist/chunk-5IZELOOU.js.map +0 -1
  73. package/dist/chunk-6DM4ACSS.js +0 -154
  74. package/dist/chunk-6DM4ACSS.js.map +0 -1
  75. package/dist/chunk-6IGT34PC.js +0 -50
  76. package/dist/chunk-6IGT34PC.js.map +0 -1
  77. package/dist/chunk-6RKBCJHN.js +0 -194
  78. package/dist/chunk-6RKBCJHN.js.map +0 -1
  79. package/dist/chunk-6RX2WGCO.js +0 -108
  80. package/dist/chunk-6RX2WGCO.js.map +0 -1
  81. package/dist/chunk-7K4WZM3U.js +0 -189
  82. package/dist/chunk-7K4WZM3U.js.map +0 -1
  83. package/dist/chunk-7MDBHJPT.js +0 -407
  84. package/dist/chunk-7MDBHJPT.js.map +0 -1
  85. package/dist/chunk-7UQD6ROV.js +0 -9
  86. package/dist/chunk-7UQD6ROV.js.map +0 -1
  87. package/dist/chunk-AFNIVLZP.js +0 -1069
  88. package/dist/chunk-AFNIVLZP.js.map +0 -1
  89. package/dist/chunk-ANWYRO6A.js +0 -407
  90. package/dist/chunk-ANWYRO6A.js.map +0 -1
  91. package/dist/chunk-DIXPOHDO.js +0 -71
  92. package/dist/chunk-DIXPOHDO.js.map +0 -1
  93. package/dist/chunk-DWYMKYPI.js +0 -3
  94. package/dist/chunk-DWYMKYPI.js.map +0 -1
  95. package/dist/chunk-E3NVDCZG.js +0 -280
  96. package/dist/chunk-E3NVDCZG.js.map +0 -1
  97. package/dist/chunk-EBM7YBKL.js +0 -399
  98. package/dist/chunk-EBM7YBKL.js.map +0 -1
  99. package/dist/chunk-EPAM7IWW.js +0 -294
  100. package/dist/chunk-EPAM7IWW.js.map +0 -1
  101. package/dist/chunk-EXQ7GYRS.js +0 -134
  102. package/dist/chunk-EXQ7GYRS.js.map +0 -1
  103. package/dist/chunk-F4QTUZ3C.js +0 -136
  104. package/dist/chunk-F4QTUZ3C.js.map +0 -1
  105. package/dist/chunk-FEW533R2.js +0 -105
  106. package/dist/chunk-FEW533R2.js.map +0 -1
  107. package/dist/chunk-FFZLJKC7.js +0 -270
  108. package/dist/chunk-FFZLJKC7.js.map +0 -1
  109. package/dist/chunk-GEAMOBF7.js +0 -8486
  110. package/dist/chunk-GEAMOBF7.js.map +0 -1
  111. package/dist/chunk-GRTRSCTD.js +0 -74
  112. package/dist/chunk-GRTRSCTD.js.map +0 -1
  113. package/dist/chunk-IKGYOGLK.js +0 -16
  114. package/dist/chunk-IKGYOGLK.js.map +0 -1
  115. package/dist/chunk-IQ7WYWVJ.js +0 -73
  116. package/dist/chunk-IQ7WYWVJ.js.map +0 -1
  117. package/dist/chunk-IXIVWQLF.js +0 -543
  118. package/dist/chunk-IXIVWQLF.js.map +0 -1
  119. package/dist/chunk-JCJU57RC.js +0 -115
  120. package/dist/chunk-JCJU57RC.js.map +0 -1
  121. package/dist/chunk-KORSTBU4.js +0 -117
  122. package/dist/chunk-KORSTBU4.js.map +0 -1
  123. package/dist/chunk-KSEZ6UM2.js +0 -235
  124. package/dist/chunk-KSEZ6UM2.js.map +0 -1
  125. package/dist/chunk-MHPF7R3O.js +0 -1376
  126. package/dist/chunk-MHPF7R3O.js.map +0 -1
  127. package/dist/chunk-MPC5IH7E.js +0 -81
  128. package/dist/chunk-MPC5IH7E.js.map +0 -1
  129. package/dist/chunk-MQIU2NYA.js +0 -114
  130. package/dist/chunk-MQIU2NYA.js.map +0 -1
  131. package/dist/chunk-NYMBJOGR.js +0 -2192
  132. package/dist/chunk-NYMBJOGR.js.map +0 -1
  133. package/dist/chunk-OBZD2M3C.js +0 -169
  134. package/dist/chunk-OBZD2M3C.js.map +0 -1
  135. package/dist/chunk-ODM2AG6G.js +0 -176
  136. package/dist/chunk-ODM2AG6G.js.map +0 -1
  137. package/dist/chunk-ONDKF5LP.js +0 -53
  138. package/dist/chunk-ONDKF5LP.js.map +0 -1
  139. package/dist/chunk-P25YCWQB.js +0 -41
  140. package/dist/chunk-P25YCWQB.js.map +0 -1
  141. package/dist/chunk-PFYVNM6H.js +0 -14
  142. package/dist/chunk-PFYVNM6H.js.map +0 -1
  143. package/dist/chunk-PWNNSGFL.js +0 -20
  144. package/dist/chunk-PWNNSGFL.js.map +0 -1
  145. package/dist/chunk-Q2PGZVOT.js +0 -36
  146. package/dist/chunk-Q2PGZVOT.js.map +0 -1
  147. package/dist/chunk-Q2XDMV7U.js +0 -76
  148. package/dist/chunk-Q2XDMV7U.js.map +0 -1
  149. package/dist/chunk-QG7FH2FI.js +0 -45
  150. package/dist/chunk-QG7FH2FI.js.map +0 -1
  151. package/dist/chunk-R7HUOK2D.js +0 -1914
  152. package/dist/chunk-R7HUOK2D.js.map +0 -1
  153. package/dist/chunk-REUYY7G5.js +0 -773
  154. package/dist/chunk-REUYY7G5.js.map +0 -1
  155. package/dist/chunk-RHC2Z2HT.js +0 -199
  156. package/dist/chunk-RHC2Z2HT.js.map +0 -1
  157. package/dist/chunk-RMCVLIFE.js +0 -23
  158. package/dist/chunk-RMCVLIFE.js.map +0 -1
  159. package/dist/chunk-ROZLTXGR.js +0 -234
  160. package/dist/chunk-ROZLTXGR.js.map +0 -1
  161. package/dist/chunk-RSS2C2O3.js +0 -17
  162. package/dist/chunk-RSS2C2O3.js.map +0 -1
  163. package/dist/chunk-SAGCG5SH.js +0 -355
  164. package/dist/chunk-SAGCG5SH.js.map +0 -1
  165. package/dist/chunk-TM6AOUSD.js +0 -40
  166. package/dist/chunk-TM6AOUSD.js.map +0 -1
  167. package/dist/chunk-TPK4BYCO.js +0 -970
  168. package/dist/chunk-TPK4BYCO.js.map +0 -1
  169. package/dist/chunk-UNQIL4K2.js +0 -34
  170. package/dist/chunk-UNQIL4K2.js.map +0 -1
  171. package/dist/chunk-UUG6L75Y.js +0 -47
  172. package/dist/chunk-UUG6L75Y.js.map +0 -1
  173. package/dist/chunk-V2SYMV4W.js +0 -114
  174. package/dist/chunk-V2SYMV4W.js.map +0 -1
  175. package/dist/chunk-V7EN5CTH.js +0 -130
  176. package/dist/chunk-V7EN5CTH.js.map +0 -1
  177. package/dist/chunk-VITKG2HL.js +0 -1125
  178. package/dist/chunk-VITKG2HL.js.map +0 -1
  179. package/dist/chunk-VYEWU5LO.js +0 -2631
  180. package/dist/chunk-VYEWU5LO.js.map +0 -1
  181. package/dist/chunk-W67QAGSH.js +0 -178
  182. package/dist/chunk-W67QAGSH.js.map +0 -1
  183. package/dist/chunk-WWBIN6KV.js +0 -1353
  184. package/dist/chunk-WWBIN6KV.js.map +0 -1
  185. package/dist/chunk-X77Z4PFB.js +0 -224
  186. package/dist/chunk-X77Z4PFB.js.map +0 -1
  187. package/dist/chunk-X7VG7OTT.js +0 -8
  188. package/dist/chunk-X7VG7OTT.js.map +0 -1
  189. package/dist/chunk-XE4K2SGI.js +0 -74
  190. package/dist/chunk-XE4K2SGI.js.map +0 -1
  191. package/dist/chunk-YIUG7IJK.js +0 -628
  192. package/dist/chunk-YIUG7IJK.js.map +0 -1
  193. package/dist/chunk-YNVN3V4Y.js +0 -13
  194. package/dist/chunk-YNVN3V4Y.js.map +0 -1
  195. package/dist/chunk-Z2S54IZX.js +0 -198
  196. package/dist/chunk-Z2S54IZX.js.map +0 -1
  197. package/dist/chunk-ZR6AH25Z.js +0 -17
  198. package/dist/chunk-ZR6AH25Z.js.map +0 -1
  199. package/dist/dialog-SPM3DTTI.js +0 -17
  200. package/dist/dialog-SPM3DTTI.js.map +0 -1
  201. package/dist/dropdown-menu-HMTWKWGK.js +0 -21
  202. package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
  203. package/dist/input-BH4P4S26.js +0 -6
  204. package/dist/input-BH4P4S26.js.map +0 -1
  205. package/dist/label-5Z4Q6VER.js +0 -8
  206. package/dist/label-5Z4Q6VER.js.map +0 -1
  207. package/dist/popover-IFOUXYLI.js +0 -18
  208. package/dist/popover-IFOUXYLI.js.map +0 -1
  209. package/dist/scroll-area-DJXNW6QX.js +0 -14
  210. package/dist/scroll-area-DJXNW6QX.js.map +0 -1
  211. package/dist/select-FZ277C3G.js +0 -22
  212. package/dist/select-FZ277C3G.js.map +0 -1
  213. package/dist/separator-BTMLN4NB.js +0 -8
  214. package/dist/separator-BTMLN4NB.js.map +0 -1
  215. package/dist/skeleton-DXIWBH4W.js +0 -6
  216. package/dist/skeleton-DXIWBH4W.js.map +0 -1
  217. package/dist/switch-4MCXIZBY.js +0 -13
  218. package/dist/switch-4MCXIZBY.js.map +0 -1
  219. package/dist/tabs-O7AW3APK.js +0 -17
  220. package/dist/tabs-O7AW3APK.js.map +0 -1
  221. package/dist/textarea-IB5WAFDO.js +0 -6
  222. package/dist/textarea-IB5WAFDO.js.map +0 -1
  223. package/dist/toggle-XVPPG6P4.js +0 -10
  224. package/dist/toggle-XVPPG6P4.js.map +0 -1
  225. package/dist/tooltip-JICZTD4F.js +0 -18
  226. package/dist/tooltip-JICZTD4F.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":["../../src/primitives/atoms/GliaErrorBoundary/useErrorBoundary.tsx","../../src/primitives/atoms/GliaErrorBoundary/GliaErrorBoundary.tsx","../../src/components/BBProvider.tsx","../../src/hooks/useSync.ts","../../src/components/SyncDocument.tsx","../../src/hooks/useAgentRun.ts","../../src/components/AgentPanel.tsx","../../src/hooks/usePlaySession.ts","../../src/components/PlaySession.tsx","../../src/components/ClusterHero/config.ts","../../src/lib/utils.ts","../../src/theme/UiThemeProvider.tsx","../../src/primitives/ambient/DustMotesLayer.tsx","../../src/primitives/environment/shared/types.ts","../../src/primitives/environment/shared/performance.ts","../../src/primitives/environment/shared/noise.ts","../../src/primitives/environment/VolumetricLight/types.ts","../../src/primitives/environment/VolumetricLight/VolumetricLight.tsx","../../src/primitives/environment/FogLayer/types.ts","../../src/primitives/environment/FogLayer/FogLayer.tsx","../../src/components/ClusterHero/ClusterAtmosphere.tsx","../../src/components/ClusterHero/GradientVeil.tsx","../../src/components/ClusterHero/StructuralElements.tsx","../../src/components/ClusterHero/VideoBackground.tsx","../../src/components/ClusterHero/ClusterRail.tsx","../../src/components/ClusterHero/BriefingPanel.tsx","../../src/components/ClusterHero/SigilMonument.tsx","../../src/components/ClusterHero/LiveStrip.tsx","../../src/components/ClusterHero/useVideoPreload.ts","../../src/components/ClusterHero/ClusterHero.tsx","../../src/components/ClusterHero/ClusterHeroPage.tsx"],"names":["jsx","createContext","useState","useCallback","useContext","useEffect","jsxs","useRef","React2","MoteParticle","useReducedMotion","React4","React5","Fragment","motion","prefersReducedMotion","useMemo","useTransform"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\nimport { createContext, useContext, useCallback, useState, type ReactNode } from \"react\";\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nexport interface ErrorBoundaryContextValue {\n throwError: (error: Error) => void;\n}\n\nexport const ErrorBoundaryContext = createContext<ErrorBoundaryContextValue | null>(null);\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\n/**\n * Hook that provides a `throwError` function to trigger the nearest\n * GliaErrorBoundary from a function component.\n *\n * @example\n * ```tsx\n * const { throwError } = useErrorBoundary();\n * stream.on('error', (err) => throwError(err));\n * ```\n */\nexport function useErrorBoundary(): ErrorBoundaryContextValue {\n const ctx = useContext(ErrorBoundaryContext);\n if (!ctx) {\n throw new Error(\"useErrorBoundary must be used within a GliaErrorBoundary\");\n }\n return ctx;\n}\n\n// ============================================================================\n// ERROR THROWER (internal helper)\n// ============================================================================\n\n/**\n * Internal component that catches programmatic errors thrown via context\n * and re-throws them during render so React's error boundary catches them.\n */\nexport function ErrorThrower({ children }: { children: ReactNode }) {\n const [error, setError] = useState<Error | null>(null);\n\n if (error) {\n throw error;\n }\n\n const throwError = useCallback((err: Error) => {\n setError(err);\n }, []);\n\n return (\n <ErrorBoundaryContext.Provider value={{ throwError }}>\n {children}\n </ErrorBoundaryContext.Provider>\n );\n}\n","\"use client\";\n\nimport React, { Component, type ReactNode, type ErrorInfo } from \"react\";\nimport { ErrorThrower } from \"./useErrorBoundary\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ErrorFallbackProps {\n error: Error;\n reset: () => void;\n}\n\nexport interface GliaErrorBoundaryProps {\n children: ReactNode;\n /** Custom fallback UI. Receives error + reset function. */\n fallback?: ReactNode | ((props: ErrorFallbackProps) => ReactNode);\n /** Called when an error is caught. Use for telemetry/logging. */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n /** Auto-retry after this many ms (0 = no auto-retry) */\n autoRetryMs?: number;\n /** Glass-themed fallback styling */\n variant?: \"inline\" | \"card\" | \"fullscreen\";\n}\n\ninterface GliaErrorBoundaryState {\n error: Error | null;\n}\n\n// ============================================================================\n// DEFAULT FALLBACK (glass-themed)\n// ============================================================================\n\nfunction DefaultFallback({\n error,\n reset,\n variant = \"card\",\n}: ErrorFallbackProps & { variant?: \"inline\" | \"card\" | \"fullscreen\" }) {\n const isFullscreen = variant === \"fullscreen\";\n const isInline = variant === \"inline\";\n\n const containerStyle: React.CSSProperties = isFullscreen\n ? {\n position: \"fixed\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 9999,\n background: \"rgba(0, 0, 0, 0.6)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n }\n : isInline\n ? {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"4px 8px\",\n borderRadius: 6,\n background: \"rgba(255, 60, 60, 0.08)\",\n border: \"1px solid rgba(255, 60, 60, 0.2)\",\n }\n : {};\n\n const cardStyle: React.CSSProperties = {\n background: \"rgba(20, 20, 30, 0.85)\",\n backdropFilter: \"blur(16px)\",\n WebkitBackdropFilter: \"blur(16px)\",\n border: \"1px solid rgba(255, 255, 255, 0.08)\",\n borderRadius: 12,\n padding: isInline ? undefined : \"24px 28px\",\n maxWidth: isFullscreen ? 480 : \"100%\",\n width: isFullscreen ? \"90%\" : undefined,\n color: \"rgba(255, 255, 255, 0.9)\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n };\n\n if (isInline) {\n return (\n <span style={containerStyle}>\n <span style={{ color: \"rgba(255, 100, 100, 0.9)\", fontSize: 12 }}>\n Error: {error.message}\n </span>\n <button\n onClick={reset}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"rgba(100, 180, 255, 0.9)\",\n cursor: \"pointer\",\n fontSize: 12,\n textDecoration: \"underline\",\n padding: 0,\n }}\n >\n Retry\n </button>\n </span>\n );\n }\n\n return (\n <div style={containerStyle}>\n <div style={cardStyle}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12 }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"rgba(255, 100, 100, 0.9)\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <span style={{ fontWeight: 600, fontSize: 15 }}>Something went wrong</span>\n </div>\n <p style={{ color: \"rgba(255, 255, 255, 0.5)\", fontSize: 13, lineHeight: 1.5, margin: \"0 0 16px\", wordBreak: \"break-word\" }}>\n {error.message}\n </p>\n <button\n onClick={reset}\n style={{\n background: \"rgba(255, 255, 255, 0.08)\",\n border: \"1px solid rgba(255, 255, 255, 0.12)\",\n borderRadius: 8,\n padding: \"8px 16px\",\n color: \"rgba(255, 255, 255, 0.9)\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 500,\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.background = \"rgba(255, 255, 255, 0.14)\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.background = \"rgba(255, 255, 255, 0.08)\";\n }}\n >\n Try again\n </button>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// ERROR BOUNDARY (class component)\n// ============================================================================\n\nexport class GliaErrorBoundary extends Component<GliaErrorBoundaryProps, GliaErrorBoundaryState> {\n static displayName = \"GliaErrorBoundary\";\n private autoRetryTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: GliaErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): GliaErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo);\n\n if (this.props.autoRetryMs && this.props.autoRetryMs > 0) {\n this.autoRetryTimer = setTimeout(() => {\n this.reset();\n }, this.props.autoRetryMs);\n }\n }\n\n componentWillUnmount(): void {\n if (this.autoRetryTimer) {\n clearTimeout(this.autoRetryTimer);\n }\n }\n\n reset = () => {\n if (this.autoRetryTimer) {\n clearTimeout(this.autoRetryTimer);\n this.autoRetryTimer = null;\n }\n this.setState({ error: null });\n };\n\n render() {\n const { error } = this.state;\n const { children, fallback, variant = \"card\" } = this.props;\n\n if (error) {\n if (typeof fallback === \"function\") {\n return fallback({ error, reset: this.reset });\n }\n if (fallback !== undefined) {\n return fallback;\n }\n return <DefaultFallback error={error} reset={this.reset} variant={variant} />;\n }\n\n return <ErrorThrower>{children}</ErrorThrower>;\n }\n}\n","/**\n * BBProvider - Root context provider for bb-ui\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useMemo,\n type ReactNode,\n} from 'react';\nimport type { Agent, AgentRun, BBConfig, SyncStatus } from '../protocol/types.js';\nimport { GliaErrorBoundary } from '../primitives/atoms/GliaErrorBoundary';\n\n// =============================================================================\n// Context Types\n// =============================================================================\n\ninterface BBContextValue {\n /** Configuration */\n config: BBConfig;\n\n /** Available agents */\n agents: Agent[];\n\n /** Currently executing runs */\n activeRuns: AgentRun[];\n\n /** All runs in this session */\n runHistory: AgentRun[];\n\n /** Session cost accumulator */\n totalCost: number;\n\n /** Global sync status */\n syncStatus: SyncStatus;\n\n /** Add a run to tracking */\n addRun: (run: AgentRun) => void;\n\n /** Update a run */\n updateRun: (runId: string, updates: Partial<AgentRun>) => void;\n\n /** Set global sync status */\n setSyncStatus: (status: SyncStatus) => void;\n\n /** Get an agent by ID */\n getAgent: (agentId: string) => Agent | undefined;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst BBContext = createContext<BBContextValue | null>(null);\n\n// =============================================================================\n// Provider Props\n// =============================================================================\n\nexport interface BBProviderProps {\n children: ReactNode;\n\n /** Configuration for bb-ui */\n config: BBConfig;\n\n /** Available agents */\n agents?: Agent[];\n\n /** Initial sync status */\n initialSyncStatus?: SyncStatus;\n}\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\nexport function BBProvider({\n children,\n config,\n agents = [],\n initialSyncStatus = 'synced',\n}: BBProviderProps) {\n const [activeRuns, setActiveRuns] = useState<AgentRun[]>([]);\n const [runHistory, setRunHistory] = useState<AgentRun[]>([]);\n const [syncStatus, setSyncStatus] = useState<SyncStatus>(initialSyncStatus);\n\n // Calculate total cost from run history\n const totalCost = useMemo(() => {\n return runHistory.reduce((sum, run) => sum + (run.cost ?? 0), 0);\n }, [runHistory]);\n\n // Add a new run\n const addRun = useCallback((run: AgentRun) => {\n setActiveRuns((prev) => [...prev, run]);\n setRunHistory((prev) => [...prev, run]);\n }, []);\n\n // Update an existing run\n const updateRun = useCallback((runId: string, updates: Partial<AgentRun>) => {\n const updateInList = (runs: AgentRun[]) =>\n runs.map((run) => (run.id === runId ? { ...run, ...updates } : run));\n\n setActiveRuns((prev) => {\n const updated = updateInList(prev);\n // Remove completed/failed/cancelled runs from active\n return updated.filter(\n (run) => run.status === 'idle' || run.status === 'running'\n );\n });\n\n setRunHistory(updateInList);\n }, []);\n\n // Get agent by ID\n const getAgent = useCallback(\n (agentId: string) => agents.find((a) => a.id === agentId),\n [agents]\n );\n\n const value = useMemo<BBContextValue>(\n () => ({\n config,\n agents,\n activeRuns,\n runHistory,\n totalCost,\n syncStatus,\n addRun,\n updateRun,\n setSyncStatus,\n getAgent,\n }),\n [\n config,\n agents,\n activeRuns,\n runHistory,\n totalCost,\n syncStatus,\n addRun,\n updateRun,\n getAgent,\n ]\n );\n\n return (\n <BBContext.Provider value={value}>\n <GliaErrorBoundary variant=\"fullscreen\">\n {children}\n </GliaErrorBoundary>\n </BBContext.Provider>\n );\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Access the bb-ui context\n */\nexport function useBBContext(): BBContextValue {\n const context = useContext(BBContext);\n if (!context) {\n throw new Error('useBBContext must be used within a BBProvider');\n }\n return context;\n}\n\n/**\n * Check if we're inside a BBProvider\n */\nexport function useBBContextOptional(): BBContextValue | null {\n return useContext(BBContext);\n}\n","/**\n * useSync - Offline-first sync hook with conflict resolution\n *\n * Implements the hybrid local+API sync pattern from Backbay.\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport type { SyncStatus, SyncConflict, ConflictResolution } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseSyncOptions<T> {\n /** Unique key for localStorage */\n key: string;\n\n /** API endpoint for sync */\n endpoint: string;\n\n /** Debounce time in ms (default: 2000) */\n debounce?: number;\n\n /** Initial data */\n initialData?: T;\n\n /** Custom fetch function */\n fetcher?: (endpoint: string) => Promise<T>;\n\n /** Custom save function */\n saver?: (endpoint: string, data: T) => Promise<T>;\n\n /** Called when conflict is detected */\n onConflict?: (conflict: SyncConflict<T>) => void;\n\n /** Called on sync error */\n onError?: (error: Error) => void;\n\n /** Called on successful sync */\n onSync?: (data: T) => void;\n}\n\nexport interface UseSyncReturn<T> {\n /** Current data */\n data: T | null;\n\n /** Update data locally (triggers debounced sync) */\n setData: (data: T | ((prev: T | null) => T)) => void;\n\n /** Current sync status */\n status: SyncStatus;\n\n /** Number of pending changes */\n pendingChanges: number;\n\n /** Timestamp of last successful sync */\n lastSyncedAt: number | null;\n\n /** Current conflict if status === 'conflict' */\n conflict: SyncConflict<T> | null;\n\n /** Resolve a conflict */\n resolveConflict: (resolution: ConflictResolution) => Promise<void>;\n\n /** Force immediate save (bypass debounce) */\n forceSave: () => Promise<void>;\n\n /** Refresh from server */\n refresh: () => Promise<void>;\n\n /** Whether initial load is complete */\n isLoaded: boolean;\n}\n\n// =============================================================================\n// Local Storage Helpers\n// =============================================================================\n\ntype StoredDataV1<T> = {\n data: T;\n timestamp: number;\n version: number;\n};\n\ninterface StoredDataV2<T> {\n data: T;\n /** When the data last changed locally (ms since epoch). */\n lastModifiedAt: number;\n /** When we last successfully synced to server (ms since epoch). 0 means \"unknown/never\". */\n lastSyncedAt: number;\n /** Hash of the server data at the last successful sync (empty string means \"unknown/never\"). */\n lastSyncedHash: string;\n}\n\ntype StoredData<T> = StoredDataV2<T>;\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n const encoded = JSON.stringify(value);\n return encoded === undefined ? \"null\" : encoded;\n }\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(record[k])}`).join(\",\")}}`;\n}\n\nfunction hashString(input: string): string {\n // FNV-1a 32-bit\n let hash = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = (hash * 0x01000193) >>> 0;\n }\n return hash.toString(36);\n}\n\nfunction hashData(value: unknown): string {\n return hashString(stableStringify(value));\n}\n\nfunction normalizeStoredData<T>(raw: unknown): StoredData<T> | null {\n if (!raw || typeof raw !== \"object\") return null;\n const record = raw as Record<string, unknown>;\n\n // v2\n if (\n \"data\" in record &&\n typeof record.lastModifiedAt === \"number\" &&\n typeof record.lastSyncedAt === \"number\" &&\n typeof record.lastSyncedHash === \"string\"\n ) {\n return record as unknown as StoredData<T>;\n }\n\n // v1 (legacy)\n if (\"data\" in record && typeof record.timestamp === \"number\" && typeof record.version === \"number\") {\n const legacy = record as StoredDataV1<T>;\n const syncedHash = hashData(legacy.data);\n return {\n data: legacy.data,\n lastModifiedAt: legacy.timestamp,\n lastSyncedAt: legacy.timestamp,\n lastSyncedHash: syncedHash,\n };\n }\n\n return null;\n}\n\nfunction getStoredData<T>(key: string): StoredData<T> | null {\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as unknown;\n return normalizeStoredData<T>(parsed);\n } catch {\n return null;\n }\n}\n\nfunction setStoredData<T>(key: string, record: StoredData<T>): void {\n localStorage.setItem(key, JSON.stringify(record));\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function useSync<T>({\n key,\n endpoint,\n debounce = 2000,\n initialData,\n fetcher,\n saver,\n onConflict,\n onError,\n onSync,\n}: UseSyncOptions<T>): UseSyncReturn<T> {\n // State\n const [data, setDataState] = useState<T | null>(initialData ?? null);\n const [status, setStatus] = useState<SyncStatus>('synced');\n const [pendingChanges, setPendingChanges] = useState(0);\n const [lastSyncedAt, setLastSyncedAt] = useState<number | null>(null);\n const [conflict, setConflict] = useState<SyncConflict<T> | null>(null);\n const [isLoaded, setIsLoaded] = useState(false);\n\n // Refs\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isSavingRef = useRef(false);\n\n // Fetcher / saver are injectable to support custom backends.\n const doFetch = useCallback(\n async (url: string) => {\n if (fetcher) return fetcher(url);\n const response = await fetch(url);\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return response.json() as Promise<T>;\n },\n [fetcher]\n );\n\n const doSave = useCallback(\n async (url: string, payload: T) => {\n if (saver) return saver(url, payload);\n const response = await fetch(url, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return response.json() as Promise<T>;\n },\n [saver]\n );\n\n // Load initial data\n useEffect(() => {\n const loadInitial = async () => {\n // First, check localStorage for cached data\n const stored = getStoredData<T>(key);\n if (stored) {\n setDataState(stored.data);\n const storedSyncedAt = stored.lastSyncedAt > 0 ? stored.lastSyncedAt : null;\n setLastSyncedAt(storedSyncedAt);\n\n const hasLocalChanges = stored.lastModifiedAt > stored.lastSyncedAt;\n if (hasLocalChanges) {\n setStatus(\"pending\");\n setPendingChanges((c) => Math.max(c, 1));\n }\n }\n\n // Then fetch from server\n try {\n const serverData = await doFetch(endpoint);\n const remoteTimestamp = Date.now();\n const remoteHash = hashData(serverData);\n\n if (stored) {\n const hasLocalChanges = stored.lastModifiedAt > stored.lastSyncedAt;\n const baselineHash = stored.lastSyncedHash || hashData(stored.data);\n const remoteChangedSinceSync = remoteHash !== baselineHash;\n\n if (hasLocalChanges && remoteChangedSinceSync) {\n const localConflict: SyncConflict<T> = {\n local: stored.data,\n remote: serverData,\n localTimestamp: stored.lastModifiedAt,\n remoteTimestamp,\n };\n setConflict(localConflict);\n setStatus(\"conflict\");\n onConflict?.(localConflict);\n } else if (!hasLocalChanges) {\n // No local changes, use server data\n setDataState(serverData);\n setStoredData(key, {\n data: serverData,\n lastModifiedAt: remoteTimestamp,\n lastSyncedAt: remoteTimestamp,\n lastSyncedHash: remoteHash,\n });\n setLastSyncedAt(remoteTimestamp);\n setPendingChanges(0);\n setStatus(\"synced\");\n } else {\n // Local has changes, but server hasn't changed since last sync.\n // Keep local data and remain pending until the next save.\n setStatus(\"pending\");\n }\n } else {\n // No local data, use server data\n setDataState(serverData);\n setStoredData(key, {\n data: serverData,\n lastModifiedAt: remoteTimestamp,\n lastSyncedAt: remoteTimestamp,\n lastSyncedHash: remoteHash,\n });\n setLastSyncedAt(remoteTimestamp);\n setPendingChanges(0);\n setStatus(\"synced\");\n }\n } catch (error) {\n // Offline - use cached data\n setStatus(\"offline\");\n if (error instanceof Error) {\n onError?.(error);\n }\n }\n\n setIsLoaded(true);\n };\n\n loadInitial();\n }, [key, endpoint, doFetch, onConflict, onError]);\n\n // Save to server\n const saveToServer = useCallback(async (payload?: T) => {\n const dataToSave = payload ?? data;\n if (isSavingRef.current || dataToSave === null) return;\n isSavingRef.current = true;\n\n try {\n setStatus(\"pending\");\n const serverData = await doSave(endpoint, dataToSave);\n const syncedAt = Date.now();\n const syncedHash = hashData(serverData);\n\n setDataState(serverData);\n setStoredData(key, {\n data: serverData,\n lastModifiedAt: syncedAt,\n lastSyncedAt: syncedAt,\n lastSyncedHash: syncedHash,\n });\n setLastSyncedAt(syncedAt);\n setPendingChanges(0);\n setStatus(\"synced\");\n onSync?.(serverData);\n } catch (error) {\n setStatus(\"offline\");\n if (error instanceof Error) {\n onError?.(error);\n }\n } finally {\n isSavingRef.current = false;\n }\n }, [data, endpoint, key, doSave, onSync, onError]);\n\n // Set data with debounced sync\n const setData = useCallback(\n (updater: T | ((prev: T | null) => T)) => {\n setDataState((prev) => {\n const newData = typeof updater === \"function\" ? (updater as (prev: T | null) => T)(prev) : updater;\n\n const previousStored = getStoredData<T>(key);\n const now = Date.now();\n\n setStoredData(key, {\n data: newData,\n lastModifiedAt: now,\n lastSyncedAt: previousStored?.lastSyncedAt ?? 0,\n lastSyncedHash: previousStored?.lastSyncedHash ?? \"\",\n });\n\n setPendingChanges((c) => c + 1);\n setStatus(\"pending\");\n\n // Clear existing debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new debounce timer\n debounceTimerRef.current = setTimeout(() => {\n saveToServer();\n }, debounce);\n\n return newData;\n });\n },\n [key, debounce, saveToServer]\n );\n\n // Force save (bypass debounce)\n const forceSave = useCallback(async () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = null;\n }\n await saveToServer();\n }, [saveToServer]);\n\n // Refresh from server\n const refresh = useCallback(async () => {\n try {\n const serverData = await doFetch(endpoint);\n const syncedAt = Date.now();\n const syncedHash = hashData(serverData);\n\n setDataState(serverData);\n setStoredData(key, {\n data: serverData,\n lastModifiedAt: syncedAt,\n lastSyncedAt: syncedAt,\n lastSyncedHash: syncedHash,\n });\n setLastSyncedAt(syncedAt);\n setPendingChanges(0);\n setConflict(null);\n setStatus(\"synced\");\n } catch (error) {\n setStatus(\"offline\");\n if (error instanceof Error) {\n onError?.(error);\n }\n }\n }, [endpoint, key, doFetch, onError]);\n\n // Resolve conflict\n const resolveConflict = useCallback(\n async (resolution: ConflictResolution) => {\n if (!conflict) return;\n\n switch (resolution) {\n case \"keep_local\":\n // Keep local, push to server\n setDataState(conflict.local);\n setConflict(null);\n setStatus(\"pending\");\n setPendingChanges((c) => Math.max(c, 1));\n await saveToServer(conflict.local);\n break;\n\n case \"use_remote\": {\n // Use remote, discard local\n const remoteHash = hashData(conflict.remote);\n setDataState(conflict.remote);\n setStoredData(key, {\n data: conflict.remote,\n lastModifiedAt: conflict.remoteTimestamp,\n lastSyncedAt: conflict.remoteTimestamp,\n lastSyncedHash: remoteHash,\n });\n setLastSyncedAt(conflict.remoteTimestamp);\n setPendingChanges(0);\n setConflict(null);\n setStatus(\"synced\");\n break;\n }\n\n case \"create_copy\":\n // Keep local as copy, also keep remote\n // This would typically save local to a new key/endpoint\n // For now, we just keep local\n setDataState(conflict.local);\n setConflict(null);\n setStatus(\"pending\");\n setPendingChanges((c) => Math.max(c, 1));\n await saveToServer(conflict.local);\n break;\n }\n },\n [conflict, key, saveToServer]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n return {\n data,\n setData,\n status,\n pendingChanges,\n lastSyncedAt,\n conflict,\n resolveConflict,\n forceSave,\n refresh,\n isLoaded,\n };\n}\n","/**\n * SyncDocument - Wrapper for documents that need offline-first sync\n *\n * Provides render props for content, setContent, status, and lastSaved.\n * Handles conflict resolution UI delegation.\n */\n\nimport type { ReactNode, ReactElement } from 'react';\nimport { useSync, type UseSyncOptions } from '../hooks/useSync.js';\nimport type { SyncStatus, SyncConflict, ConflictResolution } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SyncDocumentRenderProps<T> {\n /** Current document content */\n content: T | null;\n\n /** Update document content */\n setContent: (data: T | ((prev: T | null) => T)) => void;\n\n /** Current sync status */\n status: SyncStatus;\n\n /** Timestamp of last successful sync */\n lastSaved: number | null;\n\n /** Number of pending changes */\n pendingChanges: number;\n\n /** Force immediate save */\n save: () => Promise<void>;\n\n /** Refresh from server */\n refresh: () => Promise<void>;\n\n /** Whether initial load is complete */\n isLoaded: boolean;\n}\n\nexport interface SyncDocumentProps<T> {\n /** Unique document identifier */\n documentId: string;\n\n /** API endpoint (documentId will be appended) */\n endpoint: string;\n\n /** Debounce time in ms (default: 1000) */\n debounce?: number;\n\n /** Initial content */\n initialContent?: T;\n\n /** Conflict resolution UI renderer */\n onConflict?: (\n local: T,\n remote: T,\n resolve: (resolution: ConflictResolution) => void\n ) => ReactNode;\n\n /** Called on sync error */\n onError?: (error: Error) => void;\n\n /** Called on successful sync */\n onSave?: (content: T) => void;\n\n /** Render function for document UI */\n children: (props: SyncDocumentRenderProps<T>) => ReactElement;\n\n /** Custom fetch function */\n fetcher?: (endpoint: string) => Promise<T>;\n\n /** Custom save function */\n saver?: (endpoint: string, data: T) => Promise<T>;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function SyncDocument<T>({\n documentId,\n endpoint,\n debounce = 1000,\n initialContent,\n onConflict,\n onError,\n onSave,\n children,\n fetcher,\n saver,\n}: SyncDocumentProps<T>): ReactElement {\n const fullEndpoint = `${endpoint}/${documentId}`;\n\n const {\n data,\n setData,\n status,\n pendingChanges,\n lastSyncedAt,\n conflict,\n resolveConflict,\n forceSave,\n refresh,\n isLoaded,\n } = useSync<T>({\n key: `sync-doc:${documentId}`,\n endpoint: fullEndpoint,\n debounce,\n initialData: initialContent,\n fetcher,\n saver,\n onConflict: onConflict\n ? (c: SyncConflict<T>) => {\n // Conflict will be rendered in the component\n }\n : undefined,\n onError,\n onSync: onSave,\n });\n\n // Render conflict UI if provided and conflict exists\n const conflictUI =\n conflict && onConflict\n ? onConflict(conflict.local, conflict.remote, resolveConflict)\n : null;\n\n return (\n <>\n {conflictUI}\n {children({\n content: data,\n setContent: setData,\n status,\n lastSaved: lastSyncedAt,\n pendingChanges,\n save: forceSave,\n refresh,\n isLoaded,\n })}\n </>\n );\n}\n","/**\n * useAgentRun - Hook for executing agent runs\n */\n\nimport { useState, useCallback, useRef } from 'react';\nimport type { AgentRun, RunStatus } from '../protocol/types.js';\nimport { useBBContext } from '../components/BBProvider.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseAgentRunOptions {\n /** Called when run starts */\n onStart?: (run: AgentRun) => void;\n\n /** Called when run completes */\n onComplete?: (run: AgentRun) => void;\n\n /** Called when run fails */\n onError?: (run: AgentRun, error: Error) => void;\n\n /** Called when run is cancelled */\n onCancel?: (run: AgentRun) => void;\n}\n\nexport interface UseAgentRunReturn {\n /** Current run object or null */\n run: AgentRun | null;\n\n /** Current status */\n status: RunStatus;\n\n /** Run output when completed */\n output: string | null;\n\n /** Error message if failed */\n error: string | null;\n\n /** Actual cost incurred */\n cost: number | null;\n\n /** Time taken in ms */\n latency: number | null;\n\n /** Start a new run */\n start: (agentId: string, prompt: string, context?: Record<string, unknown>) => Promise<void>;\n\n /** Cancel the current run */\n cancel: () => void;\n\n /** Whether a run is in progress */\n isRunning: boolean;\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function useAgentRun(options: UseAgentRunOptions = {}): UseAgentRunReturn {\n const { onStart, onComplete, onError, onCancel } = options;\n\n const { config, addRun, updateRun, getAgent } = useBBContext();\n\n const [run, setRun] = useState<AgentRun | null>(null);\n const [status, setStatus] = useState<RunStatus>('idle');\n const [output, setOutput] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [cost, setCost] = useState<number | null>(null);\n const [latency, setLatency] = useState<number | null>(null);\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const start = useCallback(\n async (agentId: string, prompt: string, context?: Record<string, unknown>) => {\n // Cancel any existing run\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n const runId = `run-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n const startedAt = Date.now();\n\n const newRun: AgentRun = {\n id: runId,\n agentId,\n prompt,\n context,\n status: 'running',\n startedAt,\n };\n\n // Update state\n setRun(newRun);\n setStatus('running');\n setOutput(null);\n setError(null);\n setCost(null);\n setLatency(null);\n\n // Add to global tracking\n addRun(newRun);\n onStart?.(newRun);\n\n try {\n // Make API call\n const response = await fetch(`${config.apiBaseUrl}/runs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({\n agentId,\n prompt,\n context,\n }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const result = await response.json();\n const completedAt = Date.now();\n const runLatency = completedAt - startedAt;\n\n // Get agent cost estimate\n const agent = getAgent(agentId);\n const runCost = result.cost ?? agent?.costPerRun ?? 0;\n\n const completedRun: AgentRun = {\n ...newRun,\n status: 'completed',\n output: result.output,\n cost: runCost,\n tokenCount: result.tokenCount,\n latencyMs: runLatency,\n completedAt,\n };\n\n // Update state\n setRun(completedRun);\n setStatus('completed');\n setOutput(result.output);\n setCost(runCost);\n setLatency(runLatency);\n\n // Update global tracking\n updateRun(runId, completedRun);\n onComplete?.(completedRun);\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n // Cancelled\n const cancelledRun: AgentRun = {\n ...newRun,\n status: 'cancelled',\n completedAt: Date.now(),\n };\n setRun(cancelledRun);\n setStatus('cancelled');\n updateRun(runId, cancelledRun);\n onCancel?.(cancelledRun);\n return;\n }\n\n // Failed\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n const failedRun: AgentRun = {\n ...newRun,\n status: 'failed',\n error: errorMessage,\n completedAt: Date.now(),\n };\n\n setRun(failedRun);\n setStatus('failed');\n setError(errorMessage);\n\n updateRun(runId, failedRun);\n onError?.(failedRun, err instanceof Error ? err : new Error(errorMessage));\n } finally {\n if (abortControllerRef.current === controller) {\n abortControllerRef.current = null;\n }\n }\n },\n [config, addRun, updateRun, getAgent, onStart, onComplete, onError, onCancel]\n );\n\n const cancel = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n\n return {\n run,\n status,\n output,\n error,\n cost,\n latency,\n start,\n cancel,\n isRunning: status === 'running',\n };\n}\n","/**\n * AgentPanel - Pre-built panel for selecting and invoking agents\n *\n * Provides quick prompts, agent selection, run history, and cost tracking.\n */\n\nimport { useState, useCallback, type ReactElement, type FormEvent } from 'react';\nimport { useBBContext } from './BBProvider.js';\nimport { useAgentRun } from '../hooks/useAgentRun.js';\nimport type { AgentRun, Agent } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface QuickPrompt {\n /** Display label */\n label: string;\n\n /** Prompt text to send */\n prompt: string;\n\n /** Optional icon (component or string) */\n icon?: ReactElement | string;\n}\n\nexport interface AgentPanelProps {\n /** Context data to include with every run */\n context?: Record<string, unknown>;\n\n /** Quick prompt buttons */\n quickPrompts?: QuickPrompt[];\n\n /** Called when a run starts */\n onRunStart?: (run: AgentRun) => void;\n\n /** Called when a run completes */\n onRunComplete?: (run: AgentRun) => void;\n\n /** Called when a run fails */\n onRunError?: (run: AgentRun, error: Error) => void;\n\n /** Show cost estimates and tracking */\n showCosts?: boolean;\n\n /** Show run history */\n showHistory?: boolean;\n\n /** Maximum history items to show */\n maxHistory?: number;\n\n /** Placeholder text for prompt input */\n placeholder?: string;\n\n /** Custom class name for the panel */\n className?: string;\n\n /** Custom agent filter (return true to include) */\n agentFilter?: (agent: Agent) => boolean;\n\n /** Default selected agent ID */\n defaultAgent?: string;\n}\n\nexport interface AgentPanelRenderProps {\n /** All available agents */\n agents: Agent[];\n\n /** Currently selected agent */\n selectedAgent: Agent | null;\n\n /** Select an agent */\n selectAgent: (agentId: string) => void;\n\n /** Current prompt text */\n prompt: string;\n\n /** Update prompt text */\n setPrompt: (text: string) => void;\n\n /** Submit the current prompt */\n submit: () => void;\n\n /** Whether a run is in progress */\n isRunning: boolean;\n\n /** Current run (if any) */\n currentRun: AgentRun | null;\n\n /** Run history */\n history: AgentRun[];\n\n /** Total cost of all runs */\n totalCost: number;\n\n /** Estimated cost of current prompt */\n estimatedCost: number | null;\n\n /** Quick prompts */\n quickPrompts: QuickPrompt[];\n\n /** Execute a quick prompt */\n executeQuickPrompt: (quickPrompt: QuickPrompt) => void;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function AgentPanel({\n context,\n quickPrompts = [],\n onRunStart,\n onRunComplete,\n onRunError,\n showCosts = true,\n showHistory = true,\n maxHistory = 10,\n placeholder = 'Enter a prompt...',\n className,\n agentFilter,\n defaultAgent,\n}: AgentPanelProps): ReactElement {\n const { agents, runHistory, totalCost: globalTotalCost } = useBBContext();\n\n // Filter agents\n const availableAgents = agentFilter ? agents.filter(agentFilter) : agents;\n\n // State\n const [selectedAgentId, setSelectedAgentId] = useState<string | null>(\n defaultAgent ?? availableAgents[0]?.id ?? null\n );\n const [prompt, setPrompt] = useState('');\n\n // Get selected agent\n const selectedAgent = availableAgents.find((a) => a.id === selectedAgentId) ?? null;\n\n // Use agent run hook\n const {\n run: currentRun,\n status,\n isRunning,\n start,\n } = useAgentRun({\n onStart: onRunStart,\n onComplete: onRunComplete,\n onError: onRunError,\n });\n\n // Filter history for this panel's agents\n const panelHistory = runHistory\n .filter((run) => availableAgents.some((a) => a.id === run.agentId))\n .slice(0, maxHistory);\n\n // Calculate total cost for this panel's agents\n const panelTotalCost = panelHistory.reduce((sum, run) => sum + (run.cost ?? 0), 0);\n\n // Estimated cost for current prompt\n const estimatedCost = selectedAgent?.costPerRun ?? null;\n\n // Submit handler\n const handleSubmit = useCallback(\n (e?: FormEvent) => {\n e?.preventDefault();\n if (!selectedAgentId || !prompt.trim() || isRunning) return;\n start(selectedAgentId, prompt, context);\n setPrompt('');\n },\n [selectedAgentId, prompt, isRunning, start, context]\n );\n\n // Quick prompt handler\n const executeQuickPrompt = useCallback(\n (qp: QuickPrompt) => {\n if (!selectedAgentId || isRunning) return;\n start(selectedAgentId, qp.prompt, context);\n },\n [selectedAgentId, isRunning, start, context]\n );\n\n // Select agent handler\n const selectAgent = useCallback((agentId: string) => {\n setSelectedAgentId(agentId);\n }, []);\n\n return (\n <div className={`bb-agent-panel ${className ?? ''}`} data-bb-state={status}>\n {/* Agent Selector */}\n <div className=\"bb-agent-panel__agents\">\n {availableAgents.map((agent) => (\n <button\n key={agent.id}\n type=\"button\"\n className={`bb-agent-panel__agent ${\n agent.id === selectedAgentId ? 'bb-agent-panel__agent--selected' : ''\n }`}\n onClick={() => selectAgent(agent.id)}\n disabled={isRunning}\n data-bb-agent-id={agent.id}\n >\n <span className=\"bb-agent-panel__agent-name\">{agent.name}</span>\n {showCosts && agent.costPerRun !== undefined && (\n <span className=\"bb-agent-panel__agent-cost\">\n ${agent.costPerRun.toFixed(3)}\n </span>\n )}\n </button>\n ))}\n </div>\n\n {/* Quick Prompts */}\n {quickPrompts.length > 0 && (\n <div className=\"bb-agent-panel__quick-prompts\">\n {quickPrompts.map((qp, idx) => (\n <button\n key={idx}\n type=\"button\"\n className=\"bb-agent-panel__quick-prompt\"\n onClick={() => executeQuickPrompt(qp)}\n disabled={isRunning || !selectedAgentId}\n >\n {qp.icon && <span className=\"bb-agent-panel__quick-prompt-icon\">{qp.icon}</span>}\n <span className=\"bb-agent-panel__quick-prompt-label\">{qp.label}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Prompt Input */}\n <form className=\"bb-agent-panel__form\" onSubmit={handleSubmit}>\n <textarea\n className=\"bb-agent-panel__input\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder={placeholder}\n disabled={isRunning || !selectedAgentId}\n rows={3}\n data-bb-input=\"agent-prompt\"\n />\n <div className=\"bb-agent-panel__form-footer\">\n {showCosts && estimatedCost !== null && (\n <span className=\"bb-agent-panel__estimate\">\n Est. ${estimatedCost.toFixed(3)}\n </span>\n )}\n <button\n type=\"submit\"\n className=\"bb-agent-panel__submit\"\n disabled={isRunning || !selectedAgentId || !prompt.trim()}\n data-bb-action=\"submit-prompt\"\n >\n {isRunning ? 'Running...' : 'Run'}\n </button>\n </div>\n </form>\n\n {/* Current Run Status */}\n {currentRun && (\n <div\n className={`bb-agent-panel__status bb-agent-panel__status--${currentRun.status}`}\n data-bb-state={currentRun.status}\n >\n <span className=\"bb-agent-panel__status-label\">\n {currentRun.status === 'running' && 'Running...'}\n {currentRun.status === 'completed' && 'Completed'}\n {currentRun.status === 'failed' && 'Failed'}\n {currentRun.status === 'cancelled' && 'Cancelled'}\n </span>\n {currentRun.status === 'completed' && currentRun.output && (\n <div className=\"bb-agent-panel__output\" data-bb-output=\"agent-output\">\n {currentRun.output}\n </div>\n )}\n {currentRun.status === 'failed' && currentRun.error && (\n <div className=\"bb-agent-panel__error\">{currentRun.error}</div>\n )}\n </div>\n )}\n\n {/* Run History */}\n {showHistory && panelHistory.length > 0 && (\n <div className=\"bb-agent-panel__history\">\n <h4 className=\"bb-agent-panel__history-title\">Recent Runs</h4>\n <ul className=\"bb-agent-panel__history-list\">\n {panelHistory.map((run) => (\n <li\n key={run.id}\n className={`bb-agent-panel__history-item bb-agent-panel__history-item--${run.status}`}\n data-bb-entity=\"run\"\n data-bb-entity-id={run.id}\n >\n <span className=\"bb-agent-panel__history-agent\" data-bb-field=\"agent\">\n {availableAgents.find((a) => a.id === run.agentId)?.name ?? run.agentId}\n </span>\n <span className=\"bb-agent-panel__history-prompt\" data-bb-field=\"prompt\">\n {run.prompt.slice(0, 50)}\n {run.prompt.length > 50 && '...'}\n </span>\n {showCosts && run.cost !== undefined && (\n <span className=\"bb-agent-panel__history-cost\" data-bb-field=\"cost\">\n ${run.cost.toFixed(3)}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Cost Summary */}\n {showCosts && (\n <div className=\"bb-agent-panel__cost-summary\">\n <span className=\"bb-agent-panel__cost-label\">Session Total:</span>\n <span className=\"bb-agent-panel__cost-value\" data-bb-field=\"total-cost\">\n ${panelTotalCost.toFixed(3)}\n </span>\n </div>\n )}\n </div>\n );\n}\n","/**\n * usePlaySession - Hook for managing play sessions with external environments\n *\n * Handles session lifecycle, LiveKit connections, and JSON-RPC calls to adapters.\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport type { PlaySessionData, PlaySessionStatus, JsonRpcResponse } from '../protocol/types.js';\nimport { useBBContext } from '../components/BBProvider.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UsePlaySessionOptions {\n /** Adapter ID (e.g., 'openrct2', 'bbdoom') */\n adapter: string;\n\n /** Auto-connect on mount */\n autoConnect?: boolean;\n\n /** Connection timeout in ms */\n timeout?: number;\n\n /** Called when session is established */\n onConnect?: (session: PlaySessionData) => void;\n\n /** Called when session ends */\n onDisconnect?: () => void;\n\n /** Called on RPC result */\n onRpcResult?: (response: JsonRpcResponse) => void;\n\n /** Called on error */\n onError?: (error: Error) => void;\n}\n\nexport interface UsePlaySessionReturn {\n /** Current session or null */\n session: PlaySessionData | null;\n\n /** Session status */\n status: PlaySessionStatus;\n\n /** LiveKit video track (for rendering) */\n videoTrack: MediaStreamTrack | null;\n\n /** LiveKit audio track */\n audioTrack: MediaStreamTrack | null;\n\n /** Make a JSON-RPC call */\n call: <T = unknown>(method: string, params?: Record<string, unknown>) => Promise<JsonRpcResponse<T>>;\n\n /** Shorthand for observe.* methods */\n observe: <T = unknown>(key: string) => Promise<T>;\n\n /** Shorthand for act.* methods */\n act: <T = unknown>(action: string, params?: Record<string, unknown>) => Promise<T>;\n\n /** Connect to the session */\n connect: (options?: { timeout?: number }) => Promise<void>;\n\n /** Disconnect from the session */\n disconnect: () => Promise<void>;\n\n /** Whether currently connected */\n isConnected: boolean;\n\n /** Error message if any */\n error: string | null;\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function usePlaySession({\n adapter,\n autoConnect = false,\n timeout = 30000,\n onConnect,\n onDisconnect,\n onRpcResult,\n onError,\n}: UsePlaySessionOptions): UsePlaySessionReturn {\n const { config } = useBBContext();\n\n // State\n const [session, setSession] = useState<PlaySessionData | null>(null);\n const [status, setStatus] = useState<PlaySessionStatus>('disconnected');\n const [videoTrack, setVideoTrack] = useState<MediaStreamTrack | null>(null);\n const [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n // Refs\n const wsRef = useRef<WebSocket | null>(null);\n const rpcIdRef = useRef(0);\n const pendingCallsRef = useRef<Map<number, {\n resolve: (value: JsonRpcResponse) => void;\n reject: (error: Error) => void;\n }>>(new Map());\n\n // Connect to session\n const connect = useCallback(\n async (options?: { timeout?: number }) => {\n if (status === 'connecting' || status === 'connected') return;\n\n setStatus('connecting');\n setError(null);\n\n const connectTimeout = options?.timeout ?? timeout;\n\n try {\n // Create session via API\n const response = await fetch(`${config.apiBaseUrl}/play-sessions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n body: JSON.stringify({ adapter }),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const sessionData = await response.json();\n const newSession: PlaySessionData = {\n id: sessionData.id,\n adapter,\n capabilityToken: sessionData.capabilityToken,\n createdAt: Date.now(),\n expiresAt: sessionData.expiresAt,\n livekitUrl: sessionData.livekitUrl,\n livekitToken: sessionData.livekitToken,\n };\n\n setSession(newSession);\n\n // Connect WebSocket for RPC\n const wsUrl = sessionData.wsUrl ?? `${config.apiBaseUrl.replace('http', 'ws')}/play-sessions/${newSession.id}/ws`;\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n\n // Set up WebSocket handlers\n await new Promise<void>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n ws.close();\n reject(new Error('Connection timeout'));\n }, connectTimeout);\n\n ws.onopen = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n\n ws.onerror = () => {\n clearTimeout(timeoutId);\n reject(new Error('WebSocket connection failed'));\n };\n });\n\n ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data);\n\n // Handle RPC response\n if ('id' in message && pendingCallsRef.current.has(message.id)) {\n const pending = pendingCallsRef.current.get(message.id)!;\n pendingCallsRef.current.delete(message.id);\n pending.resolve(message);\n onRpcResult?.(message);\n }\n } catch {\n // Ignore parse errors\n }\n };\n\n ws.onclose = () => {\n setStatus('disconnected');\n setSession(null);\n wsRef.current = null;\n onDisconnect?.();\n };\n\n ws.onerror = () => {\n setError('WebSocket error');\n onError?.(new Error('WebSocket error'));\n };\n\n // Connect to LiveKit if available\n if (newSession.livekitUrl && newSession.livekitToken) {\n // Note: LiveKit connection would typically use @livekit/client-sdk\n // For now, we just store the connection info for the consumer to use\n }\n\n setStatus('connected');\n onConnect?.(newSession);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Connection failed';\n setStatus('error');\n setError(errorMessage);\n onError?.(err instanceof Error ? err : new Error(errorMessage));\n }\n },\n [adapter, config, status, timeout, onConnect, onDisconnect, onRpcResult, onError]\n );\n\n // Disconnect\n const disconnect = useCallback(async () => {\n if (wsRef.current) {\n wsRef.current.close();\n wsRef.current = null;\n }\n\n // Optionally notify server\n if (session) {\n try {\n await fetch(`${config.apiBaseUrl}/play-sessions/${session.id}`, {\n method: 'DELETE',\n headers: config.headers,\n });\n } catch {\n // Ignore errors on disconnect\n }\n }\n\n setSession(null);\n setStatus('disconnected');\n setVideoTrack(null);\n setAudioTrack(null);\n onDisconnect?.();\n }, [session, config, onDisconnect]);\n\n // Make RPC call\n const call = useCallback(\n <T = unknown>(method: string, params?: Record<string, unknown>): Promise<JsonRpcResponse<T>> => {\n return new Promise((resolve, reject) => {\n if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) {\n reject(new Error('Not connected'));\n return;\n }\n\n const id = ++rpcIdRef.current;\n const request = {\n jsonrpc: '2.0',\n id,\n method,\n params: params ?? {},\n };\n\n pendingCallsRef.current.set(id, {\n resolve: resolve as (value: JsonRpcResponse) => void,\n reject,\n });\n\n wsRef.current.send(JSON.stringify(request));\n\n // Timeout for RPC call\n setTimeout(() => {\n if (pendingCallsRef.current.has(id)) {\n pendingCallsRef.current.delete(id);\n reject(new Error('RPC call timeout'));\n }\n }, 30000);\n });\n },\n []\n );\n\n // Observe shorthand\n const observe = useCallback(\n async <T = unknown>(key: string): Promise<T> => {\n const response = await call<T>(`observe.${key}`);\n if (response.error) {\n throw new Error(response.error.message);\n }\n return response.result as T;\n },\n [call]\n );\n\n // Act shorthand\n const act = useCallback(\n async <T = unknown>(action: string, params?: Record<string, unknown>): Promise<T> => {\n const response = await call<T>(`act.${action}`, params);\n if (response.error) {\n throw new Error(response.error.message);\n }\n return response.result as T;\n },\n [call]\n );\n\n // Auto-connect on mount\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (wsRef.current) {\n wsRef.current.close();\n }\n };\n }, []);\n\n return {\n session,\n status,\n videoTrack,\n audioTrack,\n call,\n observe,\n act,\n connect,\n disconnect,\n isConnected: status === 'connected',\n error,\n };\n}\n","/**\n * PlaySession - Component for managing play session lifecycle\n *\n * Provides render props for session control, video rendering, and RPC calls.\n */\n\nimport { useRef, useEffect, type ReactElement, type RefObject } from 'react';\nimport { usePlaySession, type UsePlaySessionOptions } from '../hooks/usePlaySession.js';\nimport type { PlaySessionData, PlaySessionStatus, JsonRpcResponse } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PlaySessionRenderProps {\n /** Current session or null */\n session: PlaySessionData | null;\n\n /** Session status */\n status: PlaySessionStatus;\n\n /** Make a JSON-RPC call */\n call: <T = unknown>(method: string, params?: Record<string, unknown>) => Promise<JsonRpcResponse<T>>;\n\n /** Shorthand for observe.* methods */\n observe: <T = unknown>(key: string) => Promise<T>;\n\n /** Shorthand for act.* methods */\n act: <T = unknown>(action: string, params?: Record<string, unknown>) => Promise<T>;\n\n /** Connect to the session */\n connect: (options?: { timeout?: number }) => Promise<void>;\n\n /** Disconnect from the session */\n disconnect: () => Promise<void>;\n\n /** Video element ref (attach to your video element) */\n videoRef: RefObject<HTMLVideoElement | null>;\n\n /** Whether currently connected */\n isConnected: boolean;\n\n /** Error message if any */\n error: string | null;\n}\n\nexport interface PlaySessionProps extends Omit<UsePlaySessionOptions, 'onConnect' | 'onDisconnect' | 'onRpcResult' | 'onError'> {\n /** Called when session starts */\n onSessionStart?: (session: PlaySessionData) => void;\n\n /** Called when session ends */\n onSessionEnd?: () => void;\n\n /** Called on RPC result */\n onRpcResult?: (result: JsonRpcResponse) => void;\n\n /** Called on error */\n onError?: (error: Error) => void;\n\n /** Render function for session UI */\n children: (props: PlaySessionRenderProps) => ReactElement;\n\n /** Custom class name for the wrapper */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function PlaySession({\n adapter,\n autoConnect = false,\n timeout,\n onSessionStart,\n onSessionEnd,\n onRpcResult,\n onError,\n children,\n className,\n}: PlaySessionProps): ReactElement {\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n const {\n session,\n status,\n videoTrack,\n audioTrack,\n call,\n observe,\n act,\n connect,\n disconnect,\n isConnected,\n error,\n } = usePlaySession({\n adapter,\n autoConnect,\n timeout,\n onConnect: onSessionStart,\n onDisconnect: onSessionEnd,\n onRpcResult,\n onError,\n });\n\n // Attach video track to video element when available\n useEffect(() => {\n if (videoRef.current && videoTrack) {\n const stream = new MediaStream([videoTrack]);\n videoRef.current.srcObject = stream;\n }\n }, [videoTrack]);\n\n // Attach audio track when available\n useEffect(() => {\n if (videoRef.current && audioTrack) {\n const currentStream = videoRef.current.srcObject as MediaStream | null;\n if (currentStream) {\n currentStream.addTrack(audioTrack);\n }\n }\n }, [audioTrack]);\n\n return (\n <div\n className={`bb-play-session ${className ?? ''}`}\n data-bb-state={status}\n data-bb-adapter={adapter}\n data-bb-session-id={session?.id}\n >\n {children({\n session,\n status,\n call,\n observe,\n act,\n connect,\n disconnect,\n videoRef,\n isConnected,\n error,\n })}\n </div>\n );\n}\n","import type { ClusterConfig, ClusterId } from './types.js';\n\n/**\n * Local development ports for each cluster app.\n * Used when NODE_ENV=development to route to localhost instead of subdomains.\n */\nexport const CLUSTER_DEV_PORTS: Record<ClusterId, number> = {\n alexandria: 3001,\n alpha: 3002,\n opus: 3003,\n baia: 3004,\n kdot: 3005,\n aegis: 3006,\n providence: 3007,\n};\n\n/**\n * Returns the docs URL for a cluster, respecting development vs production.\n * In development: http://localhost:{port}\n * In production: https://{cluster}.backbay.io\n */\nexport function getClusterDocsUrl(clusterId: ClusterId): string {\n if (typeof window !== 'undefined' && window.location.hostname === 'localhost') {\n return `http://localhost:${CLUSTER_DEV_PORTS[clusterId]}`;\n }\n return `https://${clusterId}.backbay.io`;\n}\n\nexport const CLUSTER_CONFIGS: Record<ClusterId, ClusterConfig> = {\n alexandria: {\n id: 'alexandria',\n name: 'Alexandria',\n tagline: 'Where knowledge compounds',\n latinMotto: 'SEQUERE FILUM',\n sigilSrc: '/sigils/alexandria.svg',\n videoSrc: '/videos/clusters/alexandria.mp4',\n videoPoster: '/videos/clusters/alexandria-poster.jpg',\n accentColor: '#C9A227',\n accentColorRGB: '201, 162, 39',\n atmosphere: {\n dustMotes: {\n colors: ['#C9A227', '#E8D5A3', '#8B7355'],\n density: 0.6,\n speed: 0.3,\n },\n light: {\n type: 'godrays',\n color: '#C9A227',\n intensity: 0.7,\n source: { x: 0.8, y: 0.1 },\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/alexandria', variant: 'primary' },\n { label: 'Docs', href: 'https://alexandria.backbay.io', variant: 'secondary', external: true },\n { label: 'Governance', href: '/governance/alexandria', variant: 'ghost' },\n ],\n // Briefing\n description: 'The decentralized knowledge marketplace. Publish, lease, and compound intelligence artifacts.',\n capabilities: ['PUBLISH', 'LEASE', 'COMPOUND'],\n fastPath: { label: 'Start a Knowledge Compound', href: '/clusters/alexandria/compound/new' },\n status: { network: 'STABLE', verification: 'ON', fees: '2%' },\n // Live\n liveModule: 'market',\n liveContent: '3 new blueprints published today',\n // Metrics\n metrics: { realms: 847, output24h: '2.4M', rank: 12 },\n },\n\n alpha: {\n id: 'alpha',\n name: 'Alpha',\n tagline: 'Where signals become strategy',\n latinMotto: 'ALPHA IN MOTU',\n sigilSrc: '/sigils/alpha.svg',\n videoSrc: '/videos/clusters/alpha.mp4',\n videoPoster: '/videos/clusters/alpha-poster.jpg',\n accentColor: '#E8E8E8',\n accentColorRGB: '232, 232, 232',\n atmosphere: {\n fog: {\n type: 'volumetric',\n color: '#E8E8E8',\n intensity: 0.5,\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/alpha', variant: 'primary' },\n { label: 'Docs', href: 'https://alpha.backbay.io', variant: 'secondary', external: true },\n { label: 'Governance', href: '/governance/alpha', variant: 'ghost' },\n ],\n // Briefing\n description: 'A social exchange for research-grade finance. Models, signals, and playbooks—shared, challenged, and refined in public.',\n capabilities: ['BACKTEST', 'PRICE', 'EXECUTE'],\n fastPath: { label: 'Explore strategy marketplace', href: '/clusters/alpha/market' },\n status: { network: 'STABLE', verification: 'ON', fees: '1.5%' },\n // Live\n liveModule: 'live',\n liveContent: 'Live: 218 strategies • 24h volume $3.1B',\n // Metrics\n metrics: { realms: 234, output24h: '4.8M', rank: 3 },\n },\n\n opus: {\n id: 'opus',\n name: 'Opus',\n tagline: 'Where care meets code',\n latinMotto: 'SALUS PER MACHINAM',\n sigilSrc: '/sigils/opus.svg',\n videoSrc: '/videos/clusters/opus.mp4',\n videoPoster: '/videos/clusters/opus-poster.jpg',\n accentColor: '#B87333',\n accentColorRGB: '184, 115, 51',\n atmosphere: {\n dustMotes: {\n colors: ['#B87333', '#D4956A', '#8B5A2B'],\n density: 0.8,\n speed: 0.2,\n },\n light: {\n type: 'bloom',\n color: '#B87333',\n intensity: 0.6,\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/opus', variant: 'primary' },\n { label: 'Docs', href: 'https://opus.backbay.io', variant: 'secondary', external: true },\n { label: 'Governance', href: '/governance/opus', variant: 'ghost' },\n ],\n // Briefing\n description: 'The clinic-to-code commons. Practical health systems, shared and iterated together.',\n capabilities: ['DIAGNOSE', 'COORDINATE', 'PRODUCE'],\n fastPath: { label: 'Explore the Exchange', href: '/clusters/opus/exchange' },\n status: { network: 'STABLE', verification: 'HIPAA', fees: '2%' },\n // Live\n liveModule: 'live',\n liveContent: 'New: Autonomous diagnostic pipeline • 12 protocols deployed',\n // Metrics\n metrics: { realms: 156, output24h: '892K' },\n },\n\n baia: {\n id: 'baia',\n name: 'Baia',\n tagline: 'Where imagination renders',\n latinMotto: 'ARS EX MACHINA',\n sigilSrc: '/sigils/baia.svg',\n videoSrc: '/videos/clusters/baia.mp4',\n videoPoster: '/videos/clusters/baia-poster.jpg',\n accentColor: '#D4AF37',\n accentColorRGB: '212, 175, 55',\n atmosphere: {\n light: {\n type: 'godrays',\n color: '#D4AF37',\n intensity: 0.8,\n source: { x: 0.5, y: 0 },\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/baia', variant: 'primary' },\n { label: 'Docs', href: 'https://baia.backbay.io', variant: 'secondary', external: true },\n { label: 'Governance', href: '/governance/baia', variant: 'ghost' },\n ],\n // Briefing\n description: 'A social market for generative culture. Artists and builders publish, collaborate, and curate evolving collections.',\n capabilities: ['GENERATE', 'COMPOSE', 'RENDER'],\n fastPath: { label: 'Open the Studio', href: '/clusters/baia/studio' },\n status: { network: 'STABLE', verification: 'ON', fees: '2.5%' },\n // Live\n liveModule: 'market',\n liveContent: 'Trending: Neural symphony generator • 847 works minted today',\n // Metrics\n metrics: { realms: 89, output24h: '124K', rank: 47 },\n },\n\n kdot: {\n id: 'kdot',\n name: 'KDoT',\n tagline: 'Kernel design of thought',\n latinMotto: 'MENS • MACHINA • DEUS',\n sigilSrc: '/sigils/kdot.svg',\n videoSrc: '/videos/clusters/kdot.mp4',\n videoPoster: '/videos/clusters/kdot-poster.jpg',\n accentColor: '#00D4AA',\n accentColorRGB: '0, 212, 170',\n atmosphere: {\n fog: {\n type: 'mist',\n color: '#00D4AA',\n intensity: 0.4,\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/kdot', variant: 'primary' },\n { label: 'Docs', href: 'https://kdot.backbay.io', variant: 'secondary', external: true },\n { label: 'Status', href: '/status/kdot', variant: 'ghost' },\n ],\n // Briefing\n description: 'Compile thought into territory. Ship verifiable services. Forge living culture. Spin up economies.\\nKernel Design of Thought: where creativity becomes industry.',\n capabilities: ['DESIGN', 'SYNTHESIZE', 'ALIGN'],\n fastPath: { label: 'Open the Kernel', href: '/clusters/kdot/topology' },\n status: { network: 'OPTIMAL', verification: 'ON', fees: '0.1%' },\n // Live\n liveModule: 'live',\n liveContent: 'The Cathedral awakens • 12 kernels compiled today',\n // Metrics\n metrics: { realms: 1247, output24h: '8.4PB', rank: 1 },\n },\n\n aegis: {\n id: 'aegis',\n name: 'Aegis',\n tagline: 'Shield of the realm',\n latinMotto: 'TUTELA PERPETUA',\n sigilSrc: '/sigils/aegis.svg',\n videoSrc: '/videos/clusters/aegis.mp4',\n videoPoster: '/videos/clusters/aegis-poster.jpg',\n accentColor: '#4A7BF7',\n accentColorRGB: '74, 123, 247',\n atmosphere: {\n light: {\n type: 'bloom',\n color: '#4A7BF7',\n intensity: 0.5,\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/aegis', variant: 'primary' },\n { label: 'Docs', href: 'https://aegis.backbay.io', variant: 'secondary', external: true },\n { label: 'Audit', href: '/audit/aegis', variant: 'ghost' },\n ],\n // Briefing\n description: 'The EDR layer for agent economies. Aegis is a trust-minimized distributed security mesh to enable autonomous production at scale.',\n capabilities: ['PROTECT', 'DETECT', 'RESPOND'],\n fastPath: { label: 'View threat dashboard', href: '/clusters/aegis/threats' },\n status: { network: 'SECURE', verification: 'ENFORCED', fees: '1%' },\n // Live\n liveModule: 'governance',\n liveContent: 'Security Proposal #7 — Policy update pending review',\n // Metrics\n metrics: { realms: 312, output24h: '2.1B threats blocked', rank: 2 },\n },\n\n providence: {\n id: 'providence',\n name: 'Providence',\n tagline: 'Foresight is defense',\n latinMotto: 'PRAEVIDEO ERGO PROTEGO',\n sigilSrc: '/sigils/providence.svg',\n videoSrc: '/videos/clusters/providence.mp4',\n videoPoster: '/videos/clusters/providence-poster.jpg',\n accentColor: '#00D4AA',\n accentColorRGB: '0, 212, 170',\n atmosphere: {\n light: {\n type: 'godrays',\n color: '#00D4AA',\n intensity: 0.5,\n source: { x: 0.55, y: 0.05 },\n },\n fog: {\n type: 'mist',\n color: '#00D4AA',\n intensity: 0.25,\n },\n },\n buttons: [\n { label: 'Launch', href: '/clusters/providence', variant: 'primary' },\n { label: 'Docs', href: 'https://providence.backbay.io', variant: 'secondary', external: true },\n { label: 'Threat Intel', href: '/providence/threats', variant: 'ghost' },\n ],\n description: 'The EDR layer for agent economies. Aegis is a trust-minimized security distributed security for autonomous production.',\n capabilities: ['PREDICT', 'RESPOND', 'DEFEND'],\n fastPath: { label: 'View threat dashboard', href: '/clusters/providence/threats' },\n status: { network: 'SECURE', verification: 'ENFORCED', fees: '1%' },\n liveModule: 'live',\n liveContent: '24/7 monitoring active • 847K threats analyzed today',\n metrics: { realms: 96, output24h: '38K', rank: 19 },\n },\n};\n\nexport function getClusterConfig(clusterId: ClusterId): ClusterConfig {\n return CLUSTER_CONFIGS[clusterId];\n}\n\n/**\n * Returns cluster config with docs URLs resolved for the current environment.\n * Call this on the client side to get URLs that work in development.\n */\nexport function getClusterConfigWithResolvedUrls(clusterId: ClusterId): ClusterConfig {\n const config = CLUSTER_CONFIGS[clusterId];\n const docsUrl = getClusterDocsUrl(clusterId);\n\n return {\n ...config,\n buttons: config.buttons.map(button =>\n button.label === 'Docs'\n ? { ...button, href: docsUrl }\n : button\n ),\n };\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Generate neon glow shadow styles\n */\nexport function glow(\n color: \"cyan\" | \"magenta\" | \"emerald\" = \"cyan\",\n intensity: \"low\" | \"medium\" | \"high\" = \"medium\"\n) {\n const colorMap = {\n cyan: \"var(--cyan-neon)\",\n magenta: \"var(--magenta-neon)\",\n emerald: \"var(--emerald-neon)\",\n };\n\n const intensityMap = {\n low: \"0 0 10px\",\n medium: \"0 0 20px, 0 0 40px\",\n high: \"0 0 20px, 0 0 40px, 0 0 80px\",\n };\n\n const hslColor = `hsl(${colorMap[color]})`;\n return `${intensityMap[intensity]} ${hslColor}`;\n}\n\n/**\n * Generate HUD-style conic gradient for progress rings\n */\nexport function hudGrad(\n progress: number = 0.75,\n colors?: { start?: string; middle?: string; end?: string }\n) {\n const defaultColors = {\n start: \"hsl(var(--cyan-neon))\",\n middle: \"hsl(var(--magenta-neon))\",\n end: \"hsl(var(--emerald-neon))\",\n };\n\n const gradColors = { ...defaultColors, ...colors };\n const progressDeg = progress * 360;\n\n return `conic-gradient(from 0deg at 50% 50%, ${gradColors.start} 0deg, ${\n gradColors.middle\n } ${progressDeg / 2}deg, ${\n gradColors.end\n } ${progressDeg}deg, transparent ${progressDeg}deg, transparent 360deg)`;\n}\n\n/**\n * Format numbers with appropriate suffixes (K, M, B)\n */\nexport function formatNumber(num: number): string {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num.toString();\n}\n\n/**\n * Animate number changes with a spring-like effect\n */\nexport function animateNumber(\n from: number,\n to: number,\n duration: number = 1000,\n onUpdate: (value: number) => void,\n easing: (t: number) => number = (t) => t * (2 - t) // ease-out quad\n) {\n const startTime = Date.now();\n const delta = to - from;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentValue = from + delta * easedProgress;\n\n onUpdate(Math.round(currentValue));\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n}\n\n/**\n * Animate float changes without rounding (for smooth SVG/progress animations)\n */\nexport function animateFloat(\n from: number,\n to: number,\n duration: number = 1000,\n onUpdate: (value: number) => void,\n easing: (t: number) => number = (t) => t * (2 - t)\n) {\n const startTime = Date.now();\n const delta = to - from;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentValue = from + delta * easedProgress;\n\n onUpdate(currentValue);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n}\n\n/**\n * Debounce function for search/input handling\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n/**\n * Check if user prefers reduced motion\n */\nexport function prefersReducedMotion(): boolean {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n// Accessibility\nexport { prefersReducedTransparency, usePrefersReducedTransparency, usePrefersReducedMotion, usePrefersColorScheme, usePrefersHighContrast } from './accessibility';\nexport { useFocusTrap } from './useFocusTrap';\n","\"use client\";\n\nimport * as React from \"react\";\nimport { MotionConfig } from \"framer-motion\";\nimport { applyThemeCssVariables, DEFAULT_THEME_ID, getTheme } from \"./registry\";\nimport type { UiTheme, UiThemeContextValue, UiThemeId } from \"./types\";\nimport { usePrefersReducedMotion } from \"../lib/accessibility\";\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst UiThemeContext = React.createContext<UiThemeContextValue | null>(null);\n\n// ============================================================================\n// PROVIDER\n// ============================================================================\n\nexport interface UiThemeProviderProps {\n children: React.ReactNode;\n /** Initial theme ID */\n defaultThemeId?: UiThemeId;\n /** Controlled theme ID */\n themeId?: UiThemeId;\n /** Callback when theme changes */\n onThemeChange?: (themeId: UiThemeId) => void;\n /** Storage key for persisting theme preference */\n storageKey?: string;\n /** Disable CSS variable injection (for SSR or custom handling) */\n disableCssVariables?: boolean;\n}\n\nconst STORAGE_KEY = \"oos-ui-theme\";\n\nexport function UiThemeProvider({\n children,\n defaultThemeId = DEFAULT_THEME_ID,\n themeId: controlledThemeId,\n onThemeChange,\n storageKey = STORAGE_KEY,\n disableCssVariables = false,\n}: UiThemeProviderProps) {\n const deprecationWarned = React.useRef(false);\n if (!deprecationWarned.current) {\n deprecationWarned.current = true;\n console.warn(\"[Glia] UiThemeProvider is deprecated. Use GliaThemeProvider instead.\");\n }\n\n const [isHydrating, setIsHydrating] = React.useState(true);\n const [internalThemeId, setInternalThemeId] = React.useState<UiThemeId>(defaultThemeId);\n\n // Determine active theme ID (controlled vs uncontrolled)\n const activeThemeId = controlledThemeId ?? internalThemeId;\n const theme = getTheme(activeThemeId);\n\n // Load persisted theme on mount\n React.useEffect(() => {\n if (controlledThemeId !== undefined) {\n setIsHydrating(false);\n return;\n }\n\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored && (stored === \"nebula\" || stored === \"solarpunk\")) {\n setInternalThemeId(stored as UiThemeId);\n }\n } catch {\n // localStorage not available\n }\n\n setIsHydrating(false);\n }, [controlledThemeId, storageKey]);\n\n // Apply CSS variables when theme changes\n React.useEffect(() => {\n if (disableCssVariables || isHydrating) return;\n\n applyThemeCssVariables(theme);\n\n return () => {\n // Cleanup is handled by the next theme application\n };\n }, [theme, disableCssVariables, isHydrating]);\n\n // Theme setter\n const setThemeId = React.useCallback(\n (id: UiThemeId) => {\n if (controlledThemeId === undefined) {\n setInternalThemeId(id);\n try {\n localStorage.setItem(storageKey, id);\n } catch {\n // localStorage not available\n }\n }\n onThemeChange?.(id);\n },\n [controlledThemeId, onThemeChange, storageKey]\n );\n\n const contextValue = React.useMemo<UiThemeContextValue>(\n () => ({\n theme,\n themeId: activeThemeId,\n setThemeId,\n isHydrating,\n }),\n [theme, activeThemeId, setThemeId, isHydrating]\n );\n\n const reduceMotion = usePrefersReducedMotion();\n\n return (\n <UiThemeContext.Provider value={contextValue}>\n <MotionConfig reducedMotion={reduceMotion ? \"always\" : \"never\"}>\n {children}\n </MotionConfig>\n </UiThemeContext.Provider>\n );\n}\n\n// ============================================================================\n// HOOKS\n// ============================================================================\n\n/**\n * Access the current UI theme context\n */\nexport function useUiTheme(): UiThemeContextValue {\n const context = React.useContext(UiThemeContext);\n\n if (!context) {\n throw new Error(\"useUiTheme must be used within a UiThemeProvider\");\n }\n\n return context;\n}\n\n/**\n * Access just the current theme object (shorthand)\n */\nexport function useThemeTokens(): UiTheme {\n const { theme } = useUiTheme();\n return theme;\n}\n\n/**\n * Access specific token groups\n */\nexport function useGlassTokens() {\n const { theme } = useUiTheme();\n return theme.glass;\n}\n\nexport function useColorTokens() {\n const { theme } = useUiTheme();\n return theme.color;\n}\n\nexport function useMotionTokens() {\n const { theme } = useUiTheme();\n return theme.motion;\n}\n\nexport function useAmbientTokens() {\n const { theme } = useUiTheme();\n return theme.ambient;\n}\n\nexport function useControlTokens() {\n const { theme } = useUiTheme();\n return theme.controls;\n}\n\nexport function useElevationTokens() {\n const { theme } = useUiTheme();\n return theme.elevation;\n}\n\n// ============================================================================\n// UTILITY HOOKS\n// ============================================================================\n\n/**\n * Returns true if the current theme is Solarpunk\n */\nexport function useIsSolarpunk(): boolean {\n const { themeId } = useUiTheme();\n return themeId === \"solarpunk\";\n}\n\n/**\n * Returns true if the current theme is Nebula\n */\nexport function useIsNebula(): boolean {\n const { themeId } = useUiTheme();\n return themeId === \"nebula\";\n}\n","\"use client\";\n\nimport { cn, prefersReducedMotion } from \"../../lib/utils\";\nimport { useAmbientTokens } from \"../../theme\";\nimport { motion, useReducedMotion } from \"framer-motion\";\nimport * as React from \"react\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface Mote {\n id: number;\n x: number;\n y: number;\n size: number;\n color: string;\n delay: number;\n duration: number;\n driftX: number;\n driftY: number;\n}\n\nexport interface DustMotesLayerProps {\n /** Override particle colors */\n colors?: string[];\n /** Override density (0-1) */\n density?: number;\n /** Override speed multiplier */\n speed?: number;\n /** Override size range [min, max] */\n sizeRange?: [number, number];\n /** Container className */\n className?: string;\n /** Disable animations */\n disabled?: boolean;\n}\n\n// ============================================================================\n// MOTE GENERATION\n// ============================================================================\n\nfunction generateMotes(\n count: number,\n colors: string[],\n sizeRange: [number, number],\n speed: number\n): Mote[] {\n return Array.from({ length: count }, (_, i) => ({\n id: i,\n x: Math.random() * 100,\n y: Math.random() * 100,\n size: sizeRange[0] + Math.random() * (sizeRange[1] - sizeRange[0]),\n color: colors[Math.floor(Math.random() * colors.length)],\n delay: Math.random() * 5,\n duration: (8 + Math.random() * 8) / speed,\n driftX: (Math.random() - 0.5) * 30,\n driftY: -20 - Math.random() * 40, // Upward drift\n }));\n}\n\n// ============================================================================\n// SINGLE MOTE COMPONENT\n// ============================================================================\n\ninterface MoteParticleProps {\n mote: Mote;\n speedMultiplier: number;\n}\n\nconst MoteParticle = React.memo(function MoteParticle({\n mote,\n speedMultiplier,\n}: MoteParticleProps) {\n const reducedMotion = useReducedMotion();\n\n if (reducedMotion) {\n return (\n <div\n className=\"absolute rounded-full\"\n style={{\n left: `${mote.x}%`,\n top: `${mote.y}%`,\n width: mote.size,\n height: mote.size,\n backgroundColor: mote.color,\n opacity: 0.3,\n }}\n />\n );\n }\n\n return (\n <motion.div\n className=\"absolute rounded-full will-change-transform\"\n style={{\n left: `${mote.x}%`,\n top: `${mote.y}%`,\n width: mote.size,\n height: mote.size,\n backgroundColor: mote.color,\n filter: `blur(${mote.size > 4 ? 1 : 0}px)`,\n }}\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{\n opacity: [0, 0.6, 0.4, 0.7, 0],\n scale: [0.5, 1, 0.9, 1.1, 0.8],\n x: [0, mote.driftX * 0.3, mote.driftX * 0.7, mote.driftX],\n y: [0, mote.driftY * 0.3, mote.driftY * 0.7, mote.driftY],\n }}\n transition={{\n duration: mote.duration / speedMultiplier,\n delay: mote.delay,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n />\n );\n});\n\n// ============================================================================\n// DUST MOTES LAYER\n// ============================================================================\n\nexport function DustMotesLayer({\n colors: propColors,\n density: propDensity,\n speed: propSpeed,\n sizeRange: propSizeRange,\n className,\n disabled = false,\n}: DustMotesLayerProps) {\n const ambientTokens = useAmbientTokens();\n const reducedMotion = prefersReducedMotion();\n\n // Use props or fall back to theme tokens\n const colors = propColors ?? ambientTokens.particleColors;\n const density = propDensity ?? ambientTokens.particleDensity;\n const speed = propSpeed ?? ambientTokens.particleSpeed;\n const sizeRange = propSizeRange ?? ambientTokens.particleSizeRange;\n\n // Calculate mote count based on viewport and density\n const [motes, setMotes] = React.useState<Mote[]>([]);\n\n React.useEffect(() => {\n if (disabled || reducedMotion) {\n setMotes([]);\n return;\n }\n\n // Base count on viewport, scaled by density\n const viewportArea =\n typeof window !== \"undefined\" ? (window.innerWidth * window.innerHeight) / 10000 : 100;\n const count = Math.floor(viewportArea * density * 2);\n const clampedCount = Math.min(Math.max(count, 15), 80);\n\n setMotes(generateMotes(clampedCount, colors, sizeRange, speed));\n }, [colors, density, disabled, reducedMotion, sizeRange, speed]);\n\n // Don't render if ambient type is not dust-motes\n if (disabled || motes.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\"pointer-events-none absolute inset-0 overflow-hidden\", className)}\n aria-hidden=\"true\"\n >\n {/* Horizon gradient */}\n <div\n className=\"absolute inset-0\"\n style={{\n background: ambientTokens.horizonGradient,\n }}\n />\n\n {/* Floating motes */}\n {motes.map((mote) => (\n <MoteParticle key={mote.id} mote={mote} speedMultiplier={speed} />\n ))}\n\n {/* Soft sunbeam overlay (optional) */}\n <div\n className=\"absolute inset-0 opacity-30\"\n style={{\n background: `\n radial-gradient(\n ellipse 60% 100% at 70% 0%,\n ${colors[0]}15,\n transparent 70%\n )\n `,\n }}\n />\n </div>\n );\n}\n","export type PerformanceTier = 'high' | 'medium' | 'low' | 'minimal';\n\nexport type EnvironmentStylePreset = 'cinematic' | 'ui';\n\nexport interface PerformanceConfig {\n tier: PerformanceTier;\n maxParticles: number;\n useShaders: boolean;\n targetFPS: number;\n}\n\nexport const PERFORMANCE_PRESETS: Record<PerformanceTier, PerformanceConfig> = {\n high: { tier: 'high', maxParticles: 2000, useShaders: true, targetFPS: 60 },\n medium: { tier: 'medium', maxParticles: 800, useShaders: true, targetFPS: 60 },\n low: { tier: 'low', maxParticles: 300, useShaders: false, targetFPS: 30 },\n minimal: { tier: 'minimal', maxParticles: 0, useShaders: false, targetFPS: 0 },\n};\n\nexport interface BaseLayerProps {\n intensity?: number;\n speed?: number;\n stylePreset?: EnvironmentStylePreset;\n enabled?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n","import { PERFORMANCE_PRESETS, type PerformanceTier, type PerformanceConfig } from './types';\n\nexport function detectPerformanceTier(): PerformanceTier {\n if (typeof window === 'undefined') return 'medium';\n\n // Check reduced motion first\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return 'minimal';\n }\n\n // Check device memory (Chrome only)\n const nav = navigator as Navigator & { deviceMemory?: number };\n if (nav.deviceMemory && nav.deviceMemory < 4) {\n return 'low';\n }\n\n // Check hardware concurrency\n if (navigator.hardwareConcurrency && navigator.hardwareConcurrency < 4) {\n return 'low';\n }\n\n // Check if mobile\n const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);\n if (isMobile) return 'low';\n\n // Default to medium\n return 'medium';\n}\n\nexport function getPerformanceConfig(tier?: PerformanceTier): PerformanceConfig {\n const detected = tier ?? detectPerformanceTier();\n return PERFORMANCE_PRESETS[detected];\n}\n","const NOISE_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"200\" viewBox=\"0 0 200 200\">\n <filter id=\"n\">\n <feTurbulence type=\"fractalNoise\" baseFrequency=\"0.9\" numOctaves=\"3\" seed=\"2\" stitchTiles=\"stitch\" />\n <feColorMatrix type=\"saturate\" values=\"0\" />\n </filter>\n <rect width=\"200\" height=\"200\" filter=\"url(#n)\" opacity=\"0.55\" />\n</svg>`;\n\nexport const NOISE_DATA_URL = `data:image/svg+xml,${encodeURIComponent(NOISE_SVG)}`;\n\n","import type { BaseLayerProps } from '../shared/types';\n\nexport type LightType = 'godrays' | 'shaft' | 'bloom' | 'flare' | 'caustics' | 'scanner' | 'neon' | 'spotlight' | 'rim' | 'laser';\n\nexport interface VolumetricLightProps extends BaseLayerProps {\n type: LightType;\n source?: { x: number; y: number };\n color?: string;\n decay?: number;\n angle?: number;\n width?: number;\n animated?: boolean;\n}\n\nexport interface LightConfig {\n defaultColor: string;\n defaultIntensity: number;\n animated: boolean;\n blendMode: string;\n}\n\nexport const LIGHT_CONFIGS: Record<LightType, LightConfig> = {\n godrays: { defaultColor: '#fffbe6', defaultIntensity: 0.6, animated: true, blendMode: 'screen' },\n shaft: { defaultColor: '#ffffff', defaultIntensity: 0.5, animated: false, blendMode: 'screen' },\n bloom: { defaultColor: '#ffffff', defaultIntensity: 0.4, animated: false, blendMode: 'screen' },\n flare: { defaultColor: '#ffe4b5', defaultIntensity: 0.7, animated: true, blendMode: 'screen' },\n caustics: { defaultColor: '#00d4ff', defaultIntensity: 0.4, animated: true, blendMode: 'overlay' },\n scanner: { defaultColor: '#00ff00', defaultIntensity: 0.6, animated: true, blendMode: 'screen' },\n neon: { defaultColor: '#ff00ff', defaultIntensity: 0.8, animated: true, blendMode: 'screen' },\n spotlight: { defaultColor: '#ffffff', defaultIntensity: 0.7, animated: false, blendMode: 'screen' },\n rim: { defaultColor: '#00f0ff', defaultIntensity: 0.5, animated: false, blendMode: 'screen' },\n laser: { defaultColor: '#ff0000', defaultIntensity: 0.9, animated: true, blendMode: 'screen' },\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useReducedMotion } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\nimport { getPerformanceConfig } from \"../shared/performance\";\nimport { NOISE_DATA_URL } from \"../shared/noise\";\nimport type { VolumetricLightProps } from \"./types\";\nimport { LIGHT_CONFIGS } from \"./types\";\n\nexport function VolumetricLight({\n type,\n source = { x: 0.5, y: 0 },\n color: propColor,\n intensity = 0.5,\n decay = 0.5,\n angle = 0,\n width = 0.3,\n animated: propAnimated,\n stylePreset = 'ui',\n enabled = true,\n className,\n style,\n}: VolumetricLightProps) {\n const reducedMotion = useReducedMotion();\n const perfConfig = getPerformanceConfig();\n const [time, setTime] = React.useState(0);\n\n const config = LIGHT_CONFIGS[type];\n const color = propColor ?? config.defaultColor;\n const shouldAnimate = (propAnimated ?? config.animated) && !reducedMotion && perfConfig.tier !== 'minimal';\n\n React.useEffect(() => {\n if (!shouldAnimate || !enabled) return;\n let frame: number;\n const animate = () => {\n setTime(prev => prev + 0.016);\n frame = requestAnimationFrame(animate);\n };\n frame = requestAnimationFrame(animate);\n return () => cancelAnimationFrame(frame);\n }, [shouldAnimate, enabled]);\n\n const lightStyle = React.useMemo((): React.CSSProperties => {\n const opacity = intensity * config.defaultIntensity;\n const d = Math.max(0, Math.min(1, decay));\n\n switch (type) {\n case 'godrays':\n return {\n background: `conic-gradient(from ${angle}deg at ${source.x * 100}% ${source.y * 100}%,\n ${color}${Math.round(opacity * 0.4 * 255).toString(16).padStart(2, '0')} 0deg,\n transparent 15deg,\n ${color}${Math.round(opacity * 0.3 * 255).toString(16).padStart(2, '0')} 30deg,\n transparent 45deg,\n ${color}${Math.round(opacity * 0.35 * 255).toString(16).padStart(2, '0')} 60deg,\n transparent 75deg,\n ${color}${Math.round(opacity * 0.25 * 255).toString(16).padStart(2, '0')} 90deg,\n transparent 105deg\n )`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'shaft':\n return {\n background: `linear-gradient(${angle}deg,\n transparent ${(source.x - width/2) * 100}%,\n ${color}${Math.round(opacity * 0.5 * 255).toString(16).padStart(2, '0')} ${source.x * 100}%,\n transparent ${(source.x + width/2) * 100}%\n )`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'bloom': {\n const bloomInner = 18 + d * 22; // 18% → 40%\n const bloomMid = 42 + d * 24; // 42% → 66%\n return {\n background: `radial-gradient(circle at ${source.x * 100}% ${source.y * 100}%,\n ${color}${Math.round(opacity * 0.6 * 255).toString(16).padStart(2, '0')},\n ${color}${Math.round(opacity * 0.3 * 255).toString(16).padStart(2, '0')} ${bloomInner}%,\n transparent ${bloomMid}%\n )`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n filter: 'blur(20px)',\n };\n }\n\n case 'flare':\n const flareOffset = Math.sin(time * 2) * 5;\n return {\n background: `\n radial-gradient(ellipse 20% 5% at ${source.x * 100}% ${source.y * 100 + flareOffset}%, ${color}${Math.round(opacity * 0.8 * 255).toString(16).padStart(2, '0')}, transparent),\n radial-gradient(ellipse 5% 20% at ${source.x * 100}% ${source.y * 100}%, ${color}${Math.round(opacity * 0.6 * 255).toString(16).padStart(2, '0')}, transparent),\n radial-gradient(circle at ${source.x * 100}% ${source.y * 100}%, ${color}${Math.round(opacity * 0.4 * 255).toString(16).padStart(2, '0')}, transparent 20%)\n `,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'caustics':\n const causticPhase = time * 0.5;\n return {\n background: `\n radial-gradient(ellipse at ${50 + Math.sin(causticPhase) * 20}% ${50 + Math.cos(causticPhase * 1.3) * 20}%, ${color}${Math.round(opacity * 0.3 * 255).toString(16).padStart(2, '0')}, transparent 40%),\n radial-gradient(ellipse at ${50 + Math.cos(causticPhase * 0.7) * 25}% ${50 + Math.sin(causticPhase * 1.1) * 25}%, ${color}${Math.round(opacity * 0.25 * 255).toString(16).padStart(2, '0')}, transparent 35%)\n `,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'scanner':\n const scanAngle = (time * 60) % 360;\n return {\n background: `conic-gradient(from ${scanAngle}deg at ${source.x * 100}% ${source.y * 100}%,\n ${color}${Math.round(opacity * 0.6 * 255).toString(16).padStart(2, '0')} 0deg,\n transparent 30deg,\n transparent 360deg\n )`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'neon':\n const flickerIntensity = 0.9 + Math.sin(time * 20) * 0.1;\n return {\n background: `linear-gradient(${angle}deg, transparent 40%, ${color}${Math.round(opacity * flickerIntensity * 0.8 * 255).toString(16).padStart(2, '0')} 50%, transparent 60%)`,\n boxShadow: `0 0 30px ${color}${Math.round(opacity * flickerIntensity * 0.5 * 255).toString(16).padStart(2, '0')}, 0 0 60px ${color}${Math.round(opacity * flickerIntensity * 0.3 * 255).toString(16).padStart(2, '0')}`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'spotlight': {\n const spotMid = 40 + d * 35; // 40% → 75%\n return {\n background: `radial-gradient(ellipse ${width * 100}% ${width * 150}% at ${source.x * 100}% ${source.y * 100}%,\n ${color}${Math.round(opacity * 0.7 * 255).toString(16).padStart(2, '0')},\n ${color}${Math.round(opacity * 0.3 * 255).toString(16).padStart(2, '0')} ${spotMid}%,\n transparent 100%\n )`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n }\n\n case 'rim':\n return {\n boxShadow: `inset 0 0 ${60 * intensity}px ${color}${Math.round(opacity * 0.6 * 255).toString(16).padStart(2, '0')}`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n case 'laser':\n const laserOffset = Math.sin(time * 3) * 10;\n return {\n background: `linear-gradient(${angle + laserOffset}deg,\n transparent 49%,\n ${color}${Math.round(opacity * 255).toString(16).padStart(2, '0')} 49.5%,\n ${color}${Math.round(opacity * 255).toString(16).padStart(2, '0')} 50.5%,\n transparent 51%\n )`,\n mixBlendMode: config.blendMode as React.CSSProperties['mixBlendMode'],\n };\n\n default:\n return {};\n }\n }, [type, source, color, intensity, decay, angle, width, time, config]);\n\n if (!enabled) return null;\n\n return (\n <div\n className={cn(\"pointer-events-none absolute inset-0\", className)}\n style={{ ...lightStyle, ...style }}\n aria-hidden=\"true\"\n >\n {stylePreset === 'cinematic' && (\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage: `url(\"${NOISE_DATA_URL}\")`,\n backgroundRepeat: 'repeat',\n backgroundSize: '240px 240px',\n backgroundPosition: `${time * 160}px ${time * 110}px`,\n opacity: Math.min(0.12, 0.03 + intensity * 0.06),\n mixBlendMode: 'overlay',\n filter: 'blur(0.4px) contrast(1.25)',\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n}\n","import type { BaseLayerProps } from '../shared/types';\n\nexport type FogType = 'depth' | 'ground' | 'volumetric' | 'mist';\n\nexport interface FogLayerProps extends BaseLayerProps {\n type: FogType;\n density?: number;\n color?: string;\n height?: number; // 0-1 for ground fog\n animated?: boolean;\n}\n\nexport interface FogConfig {\n defaultColor: string;\n defaultDensity: number;\n animationSpeed: number;\n gradientStops: number;\n}\n\nexport const FOG_CONFIGS: Record<FogType, FogConfig> = {\n depth: {\n defaultColor: '#0a0a0f',\n defaultDensity: 0.5,\n animationSpeed: 0,\n gradientStops: 2,\n },\n ground: {\n defaultColor: '#ffffff',\n defaultDensity: 0.7,\n animationSpeed: 0.02,\n gradientStops: 3,\n },\n volumetric: {\n defaultColor: '#e8e8ff',\n defaultDensity: 0.4,\n animationSpeed: 0.01,\n gradientStops: 4,\n },\n mist: {\n defaultColor: '#f0f0ff',\n defaultDensity: 0.3,\n animationSpeed: 0.015,\n gradientStops: 5,\n },\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useReducedMotion } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\nimport { getPerformanceConfig } from \"../shared/performance\";\nimport { NOISE_DATA_URL } from \"../shared/noise\";\nimport type { FogLayerProps } from \"./types\";\nimport { FOG_CONFIGS } from \"./types\";\n\nexport function FogLayer({\n type,\n density: propDensity,\n color: propColor,\n height = 0.4,\n animated = true,\n intensity = 1,\n stylePreset = 'ui',\n enabled = true,\n className,\n style,\n}: FogLayerProps) {\n const reducedMotion = useReducedMotion();\n const perfConfig = getPerformanceConfig();\n const [offset, setOffset] = React.useState(0);\n\n const config = FOG_CONFIGS[type];\n const density = propDensity ?? config.defaultDensity;\n const color = propColor ?? config.defaultColor;\n\n const shouldAnimate = animated && !reducedMotion && perfConfig.tier !== 'minimal';\n\n // Animation loop for mist/volumetric movement\n React.useEffect(() => {\n if (!shouldAnimate || !enabled || config.animationSpeed === 0) return;\n\n let frame: number;\n const animate = () => {\n setOffset(prev => (prev + config.animationSpeed) % 100);\n frame = requestAnimationFrame(animate);\n };\n frame = requestAnimationFrame(animate);\n return () => cancelAnimationFrame(frame);\n }, [shouldAnimate, enabled, config.animationSpeed]);\n\n const gradientStyle = React.useMemo(() => {\n const opacity = density * intensity;\n\n switch (type) {\n case 'depth':\n return {\n background: `linear-gradient(to top, ${color}${Math.round(opacity * 255).toString(16).padStart(2, '0')}, transparent)`,\n };\n case 'ground':\n return {\n background: `linear-gradient(to top,\n ${color}${Math.round(opacity * 255).toString(16).padStart(2, '0')} 0%,\n ${color}${Math.round(opacity * 0.5 * 255).toString(16).padStart(2, '0')} ${height * 50}%,\n transparent ${height * 100}%)`,\n };\n case 'volumetric':\n return {\n background: `\n radial-gradient(ellipse 120% 60% at 50% ${100 - offset}%, ${color}${Math.round(opacity * 0.6 * 255).toString(16).padStart(2, '0')}, transparent),\n radial-gradient(ellipse 100% 40% at ${30 + offset * 0.2}% 80%, ${color}${Math.round(opacity * 0.4 * 255).toString(16).padStart(2, '0')}, transparent),\n radial-gradient(ellipse 80% 50% at ${70 - offset * 0.15}% 90%, ${color}${Math.round(opacity * 0.5 * 255).toString(16).padStart(2, '0')}, transparent)\n `,\n };\n case 'mist':\n return {\n background: `\n radial-gradient(ellipse 150% 80% at ${40 + Math.sin(offset * 0.1) * 20}% ${60 + Math.cos(offset * 0.08) * 10}%, ${color}${Math.round(opacity * 0.3 * 255).toString(16).padStart(2, '0')}, transparent),\n radial-gradient(ellipse 120% 60% at ${60 + Math.cos(offset * 0.12) * 15}% ${40 + Math.sin(offset * 0.09) * 15}%, ${color}${Math.round(opacity * 0.25 * 255).toString(16).padStart(2, '0')}, transparent),\n linear-gradient(to top, ${color}${Math.round(opacity * 0.15 * 255).toString(16).padStart(2, '0')}, transparent 50%)\n `,\n };\n default:\n return {};\n }\n }, [type, color, density, intensity, height, offset]);\n\n if (!enabled) return null;\n\n return (\n <div\n className={cn(\n \"pointer-events-none absolute inset-0\",\n className\n )}\n style={{\n ...gradientStyle,\n ...style,\n }}\n aria-hidden=\"true\"\n >\n {stylePreset === 'cinematic' && (\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage: `url(\"${NOISE_DATA_URL}\")`,\n backgroundRepeat: 'repeat',\n backgroundSize: `${260 - Math.round(density * 80)}px ${260 - Math.round(density * 80)}px`,\n backgroundPosition: `${offset * 30}px ${offset * 20}px`,\n opacity: Math.min(0.18, 0.04 + density * intensity * 0.12),\n mixBlendMode: 'soft-light',\n filter: 'blur(0.6px) contrast(1.2)',\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DustMotesLayer } from \"../../primitives/ambient/DustMotesLayer\";\nimport { VolumetricLight } from \"../../primitives/environment/VolumetricLight\";\nimport { FogLayer } from \"../../primitives/environment/FogLayer\";\nimport type { AtmosphereConfig } from \"./types.js\";\n\nexport interface ClusterAtmosphereProps {\n config: AtmosphereConfig;\n accentColor: string;\n className?: string;\n}\n\nexport function ClusterAtmosphere({\n config,\n accentColor,\n className,\n}: ClusterAtmosphereProps) {\n return (\n <div\n className={cn(\"pointer-events-none absolute inset-0\", className)}\n aria-hidden=\"true\"\n >\n {config.dustMotes && (\n <DustMotesLayer\n colors={config.dustMotes.colors}\n density={config.dustMotes.density}\n speed={config.dustMotes.speed}\n />\n )}\n {config.fog && (\n <FogLayer\n type={config.fog.type}\n color={config.fog.color}\n intensity={config.fog.intensity}\n />\n )}\n {config.light && (\n <VolumetricLight\n type={config.light.type}\n color={config.light.color}\n intensity={config.light.intensity}\n source={config.light.source}\n />\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport interface GradientVeilProps {\n className?: string;\n /** Intensity of the gradient (0-1, default 1) */\n intensity?: number;\n}\n\n/**\n * A bottom-anchored gradient overlay for text legibility over video backgrounds.\n * The gradient fades from opaque black at the bottom to transparent at the top.\n */\nexport function GradientVeil({ className, intensity = 1 }: GradientVeilProps) {\n // Scale alpha values by intensity\n const a1 = (0.85 * intensity).toFixed(2);\n const a2 = (0.5 * intensity).toFixed(2);\n const a3 = (0.2 * intensity).toFixed(2);\n\n return (\n <div\n className={cn(\"absolute inset-0 pointer-events-none\", className)}\n style={{\n background: `linear-gradient(\n to top,\n rgba(0, 0, 0, ${a1}) 0%,\n rgba(0, 0, 0, ${a2}) 30%,\n rgba(0, 0, 0, ${a3}) 50%,\n transparent 70%\n )`,\n }}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport type { StructuralElementsProps } from \"./types.js\";\nexport type { StructuralElementsProps } from \"./types.js\";\n\n/**\n * Atmospheric structural elements for ClusterHero.\n * Renders corner brackets, radial vignette, and subtle dot grid overlay.\n */\nexport function StructuralElements({\n accentColor,\n className,\n}: StructuralElementsProps) {\n return (\n <div\n className={cn(\"pointer-events-none absolute inset-0 overflow-hidden\", className)}\n aria-hidden=\"true\"\n >\n {/* Corner brackets */}\n <CornerBrackets accentColor={accentColor} />\n\n {/* Radial vignette behind sigil area (right side) */}\n <div\n className=\"absolute inset-0\"\n style={{\n background: `radial-gradient(ellipse 60% 80% at 85% 50%, ${accentColor}1A 0%, transparent 70%)`,\n }}\n />\n\n {/* Dot grid overlay */}\n <DotGrid />\n </div>\n );\n}\n\n/**\n * Corner bracket decorations at top-left and bottom-right.\n */\nfunction CornerBrackets({ accentColor }: { accentColor: string }) {\n const bracketLength = 40;\n const thickness = 2;\n\n return (\n <>\n {/* Top-left bracket */}\n <motion.div\n className=\"absolute top-6 left-6\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.8, delay: 0.2 }}\n >\n {/* Horizontal line */}\n <div\n className=\"absolute top-0 left-0\"\n style={{\n width: bracketLength,\n height: thickness,\n backgroundColor: accentColor,\n }}\n />\n {/* Vertical line */}\n <div\n className=\"absolute top-0 left-0\"\n style={{\n width: thickness,\n height: bracketLength,\n backgroundColor: accentColor,\n }}\n />\n </motion.div>\n\n {/* Bottom-right bracket */}\n <motion.div\n className=\"absolute bottom-6 right-6\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.8, delay: 0.3 }}\n >\n {/* Horizontal line */}\n <div\n className=\"absolute bottom-0 right-0\"\n style={{\n width: bracketLength,\n height: thickness,\n backgroundColor: accentColor,\n }}\n />\n {/* Vertical line */}\n <div\n className=\"absolute bottom-0 right-0\"\n style={{\n width: thickness,\n height: bracketLength,\n backgroundColor: accentColor,\n }}\n />\n </motion.div>\n </>\n );\n}\n\n/**\n * Subtle dot grid pattern overlay.\n */\nfunction DotGrid() {\n return (\n <div\n className=\"absolute inset-0\"\n style={{\n opacity: 0.04,\n backgroundImage: `radial-gradient(circle at center, currentColor 1px, transparent 1px)`,\n backgroundSize: \"24px 24px\",\n }}\n />\n );\n}\n","\"use client\";\n\nimport { useState, useRef, useCallback, useEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface VideoBackgroundProps {\n /** Source URL for the video (MP4 preferred) */\n videoSrc: string;\n /** WebM fallback source URL (optional, for better browser support) */\n webmSrc?: string;\n /** Poster image shown during loading and as fallback */\n posterSrc: string;\n /** Fallback CSS background (used behind poster/video, and if assets 404) */\n fallbackBackground?: string;\n /** Additional CSS classes */\n className?: string;\n /** Duration of the crossfade animation in seconds (default: 0.8) */\n crossfadeDuration?: number;\n /** Whether to add preload hints for video and poster (default: true) */\n preload?: boolean;\n /** Video playback rate (default: 1.0, use 0.5 for half speed) */\n playbackRate?: number;\n /** Callback fired when video successfully loads */\n onLoad?: () => void;\n /** Callback fired when video fails to load */\n onError?: (error: Event) => void;\n}\n\n/**\n * A fullscreen video background with crossfade loading animation.\n * Falls back to poster image if video fails to load.\n *\n * Features:\n * - Crossfade from poster to video when canplaythrough fires\n * - Graceful fallback to poster on video error\n * - Reduces motion for accessibility when user prefers reduced motion\n * - Optimized with playsInline, muted, autoPlay, loop attributes\n * - Optional preload hints for faster loading\n * - WebM format support for better compression\n */\nexport function VideoBackground({\n videoSrc,\n webmSrc,\n posterSrc,\n fallbackBackground,\n className,\n crossfadeDuration = 0.8,\n preload = true,\n playbackRate = 0.75,\n onLoad,\n onError,\n}: VideoBackgroundProps) {\n const [isVideoReady, setIsVideoReady] = useState(false);\n const [hasError, setHasError] = useState(false);\n const videoRef = useRef<HTMLVideoElement>(null);\n\n // Check for reduced motion preference\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n setPrefersReducedMotion(mediaQuery.matches);\n\n const handleChange = (e: MediaQueryListEvent) => {\n setPrefersReducedMotion(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const handleCanPlayThrough = useCallback(() => {\n setIsVideoReady(true);\n onLoad?.();\n }, [onLoad]);\n\n const handleError = useCallback(\n (e: React.SyntheticEvent<HTMLVideoElement, Event>) => {\n setHasError(true);\n setIsVideoReady(false);\n onError?.(e.nativeEvent);\n },\n [onError]\n );\n\n // Attempt to play video when it becomes visible and set playback rate\n useEffect(() => {\n const video = videoRef.current;\n if (!video || hasError || prefersReducedMotion) return;\n\n // Set playback rate\n video.playbackRate = playbackRate;\n\n // Some browsers require user interaction before autoplay works\n // This attempts to play and silently handles any autoplay restrictions\n const playPromise = video.play();\n if (playPromise !== undefined) {\n playPromise.catch(() => {\n // Autoplay was prevented, video will show poster instead\n // This is expected behavior on some mobile browsers\n });\n }\n }, [hasError, prefersReducedMotion, playbackRate]);\n\n // Add preload hints to document head for faster loading\n useEffect(() => {\n if (!preload || typeof document === \"undefined\") return;\n\n const links: HTMLLinkElement[] = [];\n\n // Preload poster image\n if (posterSrc) {\n const posterLink = document.createElement(\"link\");\n posterLink.rel = \"preload\";\n posterLink.as = \"image\";\n posterLink.href = posterSrc;\n document.head.appendChild(posterLink);\n links.push(posterLink);\n }\n\n // Preload primary video\n if (videoSrc) {\n const videoLink = document.createElement(\"link\");\n videoLink.rel = \"preload\";\n videoLink.as = \"video\";\n videoLink.href = videoSrc;\n if (videoSrc.endsWith(\".mp4\")) {\n videoLink.type = \"video/mp4\";\n } else if (videoSrc.endsWith(\".webm\")) {\n videoLink.type = \"video/webm\";\n }\n document.head.appendChild(videoLink);\n links.push(videoLink);\n }\n\n // Preload WebM fallback if provided\n if (webmSrc) {\n const webmLink = document.createElement(\"link\");\n webmLink.rel = \"preload\";\n webmLink.as = \"video\";\n webmLink.href = webmSrc;\n webmLink.type = \"video/webm\";\n document.head.appendChild(webmLink);\n links.push(webmLink);\n }\n\n return () => {\n links.forEach((link) => {\n if (link.parentNode === document.head) {\n document.head.removeChild(link);\n }\n });\n };\n }, [preload, videoSrc, webmSrc, posterSrc]);\n\n // Shared styles for both video and fallback\n const mediaStyles = cn(\n \"absolute inset-0 w-full h-full object-cover\",\n className\n );\n\n const fallbackBg =\n fallbackBackground ??\n \"radial-gradient(1200px 700px at 50% 30%, rgba(255,255,255,0.10), rgba(0,0,0,0) 60%), linear-gradient(180deg, rgba(255,255,255,0.06), rgba(0,0,0,0) 40%), #000\";\n\n // Use multiple backgrounds so if the poster 404s, the fallback still paints.\n const posterBackgroundImage = posterSrc ? `url(${posterSrc}), ${fallbackBg}` : fallbackBg;\n const posterBackgroundSize = posterSrc ? \"cover, cover\" : \"cover\";\n const posterBackgroundPosition = posterSrc ? \"center, center\" : \"center\";\n\n // If user prefers reduced motion, just show the poster\n if (prefersReducedMotion) {\n return (\n <div\n className={mediaStyles}\n style={{\n backgroundImage: posterBackgroundImage,\n backgroundSize: posterBackgroundSize,\n backgroundPosition: posterBackgroundPosition,\n }}\n role=\"img\"\n aria-label=\"Background image\"\n />\n );\n }\n\n return (\n <>\n {/* Poster fallback - always rendered underneath */}\n <div\n className={cn(mediaStyles, \"z-0\")}\n style={{\n backgroundImage: posterBackgroundImage,\n backgroundSize: posterBackgroundSize,\n backgroundPosition: posterBackgroundPosition,\n }}\n role=\"img\"\n aria-hidden={isVideoReady && !hasError}\n />\n\n {/* Video layer with crossfade */}\n <AnimatePresence>\n {!hasError && (\n <motion.video\n ref={videoRef}\n key={videoSrc}\n className={cn(mediaStyles, \"z-10\")}\n poster={posterSrc}\n autoPlay\n muted\n loop\n playsInline\n disablePictureInPicture\n disableRemotePlayback\n onCanPlayThrough={handleCanPlayThrough}\n onError={handleError}\n initial={{ opacity: 0 }}\n animate={{ opacity: isVideoReady ? 1 : 0 }}\n exit={{ opacity: 0 }}\n transition={{\n opacity: {\n duration: crossfadeDuration,\n ease: [0.4, 0, 0.2, 1], // ease-out cubic\n },\n }}\n aria-hidden=\"true\"\n >\n {/* WebM format first (better compression, preferred by modern browsers) */}\n {webmSrc && <source src={webmSrc} type=\"video/webm\" />}\n {/* MP4 fallback for broader compatibility */}\n <source src={videoSrc} type=\"video/mp4\" />\n </motion.video>\n )}\n </AnimatePresence>\n </>\n );\n}\n\nexport default VideoBackground;\n","\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport type { ClusterRailProps, ButtonConfig } from \"./types.js\";\n\n// ============================================================================\n// Animation Variants\n// ============================================================================\n\nconst fadeUpVariants = {\n hidden: { opacity: 0, y: 20 },\n visible: { opacity: 1, y: 0 },\n};\n\nconst fadeUpTransition = {\n duration: 0.6,\n ease: [0.22, 1, 0.36, 1],\n};\n\nconst staggerContainer = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.12,\n delayChildren: 0.1,\n },\n },\n};\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction ClusterName({ name }: { name: string }) {\n return (\n <motion.h2\n variants={fadeUpVariants}\n className=\"text-4xl md:text-5xl lg:text-6xl font-semibold uppercase text-white\"\n style={{\n fontVariant: \"small-caps\",\n letterSpacing: \"0.12em\",\n }}\n >\n {name}\n </motion.h2>\n );\n}\n\nfunction Tagline({ text }: { text: string }) {\n return (\n <motion.p\n variants={fadeUpVariants}\n className=\"text-lg md:text-xl text-white/70 font-light italic leading-relaxed mt-3\"\n >\n {text}\n </motion.p>\n );\n}\n\nfunction MetricsRow({\n metrics,\n}: {\n metrics: { realms: number; output24h: string; rank?: number };\n}) {\n const formattedRealms = metrics.realms.toLocaleString();\n\n return (\n <motion.div\n variants={fadeUpVariants}\n className=\"flex items-center gap-2 font-mono text-xs text-white/50 mt-4 tracking-wide\"\n >\n <span>{formattedRealms} realms</span>\n <span className=\"text-white/30\">•</span>\n <span>{metrics.output24h} output</span>\n {metrics.rank !== undefined && (\n <>\n <span className=\"text-white/30\">•</span>\n <span>Rank #{metrics.rank}</span>\n </>\n )}\n </motion.div>\n );\n}\n\nfunction RailButton({ button }: { button: ButtonConfig }) {\n const baseClasses =\n \"w-full px-6 py-3 text-sm font-medium tracking-wider uppercase transition-all duration-300 text-center\";\n\n const variantClasses: Record<ButtonConfig[\"variant\"], string> = {\n primary: \"text-neutral-900 hover:brightness-110 hover:scale-[1.02]\",\n secondary:\n \"bg-transparent border hover:bg-[var(--cluster-accent)]/10\",\n ghost:\n \"bg-transparent border-none text-white/50 hover:text-white/80\",\n };\n\n const variantStyles: Record<ButtonConfig[\"variant\"], React.CSSProperties> = {\n primary: {\n backgroundColor: \"var(--cluster-accent)\",\n },\n secondary: {\n borderColor: \"var(--cluster-accent)\",\n color: \"var(--cluster-accent)\",\n },\n ghost: {},\n };\n\n return (\n <motion.a\n variants={fadeUpVariants}\n href={button.href}\n className={cn(baseClasses, variantClasses[button.variant])}\n style={variantStyles[button.variant]}\n {...(button.external && {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n })}\n >\n {button.label}\n </motion.a>\n );\n}\n\nfunction ButtonStack({ buttons }: { buttons: ButtonConfig[] }) {\n return (\n <div className=\"flex flex-col gap-3 mt-8 w-full max-w-xs\">\n {buttons.map((button) => (\n <RailButton key={button.label} button={button} />\n ))}\n </div>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\n/**\n * ClusterRail renders the bottom-left cluster identity panel with:\n * - Cluster name in small caps with wide tracking\n * - Italic tagline at reduced opacity\n * - Metrics row with dot separators (monospace)\n * - Vertically stacked CTA buttons (primary/secondary/ghost)\n *\n * Uses CSS variable --cluster-accent for theming.\n */\nexport function ClusterRail({\n name,\n tagline,\n metrics,\n buttons,\n accentColor,\n className,\n}: ClusterRailProps) {\n return (\n <motion.aside\n variants={staggerContainer}\n initial=\"hidden\"\n animate=\"visible\"\n className={cn(\"flex flex-col items-start\", className)}\n style={\n {\n \"--cluster-accent\": accentColor,\n } as React.CSSProperties\n }\n >\n <ClusterName name={name} />\n <Tagline text={tagline} />\n <MetricsRow metrics={metrics} />\n <ButtonStack buttons={buttons} />\n </motion.aside>\n );\n}\n\nexport default ClusterRail;\n","\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport type { BriefingPanelProps } from \"./types.js\";\n\nconst containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.12,\n delayChildren: 0.1,\n },\n },\n};\n\nconst itemVariants = {\n hidden: { opacity: 0, y: 12 },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.5,\n ease: [0.22, 1, 0.36, 1] as [number, number, number, number],\n },\n },\n};\n\nfunction Description({ text }: { text: string }) {\n return (\n <motion.p\n variants={itemVariants}\n className=\"text-sm text-white/70 leading-relaxed max-w-xs whitespace-pre-line\"\n >\n {text}\n </motion.p>\n );\n}\n\nfunction CapabilityChips({\n capabilities,\n accentColor,\n}: {\n capabilities: [string, string, string];\n accentColor: string;\n}) {\n return (\n <motion.div variants={itemVariants} className=\"flex flex-wrap gap-2\">\n {capabilities.map((capability) => (\n <span\n key={capability}\n className=\"px-2.5 py-1 text-[10px] uppercase tracking-widest text-white/80 rounded-sm\"\n style={{\n backgroundColor: `color-mix(in srgb, ${accentColor} 15%, transparent)`,\n }}\n >\n {capability}\n </span>\n ))}\n </motion.div>\n );\n}\n\nfunction FastPath({\n fastPath,\n accentColor,\n}: {\n fastPath: { label: string; href: string };\n accentColor: string;\n}) {\n return (\n <motion.a\n variants={itemVariants}\n href={fastPath.href}\n className=\"group inline-flex items-center gap-2 text-sm transition-colors duration-200 hover:brightness-125\"\n style={{ color: accentColor }}\n >\n <span>{fastPath.label}</span>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className=\"transition-transform duration-200 group-hover:translate-x-1\"\n >\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </motion.a>\n );\n}\n\nfunction StatusLine({\n status,\n}: {\n status: { network: string; verification: string; fees: string };\n}) {\n return (\n <motion.div\n variants={itemVariants}\n className=\"font-mono text-[10px] text-white/50 tracking-wide\"\n >\n Network: {status.network}\n <span className=\"mx-2\">•</span>\n Verification: {status.verification}\n <span className=\"mx-2\">•</span>\n Fees: {status.fees}\n </motion.div>\n );\n}\n\n/**\n * BriefingPanel renders the top-left briefing information for a cluster hero.\n *\n * Includes:\n * - Description text (max 110 chars)\n * - Capability chips with accent-tinted backgrounds\n * - Fast path link with animated arrow\n * - Status line with network/verification/fees info\n *\n * All elements animate in with staggered fade-up on mount.\n */\nexport function BriefingPanel({\n description,\n capabilities,\n fastPath,\n status,\n accentColor,\n className,\n}: BriefingPanelProps) {\n return (\n <motion.div\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n className={cn(\"flex flex-col gap-4 rounded-xl p-4 backdrop-blur-xl\", className)}\n style={{\n background: \"rgba(2,4,10,0.6)\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n }}\n >\n <Description text={description} />\n <CapabilityChips capabilities={capabilities} accentColor={accentColor} />\n <FastPath fastPath={fastPath} accentColor={accentColor} />\n <StatusLine status={status} />\n </motion.div>\n );\n}\n\nexport default BriefingPanel;\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useId, useState } from \"react\";\nimport {\n motion,\n useMotionValue,\n useTransform,\n useSpring,\n} from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport type { SigilMonumentProps } from \"./types.js\";\n\n/**\n * SigilMonument renders a large cluster sigil/emblem with parallax effect.\n *\n * Features:\n * - Large sigil image (35-45% viewport height)\n * - 2-6px parallax drift on mouse movement\n * - Subtle CSS shimmer animation (10s cycle)\n * - Plaque below with cluster name, tagline, and optional Latin motto\n */\nexport function SigilMonument({\n name,\n tagline,\n latinMotto,\n sigilSrc,\n accentColor,\n className,\n}: SigilMonumentProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const styleId = useId();\n const [sigilFailed, setSigilFailed] = useState(false);\n\n const initials = useMemo(() => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n const letters = parts.map((p) => p[0] ?? \"\").join(\"\");\n return letters.slice(0, 2).toUpperCase() || name.slice(0, 2).toUpperCase();\n }, [name]);\n\n useEffect(() => {\n setSigilFailed(false);\n }, [sigilSrc]);\n\n // Mouse position tracking for parallax\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n\n // Spring-smoothed parallax offsets (2-6px range)\n const springConfig = { damping: 25, stiffness: 150 };\n const parallaxX = useSpring(\n useTransform(mouseX, [-1, 1], [-4, 4]),\n springConfig\n );\n const parallaxY = useSpring(\n useTransform(mouseY, [-1, 1], [-4, 4]),\n springConfig\n );\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n\n // Normalize to -1 to 1 range\n const normalizedX = (e.clientX - centerX) / (rect.width / 2);\n const normalizedY = (e.clientY - centerY) / (rect.height / 2);\n\n mouseX.set(Math.max(-1, Math.min(1, normalizedX)));\n mouseY.set(Math.max(-1, Math.min(1, normalizedY)));\n };\n\n const handleMouseLeave = () => {\n mouseX.set(0);\n mouseY.set(0);\n };\n\n // Unique class name for scoped keyframes\n const shimmerClass = `sigil-shimmer-${styleId.replace(/:/g, \"\")}`;\n\n return (\n <div\n ref={containerRef}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n className={cn(\n \"relative flex flex-col items-center justify-center\",\n className\n )}\n style={{ \"--sigil-accent\": accentColor } as React.CSSProperties}\n >\n {/* Scoped shimmer animation styles */}\n <style\n dangerouslySetInnerHTML={{\n __html: `\n @keyframes ${shimmerClass}-anim {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n .${shimmerClass} {\n animation: ${shimmerClass}-anim 10s ease-in-out infinite;\n }\n `,\n }}\n />\n\n {/* Sigil Container with Parallax */}\n <motion.div\n className=\"relative\"\n style={{\n x: parallaxX,\n y: parallaxY,\n }}\n >\n {/* Shimmer Overlay */}\n <div\n className=\"absolute inset-0 pointer-events-none overflow-hidden\"\n aria-hidden=\"true\"\n >\n <div\n className={`absolute inset-0 ${shimmerClass}`}\n style={{\n background: `linear-gradient(\n 105deg,\n transparent 40%,\n ${accentColor}15 45%,\n ${accentColor}25 50%,\n ${accentColor}15 55%,\n transparent 60%\n )`,\n backgroundSize: \"200% 100%\",\n }}\n />\n </div>\n\n {/* Sigil Image */}\n {!sigilFailed && sigilSrc ? (\n <img\n src={sigilSrc}\n alt={`${name} sigil`}\n className=\"h-[35vh] min-h-[280px] max-h-[45vh] w-auto object-contain drop-shadow-2xl\"\n style={{\n filter: `drop-shadow(0 0 60px ${accentColor}40)`,\n }}\n onError={() => setSigilFailed(true)}\n />\n ) : (\n <div\n className=\"h-[35vh] min-h-[280px] max-h-[45vh] aspect-square rounded-full flex items-center justify-center\"\n style={{\n background: `radial-gradient(circle at 30% 30%, ${accentColor}35, transparent 65%), radial-gradient(circle at 70% 80%, ${accentColor}18, transparent 60%), rgba(255,255,255,0.02)`,\n border: `1px solid ${accentColor}40`,\n boxShadow: `0 0 60px ${accentColor}30, inset 0 0 40px rgba(255,255,255,0.08)`,\n filter: `drop-shadow(0 0 60px ${accentColor}40)`,\n }}\n aria-hidden=\"true\"\n >\n <div\n className=\"font-serif text-6xl text-white/70 tracking-[0.18em]\"\n style={{ textShadow: `0 0 30px ${accentColor}30` }}\n >\n {initials}\n </div>\n </div>\n )}\n </motion.div>\n\n {/* Plaque */}\n <div className=\"mt-10 text-center\">\n {/* Cluster Name - Small Caps */}\n <h2\n className=\"font-serif text-3xl md:text-4xl text-white/95 mb-3\"\n style={{\n fontVariant: \"small-caps\",\n letterSpacing: \"0.12em\",\n }}\n >\n {name}\n </h2>\n\n {/* Tagline - Italic */}\n <p className=\"font-serif text-lg md:text-xl text-white/60 italic max-w-md leading-relaxed\">\n {tagline}\n </p>\n\n {/* Latin Motto - Tiny */}\n {latinMotto && (\n <p\n className=\"mt-4 font-mono text-[10px] uppercase tracking-[0.2em] text-white/30\"\n aria-label=\"Latin motto\"\n >\n {latinMotto}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nexport default SigilMonument;\n","\"use client\";\n\nimport { FileText, Zap, Vote, Trophy, ArrowRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport type { LiveStripProps, LiveModuleType } from \"./types.js\";\n\nconst DEFAULT_CONTENT: Record<LiveModuleType, string> = {\n market: \"3 new blueprints published today\",\n live: \"24 active workflows running\",\n governance: \"Proposal #18 — Voting ends in 6h\",\n progress: \"You minted 4 verified artifacts this week\",\n};\n\nconst MODULE_ICONS: Record<LiveModuleType, typeof FileText> = {\n market: FileText,\n live: Zap,\n governance: Vote,\n progress: Trophy,\n};\n\n/**\n * LiveStrip renders a single horizontal activity strip with a contextual\n * icon, message text, and an animated arrow indicator.\n */\nexport function LiveStrip({\n moduleType,\n content,\n accentColor,\n className,\n}: LiveStripProps) {\n const Icon = MODULE_ICONS[moduleType];\n const displayContent = content ?? DEFAULT_CONTENT[moduleType];\n\n return (\n <div\n className={cn(\n \"group flex items-center gap-3 px-4 py-2.5 rounded-lg bg-white/[0.05] backdrop-blur-sm\",\n \"transition-colors duration-200 hover:bg-white/[0.10] cursor-pointer\",\n className\n )}\n >\n {/* Left icon - tinted with accent color */}\n <Icon\n className=\"w-4 h-4 shrink-0 transition-colors duration-200\"\n style={{ color: accentColor }}\n />\n\n {/* Message text */}\n <span className=\"text-sm text-white/80 font-normal flex-1 truncate\">\n {displayContent}\n </span>\n\n {/* Right arrow with hover animation */}\n <ArrowRight\n className={cn(\n \"w-4 h-4 shrink-0 text-white/40\",\n \"transition-all duration-200 ease-out\",\n \"group-hover:translate-x-1 group-hover:text-white/60\"\n )}\n />\n </div>\n );\n}\n\nexport default LiveStrip;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport interface UseVideoPreloadOptions {\n /** Video source URL to preload */\n videoSrc: string;\n /** Poster image source URL to preload */\n posterSrc: string;\n /** Whether preloading is enabled (default: true) */\n enabled?: boolean;\n}\n\nexport interface UseVideoPreloadResult {\n /** Whether the assets have been preloaded */\n isPreloaded: boolean;\n}\n\n/**\n * Custom hook to preload video and poster assets.\n * Adds <link rel=\"preload\"> hints to the document head for faster loading.\n * Cleans up preload hints on unmount.\n *\n * @example\n * ```tsx\n * const { isPreloaded } = useVideoPreload({\n * videoSrc: '/videos/hero.mp4',\n * posterSrc: '/images/hero-poster.jpg',\n * });\n * ```\n */\nexport function useVideoPreload({\n videoSrc,\n posterSrc,\n enabled = true,\n}: UseVideoPreloadOptions): UseVideoPreloadResult {\n const [isPreloaded, setIsPreloaded] = useState(false);\n\n useEffect(() => {\n if (!enabled || typeof document === \"undefined\") {\n return;\n }\n\n const links: HTMLLinkElement[] = [];\n\n // Preload poster image\n if (posterSrc) {\n const posterLink = document.createElement(\"link\");\n posterLink.rel = \"preload\";\n posterLink.as = \"image\";\n posterLink.href = posterSrc;\n document.head.appendChild(posterLink);\n links.push(posterLink);\n }\n\n // Preload video\n if (videoSrc) {\n const videoLink = document.createElement(\"link\");\n videoLink.rel = \"preload\";\n videoLink.as = \"video\";\n videoLink.href = videoSrc;\n // Set type hint for better browser optimization\n if (videoSrc.endsWith(\".webm\")) {\n videoLink.type = \"video/webm\";\n } else if (videoSrc.endsWith(\".mp4\")) {\n videoLink.type = \"video/mp4\";\n }\n document.head.appendChild(videoLink);\n links.push(videoLink);\n }\n\n setIsPreloaded(true);\n\n // Cleanup on unmount\n return () => {\n links.forEach((link) => {\n if (link.parentNode === document.head) {\n document.head.removeChild(link);\n }\n });\n };\n }, [videoSrc, posterSrc, enabled]);\n\n return { isPreloaded };\n}\n\nexport default useVideoPreload;\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport { getClusterConfigWithResolvedUrls } from \"./config.js\";\nimport type { ClusterHeroProps } from \"./types.js\";\nimport { VideoBackground } from \"./VideoBackground.js\";\nimport { GradientVeil } from \"./GradientVeil.js\";\nimport { ClusterAtmosphere } from \"./ClusterAtmosphere.js\";\nimport { StructuralElements } from \"./StructuralElements.js\";\nimport { BriefingPanel } from \"./BriefingPanel.js\";\nimport { SigilMonument } from \"./SigilMonument.js\";\nimport { LiveStrip } from \"./LiveStrip.js\";\nimport { ClusterRail } from \"./ClusterRail.js\";\nimport { useVideoPreload } from \"./useVideoPreload.js\";\n\n/**\n * ClusterHero is the main hero component for cluster landing pages.\n * Uses a \"Monument + Briefing\" layout with 12-column grid:\n *\n * Layout:\n * - cols 1-4: BriefingPanel (top-left)\n * - cols 5-8: Empty space (mood/atmosphere)\n * - cols 9-12: SigilMonument (mid-right)\n * - cols 5-12, bottom: LiveStrip\n * - Bottom-left fixed: ClusterRail\n *\n * Layers (z-index order):\n * - z-0: VideoBackground\n * - z-5: StructuralElements (brackets, vignette, grid)\n * - z-10: ClusterAtmosphere\n * - z-20: GradientVeil\n * - z-30: Grid content (BriefingPanel, SigilMonument, LiveStrip, ClusterRail)\n */\nexport function ClusterHero({ cluster, className }: ClusterHeroProps) {\n const config = getClusterConfigWithResolvedUrls(cluster);\n const fallbackBackground = `radial-gradient(900px 600px at 65% 25%, rgba(${config.accentColorRGB}, 0.22), rgba(0,0,0,0) 62%), radial-gradient(700px 520px at 25% 78%, rgba(${config.accentColorRGB}, 0.10), rgba(0,0,0,0) 58%), #000`;\n\n // Preload video and poster assets for faster loading\n useVideoPreload({\n videoSrc: config.videoSrc,\n posterSrc: config.videoPoster,\n });\n\n return (\n <section\n className={cn(\n \"relative min-h-screen h-full w-full overflow-hidden bg-black\",\n className\n )}\n style={{ \"--cluster-accent\": config.accentColor } as React.CSSProperties}\n >\n {/* Background layers */}\n <VideoBackground\n videoSrc={config.videoSrc}\n posterSrc={config.videoPoster}\n preload={true}\n fallbackBackground={fallbackBackground}\n className=\"z-0\"\n />\n <StructuralElements\n accentColor={config.accentColor}\n className=\"z-[5]\"\n />\n <ClusterAtmosphere\n config={config.atmosphere}\n accentColor={config.accentColor}\n className=\"z-10\"\n />\n <GradientVeil className=\"z-20\" />\n\n {/* Briefing Panel - top-left */}\n <div\n className=\"absolute z-30\"\n style={{ top: '80px', left: '48px', maxWidth: '380px' }}\n >\n <BriefingPanel\n description={config.description}\n capabilities={config.capabilities}\n fastPath={config.fastPath}\n status={config.status}\n accentColor={config.accentColor}\n />\n </div>\n\n {/* Sigil Monument - right center */}\n <div\n className=\"absolute z-30\"\n style={{ top: '50%', right: '80px', transform: 'translateY(-50%)' }}\n >\n <SigilMonument\n name={config.name}\n tagline={config.tagline}\n latinMotto={config.latinMotto}\n sigilSrc={config.sigilSrc}\n accentColor={config.accentColor}\n />\n </div>\n\n {/* Live Strip - bottom center */}\n <div\n className=\"absolute z-30\"\n style={{ bottom: '80px', left: '50%', transform: 'translateX(-50%)', maxWidth: '600px', width: '100%' }}\n >\n <LiveStrip\n moduleType={config.liveModule}\n content={config.liveContent}\n accentColor={config.accentColor}\n />\n </div>\n\n {/* Cluster Rail - bottom-left */}\n <div\n className=\"absolute z-40\"\n style={{ bottom: '32px', left: '48px', maxWidth: '280px' }}\n >\n <ClusterRail\n name={config.name}\n tagline={config.tagline}\n metrics={config.metrics}\n buttons={config.buttons}\n accentColor={config.accentColor}\n />\n </div>\n </section>\n );\n}\n\nexport default ClusterHero;\n","\"use client\";\n\nimport { useRef } from \"react\";\nimport { motion, useScroll, useTransform } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ClusterHero } from \"./ClusterHero.js\";\nimport { getClusterConfigWithResolvedUrls } from \"./config.js\";\nimport type { ClusterId, ClusterConfig } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ClusterHeroPageProps {\n clusterId: ClusterId;\n className?: string;\n}\n\ninterface SectionProps {\n clusterId: ClusterId;\n config: ClusterConfig;\n}\n\n// ============================================================================\n// Feature Cards Section\n// ============================================================================\n\nconst FEATURE_DATA: Record<ClusterId, Array<{ title: string; description: string; icon: string }>> = {\n alexandria: [\n { title: \"Knowledge Graph\", description: \"Interconnected data structures that compound understanding over time\", icon: \"book\" },\n { title: \"Semantic Search\", description: \"Query across documents with natural language understanding\", icon: \"search\" },\n { title: \"Version History\", description: \"Every edit preserved, every branch trackable\", icon: \"history\" },\n ],\n alpha: [\n { title: \"Genesis Protocol\", description: \"The foundational layer from which all clusters derive\", icon: \"origin\" },\n { title: \"Core APIs\", description: \"Stable interfaces that power the entire ecosystem\", icon: \"api\" },\n { title: \"Identity Layer\", description: \"Sovereign authentication across all surfaces\", icon: \"key\" },\n ],\n opus: [\n { title: \"Diagnostic Engines\", description: \"AI-powered analysis pipelines for medical imaging and patient data\", icon: \"scan\" },\n { title: \"Care Protocols\", description: \"Autonomous coordination of treatment workflows and provider networks\", icon: \"workflow\" },\n { title: \"Compliance Layer\", description: \"Built-in HIPAA, SOC2, and regulatory framework adherence\", icon: \"shield\" },\n ],\n baia: [\n { title: \"Neural Canvas\", description: \"Generative models that transform prompts into visual masterpieces\", icon: \"palette\" },\n { title: \"Sound Synthesis\", description: \"AI composition engines for music, ambience, and audio design\", icon: \"waveform\" },\n { title: \"Style Transfer\", description: \"Cross-modal translation between artistic mediums and formats\", icon: \"layers\" },\n ],\n kdot: [\n { title: \"Mesh Network\", description: \"Distributed connectivity that routes around failures\", icon: \"network\" },\n { title: \"Protocol Layer\", description: \"Universal translation between disparate systems\", icon: \"protocol\" },\n { title: \"Node Discovery\", description: \"Automatic peer detection and topology mapping\", icon: \"discovery\" },\n ],\n aegis: [\n { title: \"Threat Detection\", description: \"Real-time monitoring for anomalous patterns\", icon: \"shield\" },\n { title: \"Access Control\", description: \"Fine-grained permissions and authentication flows\", icon: \"lock\" },\n { title: \"Audit Trail\", description: \"Immutable logs of every action and decision\", icon: \"log\" },\n ],\n providence: [\n { title: \"Threat Intelligence\", description: \"Predictive analysis and proactive defense postures\", icon: \"radar\" },\n { title: \"Incident Response\", description: \"Automated containment and remediation workflows\", icon: \"alert\" },\n { title: \"Compliance Engine\", description: \"Continuous verification against security frameworks\", icon: \"certificate\" },\n ],\n};\n\nfunction FeatureCard({\n title,\n description,\n accentColor,\n index\n}: {\n title: string;\n description: string;\n accentColor: string;\n index: number;\n}) {\n return (\n <motion.article\n initial={{ opacity: 0, y: 40 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true, margin: \"-100px\" }}\n transition={{\n duration: 0.6,\n delay: index * 0.15,\n ease: [0.22, 1, 0.36, 1]\n }}\n className=\"group relative p-8 bg-zinc-900/80 backdrop-blur-sm border border-zinc-800 hover:border-zinc-700 transition-colors duration-300\"\n >\n <div\n className=\"absolute top-0 left-0 w-1 h-0 group-hover:h-full transition-all duration-500\"\n style={{ backgroundColor: accentColor }}\n />\n <h3 className=\"font-serif text-2xl text-white mb-3 tracking-wide\">\n {title}\n </h3>\n <p className=\"text-neutral-400 leading-relaxed\">\n {description}\n </p>\n </motion.article>\n );\n}\n\nexport function FeatureCardsSection({ clusterId, config }: SectionProps) {\n const features = FEATURE_DATA[clusterId];\n\n return (\n <section className=\"relative z-10 bg-zinc-950 py-32 px-16\">\n <div className=\"max-w-7xl mx-auto\">\n <motion.header\n initial={{ opacity: 0, y: 20 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true }}\n transition={{ duration: 0.6 }}\n className=\"mb-16\"\n >\n <span\n className=\"font-mono text-xs uppercase tracking-[0.2em]\"\n style={{ color: config.accentColor }}\n >\n Capabilities\n </span>\n <h2 className=\"font-serif text-5xl text-white mt-4 tracking-wide\">\n What defines {config.name}\n </h2>\n </motion.header>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {features.map((feature, index) => (\n <FeatureCard\n key={feature.title}\n title={feature.title}\n description={feature.description}\n accentColor={config.accentColor}\n index={index}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n// ============================================================================\n// Cluster Stats Section\n// ============================================================================\n\nconst STATS_DATA: Record<ClusterId, Array<{ value: string; label: string }>> = {\n alexandria: [\n { value: \"2.4M\", label: \"Documents Indexed\" },\n { value: \"847K\", label: \"Active Queries/Day\" },\n { value: \"99.97%\", label: \"Uptime\" },\n { value: \"12ms\", label: \"Avg Response\" },\n ],\n alpha: [\n { value: \"1.0\", label: \"Protocol Version\" },\n { value: \"∞\", label: \"Scalability\" },\n { value: \"100%\", label: \"Backwards Compatible\" },\n { value: \"0\", label: \"Breaking Changes\" },\n ],\n opus: [\n { value: \"2.4M\", label: \"Diagnostics Processed\" },\n { value: \"847\", label: \"Active Protocols\" },\n { value: \"99.97%\", label: \"Compliance Rate\" },\n { value: \"< 2s\", label: \"Analysis Latency\" },\n ],\n baia: [\n { value: \"4.2M\", label: \"Works Generated\" },\n { value: \"156K\", label: \"Active Artists\" },\n { value: \"847K\", label: \"Daily Renders\" },\n { value: \"12TB\", label: \"Media Produced\" },\n ],\n kdot: [\n { value: \"1.2M\", label: \"Connected Nodes\" },\n { value: \"47ms\", label: \"Avg Latency\" },\n { value: \"99.99%\", label: \"Uptime\" },\n { value: \"8.4PB\", label: \"Daily Throughput\" },\n ],\n aegis: [\n { value: \"0\", label: \"Breaches\" },\n { value: \"2.1B\", label: \"Threats Blocked\" },\n { value: \"99.97%\", label: \"Detection Rate\" },\n { value: \"< 1s\", label: \"Response Time\" },\n ],\n providence: [\n { value: \"24/7\", label: \"Monitoring\" },\n { value: \"847K\", label: \"Threats Analyzed\" },\n { value: \"99.99%\", label: \"Uptime\" },\n { value: \"< 50ms\", label: \"Alert Latency\" },\n ],\n};\n\nfunction StatBlock({\n value,\n label,\n accentColor,\n index\n}: {\n value: string;\n label: string;\n accentColor: string;\n index: number;\n}) {\n return (\n <motion.div\n initial={{ opacity: 0, scale: 0.9 }}\n whileInView={{ opacity: 1, scale: 1 }}\n viewport={{ once: true, margin: \"-50px\" }}\n transition={{\n duration: 0.5,\n delay: index * 0.1,\n ease: [0.22, 1, 0.36, 1]\n }}\n className=\"text-center p-8\"\n >\n <div\n className=\"font-mono text-5xl md:text-6xl font-light mb-3\"\n style={{ color: accentColor }}\n >\n {value}\n </div>\n <div className=\"text-neutral-400 uppercase tracking-[0.15em] text-sm\">\n {label}\n </div>\n </motion.div>\n );\n}\n\nexport function ClusterStatsSection({ clusterId, config }: SectionProps) {\n const stats = STATS_DATA[clusterId];\n\n return (\n <section className=\"relative z-10 bg-black py-32 px-16\">\n <div className=\"max-w-6xl mx-auto\">\n <motion.div\n initial={{ scaleX: 0 }}\n whileInView={{ scaleX: 1 }}\n viewport={{ once: true }}\n transition={{ duration: 1, ease: [0.22, 1, 0.36, 1] }}\n className=\"h-px mb-16 origin-left\"\n style={{ backgroundColor: config.accentColor }}\n />\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-8\">\n {stats.map((stat, index) => (\n <StatBlock\n key={stat.label}\n value={stat.value}\n label={stat.label}\n accentColor={config.accentColor}\n index={index}\n />\n ))}\n </div>\n\n <motion.div\n initial={{ scaleX: 0 }}\n whileInView={{ scaleX: 1 }}\n viewport={{ once: true }}\n transition={{ duration: 1, ease: [0.22, 1, 0.36, 1] }}\n className=\"h-px mt-16 origin-right\"\n style={{ backgroundColor: config.accentColor }}\n />\n </div>\n </section>\n );\n}\n\n// ============================================================================\n// CTA Section\n// ============================================================================\n\nconst CTA_DATA: Record<ClusterId, { headline: string; subtext: string; buttonLabel: string }> = {\n alexandria: {\n headline: \"Begin your research\",\n subtext: \"Join thousands of scholars building the world's knowledge commons\",\n buttonLabel: \"Enter Alexandria\",\n },\n alpha: {\n headline: \"Start from the source\",\n subtext: \"Everything begins here. Every journey starts with Alpha.\",\n buttonLabel: \"Initialize\",\n },\n opus: {\n headline: \"Healthcare, autonomous\",\n subtext: \"Diagnostic pipelines and care protocols that run themselves.\",\n buttonLabel: \"Enter Opus\",\n },\n baia: {\n headline: \"Art from the machine\",\n subtext: \"Generative works that blur the line between human and artificial creativity.\",\n buttonLabel: \"Open Studio\",\n },\n kdot: {\n headline: \"Join the mesh\",\n subtext: \"Connect to the network that never sleeps.\",\n buttonLabel: \"Connect Now\",\n },\n aegis: {\n headline: \"Secure your realm\",\n subtext: \"Protection that scales with your ambition.\",\n buttonLabel: \"Activate Shield\",\n },\n providence: {\n headline: \"Foresee. Prevent. Prevail.\",\n subtext: \"Security through foresight. Protection before the threat arrives.\",\n buttonLabel: \"Enter Providence\",\n },\n};\n\nexport function CTASection({ clusterId, config }: SectionProps) {\n const cta = CTA_DATA[clusterId];\n\n return (\n <section className=\"relative z-10 bg-zinc-950 py-48 px-16\">\n <motion.div\n initial={{ opacity: 0, y: 60 }}\n whileInView={{ opacity: 1, y: 0 }}\n viewport={{ once: true, margin: \"-100px\" }}\n transition={{ duration: 0.8, ease: [0.22, 1, 0.36, 1] }}\n className=\"max-w-4xl mx-auto text-center\"\n >\n <h2 className=\"font-serif text-6xl md:text-7xl text-white tracking-wide mb-8 leading-[1.1]\">\n {cta.headline}\n </h2>\n <p className=\"text-xl text-neutral-400 mb-12 max-w-2xl mx-auto leading-relaxed\">\n {cta.subtext}\n </p>\n <a\n href={`/clusters/${clusterId}`}\n className=\"inline-block px-12 py-5 text-lg font-medium tracking-wider uppercase text-neutral-900 transition-all duration-300 hover:brightness-110 hover:scale-105\"\n style={{ backgroundColor: config.accentColor }}\n >\n {cta.buttonLabel}\n </a>\n </motion.div>\n </section>\n );\n}\n\n// ============================================================================\n// Main ClusterHeroPage Component\n// ============================================================================\n\n/**\n * ClusterHeroPage composes a full landing page experience for a cluster.\n *\n * Structure:\n * - Sticky hero (100vh) with scroll-based parallax and dimming\n * - Feature cards section scrolling over the hero\n * - Stats section with animated counters\n * - CTA section with final call to action\n *\n * The hero uses sticky positioning so it remains as a background while\n * subsequent sections with solid backgrounds scroll over it.\n */\nexport function ClusterHeroPage({ clusterId, className }: ClusterHeroPageProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const config = getClusterConfigWithResolvedUrls(clusterId);\n\n const { scrollYProgress } = useScroll({\n target: containerRef,\n offset: [\"start start\", \"end start\"],\n });\n\n // Hero dims from opacity 1 to 0.3 as you scroll through first 20% of page\n const heroOpacity = useTransform(scrollYProgress, [0, 0.15], [1, 0.3]);\n\n // Content has subtle parallax - moves up slower than scroll\n const heroY = useTransform(scrollYProgress, [0, 0.3], [0, -100]);\n\n return (\n <main\n ref={containerRef}\n className={cn(\n \"relative scroll-smooth\",\n className\n )}\n >\n {/* Sticky hero container */}\n <motion.div\n className=\"sticky top-0 h-screen overflow-hidden\"\n style={{ opacity: heroOpacity }}\n >\n <motion.div style={{ y: heroY }} className=\"h-full\">\n <ClusterHero cluster={clusterId} className=\"h-full\" />\n </motion.div>\n </motion.div>\n\n {/* Scroll sections - these scroll over the sticky hero */}\n <div className=\"relative\">\n <FeatureCardsSection clusterId={clusterId} config={config} />\n <ClusterStatsSection clusterId={clusterId} config={config} />\n <CTASection clusterId={clusterId} config={config} />\n </div>\n </main>\n );\n}\n\nexport default ClusterHeroPage;\n"]}