@moltenagentic/human-elements 0.1.2 → 0.1.4

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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ButtonHTMLAttributes, ReactNode, HTMLAttributes } from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode, HTMLAttributes, RefObject } from 'react';
3
3
 
4
4
  type TechGridTone = 'molten' | 'dark';
5
5
  interface TechGridProps {
@@ -135,6 +135,27 @@ interface ProductShellProps {
135
135
  }
136
136
  declare function ProductShell({ children, className, }: ProductShellProps): react_jsx_runtime.JSX.Element;
137
137
 
138
+ declare function ThemeToggle(): react_jsx_runtime.JSX.Element;
139
+
140
+ interface LangButtonProps {
141
+ locale: string;
142
+ onClick?: () => void;
143
+ isOpen?: boolean;
144
+ }
145
+ declare function LangButton({ locale, onClick, isOpen }: LangButtonProps): react_jsx_runtime.JSX.Element;
146
+
147
+ interface HeroCardProps {
148
+ label: string;
149
+ title: string;
150
+ code?: string;
151
+ description?: string;
152
+ accentColor?: string;
153
+ actionText?: string;
154
+ onClick?: () => void;
155
+ children?: ReactNode;
156
+ }
157
+ declare function HeroCard({ label, title, code, description, accentColor, actionText, onClick, children, }: HeroCardProps): react_jsx_runtime.JSX.Element;
158
+
138
159
  type MoltenTheme = 'day' | 'night';
139
160
  interface MoltenThemeContextValue {
140
161
  theme: MoltenTheme;
@@ -147,4 +168,6 @@ declare function MoltenThemeProvider({ children, defaultTheme }: {
147
168
  }): react_jsx_runtime.JSX.Element;
148
169
  declare function useMoltenTheme(): MoltenThemeContextValue;
149
170
 
150
- export { EmberField, type EmberFieldProps, type EmberTone, GlassCard, type GlassCardProps, GridMesh, type GridMeshProps, HalfHero, type HalfHeroProps, LavaScene, type LavaSceneProps, MoltenButton, type MoltenButtonProps, MoltenText, type MoltenTextProps, type MoltenTheme, MoltenThemeProvider, type NavAction, type NavLink, type NavLinkGroup, Page, type PageProps, ProductNav, type ProductNavProps, ProductShell, type ProductShellProps, SphereGlow, type SphereGlowProps, TechGrid, type TechGridProps, type TechGridTone, Vignette, type VignetteProps, useMoltenTheme };
171
+ declare function usePulseLabels(ref: RefObject<HTMLElement | null>, selector?: string, delay?: number): void;
172
+
173
+ export { EmberField, type EmberFieldProps, type EmberTone, GlassCard, type GlassCardProps, GridMesh, type GridMeshProps, HalfHero, type HalfHeroProps, HeroCard, type HeroCardProps, LangButton, type LangButtonProps, LavaScene, type LavaSceneProps, MoltenButton, type MoltenButtonProps, MoltenText, type MoltenTextProps, type MoltenTheme, MoltenThemeProvider, type NavAction, type NavLink, type NavLinkGroup, Page, type PageProps, ProductNav, type ProductNavProps, ProductShell, type ProductShellProps, SphereGlow, type SphereGlowProps, TechGrid, type TechGridProps, type TechGridTone, ThemeToggle, Vignette, type VignetteProps, useMoltenTheme, usePulseLabels };
package/dist/index.js CHANGED
@@ -658,7 +658,7 @@ function NavIconButton({
658
658
  }
659
659
  var ExpandedMenu = forwardRef(
660
660
  ({ menuGroups, xUrl, communityLabel, menuFooter, onClose }, ref) => {
661
- const colCount = menuGroups.length + 1;
661
+ const colCount = menuGroups.length;
662
662
  return /* @__PURE__ */ jsx11(
663
663
  "div",
664
664
  {
@@ -666,44 +666,44 @@ var ExpandedMenu = forwardRef(
666
666
  className: "fixed top-0 left-0 right-0 backdrop-blur-xl",
667
667
  style: { transform: "translateY(-100%)", visibility: "hidden", zIndex: 40, background: "rgba(0, 0, 0, 0.95)" },
668
668
  children: /* @__PURE__ */ jsxs4("div", { className: "menu-content p-8 pt-20 max-w-2xl mx-auto", children: [
669
- /* @__PURE__ */ jsxs4(
669
+ /* @__PURE__ */ jsx11(
670
670
  "div",
671
671
  {
672
672
  className: "grid gap-8",
673
673
  style: { gridTemplateColumns: `repeat(${colCount}, 1fr)` },
674
- children: [
675
- menuGroups.map((group) => /* @__PURE__ */ jsxs4("div", { className: "space-y-1", children: [
676
- /* @__PURE__ */ jsx11("span", { className: "text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4", children: group.title }),
677
- group.links.map((link) => /* @__PURE__ */ jsx11(
678
- "a",
679
- {
680
- href: link.href,
681
- target: link.external ? "_blank" : void 0,
682
- rel: link.external ? "noopener noreferrer" : void 0,
683
- onClick: onClose,
684
- className: "block text-2xl font-light text-white hover:text-zinc-300 transition-colors py-1",
685
- children: link.label
686
- },
687
- link.href
688
- ))
689
- ] }, group.title)),
690
- /* @__PURE__ */ jsxs4("div", { className: "space-y-1", children: [
691
- /* @__PURE__ */ jsx11("span", { className: "text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4", children: communityLabel }),
692
- /* @__PURE__ */ jsx11("div", { className: "flex items-center gap-2 pt-1", children: /* @__PURE__ */ jsx11(
693
- "a",
694
- {
695
- href: xUrl,
696
- target: "_blank",
697
- rel: "noopener noreferrer",
698
- className: "w-10 h-10 rounded-full bg-zinc-800 flex items-center justify-center text-white hover:bg-zinc-700 transition-colors",
699
- children: /* @__PURE__ */ jsx11("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx11("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" }) })
700
- }
701
- ) })
702
- ] })
703
- ]
674
+ children: menuGroups.map((group) => /* @__PURE__ */ jsxs4("div", { className: "space-y-1", children: [
675
+ /* @__PURE__ */ jsx11("span", { className: "text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4", children: group.title }),
676
+ group.links.map((link) => /* @__PURE__ */ jsx11(
677
+ "a",
678
+ {
679
+ href: link.href,
680
+ target: link.external ? "_blank" : void 0,
681
+ rel: link.external ? "noopener noreferrer" : void 0,
682
+ onClick: onClose,
683
+ className: "block text-2xl font-light text-white hover:text-zinc-300 transition-colors py-1",
684
+ children: link.label
685
+ },
686
+ link.href
687
+ ))
688
+ ] }, group.title))
704
689
  }
705
690
  ),
706
- menuFooter && /* @__PURE__ */ jsx11("div", { className: "mt-6 pt-6", style: { borderTop: "1px solid rgba(255,255,255,0.06)" }, children: menuFooter })
691
+ /* @__PURE__ */ jsxs4("div", { className: "mt-6 pt-6 flex items-center justify-between", style: { borderTop: "1px solid rgba(255,255,255,0.06)" }, children: [
692
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3", children: [
693
+ /* @__PURE__ */ jsx11("span", { className: "text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium", children: communityLabel }),
694
+ /* @__PURE__ */ jsx11(
695
+ "a",
696
+ {
697
+ href: xUrl,
698
+ target: "_blank",
699
+ rel: "noopener noreferrer",
700
+ className: "w-8 h-8 rounded-full bg-zinc-800 flex items-center justify-center text-white hover:bg-zinc-700 transition-colors",
701
+ children: /* @__PURE__ */ jsx11("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx11("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" }) })
702
+ }
703
+ )
704
+ ] }),
705
+ menuFooter && /* @__PURE__ */ jsx11("div", { children: menuFooter })
706
+ ] })
707
707
  ] })
708
708
  }
709
709
  );
@@ -985,11 +985,127 @@ function ProductShell({
985
985
  }) {
986
986
  return /* @__PURE__ */ jsx14("main", { className: `relative min-h-screen bg-black text-white ${className}`, children });
987
987
  }
988
+
989
+ // src/components/ThemeToggle.tsx
990
+ import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
991
+ function ThemeToggle() {
992
+ const { theme, toggle } = useMoltenTheme();
993
+ const isNight = theme === "night";
994
+ const color = isNight ? "#71717a" : "#fff";
995
+ return /* @__PURE__ */ jsx15(
996
+ "button",
997
+ {
998
+ onClick: toggle,
999
+ className: "relative flex items-center justify-center rounded-xl cursor-pointer rainbow-border-button text-white",
1000
+ style: {
1001
+ width: 40,
1002
+ height: 44,
1003
+ background: "rgba(24, 24, 27, 0.9)",
1004
+ backdropFilter: "blur(24px)"
1005
+ },
1006
+ children: isNight ? /* @__PURE__ */ jsx15("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "1.5", strokeLinecap: "round", children: /* @__PURE__ */ jsx15("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }) : /* @__PURE__ */ jsxs6("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "1.5", strokeLinecap: "round", children: [
1007
+ /* @__PURE__ */ jsx15("circle", { cx: "12", cy: "12", r: "4" }),
1008
+ /* @__PURE__ */ jsx15("path", { d: "M12 2v3M12 19v3M4.22 4.22l2.12 2.12M17.66 17.66l2.12 2.12M2 12h3M19 12h3M4.22 19.78l2.12-2.12M17.66 6.34l2.12-2.12" })
1009
+ ] })
1010
+ }
1011
+ );
1012
+ }
1013
+
1014
+ // src/components/LangButton.tsx
1015
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1016
+ function LangButton({ locale, onClick, isOpen = false }) {
1017
+ const { theme } = useMoltenTheme();
1018
+ const color = theme === "night" ? "#71717a" : "#fff";
1019
+ return /* @__PURE__ */ jsx16(
1020
+ "button",
1021
+ {
1022
+ onClick,
1023
+ className: "relative flex items-center justify-center rounded-xl cursor-pointer rainbow-border-button text-white",
1024
+ style: {
1025
+ width: 40,
1026
+ height: 44,
1027
+ background: "rgba(24, 24, 27, 0.9)",
1028
+ backdropFilter: "blur(24px)"
1029
+ },
1030
+ children: isOpen ? /* @__PURE__ */ jsxs7("div", { style: { display: "flex", flexDirection: "column", gap: "5px" }, children: [
1031
+ /* @__PURE__ */ jsx16("span", { style: { display: "block", width: "16px", height: "2px", background: color, transformOrigin: "center", transform: "translateY(7px) rotate(45deg)" } }),
1032
+ /* @__PURE__ */ jsx16("span", { style: { display: "block", width: "16px", height: "2px", background: color, opacity: 0 } }),
1033
+ /* @__PURE__ */ jsx16("span", { style: { display: "block", width: "16px", height: "2px", background: color, transformOrigin: "center", transform: "translateY(-7px) rotate(-45deg)" } })
1034
+ ] }) : /* @__PURE__ */ jsx16("span", { style: { fontSize: "13px", fontWeight: 700, color, letterSpacing: "0.05em" }, children: locale === "zh" ? "CN" : locale.toUpperCase() })
1035
+ }
1036
+ );
1037
+ }
1038
+
1039
+ // src/components/HeroCard.tsx
1040
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
1041
+ function HeroCard({
1042
+ label,
1043
+ title,
1044
+ code,
1045
+ description,
1046
+ accentColor = "#00e5ff",
1047
+ actionText,
1048
+ onClick,
1049
+ children
1050
+ }) {
1051
+ return /* @__PURE__ */ jsxs8(
1052
+ "div",
1053
+ {
1054
+ onClick,
1055
+ className: `group relative p-5 sm:p-6 rounded-2xl glass-card molten-wave-card corner-frame w-full max-w-lg ${onClick ? "cursor-pointer" : ""}`,
1056
+ children: [
1057
+ /* @__PURE__ */ jsxs8("span", { className: "portal-label font-mono text-[11px] tracking-widest", style: { color: accentColor }, children: [
1058
+ "// ",
1059
+ label
1060
+ ] }),
1061
+ /* @__PURE__ */ jsx17("h2", { className: "text-xl sm:text-2xl font-bold mt-2 text-white molten-wave-text", children: title }),
1062
+ code && /* @__PURE__ */ jsx17(
1063
+ "div",
1064
+ {
1065
+ className: "mt-4 rounded-lg p-3",
1066
+ style: {
1067
+ background: "rgba(0, 0, 0, 0.4)",
1068
+ border: "1px solid rgba(255, 255, 255, 0.06)"
1069
+ },
1070
+ children: /* @__PURE__ */ jsx17("code", { className: "text-xs sm:text-sm font-mono break-all", style: { color: accentColor }, children: code })
1071
+ }
1072
+ ),
1073
+ description && /* @__PURE__ */ jsx17("p", { className: "text-xs text-zinc-500 mt-3 font-light leading-relaxed", children: description }),
1074
+ children,
1075
+ actionText && /* @__PURE__ */ jsxs8("div", { className: "mt-4 flex items-center justify-between", children: [
1076
+ /* @__PURE__ */ jsx17("span", { className: "text-xs text-zinc-500 molten-wave-text transition-all duration-300", children: actionText }),
1077
+ /* @__PURE__ */ jsx17("span", { className: "text-zinc-600 group-hover:translate-x-1.5 transition-all duration-300 text-lg molten-wave-text", children: "\u2192" })
1078
+ ] })
1079
+ ]
1080
+ }
1081
+ );
1082
+ }
1083
+
1084
+ // src/hooks/usePulseLabels.ts
1085
+ import { useEffect as useEffect7 } from "react";
1086
+ import gsap2 from "gsap";
1087
+ function usePulseLabels(ref, selector = ".portal-label", delay = 2.2) {
1088
+ useEffect7(() => {
1089
+ const el = ref.current;
1090
+ if (!el) return;
1091
+ const labels = el.querySelectorAll(selector);
1092
+ if (!labels.length) return;
1093
+ const pulse = gsap2.timeline({ repeat: -1, delay });
1094
+ labels.forEach((label) => {
1095
+ pulse.to(label, { opacity: 0.15, duration: 0.8, ease: "power1.inOut" }).to(label, { opacity: 1, duration: 0.8, ease: "power1.inOut" });
1096
+ });
1097
+ return () => {
1098
+ pulse.kill();
1099
+ };
1100
+ }, [ref, selector, delay]);
1101
+ }
988
1102
  export {
989
1103
  EmberField,
990
1104
  GlassCard,
991
1105
  GridMesh,
992
1106
  HalfHero,
1107
+ HeroCard,
1108
+ LangButton,
993
1109
  LavaScene,
994
1110
  MoltenButton,
995
1111
  MoltenText,
@@ -999,7 +1115,9 @@ export {
999
1115
  ProductShell,
1000
1116
  SphereGlow,
1001
1117
  TechGrid,
1118
+ ThemeToggle,
1002
1119
  Vignette,
1003
- useMoltenTheme
1120
+ useMoltenTheme,
1121
+ usePulseLabels
1004
1122
  };
1005
1123
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/TechGrid.tsx","../src/components/GridMesh.tsx","../src/components/LavaScene.tsx","../src/components/EmberField.tsx","../src/components/Vignette.tsx","../src/components/SphereGlow.tsx","../src/components/MoltenButton.tsx","../src/components/GlassCard.tsx","../src/components/MoltenText.tsx","../src/components/Page.tsx","../src/components/ProductNav.tsx","../src/theme/MoltenThemeProvider.tsx","../src/components/HalfHero.tsx","../src/components/ProductShell.tsx"],"sourcesContent":["'use client';\n\nconst GRID = 160;\nconst HALF = GRID / 2;\nconst ARM = 10;\n\nexport type TechGridTone = 'molten' | 'dark';\n\nconst TONES = {\n molten: {\n line: 'rgba(200,70,35,0.14)',\n cross: 'rgba(200,70,35,0.45)',\n dot: 'rgba(200,70,35,0.25)',\n },\n dark: {\n line: 'rgba(0,0,0,0.18)',\n cross: 'rgba(0,0,0,0.4)',\n dot: 'rgba(0,0,0,0.22)',\n },\n} as const;\n\nexport interface TechGridProps {\n className?: string;\n zIndex?: number;\n tone?: TechGridTone;\n /** Unique id suffix — required when rendering multiple grids on the same page */\n id?: string;\n style?: React.CSSProperties;\n}\n\nexport function TechGrid({\n className = '',\n zIndex = 3,\n tone = 'molten',\n id = '',\n style,\n}: TechGridProps) {\n const { line, cross, dot } = TONES[tone];\n const gridId = `tech-grid${id ? `-${id}` : ''}`;\n const crossId = `crosshairs${id ? `-${id}` : ''}`;\n\n return (\n <svg\n className={`pointer-events-none ${className}`}\n style={{ zIndex, ...style }}\n >\n <defs>\n <pattern\n id={gridId}\n width={GRID}\n height={GRID}\n patternUnits=\"userSpaceOnUse\"\n >\n <line x1=\"0\" y1=\"0\" x2={GRID} y2=\"0\" stroke={line} strokeWidth=\"0.5\" />\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2={GRID} stroke={line} strokeWidth=\"0.5\" />\n <circle cx={HALF} cy={0} r=\"1.5\" fill={dot} />\n <circle cx={0} cy={HALF} r=\"1.5\" fill={dot} />\n <circle cx={HALF} cy={HALF} r=\"1.5\" fill={dot} />\n </pattern>\n\n <pattern\n id={crossId}\n width={GRID}\n height={GRID}\n patternUnits=\"userSpaceOnUse\"\n patternTransform={`translate(${-HALF},${-HALF})`}\n >\n <line\n x1={HALF - ARM} y1={HALF} x2={HALF + ARM} y2={HALF}\n stroke={cross} strokeWidth=\"1\"\n />\n <line\n x1={HALF} y1={HALF - ARM} x2={HALF} y2={HALF + ARM}\n stroke={cross} strokeWidth=\"1\"\n />\n </pattern>\n </defs>\n\n <rect width=\"100%\" height=\"100%\" fill={`url(#${gridId})`} />\n <rect width=\"100%\" height=\"100%\" fill={`url(#${crossId})`} />\n </svg>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nexport interface GridMeshProps {\n className?: string;\n opacity?: number;\n gridSize?: number;\n strokeColor?: string;\n}\n\nexport function GridMesh({\n className = '',\n opacity = 0.6,\n gridSize = 50,\n strokeColor = 'rgba(255, 255, 255, 0.03)',\n}: GridMeshProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n let animationFrameId: number;\n let time = 0;\n\n const resize = () => {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n };\n\n resize();\n window.addEventListener('resize', resize);\n\n const draw = () => {\n if (!ctx || !canvas) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const cols = Math.ceil(canvas.width / gridSize) + 1;\n const rows = Math.ceil(canvas.height / gridSize) + 1;\n\n time += 0.005;\n\n ctx.strokeStyle = strokeColor;\n ctx.lineWidth = 1;\n\n for (let i = 0; i < rows; i++) {\n ctx.beginPath();\n for (let j = 0; j < cols; j++) {\n const x = j * gridSize;\n const y =\n i * gridSize +\n Math.sin(time + j * 0.1) * 10 +\n Math.cos(time * 0.5 + i * 0.1) * 8;\n\n if (j === 0) ctx.moveTo(x, y);\n else ctx.lineTo(x, y);\n }\n ctx.stroke();\n }\n\n for (let j = 0; j < cols; j++) {\n ctx.beginPath();\n for (let i = 0; i < rows; i++) {\n const x =\n j * gridSize +\n Math.sin(time + i * 0.1) * 10 +\n Math.cos(time * 0.7 + j * 0.1) * 8;\n const y = i * gridSize;\n\n if (i === 0) ctx.moveTo(x, y);\n else ctx.lineTo(x, y);\n }\n ctx.stroke();\n }\n\n animationFrameId = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n window.removeEventListener('resize', resize);\n cancelAnimationFrame(animationFrameId);\n };\n }, [gridSize, strokeColor]);\n\n return (\n <canvas\n ref={canvasRef}\n className={`absolute inset-0 w-full h-full pointer-events-none ${className}`}\n style={{ opacity }}\n />\n );\n}\n","'use client';\n\nimport { useRef, useMemo, useEffect } from 'react';\nimport { Canvas, useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nconst noiseGLSL = /* glsl */ `\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 permute(vec4 x){return mod289(((x*34.0)+10.0)*x);}\nvec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}\n\nfloat snoise(vec3 v){\n const vec2 C=vec2(1.0/6.0,1.0/3.0);\n const vec4 D=vec4(0.0,0.5,1.0,2.0);\n vec3 i=floor(v+dot(v,C.yyy));\n vec3 x0=v-i+dot(i,C.xxx);\n vec3 g=step(x0.yzx,x0.xyz);\n vec3 l=1.0-g;\n vec3 i1=min(g.xyz,l.zxy);\n vec3 i2=max(g.xyz,l.zxy);\n vec3 x1=x0-i1+C.xxx;\n vec3 x2=x0-i2+C.yyy;\n vec3 x3=x0-D.yyy;\n i=mod289(i);\n vec4 p=permute(permute(permute(\n i.z+vec4(0.0,i1.z,i2.z,1.0))\n +i.y+vec4(0.0,i1.y,i2.y,1.0))\n +i.x+vec4(0.0,i1.x,i2.x,1.0));\n float n_=0.142857142857;\n vec3 ns=n_*D.wyz-D.xzx;\n vec4 j=p-49.0*floor(p*ns.z*ns.z);\n vec4 x_=floor(j*ns.z);\n vec4 y_=floor(j-7.0*x_);\n vec4 x=x_*ns.x+ns.yyyy;\n vec4 y=y_*ns.x+ns.yyyy;\n vec4 h=1.0-abs(x)-abs(y);\n vec4 b0=vec4(x.xy,y.xy);\n vec4 b1=vec4(x.zw,y.zw);\n vec4 s0=floor(b0)*2.0+1.0;\n vec4 s1=floor(b1)*2.0+1.0;\n vec4 sh=-step(h,vec4(0.0));\n vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;\n vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;\n vec3 p0=vec3(a0.xy,h.x);\n vec3 p1=vec3(a0.zw,h.y);\n vec3 p2=vec3(a1.xy,h.z);\n vec3 p3=vec3(a1.zw,h.w);\n vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));\n p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;\n vec4 m=max(0.5-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);\n m=m*m;\n return 105.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));\n}\n`;\n\nconst vertexShader = /* glsl */ `\nuniform float uTime;\n${noiseGLSL}\nvarying float vDisplacement;\nvarying vec3 vNormal;\nvarying vec3 vWorldPosition;\n\nvoid main() {\n float n1 = snoise(position * 1.5 + uTime * 0.15) * 0.4;\n float n2 = snoise(position * 3.0 + uTime * 0.3) * 0.2;\n float n3 = snoise(position * 6.0 - uTime * 0.2) * 0.1;\n float displacement = n1 + n2 + n3;\n\n vec3 newPos = position + normal * displacement;\n vDisplacement = displacement;\n vNormal = normalize(normalMatrix * normal);\n vWorldPosition = (modelMatrix * vec4(newPos, 1.0)).xyz;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPos, 1.0);\n}\n`;\n\nconst fragmentShader = /* glsl */ `\nuniform float uTime;\nvarying float vDisplacement;\nvarying vec3 vNormal;\nvarying vec3 vWorldPosition;\n\nvoid main() {\n float d = smoothstep(-0.5, 0.7, vDisplacement);\n\n vec3 c0 = vec3(0.337, 0.055, 0.141);\n vec3 c1 = vec3(0.671, 0.106, 0.114);\n vec3 c2 = vec3(0.855, 0.220, 0.086);\n vec3 c3 = vec3(0.969, 0.500, 0.055);\n vec3 c4 = vec3(0.984, 0.624, 0.051);\n vec3 c5 = vec3(1.0, 0.95, 0.85);\n\n vec3 color;\n if (d < 0.15) color = mix(c0, c1, d / 0.15);\n else if (d < 0.35) color = mix(c1, c2, (d - 0.15) / 0.2);\n else if (d < 0.55) color = mix(c2, c3, (d - 0.35) / 0.2);\n else if (d < 0.75) color = mix(c3, c4, (d - 0.55) / 0.2);\n else color = mix(c4, c5, (d - 0.75) / 0.25);\n\n vec3 viewDir = normalize(cameraPosition - vWorldPosition);\n float fresnel = pow(1.0 - max(dot(vNormal, viewDir), 0.0), 3.0);\n color += c4 * fresnel * 0.5;\n\n color *= 1.0 + 0.06 * sin(uTime * 0.7);\n\n gl_FragColor = vec4(color, 1.0);\n}\n`;\n\nfunction LavaSphere({ yOffset = 0.6 }: { yOffset?: number }) {\n const meshRef = useRef<THREE.Mesh>(null);\n const matRef = useRef<THREE.ShaderMaterial>(null);\n const mouse = useRef({ x: 0, y: 0 });\n\n useEffect(() => {\n const onMove = (e: MouseEvent) => {\n mouse.current.x = (e.clientX / window.innerWidth - 0.5) * 2;\n mouse.current.y = -(e.clientY / window.innerHeight - 0.5) * 2;\n };\n window.addEventListener('mousemove', onMove);\n return () => window.removeEventListener('mousemove', onMove);\n }, []);\n\n const uniforms = useMemo(() => ({ uTime: { value: 0 } }), []);\n\n useFrame(({ clock }) => {\n if (matRef.current) matRef.current.uniforms.uTime.value = clock.elapsedTime;\n if (meshRef.current) {\n const m = meshRef.current;\n m.rotation.x = THREE.MathUtils.lerp(m.rotation.x, mouse.current.y * 0.15, 0.02);\n m.rotation.y = THREE.MathUtils.lerp(\n m.rotation.y,\n mouse.current.x * 0.25 + clock.elapsedTime * 0.06,\n 0.02,\n );\n }\n });\n\n return (\n <mesh ref={meshRef} position={[0, yOffset, 0]}>\n <icosahedronGeometry args={[1.5, 64]} />\n <shaderMaterial\n ref={matRef}\n vertexShader={vertexShader}\n fragmentShader={fragmentShader}\n uniforms={uniforms}\n />\n </mesh>\n );\n}\n\nfunction EmberParticles() {\n const ref = useRef<THREE.Points>(null);\n const count = 180;\n\n const { positions, velocities } = useMemo(() => {\n const pos = new Float32Array(count * 3);\n const vel = new Float32Array(count * 3);\n for (let i = 0; i < count; i++) {\n const i3 = i * 3;\n pos[i3] = (Math.random() - 0.5) * 10;\n pos[i3 + 1] = Math.random() * 8 - 4;\n pos[i3 + 2] = (Math.random() - 0.5) * 6;\n vel[i3] = (Math.random() - 0.5) * 0.003;\n vel[i3 + 1] = Math.random() * 0.006 + 0.002;\n vel[i3 + 2] = (Math.random() - 0.5) * 0.002;\n }\n return { positions: pos, velocities: vel };\n }, []);\n\n const sizes = useMemo(() => {\n const s = new Float32Array(count);\n for (let i = 0; i < count; i++) s[i] = Math.random() * 0.04 + 0.01;\n return s;\n }, []);\n\n useFrame(() => {\n if (!ref.current) return;\n const arr = ref.current.geometry.attributes.position.array as Float32Array;\n for (let i = 0; i < count; i++) {\n const i3 = i * 3;\n arr[i3] += velocities[i3];\n arr[i3 + 1] += velocities[i3 + 1];\n arr[i3 + 2] += velocities[i3 + 2];\n if (arr[i3 + 1] > 5) {\n arr[i3] = (Math.random() - 0.5) * 10;\n arr[i3 + 1] = -5;\n arr[i3 + 2] = (Math.random() - 0.5) * 6;\n }\n }\n ref.current.geometry.attributes.position.needsUpdate = true;\n });\n\n return (\n <points ref={ref}>\n <bufferGeometry>\n <bufferAttribute attach=\"attributes-position\" args={[positions, 3]} />\n <bufferAttribute attach=\"attributes-size\" args={[sizes, 1]} />\n </bufferGeometry>\n <pointsMaterial size={0.035} color=\"#fb9f0d\" transparent opacity={0.5} sizeAttenuation />\n </points>\n );\n}\n\nexport interface LavaSceneProps {\n centered?: boolean;\n}\n\nexport function LavaScene({ centered = false }: LavaSceneProps) {\n const yOffset = centered ? 0 : 0.6;\n\n return (\n <Canvas\n camera={{ position: [0, 0, 5], fov: 45 }}\n gl={{ antialias: true, alpha: true }}\n style={{ background: 'transparent' }}\n >\n <ambientLight intensity={0.08} />\n <pointLight position={[5, 5, 5]} intensity={0.5} color=\"#fb9f0d\" />\n <pointLight position={[-5, -3, 3]} intensity={0.3} color=\"#ab1b1d\" />\n <LavaSphere yOffset={yOffset} />\n <EmberParticles />\n </Canvas>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nexport type EmberTone = 'molten' | 'dark';\n\nexport interface EmberFieldProps {\n tone?: EmberTone;\n count?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\ninterface Particle {\n x: number;\n y: number;\n vx: number;\n vy: number;\n size: number;\n opacity: number;\n drift: number;\n}\n\nconst COLORS = {\n molten: [\n [251, 159, 13],\n [247, 128, 14],\n [237, 99, 20],\n [218, 56, 22],\n ],\n dark: [\n [0, 0, 0],\n [20, 8, 2],\n [40, 16, 4],\n [10, 4, 1],\n ],\n} as const;\n\nfunction randomColor(tone: EmberTone): [number, number, number] {\n const palette = COLORS[tone];\n return [...palette[Math.floor(Math.random() * palette.length)]] as [number, number, number];\n}\n\nfunction createParticle(w: number, h: number, tone: EmberTone, fromBottom = false): Particle {\n return {\n x: Math.random() * w,\n y: fromBottom ? h + Math.random() * 40 : Math.random() * h,\n vx: (Math.random() - 0.5) * 0.3,\n vy: -(Math.random() * 0.6 + 0.2),\n size: Math.random() * 2.5 + 0.8,\n opacity: Math.random() * 0.5 + 0.2,\n drift: (Math.random() - 0.5) * 0.002,\n };\n}\n\nexport function EmberField({\n tone = 'molten',\n count = 60,\n className = '',\n style,\n}: EmberFieldProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n let animId: number;\n let particles: (Particle & { color: [number, number, number] })[] = [];\n\n const resize = () => {\n canvas.width = canvas.offsetWidth * window.devicePixelRatio;\n canvas.height = canvas.offsetHeight * window.devicePixelRatio;\n ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n };\n\n const init = () => {\n resize();\n const w = canvas.offsetWidth;\n const h = canvas.offsetHeight;\n particles = Array.from({ length: count }, () => ({\n ...createParticle(w, h, tone),\n color: randomColor(tone),\n }));\n };\n\n init();\n window.addEventListener('resize', init);\n\n const draw = () => {\n const w = canvas.offsetWidth;\n const h = canvas.offsetHeight;\n ctx.clearRect(0, 0, w, h);\n\n for (const p of particles) {\n p.x += p.vx;\n p.y += p.vy;\n p.vx += p.drift;\n\n if (p.y < -10 || p.x < -10 || p.x > w + 10) {\n Object.assign(p, createParticle(w, h, tone, true));\n p.color = randomColor(tone);\n }\n\n const [r, g, b] = p.color;\n ctx.beginPath();\n ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\n ctx.fillStyle = `rgba(${r},${g},${b},${p.opacity})`;\n ctx.fill();\n }\n\n animId = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n window.removeEventListener('resize', init);\n cancelAnimationFrame(animId);\n };\n }, [tone, count]);\n\n return (\n <canvas\n ref={canvasRef}\n className={`absolute inset-0 w-full h-full pointer-events-none ${className}`}\n style={style}\n />\n );\n}\n","'use client';\n\nexport interface VignetteProps {\n className?: string;\n zIndex?: number;\n}\n\nexport function Vignette({ className = '', zIndex = 2 }: VignetteProps) {\n return (\n <div\n className={`fixed inset-0 pointer-events-none vignette ${className}`}\n style={{ zIndex }}\n />\n );\n}\n","'use client';\n\nexport interface SphereGlowProps {\n className?: string;\n zIndex?: number;\n}\n\nexport function SphereGlow({ className = '', zIndex = 1 }: SphereGlowProps) {\n return (\n <div\n className={`fixed inset-0 pointer-events-none ${className}`}\n style={{ zIndex }}\n >\n <div className=\"sphere-glow\" />\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode, ButtonHTMLAttributes } from 'react';\n\nexport interface MoltenButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n href?: string;\n variant?: 'molten' | 'outline' | 'ghost';\n size?: 'xs' | 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n}\n\nconst sizeClasses = {\n xs: 'px-2.5 py-1 text-[10px]',\n sm: 'px-3 py-1.5 text-xs',\n md: 'px-4 py-2 text-sm',\n lg: 'px-8 py-4 text-sm',\n} as const;\n\nconst variantClasses = {\n molten: 'bg-black text-white hover:bg-zinc-900 rainbow-border-button',\n outline: 'bg-transparent border border-zinc-700 text-white hover:bg-zinc-800',\n ghost: 'bg-transparent text-white hover:bg-zinc-800/50',\n} as const;\n\nexport function MoltenButton({\n children,\n href,\n variant = 'molten',\n size = 'sm',\n fullWidth = false,\n disabled = false,\n className = '',\n ...props\n}: MoltenButtonProps) {\n const classes = [\n 'relative inline-flex items-center justify-center gap-1.5',\n 'rounded-lg font-medium transition-all cursor-pointer',\n sizeClasses[size],\n fullWidth ? 'w-full' : '',\n disabled\n ? 'bg-zinc-800 text-zinc-500 cursor-not-allowed'\n : variantClasses[variant],\n className,\n ].filter(Boolean).join(' ');\n\n if (href && !disabled) {\n return (\n <a href={href} className={classes}>\n {children}\n </a>\n );\n }\n\n return (\n <button disabled={disabled} className={classes} {...props}>\n {children}\n </button>\n );\n}\n","'use client';\n\nimport type { ReactNode, HTMLAttributes } from 'react';\n\nexport interface GlassCardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n variant?: 'default' | 'subtle' | 'minimal';\n glow?: boolean;\n wave?: boolean;\n cornerFrame?: boolean;\n}\n\nconst variantClasses = {\n default: 'glass-card',\n subtle: 'glass-card-subtle',\n minimal: 'glass-card-minimal',\n} as const;\n\nexport function GlassCard({\n children,\n variant = 'default',\n glow = false,\n wave = false,\n cornerFrame = false,\n className = '',\n ...props\n}: GlassCardProps) {\n const classes = [\n variantClasses[variant],\n 'rounded-2xl',\n glow ? 'molten-card-glow' : '',\n wave ? 'molten-wave-card' : '',\n cornerFrame ? 'corner-frame' : '',\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode, HTMLAttributes } from 'react';\n\nexport interface MoltenTextProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n as?: 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'p';\n animated?: boolean;\n}\n\nexport function MoltenText({\n children,\n as: Tag = 'span',\n animated = false,\n className = '',\n ...props\n}: MoltenTextProps) {\n const classes = [\n animated ? 'rainbow-text-animated' : 'molten-text',\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\nimport { GridMesh } from './GridMesh';\n\nexport interface PageProps {\n children: ReactNode;\n ptMobile?: number;\n ptDesktop?: number;\n pb?: number;\n px?: number;\n maxWidth?: string;\n centered?: boolean;\n showGrid?: boolean;\n nav?: ReactNode;\n overlay?: ReactNode;\n}\n\nexport function Page({\n children,\n ptMobile = 20,\n ptDesktop = 24,\n pb = 6,\n px = 6,\n maxWidth = 'max-w-6xl',\n centered = true,\n showGrid = true,\n nav,\n overlay,\n}: PageProps) {\n const [isDesktop, setIsDesktop] = useState(false);\n\n useEffect(() => {\n const handleResize = () => setIsDesktop(window.innerWidth >= 1024);\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toRem = (units: number) => `${(units * 4) / 16}rem`;\n const paddingTop = isDesktop ? toRem(ptDesktop) : toRem(ptMobile);\n\n return (\n <main className=\"relative min-h-screen bg-black overflow-hidden\">\n {showGrid && (\n <div className=\"fixed inset-0 z-0\">\n <GridMesh />\n </div>\n )}\n\n <div className=\"relative z-10\">\n {nav}\n\n <div\n style={{\n paddingTop,\n paddingBottom: toRem(pb),\n paddingLeft: toRem(px),\n paddingRight: toRem(px),\n }}\n className={`min-h-screen ${centered ? 'flex flex-col justify-center' : ''}`}\n >\n <div className={`${maxWidth} mx-auto w-full`}>\n {children}\n </div>\n </div>\n </div>\n\n {overlay}\n\n <div className=\"fixed inset-0 pointer-events-none bg-gradient-radial from-transparent via-transparent to-black/40\" />\n </main>\n );\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback, forwardRef, type ReactNode } from 'react';\nimport gsap from 'gsap';\n\nexport interface NavLink {\n label: string;\n href: string;\n external?: boolean;\n}\n\nexport interface NavLinkGroup {\n title: string;\n links: NavLink[];\n}\n\nexport interface NavAction {\n icon: ReactNode;\n onClick?: () => void;\n href?: string;\n label?: string;\n}\n\nexport interface ProductNavProps {\n logo?: ReactNode;\n logoHref?: string;\n menuGroups?: NavLinkGroup[];\n leftExtra?: ReactNode;\n leftPanel?: ReactNode | ((onClose: () => void) => ReactNode);\n leftPanelOpen?: boolean;\n onLeftPanelChange?: (open: boolean) => void;\n rightAction?: NavAction;\n rightExtra?: ReactNode;\n xUrl?: string;\n communityLabel?: string;\n menuFooter?: ReactNode;\n className?: string;\n}\n\nconst BTN_SIZE = 40;\nconst BTN_BG = 'rgba(24, 24, 27, 0.9)';\n\nfunction NavIconButton({\n children,\n onClick,\n className = '',\n}: {\n children: ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n className?: string;\n}) {\n return (\n <button\n onClick={onClick}\n className={`relative flex items-center justify-center rounded-xl transition-all cursor-pointer rainbow-border-button text-white ${className}`}\n style={{\n width: BTN_SIZE,\n height: Math.round(BTN_SIZE * 1.1),\n background: BTN_BG,\n backdropFilter: 'blur(24px)',\n }}\n >\n {children}\n </button>\n );\n}\n\ninterface ExpandedMenuProps {\n menuGroups: NavLinkGroup[];\n xUrl: string;\n communityLabel: string;\n menuFooter?: ReactNode;\n onClose: () => void;\n}\n\nconst ExpandedMenu = forwardRef<HTMLDivElement, ExpandedMenuProps>(\n ({ menuGroups, xUrl, communityLabel, menuFooter, onClose }, ref) => {\n const colCount = menuGroups.length + 1;\n\n return (\n <div\n ref={ref}\n className=\"fixed top-0 left-0 right-0 backdrop-blur-xl\"\n style={{ transform: 'translateY(-100%)', visibility: 'hidden', zIndex: 40, background: 'rgba(0, 0, 0, 0.95)' }}\n >\n <div className=\"menu-content p-8 pt-20 max-w-2xl mx-auto\">\n <div\n className=\"grid gap-8\"\n style={{ gridTemplateColumns: `repeat(${colCount}, 1fr)` }}\n >\n {menuGroups.map((group) => (\n <div key={group.title} className=\"space-y-1\">\n <span className=\"text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4\">\n {group.title}\n </span>\n {group.links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n onClick={onClose}\n className=\"block text-2xl font-light text-white hover:text-zinc-300 transition-colors py-1\"\n >\n {link.label}\n </a>\n ))}\n </div>\n ))}\n\n <div className=\"space-y-1\">\n <span className=\"text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4\">\n {communityLabel}\n </span>\n <div className=\"flex items-center gap-2 pt-1\">\n <a\n href={xUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"w-10 h-10 rounded-full bg-zinc-800 flex items-center justify-center text-white hover:bg-zinc-700 transition-colors\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n {menuFooter && (\n <div className=\"mt-6 pt-6\" style={{ borderTop: '1px solid rgba(255,255,255,0.06)' }}>\n {menuFooter}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nExpandedMenu.displayName = 'ExpandedMenu';\n\nexport function ProductNav({\n logo,\n logoHref = '/',\n menuGroups = [],\n leftExtra,\n leftPanel,\n leftPanelOpen = false,\n onLeftPanelChange,\n rightAction,\n rightExtra,\n xUrl = 'https://x.com/moltenagentic',\n communityLabel = 'Community',\n menuFooter,\n className = '',\n}: ProductNavProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [leftPanelVisible, setLeftPanelVisible] = useState(false);\n const isLeftOpen = leftPanelOpen;\n const setIsLeftOpen = useCallback((v: boolean | ((prev: boolean) => boolean)) => {\n const next = typeof v === 'function' ? v(leftPanelOpen) : v;\n onLeftPanelChange?.(next);\n }, [leftPanelOpen, onLeftPanelChange]);\n const navBarRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const leftPanelRef = useRef<HTMLDivElement>(null);\n const isAnimating = useRef(false);\n\n const hasMenu = menuGroups.length > 0;\n\n const slideOpen = useCallback((panelRef: React.RefObject<HTMLDivElement | null>) => {\n if (isAnimating.current || !navBarRef.current || !panelRef.current) return;\n isAnimating.current = true;\n\n const tl = gsap.timeline({\n onComplete: () => { isAnimating.current = false; },\n });\n\n gsap.set(panelRef.current, { visibility: 'visible' });\n\n tl.to(navBarRef.current.querySelectorAll('.nav-content'), {\n opacity: 0, duration: 0.15,\n });\n\n tl.to(panelRef.current, {\n y: 0, duration: 0.4, ease: 'power3.out',\n }, '-=0.1');\n\n tl.to(panelRef.current.querySelectorAll('.menu-content > div'), {\n opacity: 1, y: 0, duration: 0.3, stagger: 0.05,\n }, '-=0.2');\n }, []);\n\n const slideClose = useCallback((panelRef: React.RefObject<HTMLDivElement | null>, onDone?: () => void) => {\n if (isAnimating.current || !navBarRef.current || !panelRef.current) return;\n isAnimating.current = true;\n\n const panel = panelRef.current;\n const tl = gsap.timeline({\n onComplete: () => {\n isAnimating.current = false;\n gsap.set(panel, { visibility: 'hidden', y: '-100%' });\n onDone?.();\n },\n });\n\n tl.to(panel.querySelectorAll('.menu-content > div'), {\n opacity: 0, y: -10, duration: 0.2, stagger: 0.03,\n });\n\n tl.to(panel, {\n y: '-100%', duration: 0.35, ease: 'power3.in',\n }, '-=0.1');\n\n tl.to(navBarRef.current.querySelectorAll('.nav-content'), {\n opacity: 1, duration: 0.2,\n }, '-=0.15');\n }, []);\n\n useEffect(() => {\n if (isOpen) slideOpen(menuRef);\n else slideClose(menuRef);\n }, [isOpen, slideOpen, slideClose]);\n\n useEffect(() => {\n if (isLeftOpen) {\n setLeftPanelVisible(true);\n if (isOpen) setIsOpen(false);\n slideOpen(leftPanelRef);\n } else {\n slideClose(leftPanelRef, () => setLeftPanelVisible(false));\n }\n }, [isLeftOpen, slideOpen, slideClose]);\n\n const toggleMenu = useCallback(() => {\n if (isLeftOpen) setIsLeftOpen(false);\n setIsOpen(v => !v);\n }, [isLeftOpen]);\n\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n if (isOpen) setIsOpen(false);\n if (isLeftOpen) setIsLeftOpen(false);\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, isLeftOpen]);\n\n const anyOpen = isOpen || isLeftOpen;\n\n return (\n <nav className={`relative z-50 w-full max-w-2xl mx-auto px-4 ${className}`}>\n <div className=\"relative\">\n <div style={{ position: 'absolute', left: '8px', top: '50%', transform: 'translateY(-50%)', display: 'flex', alignItems: 'center', gap: '20px', zIndex: leftPanelVisible ? 30 : 60 }}>\n {leftExtra}\n {hasMenu && (\n <NavIconButton onClick={toggleMenu}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '5px' }}>\n <span style={{\n display: 'block', width: '16px', height: '2px', background: 'currentColor',\n transition: 'all 0.2s', transformOrigin: 'center',\n transform: isOpen ? 'translateY(7px) rotate(45deg)' : 'none',\n }} />\n <span style={{\n display: 'block', width: '16px', height: '2px', background: 'currentColor',\n transition: 'all 0.2s',\n opacity: isOpen ? 0 : 1,\n }} />\n <span style={{\n display: 'block', width: '16px', height: '2px', background: 'currentColor',\n transition: 'all 0.2s', transformOrigin: 'center',\n transform: isOpen ? 'translateY(-7px) rotate(-45deg)' : 'none',\n }} />\n </div>\n </NavIconButton>\n )}\n </div>\n\n <div\n ref={navBarRef}\n className=\"relative px-2 flex items-center justify-between\"\n >\n <div className=\"nav-content\" style={{ width: '56px' }} />\n\n <div className=\"nav-content absolute left-1/2 -translate-x-1/2\">\n <a href={logoHref} className=\"block hover:opacity-80 transition-opacity\">\n {logo ?? (\n <span style={{ fontSize: '18px', fontWeight: 900, color: '#fff' }}>M</span>\n )}\n </a>\n </div>\n\n <div className=\"nav-content\" style={{ display: 'flex', alignItems: 'center', gap: '20px' }}>\n {rightAction && (\n rightAction.href ? (\n <a href={rightAction.href} title={rightAction.label}>\n <NavIconButton>\n {rightAction.icon}\n </NavIconButton>\n </a>\n ) : (\n <NavIconButton onClick={rightAction.onClick}>\n {rightAction.icon}\n </NavIconButton>\n )\n )}\n {rightExtra}\n </div>\n </div>\n\n {hasMenu && (\n <ExpandedMenu\n ref={menuRef}\n menuGroups={menuGroups}\n xUrl={xUrl}\n communityLabel={communityLabel}\n menuFooter={menuFooter}\n onClose={() => setIsOpen(false)}\n />\n )}\n\n {leftPanel && (\n <div\n ref={leftPanelRef}\n className=\"fixed top-0 left-0 right-0 backdrop-blur-xl\"\n style={{ transform: 'translateY(-100%)', visibility: 'hidden', zIndex: 40, background: 'rgba(0, 0, 0, 0.95)' }}\n >\n <div className=\"menu-content p-8 pt-20 max-w-2xl mx-auto\">\n {typeof leftPanel === 'function' ? leftPanel(() => setIsLeftOpen(false)) : leftPanel}\n </div>\n </div>\n )}\n </div>\n\n {anyOpen && (\n <div\n className=\"fixed inset-0\"\n style={{ background: 'rgba(0, 0, 0, 0.5)', zIndex: 30 }}\n onClick={() => { setIsOpen(false); setIsLeftOpen(false); }}\n />\n )}\n </nav>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useState, useEffect, useCallback, type ReactNode } from 'react';\n\nexport type MoltenTheme = 'day' | 'night';\n\ninterface MoltenThemeContextValue {\n theme: MoltenTheme;\n setTheme: (theme: MoltenTheme) => void;\n toggle: () => void;\n}\n\nconst MoltenThemeContext = createContext<MoltenThemeContextValue>({\n theme: 'day',\n setTheme: () => {},\n toggle: () => {},\n});\n\nconst STORAGE_KEY = 'molten-theme';\n\nexport function MoltenThemeProvider({ children, defaultTheme = 'day' }: { children: ReactNode; defaultTheme?: MoltenTheme }) {\n const [theme, setThemeState] = useState<MoltenTheme>(defaultTheme);\n\n useEffect(() => {\n const stored = localStorage.getItem(STORAGE_KEY) as MoltenTheme | null;\n if (stored === 'day' || stored === 'night') {\n setThemeState(stored);\n document.documentElement.dataset.theme = stored;\n } else {\n document.documentElement.dataset.theme = defaultTheme;\n }\n }, [defaultTheme]);\n\n const setTheme = useCallback((next: MoltenTheme) => {\n setThemeState(next);\n document.documentElement.dataset.theme = next;\n localStorage.setItem(STORAGE_KEY, next);\n }, []);\n\n const toggle = useCallback(() => {\n setTheme(theme === 'day' ? 'night' : 'day');\n }, [theme, setTheme]);\n\n return (\n <MoltenThemeContext.Provider value={{ theme, setTheme, toggle }}>\n {children}\n </MoltenThemeContext.Provider>\n );\n}\n\nexport function useMoltenTheme() {\n return useContext(MoltenThemeContext);\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { TechGrid } from './TechGrid';\nimport { EmberField } from './EmberField';\nimport { useMoltenTheme } from '../theme';\n\nexport interface HalfHeroProps {\n children: ReactNode;\n nav?: ReactNode;\n className?: string;\n height?: string;\n fieldVariant?: 'default' | 'intense' | 'subtle' | 'vignette';\n showEmbers?: boolean;\n emberCount?: number;\n showGrid?: boolean;\n}\n\nconst fieldClasses = {\n default: 'molten-field',\n intense: 'molten-field-intense',\n subtle: 'molten-field-subtle',\n vignette: 'molten-field-vignette',\n} as const;\n\nexport function HalfHero({\n children,\n nav,\n className = '',\n height = '50vh',\n fieldVariant = 'default',\n showEmbers = true,\n emberCount = 40,\n showGrid = true,\n}: HalfHeroProps) {\n const { theme } = useMoltenTheme();\n const isNight = theme === 'night';\n const gridTone = isNight ? 'molten' : 'dark';\n const emberTone = isNight ? 'molten' : 'dark';\n\n return (\n <div\n className={`relative overflow-hidden flex flex-col ${fieldClasses[fieldVariant]} ${className}`}\n style={{ minHeight: height, color: isNight ? '#fff' : '#000' }}\n >\n {showGrid && (\n <TechGrid tone={gridTone} id=\"hero\" className=\"absolute inset-0 w-full h-full\" style={{ zIndex: 3 }} />\n )}\n {showEmbers && (\n <EmberField tone={emberTone} count={emberCount} style={{ zIndex: 5 }} />\n )}\n\n {nav && <div className=\"relative pt-4 he-nav-spacing\" style={{ zIndex: 30 }}>{nav}</div>}\n\n <div className=\"relative flex-1 flex flex-col items-center px-4 he-content-spacing\" style={{ zIndex: 10 }}>\n <div style={{ flex: 1 }} />\n {children}\n <div style={{ flex: 1 }} />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nexport interface ProductShellProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function ProductShell({\n children,\n className = '',\n}: ProductShellProps) {\n return (\n <main className={`relative min-h-screen bg-black text-white ${className}`}>\n {children}\n </main>\n );\n}\n"],"mappings":"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","names":["jsx","useRef","useEffect","jsx","jsxs","useEffect","useRef","jsx","jsx","jsx","jsx","jsx","variantClasses","jsx","useEffect","jsx","jsxs","useEffect","useState","useRef","useEffect","jsx","jsxs","useState","useEffect","useCallback","jsx","jsx","jsxs","jsx"]}
1
+ {"version":3,"sources":["../src/components/TechGrid.tsx","../src/components/GridMesh.tsx","../src/components/LavaScene.tsx","../src/components/EmberField.tsx","../src/components/Vignette.tsx","../src/components/SphereGlow.tsx","../src/components/MoltenButton.tsx","../src/components/GlassCard.tsx","../src/components/MoltenText.tsx","../src/components/Page.tsx","../src/components/ProductNav.tsx","../src/theme/MoltenThemeProvider.tsx","../src/components/HalfHero.tsx","../src/components/ProductShell.tsx","../src/components/ThemeToggle.tsx","../src/components/LangButton.tsx","../src/components/HeroCard.tsx","../src/hooks/usePulseLabels.ts"],"sourcesContent":["'use client';\n\nconst GRID = 160;\nconst HALF = GRID / 2;\nconst ARM = 10;\n\nexport type TechGridTone = 'molten' | 'dark';\n\nconst TONES = {\n molten: {\n line: 'rgba(200,70,35,0.14)',\n cross: 'rgba(200,70,35,0.45)',\n dot: 'rgba(200,70,35,0.25)',\n },\n dark: {\n line: 'rgba(0,0,0,0.18)',\n cross: 'rgba(0,0,0,0.4)',\n dot: 'rgba(0,0,0,0.22)',\n },\n} as const;\n\nexport interface TechGridProps {\n className?: string;\n zIndex?: number;\n tone?: TechGridTone;\n /** Unique id suffix — required when rendering multiple grids on the same page */\n id?: string;\n style?: React.CSSProperties;\n}\n\nexport function TechGrid({\n className = '',\n zIndex = 3,\n tone = 'molten',\n id = '',\n style,\n}: TechGridProps) {\n const { line, cross, dot } = TONES[tone];\n const gridId = `tech-grid${id ? `-${id}` : ''}`;\n const crossId = `crosshairs${id ? `-${id}` : ''}`;\n\n return (\n <svg\n className={`pointer-events-none ${className}`}\n style={{ zIndex, ...style }}\n >\n <defs>\n <pattern\n id={gridId}\n width={GRID}\n height={GRID}\n patternUnits=\"userSpaceOnUse\"\n >\n <line x1=\"0\" y1=\"0\" x2={GRID} y2=\"0\" stroke={line} strokeWidth=\"0.5\" />\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2={GRID} stroke={line} strokeWidth=\"0.5\" />\n <circle cx={HALF} cy={0} r=\"1.5\" fill={dot} />\n <circle cx={0} cy={HALF} r=\"1.5\" fill={dot} />\n <circle cx={HALF} cy={HALF} r=\"1.5\" fill={dot} />\n </pattern>\n\n <pattern\n id={crossId}\n width={GRID}\n height={GRID}\n patternUnits=\"userSpaceOnUse\"\n patternTransform={`translate(${-HALF},${-HALF})`}\n >\n <line\n x1={HALF - ARM} y1={HALF} x2={HALF + ARM} y2={HALF}\n stroke={cross} strokeWidth=\"1\"\n />\n <line\n x1={HALF} y1={HALF - ARM} x2={HALF} y2={HALF + ARM}\n stroke={cross} strokeWidth=\"1\"\n />\n </pattern>\n </defs>\n\n <rect width=\"100%\" height=\"100%\" fill={`url(#${gridId})`} />\n <rect width=\"100%\" height=\"100%\" fill={`url(#${crossId})`} />\n </svg>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nexport interface GridMeshProps {\n className?: string;\n opacity?: number;\n gridSize?: number;\n strokeColor?: string;\n}\n\nexport function GridMesh({\n className = '',\n opacity = 0.6,\n gridSize = 50,\n strokeColor = 'rgba(255, 255, 255, 0.03)',\n}: GridMeshProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n let animationFrameId: number;\n let time = 0;\n\n const resize = () => {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n };\n\n resize();\n window.addEventListener('resize', resize);\n\n const draw = () => {\n if (!ctx || !canvas) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const cols = Math.ceil(canvas.width / gridSize) + 1;\n const rows = Math.ceil(canvas.height / gridSize) + 1;\n\n time += 0.005;\n\n ctx.strokeStyle = strokeColor;\n ctx.lineWidth = 1;\n\n for (let i = 0; i < rows; i++) {\n ctx.beginPath();\n for (let j = 0; j < cols; j++) {\n const x = j * gridSize;\n const y =\n i * gridSize +\n Math.sin(time + j * 0.1) * 10 +\n Math.cos(time * 0.5 + i * 0.1) * 8;\n\n if (j === 0) ctx.moveTo(x, y);\n else ctx.lineTo(x, y);\n }\n ctx.stroke();\n }\n\n for (let j = 0; j < cols; j++) {\n ctx.beginPath();\n for (let i = 0; i < rows; i++) {\n const x =\n j * gridSize +\n Math.sin(time + i * 0.1) * 10 +\n Math.cos(time * 0.7 + j * 0.1) * 8;\n const y = i * gridSize;\n\n if (i === 0) ctx.moveTo(x, y);\n else ctx.lineTo(x, y);\n }\n ctx.stroke();\n }\n\n animationFrameId = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n window.removeEventListener('resize', resize);\n cancelAnimationFrame(animationFrameId);\n };\n }, [gridSize, strokeColor]);\n\n return (\n <canvas\n ref={canvasRef}\n className={`absolute inset-0 w-full h-full pointer-events-none ${className}`}\n style={{ opacity }}\n />\n );\n}\n","'use client';\n\nimport { useRef, useMemo, useEffect } from 'react';\nimport { Canvas, useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nconst noiseGLSL = /* glsl */ `\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 permute(vec4 x){return mod289(((x*34.0)+10.0)*x);}\nvec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}\n\nfloat snoise(vec3 v){\n const vec2 C=vec2(1.0/6.0,1.0/3.0);\n const vec4 D=vec4(0.0,0.5,1.0,2.0);\n vec3 i=floor(v+dot(v,C.yyy));\n vec3 x0=v-i+dot(i,C.xxx);\n vec3 g=step(x0.yzx,x0.xyz);\n vec3 l=1.0-g;\n vec3 i1=min(g.xyz,l.zxy);\n vec3 i2=max(g.xyz,l.zxy);\n vec3 x1=x0-i1+C.xxx;\n vec3 x2=x0-i2+C.yyy;\n vec3 x3=x0-D.yyy;\n i=mod289(i);\n vec4 p=permute(permute(permute(\n i.z+vec4(0.0,i1.z,i2.z,1.0))\n +i.y+vec4(0.0,i1.y,i2.y,1.0))\n +i.x+vec4(0.0,i1.x,i2.x,1.0));\n float n_=0.142857142857;\n vec3 ns=n_*D.wyz-D.xzx;\n vec4 j=p-49.0*floor(p*ns.z*ns.z);\n vec4 x_=floor(j*ns.z);\n vec4 y_=floor(j-7.0*x_);\n vec4 x=x_*ns.x+ns.yyyy;\n vec4 y=y_*ns.x+ns.yyyy;\n vec4 h=1.0-abs(x)-abs(y);\n vec4 b0=vec4(x.xy,y.xy);\n vec4 b1=vec4(x.zw,y.zw);\n vec4 s0=floor(b0)*2.0+1.0;\n vec4 s1=floor(b1)*2.0+1.0;\n vec4 sh=-step(h,vec4(0.0));\n vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;\n vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;\n vec3 p0=vec3(a0.xy,h.x);\n vec3 p1=vec3(a0.zw,h.y);\n vec3 p2=vec3(a1.xy,h.z);\n vec3 p3=vec3(a1.zw,h.w);\n vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));\n p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;\n vec4 m=max(0.5-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);\n m=m*m;\n return 105.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));\n}\n`;\n\nconst vertexShader = /* glsl */ `\nuniform float uTime;\n${noiseGLSL}\nvarying float vDisplacement;\nvarying vec3 vNormal;\nvarying vec3 vWorldPosition;\n\nvoid main() {\n float n1 = snoise(position * 1.5 + uTime * 0.15) * 0.4;\n float n2 = snoise(position * 3.0 + uTime * 0.3) * 0.2;\n float n3 = snoise(position * 6.0 - uTime * 0.2) * 0.1;\n float displacement = n1 + n2 + n3;\n\n vec3 newPos = position + normal * displacement;\n vDisplacement = displacement;\n vNormal = normalize(normalMatrix * normal);\n vWorldPosition = (modelMatrix * vec4(newPos, 1.0)).xyz;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPos, 1.0);\n}\n`;\n\nconst fragmentShader = /* glsl */ `\nuniform float uTime;\nvarying float vDisplacement;\nvarying vec3 vNormal;\nvarying vec3 vWorldPosition;\n\nvoid main() {\n float d = smoothstep(-0.5, 0.7, vDisplacement);\n\n vec3 c0 = vec3(0.337, 0.055, 0.141);\n vec3 c1 = vec3(0.671, 0.106, 0.114);\n vec3 c2 = vec3(0.855, 0.220, 0.086);\n vec3 c3 = vec3(0.969, 0.500, 0.055);\n vec3 c4 = vec3(0.984, 0.624, 0.051);\n vec3 c5 = vec3(1.0, 0.95, 0.85);\n\n vec3 color;\n if (d < 0.15) color = mix(c0, c1, d / 0.15);\n else if (d < 0.35) color = mix(c1, c2, (d - 0.15) / 0.2);\n else if (d < 0.55) color = mix(c2, c3, (d - 0.35) / 0.2);\n else if (d < 0.75) color = mix(c3, c4, (d - 0.55) / 0.2);\n else color = mix(c4, c5, (d - 0.75) / 0.25);\n\n vec3 viewDir = normalize(cameraPosition - vWorldPosition);\n float fresnel = pow(1.0 - max(dot(vNormal, viewDir), 0.0), 3.0);\n color += c4 * fresnel * 0.5;\n\n color *= 1.0 + 0.06 * sin(uTime * 0.7);\n\n gl_FragColor = vec4(color, 1.0);\n}\n`;\n\nfunction LavaSphere({ yOffset = 0.6 }: { yOffset?: number }) {\n const meshRef = useRef<THREE.Mesh>(null);\n const matRef = useRef<THREE.ShaderMaterial>(null);\n const mouse = useRef({ x: 0, y: 0 });\n\n useEffect(() => {\n const onMove = (e: MouseEvent) => {\n mouse.current.x = (e.clientX / window.innerWidth - 0.5) * 2;\n mouse.current.y = -(e.clientY / window.innerHeight - 0.5) * 2;\n };\n window.addEventListener('mousemove', onMove);\n return () => window.removeEventListener('mousemove', onMove);\n }, []);\n\n const uniforms = useMemo(() => ({ uTime: { value: 0 } }), []);\n\n useFrame(({ clock }) => {\n if (matRef.current) matRef.current.uniforms.uTime.value = clock.elapsedTime;\n if (meshRef.current) {\n const m = meshRef.current;\n m.rotation.x = THREE.MathUtils.lerp(m.rotation.x, mouse.current.y * 0.15, 0.02);\n m.rotation.y = THREE.MathUtils.lerp(\n m.rotation.y,\n mouse.current.x * 0.25 + clock.elapsedTime * 0.06,\n 0.02,\n );\n }\n });\n\n return (\n <mesh ref={meshRef} position={[0, yOffset, 0]}>\n <icosahedronGeometry args={[1.5, 64]} />\n <shaderMaterial\n ref={matRef}\n vertexShader={vertexShader}\n fragmentShader={fragmentShader}\n uniforms={uniforms}\n />\n </mesh>\n );\n}\n\nfunction EmberParticles() {\n const ref = useRef<THREE.Points>(null);\n const count = 180;\n\n const { positions, velocities } = useMemo(() => {\n const pos = new Float32Array(count * 3);\n const vel = new Float32Array(count * 3);\n for (let i = 0; i < count; i++) {\n const i3 = i * 3;\n pos[i3] = (Math.random() - 0.5) * 10;\n pos[i3 + 1] = Math.random() * 8 - 4;\n pos[i3 + 2] = (Math.random() - 0.5) * 6;\n vel[i3] = (Math.random() - 0.5) * 0.003;\n vel[i3 + 1] = Math.random() * 0.006 + 0.002;\n vel[i3 + 2] = (Math.random() - 0.5) * 0.002;\n }\n return { positions: pos, velocities: vel };\n }, []);\n\n const sizes = useMemo(() => {\n const s = new Float32Array(count);\n for (let i = 0; i < count; i++) s[i] = Math.random() * 0.04 + 0.01;\n return s;\n }, []);\n\n useFrame(() => {\n if (!ref.current) return;\n const arr = ref.current.geometry.attributes.position.array as Float32Array;\n for (let i = 0; i < count; i++) {\n const i3 = i * 3;\n arr[i3] += velocities[i3];\n arr[i3 + 1] += velocities[i3 + 1];\n arr[i3 + 2] += velocities[i3 + 2];\n if (arr[i3 + 1] > 5) {\n arr[i3] = (Math.random() - 0.5) * 10;\n arr[i3 + 1] = -5;\n arr[i3 + 2] = (Math.random() - 0.5) * 6;\n }\n }\n ref.current.geometry.attributes.position.needsUpdate = true;\n });\n\n return (\n <points ref={ref}>\n <bufferGeometry>\n <bufferAttribute attach=\"attributes-position\" args={[positions, 3]} />\n <bufferAttribute attach=\"attributes-size\" args={[sizes, 1]} />\n </bufferGeometry>\n <pointsMaterial size={0.035} color=\"#fb9f0d\" transparent opacity={0.5} sizeAttenuation />\n </points>\n );\n}\n\nexport interface LavaSceneProps {\n centered?: boolean;\n}\n\nexport function LavaScene({ centered = false }: LavaSceneProps) {\n const yOffset = centered ? 0 : 0.6;\n\n return (\n <Canvas\n camera={{ position: [0, 0, 5], fov: 45 }}\n gl={{ antialias: true, alpha: true }}\n style={{ background: 'transparent' }}\n >\n <ambientLight intensity={0.08} />\n <pointLight position={[5, 5, 5]} intensity={0.5} color=\"#fb9f0d\" />\n <pointLight position={[-5, -3, 3]} intensity={0.3} color=\"#ab1b1d\" />\n <LavaSphere yOffset={yOffset} />\n <EmberParticles />\n </Canvas>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nexport type EmberTone = 'molten' | 'dark';\n\nexport interface EmberFieldProps {\n tone?: EmberTone;\n count?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\ninterface Particle {\n x: number;\n y: number;\n vx: number;\n vy: number;\n size: number;\n opacity: number;\n drift: number;\n}\n\nconst COLORS = {\n molten: [\n [251, 159, 13],\n [247, 128, 14],\n [237, 99, 20],\n [218, 56, 22],\n ],\n dark: [\n [0, 0, 0],\n [20, 8, 2],\n [40, 16, 4],\n [10, 4, 1],\n ],\n} as const;\n\nfunction randomColor(tone: EmberTone): [number, number, number] {\n const palette = COLORS[tone];\n return [...palette[Math.floor(Math.random() * palette.length)]] as [number, number, number];\n}\n\nfunction createParticle(w: number, h: number, tone: EmberTone, fromBottom = false): Particle {\n return {\n x: Math.random() * w,\n y: fromBottom ? h + Math.random() * 40 : Math.random() * h,\n vx: (Math.random() - 0.5) * 0.3,\n vy: -(Math.random() * 0.6 + 0.2),\n size: Math.random() * 2.5 + 0.8,\n opacity: Math.random() * 0.5 + 0.2,\n drift: (Math.random() - 0.5) * 0.002,\n };\n}\n\nexport function EmberField({\n tone = 'molten',\n count = 60,\n className = '',\n style,\n}: EmberFieldProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n let animId: number;\n let particles: (Particle & { color: [number, number, number] })[] = [];\n\n const resize = () => {\n canvas.width = canvas.offsetWidth * window.devicePixelRatio;\n canvas.height = canvas.offsetHeight * window.devicePixelRatio;\n ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n };\n\n const init = () => {\n resize();\n const w = canvas.offsetWidth;\n const h = canvas.offsetHeight;\n particles = Array.from({ length: count }, () => ({\n ...createParticle(w, h, tone),\n color: randomColor(tone),\n }));\n };\n\n init();\n window.addEventListener('resize', init);\n\n const draw = () => {\n const w = canvas.offsetWidth;\n const h = canvas.offsetHeight;\n ctx.clearRect(0, 0, w, h);\n\n for (const p of particles) {\n p.x += p.vx;\n p.y += p.vy;\n p.vx += p.drift;\n\n if (p.y < -10 || p.x < -10 || p.x > w + 10) {\n Object.assign(p, createParticle(w, h, tone, true));\n p.color = randomColor(tone);\n }\n\n const [r, g, b] = p.color;\n ctx.beginPath();\n ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\n ctx.fillStyle = `rgba(${r},${g},${b},${p.opacity})`;\n ctx.fill();\n }\n\n animId = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n window.removeEventListener('resize', init);\n cancelAnimationFrame(animId);\n };\n }, [tone, count]);\n\n return (\n <canvas\n ref={canvasRef}\n className={`absolute inset-0 w-full h-full pointer-events-none ${className}`}\n style={style}\n />\n );\n}\n","'use client';\n\nexport interface VignetteProps {\n className?: string;\n zIndex?: number;\n}\n\nexport function Vignette({ className = '', zIndex = 2 }: VignetteProps) {\n return (\n <div\n className={`fixed inset-0 pointer-events-none vignette ${className}`}\n style={{ zIndex }}\n />\n );\n}\n","'use client';\n\nexport interface SphereGlowProps {\n className?: string;\n zIndex?: number;\n}\n\nexport function SphereGlow({ className = '', zIndex = 1 }: SphereGlowProps) {\n return (\n <div\n className={`fixed inset-0 pointer-events-none ${className}`}\n style={{ zIndex }}\n >\n <div className=\"sphere-glow\" />\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode, ButtonHTMLAttributes } from 'react';\n\nexport interface MoltenButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n href?: string;\n variant?: 'molten' | 'outline' | 'ghost';\n size?: 'xs' | 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n}\n\nconst sizeClasses = {\n xs: 'px-2.5 py-1 text-[10px]',\n sm: 'px-3 py-1.5 text-xs',\n md: 'px-4 py-2 text-sm',\n lg: 'px-8 py-4 text-sm',\n} as const;\n\nconst variantClasses = {\n molten: 'bg-black text-white hover:bg-zinc-900 rainbow-border-button',\n outline: 'bg-transparent border border-zinc-700 text-white hover:bg-zinc-800',\n ghost: 'bg-transparent text-white hover:bg-zinc-800/50',\n} as const;\n\nexport function MoltenButton({\n children,\n href,\n variant = 'molten',\n size = 'sm',\n fullWidth = false,\n disabled = false,\n className = '',\n ...props\n}: MoltenButtonProps) {\n const classes = [\n 'relative inline-flex items-center justify-center gap-1.5',\n 'rounded-lg font-medium transition-all cursor-pointer',\n sizeClasses[size],\n fullWidth ? 'w-full' : '',\n disabled\n ? 'bg-zinc-800 text-zinc-500 cursor-not-allowed'\n : variantClasses[variant],\n className,\n ].filter(Boolean).join(' ');\n\n if (href && !disabled) {\n return (\n <a href={href} className={classes}>\n {children}\n </a>\n );\n }\n\n return (\n <button disabled={disabled} className={classes} {...props}>\n {children}\n </button>\n );\n}\n","'use client';\n\nimport type { ReactNode, HTMLAttributes } from 'react';\n\nexport interface GlassCardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n variant?: 'default' | 'subtle' | 'minimal';\n glow?: boolean;\n wave?: boolean;\n cornerFrame?: boolean;\n}\n\nconst variantClasses = {\n default: 'glass-card',\n subtle: 'glass-card-subtle',\n minimal: 'glass-card-minimal',\n} as const;\n\nexport function GlassCard({\n children,\n variant = 'default',\n glow = false,\n wave = false,\n cornerFrame = false,\n className = '',\n ...props\n}: GlassCardProps) {\n const classes = [\n variantClasses[variant],\n 'rounded-2xl',\n glow ? 'molten-card-glow' : '',\n wave ? 'molten-wave-card' : '',\n cornerFrame ? 'corner-frame' : '',\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode, HTMLAttributes } from 'react';\n\nexport interface MoltenTextProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n as?: 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'p';\n animated?: boolean;\n}\n\nexport function MoltenText({\n children,\n as: Tag = 'span',\n animated = false,\n className = '',\n ...props\n}: MoltenTextProps) {\n const classes = [\n animated ? 'rainbow-text-animated' : 'molten-text',\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\nimport { GridMesh } from './GridMesh';\n\nexport interface PageProps {\n children: ReactNode;\n ptMobile?: number;\n ptDesktop?: number;\n pb?: number;\n px?: number;\n maxWidth?: string;\n centered?: boolean;\n showGrid?: boolean;\n nav?: ReactNode;\n overlay?: ReactNode;\n}\n\nexport function Page({\n children,\n ptMobile = 20,\n ptDesktop = 24,\n pb = 6,\n px = 6,\n maxWidth = 'max-w-6xl',\n centered = true,\n showGrid = true,\n nav,\n overlay,\n}: PageProps) {\n const [isDesktop, setIsDesktop] = useState(false);\n\n useEffect(() => {\n const handleResize = () => setIsDesktop(window.innerWidth >= 1024);\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const toRem = (units: number) => `${(units * 4) / 16}rem`;\n const paddingTop = isDesktop ? toRem(ptDesktop) : toRem(ptMobile);\n\n return (\n <main className=\"relative min-h-screen bg-black overflow-hidden\">\n {showGrid && (\n <div className=\"fixed inset-0 z-0\">\n <GridMesh />\n </div>\n )}\n\n <div className=\"relative z-10\">\n {nav}\n\n <div\n style={{\n paddingTop,\n paddingBottom: toRem(pb),\n paddingLeft: toRem(px),\n paddingRight: toRem(px),\n }}\n className={`min-h-screen ${centered ? 'flex flex-col justify-center' : ''}`}\n >\n <div className={`${maxWidth} mx-auto w-full`}>\n {children}\n </div>\n </div>\n </div>\n\n {overlay}\n\n <div className=\"fixed inset-0 pointer-events-none bg-gradient-radial from-transparent via-transparent to-black/40\" />\n </main>\n );\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback, forwardRef, type ReactNode } from 'react';\nimport gsap from 'gsap';\n\nexport interface NavLink {\n label: string;\n href: string;\n external?: boolean;\n}\n\nexport interface NavLinkGroup {\n title: string;\n links: NavLink[];\n}\n\nexport interface NavAction {\n icon: ReactNode;\n onClick?: () => void;\n href?: string;\n label?: string;\n}\n\nexport interface ProductNavProps {\n logo?: ReactNode;\n logoHref?: string;\n menuGroups?: NavLinkGroup[];\n leftExtra?: ReactNode;\n leftPanel?: ReactNode | ((onClose: () => void) => ReactNode);\n leftPanelOpen?: boolean;\n onLeftPanelChange?: (open: boolean) => void;\n rightAction?: NavAction;\n rightExtra?: ReactNode;\n xUrl?: string;\n communityLabel?: string;\n menuFooter?: ReactNode;\n className?: string;\n}\n\nconst BTN_SIZE = 40;\nconst BTN_BG = 'rgba(24, 24, 27, 0.9)';\n\nfunction NavIconButton({\n children,\n onClick,\n className = '',\n}: {\n children: ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n className?: string;\n}) {\n return (\n <button\n onClick={onClick}\n className={`relative flex items-center justify-center rounded-xl transition-all cursor-pointer rainbow-border-button text-white ${className}`}\n style={{\n width: BTN_SIZE,\n height: Math.round(BTN_SIZE * 1.1),\n background: BTN_BG,\n backdropFilter: 'blur(24px)',\n }}\n >\n {children}\n </button>\n );\n}\n\ninterface ExpandedMenuProps {\n menuGroups: NavLinkGroup[];\n xUrl: string;\n communityLabel: string;\n menuFooter?: ReactNode;\n onClose: () => void;\n}\n\nconst ExpandedMenu = forwardRef<HTMLDivElement, ExpandedMenuProps>(\n ({ menuGroups, xUrl, communityLabel, menuFooter, onClose }, ref) => {\n const colCount = menuGroups.length;\n\n return (\n <div\n ref={ref}\n className=\"fixed top-0 left-0 right-0 backdrop-blur-xl\"\n style={{ transform: 'translateY(-100%)', visibility: 'hidden', zIndex: 40, background: 'rgba(0, 0, 0, 0.95)' }}\n >\n <div className=\"menu-content p-8 pt-20 max-w-2xl mx-auto\">\n <div\n className=\"grid gap-8\"\n style={{ gridTemplateColumns: `repeat(${colCount}, 1fr)` }}\n >\n {menuGroups.map((group) => (\n <div key={group.title} className=\"space-y-1\">\n <span className=\"text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4\">\n {group.title}\n </span>\n {group.links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n onClick={onClose}\n className=\"block text-2xl font-light text-white hover:text-zinc-300 transition-colors py-1\"\n >\n {link.label}\n </a>\n ))}\n </div>\n ))}\n\n </div>\n <div className=\"mt-6 pt-6 flex items-center justify-between\" style={{ borderTop: '1px solid rgba(255,255,255,0.06)' }}>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium\">\n {communityLabel}\n </span>\n <a\n href={xUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"w-8 h-8 rounded-full bg-zinc-800 flex items-center justify-center text-white hover:bg-zinc-700 transition-colors\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n </a>\n </div>\n {menuFooter && (\n <div>{menuFooter}</div>\n )}\n </div>\n </div>\n </div>\n );\n }\n);\n\nExpandedMenu.displayName = 'ExpandedMenu';\n\nexport function ProductNav({\n logo,\n logoHref = '/',\n menuGroups = [],\n leftExtra,\n leftPanel,\n leftPanelOpen = false,\n onLeftPanelChange,\n rightAction,\n rightExtra,\n xUrl = 'https://x.com/moltenagentic',\n communityLabel = 'Community',\n menuFooter,\n className = '',\n}: ProductNavProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [leftPanelVisible, setLeftPanelVisible] = useState(false);\n const isLeftOpen = leftPanelOpen;\n const setIsLeftOpen = useCallback((v: boolean | ((prev: boolean) => boolean)) => {\n const next = typeof v === 'function' ? v(leftPanelOpen) : v;\n onLeftPanelChange?.(next);\n }, [leftPanelOpen, onLeftPanelChange]);\n const navBarRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const leftPanelRef = useRef<HTMLDivElement>(null);\n const isAnimating = useRef(false);\n\n const hasMenu = menuGroups.length > 0;\n\n const slideOpen = useCallback((panelRef: React.RefObject<HTMLDivElement | null>) => {\n if (isAnimating.current || !navBarRef.current || !panelRef.current) return;\n isAnimating.current = true;\n\n const tl = gsap.timeline({\n onComplete: () => { isAnimating.current = false; },\n });\n\n gsap.set(panelRef.current, { visibility: 'visible' });\n\n tl.to(navBarRef.current.querySelectorAll('.nav-content'), {\n opacity: 0, duration: 0.15,\n });\n\n tl.to(panelRef.current, {\n y: 0, duration: 0.4, ease: 'power3.out',\n }, '-=0.1');\n\n tl.to(panelRef.current.querySelectorAll('.menu-content > div'), {\n opacity: 1, y: 0, duration: 0.3, stagger: 0.05,\n }, '-=0.2');\n }, []);\n\n const slideClose = useCallback((panelRef: React.RefObject<HTMLDivElement | null>, onDone?: () => void) => {\n if (isAnimating.current || !navBarRef.current || !panelRef.current) return;\n isAnimating.current = true;\n\n const panel = panelRef.current;\n const tl = gsap.timeline({\n onComplete: () => {\n isAnimating.current = false;\n gsap.set(panel, { visibility: 'hidden', y: '-100%' });\n onDone?.();\n },\n });\n\n tl.to(panel.querySelectorAll('.menu-content > div'), {\n opacity: 0, y: -10, duration: 0.2, stagger: 0.03,\n });\n\n tl.to(panel, {\n y: '-100%', duration: 0.35, ease: 'power3.in',\n }, '-=0.1');\n\n tl.to(navBarRef.current.querySelectorAll('.nav-content'), {\n opacity: 1, duration: 0.2,\n }, '-=0.15');\n }, []);\n\n useEffect(() => {\n if (isOpen) slideOpen(menuRef);\n else slideClose(menuRef);\n }, [isOpen, slideOpen, slideClose]);\n\n useEffect(() => {\n if (isLeftOpen) {\n setLeftPanelVisible(true);\n if (isOpen) setIsOpen(false);\n slideOpen(leftPanelRef);\n } else {\n slideClose(leftPanelRef, () => setLeftPanelVisible(false));\n }\n }, [isLeftOpen, slideOpen, slideClose]);\n\n const toggleMenu = useCallback(() => {\n if (isLeftOpen) setIsLeftOpen(false);\n setIsOpen(v => !v);\n }, [isLeftOpen]);\n\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n if (isOpen) setIsOpen(false);\n if (isLeftOpen) setIsLeftOpen(false);\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, isLeftOpen]);\n\n const anyOpen = isOpen || isLeftOpen;\n\n return (\n <nav className={`relative z-50 w-full max-w-2xl mx-auto px-4 ${className}`}>\n <div className=\"relative\">\n <div style={{ position: 'absolute', left: '8px', top: '50%', transform: 'translateY(-50%)', display: 'flex', alignItems: 'center', gap: '20px', zIndex: leftPanelVisible ? 30 : 60 }}>\n {leftExtra}\n {hasMenu && (\n <NavIconButton onClick={toggleMenu}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '5px' }}>\n <span style={{\n display: 'block', width: '16px', height: '2px', background: 'currentColor',\n transition: 'all 0.2s', transformOrigin: 'center',\n transform: isOpen ? 'translateY(7px) rotate(45deg)' : 'none',\n }} />\n <span style={{\n display: 'block', width: '16px', height: '2px', background: 'currentColor',\n transition: 'all 0.2s',\n opacity: isOpen ? 0 : 1,\n }} />\n <span style={{\n display: 'block', width: '16px', height: '2px', background: 'currentColor',\n transition: 'all 0.2s', transformOrigin: 'center',\n transform: isOpen ? 'translateY(-7px) rotate(-45deg)' : 'none',\n }} />\n </div>\n </NavIconButton>\n )}\n </div>\n\n <div\n ref={navBarRef}\n className=\"relative px-2 flex items-center justify-between\"\n >\n <div className=\"nav-content\" style={{ width: '56px' }} />\n\n <div className=\"nav-content absolute left-1/2 -translate-x-1/2\">\n <a href={logoHref} className=\"block hover:opacity-80 transition-opacity\">\n {logo ?? (\n <span style={{ fontSize: '18px', fontWeight: 900, color: '#fff' }}>M</span>\n )}\n </a>\n </div>\n\n <div className=\"nav-content\" style={{ display: 'flex', alignItems: 'center', gap: '20px' }}>\n {rightAction && (\n rightAction.href ? (\n <a href={rightAction.href} title={rightAction.label}>\n <NavIconButton>\n {rightAction.icon}\n </NavIconButton>\n </a>\n ) : (\n <NavIconButton onClick={rightAction.onClick}>\n {rightAction.icon}\n </NavIconButton>\n )\n )}\n {rightExtra}\n </div>\n </div>\n\n {hasMenu && (\n <ExpandedMenu\n ref={menuRef}\n menuGroups={menuGroups}\n xUrl={xUrl}\n communityLabel={communityLabel}\n menuFooter={menuFooter}\n onClose={() => setIsOpen(false)}\n />\n )}\n\n {leftPanel && (\n <div\n ref={leftPanelRef}\n className=\"fixed top-0 left-0 right-0 backdrop-blur-xl\"\n style={{ transform: 'translateY(-100%)', visibility: 'hidden', zIndex: 40, background: 'rgba(0, 0, 0, 0.95)' }}\n >\n <div className=\"menu-content p-8 pt-20 max-w-2xl mx-auto\">\n {typeof leftPanel === 'function' ? leftPanel(() => setIsLeftOpen(false)) : leftPanel}\n </div>\n </div>\n )}\n </div>\n\n {anyOpen && (\n <div\n className=\"fixed inset-0\"\n style={{ background: 'rgba(0, 0, 0, 0.5)', zIndex: 30 }}\n onClick={() => { setIsOpen(false); setIsLeftOpen(false); }}\n />\n )}\n </nav>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useState, useEffect, useCallback, type ReactNode } from 'react';\n\nexport type MoltenTheme = 'day' | 'night';\n\ninterface MoltenThemeContextValue {\n theme: MoltenTheme;\n setTheme: (theme: MoltenTheme) => void;\n toggle: () => void;\n}\n\nconst MoltenThemeContext = createContext<MoltenThemeContextValue>({\n theme: 'day',\n setTheme: () => {},\n toggle: () => {},\n});\n\nconst STORAGE_KEY = 'molten-theme';\n\nexport function MoltenThemeProvider({ children, defaultTheme = 'day' }: { children: ReactNode; defaultTheme?: MoltenTheme }) {\n const [theme, setThemeState] = useState<MoltenTheme>(defaultTheme);\n\n useEffect(() => {\n const stored = localStorage.getItem(STORAGE_KEY) as MoltenTheme | null;\n if (stored === 'day' || stored === 'night') {\n setThemeState(stored);\n document.documentElement.dataset.theme = stored;\n } else {\n document.documentElement.dataset.theme = defaultTheme;\n }\n }, [defaultTheme]);\n\n const setTheme = useCallback((next: MoltenTheme) => {\n setThemeState(next);\n document.documentElement.dataset.theme = next;\n localStorage.setItem(STORAGE_KEY, next);\n }, []);\n\n const toggle = useCallback(() => {\n setTheme(theme === 'day' ? 'night' : 'day');\n }, [theme, setTheme]);\n\n return (\n <MoltenThemeContext.Provider value={{ theme, setTheme, toggle }}>\n {children}\n </MoltenThemeContext.Provider>\n );\n}\n\nexport function useMoltenTheme() {\n return useContext(MoltenThemeContext);\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { TechGrid } from './TechGrid';\nimport { EmberField } from './EmberField';\nimport { useMoltenTheme } from '../theme';\n\nexport interface HalfHeroProps {\n children: ReactNode;\n nav?: ReactNode;\n className?: string;\n height?: string;\n fieldVariant?: 'default' | 'intense' | 'subtle' | 'vignette';\n showEmbers?: boolean;\n emberCount?: number;\n showGrid?: boolean;\n}\n\nconst fieldClasses = {\n default: 'molten-field',\n intense: 'molten-field-intense',\n subtle: 'molten-field-subtle',\n vignette: 'molten-field-vignette',\n} as const;\n\nexport function HalfHero({\n children,\n nav,\n className = '',\n height = '50vh',\n fieldVariant = 'default',\n showEmbers = true,\n emberCount = 40,\n showGrid = true,\n}: HalfHeroProps) {\n const { theme } = useMoltenTheme();\n const isNight = theme === 'night';\n const gridTone = isNight ? 'molten' : 'dark';\n const emberTone = isNight ? 'molten' : 'dark';\n\n return (\n <div\n className={`relative overflow-hidden flex flex-col ${fieldClasses[fieldVariant]} ${className}`}\n style={{ minHeight: height, color: isNight ? '#fff' : '#000' }}\n >\n {showGrid && (\n <TechGrid tone={gridTone} id=\"hero\" className=\"absolute inset-0 w-full h-full\" style={{ zIndex: 3 }} />\n )}\n {showEmbers && (\n <EmberField tone={emberTone} count={emberCount} style={{ zIndex: 5 }} />\n )}\n\n {nav && <div className=\"relative pt-4 he-nav-spacing\" style={{ zIndex: 30 }}>{nav}</div>}\n\n <div className=\"relative flex-1 flex flex-col items-center px-4 he-content-spacing\" style={{ zIndex: 10 }}>\n <div style={{ flex: 1 }} />\n {children}\n <div style={{ flex: 1 }} />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nexport interface ProductShellProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function ProductShell({\n children,\n className = '',\n}: ProductShellProps) {\n return (\n <main className={`relative min-h-screen bg-black text-white ${className}`}>\n {children}\n </main>\n );\n}\n","'use client';\n\nimport { useMoltenTheme } from '../theme';\n\nexport function ThemeToggle() {\n const { theme, toggle } = useMoltenTheme();\n const isNight = theme === 'night';\n const color = isNight ? '#71717a' : '#fff';\n\n return (\n <button\n onClick={toggle}\n className=\"relative flex items-center justify-center rounded-xl cursor-pointer rainbow-border-button text-white\"\n style={{\n width: 40,\n height: 44,\n background: 'rgba(24, 24, 27, 0.9)',\n backdropFilter: 'blur(24px)',\n }}\n >\n {isNight ? (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v3M12 19v3M4.22 4.22l2.12 2.12M17.66 17.66l2.12 2.12M2 12h3M19 12h3M4.22 19.78l2.12-2.12M17.66 6.34l2.12-2.12\" />\n </svg>\n )}\n </button>\n );\n}\n","'use client';\n\nimport { useMoltenTheme } from '../theme';\n\nexport interface LangButtonProps {\n locale: string;\n onClick?: () => void;\n isOpen?: boolean;\n}\n\nexport function LangButton({ locale, onClick, isOpen = false }: LangButtonProps) {\n const { theme } = useMoltenTheme();\n const color = theme === 'night' ? '#71717a' : '#fff';\n\n return (\n <button\n onClick={onClick}\n className=\"relative flex items-center justify-center rounded-xl cursor-pointer rainbow-border-button text-white\"\n style={{\n width: 40,\n height: 44,\n background: 'rgba(24, 24, 27, 0.9)',\n backdropFilter: 'blur(24px)',\n }}\n >\n {isOpen ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '5px' }}>\n <span style={{ display: 'block', width: '16px', height: '2px', background: color, transformOrigin: 'center', transform: 'translateY(7px) rotate(45deg)' }} />\n <span style={{ display: 'block', width: '16px', height: '2px', background: color, opacity: 0 }} />\n <span style={{ display: 'block', width: '16px', height: '2px', background: color, transformOrigin: 'center', transform: 'translateY(-7px) rotate(-45deg)' }} />\n </div>\n ) : (\n <span style={{ fontSize: '13px', fontWeight: 700, color, letterSpacing: '0.05em' }}>\n {locale === 'zh' ? 'CN' : locale.toUpperCase()}\n </span>\n )}\n </button>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nexport interface HeroCardProps {\n label: string;\n title: string;\n code?: string;\n description?: string;\n accentColor?: string;\n actionText?: string;\n onClick?: () => void;\n children?: ReactNode;\n}\n\nexport function HeroCard({\n label,\n title,\n code,\n description,\n accentColor = '#00e5ff',\n actionText,\n onClick,\n children,\n}: HeroCardProps) {\n return (\n <div\n onClick={onClick}\n className={`group relative p-5 sm:p-6 rounded-2xl glass-card molten-wave-card corner-frame w-full max-w-lg ${onClick ? 'cursor-pointer' : ''}`}\n >\n <span className=\"portal-label font-mono text-[11px] tracking-widest\" style={{ color: accentColor }}>\n // {label}\n </span>\n <h2 className=\"text-xl sm:text-2xl font-bold mt-2 text-white molten-wave-text\">\n {title}\n </h2>\n {code && (\n <div\n className=\"mt-4 rounded-lg p-3\"\n style={{\n background: 'rgba(0, 0, 0, 0.4)',\n border: '1px solid rgba(255, 255, 255, 0.06)',\n }}\n >\n <code className=\"text-xs sm:text-sm font-mono break-all\" style={{ color: accentColor }}>\n {code}\n </code>\n </div>\n )}\n {description && (\n <p className=\"text-xs text-zinc-500 mt-3 font-light leading-relaxed\">\n {description}\n </p>\n )}\n {children}\n {actionText && (\n <div className=\"mt-4 flex items-center justify-between\">\n <span className=\"text-xs text-zinc-500 molten-wave-text transition-all duration-300\">\n {actionText}\n </span>\n <span className=\"text-zinc-600 group-hover:translate-x-1.5 transition-all duration-300 text-lg molten-wave-text\">\n &rarr;\n </span>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, type RefObject } from 'react';\nimport gsap from 'gsap';\n\nexport function usePulseLabels(ref: RefObject<HTMLElement | null>, selector = '.portal-label', delay = 2.2) {\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const labels = el.querySelectorAll(selector);\n if (!labels.length) return;\n\n const pulse = gsap.timeline({ repeat: -1, delay });\n labels.forEach((label) => {\n pulse\n .to(label, { opacity: 0.15, duration: 0.8, ease: 'power1.inOut' })\n .to(label, { opacity: 1, duration: 0.8, ease: 'power1.inOut' });\n });\n\n return () => { pulse.kill(); };\n }, [ref, selector, delay]);\n}\n"],"mappings":"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","names":["jsx","useRef","useEffect","jsx","jsxs","useEffect","useRef","jsx","jsx","jsx","jsx","jsx","variantClasses","jsx","useEffect","jsx","jsxs","useEffect","useState","useRef","useEffect","jsx","jsxs","useState","useEffect","useCallback","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","useEffect","gsap"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moltenagentic/human-elements",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Shared design system and UI components for Molten's human-facing interfaces",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@9.15.0",