diff --git a/apps/web/src/app/[locale]/openclaw/live-ops-space/page.tsx b/apps/web/src/app/[locale]/openclaw/live-ops-space/page.tsx index 3bf13d898..c8f6974f7 100644 --- a/apps/web/src/app/[locale]/openclaw/live-ops-space/page.tsx +++ b/apps/web/src/app/[locale]/openclaw/live-ops-space/page.tsx @@ -110,11 +110,11 @@ function stateLabel(t: ReturnType, state: string): strin } function stateClass(state: string): string { - if (state === "working") return "border-[#4a90d9] bg-white/70 backdrop-blur-[20px] text-[#4a90d9] shadow-[0_0_15px_rgba(74,144,217,0.4)]"; - if (state === "verified") return "border-[#8fc29a] bg-white/70 backdrop-blur-[20px] text-[#17602a]"; - if (state === "blocked") return "border-[#e2a29b] bg-white/70 backdrop-blur-[20px] text-[#9f2f25]"; - if (state === "waiting") return "border-[#d9b36f] bg-white/70 backdrop-blur-[20px] text-[#8a5a08]"; - return "border-[#d8d3c7] bg-white/70 backdrop-blur-[20px] text-[#5f5b52]"; + if (state === "working") return "border-[#4a90d9]/50 bg-[#4a90d9]/10 backdrop-blur-[20px] text-[#60a5fa] shadow-[0_0_15px_rgba(74,144,217,0.3)]"; + if (state === "verified") return "border-[#4f9b62]/50 bg-[#4f9b62]/10 backdrop-blur-[20px] text-[#8fc29a]"; + if (state === "blocked") return "border-[#d95f4f]/50 bg-[#d95f4f]/10 backdrop-blur-[20px] text-[#e2a29b]"; + if (state === "waiting") return "border-[#f0bd69]/50 bg-[#f0bd69]/10 backdrop-blur-[20px] text-[#fcd34d]"; + return "border-white/10 bg-white/5 backdrop-blur-[20px] text-[#a3a097]"; } function stateFromWorkItemStatus(status: string): string { @@ -198,26 +198,33 @@ export default function OpenClawLiveOpsSpacePage({ return ( -
+
-
-
+ {/* Main Stage */} +
+
-

+

OpenClaw

-

+

{t("title")} + {status === "ready" && ( + + + + + )}

-
+
{status === "ready" ? ( @@ -234,7 +241,7 @@ export default function OpenClawLiveOpsSpacePage({
+ {/* Isometric Room */}
-
-
-
-
+ {/* Dark mode ISO Planes */} +
+
+
+ + {/* Server racks / Databanks */} +
- - + +
-
+
- - + +
-
-
- - + {/* Central AI Core Platform */} +
+
+ +
-
-
+ + {/* Secondary Platforms */} +
+
+ {/* Data Packets (Flow) */} {packetSlots.map((slot) => ( ))} + {/* Zones (Glass Capsules) */} {zones.map((zone) => { const Icon = zoneIconByKind[zone.kind] ?? Activity; return (
- + - + {zone.label}
); })} + {/* Work Items */} {workItems.map((item, index) => (
))} + {/* Agents */} {agents.map((agent, index) => (
{agent.state === "working" && ( -
+
)}
-
-
+
{agent.label}
))} -
-
- - {t("source.marker")} {shortValue(scene?.source.deploy_readback_marker)} + {/* Lighting overlay */} +
+ + {/* Footer Badges */} +
+ + {t("source.marker")} {shortValue(scene?.source.deploy_readback_marker)} {t("animation.loop")}{" "} - {animationLoopEnabled ? t("animation.on") : t("animation.off")} ·{" "} - {scene?.room.animation_loop.tick_ms ?? 0}ms + + {animationLoopEnabled ? t("animation.on") : t("animation.off")} + {" "} + · {scene?.room.animation_loop.tick_ms ?? 0}ms - + {t("source.updated")}{" "} - {updatedAt - ? updatedAt.toLocaleTimeString(locale, { - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - }) - : "--"} + + {updatedAt + ? updatedAt.toLocaleTimeString(locale, { + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + }) + : "--"} +
-