mlknvd20 commited on
Commit
b3cd563
·
verified ·
1 Parent(s): fb1f7e0

aik aesi app bnao jis mein mein apny sary coding projects ko category wise save kr skon, aur har category mein kitny codes hain aur kon se complete ho chuky Hain, kis date ko, kitny bajy, project ki pics, aur baki kch zrori cheezain bhi honi chahiyen, jo project complete ho jay us py tick lgany ka option, jo abhi nae huy wo sb untick hon aur us mein bhi jo zrori cheezain rakhna hon to rakh dena, project complete krny py client se kitny paisy liye, kitny baki hain ye bhi manage krna he aur accounts ki alag alag reports bhi bnani hain jin ko easyly print bhi kia ja sky, ye aik professional look app hona chahiye, jis mein advance technology ko use krty huy advance interface hona chahiye. App bht bhari na ho loading mein bht ziada time na ly. Aesa zbrdast design ho aur futuristic animations honi chahiye. Jb bhi kisi client ko add krna ho to us ki each and everything details save krni hon. Kisi bhi professional app ka look hona lazmi he

Browse files
Files changed (6) hide show
  1. README.md +6 -3
  2. components/navbar.js +158 -0
  3. components/sidebar.js +263 -0
  4. index.html +223 -19
  5. script.js +468 -0
  6. style.css +203 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Codevault Pro Your Ultimate Coding Project Manager
3
- emoji: 📉
4
  colorFrom: pink
5
  colorTo: pink
 
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: CodeVault Pro - Your Ultimate Coding Project Manager 📊
 
3
  colorFrom: pink
4
  colorTo: pink
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/navbar.js ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class NavBar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ nav {
7
+ position: fixed;
8
+ top: 0;
9
+ left: 0;
10
+ right: 0;
11
+ height: 64px;
12
+ background: rgba(15, 23, 42, 0.95);
13
+ backdrop-filter: blur(10px);
14
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
15
+ z-index: 1000;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: space-between;
19
+ padding: 0 2rem;
20
+ }
21
+
22
+ .logo {
23
+ display: flex;
24
+ align-items: center;
25
+ gap: 12px;
26
+ font-weight: 800;
27
+ font-size: 1.5rem;
28
+ background: linear-gradient(45deg, #6366f1, #f59e0b);
29
+ -webkit-background-clip: text;
30
+ -webkit-text-fill-color: transparent;
31
+ background-clip: text;
32
+ }
33
+
34
+ .nav-right {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 1.5rem;
38
+ }
39
+
40
+ .notification-btn, .profile-btn {
41
+ width: 40px;
42
+ height: 40px;
43
+ border-radius: 50%;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ background: rgba(255, 255, 255, 0.05);
48
+ border: 1px solid rgba(255, 255, 255, 0.1);
49
+ cursor: pointer;
50
+ transition: all 0.3s ease;
51
+ position: relative;
52
+ }
53
+
54
+ .notification-btn:hover, .profile-btn:hover {
55
+ background: rgba(255, 255, 255, 0.1);
56
+ transform: translateY(-2px);
57
+ }
58
+
59
+ .notification-badge {
60
+ position: absolute;
61
+ top: -4px;
62
+ right: -4px;
63
+ width: 18px;
64
+ height: 18px;
65
+ background: linear-gradient(45deg, #ef4444, #dc2626);
66
+ border-radius: 50%;
67
+ font-size: 10px;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ font-weight: bold;
72
+ }
73
+
74
+ .search-container {
75
+ position: relative;
76
+ width: 300px;
77
+ }
78
+
79
+ .search-input {
80
+ width: 100%;
81
+ padding: 10px 16px 10px 44px;
82
+ background: rgba(255, 255, 255, 0.05);
83
+ border: 1px solid rgba(255, 255, 255, 0.1);
84
+ border-radius: 12px;
85
+ color: white;
86
+ font-size: 14px;
87
+ transition: all 0.3s ease;
88
+ }
89
+
90
+ .search-input:focus {
91
+ outline: none;
92
+ border-color: #6366f1;
93
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
94
+ }
95
+
96
+ .search-icon {
97
+ position: absolute;
98
+ left: 16px;
99
+ top: 50%;
100
+ transform: translateY(-50%);
101
+ color: #94a3b8;
102
+ }
103
+
104
+ @media (max-width: 768px) {
105
+ nav {
106
+ padding: 0 1rem;
107
+ }
108
+
109
+ .search-container {
110
+ width: 200px;
111
+ }
112
+
113
+ .logo span {
114
+ display: none;
115
+ }
116
+ }
117
+
118
+ @media (max-width: 480px) {
119
+ .search-container {
120
+ display: none;
121
+ }
122
+ }
123
+ </style>
124
+
125
+ <nav>
126
+ <div class="logo">
127
+ <i data-feather="code"></i>
128
+ <span>CodeVault Pro</span>
129
+ </div>
130
+
131
+ <div class="nav-right">
132
+ <div class="search-container">
133
+ <i data-feather="search" class="search-icon"></i>
134
+ <input type="text" class="search-input" placeholder="Search projects, clients, or reports...">
135
+ </div>
136
+
137
+ <div class="notification-btn">
138
+ <i data-feather="bell"></i>
139
+ <span class="notification-badge">3</span>
140
+ </div>
141
+
142
+ <div class="profile-btn">
143
+ <i data-feather="user"></i>
144
+ </div>
145
+ </div>
146
+ </nav>
147
+ `;
148
+
149
+ // Initialize Feather icons
150
+ setTimeout(() => {
151
+ if (this.shadowRoot.querySelector('[data-feather]')) {
152
+ feather.replace();
153
+ }
154
+ }, 100);
155
+ }
156
+ }
157
+
158
+ customElements.define('nav-bar', NavBar);
components/sidebar.js ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class SideBar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ aside {
7
+ position: fixed;
8
+ top: 64px;
9
+ left: 0;
10
+ bottom: 0;
11
+ width: 256px;
12
+ background: rgba(15, 23, 42, 0.95);
13
+ backdrop-filter: blur(10px);
14
+ border-right: 1px solid rgba(255, 255, 255, 0.1);
15
+ z-index: 999;
16
+ padding: 1.5rem 0;
17
+ overflow-y: auto;
18
+ transform: translateX(0);
19
+ transition: transform 0.3s ease;
20
+ }
21
+
22
+ @media (max-width: 768px) {
23
+ aside {
24
+ transform: translateX(-100%);
25
+ }
26
+
27
+ aside.active {
28
+ transform: translateX(0);
29
+ }
30
+ }
31
+
32
+ .nav-section {
33
+ margin-bottom: 2rem;
34
+ }
35
+
36
+ .nav-title {
37
+ padding: 0 1.5rem;
38
+ font-size: 0.75rem;
39
+ text-transform: uppercase;
40
+ letter-spacing: 0.5px;
41
+ color: #94a3b8;
42
+ margin-bottom: 0.75rem;
43
+ }
44
+
45
+ .nav-item {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 12px;
49
+ padding: 0.75rem 1.5rem;
50
+ color: #cbd5e1;
51
+ text-decoration: none;
52
+ transition: all 0.3s ease;
53
+ position: relative;
54
+ cursor: pointer;
55
+ }
56
+
57
+ .nav-item:hover {
58
+ background: rgba(99, 102, 241, 0.1);
59
+ color: white;
60
+ padding-left: 2rem;
61
+ }
62
+
63
+ .nav-item.active {
64
+ background: linear-gradient(90deg, rgba(99, 102, 241, 0.2), transparent);
65
+ color: white;
66
+ border-left: 3px solid #6366f1;
67
+ }
68
+
69
+ .nav-item.active::before {
70
+ content: '';
71
+ position: absolute;
72
+ left: 0;
73
+ top: 0;
74
+ bottom: 0;
75
+ width: 3px;
76
+ background: linear-gradient(to bottom, #6366f1, #8b5cf6);
77
+ }
78
+
79
+ .nav-item i {
80
+ width: 20px;
81
+ height: 20px;
82
+ }
83
+
84
+ .badge {
85
+ margin-left: auto;
86
+ padding: 2px 8px;
87
+ background: rgba(99, 102, 241, 0.2);
88
+ color: #6366f1;
89
+ border-radius: 12px;
90
+ font-size: 0.75rem;
91
+ font-weight: 600;
92
+ }
93
+
94
+ .category-tags {
95
+ display: flex;
96
+ flex-wrap: wrap;
97
+ gap: 8px;
98
+ padding: 0 1.5rem;
99
+ margin-top: 1rem;
100
+ }
101
+
102
+ .category-tag {
103
+ padding: 4px 12px;
104
+ background: rgba(255, 255, 255, 0.05);
105
+ border: 1px solid rgba(255, 255, 255, 0.1);
106
+ border-radius: 20px;
107
+ font-size: 0.75rem;
108
+ color: #94a3b8;
109
+ cursor: pointer;
110
+ transition: all 0.3s ease;
111
+ }
112
+
113
+ .category-tag:hover {
114
+ background: rgba(99, 102, 241, 0.2);
115
+ color: white;
116
+ border-color: #6366f1;
117
+ }
118
+
119
+ .category-tag.active {
120
+ background: rgba(99, 102, 241, 0.3);
121
+ color: white;
122
+ border-color: #6366f1;
123
+ }
124
+
125
+ .mobile-toggle {
126
+ display: none;
127
+ position: fixed;
128
+ bottom: 2rem;
129
+ left: 2rem;
130
+ width: 56px;
131
+ height: 56px;
132
+ background: linear-gradient(45deg, #6366f1, #f59e0b);
133
+ border-radius: 50%;
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: center;
137
+ cursor: pointer;
138
+ z-index: 1001;
139
+ box-shadow: 0 10px 30px rgba(99, 102, 241, 0.3);
140
+ transition: all 0.3s ease;
141
+ }
142
+
143
+ .mobile-toggle:hover {
144
+ transform: scale(1.1);
145
+ box-shadow: 0 15px 40px rgba(99, 102, 241, 0.4);
146
+ }
147
+
148
+ @media (max-width: 768px) {
149
+ .mobile-toggle {
150
+ display: flex;
151
+ }
152
+ }
153
+ </style>
154
+
155
+ <aside id="sidebar">
156
+ <div class="nav-section">
157
+ <div class="nav-title">Main</div>
158
+ <a href="index.html" class="nav-item active" data-nav="dashboard">
159
+ <i data-feather="home"></i>
160
+ <span>Dashboard</span>
161
+ </a>
162
+ <a href="projects.html" class="nav-item" data-nav="projects">
163
+ <i data-feather="folder"></i>
164
+ <span>Projects</span>
165
+ <span class="badge">42</span>
166
+ </a>
167
+ <a href="clients.html" class="nav-item" data-nav="clients">
168
+ <i data-feather="users"></i>
169
+ <span>Clients</span>
170
+ <span class="badge">15</span>
171
+ </a>
172
+ <a href="categories.html" class="nav-item" data-nav="categories">
173
+ <i data-feather="grid"></i>
174
+ <span>Categories</span>
175
+ </a>
176
+ </div>
177
+
178
+ <div class="nav-section">
179
+ <div class="nav-title">Financial</div>
180
+ <a href="payments.html" class="nav-item" data-nav="payments">
181
+ <i data-feather="dollar-sign"></i>
182
+ <span>Payments</span>
183
+ </a>
184
+ <a href="invoices.html" class="nav-item" data-nav="invoices">
185
+ <i data-feather="file-text"></i>
186
+ <span>Invoices</span>
187
+ <span class="badge">3</span>
188
+ </a>
189
+ <a href="reports.html" class="nav-item" data-nav="reports">
190
+ <i data-feather="pie-chart"></i>
191
+ <span>Reports</span>
192
+ </a>
193
+ </div>
194
+
195
+ <div class="nav-section">
196
+ <div class="nav-title">Categories</div>
197
+ <div class="category-tags">
198
+ <span class="category-tag active" onclick="filterProjects('all')">All</span>
199
+ <span class="category-tag" onclick="filterProjects('web')">Web</span>
200
+ <span class="category-tag" onclick="filterProjects('mobile')">Mobile</span>
201
+ <span class="category-tag" onclick="filterProjects('ai')">AI/ML</span>
202
+ <span class="category-tag" onclick="filterProjects('game')">Games</span>
203
+ <span class="category-tag" onclick="filterProjects('blockchain')">Blockchain</span>
204
+ </div>
205
+ </div>
206
+
207
+ <div class="nav-section">
208
+ <div class="nav-title">Settings</div>
209
+ <a href="settings.html" class="nav-item" data-nav="settings">
210
+ <i data-feather="settings"></i>
211
+ <span>Settings</span>
212
+ </a>
213
+ <a href="help.html" class="nav-item" data-nav="help">
214
+ <i data-feather="help-circle"></i>
215
+ <span>Help & Support</span>
216
+ </a>
217
+ </div>
218
+ </aside>
219
+
220
+ <div class="mobile-toggle" id="mobileToggle">
221
+ <i data-feather="menu"></i>
222
+ </div>
223
+ `;
224
+
225
+ // Initialize Feather icons
226
+ setTimeout(() => {
227
+ if (this.shadowRoot.querySelector('[data-feather]')) {
228
+ feather.replace();
229
+ }
230
+ }, 100);
231
+
232
+ // Add mobile toggle functionality
233
+ this.shadowRoot.getElementById('mobileToggle').addEventListener('click', () => {
234
+ const sidebar = this.shadowRoot.getElementById('sidebar');
235
+ sidebar.classList.toggle('active');
236
+ });
237
+
238
+ // Close sidebar when clicking outside on mobile
239
+ document.addEventListener('click', (e) => {
240
+ if (window.innerWidth <= 768) {
241
+ const sidebar = this.shadowRoot.getElementById('sidebar');
242
+ const toggle = this.shadowRoot.getElementById('mobileToggle');
243
+ if (!sidebar.contains(e.target) && !toggle.contains(e.target)) {
244
+ sidebar.classList.remove('active');
245
+ }
246
+ }
247
+ });
248
+
249
+ // Make filterProjects available globally
250
+ window.filterProjects = (category) => {
251
+ const tags = this.shadowRoot.querySelectorAll('.category-tag');
252
+ tags.forEach(tag => tag.classList.remove('active'));
253
+ this.shadowRoot.querySelector(`.category-tag[onclick*="${category}"]`).classList.add('active');
254
+
255
+ // Call the global filter function
256
+ if (typeof window.filterProjectsGlobal === 'function') {
257
+ window.filterProjectsGlobal(category);
258
+ }
259
+ };
260
+ }
261
+ }
262
+
263
+ customElements.define('side-bar', SideBar);
index.html CHANGED
@@ -1,19 +1,223 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>CodeVault Pro 📊 | Dashboard</title>
7
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
+ <link rel="stylesheet" href="style.css">
9
+ <script src="https://cdn.tailwindcss.com"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
+ <script src="https://unpkg.com/feather-icons"></script>
12
+ <script>
13
+ tailwind.config = {
14
+ theme: {
15
+ extend: {
16
+ colors: {
17
+ primary: '#6366f1',
18
+ secondary: '#f59e0b',
19
+ dark: '#0f172a',
20
+ light: '#f8fafc'
21
+ },
22
+ animation: {
23
+ 'float': 'float 6s ease-in-out infinite',
24
+ 'pulse-glow': 'pulse-glow 2s ease-in-out infinite',
25
+ 'slide-in': 'slide-in 0.5s ease-out',
26
+ 'fade-in': 'fade-in 0.8s ease-out'
27
+ },
28
+ keyframes: {
29
+ float: {
30
+ '0%, 100%': { transform: 'translateY(0px)' },
31
+ '50%': { transform: 'translateY(-20px)' }
32
+ },
33
+ 'pulse-glow': {
34
+ '0%, 100%': { opacity: 1, boxShadow: '0 0 20px rgba(99, 102, 241, 0.5)' },
35
+ '50%': { opacity: 0.8, boxShadow: '0 0 40px rgba(99, 102, 241, 0.8)' }
36
+ },
37
+ 'slide-in': {
38
+ '0%': { transform: 'translateY(-20px)', opacity: 0 },
39
+ '100%': { transform: 'translateY(0)', opacity: 1 }
40
+ },
41
+ 'fade-in': {
42
+ '0%': { opacity: 0 },
43
+ '100%': { opacity: 1 }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ </script>
50
+ </head>
51
+ <body class="bg-dark text-light min-h-screen">
52
+ <!-- Web Components -->
53
+ <nav-bar></nav-bar>
54
+ <side-bar></side-bar>
55
+
56
+ <!-- Main Content -->
57
+ <main class="ml-0 md:ml-64 pt-16 px-4 md:px-8 animate-fade-in">
58
+ <!-- Header -->
59
+ <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-8">
60
+ <div>
61
+ <h1 class="text-3xl md:text-4xl font-bold bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">Dashboard Overview</h1>
62
+ <p class="text-gray-400 mt-2">Manage all your coding projects, clients, and finances in one place</p>
63
+ </div>
64
+ <div class="flex space-x-4 mt-4 md:mt-0">
65
+ <button class="px-6 py-3 bg-primary hover:bg-primary/80 rounded-lg font-medium flex items-center space-x-2 transition-all duration-300 transform hover:scale-105">
66
+ <i data-feather="plus-circle"></i>
67
+ <span>New Project</span>
68
+ </button>
69
+ <button class="px-6 py-3 bg-secondary hover:bg-secondary/80 rounded-lg font-medium flex items-center space-x-2 transition-all duration-300 transform hover:scale-105">
70
+ <i data-feather="user-plus"></i>
71
+ <span>Add Client</span>
72
+ </button>
73
+ </div>
74
+ </div>
75
+
76
+ <!-- Stats Cards -->
77
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
78
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 p-6 rounded-2xl border border-gray-700 shadow-xl animate-slide-in">
79
+ <div class="flex items-center justify-between">
80
+ <div>
81
+ <p class="text-gray-400 text-sm">Total Projects</p>
82
+ <h3 class="text-3xl font-bold mt-2">42</h3>
83
+ </div>
84
+ <div class="w-12 h-12 rounded-full bg-primary/20 flex items-center justify-center">
85
+ <i data-feather="folder" class="text-primary text-xl"></i>
86
+ </div>
87
+ </div>
88
+ <div class="mt-4">
89
+ <div class="flex items-center text-sm">
90
+ <span class="text-green-400">+5 this month</span>
91
+ </div>
92
+ </div>
93
+ </div>
94
+
95
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 p-6 rounded-2xl border border-gray-700 shadow-xl animate-slide-in" style="animation-delay: 0.1s">
96
+ <div class="flex items-center justify-between">
97
+ <div>
98
+ <p class="text-gray-400 text-sm">Completed</p>
99
+ <h3 class="text-3xl font-bold mt-2">28</h3>
100
+ </div>
101
+ <div class="w-12 h-12 rounded-full bg-green-500/20 flex items-center justify-center">
102
+ <i data-feather="check-circle" class="text-green-500 text-xl"></i>
103
+ </div>
104
+ </div>
105
+ <div class="mt-4">
106
+ <div class="flex items-center text-sm">
107
+ <span class="text-green-400">67% success rate</span>
108
+ </div>
109
+ </div>
110
+ </div>
111
+
112
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 p-6 rounded-2xl border border-gray-700 shadow-xl animate-slide-in" style="animation-delay: 0.2s">
113
+ <div class="flex items-center justify-between">
114
+ <div>
115
+ <p class="text-gray-400 text-sm">Revenue</p>
116
+ <h3 class="text-3xl font-bold mt-2">$48,560</h3>
117
+ </div>
118
+ <div class="w-12 h-12 rounded-full bg-secondary/20 flex items-center justify-center">
119
+ <i data-feather="dollar-sign" class="text-secondary text-xl"></i>
120
+ </div>
121
+ </div>
122
+ <div class="mt-4">
123
+ <div class="flex items-center text-sm">
124
+ <span class="text-green-400">+12% growth</span>
125
+ </div>
126
+ </div>
127
+ </div>
128
+
129
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 p-6 rounded-2xl border border-gray-700 shadow-xl animate-slide-in" style="animation-delay: 0.3s">
130
+ <div class="flex items-center justify-between">
131
+ <div>
132
+ <p class="text-gray-400 text-sm">Active Clients</p>
133
+ <h3 class="text-3xl font-bold mt-2">15</h3>
134
+ </div>
135
+ <div class="w-12 h-12 rounded-full bg-purple-500/20 flex items-center justify-center">
136
+ <i data-feather="users" class="text-purple-500 text-xl"></i>
137
+ </div>
138
+ </div>
139
+ <div class="mt-4">
140
+ <div class="flex items-center text-sm">
141
+ <span class="text-green-400">3 new this week</span>
142
+ </div>
143
+ </div>
144
+ </div>
145
+ </div>
146
+
147
+ <!-- Recent Projects -->
148
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 rounded-2xl border border-gray-700 shadow-xl p-6 mb-8 animate-slide-in" style="animation-delay: 0.4s">
149
+ <div class="flex justify-between items-center mb-6">
150
+ <h2 class="text-2xl font-bold">Recent Projects</h2>
151
+ <a href="projects.html" class="text-primary hover:text-primary/80 flex items-center space-x-2">
152
+ <span>View All</span>
153
+ <i data-feather="arrow-right"></i>
154
+ </a>
155
+ </div>
156
+ <div class="overflow-x-auto">
157
+ <table class="w-full">
158
+ <thead>
159
+ <tr class="text-left text-gray-400 border-b border-gray-700">
160
+ <th class="pb-4">Project</th>
161
+ <th class="pb-4">Category</th>
162
+ <th class="pb-4">Status</th>
163
+ <th class="pb-4">Completion</th>
164
+ <th class="pb-4">Client</th>
165
+ <th class="pb-4">Actions</th>
166
+ </tr>
167
+ </thead>
168
+ <tbody id="recentProjects">
169
+ <!-- Will be populated by JavaScript -->
170
+ </tbody>
171
+ </table>
172
+ </div>
173
+ </div>
174
+
175
+ <!-- Charts & Reports -->
176
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
177
+ <!-- Category Distribution -->
178
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 rounded-2xl border border-gray-700 shadow-xl p-6 animate-slide-in" style="animation-delay: 0.5s">
179
+ <h2 class="text-2xl font-bold mb-6">Projects by Category</h2>
180
+ <div class="h-64 flex items-center justify-center">
181
+ <canvas id="categoryChart"></canvas>
182
+ </div>
183
+ </div>
184
+
185
+ <!-- Revenue Report -->
186
+ <div class="bg-gradient-to-br from-gray-800 to-gray-900 rounded-2xl border border-gray-700 shadow-xl p-6 animate-slide-in" style="animation-delay: 0.6s">
187
+ <div class="flex justify-between items-center mb-6">
188
+ <h2 class="text-2xl font-bold">Revenue Report</h2>
189
+ <button class="px-4 py-2 bg-primary/20 text-primary rounded-lg hover:bg-primary/30 transition-colors" onclick="window.printReport()">
190
+ <i data-feather="printer" class="mr-2"></i>
191
+ Print Report
192
+ </button>
193
+ </div>
194
+ <div class="h-64">
195
+ <canvas id="revenueChart"></canvas>
196
+ </div>
197
+ </div>
198
+ </div>
199
+ </main>
200
+
201
+ <!-- Modals -->
202
+ <div id="projectModal" class="fixed inset-0 bg-black/50 hidden items-center justify-center z-50">
203
+ <div class="bg-gray-800 rounded-2xl p-8 max-w-2xl w-full mx-4 animate-slide-in">
204
+ <!-- Modal content will be loaded here -->
205
+ </div>
206
+ </div>
207
+
208
+ <!-- Scripts -->
209
+ <script src="components/navbar.js"></script>
210
+ <script src="components/sidebar.js"></script>
211
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
212
+ <script src="script.js"></script>
213
+ <script>
214
+ feather.replace();
215
+ // Initialize charts
216
+ document.addEventListener('DOMContentLoaded', function() {
217
+ initializeCharts();
218
+ loadRecentProjects();
219
+ });
220
+ </script>
221
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
222
+ </body>
223
+ </html>
script.js ADDED
@@ -0,0 +1,468 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Global State
2
+ let state = {
3
+ projects: [],
4
+ clients: [],
5
+ categories: ['Web Development', 'Mobile Apps', 'AI/ML', 'Game Dev', 'Blockchain', 'IoT', 'DevOps', 'Desktop Apps'],
6
+ currentFilter: 'all'
7
+ };
8
+
9
+ // DOM Elements
10
+ const recentProjectsTable = document.getElementById('recentProjects');
11
+ const projectModal = document.getElementById('projectModal');
12
+ let categoryChart = null;
13
+ let revenueChart = null;
14
+
15
+ // Initialize Charts
16
+ function initializeCharts() {
17
+ // Category Distribution Chart
18
+ const categoryCtx = document.getElementById('categoryChart').getContext('2d');
19
+ categoryChart = new Chart(categoryCtx, {
20
+ type: 'doughnut',
21
+ data: {
22
+ labels: state.categories,
23
+ datasets: [{
24
+ data: [15, 8, 6, 4, 3, 2, 2, 2],
25
+ backgroundColor: [
26
+ '#6366f1', '#f59e0b', '#10b981', '#ef4444', '#8b5cf6', '#06b6d4', '#f97316', '#84cc16'
27
+ ],
28
+ borderWidth: 2,
29
+ borderColor: '#0f172a'
30
+ }]
31
+ },
32
+ options: {
33
+ responsive: true,
34
+ maintainAspectRatio: false,
35
+ plugins: {
36
+ legend: {
37
+ position: 'right',
38
+ labels: {
39
+ color: '#cbd5e1',
40
+ padding: 20
41
+ }
42
+ }
43
+ },
44
+ animation: {
45
+ animateScale: true,
46
+ animateRotate: true
47
+ }
48
+ }
49
+ });
50
+
51
+ // Revenue Chart
52
+ const revenueCtx = document.getElementById('revenueChart').getContext('2d');
53
+ revenueChart = new Chart(revenueCtx, {
54
+ type: 'line',
55
+ data: {
56
+ labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
57
+ datasets: [{
58
+ label: 'Revenue',
59
+ data: [4500, 5200, 7800, 9200, 12500, 14800, 16500],
60
+ borderColor: '#f59e0b',
61
+ backgroundColor: 'rgba(245, 158, 11, 0.1)',
62
+ borderWidth: 3,
63
+ fill: true,
64
+ tension: 0.4
65
+ }]
66
+ },
67
+ options: {
68
+ responsive: true,
69
+ maintainAspectRatio: false,
70
+ plugins: {
71
+ legend: {
72
+ labels: {
73
+ color: '#cbd5e1'
74
+ }
75
+ }
76
+ },
77
+ scales: {
78
+ x: {
79
+ grid: {
80
+ color: 'rgba(255, 255, 255, 0.1)'
81
+ },
82
+ ticks: {
83
+ color: '#cbd5e1'
84
+ }
85
+ },
86
+ y: {
87
+ grid: {
88
+ color: 'rgba(255, 255, 255, 0.1)'
89
+ },
90
+ ticks: {
91
+ color: '#cbd5e1',
92
+ callback: function(value) {
93
+ return '$' + value;
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ });
100
+ }
101
+
102
+ // Load Recent Projects
103
+ function loadRecentProjects() {
104
+ const sampleProjects = [
105
+ {
106
+ id: 1,
107
+ name: 'E-Commerce Platform',
108
+ category: 'Web Development',
109
+ status: 'complete',
110
+ completion: '100%',
111
+ client: 'TechCorp Inc.',
112
+ date: '2024-01-15',
113
+ amount: '$12,500',
114
+ paid: true
115
+ },
116
+ {
117
+ id: 2,
118
+ name: 'Fitness Mobile App',
119
+ category: 'Mobile Apps',
120
+ status: 'in-progress',
121
+ completion: '75%',
122
+ client: 'FitLife LLC',
123
+ date: '2024-02-20',
124
+ amount: '$8,000',
125
+ paid: false
126
+ },
127
+ {
128
+ id: 3,
129
+ name: 'AI Chat Assistant',
130
+ category: 'AI/ML',
131
+ status: 'in-progress',
132
+ completion: '60%',
133
+ client: 'Innovate AI',
134
+ date: '2024-03-10',
135
+ amount: '$15,000',
136
+ paid: true
137
+ },
138
+ {
139
+ id: 4,
140
+ name: 'Blockchain Wallet',
141
+ category: 'Blockchain',
142
+ status: 'pending',
143
+ completion: '30%',
144
+ client: 'CryptoWorks',
145
+ date: '2024-03-25',
146
+ amount: '$20,000',
147
+ paid: false
148
+ },
149
+ {
150
+ id: 5,
151
+ name: 'Game Engine',
152
+ category: 'Game Dev',
153
+ status: 'complete',
154
+ completion: '100%',
155
+ client: 'GameDev Studio',
156
+ date: '2024-01-30',
157
+ amount: '$25,000',
158
+ paid: true
159
+ }
160
+ ];
161
+
162
+ recentProjectsTable.innerHTML = '';
163
+ sampleProjects.forEach(project => {
164
+ const row = document.createElement('tr');
165
+ row.className = 'border-b border-gray-700 hover:bg-gray-800/50 transition-colors';
166
+ row.innerHTML = `
167
+ <td class="py-4">
168
+ <div class="flex items-center space-x-3">
169
+ <div class="w-10 h-10 rounded-lg bg-gradient-to-br from-primary/20 to-secondary/20 flex items-center justify-center">
170
+ <i data-feather="folder" class="text-primary"></i>
171
+ </div>
172
+ <div>
173
+ <h4 class="font-medium">${project.name}</h4>
174
+ <p class="text-sm text-gray-400">Started: ${project.date}</p>
175
+ </div>
176
+ </div>
177
+ </td>
178
+ <td class="py-4">
179
+ <span class="px-3 py-1 rounded-full text-xs bg-gray-700 text-gray-300">${project.category}</span>
180
+ </td>
181
+ <td class="py-4">
182
+ <span class="status-badge status-${project.status}">${project.status.replace('-', ' ')}</span>
183
+ </td>
184
+ <td class="py-4">
185
+ <div class="flex items-center space-x-2">
186
+ <div class="w-24 h-2 bg-gray-700 rounded-full overflow-hidden">
187
+ <div class="h-full bg-gradient-to-r from-primary to-secondary" style="width: ${project.completion}"></div>
188
+ </div>
189
+ <span class="text-sm">${project.completion}</span>
190
+ </div>
191
+ </td>
192
+ <td class="py-4">
193
+ <div class="flex items-center space-x-2">
194
+ <div class="w-8 h-8 rounded-full bg-gradient-to-br from-primary to-secondary flex items-center justify-center">
195
+ <i data-feather="user" class="text-white text-xs"></i>
196
+ </div>
197
+ <span>${project.client}</span>
198
+ </div>
199
+ </td>
200
+ <td class="py-4">
201
+ <div class="flex space-x-2">
202
+ <button class="w-8 h-8 rounded-lg bg-gray-700 hover:bg-gray-600 flex items-center justify-center transition-colors" onclick="viewProject(${project.id})" title="View Details">
203
+ <i data-feather="eye"></i>
204
+ </button>
205
+ <button class="w-8 h-8 rounded-lg bg-primary/20 hover:bg-primary/30 flex items-center justify-center transition-colors" onclick="editProject(${project.id})" title="Edit">
206
+ <i data-feather="edit-2"></i>
207
+ </button>
208
+ <button class="w-8 h-8 rounded-lg ${project.paid ? 'bg-green-500/20 hover:bg-green-500/30' : 'bg-red-500/20 hover:bg-red-500/30'} flex items-center justify-center transition-colors" onclick="togglePayment(${project.id})" title="${project.paid ? 'Mark as Unpaid' : 'Mark as Paid'}">
209
+ <i data-feather="${project.paid ? 'check-circle' : 'x-circle'}"></i>
210
+ </button>
211
+ </div>
212
+ </td>
213
+ `;
214
+ recentProjectsTable.appendChild(row);
215
+ });
216
+ feather.replace();
217
+ }
218
+
219
+ // View Project Details
220
+ function viewProject(id) {
221
+ const project = {
222
+ id: id,
223
+ name: 'Sample Project Details',
224
+ description: 'Detailed information about the project including requirements, progress, and client communications.',
225
+ category: 'Web Development',
226
+ status: 'in-progress',
227
+ startDate: '2024-01-15',
228
+ deadline: '2024-04-30',
229
+ client: 'TechCorp Inc.',
230
+ budget: '$12,500',
231
+ paid: '$8,000',
232
+ pending: '$4,500',
233
+ progress: '75%',
234
+ images: [
235
+ 'http://static.photos/technology/640x360/1',
236
+ 'http://static.photos/technology/640x360/2',
237
+ 'http://static.photos/technology/640x360/3'
238
+ ]
239
+ };
240
+
241
+ projectModal.innerHTML = `
242
+ <div class="space-y-6">
243
+ <div class="flex justify-between items-start">
244
+ <div>
245
+ <h3 class="text-2xl font-bold">${project.name}</h3>
246
+ <p class="text-gray-400 mt-2">${project.category}</p>
247
+ </div>
248
+ <button onclick="closeModal()" class="w-10 h-10 rounded-full bg-gray-700 hover:bg-gray-600 flex items-center justify-center transition-colors">
249
+ <i data-feather="x"></i>
250
+ </button>
251
+ </div>
252
+
253
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
254
+ <div>
255
+ <h4 class="font-semibold mb-2">Project Description</h4>
256
+ <p class="text-gray-300">${project.description}</p>
257
+ </div>
258
+ <div>
259
+ <h4 class="font-semibold mb-2">Progress</h4>
260
+ <div class="space-y-4">
261
+ <div>
262
+ <div class="flex justify-between mb-1">
263
+ <span>Completion</span>
264
+ <span>${project.progress}</span>
265
+ </div>
266
+ <div class="w-full h-3 bg-gray-700 rounded-full overflow-hidden">
267
+ <div class="h-full bg-gradient-to-r from-primary to-secondary" style="width: ${project.progress}"></div>
268
+ </div>
269
+ </div>
270
+ <div class="flex justify-between">
271
+ <div>
272
+ <p class="text-sm text-gray-400">Start Date</p>
273
+ <p class="font-medium">${project.startDate}</p>
274
+ </div>
275
+ <div>
276
+ <p class="text-sm text-gray-400">Deadline</p>
277
+ <p class="font-medium">${project.deadline}</p>
278
+ </div>
279
+ </div>
280
+ </div>
281
+ </div>
282
+ </div>
283
+
284
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
285
+ <div class="bg-gray-700/30 p-4 rounded-xl">
286
+ <p class="text-sm text-gray-400">Total Budget</p>
287
+ <p class="text-2xl font-bold">${project.budget}</p>
288
+ </div>
289
+ <div class="bg-green-500/10 p-4 rounded-xl">
290
+ <p class="text-sm text-gray-400">Amount Paid</p>
291
+ <p class="text-2xl font-bold text-green-400">${project.paid}</p>
292
+ </div>
293
+ <div class="bg-red-500/10 p-4 rounded-xl">
294
+ <p class="text-sm text-gray-400">Pending Amount</p>
295
+ <p class="text-2xl font-bold text-red-400">${project.pending}</p>
296
+ </div>
297
+ </div>
298
+
299
+ <div>
300
+ <h4 class="font-semibold mb-3">Project Images</h4>
301
+ <div class="grid grid-cols-3 gap-4">
302
+ ${project.images.map(img => `
303
+ <div class="aspect-video rounded-lg overflow-hidden">
304
+ <img src="${img}" alt="Project Screenshot" class="w-full h-full object-cover hover:scale-110 transition-transform duration-300">
305
+ </div>
306
+ `).join('')}
307
+ </div>
308
+ </div>
309
+
310
+ <div class="flex justify-end space-x-4">
311
+ <button onclick="closeModal()" class="px-6 py-3 bg-gray-700 hover:bg-gray-600 rounded-lg font-medium transition-colors">
312
+ Close
313
+ </button>
314
+ <button onclick="generateReport(${id})" class="px-6 py-3 bg-primary hover:bg-primary/80 rounded-lg font-medium flex items-center space-x-2 transition-colors">
315
+ <i data-feather="printer"></i>
316
+ <span>Print Report</span>
317
+ </button>
318
+ </div>
319
+ </div>
320
+ `;
321
+
322
+ projectModal.classList.remove('hidden');
323
+ projectModal.classList.add('flex');
324
+ feather.replace();
325
+ }
326
+
327
+ // Edit Project
328
+ function editProject(id) {
329
+ alert(`Editing project #${id} - Feature coming soon!`);
330
+ }
331
+
332
+ // Toggle Payment Status
333
+ function togglePayment(id) {
334
+ alert(`Toggling payment status for project #${id} - Feature coming soon!`);
335
+ }
336
+
337
+ // Generate Report
338
+ function generateReport(id) {
339
+ const printWindow = window.open('', '_blank');
340
+ printWindow.document.write(`
341
+ <html>
342
+ <head>
343
+ <title>Project Report #${id}</title>
344
+ <style>
345
+ body { font-family: Arial, sans-serif; margin: 40px; }
346
+ h1 { color: #333; }
347
+ .section { margin: 30px 0; }
348
+ table { width: 100%; border-collapse: collapse; }
349
+ th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }
350
+ th { background-color: #f5f5f5; }
351
+ .total { font-weight: bold; font-size: 1.2em; }
352
+ @media print {
353
+ .no-print { display: none; }
354
+ }
355
+ </style>
356
+ </head>
357
+ <body>
358
+ <h1>CodeVault Pro - Project Report</h1>
359
+ <p>Generated on: ${new Date().toLocaleDateString()}</p>
360
+
361
+ <div class="section">
362
+ <h2>Project Summary</h2>
363
+ <p>Complete project report including timeline, budget, and progress details.</p>
364
+ </div>
365
+
366
+ <div class="section">
367
+ <h2>Financial Summary</h2>
368
+ <table>
369
+ <tr>
370
+ <th>Item</th>
371
+ <th>Amount</th>
372
+ </tr>
373
+ <tr>
374
+ <td>Total Budget</td>
375
+ <td>$12,500.00</td>
376
+ </tr>
377
+ <tr>
378
+ <td>Amount Received</td>
379
+ <td>$8,000.00</td>
380
+ </tr>
381
+ <tr class="total">
382
+ <td>Pending Amount</td>
383
+ <td>$4,500.00</td>
384
+ </tr>
385
+ </table>
386
+ </div>
387
+
388
+ <div class="section">
389
+ <h2>Project Timeline</h2>
390
+ <table>
391
+ <tr>
392
+ <th>Phase</th>
393
+ <th>Status</th>
394
+ <th>Completion Date</th>
395
+ </tr>
396
+ <tr>
397
+ <td>Planning</td>
398
+ <td>Completed</td>
399
+ <td>2024-01-20</td>
400
+ </tr>
401
+ <tr>
402
+ <td>Development</td>
403
+ <td>In Progress</td>
404
+ <td>2024-04-15</td>
405
+ </tr>
406
+ <tr>
407
+ <td>Testing</td>
408
+ <td>Pending</td>
409
+ <td>2024-04-30</td>
410
+ </tr>
411
+ </table>
412
+ </div>
413
+
414
+ <div class="section no-print">
415
+ <button onclick="window.print()">Print Report</button>
416
+ </div>
417
+ </body>
418
+ </html>
419
+ `);
420
+ printWindow.document.close();
421
+ }
422
+
423
+ // Close Modal
424
+ function closeModal() {
425
+ projectModal.classList.add('hidden');
426
+ projectModal.classList.remove('flex');
427
+ }
428
+
429
+ // Print Report
430
+ window.printReport = function() {
431
+ window.print();
432
+ }
433
+
434
+ // Filter Projects
435
+ function filterProjects(category) {
436
+ state.currentFilter = category;
437
+ alert(`Filtering projects by: ${category === 'all' ? 'All Categories' : category}`);
438
+ }
439
+
440
+ // Add New Project
441
+ function addNewProject() {
442
+ alert('Add New Project feature coming soon!');
443
+ }
444
+
445
+ // Add New Client
446
+ function addNewClient() {
447
+ alert('Add New Client feature coming soon!');
448
+ }
449
+
450
+ // Initialize app
451
+ document.addEventListener('DOMContentLoaded', function() {
452
+ // Load initial data
453
+ loadRecentProjects();
454
+
455
+ // Add event listeners for navigation
456
+ document.addEventListener('click', function(e) {
457
+ if (e.target.closest('[data-nav]')) {
458
+ const page = e.target.closest('[data-nav]').getAttribute('data-nav');
459
+ navigateTo(page);
460
+ }
461
+ });
462
+ });
463
+
464
+ // Navigation function
465
+ function navigateTo(page) {
466
+ // In a real app, this would load different pages
467
+ alert(`Navigating to ${page} - Feature coming soon!`);
468
+ }
style.css CHANGED
@@ -1,28 +1,213 @@
 
 
 
 
 
 
 
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
 
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
 
 
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Global Styles */
2
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
3
+
4
+ * {
5
+ margin: 0;
6
+ padding: 0;
7
+ box-sizing: border-box;
8
+ }
9
+
10
  body {
11
+ font-family: 'Inter', sans-serif;
12
+ overflow-x: hidden;
13
+ }
14
+
15
+ /* Custom Scrollbar */
16
+ ::-webkit-scrollbar {
17
+ width: 8px;
18
+ height: 8px;
19
+ }
20
+
21
+ ::-webkit-scrollbar-track {
22
+ background: rgba(255, 255, 255, 0.05);
23
+ border-radius: 4px;
24
+ }
25
+
26
+ ::-webkit-scrollbar-thumb {
27
+ background: linear-gradient(45deg, #6366f1, #f59e0b);
28
+ border-radius: 4px;
29
+ }
30
+
31
+ ::-webkit-scrollbar-thumb:hover {
32
+ background: linear-gradient(45deg, #4f46e5, #d97706);
33
+ }
34
+
35
+ /* Print Styles */
36
+ @media print {
37
+ nav-bar,
38
+ side-bar,
39
+ button {
40
+ display: none !important;
41
+ }
42
+
43
+ body {
44
+ background: white !important;
45
+ color: black !important;
46
+ }
47
+
48
+ .bg-gradient-to-br {
49
+ background: white !important;
50
+ border: 1px solid #ddd !important;
51
+ }
52
+ }
53
+
54
+ /* Animation Classes */
55
+ .animate-float-delay-1 {
56
+ animation-delay: 0.2s;
57
+ }
58
+
59
+ .animate-float-delay-2 {
60
+ animation-delay: 0.4s;
61
+ }
62
+
63
+ .animate-float-delay-3 {
64
+ animation-delay: 0.6s;
65
+ }
66
+
67
+ /* Glass Effect */
68
+ .glass-effect {
69
+ background: rgba(255, 255, 255, 0.05);
70
+ backdrop-filter: blur(10px);
71
+ border: 1px solid rgba(255, 255, 255, 0.1);
72
+ }
73
+
74
+ /* Gradient Text */
75
+ .gradient-text {
76
+ background: linear-gradient(45deg, #6366f1, #f59e0b);
77
+ -webkit-background-clip: text;
78
+ -webkit-text-fill-color: transparent;
79
+ background-clip: text;
80
+ }
81
+
82
+ /* Hover Effects */
83
+ .hover-lift {
84
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
85
  }
86
 
87
+ .hover-lift:hover {
88
+ transform: translateY(-4px);
89
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
90
  }
91
 
92
+ /* Loading Skeleton */
93
+ .skeleton {
94
+ background: linear-gradient(90deg, #1e293b 25%, #334155 50%, #1e293b 75%);
95
+ background-size: 200% 100%;
96
+ animation: loading 1.5s infinite;
97
  }
98
 
99
+ @keyframes loading {
100
+ 0% {
101
+ background-position: 200% 0;
102
+ }
103
+ 100% {
104
+ background-position: -200% 0;
105
+ }
106
  }
107
 
108
+ /* Card Hover Effects */
109
+ .project-card {
110
+ transition: all 0.3s ease;
111
+ position: relative;
112
+ overflow: hidden;
113
  }
114
+
115
+ .project-card::before {
116
+ content: '';
117
+ position: absolute;
118
+ top: 0;
119
+ left: -100%;
120
+ width: 100%;
121
+ height: 100%;
122
+ background: linear-gradient(90deg, transparent, rgba(99, 102, 241, 0.1), transparent);
123
+ transition: left 0.5s ease;
124
+ }
125
+
126
+ .project-card:hover::before {
127
+ left: 100%;
128
+ }
129
+
130
+ /* Status Badges */
131
+ .status-badge {
132
+ padding: 4px 12px;
133
+ border-radius: 20px;
134
+ font-size: 12px;
135
+ font-weight: 600;
136
+ text-transform: uppercase;
137
+ letter-spacing: 0.5px;
138
+ }
139
+
140
+ .status-complete {
141
+ background: rgba(34, 197, 94, 0.2);
142
+ color: #22c55e;
143
+ }
144
+
145
+ .status-in-progress {
146
+ background: rgba(249, 115, 22, 0.2);
147
+ color: #f97316;
148
+ }
149
+
150
+ .status-pending {
151
+ background: rgba(239, 68, 68, 0.2);
152
+ color: #ef4444;
153
+ }
154
+
155
+ /* Form Styles */
156
+ .form-input {
157
+ background: rgba(255, 255, 255, 0.05);
158
+ border: 1px solid rgba(255, 255, 255, 0.1);
159
+ border-radius: 12px;
160
+ padding: 12px 16px;
161
+ color: white;
162
+ transition: all 0.3s ease;
163
+ }
164
+
165
+ .form-input:focus {
166
+ outline: none;
167
+ border-color: #6366f1;
168
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
169
+ }
170
+
171
+ /* Button Styles */
172
+ .btn-primary {
173
+ background: linear-gradient(45deg, #6366f1, #4f46e5);
174
+ padding: 12px 24px;
175
+ border-radius: 12px;
176
+ font-weight: 600;
177
+ transition: all 0.3s ease;
178
+ }
179
+
180
+ .btn-primary:hover {
181
+ transform: translateY(-2px);
182
+ box-shadow: 0 10px 20px rgba(99, 102, 241, 0.3);
183
+ }
184
+
185
+ .btn-secondary {
186
+ background: linear-gradient(45deg, #f59e0b, #d97706);
187
+ padding: 12px 24px;
188
+ border-radius: 12px;
189
+ font-weight: 600;
190
+ transition: all 0.3s ease;
191
+ }
192
+
193
+ .btn-secondary:hover {
194
+ transform: translateY(-2px);
195
+ box-shadow: 0 10px 20px rgba(245, 158, 11, 0.3);
196
+ }
197
+
198
+ /* Notification Badge */
199
+ .notification-badge {
200
+ position: absolute;
201
+ top: -8px;
202
+ right: -8px;
203
+ background: linear-gradient(45deg, #ef4444, #dc2626);
204
+ color: white;
205
+ border-radius: 50%;
206
+ width: 20px;
207
+ height: 20px;
208
+ display: flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+ font-size: 10px;
212
+ font-weight: bold;
213
+ }