@moltenagentic/human-elements 1.0.7 → 1.0.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.
- package/dist/index.d.ts +23 -1
- package/dist/index.js +325 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -158,6 +158,28 @@ interface HeroCardProps {
|
|
|
158
158
|
}
|
|
159
159
|
declare function HeroCard({ label, title, code, description, accentColor, actionText, onClick, children, }: HeroCardProps): react_jsx_runtime.JSX.Element;
|
|
160
160
|
|
|
161
|
+
interface SlimNavProps {
|
|
162
|
+
logo?: ReactNode;
|
|
163
|
+
logoHref?: string;
|
|
164
|
+
menuGroups?: NavLinkGroup[];
|
|
165
|
+
leftExtra?: ReactNode;
|
|
166
|
+
leftPanel?: ReactNode | ((onClose: () => void) => ReactNode);
|
|
167
|
+
leftPanelOpen?: boolean;
|
|
168
|
+
onLeftPanelChange?: (open: boolean) => void;
|
|
169
|
+
rightAction?: NavAction;
|
|
170
|
+
rightExtra?: ReactNode;
|
|
171
|
+
xUrl?: string;
|
|
172
|
+
communityLabel?: string;
|
|
173
|
+
menuFooter?: ReactNode;
|
|
174
|
+
className?: string;
|
|
175
|
+
fieldVariant?: 'default' | 'intense' | 'subtle' | 'vignette';
|
|
176
|
+
showEmbers?: boolean;
|
|
177
|
+
emberCount?: number;
|
|
178
|
+
showGrid?: boolean;
|
|
179
|
+
showOverlays?: boolean;
|
|
180
|
+
}
|
|
181
|
+
declare function SlimNav({ logo, logoHref, menuGroups, leftExtra, leftPanel, leftPanelOpen, onLeftPanelChange, rightAction, rightExtra, xUrl, communityLabel, menuFooter, className, fieldVariant, showEmbers, emberCount, showGrid, }: SlimNavProps): react_jsx_runtime.JSX.Element;
|
|
182
|
+
|
|
161
183
|
type MoltenTheme = 'day' | 'night' | 'neon';
|
|
162
184
|
interface MoltenThemeContextValue {
|
|
163
185
|
theme: MoltenTheme;
|
|
@@ -172,4 +194,4 @@ declare function useMoltenTheme(): MoltenThemeContextValue;
|
|
|
172
194
|
|
|
173
195
|
declare function usePulseLabels(ref: RefObject<HTMLElement | null>, selector?: string, delay?: number): void;
|
|
174
196
|
|
|
175
|
-
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 };
|
|
197
|
+
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, SlimNav, type SlimNavProps, SphereGlow, type SphereGlowProps, TechGrid, type TechGridProps, type TechGridTone, ThemeToggle, Vignette, type VignetteProps, useMoltenTheme, usePulseLabels };
|
package/dist/index.js
CHANGED
|
@@ -1115,16 +1115,336 @@ function HeroCard({
|
|
|
1115
1115
|
);
|
|
1116
1116
|
}
|
|
1117
1117
|
|
|
1118
|
-
// src/
|
|
1119
|
-
import { useEffect as useEffect7 } from "react";
|
|
1118
|
+
// src/components/SlimNav.tsx
|
|
1119
|
+
import { useState as useState4, useRef as useRef5, useEffect as useEffect7, useCallback as useCallback3, forwardRef as forwardRef2 } from "react";
|
|
1120
1120
|
import gsap2 from "gsap";
|
|
1121
|
-
|
|
1121
|
+
import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1122
|
+
var BTN_SIZE2 = 40;
|
|
1123
|
+
var BTN_BG2 = "rgba(24, 24, 27, 0.9)";
|
|
1124
|
+
function NavIconButton2({
|
|
1125
|
+
children,
|
|
1126
|
+
onClick,
|
|
1127
|
+
className = "",
|
|
1128
|
+
connected,
|
|
1129
|
+
connectedLabel
|
|
1130
|
+
}) {
|
|
1131
|
+
return /* @__PURE__ */ jsxs9(
|
|
1132
|
+
"button",
|
|
1133
|
+
{
|
|
1134
|
+
onClick,
|
|
1135
|
+
className: `group relative flex items-center justify-center rounded-xl transition-all cursor-pointer rainbow-border-button text-white ${className}`,
|
|
1136
|
+
style: {
|
|
1137
|
+
width: BTN_SIZE2,
|
|
1138
|
+
height: Math.round(BTN_SIZE2 * 1.1),
|
|
1139
|
+
background: BTN_BG2,
|
|
1140
|
+
backdropFilter: "blur(24px)"
|
|
1141
|
+
},
|
|
1142
|
+
children: [
|
|
1143
|
+
children,
|
|
1144
|
+
connected && /* @__PURE__ */ jsx18("div", { style: { position: "absolute", top: 4, right: 4, width: 6, height: 6, borderRadius: "50%", background: "#00ff88" } }),
|
|
1145
|
+
connectedLabel && /* @__PURE__ */ jsx18(
|
|
1146
|
+
"div",
|
|
1147
|
+
{
|
|
1148
|
+
className: "pointer-events-none absolute -bottom-8 left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 whitespace-nowrap px-2 py-1 rounded-md text-[10px] font-medium text-white",
|
|
1149
|
+
style: { background: "rgba(24, 24, 27, 0.95)", border: "1px solid rgba(255,255,255,0.08)" },
|
|
1150
|
+
children: connectedLabel
|
|
1151
|
+
}
|
|
1152
|
+
)
|
|
1153
|
+
]
|
|
1154
|
+
}
|
|
1155
|
+
);
|
|
1156
|
+
}
|
|
1157
|
+
var ExpandedMenu2 = forwardRef2(
|
|
1158
|
+
({ menuGroups, xUrl, communityLabel, menuFooter, onClose }, ref) => {
|
|
1159
|
+
const colCount = menuGroups.length;
|
|
1160
|
+
return /* @__PURE__ */ jsx18(
|
|
1161
|
+
"div",
|
|
1162
|
+
{
|
|
1163
|
+
ref,
|
|
1164
|
+
className: "fixed top-0 left-0 right-0 backdrop-blur-xl",
|
|
1165
|
+
style: { transform: "translateY(-100%)", visibility: "hidden", zIndex: 40, background: "rgba(0, 0, 0, 0.95)" },
|
|
1166
|
+
children: /* @__PURE__ */ jsxs9("div", { className: "menu-content p-8 pt-20 mx-auto", style: { maxWidth: colCount >= 3 ? "48rem" : "42rem" }, children: [
|
|
1167
|
+
/* @__PURE__ */ jsx18(
|
|
1168
|
+
"div",
|
|
1169
|
+
{
|
|
1170
|
+
className: "grid gap-8",
|
|
1171
|
+
style: { gridTemplateColumns: `repeat(${colCount}, 1fr)` },
|
|
1172
|
+
children: menuGroups.map((group) => /* @__PURE__ */ jsxs9("div", { className: "space-y-1", children: [
|
|
1173
|
+
/* @__PURE__ */ jsx18("span", { className: "text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium block mb-4", children: group.title }),
|
|
1174
|
+
group.links.map((link) => /* @__PURE__ */ jsx18(
|
|
1175
|
+
"a",
|
|
1176
|
+
{
|
|
1177
|
+
href: link.href,
|
|
1178
|
+
target: link.external ? "_blank" : void 0,
|
|
1179
|
+
rel: link.external ? "noopener noreferrer" : void 0,
|
|
1180
|
+
onClick: onClose,
|
|
1181
|
+
className: "block text-2xl font-light text-white hover:text-zinc-300 transition-colors py-1",
|
|
1182
|
+
children: link.label
|
|
1183
|
+
},
|
|
1184
|
+
link.href
|
|
1185
|
+
))
|
|
1186
|
+
] }, group.title))
|
|
1187
|
+
}
|
|
1188
|
+
),
|
|
1189
|
+
/* @__PURE__ */ jsxs9("div", { className: "mt-6 pt-6 flex items-center justify-between", style: { borderTop: "1px solid rgba(255,255,255,0.06)" }, children: [
|
|
1190
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-3", children: [
|
|
1191
|
+
/* @__PURE__ */ jsx18("span", { className: "text-[10px] tracking-[0.2em] text-zinc-500 uppercase font-medium", children: communityLabel }),
|
|
1192
|
+
/* @__PURE__ */ jsx18(
|
|
1193
|
+
"a",
|
|
1194
|
+
{
|
|
1195
|
+
href: xUrl,
|
|
1196
|
+
target: "_blank",
|
|
1197
|
+
rel: "noopener noreferrer",
|
|
1198
|
+
className: "w-8 h-8 rounded-full bg-zinc-800 flex items-center justify-center text-white hover:bg-zinc-700 transition-colors",
|
|
1199
|
+
children: /* @__PURE__ */ jsx18("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx18("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" }) })
|
|
1200
|
+
}
|
|
1201
|
+
)
|
|
1202
|
+
] }),
|
|
1203
|
+
menuFooter && /* @__PURE__ */ jsx18("div", { children: menuFooter })
|
|
1204
|
+
] })
|
|
1205
|
+
] })
|
|
1206
|
+
}
|
|
1207
|
+
);
|
|
1208
|
+
}
|
|
1209
|
+
);
|
|
1210
|
+
ExpandedMenu2.displayName = "SlimNavExpandedMenu";
|
|
1211
|
+
function SlimNav({
|
|
1212
|
+
logo,
|
|
1213
|
+
logoHref = "/",
|
|
1214
|
+
menuGroups = [],
|
|
1215
|
+
leftExtra,
|
|
1216
|
+
leftPanel,
|
|
1217
|
+
leftPanelOpen = false,
|
|
1218
|
+
onLeftPanelChange,
|
|
1219
|
+
rightAction,
|
|
1220
|
+
rightExtra,
|
|
1221
|
+
xUrl = "https://x.com/moltenagentic",
|
|
1222
|
+
communityLabel = "Community",
|
|
1223
|
+
menuFooter,
|
|
1224
|
+
className = "",
|
|
1225
|
+
fieldVariant = "intense",
|
|
1226
|
+
showEmbers = true,
|
|
1227
|
+
emberCount = 20,
|
|
1228
|
+
showGrid = false
|
|
1229
|
+
}) {
|
|
1230
|
+
const { theme } = useMoltenTheme();
|
|
1231
|
+
const isNeon = theme === "neon";
|
|
1232
|
+
const isNight = theme === "night";
|
|
1233
|
+
const gridTone = isNeon ? "neon" : isNight ? "molten" : "dark";
|
|
1234
|
+
const emberTone = isNeon ? "neon-pink" : isNight ? "molten" : "dark";
|
|
1235
|
+
const bgColor = isNeon ? "#00aa55" : isNight ? "#000000" : "#e84810";
|
|
1236
|
+
const [isOpen, setIsOpen] = useState4(false);
|
|
1237
|
+
const [leftPanelVisible, setLeftPanelVisible] = useState4(false);
|
|
1238
|
+
const isLeftOpen = leftPanelOpen;
|
|
1239
|
+
const setIsLeftOpen = useCallback3((v) => {
|
|
1240
|
+
const next = typeof v === "function" ? v(leftPanelOpen) : v;
|
|
1241
|
+
onLeftPanelChange?.(next);
|
|
1242
|
+
}, [leftPanelOpen, onLeftPanelChange]);
|
|
1243
|
+
const navBarRef = useRef5(null);
|
|
1244
|
+
const menuRef = useRef5(null);
|
|
1245
|
+
const leftPanelRef = useRef5(null);
|
|
1246
|
+
const isAnimating = useRef5(false);
|
|
1247
|
+
const hasMenu = menuGroups.length > 0;
|
|
1248
|
+
const slideOpen = useCallback3((panelRef) => {
|
|
1249
|
+
if (isAnimating.current || !navBarRef.current || !panelRef.current) return;
|
|
1250
|
+
isAnimating.current = true;
|
|
1251
|
+
const tl = gsap2.timeline({
|
|
1252
|
+
onComplete: () => {
|
|
1253
|
+
isAnimating.current = false;
|
|
1254
|
+
}
|
|
1255
|
+
});
|
|
1256
|
+
gsap2.set(panelRef.current, { visibility: "visible" });
|
|
1257
|
+
tl.to(navBarRef.current.querySelectorAll(".nav-content"), {
|
|
1258
|
+
opacity: 0,
|
|
1259
|
+
duration: 0.15
|
|
1260
|
+
});
|
|
1261
|
+
tl.to(panelRef.current, {
|
|
1262
|
+
y: 0,
|
|
1263
|
+
duration: 0.4,
|
|
1264
|
+
ease: "power3.out"
|
|
1265
|
+
}, "-=0.1");
|
|
1266
|
+
tl.to(panelRef.current.querySelectorAll(".menu-content > div"), {
|
|
1267
|
+
opacity: 1,
|
|
1268
|
+
y: 0,
|
|
1269
|
+
duration: 0.3,
|
|
1270
|
+
stagger: 0.05
|
|
1271
|
+
}, "-=0.2");
|
|
1272
|
+
}, []);
|
|
1273
|
+
const slideClose = useCallback3((panelRef, onDone) => {
|
|
1274
|
+
if (isAnimating.current || !navBarRef.current || !panelRef.current) return;
|
|
1275
|
+
isAnimating.current = true;
|
|
1276
|
+
const panel = panelRef.current;
|
|
1277
|
+
const tl = gsap2.timeline({
|
|
1278
|
+
onComplete: () => {
|
|
1279
|
+
isAnimating.current = false;
|
|
1280
|
+
gsap2.set(panel, { visibility: "hidden", y: "-100%" });
|
|
1281
|
+
onDone?.();
|
|
1282
|
+
}
|
|
1283
|
+
});
|
|
1284
|
+
tl.to(panel.querySelectorAll(".menu-content > div"), {
|
|
1285
|
+
opacity: 0,
|
|
1286
|
+
y: -10,
|
|
1287
|
+
duration: 0.2,
|
|
1288
|
+
stagger: 0.03
|
|
1289
|
+
});
|
|
1290
|
+
tl.to(panel, {
|
|
1291
|
+
y: "-100%",
|
|
1292
|
+
duration: 0.35,
|
|
1293
|
+
ease: "power3.in"
|
|
1294
|
+
}, "-=0.1");
|
|
1295
|
+
tl.to(navBarRef.current.querySelectorAll(".nav-content"), {
|
|
1296
|
+
opacity: 1,
|
|
1297
|
+
duration: 0.2
|
|
1298
|
+
}, "-=0.15");
|
|
1299
|
+
}, []);
|
|
1300
|
+
useEffect7(() => {
|
|
1301
|
+
if (isOpen) slideOpen(menuRef);
|
|
1302
|
+
else slideClose(menuRef);
|
|
1303
|
+
}, [isOpen, slideOpen, slideClose]);
|
|
1122
1304
|
useEffect7(() => {
|
|
1305
|
+
if (isLeftOpen) {
|
|
1306
|
+
setLeftPanelVisible(true);
|
|
1307
|
+
if (isOpen) setIsOpen(false);
|
|
1308
|
+
slideOpen(leftPanelRef);
|
|
1309
|
+
} else {
|
|
1310
|
+
slideClose(leftPanelRef, () => setLeftPanelVisible(false));
|
|
1311
|
+
}
|
|
1312
|
+
}, [isLeftOpen, slideOpen, slideClose]);
|
|
1313
|
+
const toggleMenu = useCallback3(() => {
|
|
1314
|
+
if (isLeftOpen) setIsLeftOpen(false);
|
|
1315
|
+
setIsOpen((v) => !v);
|
|
1316
|
+
}, [isLeftOpen]);
|
|
1317
|
+
useEffect7(() => {
|
|
1318
|
+
const handleKeyDown = (e) => {
|
|
1319
|
+
if (e.key === "Escape") {
|
|
1320
|
+
if (isOpen) setIsOpen(false);
|
|
1321
|
+
if (isLeftOpen) setIsLeftOpen(false);
|
|
1322
|
+
}
|
|
1323
|
+
};
|
|
1324
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
1325
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
1326
|
+
}, [isOpen, isLeftOpen]);
|
|
1327
|
+
const anyOpen = isOpen || isLeftOpen;
|
|
1328
|
+
return /* @__PURE__ */ jsxs9(
|
|
1329
|
+
"div",
|
|
1330
|
+
{
|
|
1331
|
+
className: `relative overflow-hidden ${className}`,
|
|
1332
|
+
style: { background: bgColor, zIndex: 20 },
|
|
1333
|
+
children: [
|
|
1334
|
+
showGrid && /* @__PURE__ */ jsx18(TechGrid, { tone: gridTone, id: "slim-nav", className: "absolute inset-0 w-full h-full", style: { zIndex: 3 } }),
|
|
1335
|
+
showEmbers && /* @__PURE__ */ jsx18(EmberField, { tone: emberTone, count: emberCount, style: { zIndex: 5 } }),
|
|
1336
|
+
/* @__PURE__ */ jsx18("div", { className: "relative", style: { zIndex: 30, paddingTop: 16, paddingBottom: 16 }, children: /* @__PURE__ */ jsxs9("nav", { className: "relative z-50 w-full max-w-2xl mx-auto px-4", children: [
|
|
1337
|
+
/* @__PURE__ */ jsxs9("div", { className: "relative", children: [
|
|
1338
|
+
leftExtra && /* @__PURE__ */ jsx18("div", { style: {
|
|
1339
|
+
position: "absolute",
|
|
1340
|
+
left: "8px",
|
|
1341
|
+
top: "50%",
|
|
1342
|
+
transform: "translateY(-50%)",
|
|
1343
|
+
zIndex: isLeftOpen ? 50 : 60,
|
|
1344
|
+
opacity: isOpen ? 0 : 1,
|
|
1345
|
+
pointerEvents: isOpen ? "none" : "auto",
|
|
1346
|
+
transition: "opacity 0.15s"
|
|
1347
|
+
}, children: leftExtra }),
|
|
1348
|
+
hasMenu && /* @__PURE__ */ jsx18("div", { style: {
|
|
1349
|
+
position: "absolute",
|
|
1350
|
+
left: leftExtra ? "68px" : "8px",
|
|
1351
|
+
top: "50%",
|
|
1352
|
+
transform: "translateY(-50%)",
|
|
1353
|
+
zIndex: isLeftOpen ? 30 : 60,
|
|
1354
|
+
opacity: isLeftOpen ? 0 : 1,
|
|
1355
|
+
pointerEvents: isLeftOpen ? "none" : "auto",
|
|
1356
|
+
transition: "opacity 0.15s"
|
|
1357
|
+
}, children: /* @__PURE__ */ jsx18(NavIconButton2, { onClick: toggleMenu, children: /* @__PURE__ */ jsxs9("div", { style: { display: "flex", flexDirection: "column", gap: "5px" }, children: [
|
|
1358
|
+
/* @__PURE__ */ jsx18("span", { style: {
|
|
1359
|
+
display: "block",
|
|
1360
|
+
width: "16px",
|
|
1361
|
+
height: "2px",
|
|
1362
|
+
background: "currentColor",
|
|
1363
|
+
transition: "all 0.2s",
|
|
1364
|
+
transformOrigin: "center",
|
|
1365
|
+
transform: isOpen ? "translateY(7px) rotate(45deg)" : "none"
|
|
1366
|
+
} }),
|
|
1367
|
+
/* @__PURE__ */ jsx18("span", { style: {
|
|
1368
|
+
display: "block",
|
|
1369
|
+
width: "16px",
|
|
1370
|
+
height: "2px",
|
|
1371
|
+
background: "currentColor",
|
|
1372
|
+
transition: "all 0.2s",
|
|
1373
|
+
opacity: isOpen ? 0 : 1
|
|
1374
|
+
} }),
|
|
1375
|
+
/* @__PURE__ */ jsx18("span", { style: {
|
|
1376
|
+
display: "block",
|
|
1377
|
+
width: "16px",
|
|
1378
|
+
height: "2px",
|
|
1379
|
+
background: "currentColor",
|
|
1380
|
+
transition: "all 0.2s",
|
|
1381
|
+
transformOrigin: "center",
|
|
1382
|
+
transform: isOpen ? "translateY(-7px) rotate(-45deg)" : "none"
|
|
1383
|
+
} })
|
|
1384
|
+
] }) }) }),
|
|
1385
|
+
/* @__PURE__ */ jsxs9(
|
|
1386
|
+
"div",
|
|
1387
|
+
{
|
|
1388
|
+
ref: navBarRef,
|
|
1389
|
+
className: "relative px-2 flex items-center justify-between",
|
|
1390
|
+
children: [
|
|
1391
|
+
/* @__PURE__ */ jsx18("div", { className: "nav-content", style: { width: "56px" } }),
|
|
1392
|
+
/* @__PURE__ */ jsx18("div", { className: "nav-content absolute left-1/2 -translate-x-1/2", children: /* @__PURE__ */ jsx18("a", { href: logoHref, className: "block hover:opacity-80 transition-opacity", children: logo ?? /* @__PURE__ */ jsx18("span", { style: { fontSize: "18px", fontWeight: 900, color: "#fff" }, children: "M" }) }) }),
|
|
1393
|
+
/* @__PURE__ */ jsxs9("div", { className: "nav-content", style: { display: "flex", alignItems: "center", gap: "20px" }, children: [
|
|
1394
|
+
rightAction && (rightAction.href ? /* @__PURE__ */ jsx18("a", { href: rightAction.href, title: rightAction.label, children: /* @__PURE__ */ jsx18(NavIconButton2, { connected: rightAction.connected, connectedLabel: rightAction.connectedLabel, children: rightAction.icon }) }) : /* @__PURE__ */ jsx18(NavIconButton2, { onClick: rightAction.onClick, connected: rightAction.connected, connectedLabel: rightAction.connectedLabel, children: rightAction.icon })),
|
|
1395
|
+
rightExtra
|
|
1396
|
+
] })
|
|
1397
|
+
]
|
|
1398
|
+
}
|
|
1399
|
+
),
|
|
1400
|
+
hasMenu && /* @__PURE__ */ jsx18(
|
|
1401
|
+
ExpandedMenu2,
|
|
1402
|
+
{
|
|
1403
|
+
ref: menuRef,
|
|
1404
|
+
menuGroups,
|
|
1405
|
+
xUrl,
|
|
1406
|
+
communityLabel,
|
|
1407
|
+
menuFooter,
|
|
1408
|
+
onClose: () => setIsOpen(false)
|
|
1409
|
+
}
|
|
1410
|
+
),
|
|
1411
|
+
leftPanel && /* @__PURE__ */ jsx18(
|
|
1412
|
+
"div",
|
|
1413
|
+
{
|
|
1414
|
+
ref: leftPanelRef,
|
|
1415
|
+
className: "fixed top-0 left-0 right-0 backdrop-blur-xl",
|
|
1416
|
+
style: { transform: "translateY(-100%)", visibility: "hidden", zIndex: 40, background: "rgba(0, 0, 0, 0.95)" },
|
|
1417
|
+
children: /* @__PURE__ */ jsx18("div", { className: "menu-content p-8 pt-20 max-w-2xl mx-auto", children: typeof leftPanel === "function" ? leftPanel(() => setIsLeftOpen(false)) : leftPanel })
|
|
1418
|
+
}
|
|
1419
|
+
)
|
|
1420
|
+
] }),
|
|
1421
|
+
anyOpen && /* @__PURE__ */ jsx18(
|
|
1422
|
+
"div",
|
|
1423
|
+
{
|
|
1424
|
+
className: "fixed inset-0",
|
|
1425
|
+
style: { background: "rgba(0, 0, 0, 0.5)", zIndex: 30 },
|
|
1426
|
+
onClick: () => {
|
|
1427
|
+
setIsOpen(false);
|
|
1428
|
+
setIsLeftOpen(false);
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
)
|
|
1432
|
+
] }) })
|
|
1433
|
+
]
|
|
1434
|
+
}
|
|
1435
|
+
);
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
// src/hooks/usePulseLabels.ts
|
|
1439
|
+
import { useEffect as useEffect8 } from "react";
|
|
1440
|
+
import gsap3 from "gsap";
|
|
1441
|
+
function usePulseLabels(ref, selector = ".portal-label", delay = 2.2) {
|
|
1442
|
+
useEffect8(() => {
|
|
1123
1443
|
const el = ref.current;
|
|
1124
1444
|
if (!el) return;
|
|
1125
1445
|
const labels = el.querySelectorAll(selector);
|
|
1126
1446
|
if (!labels.length) return;
|
|
1127
|
-
const pulse =
|
|
1447
|
+
const pulse = gsap3.timeline({ repeat: -1, delay });
|
|
1128
1448
|
labels.forEach((label) => {
|
|
1129
1449
|
pulse.to(label, { opacity: 0.15, duration: 0.8, ease: "power1.inOut" }).to(label, { opacity: 1, duration: 0.8, ease: "power1.inOut" });
|
|
1130
1450
|
});
|
|
@@ -1147,6 +1467,7 @@ export {
|
|
|
1147
1467
|
Page,
|
|
1148
1468
|
ProductNav,
|
|
1149
1469
|
ProductShell,
|
|
1470
|
+
SlimNav,
|
|
1150
1471
|
SphereGlow,
|
|
1151
1472
|
TechGrid,
|
|
1152
1473
|
ThemeToggle,
|
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","../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' | 'neon';\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 neon: {\n line: 'rgba(255,51,102,0.14)',\n cross: 'rgba(255,51,102,0.35)',\n dot: 'rgba(255,51,102,0.2)',\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' | 'neon-pink';\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 'neon-pink': [\n [255, 51, 102],\n [220, 40, 80],\n [255, 80, 130],\n [200, 30, 70],\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 connected?: boolean;\n connectedLabel?: 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 connected,\n connectedLabel,\n}: {\n children: ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n className?: string;\n connected?: boolean;\n connectedLabel?: string;\n}) {\n return (\n <button\n onClick={onClick}\n className={`group 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 {connected && (\n <div style={{ position: 'absolute', top: 4, right: 4, width: 6, height: 6, borderRadius: '50%', background: '#00ff88' }} />\n )}\n {connectedLabel && (\n <div\n className=\"pointer-events-none absolute -bottom-8 left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 whitespace-nowrap px-2 py-1 rounded-md text-[10px] font-medium text-white\"\n style={{ background: 'rgba(24, 24, 27, 0.95)', border: '1px solid rgba(255,255,255,0.08)' }}\n >\n {connectedLabel}\n </div>\n )}\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 mx-auto\" style={{ maxWidth: colCount >= 3 ? '48rem' : '42rem' }}>\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 connected={rightAction.connected} connectedLabel={rightAction.connectedLabel}>\n {rightAction.icon}\n </NavIconButton>\n </a>\n ) : (\n <NavIconButton onClick={rightAction.onClick} connected={rightAction.connected} connectedLabel={rightAction.connectedLabel}>\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' | 'neon';\n\nconst THEMES: MoltenTheme[] = ['day', 'night', 'neon'];\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\nfunction isValidTheme(v: string | null): v is MoltenTheme {\n return v === 'day' || v === 'night' || v === 'neon';\n}\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);\n if (isValidTheme(stored)) {\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 const idx = THEMES.indexOf(theme);\n setTheme(THEMES[(idx + 1) % THEMES.length]);\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 isNeon = theme === 'neon';\n const isNight = theme === 'night';\n\n const gridTone = isNeon ? 'neon' : isNight ? 'molten' : 'dark';\n const emberTone = isNeon ? 'neon-pink' : isNight ? 'molten' : 'dark';\n const textColor = isNight ? '#fff' : '#000';\n\n const neonBg = 'radial-gradient(ellipse at 50% 40%, #00ff88 0%, #00dd77 30%, #00aa55 65%, #006633 100%)';\n\n return (\n <div\n className={`relative overflow-hidden flex flex-col ${isNeon ? '' : fieldClasses[fieldVariant]} ${className}`}\n style={{ minHeight: height, color: textColor, ...(isNeon ? { background: neonBg } : {}) }}\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\n const color =\n theme === 'neon' ? '#00ff88' :\n theme === 'night' ? '#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 {theme === 'neon' ? (\n /* 60s comic-book lightning bolt — thick top, sharp point at bottom */\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill={color}>\n <path d=\"M15 2L8 13h4l-3 9 10-13h-5z\" />\n </svg>\n ) : theme === 'night' ? (\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 →\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"]}
|
|
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/components/SlimNav.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' | 'neon';\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 neon: {\n line: 'rgba(255,51,102,0.14)',\n cross: 'rgba(255,51,102,0.35)',\n dot: 'rgba(255,51,102,0.2)',\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' | 'neon-pink';\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 'neon-pink': [\n [255, 51, 102],\n [220, 40, 80],\n [255, 80, 130],\n [200, 30, 70],\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 connected?: boolean;\n connectedLabel?: 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 connected,\n connectedLabel,\n}: {\n children: ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n className?: string;\n connected?: boolean;\n connectedLabel?: string;\n}) {\n return (\n <button\n onClick={onClick}\n className={`group 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 {connected && (\n <div style={{ position: 'absolute', top: 4, right: 4, width: 6, height: 6, borderRadius: '50%', background: '#00ff88' }} />\n )}\n {connectedLabel && (\n <div\n className=\"pointer-events-none absolute -bottom-8 left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 whitespace-nowrap px-2 py-1 rounded-md text-[10px] font-medium text-white\"\n style={{ background: 'rgba(24, 24, 27, 0.95)', border: '1px solid rgba(255,255,255,0.08)' }}\n >\n {connectedLabel}\n </div>\n )}\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 mx-auto\" style={{ maxWidth: colCount >= 3 ? '48rem' : '42rem' }}>\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 connected={rightAction.connected} connectedLabel={rightAction.connectedLabel}>\n {rightAction.icon}\n </NavIconButton>\n </a>\n ) : (\n <NavIconButton onClick={rightAction.onClick} connected={rightAction.connected} connectedLabel={rightAction.connectedLabel}>\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' | 'neon';\n\nconst THEMES: MoltenTheme[] = ['day', 'night', 'neon'];\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\nfunction isValidTheme(v: string | null): v is MoltenTheme {\n return v === 'day' || v === 'night' || v === 'neon';\n}\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);\n if (isValidTheme(stored)) {\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 const idx = THEMES.indexOf(theme);\n setTheme(THEMES[(idx + 1) % THEMES.length]);\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 isNeon = theme === 'neon';\n const isNight = theme === 'night';\n\n const gridTone = isNeon ? 'neon' : isNight ? 'molten' : 'dark';\n const emberTone = isNeon ? 'neon-pink' : isNight ? 'molten' : 'dark';\n const textColor = isNight ? '#fff' : '#000';\n\n const neonBg = 'radial-gradient(ellipse at 50% 40%, #00ff88 0%, #00dd77 30%, #00aa55 65%, #006633 100%)';\n\n return (\n <div\n className={`relative overflow-hidden flex flex-col ${isNeon ? '' : fieldClasses[fieldVariant]} ${className}`}\n style={{ minHeight: height, color: textColor, ...(isNeon ? { background: neonBg } : {}) }}\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\n const color =\n theme === 'neon' ? '#00ff88' :\n theme === 'night' ? '#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 {theme === 'neon' ? (\n /* 60s comic-book lightning bolt — thick top, sharp point at bottom */\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill={color}>\n <path d=\"M15 2L8 13h4l-3 9 10-13h-5z\" />\n </svg>\n ) : theme === 'night' ? (\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 →\n </span>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback, forwardRef, type ReactNode } from 'react';\nimport gsap from 'gsap';\nimport { TechGrid } from './TechGrid';\nimport { EmberField } from './EmberField';\nimport { useMoltenTheme } from '../theme';\nimport type { NavLinkGroup, NavAction } from './ProductNav';\n\nexport interface SlimNavProps {\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 fieldVariant?: 'default' | 'intense' | 'subtle' | 'vignette';\n showEmbers?: boolean;\n emberCount?: number;\n showGrid?: boolean;\n showOverlays?: boolean;\n}\n\nconst BTN_SIZE = 40;\nconst BTN_BG = 'rgba(24, 24, 27, 0.9)';\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\nfunction NavIconButton({\n children,\n onClick,\n className = '',\n connected,\n connectedLabel,\n}: {\n children: ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n className?: string;\n connected?: boolean;\n connectedLabel?: string;\n}) {\n return (\n <button\n onClick={onClick}\n className={`group 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 {connected && (\n <div style={{ position: 'absolute', top: 4, right: 4, width: 6, height: 6, borderRadius: '50%', background: '#00ff88' }} />\n )}\n {connectedLabel && (\n <div\n className=\"pointer-events-none absolute -bottom-8 left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-100 transition-opacity duration-200 whitespace-nowrap px-2 py-1 rounded-md text-[10px] font-medium text-white\"\n style={{ background: 'rgba(24, 24, 27, 0.95)', border: '1px solid rgba(255,255,255,0.08)' }}\n >\n {connectedLabel}\n </div>\n )}\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 mx-auto\" style={{ maxWidth: colCount >= 3 ? '48rem' : '42rem' }}>\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 </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 = 'SlimNavExpandedMenu';\n\nexport function SlimNav({\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 fieldVariant = 'intense',\n showEmbers = true,\n emberCount = 20,\n showGrid = false,\n}: SlimNavProps) {\n const { theme } = useMoltenTheme();\n const isNeon = theme === 'neon';\n const isNight = theme === 'night';\n\n const gridTone = isNeon ? 'neon' : isNight ? 'molten' : 'dark';\n const emberTone = isNeon ? 'neon-pink' : isNight ? 'molten' : 'dark';\n\n const bgColor = isNeon ? '#00aa55' : isNight ? '#000000' : '#e84810';\n\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 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 <div\n className={`relative overflow-hidden ${className}`}\n style={{ background: bgColor, zIndex: 20 }}\n >\n {showGrid && (\n <TechGrid tone={gridTone} id=\"slim-nav\" 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 <div className=\"relative\" style={{ zIndex: 30, paddingTop: 16, paddingBottom: 16 }}>\n <nav className=\"relative z-50 w-full max-w-2xl mx-auto px-4\">\n <div className=\"relative\">\n {leftExtra && (\n <div style={{\n position: 'absolute', left: '8px', top: '50%', transform: 'translateY(-50%)',\n zIndex: isLeftOpen ? 50 : 60,\n opacity: isOpen ? 0 : 1,\n pointerEvents: isOpen ? 'none' : 'auto',\n transition: 'opacity 0.15s',\n }}>\n {leftExtra}\n </div>\n )}\n {hasMenu && (\n <div style={{\n position: 'absolute', left: leftExtra ? '68px' : '8px', top: '50%', transform: 'translateY(-50%)',\n zIndex: isLeftOpen ? 30 : 60,\n opacity: isLeftOpen ? 0 : 1,\n pointerEvents: isLeftOpen ? 'none' : 'auto',\n transition: 'opacity 0.15s',\n }}>\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 </div>\n )}\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 connected={rightAction.connected} connectedLabel={rightAction.connectedLabel}>\n {rightAction.icon}\n </NavIconButton>\n </a>\n ) : (\n <NavIconButton onClick={rightAction.onClick} connected={rightAction.connected} connectedLabel={rightAction.connectedLabel}>\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 </div>\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","useState","useRef","useEffect","useCallback","forwardRef","gsap","jsx","jsxs","BTN_SIZE","BTN_BG","NavIconButton","jsxs","BTN_SIZE","BTN_BG","jsx","ExpandedMenu","forwardRef","useState","useCallback","useRef","gsap","useEffect","useEffect","gsap"]}
|