Álvaro Valenzuela Valdes commited on
Commit ·
b143c59
1
Parent(s): d2b2c3f
style: final aesthetic polish with radial charts and cinematic sync experience
Browse files- frontend/components/Dashboard.tsx +44 -20
- frontend/components/GlobalSync.tsx +33 -14
frontend/components/Dashboard.tsx
CHANGED
|
@@ -195,29 +195,53 @@ export default function Dashboard({
|
|
| 195 |
</div>
|
| 196 |
</div>
|
| 197 |
|
| 198 |
-
{/* Deadline Status */}
|
| 199 |
-
<div className="rounded-3xl border border-
|
| 200 |
-
<
|
| 201 |
-
<
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
</div>
|
| 208 |
</div>
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
<div>
|
| 212 |
-
<div className="
|
| 213 |
-
|
|
|
|
|
|
|
|
|
|
| 214 |
</div>
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
| 219 |
-
<
|
| 220 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
</div>
|
| 222 |
</div>
|
| 223 |
</div>
|
|
|
|
| 195 |
</div>
|
| 196 |
</div>
|
| 197 |
|
| 198 |
+
{/* Deadline Status - Enhanced Visual */}
|
| 199 |
+
<div className="rounded-3xl border border-white/5 bg-slate-950/80 p-8 relative overflow-hidden group hover:border-purple-500/20 transition-all duration-500">
|
| 200 |
+
<div className="absolute -right-10 -bottom-10 w-40 h-40 bg-purple-500/5 blur-3xl group-hover:bg-purple-500/10 transition-colors" />
|
| 201 |
+
<h3 className="text-[10px] uppercase tracking-[0.2em] text-slate-500 mb-8 font-black">{t.deadlines}</h3>
|
| 202 |
+
|
| 203 |
+
<div className="flex items-center gap-10">
|
| 204 |
+
<div className="relative w-32 h-32 flex items-center justify-center">
|
| 205 |
+
{/* Complex Radial Background with Multiple Segments via CSS Gradients */}
|
| 206 |
+
<div
|
| 207 |
+
className="absolute inset-0 rounded-full border-[10px] border-white/5 shadow-inner"
|
| 208 |
+
style={{
|
| 209 |
+
background: `conic-gradient(
|
| 210 |
+
#ef4444 0% ${((deadlineStatus.urgent / Math.max(1, tenders.length)) * 100).toFixed(1)}%,
|
| 211 |
+
#f59e0b ${((deadlineStatus.urgent / Math.max(1, tenders.length)) * 100).toFixed(1)}% ${(((deadlineStatus.urgent + deadlineStatus.near) / Math.max(1, tenders.length)) * 100).toFixed(1)}%,
|
| 212 |
+
#22c55e ${(((deadlineStatus.urgent + deadlineStatus.near) / Math.max(1, tenders.length)) * 100).toFixed(1)}% 100%
|
| 213 |
+
)`,
|
| 214 |
+
maskImage: 'radial-gradient(transparent 58%, black 60%)',
|
| 215 |
+
WebkitMaskImage: 'radial-gradient(transparent 58%, black 60%)'
|
| 216 |
+
}}
|
| 217 |
+
/>
|
| 218 |
+
<div className="text-center">
|
| 219 |
+
<div className="text-3xl font-black text-white">{tenders.length}</div>
|
| 220 |
+
<div className="text-[8px] font-bold text-slate-500 uppercase tracking-tighter">Total</div>
|
| 221 |
</div>
|
| 222 |
</div>
|
| 223 |
+
|
| 224 |
+
<div className="flex-1 space-y-4">
|
| 225 |
+
<div className="flex items-center justify-between group/row">
|
| 226 |
+
<div className="flex items-center gap-2">
|
| 227 |
+
<div className="w-1.5 h-1.5 rounded-full bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.5)]" />
|
| 228 |
+
<span className="text-[11px] text-slate-400 group-hover/row:text-red-400 transition-colors">Urgent</span>
|
| 229 |
+
</div>
|
| 230 |
+
<span className="text-xs font-bold text-white">{deadlineStatus.urgent}</span>
|
| 231 |
</div>
|
| 232 |
+
<div className="flex items-center justify-between group/row">
|
| 233 |
+
<div className="flex items-center gap-2">
|
| 234 |
+
<div className="w-1.5 h-1.5 rounded-full bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.5)]" />
|
| 235 |
+
<span className="text-[11px] text-slate-400 group-hover/row:text-amber-400 transition-colors">Near</span>
|
| 236 |
+
</div>
|
| 237 |
+
<span className="text-xs font-bold text-white">{deadlineStatus.near}</span>
|
| 238 |
+
</div>
|
| 239 |
+
<div className="flex items-center justify-between group/row">
|
| 240 |
+
<div className="flex items-center gap-2">
|
| 241 |
+
<div className="w-1.5 h-1.5 rounded-full bg-green-500 shadow-[0_0_8px_rgba(34,197,94,0.5)]" />
|
| 242 |
+
<span className="text-[11px] text-slate-400 group-hover/row:text-green-400 transition-colors">Safe</span>
|
| 243 |
+
</div>
|
| 244 |
+
<span className="text-xs font-bold text-white">{deadlineStatus.far}</span>
|
| 245 |
</div>
|
| 246 |
</div>
|
| 247 |
</div>
|
frontend/components/GlobalSync.tsx
CHANGED
|
@@ -41,32 +41,51 @@ export default function GlobalSync({ onComplete }: { onComplete: () => void }) {
|
|
| 41 |
}, [onComplete]);
|
| 42 |
|
| 43 |
return (
|
| 44 |
-
<div className="fixed inset-0 z-[100] flex flex-col items-center justify-center bg-[#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
<div className="relative w-64 h-64 flex items-center justify-center mb-12">
|
| 46 |
-
{/* Animated Rings */}
|
| 47 |
-
<div className="absolute inset-0 border
|
| 48 |
-
<div className="absolute inset-4 border
|
| 49 |
-
<div className="absolute inset-8 border
|
| 50 |
|
| 51 |
{/* Progress Text */}
|
| 52 |
-
<div className="flex flex-col items-center">
|
| 53 |
-
<span className="text-
|
| 54 |
-
<span className="text-[
|
| 55 |
</div>
|
| 56 |
</div>
|
| 57 |
|
| 58 |
-
<div className="space-y-
|
| 59 |
-
<h2 className="text-xl font-bold tracking-tight">{message}</h2>
|
| 60 |
-
<div className="w-
|
| 61 |
<div
|
| 62 |
-
className="h-full
|
| 63 |
style={{ width: `${progress}%` }}
|
| 64 |
/>
|
| 65 |
</div>
|
|
|
|
| 66 |
</div>
|
| 67 |
|
| 68 |
-
<div className="absolute bottom-12
|
| 69 |
-
|
|
|
|
|
|
|
|
|
|
| 70 |
</div>
|
| 71 |
</div>
|
| 72 |
);
|
|
|
|
| 41 |
}, [onComplete]);
|
| 42 |
|
| 43 |
return (
|
| 44 |
+
<div className="fixed inset-0 z-[100] flex flex-col items-center justify-center bg-[#020202] text-white overflow-hidden">
|
| 45 |
+
{/* Cinematic Grid Background */}
|
| 46 |
+
<div className="absolute inset-0 bg-[linear-gradient(to_right,#80808012_1px,transparent_1px),linear-gradient(to_bottom,#80808012_1px,transparent_1px)] bg-[size:40px_40px] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_0%,#000_70%,transparent_100%)]" />
|
| 47 |
+
|
| 48 |
+
{/* Decorative Blur Orbs */}
|
| 49 |
+
<div className="absolute -top-24 -left-24 w-96 h-96 bg-purple-500/10 blur-[120px] animate-pulse" />
|
| 50 |
+
<div className="absolute -bottom-24 -right-24 w-96 h-96 bg-cyan-500/10 blur-[120px] animate-pulse" />
|
| 51 |
+
|
| 52 |
+
{/* Floating Code Snippets (Pure CSS Animations) */}
|
| 53 |
+
<div className="absolute inset-0 opacity-20 pointer-events-none select-none font-mono text-[8px] md:text-[10px] text-purple-400/40">
|
| 54 |
+
<div className="absolute top-[10%] left-[5%] animate-[pulse_3s_infinite]">GET /api/tenders/sync HTTP/1.1</div>
|
| 55 |
+
<div className="absolute top-[20%] right-[10%] animate-[pulse_4s_infinite]">SELECT * FROM active_opportunities;</div>
|
| 56 |
+
<div className="absolute bottom-[30%] left-[15%] animate-[pulse_5s_infinite]">AGENT_ORCHESTRATOR.INIT()</div>
|
| 57 |
+
<div className="absolute bottom-[10%] right-[5%] animate-[pulse_6s_infinite]">Status: 200 OK | Payload: 4.2k items</div>
|
| 58 |
+
</div>
|
| 59 |
+
|
| 60 |
<div className="relative w-64 h-64 flex items-center justify-center mb-12">
|
| 61 |
+
{/* Animated Rings - Enhanced */}
|
| 62 |
+
<div className="absolute inset-0 border border-purple-500/20 rounded-full animate-[spin_12s_linear_infinite]" />
|
| 63 |
+
<div className="absolute inset-4 border border-indigo-500/30 rounded-full animate-[spin_8s_linear_infinite_reverse]" />
|
| 64 |
+
<div className="absolute inset-8 border border-cyan-500/40 rounded-full animate-[spin_6s_linear_infinite]" />
|
| 65 |
|
| 66 |
{/* Progress Text */}
|
| 67 |
+
<div className="flex flex-col items-center relative z-10">
|
| 68 |
+
<span className="text-5xl font-black tracking-tighter text-white mb-1 drop-shadow-[0_0_15px_rgba(168,85,247,0.5)]">{progress}%</span>
|
| 69 |
+
<span className="text-[9px] uppercase tracking-[0.4em] text-slate-500 font-black">Neural Link</span>
|
| 70 |
</div>
|
| 71 |
</div>
|
| 72 |
|
| 73 |
+
<div className="relative z-10 space-y-6 text-center max-w-sm px-6">
|
| 74 |
+
<h2 className="text-xl font-bold tracking-tight text-slate-200 animate-in fade-in slide-in-from-bottom-2 duration-300">{message}</h2>
|
| 75 |
+
<div className="relative w-72 h-1.5 bg-white/5 rounded-full overflow-hidden border border-white/5">
|
| 76 |
<div
|
| 77 |
+
className="h-full bg-gradient-to-r from-purple-600 via-indigo-500 to-cyan-400 transition-all duration-300 ease-out shadow-[0_0_10px_rgba(168,85,247,0.5)]"
|
| 78 |
style={{ width: `${progress}%` }}
|
| 79 |
/>
|
| 80 |
</div>
|
| 81 |
+
<p className="text-[10px] text-slate-500 font-medium tracking-widest uppercase opacity-60">Initializing AndesOps AI Engine</p>
|
| 82 |
</div>
|
| 83 |
|
| 84 |
+
<div className="absolute bottom-12 flex flex-col items-center gap-2">
|
| 85 |
+
<div className="w-1 h-8 bg-gradient-to-b from-purple-500/40 to-transparent" />
|
| 86 |
+
<div className="text-[10px] uppercase tracking-[0.5em] text-slate-700 font-black">
|
| 87 |
+
Orchestrated by REW Intelligence
|
| 88 |
+
</div>
|
| 89 |
</div>
|
| 90 |
</div>
|
| 91 |
);
|