nguyenthanhasia commited on
Commit
0da04ea
·
verified ·
1 Parent(s): c05c6de

Upload 3 files

Browse files
Files changed (3) hide show
  1. index.html +369 -18
  2. script.js +749 -0
  3. styles.css +1156 -0
index.html CHANGED
@@ -1,19 +1,370 @@
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>🤖 Agentic AI Hub - Comprehensive Repository Collection</title>
7
+ <meta name="description" content="Discover the most comprehensive collection of Agentic AI repositories for scientific research automation, multi-agent systems, and cutting-edge AI frameworks.">
8
+ <meta name="keywords" content="Agentic AI, Multi-Agent Systems, Scientific Research Automation, AI Frameworks, Machine Learning, The AI Scientist">
9
+ <meta name="author" content="Agentic AI Hub">
10
+
11
+ <!-- Open Graph Meta Tags -->
12
+ <meta property="og:title" content="🤖 Agentic AI Hub - Comprehensive Repository Collection">
13
+ <meta property="og:description" content="Discover cutting-edge AI agent frameworks and research automation tools">
14
+ <meta property="og:type" content="website">
15
+ <meta property="og:image" content="https://via.placeholder.com/1200x630/667eea/ffffff?text=Agentic+AI+Hub">
16
+
17
+ <!-- Twitter Card Meta Tags -->
18
+ <meta name="twitter:card" content="summary_large_image">
19
+ <meta name="twitter:title" content="🤖 Agentic AI Hub">
20
+ <meta name="twitter:description" content="Comprehensive collection of Agentic AI repositories">
21
+
22
+ <!-- Favicon -->
23
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🤖</text></svg>">
24
+
25
+ <!-- Fonts -->
26
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
27
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
28
+
29
+ <!-- CSS -->
30
+ <link rel="stylesheet" href="styles.css">
31
+ </head>
32
+ <body>
33
+ <!-- Header -->
34
+ <header class="header">
35
+ <div class="container">
36
+ <div class="header-content">
37
+ <div class="logo">
38
+ <h1>🤖 Agentic AI Hub</h1>
39
+ <p>Comprehensive Repository Collection</p>
40
+ </div>
41
+ <nav class="nav">
42
+ <a href="#explore" class="nav-link">Explore</a>
43
+ <a href="#stats" class="nav-link">Statistics</a>
44
+ <a href="#guide" class="nav-link">Quick Start</a>
45
+ <a href="#about" class="nav-link">About</a>
46
+ </nav>
47
+ </div>
48
+ </div>
49
+ </header>
50
+
51
+ <!-- Hero Section -->
52
+ <section class="hero">
53
+ <div class="container">
54
+ <div class="hero-content">
55
+ <h2 class="hero-title">Discover the Future of AI Agents</h2>
56
+ <p class="hero-subtitle">
57
+ Explore the most comprehensive collection of Agentic AI repositories for scientific research automation,
58
+ multi-agent systems, and cutting-edge AI frameworks
59
+ </p>
60
+ <div class="hero-stats">
61
+ <div class="stat-item">
62
+ <span class="stat-number" id="total-repos">38</span>
63
+ <span class="stat-label">Repositories</span>
64
+ </div>
65
+ <div class="stat-item">
66
+ <span class="stat-number">8</span>
67
+ <span class="stat-label">Categories</span>
68
+ </div>
69
+ <div class="stat-item">
70
+ <span class="stat-number" id="research-tools">25</span>
71
+ <span class="stat-label">Research Tools</span>
72
+ </div>
73
+ </div>
74
+ <a href="#explore" class="cta-button">
75
+ <i class="fas fa-rocket"></i>
76
+ Start Exploring
77
+ </a>
78
+ </div>
79
+ </div>
80
+ </section>
81
+
82
+ <!-- Search and Filter Section -->
83
+ <section id="explore" class="search-section">
84
+ <div class="container">
85
+ <h2 class="section-title">🔍 Explore Repositories</h2>
86
+
87
+ <div class="search-controls">
88
+ <div class="search-bar">
89
+ <i class="fas fa-search search-icon"></i>
90
+ <input type="text" id="search-input" placeholder="Search repositories by name, description, organization, or tags...">
91
+ <button id="clear-search" class="clear-btn" title="Clear search">
92
+ <i class="fas fa-times"></i>
93
+ </button>
94
+ </div>
95
+
96
+ <div class="filters">
97
+ <div class="filter-group">
98
+ <label for="category-filter">📂 Category</label>
99
+ <select id="category-filter">
100
+ <option value="all">All Categories</option>
101
+ <option value="Scientific Research Automation">Scientific Research Automation</option>
102
+ <option value="Multi-Agent Frameworks">Multi-Agent Frameworks</option>
103
+ <option value="Multi-Agent Systems">Multi-Agent Systems</option>
104
+ <option value="Monitoring & Observability">Monitoring & Observability</option>
105
+ <option value="Research Tools">Research Tools</option>
106
+ <option value="Agent Platforms">Agent Platforms</option>
107
+ <option value="Resources & Collections">Resources & Collections</option>
108
+ </select>
109
+ </div>
110
+
111
+ <div class="filter-group">
112
+ <label for="stars-filter">⭐ Minimum Stars</label>
113
+ <select id="stars-filter">
114
+ <option value="0">Any</option>
115
+ <option value="1000">1k+</option>
116
+ <option value="5000">5k+</option>
117
+ <option value="10000">10k+</option>
118
+ <option value="20000">20k+</option>
119
+ </select>
120
+ </div>
121
+
122
+ <div class="filter-group">
123
+ <label for="cost-filter">🔧 Type</label>
124
+ <select id="cost-filter">
125
+ <option value="all">All Types</option>
126
+ <option value="Open Source">Open Source</option>
127
+ <option value="Research Tool">Research Tool</option>
128
+ <option value="Commercial">Commercial</option>
129
+ </select>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <div class="results-info">
135
+ <span id="results-count">38 repositories found</span>
136
+ <div class="sort-options">
137
+ <label for="sort-select">Sort by:</label>
138
+ <select id="sort-select">
139
+ <option value="name">Name</option>
140
+ <option value="stars">Stars</option>
141
+ <option value="category">Category</option>
142
+ <option value="organization">Organization</option>
143
+ </select>
144
+ </div>
145
+ </div>
146
+ </div>
147
+ </section>
148
+
149
+ <!-- Repository Grid -->
150
+ <section class="repositories-section">
151
+ <div class="container">
152
+ <div id="repositories-grid" class="repositories-grid">
153
+ <!-- Repository cards will be dynamically generated here -->
154
+ </div>
155
+
156
+ <div id="no-results" class="no-results" style="display: none;">
157
+ <div class="no-results-content">
158
+ <i class="fas fa-search fa-3x"></i>
159
+ <h3>No repositories found</h3>
160
+ <p>Try adjusting your search criteria or browse all repositories.</p>
161
+ <button id="reset-filters" class="reset-btn">Reset Filters</button>
162
+ </div>
163
+ </div>
164
+ </div>
165
+ </section>
166
+
167
+ <!-- Statistics Section -->
168
+ <section id="stats" class="stats-section">
169
+ <div class="container">
170
+ <h2 class="section-title">📊 Statistics & Analytics</h2>
171
+
172
+ <div class="stats-grid">
173
+ <div class="stat-card">
174
+ <div class="stat-icon">🔬</div>
175
+ <div class="stat-info">
176
+ <span class="stat-number">7</span>
177
+ <span class="stat-label">Scientific Research Automation</span>
178
+ </div>
179
+ </div>
180
+
181
+ <div class="stat-card">
182
+ <div class="stat-icon">🤖</div>
183
+ <div class="stat-info">
184
+ <span class="stat-number">9</span>
185
+ <span class="stat-label">Multi-Agent Frameworks</span>
186
+ </div>
187
+ </div>
188
+
189
+ <div class="stat-card">
190
+ <div class="stat-icon">🔍</div>
191
+ <div class="stat-info">
192
+ <span class="stat-number">6</span>
193
+ <span class="stat-label">Multi-Agent Systems</span>
194
+ </div>
195
+ </div>
196
+
197
+ <div class="stat-card">
198
+ <div class="stat-icon">📊</div>
199
+ <div class="stat-info">
200
+ <span class="stat-number">3</span>
201
+ <span class="stat-label">Monitoring & Observability</span>
202
+ </div>
203
+ </div>
204
+ </div>
205
+
206
+ <div class="category-breakdown">
207
+ <h3>Repository Distribution by Category</h3>
208
+ <div id="category-chart" class="category-chart">
209
+ <!-- Category distribution will be generated here -->
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </section>
214
+
215
+ <!-- Quick Start Guide -->
216
+ <section id="guide" class="guide-section">
217
+ <div class="container">
218
+ <h2 class="section-title">🚀 Quick Start Guide</h2>
219
+
220
+ <div class="guide-grid">
221
+ <div class="guide-card beginner">
222
+ <div class="guide-header">
223
+ <i class="fas fa-seedling"></i>
224
+ <h3>For Beginners</h3>
225
+ </div>
226
+ <div class="guide-content">
227
+ <ol>
228
+ <li><strong>AutoGen:</strong> Microsoft's user-friendly multi-agent framework</li>
229
+ <li><strong>CrewAI:</strong> Fast and flexible framework for role-playing agents</li>
230
+ <li><strong>OpenAI Swarm:</strong> Educational framework for learning multi-agent concepts</li>
231
+ </ol>
232
+ </div>
233
+ </div>
234
+
235
+ <div class="guide-card researcher">
236
+ <div class="guide-header">
237
+ <i class="fas fa-microscope"></i>
238
+ <h3>For Researchers</h3>
239
+ </div>
240
+ <div class="guide-content">
241
+ <ol>
242
+ <li><strong>The AI Scientist:</strong> Fully automated scientific research system</li>
243
+ <li><strong>AI-Researcher:</strong> Comprehensive research lifecycle automation</li>
244
+ <li><strong>Curie:</strong> Rigorous scientific experimentation framework</li>
245
+ </ol>
246
+ </div>
247
+ </div>
248
+
249
+ <div class="guide-card advanced">
250
+ <div class="guide-header">
251
+ <i class="fas fa-rocket"></i>
252
+ <h3>For Advanced Users</h3>
253
+ </div>
254
+ <div class="guide-content">
255
+ <ol>
256
+ <li><strong>LangGraph:</strong> Build complex stateful agent applications</li>
257
+ <li><strong>MetaGPT:</strong> Create AI software companies with natural language</li>
258
+ <li><strong>Semantic Kernel:</strong> Enterprise-grade agent orchestration</li>
259
+ </ol>
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </section>
265
+
266
+ <!-- About Section -->
267
+ <section id="about" class="about-section">
268
+ <div class="container">
269
+ <h2 class="section-title">🎯 About This Collection</h2>
270
+
271
+ <div class="about-content">
272
+ <div class="about-text">
273
+ <p>
274
+ This comprehensive collection features the most important and cutting-edge repositories in the Agentic AI space,
275
+ with a special focus on scientific research automation and multi-agent systems. Each repository has been carefully
276
+ curated based on innovation level, community impact, research relevance, technical quality, and active development.
277
+ </p>
278
+
279
+ <h3>🔬 Special Focus: Scientific Research Automation</h3>
280
+ <p>
281
+ This collection particularly highlights repositories related to <strong>The AI Scientist</strong> and similar
282
+ breakthrough systems that can automate various aspects of the scientific research process, from idea generation
283
+ to paper writing and peer review simulation.
284
+ </p>
285
+
286
+ <div class="features-list">
287
+ <h4>Selection Criteria:</h4>
288
+ <ul>
289
+ <li><strong>Innovation Level:</strong> Breakthrough technologies and novel approaches</li>
290
+ <li><strong>Community Impact:</strong> GitHub stars, forks, and community engagement</li>
291
+ <li><strong>Research Relevance:</strong> Alignment with scientific research automation trends</li>
292
+ <li><strong>Technical Quality:</strong> Code quality, documentation, and maintainability</li>
293
+ <li><strong>Active Development:</strong> Recent commits and ongoing improvements</li>
294
+ </ul>
295
+ </div>
296
+ </div>
297
+
298
+ <div class="about-highlights">
299
+ <h4>🌟 Highlights</h4>
300
+ <div class="highlight-item">
301
+ <strong>The AI Scientist</strong> - Breakthrough in automated scientific research and paper generation
302
+ </div>
303
+ <div class="highlight-item">
304
+ <strong>AutoGen</strong> - Most popular multi-agent framework (32.1k stars)
305
+ </div>
306
+ <div class="highlight-item">
307
+ <strong>MetaGPT</strong> - Highest starred multi-agent system (45.2k stars)
308
+ </div>
309
+ <div class="highlight-item">
310
+ <strong>CrewAI</strong> - Fast-growing multi-agent automation framework (22.8k stars)
311
+ </div>
312
+ </div>
313
+ </div>
314
+ </div>
315
+ </section>
316
+
317
+ <!-- Footer -->
318
+ <footer class="footer">
319
+ <div class="container">
320
+ <div class="footer-content">
321
+ <div class="footer-section">
322
+ <h4>🤖 Agentic AI Hub</h4>
323
+ <p>Comprehensive collection of cutting-edge AI agent repositories</p>
324
+ </div>
325
+
326
+ <div class="footer-section">
327
+ <h4>Quick Links</h4>
328
+ <ul>
329
+ <li><a href="#explore">Explore Repositories</a></li>
330
+ <li><a href="#stats">Statistics</a></li>
331
+ <li><a href="#guide">Quick Start Guide</a></li>
332
+ <li><a href="#about">About</a></li>
333
+ </ul>
334
+ </div>
335
+
336
+ <div class="footer-section">
337
+ <h4>Categories</h4>
338
+ <ul>
339
+ <li><a href="#" data-category="Scientific Research Automation">Scientific Research</a></li>
340
+ <li><a href="#" data-category="Multi-Agent Frameworks">Multi-Agent Frameworks</a></li>
341
+ <li><a href="#" data-category="Monitoring & Observability">Monitoring Tools</a></li>
342
+ </ul>
343
+ </div>
344
+
345
+ <div class="footer-section">
346
+ <h4>Connect</h4>
347
+ <div class="social-links">
348
+ <a href="#" title="GitHub"><i class="fab fa-github"></i></a>
349
+ <a href="#" title="Twitter"><i class="fab fa-twitter"></i></a>
350
+ <a href="#" title="LinkedIn"><i class="fab fa-linkedin"></i></a>
351
+ </div>
352
+ </div>
353
+ </div>
354
+
355
+ <div class="footer-bottom">
356
+ <p>&copy; 2025 Agentic AI Hub. Curated with ❤️ for the AI community. Last updated: June 2025</p>
357
+ </div>
358
+ </div>
359
+ </footer>
360
+
361
+ <!-- Back to Top Button -->
362
+ <button id="back-to-top" class="back-to-top" title="Back to top">
363
+ <i class="fas fa-chevron-up"></i>
364
+ </button>
365
+
366
+ <!-- JavaScript -->
367
+ <script src="script.js"></script>
368
+ </body>
369
  </html>
370
+
script.js ADDED
@@ -0,0 +1,749 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Repository Data
2
+ const repositories = [
3
+ {
4
+ name: "The AI Scientist",
5
+ url: "https://github.com/SakanaAI/AI-Scientist",
6
+ description: "Comprehensive system for automated scientific discovery, enabling Foundation Models to perform research independently and generate complete research papers",
7
+ category: "Scientific Research Automation",
8
+ stars: "18.2k",
9
+ starsNumeric: 18200,
10
+ features: ["Automated idea generation", "Experiment execution", "Paper writing", "Peer review simulation"],
11
+ organization: "Sakana AI",
12
+ cost: "Research Tool",
13
+ costDetails: "Academic Research",
14
+ tags: ["research", "automation", "scientific-discovery", "llm"],
15
+ isNew: false
16
+ },
17
+ {
18
+ name: "The AI Scientist v2",
19
+ url: "https://github.com/SakanaAI/AI-Scientist-v2",
20
+ description: "Generalized end-to-end agentic system that generated the first workshop paper written entirely by AI",
21
+ category: "Scientific Research Automation",
22
+ stars: "New",
23
+ starsNumeric: 0,
24
+ features: ["Workshop-level research", "End-to-end automation", "Peer review acceptance"],
25
+ organization: "Sakana AI",
26
+ cost: "Open Source",
27
+ costDetails: "Open Source Research",
28
+ tags: ["research", "automation", "workshop", "ai-generated"],
29
+ isNew: true
30
+ },
31
+ {
32
+ name: "AutoGen",
33
+ url: "https://github.com/microsoft/autogen",
34
+ description: "Programming framework for creating multi-agent AI applications that can act autonomously or work alongside humans",
35
+ category: "Multi-Agent Frameworks",
36
+ stars: "32.1k",
37
+ starsNumeric: 32100,
38
+ features: ["Multi-agent conversation", "Human participation", "Customizable agents"],
39
+ organization: "Microsoft",
40
+ cost: "Open Source",
41
+ costDetails: "Open Source Framework",
42
+ tags: ["multi-agent", "framework", "conversation", "microsoft"],
43
+ isNew: false
44
+ },
45
+ {
46
+ name: "LangGraph",
47
+ url: "https://github.com/langchain-ai/langgraph",
48
+ description: "Build resilient language agents as graphs with stateful, multi-actor applications",
49
+ category: "Multi-Agent Frameworks",
50
+ stars: "8.9k",
51
+ starsNumeric: 8900,
52
+ features: ["Graph-based agents", "Stateful applications", "LangChain integration"],
53
+ organization: "LangChain",
54
+ cost: "Open Source",
55
+ costDetails: "Open Source Framework",
56
+ tags: ["graph", "stateful", "langchain", "agents"],
57
+ isNew: false
58
+ },
59
+ {
60
+ name: "CrewAI",
61
+ url: "https://github.com/crewAIInc/crewAI",
62
+ description: "Fast and Flexible Multi-Agent Automation Framework for role-playing AI agents collaboration",
63
+ category: "Multi-Agent Frameworks",
64
+ stars: "22.8k",
65
+ starsNumeric: 22800,
66
+ features: ["Role-playing agents", "Fast automation", "Flexible framework"],
67
+ organization: "CrewAI Inc",
68
+ cost: "Open Source",
69
+ costDetails: "Open Source Framework",
70
+ tags: ["role-playing", "automation", "collaboration", "fast"],
71
+ isNew: false
72
+ },
73
+ {
74
+ name: "MetaGPT",
75
+ url: "https://github.com/FoundationAgents/MetaGPT",
76
+ description: "The Multi-Agent Framework: First AI Software Company, Towards Natural Language Programming",
77
+ category: "Multi-Agent Systems",
78
+ stars: "45.2k",
79
+ starsNumeric: 45200,
80
+ features: ["Software company simulation", "Natural language programming", "Multi-agent collaboration"],
81
+ organization: "Foundation Agents",
82
+ cost: "Open Source",
83
+ costDetails: "Open Source Framework",
84
+ tags: ["software-company", "nlp", "programming", "simulation"],
85
+ isNew: false
86
+ },
87
+ {
88
+ name: "Semantic Kernel",
89
+ url: "https://github.com/microsoft/semantic-kernel",
90
+ description: "Model-agnostic SDK empowering developers to build, orchestrate, and deploy AI agents and multi-agent systems",
91
+ category: "Multi-Agent Frameworks",
92
+ stars: "22.4k",
93
+ starsNumeric: 22400,
94
+ features: ["Model-agnostic", "SDK framework", "Agent orchestration"],
95
+ organization: "Microsoft",
96
+ cost: "Open Source",
97
+ costDetails: "Open Source Framework",
98
+ tags: ["sdk", "model-agnostic", "orchestration", "microsoft"],
99
+ isNew: false
100
+ },
101
+ {
102
+ name: "OpenAI Swarm",
103
+ url: "https://github.com/openai/swarm",
104
+ description: "Educational framework exploring ergonomic, lightweight multi-agent orchestration",
105
+ category: "Multi-Agent Frameworks",
106
+ stars: "19.9k",
107
+ starsNumeric: 19900,
108
+ features: ["Lightweight orchestration", "Educational framework", "Client-side coordination"],
109
+ organization: "OpenAI",
110
+ cost: "Open Source",
111
+ costDetails: "Open Source Framework",
112
+ tags: ["educational", "lightweight", "orchestration", "openai"],
113
+ isNew: false
114
+ },
115
+ {
116
+ name: "AI-Researcher",
117
+ url: "https://github.com/HKUDS/AI-Researcher",
118
+ description: "Autonomous Scientific Innovation with comprehensive automation for the complete scientific research lifecycle",
119
+ category: "Scientific Research Automation",
120
+ stars: "New",
121
+ starsNumeric: 0,
122
+ features: ["Integrated pipeline", "Research lifecycle automation", "Scientific innovation"],
123
+ organization: "HKUDS",
124
+ cost: "Open Source",
125
+ costDetails: "Open Source Framework",
126
+ tags: ["research", "lifecycle", "innovation", "autonomous"],
127
+ isNew: true
128
+ },
129
+ {
130
+ name: "Curie",
131
+ url: "https://github.com/Just-Curieous/Curie",
132
+ description: "First AI-agent framework designed for automated and rigorous scientific experimentation",
133
+ category: "Scientific Research Automation",
134
+ stars: "New",
135
+ starsNumeric: 0,
136
+ features: ["Rigorous experimentation", "Automated testing", "Scientific methodology"],
137
+ organization: "Just-Curieous",
138
+ cost: "Open Source",
139
+ costDetails: "Open Source Framework",
140
+ tags: ["experimentation", "rigorous", "scientific", "methodology"],
141
+ isNew: true
142
+ },
143
+ {
144
+ name: "AgentOps",
145
+ url: "https://github.com/AgentOps-AI/agentops",
146
+ description: "Python SDK for AI agent monitoring, LLM cost tracking, benchmarking, and comprehensive observability",
147
+ category: "Monitoring & Observability",
148
+ stars: "2.1k",
149
+ starsNumeric: 2100,
150
+ features: ["Performance monitoring", "Cost tracking", "Real-time insights", "Benchmarking"],
151
+ organization: "AgentOps AI",
152
+ cost: "Research Tool",
153
+ costDetails: "Research Tool with Premium Features",
154
+ tags: ["monitoring", "observability", "tracking", "benchmarking"],
155
+ isNew: false
156
+ },
157
+ {
158
+ name: "data-to-paper",
159
+ url: "https://github.com/Technion-Kishony-lab/data-to-paper",
160
+ description: "Backward-traceable AI-driven scientific research automation framework with interacting AI agents",
161
+ category: "Scientific Research Automation",
162
+ stars: "New",
163
+ starsNumeric: 0,
164
+ features: ["Backward-traceable", "End-to-end research", "Interacting agents"],
165
+ organization: "Technion Kishony Lab",
166
+ cost: "Open Source",
167
+ costDetails: "Open Source Framework",
168
+ tags: ["traceable", "research", "interacting", "scientific"],
169
+ isNew: true
170
+ },
171
+ {
172
+ name: "Awesome AI Agents",
173
+ url: "https://github.com/e2b-dev/awesome-ai-agents",
174
+ description: "Comprehensive list of AI autonomous agents with structured categories and use-cases",
175
+ category: "Resources & Collections",
176
+ stars: "8.7k",
177
+ starsNumeric: 8700,
178
+ features: ["Comprehensive list", "Categorized agents", "Use-case examples"],
179
+ organization: "E2B",
180
+ cost: "Open Source",
181
+ costDetails: "Open Source Framework",
182
+ tags: ["awesome-list", "comprehensive", "categorized", "examples"],
183
+ isNew: false
184
+ },
185
+ {
186
+ name: "AutoResearcher",
187
+ url: "https://github.com/eimenhmdt/autoresearcher",
188
+ description: "Open-source Python package leveraging AI models and external knowledge sources to automate scientific workflows",
189
+ category: "Scientific Research Automation",
190
+ stars: "New",
191
+ starsNumeric: 0,
192
+ features: ["Python package", "External knowledge", "Workflow automation"],
193
+ organization: "Independent",
194
+ cost: "Open Source",
195
+ costDetails: "Open Source Framework",
196
+ tags: ["python", "workflows", "knowledge", "automation"],
197
+ isNew: true
198
+ },
199
+ {
200
+ name: "Deep Research",
201
+ url: "https://github.com/dzhng/deep-research",
202
+ description: "AI-powered research assistant performing iterative, deep research combining search engines, web scraping, and LLMs",
203
+ category: "Research Tools",
204
+ stars: "New",
205
+ starsNumeric: 0,
206
+ features: ["Iterative research", "Web scraping", "Search integration", "LLM powered"],
207
+ organization: "Independent",
208
+ cost: "Open Source",
209
+ costDetails: "Open Source Framework",
210
+ tags: ["research", "iterative", "scraping", "search"],
211
+ isNew: true
212
+ },
213
+ {
214
+ name: "Research Crew",
215
+ url: "https://github.com/factoredai/research-crew",
216
+ description: "CrewAI-based agentic workflow that executes research and produces different types of content",
217
+ category: "Research Tools",
218
+ stars: "New",
219
+ starsNumeric: 0,
220
+ features: ["CrewAI integration", "Content production", "Research execution"],
221
+ organization: "FactoredAI",
222
+ cost: "Open Source",
223
+ costDetails: "Open Source Framework",
224
+ tags: ["crewai", "content", "execution", "workflow"],
225
+ isNew: true
226
+ },
227
+ {
228
+ name: "AG2 (formerly AutoGen)",
229
+ url: "https://github.com/ag2ai/ag2",
230
+ description: "Open-source programming framework for building AI agents and facilitating cooperation among multiple agents",
231
+ category: "Multi-Agent Frameworks",
232
+ stars: "New",
233
+ starsNumeric: 0,
234
+ features: ["Agent cooperation", "Open-source", "Programming framework"],
235
+ organization: "AG2 AI",
236
+ cost: "Open Source",
237
+ costDetails: "Open Source Framework",
238
+ tags: ["cooperation", "framework", "open-source", "agents"],
239
+ isNew: true
240
+ },
241
+ {
242
+ name: "Open Agent Platform",
243
+ url: "https://github.com/langchain-ai/open-agent-platform",
244
+ description: "Modern, web-based interface for creating, managing, and interacting with LangGraph agents",
245
+ category: "Agent Platforms",
246
+ stars: "New",
247
+ starsNumeric: 0,
248
+ features: ["Web interface", "Agent management", "LangGraph integration"],
249
+ organization: "LangChain",
250
+ cost: "Open Source",
251
+ costDetails: "Open Source Framework",
252
+ tags: ["web-interface", "management", "langgraph", "platform"],
253
+ isNew: true
254
+ },
255
+ {
256
+ name: "OpenAI Agents Python SDK",
257
+ url: "https://github.com/openai/openai-agents-python",
258
+ description: "Lightweight yet powerful framework for building multi-agent workflows with provider-agnostic support",
259
+ category: "Multi-Agent Frameworks",
260
+ stars: "New",
261
+ starsNumeric: 0,
262
+ features: ["Provider-agnostic", "Lightweight", "Multi-agent workflows"],
263
+ organization: "OpenAI",
264
+ cost: "Open Source",
265
+ costDetails: "Open Source Framework",
266
+ tags: ["provider-agnostic", "lightweight", "workflows", "openai"],
267
+ isNew: true
268
+ },
269
+ {
270
+ name: "DurableSwarm",
271
+ url: "https://github.com/dbos-inc/durable-swarm",
272
+ description: "Reliable Multi-Agent Orchestration augmenting OpenAI's Swarm with durable execution",
273
+ category: "Multi-Agent Systems",
274
+ stars: "New",
275
+ starsNumeric: 0,
276
+ features: ["Durable execution", "Reliable orchestration", "Swarm augmentation"],
277
+ organization: "DBOS Inc",
278
+ cost: "Open Source",
279
+ costDetails: "Open Source Framework",
280
+ tags: ["durable", "reliable", "orchestration", "swarm"],
281
+ isNew: true
282
+ }
283
+ ];
284
+
285
+ // Global variables
286
+ let filteredRepositories = [...repositories];
287
+ let currentSort = 'name';
288
+
289
+ // DOM Elements
290
+ const searchInput = document.getElementById('search-input');
291
+ const clearSearchBtn = document.getElementById('clear-search');
292
+ const categoryFilter = document.getElementById('category-filter');
293
+ const starsFilter = document.getElementById('stars-filter');
294
+ const costFilter = document.getElementById('cost-filter');
295
+ const sortSelect = document.getElementById('sort-select');
296
+ const resultsCount = document.getElementById('results-count');
297
+ const repositoriesGrid = document.getElementById('repositories-grid');
298
+ const noResults = document.getElementById('no-results');
299
+ const resetFiltersBtn = document.getElementById('reset-filters');
300
+ const backToTopBtn = document.getElementById('back-to-top');
301
+
302
+ // Initialize the application
303
+ document.addEventListener('DOMContentLoaded', function() {
304
+ initializeApp();
305
+ setupEventListeners();
306
+ renderRepositories();
307
+ updateStatistics();
308
+ setupScrollEffects();
309
+ setupAnimations();
310
+ });
311
+
312
+ // Initialize application
313
+ function initializeApp() {
314
+ // Set initial values
315
+ searchInput.value = '';
316
+ categoryFilter.value = 'all';
317
+ starsFilter.value = '0';
318
+ costFilter.value = 'all';
319
+ sortSelect.value = 'name';
320
+
321
+ // Update total repositories count in hero
322
+ document.getElementById('total-repos').textContent = repositories.length;
323
+ document.getElementById('research-tools').textContent = repositories.filter(repo => repo.cost === 'Open Source' || repo.cost === 'Research Tool').length;
324
+ }
325
+
326
+ // Setup event listeners
327
+ function setupEventListeners() {
328
+ // Search functionality
329
+ searchInput.addEventListener('input', debounce(handleSearch, 300));
330
+ clearSearchBtn.addEventListener('click', clearSearch);
331
+
332
+ // Filter functionality
333
+ categoryFilter.addEventListener('change', handleFilters);
334
+ starsFilter.addEventListener('change', handleFilters);
335
+ costFilter.addEventListener('change', handleFilters);
336
+
337
+ // Sort functionality
338
+ sortSelect.addEventListener('change', handleSort);
339
+
340
+ // Reset filters
341
+ resetFiltersBtn.addEventListener('click', resetFilters);
342
+
343
+ // Back to top button
344
+ backToTopBtn.addEventListener('click', scrollToTop);
345
+
346
+ // Smooth scrolling for navigation links
347
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
348
+ anchor.addEventListener('click', function (e) {
349
+ e.preventDefault();
350
+ const target = document.querySelector(this.getAttribute('href'));
351
+ if (target) {
352
+ target.scrollIntoView({
353
+ behavior: 'smooth',
354
+ block: 'start'
355
+ });
356
+ }
357
+ });
358
+ });
359
+
360
+ // Footer category links
361
+ document.querySelectorAll('[data-category]').forEach(link => {
362
+ link.addEventListener('click', function(e) {
363
+ e.preventDefault();
364
+ const category = this.getAttribute('data-category');
365
+ categoryFilter.value = category;
366
+ handleFilters();
367
+ document.getElementById('explore').scrollIntoView({ behavior: 'smooth' });
368
+ });
369
+ });
370
+ }
371
+
372
+ // Debounce function for search
373
+ function debounce(func, wait) {
374
+ let timeout;
375
+ return function executedFunction(...args) {
376
+ const later = () => {
377
+ clearTimeout(timeout);
378
+ func(...args);
379
+ };
380
+ clearTimeout(timeout);
381
+ timeout = setTimeout(later, wait);
382
+ };
383
+ }
384
+
385
+ // Handle search
386
+ function handleSearch() {
387
+ applyFilters();
388
+ }
389
+
390
+ // Clear search
391
+ function clearSearch() {
392
+ searchInput.value = '';
393
+ applyFilters();
394
+ }
395
+
396
+ // Handle filters
397
+ function handleFilters() {
398
+ applyFilters();
399
+ }
400
+
401
+ // Handle sorting
402
+ function handleSort() {
403
+ currentSort = sortSelect.value;
404
+ sortRepositories();
405
+ renderRepositories();
406
+ }
407
+
408
+ // Apply all filters
409
+ function applyFilters() {
410
+ const searchTerm = searchInput.value.toLowerCase().trim();
411
+ const selectedCategory = categoryFilter.value;
412
+ const minStars = parseInt(starsFilter.value);
413
+ const selectedCost = costFilter.value;
414
+
415
+ filteredRepositories = repositories.filter(repo => {
416
+ // Search filter
417
+ const matchesSearch = !searchTerm ||
418
+ repo.name.toLowerCase().includes(searchTerm) ||
419
+ repo.description.toLowerCase().includes(searchTerm) ||
420
+ repo.organization.toLowerCase().includes(searchTerm) ||
421
+ repo.tags.some(tag => tag.toLowerCase().includes(searchTerm));
422
+
423
+ // Category filter
424
+ const matchesCategory = selectedCategory === 'all' || repo.category === selectedCategory;
425
+
426
+ // Stars filter
427
+ const matchesStars = repo.starsNumeric >= minStars;
428
+
429
+ // Cost filter
430
+ const matchesCost = selectedCost === 'all' || repo.cost === selectedCost;
431
+
432
+ return matchesSearch && matchesCategory && matchesStars && matchesCost;
433
+ });
434
+
435
+ sortRepositories();
436
+ renderRepositories();
437
+ updateResultsCount();
438
+ }
439
+
440
+ // Sort repositories
441
+ function sortRepositories() {
442
+ filteredRepositories.sort((a, b) => {
443
+ switch (currentSort) {
444
+ case 'name':
445
+ return a.name.localeCompare(b.name);
446
+ case 'stars':
447
+ return b.starsNumeric - a.starsNumeric;
448
+ case 'category':
449
+ return a.category.localeCompare(b.category);
450
+ case 'organization':
451
+ return a.organization.localeCompare(b.organization);
452
+ default:
453
+ return 0;
454
+ }
455
+ });
456
+ }
457
+
458
+ // Render repositories
459
+ function renderRepositories() {
460
+ if (filteredRepositories.length === 0) {
461
+ repositoriesGrid.style.display = 'none';
462
+ noResults.style.display = 'block';
463
+ return;
464
+ }
465
+
466
+ repositoriesGrid.style.display = 'grid';
467
+ noResults.style.display = 'none';
468
+
469
+ repositoriesGrid.innerHTML = filteredRepositories.map(repo => createRepositoryCard(repo)).join('');
470
+
471
+ // Add animation to cards
472
+ const cards = repositoriesGrid.querySelectorAll('.repo-card');
473
+ cards.forEach((card, index) => {
474
+ card.style.animationDelay = `${index * 0.1}s`;
475
+ card.classList.add('slide-up');
476
+ });
477
+ }
478
+
479
+ // Create repository card HTML
480
+ function createRepositoryCard(repo) {
481
+ const starsDisplay = repo.isNew ? '🆕 New' : `⭐ ${repo.stars}`;
482
+ const costClass = repo.cost.toLowerCase().replace(' ', '-');
483
+ const costIcon = repo.cost === 'Open Source' ? '🔓' : repo.cost === 'Research Tool' ? '🔬' : '🏢';
484
+
485
+ const featuresHtml = repo.features.map(feature =>
486
+ `<span class="feature-tag">${feature}</span>`
487
+ ).join('');
488
+
489
+ const tagsHtml = repo.tags.map(tag =>
490
+ `<span class="tag">#${tag}</span>`
491
+ ).join('');
492
+
493
+ return `
494
+ <div class="repo-card">
495
+ <div class="repo-header">
496
+ <h3 class="repo-title">
497
+ <a href="${repo.url}" target="_blank" rel="noopener noreferrer">${repo.name}</a>
498
+ </h3>
499
+ <div class="repo-meta">
500
+ <span class="repo-stars">${starsDisplay}</span>
501
+ <span class="repo-cost ${costClass}">${costIcon} ${repo.costDetails}</span>
502
+ </div>
503
+ </div>
504
+
505
+ <div class="repo-org">🏢 ${repo.organization}</div>
506
+ <div class="repo-category">📂 ${repo.category}</div>
507
+
508
+ <p class="repo-description">${repo.description}</p>
509
+
510
+ <div class="repo-features">
511
+ <h4>✨ Key Features:</h4>
512
+ <div class="features-list">${featuresHtml}</div>
513
+ </div>
514
+
515
+ <div class="repo-tags">
516
+ <h4>🏷️ Tags:</h4>
517
+ <div class="tags-list">${tagsHtml}</div>
518
+ </div>
519
+
520
+ <div class="repo-actions">
521
+ <a href="${repo.url}" target="_blank" rel="noopener noreferrer" class="btn-primary">
522
+ <i class="fab fa-github"></i>
523
+ View Repository
524
+ </a>
525
+ <a href="${repo.url}/stargazers" target="_blank" rel="noopener noreferrer" class="btn-secondary">
526
+ <i class="fas fa-star"></i>
527
+ Stargazers
528
+ </a>
529
+ </div>
530
+ </div>
531
+ `;
532
+ }
533
+
534
+ // Update results count
535
+ function updateResultsCount() {
536
+ const count = filteredRepositories.length;
537
+ const text = count === 1 ? 'repository found' : 'repositories found';
538
+ resultsCount.textContent = `${count} ${text}`;
539
+ }
540
+
541
+ // Reset all filters
542
+ function resetFilters() {
543
+ searchInput.value = '';
544
+ categoryFilter.value = 'all';
545
+ starsFilter.value = '0';
546
+ costFilter.value = 'all';
547
+ sortSelect.value = 'name';
548
+ currentSort = 'name';
549
+ applyFilters();
550
+ }
551
+
552
+ // Update statistics
553
+ function updateStatistics() {
554
+ // Update category chart
555
+ const categoryChart = document.getElementById('category-chart');
556
+ const categoryStats = {};
557
+
558
+ repositories.forEach(repo => {
559
+ categoryStats[repo.category] = (categoryStats[repo.category] || 0) + 1;
560
+ });
561
+
562
+ const sortedCategories = Object.entries(categoryStats)
563
+ .sort(([,a], [,b]) => b - a);
564
+
565
+ categoryChart.innerHTML = sortedCategories.map(([category, count]) => {
566
+ const percentage = ((count / repositories.length) * 100).toFixed(1);
567
+ return `
568
+ <div class="category-item">
569
+ <span class="category-name">${category}</span>
570
+ <span class="category-count">${count} repos (${percentage}%)</span>
571
+ </div>
572
+ `;
573
+ }).join('');
574
+ }
575
+
576
+ // Setup scroll effects
577
+ function setupScrollEffects() {
578
+ let lastScrollTop = 0;
579
+ const header = document.querySelector('.header');
580
+
581
+ window.addEventListener('scroll', () => {
582
+ const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
583
+
584
+ // Header scroll effect
585
+ if (scrollTop > lastScrollTop && scrollTop > 100) {
586
+ header.style.transform = 'translateY(-100%)';
587
+ } else {
588
+ header.style.transform = 'translateY(0)';
589
+ }
590
+
591
+ // Back to top button
592
+ if (scrollTop > 500) {
593
+ backToTopBtn.classList.add('visible');
594
+ } else {
595
+ backToTopBtn.classList.remove('visible');
596
+ }
597
+
598
+ lastScrollTop = scrollTop;
599
+ });
600
+ }
601
+
602
+ // Setup animations
603
+ function setupAnimations() {
604
+ // Intersection Observer for animations
605
+ const observerOptions = {
606
+ threshold: 0.1,
607
+ rootMargin: '0px 0px -50px 0px'
608
+ };
609
+
610
+ const observer = new IntersectionObserver((entries) => {
611
+ entries.forEach(entry => {
612
+ if (entry.isIntersecting) {
613
+ entry.target.classList.add('fade-in');
614
+ }
615
+ });
616
+ }, observerOptions);
617
+
618
+ // Observe sections for animations
619
+ document.querySelectorAll('section').forEach(section => {
620
+ observer.observe(section);
621
+ });
622
+ }
623
+
624
+ // Scroll to top function
625
+ function scrollToTop() {
626
+ window.scrollTo({
627
+ top: 0,
628
+ behavior: 'smooth'
629
+ });
630
+ }
631
+
632
+ // Utility functions
633
+ function formatNumber(num) {
634
+ if (num >= 1000000) {
635
+ return (num / 1000000).toFixed(1) + 'M';
636
+ } else if (num >= 1000) {
637
+ return (num / 1000).toFixed(1) + 'k';
638
+ }
639
+ return num.toString();
640
+ }
641
+
642
+ function copyToClipboard(text) {
643
+ navigator.clipboard.writeText(text).then(() => {
644
+ showNotification('Copied to clipboard!');
645
+ }).catch(err => {
646
+ console.error('Failed to copy: ', err);
647
+ });
648
+ }
649
+
650
+ function showNotification(message, type = 'success') {
651
+ const notification = document.createElement('div');
652
+ notification.className = `notification ${type}`;
653
+ notification.textContent = message;
654
+ notification.style.cssText = `
655
+ position: fixed;
656
+ top: 20px;
657
+ right: 20px;
658
+ background: var(--success-color);
659
+ color: white;
660
+ padding: 12px 20px;
661
+ border-radius: 8px;
662
+ box-shadow: var(--shadow-lg);
663
+ z-index: 10000;
664
+ animation: slideIn 0.3s ease-out;
665
+ `;
666
+
667
+ document.body.appendChild(notification);
668
+
669
+ setTimeout(() => {
670
+ notification.style.animation = 'slideOut 0.3s ease-out';
671
+ setTimeout(() => {
672
+ document.body.removeChild(notification);
673
+ }, 300);
674
+ }, 3000);
675
+ }
676
+
677
+ // Add CSS for notifications
678
+ const notificationStyles = `
679
+ @keyframes slideIn {
680
+ from {
681
+ transform: translateX(100%);
682
+ opacity: 0;
683
+ }
684
+ to {
685
+ transform: translateX(0);
686
+ opacity: 1;
687
+ }
688
+ }
689
+
690
+ @keyframes slideOut {
691
+ from {
692
+ transform: translateX(0);
693
+ opacity: 1;
694
+ }
695
+ to {
696
+ transform: translateX(100%);
697
+ opacity: 0;
698
+ }
699
+ }
700
+ `;
701
+
702
+ // Add notification styles to head
703
+ const styleSheet = document.createElement('style');
704
+ styleSheet.textContent = notificationStyles;
705
+ document.head.appendChild(styleSheet);
706
+
707
+ // Performance optimization
708
+ function throttle(func, limit) {
709
+ let inThrottle;
710
+ return function() {
711
+ const args = arguments;
712
+ const context = this;
713
+ if (!inThrottle) {
714
+ func.apply(context, args);
715
+ inThrottle = true;
716
+ setTimeout(() => inThrottle = false, limit);
717
+ }
718
+ }
719
+ }
720
+
721
+ // Lazy loading for images (if any are added later)
722
+ function setupLazyLoading() {
723
+ const imageObserver = new IntersectionObserver((entries, observer) => {
724
+ entries.forEach(entry => {
725
+ if (entry.isIntersecting) {
726
+ const img = entry.target;
727
+ img.src = img.dataset.src;
728
+ img.classList.remove('lazy');
729
+ imageObserver.unobserve(img);
730
+ }
731
+ });
732
+ });
733
+
734
+ document.querySelectorAll('img[data-src]').forEach(img => {
735
+ imageObserver.observe(img);
736
+ });
737
+ }
738
+
739
+ // Export functions for potential external use
740
+ window.AgenticAIHub = {
741
+ repositories,
742
+ filteredRepositories,
743
+ applyFilters,
744
+ resetFilters,
745
+ formatNumber,
746
+ copyToClipboard,
747
+ showNotification
748
+ };
749
+
styles.css ADDED
@@ -0,0 +1,1156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Reset and Base Styles */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ :root {
9
+ /* Color Palette */
10
+ --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
11
+ --secondary-gradient: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
12
+ --accent-gradient: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
13
+ --success-gradient: linear-gradient(135deg, #10b981 0%, #059669 100%);
14
+ --warning-gradient: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
15
+
16
+ --primary-color: #4f46e5;
17
+ --secondary-color: #7c3aed;
18
+ --accent-color: #06b6d4;
19
+ --success-color: #10b981;
20
+ --warning-color: #f59e0b;
21
+ --danger-color: #ef4444;
22
+
23
+ --text-primary: #1f2937;
24
+ --text-secondary: #6b7280;
25
+ --text-light: #9ca3af;
26
+ --text-white: #ffffff;
27
+
28
+ --bg-primary: #ffffff;
29
+ --bg-secondary: #f9fafb;
30
+ --bg-tertiary: #f3f4f6;
31
+ --bg-dark: #1f2937;
32
+
33
+ --border-color: #e5e7eb;
34
+ --border-light: #f3f4f6;
35
+
36
+ /* Typography */
37
+ --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
38
+ --font-size-xs: 0.75rem;
39
+ --font-size-sm: 0.875rem;
40
+ --font-size-base: 1rem;
41
+ --font-size-lg: 1.125rem;
42
+ --font-size-xl: 1.25rem;
43
+ --font-size-2xl: 1.5rem;
44
+ --font-size-3xl: 1.875rem;
45
+ --font-size-4xl: 2.25rem;
46
+ --font-size-5xl: 3rem;
47
+
48
+ /* Spacing */
49
+ --spacing-xs: 0.25rem;
50
+ --spacing-sm: 0.5rem;
51
+ --spacing-md: 1rem;
52
+ --spacing-lg: 1.5rem;
53
+ --spacing-xl: 2rem;
54
+ --spacing-2xl: 3rem;
55
+ --spacing-3xl: 4rem;
56
+
57
+ /* Border Radius */
58
+ --radius-sm: 0.375rem;
59
+ --radius-md: 0.5rem;
60
+ --radius-lg: 0.75rem;
61
+ --radius-xl: 1rem;
62
+ --radius-2xl: 1.5rem;
63
+
64
+ /* Shadows */
65
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
66
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
67
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
68
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
69
+ --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
70
+
71
+ /* Transitions */
72
+ --transition-fast: 0.15s ease-in-out;
73
+ --transition-normal: 0.3s ease-in-out;
74
+ --transition-slow: 0.5s ease-in-out;
75
+ }
76
+
77
+ html {
78
+ scroll-behavior: smooth;
79
+ }
80
+
81
+ body {
82
+ font-family: var(--font-family);
83
+ font-size: var(--font-size-base);
84
+ line-height: 1.6;
85
+ color: var(--text-primary);
86
+ background-color: var(--bg-primary);
87
+ overflow-x: hidden;
88
+ }
89
+
90
+ .container {
91
+ max-width: 1200px;
92
+ margin: 0 auto;
93
+ padding: 0 var(--spacing-lg);
94
+ }
95
+
96
+ /* Header */
97
+ .header {
98
+ background: var(--bg-primary);
99
+ backdrop-filter: blur(10px);
100
+ border-bottom: 1px solid var(--border-light);
101
+ position: sticky;
102
+ top: 0;
103
+ z-index: 1000;
104
+ transition: all var(--transition-normal);
105
+ }
106
+
107
+ .header-content {
108
+ display: flex;
109
+ justify-content: space-between;
110
+ align-items: center;
111
+ padding: var(--spacing-lg) 0;
112
+ }
113
+
114
+ .logo h1 {
115
+ font-size: var(--font-size-2xl);
116
+ font-weight: 800;
117
+ background: var(--primary-gradient);
118
+ -webkit-background-clip: text;
119
+ -webkit-text-fill-color: transparent;
120
+ background-clip: text;
121
+ margin-bottom: var(--spacing-xs);
122
+ }
123
+
124
+ .logo p {
125
+ font-size: var(--font-size-sm);
126
+ color: var(--text-secondary);
127
+ font-weight: 500;
128
+ }
129
+
130
+ .nav {
131
+ display: flex;
132
+ gap: var(--spacing-xl);
133
+ }
134
+
135
+ .nav-link {
136
+ text-decoration: none;
137
+ color: var(--text-secondary);
138
+ font-weight: 500;
139
+ font-size: var(--font-size-sm);
140
+ padding: var(--spacing-sm) var(--spacing-md);
141
+ border-radius: var(--radius-md);
142
+ transition: all var(--transition-fast);
143
+ position: relative;
144
+ }
145
+
146
+ .nav-link:hover {
147
+ color: var(--primary-color);
148
+ background-color: var(--bg-tertiary);
149
+ transform: translateY(-1px);
150
+ }
151
+
152
+ .nav-link::after {
153
+ content: '';
154
+ position: absolute;
155
+ bottom: -2px;
156
+ left: 50%;
157
+ width: 0;
158
+ height: 2px;
159
+ background: var(--primary-gradient);
160
+ transition: all var(--transition-normal);
161
+ transform: translateX(-50%);
162
+ }
163
+
164
+ .nav-link:hover::after {
165
+ width: 100%;
166
+ }
167
+
168
+ /* Hero Section */
169
+ .hero {
170
+ background: var(--primary-gradient);
171
+ color: var(--text-white);
172
+ padding: var(--spacing-3xl) 0;
173
+ position: relative;
174
+ overflow: hidden;
175
+ }
176
+
177
+ .hero::before {
178
+ content: '';
179
+ position: absolute;
180
+ top: 0;
181
+ left: 0;
182
+ right: 0;
183
+ bottom: 0;
184
+ background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(255,255,255,0.1)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');
185
+ opacity: 0.3;
186
+ }
187
+
188
+ .hero-content {
189
+ text-align: center;
190
+ position: relative;
191
+ z-index: 1;
192
+ }
193
+
194
+ .hero-title {
195
+ font-size: var(--font-size-5xl);
196
+ font-weight: 800;
197
+ margin-bottom: var(--spacing-lg);
198
+ line-height: 1.2;
199
+ }
200
+
201
+ .hero-subtitle {
202
+ font-size: var(--font-size-xl);
203
+ margin-bottom: var(--spacing-2xl);
204
+ opacity: 0.95;
205
+ max-width: 800px;
206
+ margin-left: auto;
207
+ margin-right: auto;
208
+ line-height: 1.6;
209
+ }
210
+
211
+ .hero-stats {
212
+ display: flex;
213
+ justify-content: center;
214
+ gap: var(--spacing-2xl);
215
+ margin-bottom: var(--spacing-2xl);
216
+ }
217
+
218
+ .stat-item {
219
+ text-align: center;
220
+ }
221
+
222
+ .stat-number {
223
+ display: block;
224
+ font-size: var(--font-size-3xl);
225
+ font-weight: 800;
226
+ margin-bottom: var(--spacing-xs);
227
+ }
228
+
229
+ .stat-label {
230
+ font-size: var(--font-size-sm);
231
+ opacity: 0.9;
232
+ font-weight: 500;
233
+ }
234
+
235
+ .cta-button {
236
+ display: inline-flex;
237
+ align-items: center;
238
+ gap: var(--spacing-sm);
239
+ background: rgba(255, 255, 255, 0.2);
240
+ color: var(--text-white);
241
+ text-decoration: none;
242
+ padding: var(--spacing-lg) var(--spacing-2xl);
243
+ border-radius: var(--radius-xl);
244
+ font-weight: 600;
245
+ font-size: var(--font-size-lg);
246
+ backdrop-filter: blur(10px);
247
+ border: 1px solid rgba(255, 255, 255, 0.3);
248
+ transition: all var(--transition-normal);
249
+ }
250
+
251
+ .cta-button:hover {
252
+ background: rgba(255, 255, 255, 0.3);
253
+ transform: translateY(-2px);
254
+ box-shadow: var(--shadow-xl);
255
+ }
256
+
257
+ /* Search Section */
258
+ .search-section {
259
+ padding: var(--spacing-3xl) 0;
260
+ background: var(--bg-secondary);
261
+ }
262
+
263
+ .section-title {
264
+ font-size: var(--font-size-3xl);
265
+ font-weight: 700;
266
+ text-align: center;
267
+ margin-bottom: var(--spacing-2xl);
268
+ color: var(--text-primary);
269
+ }
270
+
271
+ .search-controls {
272
+ max-width: 900px;
273
+ margin: 0 auto var(--spacing-2xl);
274
+ }
275
+
276
+ .search-bar {
277
+ position: relative;
278
+ margin-bottom: var(--spacing-xl);
279
+ }
280
+
281
+ .search-icon {
282
+ position: absolute;
283
+ left: var(--spacing-lg);
284
+ top: 50%;
285
+ transform: translateY(-50%);
286
+ color: var(--text-light);
287
+ font-size: var(--font-size-lg);
288
+ }
289
+
290
+ #search-input {
291
+ width: 100%;
292
+ padding: var(--spacing-lg) var(--spacing-3xl) var(--spacing-lg) 3.5rem;
293
+ border: 2px solid var(--border-color);
294
+ border-radius: var(--radius-xl);
295
+ font-size: var(--font-size-lg);
296
+ background: var(--bg-primary);
297
+ transition: all var(--transition-normal);
298
+ box-shadow: var(--shadow-sm);
299
+ }
300
+
301
+ #search-input:focus {
302
+ outline: none;
303
+ border-color: var(--primary-color);
304
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
305
+ }
306
+
307
+ .clear-btn {
308
+ position: absolute;
309
+ right: var(--spacing-lg);
310
+ top: 50%;
311
+ transform: translateY(-50%);
312
+ background: none;
313
+ border: none;
314
+ color: var(--text-light);
315
+ cursor: pointer;
316
+ padding: var(--spacing-sm);
317
+ border-radius: var(--radius-sm);
318
+ transition: all var(--transition-fast);
319
+ }
320
+
321
+ .clear-btn:hover {
322
+ color: var(--danger-color);
323
+ background: var(--bg-tertiary);
324
+ }
325
+
326
+ .filters {
327
+ display: grid;
328
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
329
+ gap: var(--spacing-lg);
330
+ }
331
+
332
+ .filter-group {
333
+ display: flex;
334
+ flex-direction: column;
335
+ gap: var(--spacing-sm);
336
+ }
337
+
338
+ .filter-group label {
339
+ font-weight: 600;
340
+ color: var(--text-primary);
341
+ font-size: var(--font-size-sm);
342
+ }
343
+
344
+ .filter-group select {
345
+ padding: var(--spacing-md);
346
+ border: 1px solid var(--border-color);
347
+ border-radius: var(--radius-md);
348
+ background: var(--bg-primary);
349
+ font-size: var(--font-size-base);
350
+ transition: all var(--transition-fast);
351
+ }
352
+
353
+ .filter-group select:focus {
354
+ outline: none;
355
+ border-color: var(--primary-color);
356
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
357
+ }
358
+
359
+ .results-info {
360
+ display: flex;
361
+ justify-content: space-between;
362
+ align-items: center;
363
+ margin-bottom: var(--spacing-xl);
364
+ padding: var(--spacing-lg);
365
+ background: var(--bg-primary);
366
+ border-radius: var(--radius-lg);
367
+ box-shadow: var(--shadow-sm);
368
+ }
369
+
370
+ #results-count {
371
+ font-weight: 600;
372
+ color: var(--text-primary);
373
+ }
374
+
375
+ .sort-options {
376
+ display: flex;
377
+ align-items: center;
378
+ gap: var(--spacing-sm);
379
+ }
380
+
381
+ .sort-options label {
382
+ font-weight: 500;
383
+ color: var(--text-secondary);
384
+ font-size: var(--font-size-sm);
385
+ }
386
+
387
+ #sort-select {
388
+ padding: var(--spacing-sm) var(--spacing-md);
389
+ border: 1px solid var(--border-color);
390
+ border-radius: var(--radius-md);
391
+ background: var(--bg-primary);
392
+ font-size: var(--font-size-sm);
393
+ }
394
+
395
+ /* Repository Grid */
396
+ .repositories-section {
397
+ padding: 0 0 var(--spacing-3xl);
398
+ background: var(--bg-secondary);
399
+ }
400
+
401
+ .repositories-grid {
402
+ display: grid;
403
+ grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
404
+ gap: var(--spacing-xl);
405
+ }
406
+
407
+ .repo-card {
408
+ background: var(--bg-primary);
409
+ border-radius: var(--radius-xl);
410
+ padding: var(--spacing-xl);
411
+ box-shadow: var(--shadow-md);
412
+ transition: all var(--transition-normal);
413
+ border: 1px solid var(--border-light);
414
+ position: relative;
415
+ overflow: hidden;
416
+ }
417
+
418
+ .repo-card::before {
419
+ content: '';
420
+ position: absolute;
421
+ top: 0;
422
+ left: 0;
423
+ right: 0;
424
+ height: 4px;
425
+ background: var(--primary-gradient);
426
+ transform: scaleX(0);
427
+ transition: transform var(--transition-normal);
428
+ }
429
+
430
+ .repo-card:hover {
431
+ transform: translateY(-4px);
432
+ box-shadow: var(--shadow-xl);
433
+ border-color: var(--primary-color);
434
+ }
435
+
436
+ .repo-card:hover::before {
437
+ transform: scaleX(1);
438
+ }
439
+
440
+ .repo-header {
441
+ display: flex;
442
+ justify-content: space-between;
443
+ align-items: flex-start;
444
+ margin-bottom: var(--spacing-lg);
445
+ }
446
+
447
+ .repo-title {
448
+ font-size: var(--font-size-xl);
449
+ font-weight: 700;
450
+ margin: 0;
451
+ line-height: 1.3;
452
+ }
453
+
454
+ .repo-title a {
455
+ color: var(--text-primary);
456
+ text-decoration: none;
457
+ transition: color var(--transition-fast);
458
+ }
459
+
460
+ .repo-title a:hover {
461
+ color: var(--primary-color);
462
+ }
463
+
464
+ .repo-meta {
465
+ display: flex;
466
+ flex-direction: column;
467
+ gap: var(--spacing-xs);
468
+ align-items: flex-end;
469
+ }
470
+
471
+ .repo-stars, .repo-cost {
472
+ font-size: var(--font-size-sm);
473
+ font-weight: 600;
474
+ padding: var(--spacing-xs) var(--spacing-sm);
475
+ border-radius: var(--radius-md);
476
+ white-space: nowrap;
477
+ }
478
+
479
+ .repo-stars {
480
+ background: var(--bg-tertiary);
481
+ color: var(--text-primary);
482
+ }
483
+
484
+ .repo-cost {
485
+ color: var(--text-white);
486
+ }
487
+
488
+ .repo-cost.open-source {
489
+ background: var(--success-gradient);
490
+ }
491
+
492
+ .repo-cost.research-tool {
493
+ background: var(--accent-gradient);
494
+ }
495
+
496
+ .repo-cost.commercial {
497
+ background: var(--secondary-gradient);
498
+ }
499
+
500
+ .repo-org, .repo-category {
501
+ font-size: var(--font-size-sm);
502
+ color: var(--text-secondary);
503
+ margin: var(--spacing-xs) 0;
504
+ font-weight: 500;
505
+ }
506
+
507
+ .repo-description {
508
+ color: var(--text-primary);
509
+ line-height: 1.6;
510
+ margin: var(--spacing-lg) 0;
511
+ font-size: var(--font-size-base);
512
+ }
513
+
514
+ .repo-features, .repo-tags {
515
+ margin: var(--spacing-lg) 0;
516
+ }
517
+
518
+ .repo-features h4, .repo-tags h4 {
519
+ font-size: var(--font-size-sm);
520
+ font-weight: 600;
521
+ margin-bottom: var(--spacing-sm);
522
+ color: var(--text-primary);
523
+ }
524
+
525
+ .features-list, .tags-list {
526
+ display: flex;
527
+ flex-wrap: wrap;
528
+ gap: var(--spacing-sm);
529
+ }
530
+
531
+ .feature-tag {
532
+ background: var(--primary-gradient);
533
+ color: var(--text-white);
534
+ padding: var(--spacing-xs) var(--spacing-sm);
535
+ border-radius: var(--radius-lg);
536
+ font-size: var(--font-size-xs);
537
+ font-weight: 500;
538
+ }
539
+
540
+ .tag {
541
+ background: var(--bg-tertiary);
542
+ color: var(--text-secondary);
543
+ padding: var(--spacing-xs) var(--spacing-sm);
544
+ border-radius: var(--radius-md);
545
+ font-size: var(--font-size-xs);
546
+ font-weight: 500;
547
+ }
548
+
549
+ .repo-actions {
550
+ display: flex;
551
+ gap: var(--spacing-sm);
552
+ margin-top: var(--spacing-lg);
553
+ }
554
+
555
+ .btn-primary, .btn-secondary {
556
+ padding: var(--spacing-sm) var(--spacing-lg);
557
+ border-radius: var(--radius-md);
558
+ text-decoration: none;
559
+ font-weight: 600;
560
+ font-size: var(--font-size-sm);
561
+ transition: all var(--transition-fast);
562
+ display: inline-flex;
563
+ align-items: center;
564
+ gap: var(--spacing-xs);
565
+ }
566
+
567
+ .btn-primary {
568
+ background: var(--primary-gradient);
569
+ color: var(--text-white);
570
+ border: none;
571
+ }
572
+
573
+ .btn-primary:hover {
574
+ transform: translateY(-1px);
575
+ box-shadow: var(--shadow-lg);
576
+ }
577
+
578
+ .btn-secondary {
579
+ background: var(--bg-tertiary);
580
+ color: var(--text-primary);
581
+ border: 1px solid var(--border-color);
582
+ }
583
+
584
+ .btn-secondary:hover {
585
+ background: var(--bg-primary);
586
+ border-color: var(--primary-color);
587
+ }
588
+
589
+ /* No Results */
590
+ .no-results {
591
+ text-align: center;
592
+ padding: var(--spacing-3xl);
593
+ color: var(--text-secondary);
594
+ }
595
+
596
+ .no-results-content {
597
+ max-width: 400px;
598
+ margin: 0 auto;
599
+ }
600
+
601
+ .no-results i {
602
+ color: var(--text-light);
603
+ margin-bottom: var(--spacing-lg);
604
+ }
605
+
606
+ .no-results h3 {
607
+ font-size: var(--font-size-2xl);
608
+ margin-bottom: var(--spacing-md);
609
+ color: var(--text-primary);
610
+ }
611
+
612
+ .reset-btn {
613
+ background: var(--primary-gradient);
614
+ color: var(--text-white);
615
+ border: none;
616
+ padding: var(--spacing-md) var(--spacing-xl);
617
+ border-radius: var(--radius-md);
618
+ font-weight: 600;
619
+ cursor: pointer;
620
+ transition: all var(--transition-fast);
621
+ margin-top: var(--spacing-lg);
622
+ }
623
+
624
+ .reset-btn:hover {
625
+ transform: translateY(-1px);
626
+ box-shadow: var(--shadow-lg);
627
+ }
628
+
629
+ /* Statistics Section */
630
+ .stats-section {
631
+ padding: var(--spacing-3xl) 0;
632
+ background: var(--bg-primary);
633
+ }
634
+
635
+ .stats-grid {
636
+ display: grid;
637
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
638
+ gap: var(--spacing-xl);
639
+ margin-bottom: var(--spacing-2xl);
640
+ }
641
+
642
+ .stat-card {
643
+ background: var(--bg-primary);
644
+ padding: var(--spacing-xl);
645
+ border-radius: var(--radius-xl);
646
+ box-shadow: var(--shadow-lg);
647
+ border: 1px solid var(--border-light);
648
+ display: flex;
649
+ align-items: center;
650
+ gap: var(--spacing-lg);
651
+ transition: all var(--transition-normal);
652
+ }
653
+
654
+ .stat-card:hover {
655
+ transform: translateY(-2px);
656
+ box-shadow: var(--shadow-xl);
657
+ }
658
+
659
+ .stat-icon {
660
+ font-size: var(--font-size-3xl);
661
+ width: 60px;
662
+ height: 60px;
663
+ display: flex;
664
+ align-items: center;
665
+ justify-content: center;
666
+ border-radius: var(--radius-xl);
667
+ background: var(--primary-gradient);
668
+ }
669
+
670
+ .stat-info .stat-number {
671
+ font-size: var(--font-size-2xl);
672
+ font-weight: 800;
673
+ color: var(--text-primary);
674
+ display: block;
675
+ }
676
+
677
+ .stat-info .stat-label {
678
+ font-size: var(--font-size-sm);
679
+ color: var(--text-secondary);
680
+ font-weight: 500;
681
+ }
682
+
683
+ .category-breakdown {
684
+ background: var(--bg-secondary);
685
+ padding: var(--spacing-2xl);
686
+ border-radius: var(--radius-xl);
687
+ box-shadow: var(--shadow-md);
688
+ }
689
+
690
+ .category-breakdown h3 {
691
+ font-size: var(--font-size-xl);
692
+ margin-bottom: var(--spacing-lg);
693
+ text-align: center;
694
+ color: var(--text-primary);
695
+ }
696
+
697
+ .category-chart {
698
+ display: grid;
699
+ gap: var(--spacing-md);
700
+ }
701
+
702
+ .category-item {
703
+ display: flex;
704
+ justify-content: space-between;
705
+ align-items: center;
706
+ padding: var(--spacing-lg);
707
+ background: var(--bg-primary);
708
+ border-radius: var(--radius-md);
709
+ border-left: 4px solid var(--primary-color);
710
+ }
711
+
712
+ .category-name {
713
+ font-weight: 600;
714
+ color: var(--text-primary);
715
+ }
716
+
717
+ .category-count {
718
+ color: var(--text-secondary);
719
+ font-weight: 500;
720
+ }
721
+
722
+ /* Guide Section */
723
+ .guide-section {
724
+ padding: var(--spacing-3xl) 0;
725
+ background: var(--bg-secondary);
726
+ }
727
+
728
+ .guide-grid {
729
+ display: grid;
730
+ grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
731
+ gap: var(--spacing-xl);
732
+ }
733
+
734
+ .guide-card {
735
+ background: var(--bg-primary);
736
+ border-radius: var(--radius-xl);
737
+ padding: var(--spacing-xl);
738
+ box-shadow: var(--shadow-md);
739
+ border: 1px solid var(--border-light);
740
+ transition: all var(--transition-normal);
741
+ }
742
+
743
+ .guide-card:hover {
744
+ transform: translateY(-2px);
745
+ box-shadow: var(--shadow-xl);
746
+ }
747
+
748
+ .guide-header {
749
+ display: flex;
750
+ align-items: center;
751
+ gap: var(--spacing-md);
752
+ margin-bottom: var(--spacing-lg);
753
+ }
754
+
755
+ .guide-header i {
756
+ font-size: var(--font-size-2xl);
757
+ width: 50px;
758
+ height: 50px;
759
+ display: flex;
760
+ align-items: center;
761
+ justify-content: center;
762
+ border-radius: var(--radius-lg);
763
+ color: var(--text-white);
764
+ }
765
+
766
+ .guide-card.beginner .guide-header i {
767
+ background: var(--success-gradient);
768
+ }
769
+
770
+ .guide-card.researcher .guide-header i {
771
+ background: var(--accent-gradient);
772
+ }
773
+
774
+ .guide-card.advanced .guide-header i {
775
+ background: var(--secondary-gradient);
776
+ }
777
+
778
+ .guide-header h3 {
779
+ font-size: var(--font-size-xl);
780
+ font-weight: 700;
781
+ color: var(--text-primary);
782
+ }
783
+
784
+ .guide-content ol {
785
+ list-style: none;
786
+ counter-reset: guide-counter;
787
+ }
788
+
789
+ .guide-content li {
790
+ counter-increment: guide-counter;
791
+ margin-bottom: var(--spacing-md);
792
+ padding-left: var(--spacing-xl);
793
+ position: relative;
794
+ line-height: 1.6;
795
+ }
796
+
797
+ .guide-content li::before {
798
+ content: counter(guide-counter);
799
+ position: absolute;
800
+ left: 0;
801
+ top: 0;
802
+ width: 24px;
803
+ height: 24px;
804
+ background: var(--primary-gradient);
805
+ color: var(--text-white);
806
+ border-radius: 50%;
807
+ display: flex;
808
+ align-items: center;
809
+ justify-content: center;
810
+ font-size: var(--font-size-xs);
811
+ font-weight: 600;
812
+ }
813
+
814
+ /* About Section */
815
+ .about-section {
816
+ padding: var(--spacing-3xl) 0;
817
+ background: var(--bg-primary);
818
+ }
819
+
820
+ .about-content {
821
+ display: grid;
822
+ grid-template-columns: 2fr 1fr;
823
+ gap: var(--spacing-2xl);
824
+ align-items: start;
825
+ }
826
+
827
+ .about-text {
828
+ font-size: var(--font-size-lg);
829
+ line-height: 1.7;
830
+ }
831
+
832
+ .about-text p {
833
+ margin-bottom: var(--spacing-lg);
834
+ color: var(--text-primary);
835
+ }
836
+
837
+ .about-text h3 {
838
+ font-size: var(--font-size-xl);
839
+ margin: var(--spacing-xl) 0 var(--spacing-md);
840
+ color: var(--text-primary);
841
+ }
842
+
843
+ .features-list h4 {
844
+ font-size: var(--font-size-lg);
845
+ margin: var(--spacing-lg) 0 var(--spacing-md);
846
+ color: var(--text-primary);
847
+ }
848
+
849
+ .features-list ul {
850
+ list-style: none;
851
+ padding-left: 0;
852
+ }
853
+
854
+ .features-list li {
855
+ margin-bottom: var(--spacing-sm);
856
+ padding-left: var(--spacing-lg);
857
+ position: relative;
858
+ }
859
+
860
+ .features-list li::before {
861
+ content: '✓';
862
+ position: absolute;
863
+ left: 0;
864
+ color: var(--success-color);
865
+ font-weight: 600;
866
+ }
867
+
868
+ .about-highlights {
869
+ background: var(--bg-secondary);
870
+ padding: var(--spacing-xl);
871
+ border-radius: var(--radius-xl);
872
+ box-shadow: var(--shadow-md);
873
+ }
874
+
875
+ .about-highlights h4 {
876
+ font-size: var(--font-size-lg);
877
+ margin-bottom: var(--spacing-lg);
878
+ color: var(--text-primary);
879
+ }
880
+
881
+ .highlight-item {
882
+ padding: var(--spacing-md);
883
+ margin-bottom: var(--spacing-md);
884
+ background: var(--bg-primary);
885
+ border-radius: var(--radius-md);
886
+ border-left: 4px solid var(--primary-color);
887
+ font-size: var(--font-size-sm);
888
+ line-height: 1.5;
889
+ }
890
+
891
+ /* Footer */
892
+ .footer {
893
+ background: var(--bg-dark);
894
+ color: var(--text-white);
895
+ padding: var(--spacing-3xl) 0 var(--spacing-xl);
896
+ }
897
+
898
+ .footer-content {
899
+ display: grid;
900
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
901
+ gap: var(--spacing-2xl);
902
+ margin-bottom: var(--spacing-2xl);
903
+ }
904
+
905
+ .footer-section h4 {
906
+ font-size: var(--font-size-lg);
907
+ margin-bottom: var(--spacing-lg);
908
+ color: var(--text-white);
909
+ }
910
+
911
+ .footer-section p {
912
+ color: rgba(255, 255, 255, 0.8);
913
+ line-height: 1.6;
914
+ }
915
+
916
+ .footer-section ul {
917
+ list-style: none;
918
+ padding: 0;
919
+ }
920
+
921
+ .footer-section li {
922
+ margin-bottom: var(--spacing-sm);
923
+ }
924
+
925
+ .footer-section a {
926
+ color: rgba(255, 255, 255, 0.8);
927
+ text-decoration: none;
928
+ transition: color var(--transition-fast);
929
+ }
930
+
931
+ .footer-section a:hover {
932
+ color: var(--text-white);
933
+ }
934
+
935
+ .social-links {
936
+ display: flex;
937
+ gap: var(--spacing-md);
938
+ }
939
+
940
+ .social-links a {
941
+ width: 40px;
942
+ height: 40px;
943
+ background: rgba(255, 255, 255, 0.1);
944
+ border-radius: var(--radius-md);
945
+ display: flex;
946
+ align-items: center;
947
+ justify-content: center;
948
+ transition: all var(--transition-fast);
949
+ }
950
+
951
+ .social-links a:hover {
952
+ background: var(--primary-color);
953
+ transform: translateY(-2px);
954
+ }
955
+
956
+ .footer-bottom {
957
+ text-align: center;
958
+ padding-top: var(--spacing-xl);
959
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
960
+ color: rgba(255, 255, 255, 0.6);
961
+ font-size: var(--font-size-sm);
962
+ }
963
+
964
+ /* Back to Top Button */
965
+ .back-to-top {
966
+ position: fixed;
967
+ bottom: var(--spacing-xl);
968
+ right: var(--spacing-xl);
969
+ width: 50px;
970
+ height: 50px;
971
+ background: var(--primary-gradient);
972
+ color: var(--text-white);
973
+ border: none;
974
+ border-radius: 50%;
975
+ cursor: pointer;
976
+ box-shadow: var(--shadow-lg);
977
+ transition: all var(--transition-normal);
978
+ opacity: 0;
979
+ visibility: hidden;
980
+ z-index: 1000;
981
+ }
982
+
983
+ .back-to-top.visible {
984
+ opacity: 1;
985
+ visibility: visible;
986
+ }
987
+
988
+ .back-to-top:hover {
989
+ transform: translateY(-2px);
990
+ box-shadow: var(--shadow-xl);
991
+ }
992
+
993
+ /* Responsive Design */
994
+ @media (max-width: 768px) {
995
+ .container {
996
+ padding: 0 var(--spacing-md);
997
+ }
998
+
999
+ .header-content {
1000
+ flex-direction: column;
1001
+ gap: var(--spacing-lg);
1002
+ text-align: center;
1003
+ }
1004
+
1005
+ .nav {
1006
+ gap: var(--spacing-lg);
1007
+ }
1008
+
1009
+ .hero-title {
1010
+ font-size: var(--font-size-3xl);
1011
+ }
1012
+
1013
+ .hero-subtitle {
1014
+ font-size: var(--font-size-lg);
1015
+ }
1016
+
1017
+ .hero-stats {
1018
+ flex-direction: column;
1019
+ gap: var(--spacing-lg);
1020
+ }
1021
+
1022
+ .search-controls {
1023
+ padding: 0 var(--spacing-md);
1024
+ }
1025
+
1026
+ .filters {
1027
+ grid-template-columns: 1fr;
1028
+ }
1029
+
1030
+ .results-info {
1031
+ flex-direction: column;
1032
+ gap: var(--spacing-md);
1033
+ text-align: center;
1034
+ }
1035
+
1036
+ .repositories-grid {
1037
+ grid-template-columns: 1fr;
1038
+ }
1039
+
1040
+ .repo-header {
1041
+ flex-direction: column;
1042
+ gap: var(--spacing-md);
1043
+ }
1044
+
1045
+ .repo-actions {
1046
+ flex-direction: column;
1047
+ }
1048
+
1049
+ .stats-grid {
1050
+ grid-template-columns: 1fr;
1051
+ }
1052
+
1053
+ .guide-grid {
1054
+ grid-template-columns: 1fr;
1055
+ }
1056
+
1057
+ .about-content {
1058
+ grid-template-columns: 1fr;
1059
+ }
1060
+
1061
+ .footer-content {
1062
+ grid-template-columns: 1fr;
1063
+ text-align: center;
1064
+ }
1065
+ }
1066
+
1067
+ @media (max-width: 480px) {
1068
+ .hero {
1069
+ padding: var(--spacing-2xl) 0;
1070
+ }
1071
+
1072
+ .hero-title {
1073
+ font-size: var(--font-size-2xl);
1074
+ }
1075
+
1076
+ .section-title {
1077
+ font-size: var(--font-size-2xl);
1078
+ }
1079
+
1080
+ .repo-card {
1081
+ padding: var(--spacing-lg);
1082
+ }
1083
+
1084
+ .back-to-top {
1085
+ bottom: var(--spacing-lg);
1086
+ right: var(--spacing-lg);
1087
+ width: 45px;
1088
+ height: 45px;
1089
+ }
1090
+ }
1091
+
1092
+ /* Animation Classes */
1093
+ .fade-in {
1094
+ animation: fadeIn 0.6s ease-out;
1095
+ }
1096
+
1097
+ .slide-up {
1098
+ animation: slideUp 0.6s ease-out;
1099
+ }
1100
+
1101
+ .scale-in {
1102
+ animation: scaleIn 0.4s ease-out;
1103
+ }
1104
+
1105
+ @keyframes fadeIn {
1106
+ from {
1107
+ opacity: 0;
1108
+ }
1109
+ to {
1110
+ opacity: 1;
1111
+ }
1112
+ }
1113
+
1114
+ @keyframes slideUp {
1115
+ from {
1116
+ opacity: 0;
1117
+ transform: translateY(30px);
1118
+ }
1119
+ to {
1120
+ opacity: 1;
1121
+ transform: translateY(0);
1122
+ }
1123
+ }
1124
+
1125
+ @keyframes scaleIn {
1126
+ from {
1127
+ opacity: 0;
1128
+ transform: scale(0.9);
1129
+ }
1130
+ to {
1131
+ opacity: 1;
1132
+ transform: scale(1);
1133
+ }
1134
+ }
1135
+
1136
+ /* Loading States */
1137
+ .loading {
1138
+ opacity: 0.6;
1139
+ pointer-events: none;
1140
+ }
1141
+
1142
+ .skeleton {
1143
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
1144
+ background-size: 200% 100%;
1145
+ animation: loading 1.5s infinite;
1146
+ }
1147
+
1148
+ @keyframes loading {
1149
+ 0% {
1150
+ background-position: 200% 0;
1151
+ }
1152
+ 100% {
1153
+ background-position: -200% 0;
1154
+ }
1155
+ }
1156
+