UI: refine panels, sidebar, chat dock, add BuyCredits page and style tweaks
This commit is contained in:
@@ -29,23 +29,18 @@ const AgentPanel: React.FC<AgentPanelProps> = ({ agents, activeAgentId, onChange
|
||||
], []);
|
||||
|
||||
return (
|
||||
<div className="h-full w-full border border-luxury-gold/25 rounded-2xl p-4 md:p-6 bg-deep-forest/50 backdrop-blur-xl overflow-hidden flex flex-col shadow-luxury-inner">
|
||||
<div className="flex items-center justify-between mb-4">
|
||||
<h3 className="font-playfair text-xl text-cream">Personal Assistant</h3>
|
||||
<div className="text-cream/80 text-sm font-montserrat">
|
||||
{active.name}
|
||||
</div>
|
||||
</div>
|
||||
<div className="h-full w-full rounded-xl bg-deep-forest/60 backdrop-blur-xl overflow-hidden flex flex-col shadow-inner">
|
||||
{/* Removed heading & static active name per user request */}
|
||||
|
||||
<div className="relative rounded-xl bg-gradient-to-br from-deep-forest/60 to-rich-brown/40 border border-luxury-gold/25 overflow-hidden flex-1">
|
||||
<div className={`absolute inset-0 opacity-40 bg-gradient-to-br ${active.color}`} />
|
||||
<div className="relative flex-1">
|
||||
<div className={`absolute inset-0 opacity-35 bg-gradient-to-br ${active.color}`} />
|
||||
|
||||
{/* Creative Orbital Agent Display */}
|
||||
<div className="absolute inset-0 grid place-items-center">
|
||||
{/* Central Hub */}
|
||||
<div className="relative">
|
||||
{/* Outer orbital ring */}
|
||||
<div className="w-72 h-72 rounded-full border border-luxury-gold/20 animate-spin-ultra-slow relative">
|
||||
<div className="w-72 h-72 rounded-full border border-luxury-gold/15 relative">
|
||||
{/* Orbital path indicator */}
|
||||
<div className="absolute inset-4 rounded-full border border-luxury-gold/10"></div>
|
||||
<div className="absolute inset-8 rounded-full border border-luxury-gold/5"></div>
|
||||
@@ -63,7 +58,7 @@ const AgentPanel: React.FC<AgentPanelProps> = ({ agents, activeAgentId, onChange
|
||||
<div key={agent.id} className="contents">
|
||||
<button
|
||||
onClick={() => onChangeAgent(agent.id)}
|
||||
className={`absolute w-14 h-14 rounded-2xl transition-all duration-500 hover:scale-125 focus:outline-none group ${
|
||||
className={`absolute w-12 h-12 rounded-xl transition-all duration-300 hover:scale-125 focus:outline-none group ${
|
||||
isActive
|
||||
? 'bg-gradient-to-br from-luxury-gold/60 to-brass/60 border-2 border-luxury-gold shadow-[0_0_25px_rgba(197,157,89,0.8)] scale-110 z-10'
|
||||
: 'bg-deep-forest/70 border border-luxury-gold/30 hover:border-luxury-gold/60 hover:bg-deep-forest/80'
|
||||
@@ -71,7 +66,7 @@ const AgentPanel: React.FC<AgentPanelProps> = ({ agents, activeAgentId, onChange
|
||||
style={{
|
||||
left: '50%',
|
||||
top: '50%',
|
||||
transform: `translate(${x - 28}px, ${y - 28}px)`,
|
||||
transform: `translate(${x - 24}px, ${y - 24}px)`,
|
||||
}}
|
||||
title={agent.name}
|
||||
>
|
||||
@@ -97,15 +92,15 @@ const AgentPanel: React.FC<AgentPanelProps> = ({ agents, activeAgentId, onChange
|
||||
</button>
|
||||
|
||||
{/* Tooltip positioned outside rotating container */}
|
||||
<div
|
||||
className="absolute opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none z-50"
|
||||
<div
|
||||
className="absolute z-50 pointer-events-none"
|
||||
style={{
|
||||
left: '50%',
|
||||
top: '50%',
|
||||
transform: `translate(${x - 28}px, ${y + 40}px)`,
|
||||
transform: `translate(${x - 24}px, ${y + 40}px)`,
|
||||
}}
|
||||
>
|
||||
<div className="bg-deep-forest/95 text-cream text-sm px-3 py-2 rounded-xl border border-luxury-gold/40 whitespace-nowrap font-montserrat font-medium shadow-[0_4px_12px_rgba(0,0,0,0.4)] -translate-x-1/2">
|
||||
<div className="opacity-0 group-hover:opacity-100 transition-opacity duration-150 bg-deep-forest/95 text-cream/90 text-[11px] px-2 py-1 rounded-md border border-luxury-gold/30 whitespace-nowrap font-montserrat font-medium shadow-[0_2px_4px_rgba(0,0,0,0.4)] -translate-x-1/2">
|
||||
{agent.name}
|
||||
</div>
|
||||
</div>
|
||||
@@ -115,36 +110,18 @@ const AgentPanel: React.FC<AgentPanelProps> = ({ agents, activeAgentId, onChange
|
||||
</div>
|
||||
|
||||
{/* Central Control Hub */}
|
||||
<div className="absolute top-1/2 left-1/2 w-20 h-20 -translate-x-1/2 -translate-y-1/2 z-20">
|
||||
<div className="w-full h-full rounded-full bg-gradient-to-br from-deep-forest/80 to-rich-brown/60 border-2 border-luxury-gold/40 shadow-[0_0_20px_rgba(197,157,89,0.3)] flex items-center justify-center group cursor-pointer">
|
||||
<div className="absolute top-1/2 left-1/2 w-16 h-16 -translate-x-1/2 -translate-y-1/2 z-20">
|
||||
<div className="w-full h-full rounded-full bg-gradient-to-br from-deep-forest/80 to-rich-brown/60 border border-luxury-gold/30 flex items-center justify-center group cursor-pointer">
|
||||
<div className="text-center">
|
||||
<div className="text-2xl mb-1">🤖</div>
|
||||
<div className="text-xs text-cream/80 font-montserrat font-medium">HUB</div>
|
||||
<div className="text-xl mb-0.5">🤖</div>
|
||||
<div className="text-[10px] text-cream/80 font-montserrat font-medium">HUB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Pulsing energy rings */}
|
||||
<div className="absolute inset-0 rounded-full border border-luxury-gold/20 animate-ping"></div>
|
||||
<div className="absolute inset-2 rounded-full border border-luxury-gold/10 animate-ping animation-delay-1000"></div>
|
||||
{/* Removed pulsing rings for a calmer static display */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Floating particles for ambiance */}
|
||||
<div className="absolute inset-0 pointer-events-none">
|
||||
{[...Array(6)].map((_, i) => (
|
||||
<div
|
||||
key={i}
|
||||
className="absolute w-1 h-1 bg-luxury-gold rounded-full animate-ping"
|
||||
style={{
|
||||
left: `${20 + Math.random() * 60}%`,
|
||||
top: `${20 + Math.random() * 60}%`,
|
||||
animationDelay: `${Math.random() * 2}s`,
|
||||
animationDuration: `${1.5 + Math.random() * 1}s`
|
||||
}}
|
||||
></div>
|
||||
))}
|
||||
</div>
|
||||
{/* Removed floating particle animations */}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user