modified: src/pages/live-activity.astro

This commit is contained in:
Anderson 2026-02-04 04:45:24 +00:00 committed by GitHub
parent 8ea08bf237
commit 7b4b614186
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 2437 additions and 2212 deletions

View file

@ -1,421 +0,0 @@
---
import MainLayout from '../layouts/MainLayout.astro';
const docCategories = [
{
title: 'Getting Started',
icon: '🚀',
color: '#6cf',
docs: [
{ name: 'Introduction to AeThex', description: 'Overview of the ecosystem and core concepts', time: '5 min read' },
{ name: 'Quickstart Guide', description: 'Get up and running in under 10 minutes', time: '10 min read' },
{ name: 'Architecture Overview', description: 'Understanding the Trinity structure', time: '8 min read' },
{ name: 'Authentication Setup', description: 'Implement SSO and identity verification', time: '12 min read' },
]
},
{
title: 'Core APIs',
icon: '⚡',
color: '#ff4d4d',
docs: [
{ name: 'Identity API', description: 'User authentication and profile management', time: '15 min read' },
{ name: 'Asset API', description: 'Digital asset creation and management', time: '12 min read' },
{ name: 'Events API', description: 'Real-time event streaming and webhooks', time: '10 min read' },
{ name: 'Analytics API', description: 'Usage metrics and insights', time: '8 min read' },
]
},
{
title: 'SDKs & Tools',
icon: '🛠️',
color: '#ffc700',
docs: [
{ name: 'JavaScript SDK', description: 'Full-featured SDK for web applications', time: '20 min read' },
{ name: 'Python SDK', description: 'Backend integration and automation', time: '15 min read' },
{ name: 'Unity Plugin', description: 'Game engine integration guide', time: '25 min read' },
{ name: 'CLI Reference', description: 'Command-line tools documentation', time: '10 min read' },
]
},
{
title: 'Advanced Topics',
icon: '🧠',
color: '#a855f7',
docs: [
{ name: 'Decentralized Storage', description: 'IPFS and distributed data patterns', time: '18 min read' },
{ name: 'Smart Contracts', description: 'On-chain asset management', time: '22 min read' },
{ name: 'AI Integration', description: 'Machine learning APIs and models', time: '20 min read' },
{ name: 'Security Best Practices', description: 'Hardening your implementation', time: '15 min read' },
]
}
];
const popularDocs = [
{ name: 'Quickstart Guide', views: '12.4k', icon: '📖' },
{ name: 'Authentication Setup', views: '8.2k', icon: '🔐' },
{ name: 'JavaScript SDK', views: '6.8k', icon: '💻' },
{ name: 'Identity API', views: '5.1k', icon: '👤' },
];
---
<MainLayout>
<!-- Hero Section -->
<section class="docs-hero">
<div class="docs-hero-bg"></div>
<div class="hero-content">
<h1 class="hero-title">Documentation</h1>
<p class="hero-desc">Everything you need to build on the AeThex ecosystem. Comprehensive guides, API references, and tutorials.</p>
<!-- Search Bar -->
<div class="docs-search">
<svg class="search-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/>
</svg>
<input type="text" placeholder="Search documentation..." class="search-input" />
<kbd class="search-shortcut">⌘K</kbd>
</div>
</div>
</section>
<!-- Quick Stats -->
<section class="docs-stats">
<div class="stat-card">
<span class="stat-value">150+</span>
<span class="stat-label">Documentation Pages</span>
</div>
<div class="stat-card">
<span class="stat-value">4</span>
<span class="stat-label">SDKs Available</span>
</div>
<div class="stat-card">
<span class="stat-value">50+</span>
<span class="stat-label">Code Examples</span>
</div>
<div class="stat-card">
<span class="stat-value">Weekly</span>
<span class="stat-label">Updates</span>
</div>
</section>
<!-- Popular Docs -->
<section class="popular-section">
<h2 class="section-title">Popular Documentation</h2>
<div class="popular-grid">
{popularDocs.map(doc => (
<a href="/docs" class="popular-card">
<span class="popular-icon">{doc.icon}</span>
<div class="popular-info">
<span class="popular-name">{doc.name}</span>
<span class="popular-views">{doc.views} views</span>
</div>
<svg class="arrow-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M5 12h14M12 5l7 7-7 7"/>
</svg>
</a>
))}
</div>
</section>
<!-- Documentation Categories -->
<section class="docs-categories">
{docCategories.map(category => (
<div class="category-section">
<div class="category-header">
<span class="category-icon" style={`background: ${category.color}20; color: ${category.color};`}>{category.icon}</span>
<h2 class="category-title">{category.title}</h2>
</div>
<div class="docs-grid">
{category.docs.map(doc => (
<a href="/docs" class="doc-card" style={`--accent: ${category.color};`}>
<h3 class="doc-title">{doc.name}</h3>
<p class="doc-description">{doc.description}</p>
<span class="doc-time">{doc.time}</span>
</a>
))}
</div>
</div>
))}
</section>
<!-- API Reference CTA -->
<section class="api-cta">
<div class="cta-content">
<h2>Full API Reference</h2>
<p>Dive into the complete API documentation with interactive examples, request/response schemas, and authentication guides.</p>
<div class="cta-buttons">
<a href="/docs" class="cta-primary">Explore API →</a>
<a href="https://github.com/AeThex-LABS" target="_blank" rel="noopener" class="cta-secondary">View on GitHub</a>
</div>
</div>
<div class="cta-code">
<pre><code><span class="code-comment">// Example: Authenticate a user</span>
<span class="code-keyword">const</span> user = <span class="code-keyword">await</span> aethex.auth.login({'{'}
<span class="code-string">email</span>: <span class="code-value">'user@example.com'</span>,
<span class="code-string">provider</span>: <span class="code-value">'sso'</span>
{'}'});
<span class="code-comment">// Access user profile</span>
<span class="code-keyword">console</span>.log(user.profile);</code></pre>
</div>
</section>
<style>
/* Hero Section */
.docs-hero {
position: relative;
text-align: center;
padding: 100px 20px 60px;
overflow: hidden;
}
.docs-hero-bg {
position: absolute;
inset: 0;
background: linear-gradient(135deg, #0a0d14 0%, #101827 50%, #0a0d14 100%);
z-index: -1;
}
.docs-hero-bg::before {
content: '';
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 50% 0%, rgba(102, 204, 255, 0.1) 0%, transparent 60%);
}
.hero-title {
font-size: 3.5em;
font-weight: 900;
color: #fff;
margin-bottom: 16px;
}
.hero-desc {
font-size: 1.2em;
color: #888;
max-width: 600px;
margin: 0 auto 32px;
}
/* Search Bar */
.docs-search {
display: flex;
align-items: center;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 12px;
padding: 12px 20px;
max-width: 500px;
margin: 0 auto;
gap: 12px;
}
.search-icon { color: #666; flex-shrink: 0; }
.search-input {
flex: 1;
background: none;
border: none;
color: #fff;
font-size: 1em;
outline: none;
}
.search-input::placeholder { color: #666; }
.search-shortcut {
background: rgba(255,255,255,0.1);
padding: 4px 8px;
border-radius: 6px;
font-size: 0.8em;
color: #666;
}
/* Stats Section */
.docs-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
max-width: 900px;
margin: -30px auto 60px;
padding: 0 20px;
}
.stat-card {
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 24px;
text-align: center;
}
.stat-value {
display: block;
font-size: 2em;
font-weight: 800;
color: #6cf;
margin-bottom: 4px;
}
.stat-label {
font-size: 0.85em;
color: #666;
}
/* Popular Section */
.popular-section {
max-width: 1100px;
margin: 0 auto 60px;
padding: 0 20px;
}
.section-title {
font-size: 1.5em;
color: #fff;
margin-bottom: 24px;
}
.popular-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.popular-card {
display: flex;
align-items: center;
gap: 12px;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 10px;
padding: 16px;
text-decoration: none;
transition: all 0.2s;
}
.popular-card:hover {
background: rgba(255,255,255,0.06);
border-color: rgba(102,204,255,0.3);
transform: translateY(-2px);
}
.popular-icon { font-size: 1.5em; }
.popular-info { flex: 1; }
.popular-name { display: block; color: #fff; font-weight: 600; font-size: 0.9em; }
.popular-views { font-size: 0.75em; color: #666; }
.arrow-icon { color: #666; }
/* Categories */
.docs-categories {
max-width: 1100px;
margin: 0 auto;
padding: 0 20px 60px;
}
.category-section { margin-bottom: 48px; }
.category-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 20px;
}
.category-icon {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10px;
font-size: 1.2em;
}
.category-title {
font-size: 1.3em;
color: #fff;
margin: 0;
}
.docs-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.doc-card {
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 20px;
text-decoration: none;
transition: all 0.2s;
}
.doc-card:hover {
background: rgba(255,255,255,0.05);
border-color: var(--accent, #6cf);
transform: translateY(-2px);
}
.doc-title {
font-size: 1em;
color: #fff;
margin: 0 0 8px;
}
.doc-description {
font-size: 0.85em;
color: #888;
margin: 0 0 12px;
line-height: 1.5;
}
.doc-time {
font-size: 0.75em;
color: #666;
font-family: 'Roboto Mono', monospace;
}
/* API CTA */
.api-cta {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 40px;
max-width: 1100px;
margin: 0 auto 80px;
padding: 40px;
background: linear-gradient(135deg, rgba(102,204,255,0.05) 0%, rgba(168,85,247,0.05) 100%);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 20px;
}
.cta-content h2 {
font-size: 1.8em;
color: #fff;
margin: 0 0 12px;
}
.cta-content p {
color: #888;
margin: 0 0 24px;
line-height: 1.6;
}
.cta-buttons { display: flex; gap: 12px; }
.cta-primary {
background: linear-gradient(135deg, #6cf 0%, #3b82f6 100%);
color: #000;
padding: 12px 24px;
border-radius: 8px;
text-decoration: none;
font-weight: 600;
transition: transform 0.2s;
}
.cta-primary:hover { transform: translateY(-2px); }
.cta-secondary {
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
color: #fff;
padding: 12px 24px;
border-radius: 8px;
text-decoration: none;
transition: all 0.2s;
}
.cta-secondary:hover { background: rgba(255,255,255,0.1); }
.cta-code {
background: #0d1117;
border-radius: 12px;
padding: 24px;
overflow-x: auto;
}
.cta-code pre { margin: 0; }
.cta-code code {
font-family: 'Roboto Mono', monospace;
font-size: 0.9em;
line-height: 1.8;
color: #e6edf3;
}
.code-comment { color: #8b949e; }
.code-keyword { color: #ff7b72; }
.code-string { color: #79c0ff; }
.code-value { color: #a5d6ff; }
/* Responsive */
@media (max-width: 900px) {
.docs-stats, .popular-grid, .docs-grid { grid-template-columns: repeat(2, 1fr); }
.api-cta { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
.docs-stats, .popular-grid, .docs-grid { grid-template-columns: 1fr; }
.hero-title { font-size: 2.5em; }
}
</style>
</MainLayout>

File diff suppressed because it is too large Load diff

View file

@ -2,19 +2,49 @@
import MainLayout from '../layouts/MainLayout.astro';
const legendaryContributors = [
{ name: 'Alex Chen', username: '@alexdev', avatar: 'https://i.pravatar.cc/100?img=1', title: 'Core Architect', contributions: 847, points: 12500, badges: ['🏆', '💎', '⚡'], specialty: 'Infrastructure' },
{ name: 'Maya Rodriguez', username: '@maya_sdk', avatar: 'https://i.pravatar.cc/100?img=5', title: 'SDK Lead', contributions: 623, points: 9800, badges: ['🏆', '🔧', '📚'], specialty: 'Developer Tools' },
{ name: 'Jordan Kim', username: '@j_kim', avatar: 'https://i.pravatar.cc/100?img=3', title: 'Docs Champion', contributions: 512, points: 7600, badges: ['🏆', '📖', '✨'], specialty: 'Documentation' },
{
name: 'Alex Chen',
username: '@alexdev',
avatar: 'https://i.pravatar.cc/150?img=1',
title: 'Core Architect',
contributions: 847,
points: 12500,
badges: ['🏆', '💎', '⚡'],
specialty: 'Infrastructure',
quote: 'Building the future, one commit at a time.'
},
{
name: 'Maya Rodriguez',
username: '@maya_sdk',
avatar: 'https://i.pravatar.cc/150?img=5',
title: 'SDK Lead',
contributions: 623,
points: 9800,
badges: ['🏆', '🔧', '📚'],
specialty: 'Developer Tools',
quote: 'Great APIs are invisible to the developer.'
},
{
name: 'Jordan Kim',
username: '@j_kim',
avatar: 'https://i.pravatar.cc/150?img=3',
title: 'Docs Champion',
contributions: 512,
points: 7600,
badges: ['🏆', '📖', '✨'],
specialty: 'Documentation',
quote: 'Documentation is a love letter to your future self.'
},
];
const topContributors = [
{ rank: 4, name: 'Sam Patel', username: '@sampatel', avatar: 'https://i.pravatar.cc/100?img=8', contributions: 389, points: 5400, badge: '🥇' },
{ rank: 5, name: 'Riley Johnson', username: '@rileyj', avatar: 'https://i.pravatar.cc/100?img=12', contributions: 342, points: 4800, badge: '🥇' },
{ rank: 6, name: 'Casey Morgan', username: '@caseym', avatar: 'https://i.pravatar.cc/100?img=15', contributions: 298, points: 4200, badge: '🥇' },
{ rank: 7, name: 'Taylor Swift', username: '@tswift_dev', avatar: 'https://i.pravatar.cc/100?img=20', contributions: 276, points: 3900, badge: '🥈' },
{ rank: 8, name: 'Morgan Lee', username: '@morganlee', avatar: 'https://i.pravatar.cc/100?img=25', contributions: 254, points: 3600, badge: '🥈' },
{ rank: 9, name: 'Jamie Wilson', username: '@jwilson', avatar: 'https://i.pravatar.cc/100?img=30', contributions: 231, points: 3300, badge: '🥈' },
{ rank: 10, name: 'Chris Anderson', username: '@chris_a', avatar: 'https://i.pravatar.cc/100?img=33', contributions: 215, points: 3100, badge: '🥉' },
{ rank: 4, name: 'Sam Patel', username: '@sampatel', avatar: 'https://i.pravatar.cc/100?img=8', contributions: 389, points: 5400, tier: 'gold' },
{ rank: 5, name: 'Riley Johnson', username: '@rileyj', avatar: 'https://i.pravatar.cc/100?img=12', contributions: 342, points: 4800, tier: 'gold' },
{ rank: 6, name: 'Casey Morgan', username: '@caseym', avatar: 'https://i.pravatar.cc/100?img=15', contributions: 298, points: 4200, tier: 'gold' },
{ rank: 7, name: 'Taylor Swift', username: '@tswift_dev', avatar: 'https://i.pravatar.cc/100?img=20', contributions: 276, points: 3900, tier: 'silver' },
{ rank: 8, name: 'Morgan Lee', username: '@morganlee', avatar: 'https://i.pravatar.cc/100?img=25', contributions: 254, points: 3600, tier: 'silver' },
{ rank: 9, name: 'Jamie Wilson', username: '@jwilson', avatar: 'https://i.pravatar.cc/100?img=30', contributions: 231, points: 3300, tier: 'silver' },
{ rank: 10, name: 'Chris Anderson', username: '@chris_a', avatar: 'https://i.pravatar.cc/100?img=33', contributions: 215, points: 3100, tier: 'bronze' },
];
const hallOfShame = [
@ -24,31 +54,32 @@ const hallOfShame = [
];
const badges = [
{ icon: '🏆', name: 'Legend', description: 'Top 3 all-time contributor', rarity: 'legendary' },
{ icon: '💎', name: 'Diamond', description: '500+ contributions', rarity: 'epic' },
{ icon: '⚡', name: 'First Responder', description: 'Fastest bug reporter', rarity: 'rare' },
{ icon: '🔧', name: 'Builder', description: 'Core infrastructure contributor', rarity: 'epic' },
{ icon: '📚', name: 'Scholar', description: 'Documentation excellence', rarity: 'rare' },
{ icon: '🥇', name: 'Gold Tier', description: 'Top 10 contributor', rarity: 'rare' },
{ icon: '🥈', name: 'Silver Tier', description: 'Top 25 contributor', rarity: 'uncommon' },
{ icon: '🥉', name: 'Bronze Tier', description: 'Top 50 contributor', rarity: 'common' },
{ icon: '🏆', name: 'Legend', description: 'Top 3 all-time contributor', rarity: 'legendary', color: '#ffc700' },
{ icon: '💎', name: 'Diamond', description: '500+ contributions', rarity: 'epic', color: '#a855f7' },
{ icon: '⚡', name: 'First Responder', description: 'Fastest bug reporter', rarity: 'rare', color: '#6cf' },
{ icon: '🔧', name: 'Builder', description: 'Core infrastructure work', rarity: 'epic', color: '#a855f7' },
{ icon: '📚', name: 'Scholar', description: 'Documentation excellence', rarity: 'rare', color: '#6cf' },
{ icon: '🥇', name: 'Gold Tier', description: 'Top 10 contributor', rarity: 'rare', color: '#ffc700' },
{ icon: '🥈', name: 'Silver Tier', description: 'Top 25 contributor', rarity: 'uncommon', color: '#888' },
{ icon: '🥉', name: 'Bronze Tier', description: 'Top 50 contributor', rarity: 'common', color: '#cd7f32' },
];
const stats = [
{ value: '500+', label: 'Total Contributors' },
{ value: '12.5K', label: 'Total Contributions' },
{ value: '500+', label: 'Contributors' },
{ value: '12.5K', label: 'Contributions' },
{ value: '847', label: 'Top Score' },
{ value: '24', label: 'Unique Badges' },
{ value: '24', label: 'Badges' },
];
---
<MainLayout>
<MainLayout title="Hall of Fame - AeThex">
<!-- Hero -->
<section class="fame-hero">
<div class="hero-bg"></div>
<div class="hero-particles"></div>
<div class="hero-content">
<span class="hero-label">Recognition</span>
<span class="hero-badge">Recognition</span>
<h1 class="hero-title">Hall of <span class="gradient-text">Fame</span></h1>
<p class="hero-desc">Celebrating the builders, contributors, and community members who make AeThex possible. And calling out those who don't play nice.</p>
<p class="hero-desc">Celebrating the builders, contributors, and community members who make AeThex possible. And calling out those who don't play by the rules.</p>
</div>
</section>
@ -64,14 +95,21 @@ const stats = [
<!-- Legendary Contributors -->
<section class="legends-section">
<h2 class="section-title">🏆 Legendary Contributors</h2>
<div class="section-header">
<span class="section-eyebrow">&gt; LEGENDARY_STATUS</span>
<h2 class="section-title">The Legends</h2>
<p class="section-subtitle">Top 3 all-time contributors who shaped AeThex</p>
</div>
<div class="legends-grid">
{legendaryContributors.map((legend, i) => (
<div class="legend-card" data-rank={i + 1}>
<div class="legend-rank">#{i + 1}</div>
<div class="legend-glow"></div>
<div class="legend-rank">
<span class="rank-crown">👑</span>
<span class="rank-num">#{i + 1}</span>
</div>
<div class="legend-avatar">
<img src={legend.avatar} alt={legend.name} />
<span class="legend-crown">👑</span>
</div>
<h3 class="legend-name">{legend.name}</h3>
<p class="legend-username">{legend.username}</p>
@ -91,6 +129,7 @@ const stats = [
<span class="stat-lbl">Points</span>
</div>
</div>
<p class="legend-quote">"{legend.quote}"</p>
<span class="legend-specialty">{legend.specialty}</span>
</div>
))}
@ -99,33 +138,48 @@ const stats = [
<!-- Leaderboard -->
<section class="leaderboard-section">
<h2 class="section-title">Top Contributors</h2>
<div class="section-header">
<span class="section-eyebrow">&gt; LEADERBOARD</span>
<h2 class="section-title">Top Contributors</h2>
<p class="section-subtitle">Ranked by total contribution points</p>
</div>
<div class="leaderboard">
<div class="leaderboard-header">
<span class="lb-col-rank">Rank</span>
<span class="lb-col-user">Contributor</span>
<span class="lb-col-contributions">Contributions</span>
<span class="lb-col-points">Points</span>
<span class="lb-col-tier">Tier</span>
</div>
{topContributors.map(user => (
<div class="leaderboard-row">
<div class={`leaderboard-row tier-${user.tier}`}>
<span class="lb-rank">#{user.rank}</span>
<img src={user.avatar} alt={user.name} class="lb-avatar" />
<div class="lb-info">
<span class="lb-name">{user.name}</span>
<span class="lb-username">{user.username}</span>
</div>
<span class="lb-badge">{user.badge}</span>
<div class="lb-stats">
<span class="lb-contributions">{user.contributions} contributions</span>
<span class="lb-points">{user.points.toLocaleString()} pts</span>
<div class="lb-user">
<img src={user.avatar} alt={user.name} class="lb-avatar" />
<div class="lb-info">
<span class="lb-name">{user.name}</span>
<span class="lb-username">{user.username}</span>
</div>
</div>
<span class="lb-contributions">{user.contributions}</span>
<span class="lb-points">{user.points.toLocaleString()}</span>
<span class={`lb-tier ${user.tier}`}>{user.tier}</span>
</div>
))}
</div>
<a href="/community" class="view-all-link">View Full Leaderboard →</a>
<a href="/community" class="view-all-btn">View Full Leaderboard →</a>
</section>
<!-- Badges -->
<section class="badges-section">
<h2 class="section-title">Badges & Achievements</h2>
<div class="section-header">
<span class="section-eyebrow">&gt; ACHIEVEMENTS</span>
<h2 class="section-title">Badges & Achievements</h2>
<p class="section-subtitle">Earn recognition for your contributions</p>
</div>
<div class="badges-grid">
{badges.map(badge => (
<div class={`badge-card ${badge.rarity}`}>
<div class={`badge-card ${badge.rarity}`} style={`--badge-color: ${badge.color}`}>
<span class="badge-icon">{badge.icon}</span>
<h3 class="badge-name">{badge.name}</h3>
<p class="badge-desc">{badge.description}</p>
@ -137,8 +191,11 @@ const stats = [
<!-- Hall of Shame -->
<section class="shame-section">
<h2 class="section-title">🚫 Hall of Shame</h2>
<p class="section-desc">Bad actors who violated community guidelines. Transparency is key.</p>
<div class="section-header">
<span class="section-eyebrow shame">&gt; HALL_OF_SHAME</span>
<h2 class="section-title">🚫 Hall of Shame</h2>
<p class="section-subtitle">Bad actors who violated community guidelines. Transparency is key.</p>
</div>
<div class="shame-list">
{hallOfShame.map(offender => (
<div class="shame-card">
@ -160,47 +217,65 @@ const stats = [
<section class="fame-cta">
<h2>Want Your Name Here?</h2>
<p>Start contributing to AeThex and climb the leaderboard. Every contribution counts.</p>
<a href="/contribute" class="cta-button">Start Contributing →</a>
<div class="cta-buttons">
<a href="/contribute" class="cta-btn primary">Start Contributing</a>
<a href="/community" class="cta-btn secondary">Join Community</a>
</div>
</section>
<style>
:root {
--fame-gold: #ffc700;
--fame-purple: #a855f7;
--fame-cyan: #6cf;
}
/* Hero */
.fame-hero {
position: relative;
text-align: center;
min-height: 50vh;
display: flex;
align-items: center;
justify-content: center;
padding: 120px 20px 80px;
overflow: hidden;
text-align: center;
}
.hero-bg {
position: absolute;
inset: 0;
background: linear-gradient(180deg, #0a0d14 0%, #10131a 100%);
z-index: -1;
background: linear-gradient(180deg, #0a0d14 0%, #1a1520 50%, #0a0d14 100%);
}
.hero-bg::before {
content: '';
.hero-particles {
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 50% 30%, rgba(255,199,0,0.1) 0%, transparent 60%);
background-image: radial-gradient(circle at 20% 30%, rgba(255, 199, 0, 0.1) 0%, transparent 40%),
radial-gradient(circle at 80% 70%, rgba(168, 85, 247, 0.1) 0%, transparent 40%);
}
.hero-label {
.hero-content {
position: relative;
z-index: 1;
max-width: 700px;
}
.hero-badge {
display: inline-block;
background: rgba(255,199,0,0.15);
border: 1px solid rgba(255,199,0,0.3);
padding: 6px 16px;
border-radius: 20px;
background: rgba(255, 199, 0, 0.1);
border: 1px solid rgba(255, 199, 0, 0.3);
color: var(--fame-gold);
padding: 8px 20px;
border-radius: 24px;
font-size: 0.85em;
color: #ffc700;
margin-bottom: 20px;
letter-spacing: 1px;
margin-bottom: 24px;
}
.hero-title {
font-size: 3.5em;
font-size: 4em;
font-weight: 900;
color: #fff;
margin: 0 0 20px;
margin: 0 0 16px;
}
.gradient-text {
background: linear-gradient(135deg, #ffc700 0%, #ff6b35 100%);
background: linear-gradient(135deg, var(--fame-gold) 0%, #ff6b35 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
@ -208,40 +283,64 @@ const stats = [
.hero-desc {
font-size: 1.2em;
color: #888;
max-width: 600px;
margin: 0 auto;
}
/* Stats */
.stats-bar {
display: flex;
justify-content: center;
gap: 60px;
padding: 40px 20px;
gap: 80px;
padding: 50px 20px;
background: rgba(255,255,255,0.02);
border-top: 1px solid rgba(255,255,255,0.05);
border-bottom: 1px solid rgba(255,255,255,0.05);
}
.stat-item { text-align: center; }
.stat-value { display: block; font-size: 2em; font-weight: 800; color: #ffc700; }
.stat-label { font-size: 0.85em; color: #666; }
.stat-value {
display: block;
font-size: 2.5em;
font-weight: 900;
color: var(--fame-gold);
font-family: 'Roboto Mono', monospace;
}
.stat-label {
font-size: 0.85em;
color: #666;
text-transform: uppercase;
letter-spacing: 1px;
}
/* Legends */
.legends-section {
max-width: 1000px;
margin: 60px auto;
padding: 0 20px;
/* Section Header */
.section-header {
text-align: center;
margin-bottom: 48px;
}
.section-eyebrow {
font-family: 'Roboto Mono', monospace;
font-size: 0.85em;
color: var(--fame-gold);
letter-spacing: 2px;
margin-bottom: 12px;
display: block;
}
.section-eyebrow.shame { color: #ff4d4d; }
.section-title {
font-size: 1.8em;
font-size: 2.5em;
font-weight: 800;
color: #fff;
text-align: center;
margin: 0 0 32px;
margin: 0 0 12px;
}
.section-desc {
.section-subtitle {
font-size: 1.1em;
color: #888;
text-align: center;
margin: -24px 0 32px;
margin: 0;
}
/* Legends Section */
.legends-section {
max-width: 1100px;
margin: 80px auto;
padding: 0 20px;
}
.legends-grid {
display: grid;
@ -249,75 +348,126 @@ const stats = [
gap: 24px;
}
.legend-card {
background: linear-gradient(135deg, rgba(255,199,0,0.05) 0%, rgba(255,107,53,0.05) 100%);
border: 2px solid rgba(255,199,0,0.2);
position: relative;
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255, 199, 0, 0.2);
border-radius: 20px;
padding: 32px 24px;
text-align: center;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
}
.legend-card:hover {
transform: translateY(-8px);
border-color: var(--fame-gold);
}
.legend-glow {
position: absolute;
top: -50%;
left: 50%;
transform: translateX(-50%);
width: 200%;
height: 100%;
background: radial-gradient(ellipse at center, rgba(255, 199, 0, 0.1) 0%, transparent 60%);
pointer-events: none;
}
.legend-card[data-rank="1"] { border-color: rgba(255,199,0,0.5); }
.legend-card[data-rank="2"] { border-color: rgba(192,192,192,0.5); }
.legend-card[data-rank="3"] { border-color: rgba(205,127,50,0.5); }
.legend-rank {
position: absolute;
top: -10px;
left: 20px;
background: linear-gradient(135deg, #ffc700, #ff6b35);
color: #000;
font-weight: 800;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.85em;
top: 16px;
right: 16px;
display: flex;
flex-direction: column;
align-items: center;
}
.rank-crown { font-size: 1.5em; }
.rank-num {
font-family: 'Roboto Mono', monospace;
color: var(--fame-gold);
font-size: 0.9em;
font-weight: 700;
}
.legend-avatar {
position: relative;
width: 80px;
height: 80px;
width: 100px;
height: 100px;
margin: 0 auto 16px;
border-radius: 50%;
padding: 4px;
background: linear-gradient(135deg, var(--fame-gold), var(--fame-purple));
}
.legend-avatar img {
width: 100%;
height: 100%;
border-radius: 50%;
border: 3px solid #ffc700;
object-fit: cover;
}
.legend-crown {
position: absolute;
top: -15px;
left: 50%;
transform: translateX(-50%);
font-size: 1.5em;
.legend-name {
color: #fff;
font-size: 1.3em;
margin: 0 0 4px;
}
.legend-username {
color: #666;
font-size: 0.9em;
margin: 0 0 8px;
}
.legend-title {
color: var(--fame-gold);
font-size: 0.85em;
font-weight: 600;
margin: 0 0 16px;
}
.legend-badges {
display: flex;
justify-content: center;
gap: 8px;
margin-bottom: 16px;
}
.legend-name { color: #fff; margin: 0 0 4px; font-size: 1.2em; }
.legend-username { color: #6cf; font-size: 0.85em; margin: 0 0 8px; font-family: 'Roboto Mono', monospace; }
.legend-title { color: #ffc700; font-size: 0.8em; margin: 0 0 12px; }
.legend-badges { margin-bottom: 16px; }
.legend-badges .badge {
font-size: 1.2em;
margin: 0 4px;
font-size: 1.3em;
background: rgba(255,255,255,0.05);
padding: 6px 10px;
border-radius: 8px;
}
.legend-stats {
display: flex;
justify-content: center;
gap: 24px;
margin-bottom: 12px;
gap: 32px;
margin-bottom: 16px;
}
.legend-stat { text-align: center; }
.stat-num { display: block; font-size: 1.3em; font-weight: 700; color: #fff; }
.stat-lbl { font-size: 0.7em; color: #666; }
.legend-specialty {
.stat-num {
display: block;
font-size: 1.4em;
font-weight: 800;
color: #fff;
font-family: 'Roboto Mono', monospace;
}
.stat-lbl {
font-size: 0.75em;
background: rgba(255,255,255,0.05);
padding: 4px 12px;
border-radius: 12px;
color: #888;
color: #666;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.legend-quote {
color: #666;
font-style: italic;
font-size: 0.85em;
margin: 0 0 16px;
}
.legend-specialty {
display: inline-block;
background: rgba(255, 199, 0, 0.1);
color: var(--fame-gold);
padding: 6px 16px;
border-radius: 20px;
font-size: 0.8em;
font-weight: 600;
}
/* Leaderboard */
.leaderboard-section {
max-width: 800px;
margin: 0 auto 60px;
max-width: 900px;
margin: 80px auto;
padding: 0 20px;
}
.leaderboard {
@ -326,82 +476,129 @@ const stats = [
border-radius: 16px;
overflow: hidden;
}
.leaderboard-header {
display: grid;
grid-template-columns: 80px 1fr 120px 120px 100px;
gap: 16px;
padding: 16px 24px;
background: rgba(255,255,255,0.03);
font-size: 0.8em;
color: #666;
text-transform: uppercase;
letter-spacing: 1px;
}
.leaderboard-row {
display: grid;
grid-template-columns: 80px 1fr 120px 120px 100px;
gap: 16px;
padding: 16px 24px;
align-items: center;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: background 0.3s ease;
}
.leaderboard-row:last-child { border-bottom: none; }
.leaderboard-row:hover { background: rgba(255,255,255,0.03); }
.lb-rank {
font-family: 'Roboto Mono', monospace;
font-weight: 700;
color: #fff;
}
.lb-user {
display: flex;
align-items: center;
gap: 16px;
padding: 16px 20px;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: background 0.2s;
}
.leaderboard-row:hover { background: rgba(255,255,255,0.02); }
.leaderboard-row:last-child { border-bottom: none; }
.lb-rank {
width: 40px;
font-weight: 700;
color: #888;
gap: 12px;
}
.lb-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
object-fit: cover;
}
.lb-info { flex: 1; }
.lb-name { display: block; color: #fff; font-weight: 500; }
.lb-username { font-size: 0.8em; color: #666; }
.lb-badge { font-size: 1.2em; }
.lb-stats { text-align: right; }
.lb-contributions { display: block; font-size: 0.85em; color: #fff; }
.lb-points { font-size: 0.75em; color: #ffc700; }
.view-all-link {
.lb-info { display: flex; flex-direction: column; }
.lb-name { color: #fff; font-weight: 600; }
.lb-username { color: #666; font-size: 0.85em; }
.lb-contributions, .lb-points {
font-family: 'Roboto Mono', monospace;
color: #aaa;
}
.lb-tier {
text-transform: uppercase;
font-size: 0.75em;
font-weight: 700;
letter-spacing: 1px;
padding: 4px 12px;
border-radius: 12px;
text-align: center;
}
.lb-tier.gold { background: rgba(255, 199, 0, 0.2); color: #ffc700; }
.lb-tier.silver { background: rgba(200, 200, 200, 0.2); color: #ccc; }
.lb-tier.bronze { background: rgba(205, 127, 50, 0.2); color: #cd7f32; }
.view-all-btn {
display: block;
text-align: center;
margin-top: 20px;
color: #6cf;
color: var(--fame-gold);
text-decoration: none;
padding: 20px;
font-weight: 600;
transition: opacity 0.3s ease;
}
.view-all-link:hover { text-decoration: underline; }
.view-all-btn:hover { opacity: 0.8; }
/* Badges */
.badges-section {
max-width: 900px;
margin: 0 auto 60px;
max-width: 1100px;
margin: 80px auto;
padding: 0 20px;
}
.badges-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
gap: 20px;
}
.badge-card {
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 20px;
border-radius: 16px;
padding: 24px;
text-align: center;
transition: all 0.3s ease;
}
.badge-card:hover {
border-color: var(--badge-color);
transform: translateY(-4px);
}
.badge-icon {
font-size: 2.5em;
display: block;
margin-bottom: 12px;
}
.badge-name {
color: #fff;
font-size: 1.1em;
margin: 0 0 8px;
}
.badge-desc {
color: #888;
font-size: 0.85em;
margin: 0 0 12px;
line-height: 1.5;
}
.badge-card.legendary { border-color: rgba(255,199,0,0.3); }
.badge-card.epic { border-color: rgba(168,85,247,0.3); }
.badge-card.rare { border-color: rgba(102,204,255,0.3); }
.badge-icon { font-size: 2em; display: block; margin-bottom: 8px; }
.badge-name { color: #fff; margin: 0 0 4px; font-size: 0.95em; }
.badge-desc { color: #888; font-size: 0.75em; margin: 0 0 8px; }
.badge-rarity {
font-size: 0.65em;
display: inline-block;
background: rgba(255,255,255,0.05);
color: var(--badge-color);
padding: 4px 12px;
border-radius: 12px;
font-size: 0.75em;
font-weight: 600;
text-transform: uppercase;
padding: 2px 8px;
border-radius: 8px;
letter-spacing: 0.5px;
}
.badge-card.legendary .badge-rarity { background: rgba(255,199,0,0.2); color: #ffc700; }
.badge-card.epic .badge-rarity { background: rgba(168,85,247,0.2); color: #a855f7; }
.badge-card.rare .badge-rarity { background: rgba(102,204,255,0.2); color: #6cf; }
.badge-card.uncommon .badge-rarity { background: rgba(0,204,136,0.2); color: #00cc88; }
.badge-card.common .badge-rarity { background: rgba(136,136,136,0.2); color: #888; }
/* Shame */
/* Shame Section */
.shame-section {
max-width: 700px;
margin: 0 auto 60px;
max-width: 800px;
margin: 80px auto;
padding: 0 20px;
}
.shame-list {
@ -413,60 +610,107 @@ const stats = [
display: flex;
align-items: center;
gap: 16px;
background: rgba(255,77,77,0.05);
border: 1px solid rgba(255,77,77,0.2);
background: rgba(255, 77, 77, 0.05);
border: 1px solid rgba(255, 77, 77, 0.2);
border-radius: 12px;
padding: 16px 20px;
}
.shame-icon { font-size: 1.5em; }
.shame-info { flex: 1; }
.shame-name { display: block; color: #ff4d4d; font-weight: 600; }
.shame-reason { font-size: 0.85em; color: #888; }
.shame-meta { text-align: right; }
.shame-severity {
.shame-name {
display: block;
font-size: 0.7em;
text-transform: uppercase;
background: rgba(255,77,77,0.2);
color: #ff4d4d;
padding: 2px 8px;
border-radius: 8px;
color: #ff6b6b;
font-weight: 700;
margin-bottom: 4px;
}
.shame-date { font-size: 0.75em; color: #666; }
.shame-reason {
color: #888;
font-size: 0.9em;
}
.shame-meta {
text-align: right;
}
.shame-severity {
display: block;
background: rgba(255, 77, 77, 0.2);
color: #ff4d4d;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.75em;
font-weight: 700;
text-transform: uppercase;
margin-bottom: 4px;
}
.shame-date {
color: #666;
font-size: 0.8em;
}
/* CTA */
.fame-cta {
max-width: 600px;
margin: 0 auto 80px;
padding: 60px;
background: linear-gradient(135deg, rgba(255,199,0,0.08) 0%, rgba(255,107,53,0.08) 100%);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 24px;
text-align: center;
padding: 80px 20px;
background: linear-gradient(180deg, transparent 0%, rgba(255, 199, 0, 0.03) 100%);
border-top: 1px solid rgba(255,255,255,0.05);
}
.fame-cta h2 { font-size: 2em; color: #fff; margin: 0 0 12px; }
.fame-cta p { color: #888; margin: 0 0 24px; }
.cta-button {
display: inline-block;
background: linear-gradient(135deg, #ffc700 0%, #ff6b35 100%);
color: #000;
padding: 14px 28px;
.fame-cta h2 {
font-size: 2.5em;
color: #fff;
margin: 0 0 16px;
}
.fame-cta p {
color: #888;
font-size: 1.1em;
margin: 0 0 32px;
}
.cta-buttons {
display: flex;
gap: 16px;
justify-content: center;
}
.cta-btn {
padding: 16px 32px;
border-radius: 10px;
font-weight: 700;
text-decoration: none;
font-weight: 600;
font-size: 0.9em;
letter-spacing: 1px;
transition: all 0.3s ease;
}
.cta-btn.primary {
background: var(--fame-gold);
color: #000;
}
.cta-btn.primary:hover {
transform: translateY(-2px);
box-shadow: 0 10px 40px rgba(255, 199, 0, 0.3);
}
.cta-btn.secondary {
background: transparent;
color: var(--fame-gold);
border: 2px solid rgba(255, 199, 0, 0.3);
}
.cta-btn.secondary:hover {
border-color: var(--fame-gold);
}
/* Responsive */
@media (max-width: 900px) {
.legends-grid { grid-template-columns: 1fr; }
.hero-title { font-size: 2.5em; }
.legends-grid { grid-template-columns: 1fr; max-width: 400px; margin: 0 auto; }
.leaderboard-header { display: none; }
.leaderboard-row {
grid-template-columns: 60px 1fr auto;
gap: 12px;
}
.lb-contributions, .lb-points { display: none; }
.badges-grid { grid-template-columns: repeat(2, 1fr); }
.stats-bar { flex-wrap: wrap; gap: 30px; }
.stats-bar { flex-wrap: wrap; gap: 40px; }
}
@media (max-width: 600px) {
.hero-title { font-size: 2.5em; }
.badges-grid { grid-template-columns: 1fr; }
.leaderboard-row { flex-wrap: wrap; }
.shame-card { flex-direction: column; text-align: center; }
.shame-meta { text-align: center; }
}
</style>
</MainLayout>

View file

@ -17,27 +17,34 @@ const activityFeed = [
];
const liveStats = [
{ label: 'Active Users', value: '2,847', change: '+12%', icon: '👥' },
{ label: 'API Requests/min', value: '45.2K', change: '+8%', icon: '⚡' },
{ label: 'Active Sessions', value: '1,234', change: '+5%', icon: '🔗' },
{ label: 'Uptime', value: '99.99%', change: '', icon: '✅' },
{ label: 'Active Users', value: '2,847', change: '+12%', trend: 'up', icon: '👥' },
{ label: 'API Requests/min', value: '45.2K', change: '+8%', trend: 'up', icon: '⚡' },
{ label: 'Active Sessions', value: '1,234', change: '+5%', trend: 'up', icon: '🔗' },
{ label: 'Uptime', value: '99.99%', change: '', trend: 'stable', icon: '✅' },
];
const channels = [
{ name: 'All Activity', count: 156, active: true },
{ name: 'Releases', count: 12 },
{ name: 'Deployments', count: 24 },
{ name: 'Community', count: 89 },
{ name: 'Development', count: 31 },
{ name: 'All Activity', count: 156, icon: '📡' },
{ name: 'Releases', count: 12, icon: '🚀' },
{ name: 'Deployments', count: 24, icon: '⚡' },
{ name: 'Community', count: 89, icon: '👥' },
{ name: 'Development', count: 31, icon: '💻' },
];
const upcomingEvents = [
{ title: 'Weekly Community Call', time: 'Today, 5:00 PM UTC', type: 'call' },
{ title: 'SDK v3.0 Release', time: 'Feb 10, 2026', type: 'release' },
{ title: 'Developer Workshop', time: 'Feb 15, 2026', type: 'workshop' },
];
---
<MainLayout>
<MainLayout title="Live Activity - AeThex">
<!-- Hero -->
<section class="live-hero">
<div class="hero-bg"></div>
<div class="hero-pulse"></div>
<div class="hero-content">
<div class="live-indicator">
<span class="pulse"></span>
<span class="pulse-dot"></span>
<span class="live-text">LIVE</span>
</div>
<h1 class="hero-title">Activity <span class="gradient-text">Feed</span></h1>
@ -46,17 +53,21 @@ const channels = [
</section>
<!-- Live Stats -->
<section class="stats-bar">
{liveStats.map(stat => (
<div class="stat-card">
<span class="stat-icon">{stat.icon}</span>
<div class="stat-info">
<span class="stat-value">{stat.value}</span>
{stat.change && <span class="stat-change">{stat.change}</span>}
<section class="stats-section">
<div class="stats-grid">
{liveStats.map(stat => (
<div class="stat-card">
<span class="stat-icon">{stat.icon}</span>
<div class="stat-content">
<div class="stat-row">
<span class="stat-value">{stat.value}</span>
{stat.change && <span class={`stat-change ${stat.trend}`}>{stat.change}</span>}
</div>
<span class="stat-label">{stat.label}</span>
</div>
</div>
<span class="stat-label">{stat.label}</span>
</div>
))}
))}
</div>
</section>
<!-- Main Content -->
@ -64,37 +75,68 @@ const channels = [
<div class="feed-container">
<!-- Sidebar -->
<aside class="feed-sidebar">
<h3>Channels</h3>
<div class="channel-list">
{channels.map(channel => (
<button class={`channel-btn ${channel.active ? 'active' : ''}`}>
<span class="channel-name">{channel.name}</span>
<span class="channel-count">{channel.count}</span>
</button>
))}
<div class="sidebar-block">
<h3 class="sidebar-title">&gt; Channels</h3>
<div class="channel-list">
{channels.map((channel, i) => (
<button class={`channel-btn ${i === 0 ? 'active' : ''}`}>
<span class="channel-icon">{channel.icon}</span>
<span class="channel-name">{channel.name}</span>
<span class="channel-count">{channel.count}</span>
</button>
))}
</div>
</div>
<h3>Filters</h3>
<div class="filter-group">
<label class="filter-item">
<input type="checkbox" checked /> Releases
</label>
<label class="filter-item">
<input type="checkbox" checked /> Deployments
</label>
<label class="filter-item">
<input type="checkbox" checked /> Community
</label>
<label class="filter-item">
<input type="checkbox" checked /> Development
</label>
<div class="sidebar-block">
<h3 class="sidebar-title">&gt; Filters</h3>
<div class="filter-group">
<label class="filter-item">
<input type="checkbox" checked />
<span class="filter-checkbox"></span>
<span>Releases</span>
</label>
<label class="filter-item">
<input type="checkbox" checked />
<span class="filter-checkbox"></span>
<span>Deployments</span>
</label>
<label class="filter-item">
<input type="checkbox" checked />
<span class="filter-checkbox"></span>
<span>Community</span>
</label>
<label class="filter-item">
<input type="checkbox" checked />
<span class="filter-checkbox"></span>
<span>Development</span>
</label>
</div>
</div>
<div class="sidebar-block">
<h3 class="sidebar-title">&gt; Upcoming</h3>
<div class="upcoming-list">
{upcomingEvents.map(event => (
<div class="upcoming-item">
<span class="upcoming-title">{event.title}</span>
<span class="upcoming-time">{event.time}</span>
</div>
))}
</div>
</div>
</aside>
<!-- Feed -->
<main class="feed-main">
<div class="feed-header">
<h2>Latest Activity</h2>
<div class="feed-header-left">
<h2>Latest Activity</h2>
<span class="feed-live-badge">
<span class="mini-pulse"></span>
Live
</span>
</div>
<div class="feed-controls">
<button class="control-btn active">All</button>
<button class="control-btn">Highlights</button>
@ -102,9 +144,10 @@ const channels = [
</div>
</div>
<div class="activity-list">
<div class="activity-timeline">
{activityFeed.map(item => (
<div class={`activity-item ${item.type}`}>
<div class={`activity-item type-${item.type}`}>
<div class="activity-line"></div>
<span class="activity-icon">{item.icon}</span>
<div class="activity-content">
<p class="activity-text">
@ -112,91 +155,143 @@ const channels = [
<span class="activity-action">{item.action}</span>
<span class="activity-target">{item.target}</span>
</p>
<span class="activity-time">{item.time}</span>
<div class="activity-meta">
<span class="activity-time">{item.time}</span>
<span class={`activity-type-badge ${item.type}`}>{item.type}</span>
</div>
</div>
<span class={`activity-type ${item.type}`}>{item.type}</span>
</div>
))}
</div>
<button class="load-more">Load More Activity</button>
<button class="load-more-btn">
<span class="load-icon">↻</span>
Load More Activity
</button>
</main>
</div>
</section>
<!-- Subscribe -->
<!-- Subscribe Section -->
<section class="subscribe-section">
<h2>Stay Updated</h2>
<p>Get notifications for the activity that matters to you.</p>
<div class="subscribe-options">
<label class="subscribe-option">
<input type="checkbox" /> Email digest (daily)
</label>
<label class="subscribe-option">
<input type="checkbox" /> Discord notifications
</label>
<label class="subscribe-option">
<input type="checkbox" /> RSS feed
</label>
<div class="subscribe-content">
<div class="subscribe-info">
<h2>Stay Updated</h2>
<p>Get notifications for the activity that matters to you. Never miss an important update.</p>
</div>
<div class="subscribe-options">
<label class="subscribe-option">
<input type="checkbox" />
<span class="option-checkbox"></span>
<div class="option-content">
<span class="option-title">📧 Email Digest</span>
<span class="option-desc">Daily summary of activity</span>
</div>
</label>
<label class="subscribe-option">
<input type="checkbox" />
<span class="option-checkbox"></span>
<div class="option-content">
<span class="option-title">💬 Discord</span>
<span class="option-desc">Real-time notifications</span>
</div>
</label>
<label class="subscribe-option">
<input type="checkbox" />
<span class="option-checkbox"></span>
<div class="option-content">
<span class="option-title">📡 RSS Feed</span>
<span class="option-desc">Subscribe in your reader</span>
</div>
</label>
</div>
<a href="/contribute" class="subscribe-btn">Configure Notifications →</a>
</div>
</section>
<!-- CTA -->
<section class="live-cta">
<h2>Join the Action</h2>
<p>Contribute to AeThex and see your activity appear here in real-time.</p>
<div class="cta-buttons">
<a href="/contribute" class="cta-btn primary">Start Contributing</a>
<a href="/community" class="cta-btn secondary">Join Community</a>
</div>
<a href="/contribute" class="subscribe-btn">Configure Notifications →</a>
</section>
<style>
:root {
--live-red: #ff4d4d;
--live-orange: #ff6b35;
--live-cyan: #6cf;
}
/* Hero */
.live-hero {
position: relative;
text-align: center;
min-height: 50vh;
display: flex;
align-items: center;
justify-content: center;
padding: 120px 20px 80px;
overflow: hidden;
text-align: center;
}
.hero-bg {
position: absolute;
inset: 0;
background: linear-gradient(180deg, #0a0d14 0%, #10131a 100%);
z-index: -1;
background: linear-gradient(180deg, #0a0d14 0%, #150d0d 50%, #0a0d14 100%);
}
.hero-bg::before {
content: '';
.hero-pulse {
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 50% 30%, rgba(255,77,77,0.1) 0%, transparent 60%);
background-image: radial-gradient(circle at 50% 50%, rgba(255, 77, 77, 0.15) 0%, transparent 50%);
animation: heroPulse 3s ease-in-out infinite;
}
@keyframes heroPulse {
0%, 100% { opacity: 0.5; transform: scale(1); }
50% { opacity: 1; transform: scale(1.05); }
}
.hero-content {
position: relative;
z-index: 1;
max-width: 700px;
}
.live-indicator {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(255,77,77,0.15);
border: 1px solid rgba(255,77,77,0.3);
padding: 6px 16px;
border-radius: 20px;
margin-bottom: 20px;
gap: 10px;
background: rgba(255, 77, 77, 0.1);
border: 1px solid rgba(255, 77, 77, 0.3);
padding: 10px 24px;
border-radius: 24px;
margin-bottom: 24px;
}
.pulse {
width: 8px;
height: 8px;
background: #ff4d4d;
.pulse-dot {
width: 10px;
height: 10px;
background: var(--live-red);
border-radius: 50%;
animation: pulse 1.5s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.5; transform: scale(1.2); }
0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(255, 77, 77, 0.5); }
50% { opacity: 0.8; box-shadow: 0 0 0 10px rgba(255, 77, 77, 0); }
}
.live-text {
font-size: 0.85em;
font-weight: 700;
color: #ff4d4d;
letter-spacing: 0.1em;
font-weight: 800;
color: var(--live-red);
letter-spacing: 2px;
}
.hero-title {
font-size: 3.5em;
font-size: 4em;
font-weight: 900;
color: #fff;
margin: 0 0 20px;
margin: 0 0 16px;
}
.gradient-text {
background: linear-gradient(135deg, #ff4d4d 0%, #ff6b35 100%);
background: linear-gradient(135deg, var(--live-red) 0%, var(--live-orange) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
@ -204,245 +299,483 @@ const channels = [
.hero-desc {
font-size: 1.2em;
color: #888;
max-width: 600px;
margin: 0 auto;
}
/* Stats */
.stats-bar {
/* Stats Section */
.stats-section {
max-width: 1000px;
margin: -40px auto 60px;
padding: 0 20px;
position: relative;
z-index: 1;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
max-width: 900px;
margin: -40px auto 60px;
padding: 0 20px;
}
.stat-card {
display: flex;
gap: 16px;
align-items: center;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 20px;
display: flex;
flex-direction: column;
gap: 8px;
border-radius: 16px;
padding: 20px 24px;
transition: all 0.3s ease;
}
.stat-card:hover {
border-color: var(--live-red);
background: rgba(255, 77, 77, 0.03);
}
.stat-icon { font-size: 1.8em; }
.stat-content { flex: 1; }
.stat-row { display: flex; align-items: baseline; gap: 8px; }
.stat-value {
font-size: 1.5em;
font-weight: 800;
color: #fff;
font-family: 'Roboto Mono', monospace;
}
.stat-change {
font-size: 0.85em;
font-weight: 600;
}
.stat-change.up { color: #00cc88; }
.stat-change.stable { color: #888; }
.stat-label {
display: block;
font-size: 0.8em;
color: #666;
margin-top: 4px;
}
.stat-icon { font-size: 1.2em; }
.stat-info { display: flex; align-items: baseline; gap: 8px; }
.stat-value { font-size: 1.5em; font-weight: 700; color: #fff; }
.stat-change { font-size: 0.85em; color: #00cc88; }
.stat-label { font-size: 0.8em; color: #666; }
/* Feed Section */
.feed-section {
max-width: 1100px;
max-width: 1200px;
margin: 0 auto 60px;
padding: 0 20px;
}
.feed-container {
display: grid;
grid-template-columns: 250px 1fr;
gap: 30px;
grid-template-columns: 280px 1fr;
gap: 40px;
}
/* Sidebar */
.feed-sidebar {
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 16px;
padding: 24px;
height: fit-content;
position: sticky;
top: 100px;
height: fit-content;
}
.feed-sidebar h3 {
.sidebar-block {
margin-bottom: 32px;
}
.sidebar-title {
font-family: 'Roboto Mono', monospace;
font-size: 0.85em;
color: #888;
text-transform: uppercase;
letter-spacing: 0.05em;
margin: 0 0 12px;
color: var(--live-red);
letter-spacing: 1px;
margin: 0 0 16px;
}
.channel-list {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 24px;
gap: 6px;
}
.channel-btn {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
background: rgba(255,255,255,0.02);
border: 1px solid transparent;
border-radius: 8px;
padding: 10px 12px;
border: 1px solid rgba(255,255,255,0.08);
padding: 12px 16px;
border-radius: 10px;
color: #888;
cursor: pointer;
transition: all 0.2s;
transition: all 0.3s ease;
text-align: left;
}
.channel-btn:hover { background: rgba(255,255,255,0.05); color: #fff; }
.channel-btn.active {
background: rgba(255,77,77,0.1);
border-color: rgba(255,77,77,0.3);
color: #ff4d4d;
.channel-btn:hover, .channel-btn.active {
border-color: var(--live-red);
color: #fff;
background: rgba(255, 77, 77, 0.05);
}
.channel-name { font-size: 0.9em; }
.channel-icon { font-size: 1em; }
.channel-name { flex: 1; font-size: 0.9em; }
.channel-count {
font-size: 0.75em;
background: rgba(255,255,255,0.1);
padding: 2px 8px;
border-radius: 10px;
padding: 2px 10px;
border-radius: 12px;
font-size: 0.8em;
font-family: 'Roboto Mono', monospace;
}
.filter-group {
display: flex;
flex-direction: column;
gap: 10px;
gap: 8px;
}
.filter-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 0.85em;
gap: 10px;
color: #888;
font-size: 0.9em;
cursor: pointer;
transition: color 0.3s ease;
}
.filter-item input { accent-color: #ff4d4d; }
/* Main Feed */
.feed-main {
.filter-item:hover { color: #fff; }
.filter-item input { display: none; }
.filter-checkbox {
width: 18px;
height: 18px;
border: 2px solid rgba(255,255,255,0.2);
border-radius: 4px;
position: relative;
transition: all 0.3s ease;
}
.filter-item input:checked + .filter-checkbox {
background: var(--live-red);
border-color: var(--live-red);
}
.filter-item input:checked + .filter-checkbox::after {
content: '✓';
position: absolute;
color: #fff;
font-size: 0.7em;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.upcoming-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.upcoming-item {
padding: 12px;
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 16px;
padding: 24px;
border-radius: 10px;
}
.upcoming-title {
display: block;
color: #fff;
font-size: 0.9em;
margin-bottom: 4px;
}
.upcoming-time {
font-size: 0.8em;
color: #666;
}
/* Feed Main */
.feed-main { }
.feed-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
flex-wrap: wrap;
gap: 16px;
}
.feed-header h2 { font-size: 1.3em; color: #fff; margin: 0; }
.feed-controls { display: flex; gap: 8px; }
.control-btn {
background: rgba(255,255,255,0.05);
border: 1px solid transparent;
padding: 8px 16px;
border-radius: 8px;
color: #888;
font-size: 0.85em;
cursor: pointer;
transition: all 0.2s;
}
.control-btn:hover { color: #fff; }
.control-btn.active {
background: rgba(255,77,77,0.1);
border-color: rgba(255,77,77,0.3);
color: #ff4d4d;
}
.activity-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.activity-item {
.feed-header-left {
display: flex;
align-items: center;
gap: 16px;
padding: 16px;
background: rgba(255,255,255,0.02);
border-radius: 10px;
border-left: 3px solid transparent;
transition: all 0.2s;
}
.activity-item:hover { background: rgba(255,255,255,0.04); }
.activity-item.release { border-left-color: #00cc88; }
.activity-item.merge { border-left-color: #a855f7; }
.activity-item.deploy { border-left-color: #6cf; }
.activity-item.user { border-left-color: #ffc700; }
.activity-item.discussion { border-left-color: #ff6b35; }
.activity-item.achievement { border-left-color: #ffc700; }
.activity-item.issue { border-left-color: #ff4d4d; }
.activity-item.event { border-left-color: #a855f7; }
.activity-icon { font-size: 1.3em; }
.activity-content { flex: 1; }
.activity-text { margin: 0 0 4px; font-size: 0.95em; }
.activity-user { color: #6cf; font-weight: 500; }
.activity-action { color: #888; margin: 0 4px; }
.activity-target { color: #fff; }
.activity-time { font-size: 0.75em; color: #666; }
.activity-type {
font-size: 0.65em;
padding: 4px 10px;
.feed-header h2 {
font-size: 1.5em;
color: #fff;
margin: 0;
}
.feed-live-badge {
display: flex;
align-items: center;
gap: 6px;
background: rgba(255, 77, 77, 0.1);
color: var(--live-red);
padding: 4px 12px;
border-radius: 12px;
text-transform: uppercase;
font-size: 0.75em;
font-weight: 600;
}
.mini-pulse {
width: 6px;
height: 6px;
background: var(--live-red);
border-radius: 50%;
animation: pulse 1.5s ease-in-out infinite;
}
.feed-controls {
display: flex;
gap: 8px;
}
.control-btn {
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.1);
color: #888;
padding: 8px 20px;
border-radius: 8px;
font-size: 0.85em;
cursor: pointer;
transition: all 0.3s ease;
}
.control-btn:hover, .control-btn.active {
border-color: var(--live-red);
color: #fff;
}
.activity-type.release { background: rgba(0,204,136,0.15); color: #00cc88; }
.activity-type.merge { background: rgba(168,85,247,0.15); color: #a855f7; }
.activity-type.deploy { background: rgba(102,204,255,0.15); color: #6cf; }
.activity-type.user { background: rgba(255,199,0,0.15); color: #ffc700; }
.activity-type.discussion { background: rgba(255,107,53,0.15); color: #ff6b35; }
.activity-type.achievement { background: rgba(255,199,0,0.15); color: #ffc700; }
.activity-type.issue { background: rgba(255,77,77,0.15); color: #ff4d4d; }
.activity-type.event { background: rgba(168,85,247,0.15); color: #a855f7; }
.load-more {
width: 100%;
margin-top: 20px;
/* Activity Timeline */
.activity-timeline {
position: relative;
}
.activity-item {
display: flex;
gap: 16px;
padding: 20px 0;
border-bottom: 1px solid rgba(255,255,255,0.05);
position: relative;
}
.activity-line {
position: absolute;
left: 20px;
top: 0;
bottom: 0;
width: 2px;
background: rgba(255,255,255,0.1);
}
.activity-item:first-child .activity-line { top: 50%; }
.activity-item:last-child .activity-line { bottom: 50%; }
.activity-icon {
width: 42px;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
padding: 14px;
border-radius: 12px;
font-size: 1.2em;
position: relative;
z-index: 1;
}
.activity-content { flex: 1; }
.activity-text {
color: #aaa;
margin: 0 0 8px;
line-height: 1.5;
}
.activity-user {
color: #fff;
font-weight: 600;
}
.activity-action { color: #888; }
.activity-target {
color: var(--live-cyan);
}
.activity-meta {
display: flex;
gap: 12px;
align-items: center;
}
.activity-time {
font-size: 0.8em;
color: #666;
}
.activity-type-badge {
font-size: 0.7em;
padding: 2px 10px;
border-radius: 10px;
text-transform: uppercase;
font-weight: 600;
letter-spacing: 0.5px;
}
.activity-type-badge.release { background: rgba(0, 255, 0, 0.1); color: #0f0; }
.activity-type-badge.merge { background: rgba(168, 85, 247, 0.1); color: #a855f7; }
.activity-type-badge.user { background: rgba(102, 204, 255, 0.1); color: #6cf; }
.activity-type-badge.deploy { background: rgba(255, 199, 0, 0.1); color: #ffc700; }
.activity-type-badge.discussion { background: rgba(255, 107, 53, 0.1); color: #ff6b35; }
.activity-type-badge.achievement { background: rgba(255, 199, 0, 0.1); color: #ffc700; }
.activity-type-badge.issue { background: rgba(255, 77, 77, 0.1); color: #ff4d4d; }
.activity-type-badge.event { background: rgba(0, 204, 136, 0.1); color: #00cc88; }
.load-more-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
width: 100%;
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.1);
color: #888;
padding: 16px;
border-radius: 12px;
margin-top: 24px;
font-size: 0.9em;
cursor: pointer;
transition: all 0.2s;
transition: all 0.3s ease;
}
.load-more-btn:hover {
border-color: var(--live-red);
color: #fff;
}
.load-icon {
font-size: 1.2em;
}
.load-more:hover { background: rgba(255,255,255,0.08); color: #fff; }
/* Subscribe */
/* Subscribe Section */
.subscribe-section {
max-width: 600px;
margin: 0 auto 80px;
padding: 40px;
max-width: 900px;
margin: 80px auto;
padding: 0 20px;
}
.subscribe-content {
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 20px;
padding: 40px;
text-align: center;
}
.subscribe-section h2 { font-size: 1.5em; color: #fff; margin: 0 0 8px; }
.subscribe-section p { color: #888; margin: 0 0 20px; }
.subscribe-info h2 {
font-size: 1.8em;
color: #fff;
margin: 0 0 12px;
}
.subscribe-info p {
color: #888;
margin: 0 0 32px;
}
.subscribe-options {
display: flex;
gap: 16px;
justify-content: center;
gap: 24px;
margin-bottom: 20px;
margin-bottom: 24px;
flex-wrap: wrap;
}
.subscribe-option {
display: flex;
align-items: center;
gap: 8px;
font-size: 0.9em;
color: #888;
align-items: flex-start;
gap: 12px;
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.1);
padding: 16px 20px;
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
text-align: left;
}
.subscribe-option:hover {
border-color: var(--live-red);
}
.subscribe-option input { display: none; }
.option-checkbox {
width: 20px;
height: 20px;
border: 2px solid rgba(255,255,255,0.2);
border-radius: 4px;
position: relative;
flex-shrink: 0;
margin-top: 2px;
}
.subscribe-option input:checked + .option-checkbox {
background: var(--live-red);
border-color: var(--live-red);
}
.subscribe-option input:checked + .option-checkbox::after {
content: '✓';
position: absolute;
color: #fff;
font-size: 0.75em;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.option-title {
display: block;
color: #fff;
font-weight: 600;
margin-bottom: 4px;
}
.option-desc {
font-size: 0.85em;
color: #666;
}
.subscribe-option input { accent-color: #ff4d4d; }
.subscribe-btn {
color: #ff4d4d;
display: inline-block;
color: var(--live-red);
text-decoration: none;
font-weight: 600;
transition: opacity 0.3s ease;
}
.subscribe-btn:hover { opacity: 0.8; }
/* CTA */
.live-cta {
text-align: center;
padding: 80px 20px;
background: linear-gradient(180deg, transparent 0%, rgba(255, 77, 77, 0.03) 100%);
border-top: 1px solid rgba(255,255,255,0.05);
}
.live-cta h2 {
font-size: 2.5em;
color: #fff;
margin: 0 0 16px;
}
.live-cta p {
color: #888;
font-size: 1.1em;
margin: 0 0 32px;
}
.cta-buttons {
display: flex;
gap: 16px;
justify-content: center;
}
.cta-btn {
padding: 16px 32px;
border-radius: 10px;
font-weight: 700;
text-decoration: none;
font-size: 0.9em;
letter-spacing: 1px;
transition: all 0.3s ease;
}
.cta-btn.primary {
background: var(--live-red);
color: #fff;
}
.cta-btn.primary:hover {
transform: translateY(-2px);
box-shadow: 0 10px 40px rgba(255, 77, 77, 0.3);
}
.cta-btn.secondary {
background: transparent;
color: var(--live-red);
border: 2px solid rgba(255, 77, 77, 0.3);
}
.cta-btn.secondary:hover {
border-color: var(--live-red);
}
.subscribe-btn:hover { text-decoration: underline; }
/* Responsive */
@media (max-width: 900px) {
.stats-bar { grid-template-columns: repeat(2, 1fr); }
.hero-title { font-size: 2.5em; }
.stats-grid { grid-template-columns: repeat(2, 1fr); }
.feed-container { grid-template-columns: 1fr; }
.feed-sidebar { position: static; }
.feed-sidebar {
position: static;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.sidebar-block { margin-bottom: 0; }
}
@media (max-width: 600px) {
.hero-title { font-size: 2.5em; }
.stats-bar { grid-template-columns: 1fr; }
.subscribe-options { flex-direction: column; align-items: center; }
.stats-grid { grid-template-columns: 1fr; }
.feed-sidebar { grid-template-columns: 1fr; }
.subscribe-options { flex-direction: column; }
.feed-controls { width: 100%; justify-content: center; }
}
</style>
</MainLayout>

View file

@ -1,176 +1,634 @@
---
import MainLayout from '../layouts/MainLayout.astro';
const categories = [
{ id: 'all', name: 'All Results', icon: '🔍', count: 156 },
{ id: 'docs', name: 'Documentation', icon: '📚', count: 42 },
{ id: 'products', name: 'Products', icon: '🚀', count: 28 },
{ id: 'community', name: 'Community', icon: '👥', count: 34 },
{ id: 'blog', name: 'Blog Posts', icon: '📝', count: 52 },
];
const popularSearches = [
'Getting Started',
'GameForge',
'Passport SSO',
'Asset API',
'Multiplayer',
'Authentication',
];
const featuredResults = [
{
title: 'Introduction to AeThex',
description: 'Learn the fundamentals of the AeThex ecosystem and how to get started building.',
category: 'Docs',
categoryColor: '#6cf',
url: '/docs/introduction'
},
{
title: 'GameForge Quick Start',
description: 'Build and deploy your first game in under 10 minutes with our terminal-inspired toolkit.',
category: 'Products',
categoryColor: '#0f0',
url: '/gameforge'
},
{
title: 'Identity API Reference',
description: 'Complete documentation for user authentication, sessions, and profile management.',
category: 'Docs',
categoryColor: '#6cf',
url: '/docs/identity-api'
},
{
title: 'Community Guidelines',
description: 'How we work together as a community. Code of conduct and contribution guidelines.',
category: 'Community',
categoryColor: '#ffc700',
url: '/community'
},
];
const stats = [
{ value: '1,200+', label: 'Docs Pages' },
{ value: '50+', label: 'Tutorials' },
{ value: '15', label: 'SDKs' },
{ value: '24/7', label: 'Support' },
];
---
<MainLayout>
<MainLayout title="Universal Search - AeThex">
<!-- Hero -->
<section class="search-hero">
<div class="search-hero-bg"></div>
<div class="search-hero-content">
<h1 class="search-hero-title">🔍 Universal Search</h1>
<p class="search-hero-desc">Search across all AeThex documentation, products, and resources</p>
<div class="hero-bg"></div>
<div class="hero-grid"></div>
<div class="hero-content">
<span class="hero-badge">🔍 Unified Search</span>
<h1 class="hero-title">Find <span class="gradient-text">Anything</span></h1>
<p class="hero-desc">Search across all documentation, products, community resources, and more in one place.</p>
<!-- Search Box -->
<div class="search-box">
<div class="search-input-wrapper">
<span class="search-icon">⌘</span>
<input type="text" id="search-input" placeholder="Search documentation, APIs, tutorials..." autocomplete="off" />
<kbd class="search-kbd">K</kbd>
</div>
</div>
<!-- Popular Searches -->
<div class="popular-searches">
<span class="popular-label">Popular:</span>
{popularSearches.map(term => (
<button class="popular-tag">{term}</button>
))}
</div>
</div>
</section>
<section class="search-main">
<div class="search-container">
<div class="search-box">
<input type="text" id="search-input" placeholder="Search for anything..." autocomplete="off" />
<button id="search-btn">Search</button>
<!-- Stats -->
<section class="stats-bar">
{stats.map(stat => (
<div class="stat-item">
<span class="stat-value">{stat.value}</span>
<span class="stat-label">{stat.label}</span>
</div>
))}
</section>
<div class="search-filters">
<button class="filter-btn active">All</button>
<button class="filter-btn">Docs</button>
<button class="filter-btn">Products</button>
<button class="filter-btn">Community</button>
<button class="filter-btn">Blog</button>
</div>
<!-- Main Content -->
<section class="search-content">
<div class="content-container">
<!-- Sidebar -->
<aside class="search-sidebar">
<h3 class="sidebar-title">&gt; Categories</h3>
<div class="category-list">
{categories.map((cat, i) => (
<button class={`category-btn ${i === 0 ? 'active' : ''}`}>
<span class="cat-icon">{cat.icon}</span>
<span class="cat-name">{cat.name}</span>
<span class="cat-count">{cat.count}</span>
</button>
))}
</div>
<div class="search-results">
<div class="result-item">
<h3>Getting Started with AeThex</h3>
<p>Learn how to set up your first project with AeThex infrastructure...</p>
<span class="result-type">Docs</span>
<h3 class="sidebar-title">&gt; Quick Links</h3>
<div class="quick-links">
<a href="/docs" class="quick-link">📚 Documentation</a>
<a href="/docs/quickstart" class="quick-link">⚡ Quickstart</a>
<a href="/products" class="quick-link">🚀 Products</a>
<a href="/community" class="quick-link">👥 Community</a>
</div>
<div class="result-item">
<h3>AeThex Passport Integration</h3>
<p>Integrate universal identity into your applications with our simple SDK...</p>
<span class="result-type">Docs</span>
</div>
<div class="result-item">
<h3>GameForge Quick Start</h3>
<p>Build your first game with GameForge in under 10 minutes...</p>
<span class="result-type">Products</span>
</div>
</div>
</aside>
<p class="search-tip">💡 Try searching for "passport", "gameforge", or "events"</p>
<!-- Results -->
<main class="results-main">
<div class="results-header">
<h2>Featured Results</h2>
<span class="results-count">Showing top results</span>
</div>
<div class="results-grid">
{featuredResults.map(result => (
<a href={result.url} class="result-card">
<div class="result-meta">
<span class="result-category" style={`--cat-color: ${result.categoryColor}`}>{result.category}</span>
</div>
<h3 class="result-title">{result.title}</h3>
<p class="result-desc">{result.description}</p>
<span class="result-link">View Details →</span>
</a>
))}
</div>
<div class="results-tip">
<span class="tip-icon">💡</span>
<p>Use keyboard shortcuts: <kbd>⌘</kbd> + <kbd>K</kbd> to search from anywhere, <kbd>↑</kbd> <kbd>↓</kbd> to navigate results</p>
</div>
</main>
</div>
</section>
<!-- Browse Sections -->
<section class="browse-section">
<div class="section-header">
<span class="section-eyebrow">&gt; BROWSE_BY_TOPIC</span>
<h2 class="section-title">Explore by Category</h2>
<p class="section-subtitle">Dive into specific areas of the AeThex ecosystem</p>
</div>
<div class="browse-grid">
<a href="/docs" class="browse-card">
<span class="browse-icon">📚</span>
<h3>Documentation</h3>
<p>API references, guides, and tutorials</p>
</a>
<a href="/products" class="browse-card">
<span class="browse-icon">🚀</span>
<h3>Products</h3>
<p>GameForge, Passport, and more</p>
</a>
<a href="/community" class="browse-card">
<span class="browse-icon">👥</span>
<h3>Community</h3>
<p>Forums, Discord, and events</p>
</a>
<a href="/blog" class="browse-card">
<span class="browse-icon">📝</span>
<h3>Blog</h3>
<p>News, updates, and tutorials</p>
</a>
</div>
</section>
<!-- CTA -->
<section class="search-cta">
<h2>Can't Find What You're Looking For?</h2>
<p>Our team is here to help. Reach out through our community channels or contact us directly.</p>
<div class="cta-buttons">
<a href="/community" class="cta-btn primary">Join Community</a>
<a href="/contact" class="cta-btn secondary">Contact Us</a>
</div>
</section>
<style>
:root {
--search-accent: #6cf;
--search-dark: #0a0d14;
}
/* Hero */
.search-hero {
position: relative;
text-align: center;
padding: 80px 20px 60px 20px;
min-height: 60vh;
display: flex;
align-items: center;
justify-content: center;
padding: 120px 20px 80px;
overflow: hidden;
}
.search-hero-bg {
.hero-bg {
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background: linear-gradient(135deg, #10131a 0%, #1a2040 50%, #10131a 100%);
inset: 0;
background: linear-gradient(180deg, #0a0d14 0%, #101520 50%, #0a0d14 100%);
}
.search-hero-content {
.hero-grid {
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(102, 204, 255, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(102, 204, 255, 0.03) 1px, transparent 1px);
background-size: 50px 50px;
mask-image: radial-gradient(ellipse at center, black 20%, transparent 70%);
}
.hero-content {
position: relative;
z-index: 1;
}
.search-hero-title {
font-size: 3em;
font-weight: 900;
color: #fff;
margin-bottom: 12px;
}
.search-hero-desc {
font-size: 1.2em;
color: #888;
}
.search-main {
display: flex;
justify-content: center;
padding: 60px 20px;
}
.search-container {
max-width: 700px;
text-align: center;
max-width: 800px;
width: 100%;
}
.search-box {
display: flex;
gap: 12px;
.hero-badge {
display: inline-block;
background: rgba(102, 204, 255, 0.1);
border: 1px solid rgba(102, 204, 255, 0.3);
color: var(--search-accent);
padding: 8px 20px;
border-radius: 24px;
font-size: 0.85em;
letter-spacing: 1px;
margin-bottom: 24px;
}
.search-box input {
flex: 1;
padding: 18px 24px;
background: #181c28;
border: 2px solid #1a1d24;
border-radius: 12px;
.hero-title {
font-size: 4em;
font-weight: 900;
color: #fff;
font-size: 1em;
margin: 0 0 16px;
}
.search-box input:focus {
outline: none;
border-color: #0066ff;
.gradient-text {
background: linear-gradient(135deg, #6cf 0%, #a855f7 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.search-box button {
padding: 18px 32px;
background: linear-gradient(135deg, #0066ff, #003380);
color: #fff;
border: none;
border-radius: 12px;
font-weight: 700;
cursor: pointer;
.hero-desc {
font-size: 1.2em;
color: #888;
margin-bottom: 40px;
}
/* Search Box */
.search-box {
max-width: 600px;
margin: 0 auto 24px;
}
.search-input-wrapper {
position: relative;
display: flex;
align-items: center;
background: rgba(255,255,255,0.05);
border: 2px solid rgba(255,255,255,0.1);
border-radius: 16px;
padding: 4px;
transition: all 0.3s ease;
}
.search-box button:hover {
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(0, 102, 255, 0.3);
.search-input-wrapper:focus-within {
border-color: var(--search-accent);
background: rgba(102, 204, 255, 0.05);
box-shadow: 0 0 40px rgba(102, 204, 255, 0.1);
}
.search-filters {
.search-icon {
padding: 0 16px;
color: #666;
font-size: 1.2em;
}
.search-input-wrapper input {
flex: 1;
background: transparent;
border: none;
color: #fff;
font-size: 1.1em;
padding: 16px 0;
outline: none;
}
.search-input-wrapper input::placeholder {
color: #555;
}
.search-kbd {
background: rgba(255,255,255,0.1);
color: #666;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.8em;
margin-right: 12px;
font-family: 'Roboto Mono', monospace;
}
/* Popular Searches */
.popular-searches {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 30px;
gap: 10px;
justify-content: center;
align-items: center;
}
.filter-btn {
padding: 10px 20px;
background: #181c28;
border: 1px solid #1a1d24;
.popular-label {
color: #666;
font-size: 0.9em;
}
.popular-tag {
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
color: #aaa;
padding: 8px 16px;
border-radius: 20px;
color: #888;
font-size: 0.85em;
cursor: pointer;
transition: all 0.3s ease;
}
.filter-btn:hover, .filter-btn.active {
border-color: #0066ff;
color: #0066ff;
.popular-tag:hover {
border-color: var(--search-accent);
color: var(--search-accent);
}
.search-results {
/* Stats */
.stats-bar {
display: flex;
justify-content: center;
gap: 60px;
padding: 40px 20px;
background: rgba(255,255,255,0.02);
border-top: 1px solid rgba(255,255,255,0.05);
border-bottom: 1px solid rgba(255,255,255,0.05);
}
.stat-item { text-align: center; }
.stat-value { display: block; font-size: 2em; font-weight: 800; color: var(--search-accent); font-family: 'Roboto Mono', monospace; }
.stat-label { font-size: 0.85em; color: #666; text-transform: uppercase; letter-spacing: 1px; }
/* Main Content */
.search-content {
max-width: 1200px;
margin: 60px auto;
padding: 0 20px;
}
.content-container {
display: grid;
grid-template-columns: 280px 1fr;
gap: 40px;
}
/* Sidebar */
.search-sidebar {
position: sticky;
top: 100px;
height: fit-content;
}
.sidebar-title {
font-family: 'Roboto Mono', monospace;
font-size: 0.85em;
color: var(--search-accent);
letter-spacing: 1px;
margin: 0 0 16px;
}
.category-list {
display: flex;
flex-direction: column;
gap: 16px;
gap: 8px;
margin-bottom: 32px;
}
.result-item {
background: #181c28;
border: 1px solid #1a1d24;
.category-btn {
display: flex;
align-items: center;
gap: 12px;
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
padding: 12px 16px;
border-radius: 10px;
color: #888;
cursor: pointer;
transition: all 0.3s ease;
text-align: left;
}
.category-btn:hover, .category-btn.active {
border-color: var(--search-accent);
color: #fff;
background: rgba(102, 204, 255, 0.05);
}
.cat-icon { font-size: 1.1em; }
.cat-name { flex: 1; font-size: 0.9em; }
.cat-count {
background: rgba(255,255,255,0.1);
padding: 2px 10px;
border-radius: 12px;
padding: 20px 24px;
font-size: 0.8em;
}
.quick-links {
display: flex;
flex-direction: column;
gap: 8px;
}
.quick-link {
color: #666;
text-decoration: none;
padding: 10px 0;
font-size: 0.9em;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: color 0.3s ease;
}
.quick-link:hover {
color: var(--search-accent);
}
/* Results */
.results-main { }
.results-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
}
.results-header h2 {
font-size: 1.5em;
color: #fff;
margin: 0;
}
.results-count {
color: #666;
font-size: 0.9em;
}
.results-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
margin-bottom: 32px;
}
.result-card {
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 16px;
padding: 24px;
text-decoration: none;
transition: all 0.3s ease;
display: flex;
flex-direction: column;
}
.result-card:hover {
border-color: var(--search-accent);
background: rgba(102, 204, 255, 0.03);
transform: translateY(-4px);
}
.result-meta { margin-bottom: 12px; }
.result-category {
display: inline-block;
background: rgba(102, 204, 255, 0.1);
color: var(--cat-color);
padding: 4px 12px;
border-radius: 12px;
font-size: 0.75em;
font-weight: 600;
letter-spacing: 0.5px;
}
.result-title {
color: #fff;
font-size: 1.15em;
margin: 0 0 8px;
}
.result-desc {
color: #888;
font-size: 0.9em;
line-height: 1.6;
margin: 0 0 16px;
flex: 1;
}
.result-link {
color: var(--search-accent);
font-size: 0.85em;
font-weight: 600;
}
.results-tip {
display: flex;
align-items: center;
gap: 12px;
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 16px 20px;
}
.tip-icon { font-size: 1.2em; }
.results-tip p {
color: #666;
margin: 0;
font-size: 0.9em;
}
.results-tip kbd {
background: rgba(255,255,255,0.1);
padding: 4px 8px;
border-radius: 6px;
font-size: 0.8em;
font-family: 'Roboto Mono', monospace;
}
/* Browse Section */
.browse-section {
max-width: 1000px;
margin: 80px auto;
padding: 0 20px;
}
.section-header {
text-align: center;
margin-bottom: 48px;
}
.section-eyebrow {
font-family: 'Roboto Mono', monospace;
font-size: 0.85em;
color: var(--search-accent);
letter-spacing: 2px;
margin-bottom: 12px;
display: block;
}
.section-title {
font-size: 2.5em;
font-weight: 800;
color: #fff;
margin: 0 0 12px;
}
.section-subtitle {
font-size: 1.1em;
color: #888;
}
.browse-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
}
.browse-card {
background: rgba(255,255,255,0.02);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 16px;
padding: 32px 24px;
text-decoration: none;
text-align: center;
transition: all 0.3s ease;
}
.result-item:hover {
border-color: #0066ff;
.browse-card:hover {
border-color: var(--search-accent);
background: rgba(102, 204, 255, 0.03);
transform: translateY(-4px);
}
.result-item h3 {
.browse-icon {
font-size: 2.5em;
display: block;
margin-bottom: 16px;
}
.browse-card h3 {
color: #fff;
margin-bottom: 8px;
font-size: 1.1em;
margin: 0 0 8px;
}
.result-item p {
color: #888;
font-size: 0.95em;
margin-bottom: 10px;
.browse-card p {
color: #666;
font-size: 0.85em;
margin: 0;
}
.result-type {
display: inline-block;
background: rgba(0, 102, 255, 0.15);
color: #0066ff;
padding: 4px 10px;
font-size: 0.75em;
border-radius: 12px;
}
.search-tip {
/* CTA */
.search-cta {
text-align: center;
color: #555;
margin-top: 30px;
padding: 80px 20px;
background: linear-gradient(180deg, transparent 0%, rgba(102, 204, 255, 0.03) 100%);
border-top: 1px solid rgba(255,255,255,0.05);
}
.search-cta h2 {
font-size: 2em;
color: #fff;
margin: 0 0 16px;
}
.search-cta p {
color: #888;
font-size: 1.1em;
margin: 0 0 32px;
}
.cta-buttons {
display: flex;
gap: 16px;
justify-content: center;
}
.cta-btn {
padding: 16px 32px;
border-radius: 10px;
font-weight: 700;
text-decoration: none;
font-size: 0.9em;
letter-spacing: 1px;
transition: all 0.3s ease;
}
.cta-btn.primary {
background: var(--search-accent);
color: #000;
}
.cta-btn.primary:hover {
transform: translateY(-2px);
box-shadow: 0 10px 40px rgba(102, 204, 255, 0.3);
}
.cta-btn.secondary {
background: transparent;
color: var(--search-accent);
border: 2px solid rgba(102, 204, 255, 0.3);
}
.cta-btn.secondary:hover {
border-color: var(--search-accent);
}
/* Responsive */
@media (max-width: 900px) {
.hero-title { font-size: 2.5em; }
.content-container { grid-template-columns: 1fr; }
.search-sidebar { position: static; }
.results-grid { grid-template-columns: 1fr; }
.browse-grid { grid-template-columns: repeat(2, 1fr); }
.stats-bar { flex-wrap: wrap; gap: 30px; }
}
@media (max-width: 600px) {
.browse-grid { grid-template-columns: 1fr; }
.popular-searches { justify-content: center; }
}
</style>
</MainLayout>