Karan6124 commited on
Commit
74cf3f1
·
1 Parent(s): 1755110

feat: integrate custom logo and add cyberpunk trading animations

Browse files
.gitignore CHANGED
@@ -55,4 +55,4 @@ out/
55
 
56
 
57
  # Model
58
- model.onnx
 
55
 
56
 
57
  # Model
58
+ model.onnx
frontend/src/App.css CHANGED
@@ -1137,3 +1137,87 @@
1137
  .insight-reason-body p:last-child {
1138
  margin-bottom: 0;
1139
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1137
  .insight-reason-body p:last-child {
1138
  margin-bottom: 0;
1139
  }
1140
+
1141
+ /* ==========================================
1142
+ Animated Cyberpunk Glows & Micro-animations
1143
+ ========================================== */
1144
+ @keyframes pulseGlow {
1145
+ 0% {
1146
+ transform: scale(0.95);
1147
+ box-shadow: 0 0 0 0 rgba(0, 242, 254, 0.7);
1148
+ }
1149
+ 70% {
1150
+ transform: scale(1.2);
1151
+ box-shadow: 0 0 0 6px rgba(0, 242, 254, 0);
1152
+ }
1153
+ 100% {
1154
+ transform: scale(0.95);
1155
+ box-shadow: 0 0 0 0 rgba(0, 242, 254, 0);
1156
+ }
1157
+ }
1158
+
1159
+ /* Neon logo glow effects */
1160
+ .glow-cyan {
1161
+ filter: drop-shadow(0 0 6px rgba(0, 242, 254, 0.75));
1162
+ }
1163
+ .glow-violet {
1164
+ filter: drop-shadow(0 0 6px rgba(161, 84, 255, 0.75));
1165
+ }
1166
+
1167
+ /* Hover scales and glows on glass panels */
1168
+ .glass-panel {
1169
+ transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
1170
+ }
1171
+ .glass-panel:hover {
1172
+ border-color: rgba(0, 242, 254, 0.25);
1173
+ box-shadow: 0 8px 32px 0 rgba(0, 242, 254, 0.03), inset 0 0 12px rgba(255, 255, 255, 0.02);
1174
+ }
1175
+
1176
+ /* Watchlist items neon hover indicator */
1177
+ .watchlist-item {
1178
+ position: relative;
1179
+ overflow: hidden;
1180
+ }
1181
+ .watchlist-item::after {
1182
+ content: '';
1183
+ position: absolute;
1184
+ left: 0;
1185
+ top: 0;
1186
+ bottom: 0;
1187
+ width: 3px;
1188
+ background: var(--neon-cyan);
1189
+ transform: scaleY(0);
1190
+ transition: transform 0.2s ease;
1191
+ transform-origin: bottom;
1192
+ }
1193
+ .watchlist-item:hover::after {
1194
+ transform: scaleY(1);
1195
+ }
1196
+ .watchlist-item.active {
1197
+ box-shadow: inset 0 0 12px rgba(0, 242, 254, 0.05);
1198
+ }
1199
+
1200
+ /* AI Analyst Pulsing bias tags */
1201
+ .insight-tag {
1202
+ animation: pulsePill 2s infinite ease-in-out;
1203
+ }
1204
+ @keyframes pulsePill {
1205
+ 0%, 100% { opacity: 1; }
1206
+ 50% { opacity: 0.8; }
1207
+ }
1208
+
1209
+ /* Stock Chart transition */
1210
+ .mini-chart-container, .chart-container {
1211
+ animation: fadeInChart 0.6s cubic-bezier(0.16, 1, 0.3, 1);
1212
+ }
1213
+ @keyframes fadeInChart {
1214
+ from {
1215
+ opacity: 0;
1216
+ transform: translateY(10px);
1217
+ }
1218
+ to {
1219
+ opacity: 1;
1220
+ transform: translateY(0);
1221
+ }
1222
+ }
1223
+
frontend/src/components/Logo.tsx ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ interface LogoProps {
2
+ size?: number;
3
+ className?: string;
4
+ }
5
+
6
+ export default function Logo({ size = 48, className = "" }: LogoProps) {
7
+ return (
8
+ <svg
9
+ width={size}
10
+ height={size}
11
+ viewBox="0 0 100 100"
12
+ fill="none"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ className={className}
15
+ style={{ display: 'inline-block', verticalAlign: 'middle' }}
16
+ >
17
+ <defs>
18
+ {/* Glow Filters */}
19
+ <filter id="logo-glow-cyan" x="-30%" y="-30%" width="160%" height="160%">
20
+ <feGaussianBlur stdDeviation="2.5" result="blur" />
21
+ <feMerge>
22
+ <feMergeNode in="blur" />
23
+ <feMergeNode in="SourceGraphic" />
24
+ </feMerge>
25
+ </filter>
26
+ <filter id="logo-glow-violet" x="-30%" y="-30%" width="160%" height="160%">
27
+ <feGaussianBlur stdDeviation="3" result="blur" />
28
+ <feMerge>
29
+ <feMergeNode in="blur" />
30
+ <feMergeNode in="SourceGraphic" />
31
+ </feMerge>
32
+ </filter>
33
+
34
+ {/* Gradients */}
35
+ <linearGradient id="violet-grad" x1="0%" y1="0%" x2="100%" y2="100%">
36
+ <stop offset="0%" stopColor="#d946ef" />
37
+ <stop offset="100%" stopColor="#a855f7" />
38
+ </linearGradient>
39
+ <linearGradient id="cyan-grad" x1="0%" y1="50%" x2="100%" y2="50%">
40
+ <stop offset="0%" stopColor="#22d3ee" />
41
+ <stop offset="100%" stopColor="#06b6d4" />
42
+ </linearGradient>
43
+ </defs>
44
+
45
+ {/* Background shape (hidden by default, transparent vector) */}
46
+
47
+ {/* Concentric Guide Ring (Thin Outer) */}
48
+ <circle
49
+ cx="50"
50
+ cy="50"
51
+ r="44"
52
+ stroke="url(#violet-grad)"
53
+ strokeWidth="0.75"
54
+ strokeDasharray="4 8 20 8"
55
+ opacity="0.3"
56
+ />
57
+
58
+ {/* Main Q Circle body (Thick Outer Arc) */}
59
+ {/* Radius 38, Center 50,50. Gap on right (around y=50) */}
60
+ <path
61
+ d="M 87.2,42.1 A 38,38 0 1,0 87.2,57.9"
62
+ stroke="url(#violet-grad)"
63
+ strokeWidth="5.5"
64
+ strokeLinecap="round"
65
+ filter="url(#logo-glow-violet)"
66
+ />
67
+
68
+ {/* Inner Thin Arc */}
69
+ <path
70
+ d="M 79.0,42.2 A 30,30 0 1,0 79.0,57.8"
71
+ stroke="url(#violet-grad)"
72
+ strokeWidth="1.2"
73
+ opacity="0.55"
74
+ />
75
+
76
+ {/* Q Diagonal Tail */}
77
+ <line
78
+ x1="70.5"
79
+ y1="70.5"
80
+ x2="88"
81
+ y2="88"
82
+ stroke="url(#violet-grad)"
83
+ strokeWidth="6"
84
+ strokeLinecap="round"
85
+ filter="url(#logo-glow-violet)"
86
+ />
87
+
88
+ {/* Decorative hud ticks inside the Q gap */}
89
+ <line x1="82" y1="46" x2="88" y2="46" stroke="url(#violet-grad)" strokeWidth="1" opacity="0.7" />
90
+ <line x1="82" y1="54" x2="88" y2="54" stroke="url(#violet-grad)" strokeWidth="1" opacity="0.7" />
91
+
92
+ {/* Neon Cyan Stock / Heartbeat Signal Line */}
93
+ {/* 1. Glow Layer */}
94
+ <path
95
+ d="M 12,50 L 35,50 L 39,54 L 43,46 L 47,62 L 51,38 L 55,60 L 59,48 L 63,52 L 67,49 L 71,51 L 76,50 L 88,50"
96
+ stroke="#00f2fe"
97
+ strokeWidth="2.5"
98
+ strokeLinecap="round"
99
+ strokeLinejoin="round"
100
+ filter="url(#logo-glow-cyan)"
101
+ />
102
+ {/* 2. Core High-Contrast Bright Layer */}
103
+ <path
104
+ d="M 12,50 L 35,50 L 39,54 L 43,46 L 47,62 L 51,38 L 55,60 L 59,48 L 63,52 L 67,49 L 71,51 L 76,50 L 88,50"
105
+ stroke="#e0fbfc"
106
+ strokeWidth="1.0"
107
+ strokeLinecap="round"
108
+ strokeLinejoin="round"
109
+ />
110
+
111
+ {/* Neon glowing junction dots */}
112
+ <circle cx="35" cy="50" r="1.5" fill="#e0fbfc" filter="url(#logo-glow-cyan)" />
113
+ <circle cx="47" cy="62" r="1.5" fill="#e0fbfc" filter="url(#logo-glow-cyan)" />
114
+ <circle cx="51" cy="38" r="1.5" fill="#e0fbfc" filter="url(#logo-glow-cyan)" />
115
+ <circle cx="55" cy="60" r="1.5" fill="#e0fbfc" filter="url(#logo-glow-cyan)" />
116
+ <circle cx="76" cy="50" r="1.5" fill="#e0fbfc" filter="url(#logo-glow-cyan)" />
117
+ </svg>
118
+ );
119
+ }
frontend/src/components/Navbar.tsx CHANGED
@@ -1,5 +1,6 @@
1
 
2
- import { Sparkles, Wallet, LogOut } from 'lucide-react';
 
3
 
4
  interface NavbarProps {
5
  user: any;
@@ -11,7 +12,7 @@ export default function Navbar({ user, onRechargeClick, onLogout }: NavbarProps)
11
  return (
12
  <header className="dashboard-header">
13
  <div className="header-left">
14
- <Sparkles size={24} color="#00f2fe" className="glow-cyan" />
15
  <span className="logo-text">QuantIQ</span>
16
  </div>
17
 
 
1
 
2
+ import { Wallet, LogOut } from 'lucide-react';
3
+ import Logo from './Logo';
4
 
5
  interface NavbarProps {
6
  user: any;
 
12
  return (
13
  <header className="dashboard-header">
14
  <div className="header-left">
15
+ <Logo size={32} />
16
  <span className="logo-text">QuantIQ</span>
17
  </div>
18
 
frontend/src/pages/LandingPage.tsx CHANGED
@@ -1,6 +1,7 @@
1
  import { useEffect, useRef } from 'react';
2
  import { Sparkles, Play, Activity, Cpu, ArrowRight, Zap } from 'lucide-react';
3
  import { ResponsiveContainer, AreaChart, Area } from 'recharts';
 
4
 
5
  interface LandingPageProps {
6
  onGoogleLogin: (response: any) => Promise<void>;
@@ -57,7 +58,7 @@ export default function LandingPage({ onGoogleLogin, onMockLogin, googleClientId
57
  {/* Landing Header */}
58
  <header className="landing-header">
59
  <div className="brand">
60
- <Sparkles size={28} color="#00f2fe" className="glow-cyan animate-pulse" />
61
  <span className="brand-logo-text">QuantIQ</span>
62
  </div>
63
  </header> {/* Main Content Sections */}
 
1
  import { useEffect, useRef } from 'react';
2
  import { Sparkles, Play, Activity, Cpu, ArrowRight, Zap } from 'lucide-react';
3
  import { ResponsiveContainer, AreaChart, Area } from 'recharts';
4
+ import Logo from '../components/Logo';
5
 
6
  interface LandingPageProps {
7
  onGoogleLogin: (response: any) => Promise<void>;
 
58
  {/* Landing Header */}
59
  <header className="landing-header">
60
  <div className="brand">
61
+ <Logo size={40} className="glow-cyan" />
62
  <span className="brand-logo-text">QuantIQ</span>
63
  </div>
64
  </header> {/* Main Content Sections */}