From a30b2f34ebc6643e3d1a4f214d001cd2c960d241 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Tue, 24 Feb 2026 03:25:22 -0800 Subject: [PATCH] feat: add landing page for Hermes Agent - Introduced a new landing page with HTML, CSS, and JavaScript files to showcase the Hermes Agent. - Added a banner image and logo to enhance visual appeal. - Implemented interactive features such as a copy-to-clipboard function for installation commands and scroll-triggered animations for improved user engagement. - Designed a responsive layout with sections detailing the agent's features, installation instructions, and community links. --- landingpage/hermes-agent-banner.png | Bin 0 -> 12333 bytes landingpage/index.html | 472 ++++++++++++++ landingpage/nous-logo.png | Bin 0 -> 20988 bytes landingpage/script.js | 284 +++++++++ landingpage/style.css | 950 ++++++++++++++++++++++++++++ 5 files changed, 1706 insertions(+) create mode 100644 landingpage/hermes-agent-banner.png create mode 100644 landingpage/index.html create mode 100644 landingpage/nous-logo.png create mode 100644 landingpage/script.js create mode 100644 landingpage/style.css diff --git a/landingpage/hermes-agent-banner.png b/landingpage/hermes-agent-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4a160ceb721402e21ae107cbea45bbd80702b5 GIT binary patch literal 12333 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�!X5p5sf&LloNSTYkUfT-^- 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 + + + + + Hermes Agent — An AI Agent You Can Actually Live With + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+ + Open Source · MIT License +
+ + + +

+ An AI agent you can
+ actually live with. +

+ +

+ Install it on a machine, give it your messaging accounts, and it becomes a + persistent personal agent that grows with you — learning your projects, + building its own skills, and reaching you wherever you are. +

+ +
+
+ curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash + +
+

Works on Linux & macOS · No Python prerequisite · Installs everything automatically

+
+ + +
+
+ + +
+
+

+ It's not a coding copilot tethered to an IDE or a chatbot wrapper around a single API. + It's an autonomous agent that lives on your server, remembers what it learns, + and gets more capable the longer it runs. +

+
+
+ + +
+
+
+ +

What it does

+
+ +
+
+
💬
+

Lives Where You Do

+

Telegram, Discord, Slack, WhatsApp, and CLI — all from a single gateway process. Voice memo transcription, cross-platform continuation. Start a conversation on Telegram, pick it up in your terminal.

+
+ +
+
🧠
+

Grows the Longer It Runs

+

Persistent memory across sessions — it learns your preferences, projects, and environment. When it solves a hard problem, it writes a skill document so it never forgets how. Skills are searchable and shareable.

+
+ +
+
+

Scheduled Automations

+

Built-in cron scheduler with delivery to any platform. Natural language scheduling for daily reports, nightly backups, weekly audits, morning briefings — all running unattended through the gateway.

+
+ +
+
🔀
+

Delegates & Parallelizes

+

Spawn isolated subagents for parallel workstreams. Each gets its own conversation and terminal. Write Python scripts that call tools via RPC, collapsing multi-step pipelines into zero-context-cost turns.

+
+ +
+
🔒
+

Real Sandboxing

+

Five terminal backends: local, Docker, SSH, Singularity, and Modal. Container security hardening with read-only root, dropped capabilities, PID limits, and namespace isolation.

+
+ +
+
🌐
+

Full Web & Browser Control

+

Web search, page extraction, full browser automation — navigate, click, type, screenshot. Plus vision analysis, image generation, text-to-speech, and multi-model collaborative reasoning.

+
+
+
+
+ + +
+
+
+ +

See it in action

+
+ +
+
+
+ + + +
+ hermes +
+
+
+ +
+
+
+
+ + +
+
+
+ +

40+ built-in tools

+
+ +
+
+ 🔍 Web Search +
+
+ 💻 Terminal +
+
+ 📁 File System +
+
+ 🌐 Browser +
+
+ 👁 Vision +
+
+ 🎨 Image Gen +
+
+ 🔊 Text-to-Speech +
+
+ 🧠 Memory +
+
+ 📋 Task Planning +
+
+ Cron Jobs +
+
+ 🐍 Code Execution +
+
+ 🔀 Subagents +
+
+ 📚 Skills +
+
+ 🤖 Multi-Model Reasoning +
+
+ 📨 Messaging +
+
+ 🔎 Session Search +
+
+
+
+ + +
+
+
+ +

Works with everything

+
+ +
+
+

Chat Platforms

+
+ Telegram + Discord + Slack + WhatsApp + CLI +
+
+
+

LLM Providers

+
+ Nous Portal + OpenRouter + Custom API +
+
+
+

Execution Environments

+
+ Local + Docker + SSH + Singularity + Modal +
+
+
+
+
+ + +
+
+
+ +

40+ built-in skills & growing

+
+ +

+ Skills are procedural memory — reusable approaches for recurring tasks. + The agent creates them when it solves hard problems, and loads them automatically when similar tasks come up. + Install more from community hubs with a single command. +

+ +
+
+

Built-in Skills

+

40+ skills bundled out of the box covering MLOps, GitHub workflows, diagramming, note-taking, and more. The agent also creates new skills on the fly as it works.

+
+
+

Skills Hub Integrations

+
+ agentskills.io + GitHub Repos + ClawHub + LobeHub + Claude Code Marketplace +
+

Browse, install, and manage skills from multiple community hubs. Quarantine and audit systems keep your agent safe.

+
+
+

Open Standard

+

Skills follow the agentskills.io open format — portable SKILL.md files that any agent can use. Create your own and share them.

+
+
+
+
+ + +
+
+
+ +

Get started in 60 seconds

+
+ +
+
+
1
+
+

Install

+
+
+ bash + +
+
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
+
+

Installs uv, Python 3.11, clones the repo, sets up everything. No sudo needed.

+
+
+ +
+
2
+
+

Configure

+
+
+ bash + +
+
# Interactive setup wizard
+hermes setup
+
+# Or choose your model
+hermes model
+
+

Connect to Nous Portal (OAuth), OpenRouter (API key), or your own endpoint.

+
+
+ +
+
3
+
+

Start chatting

+
+
+ bash + +
+
hermes
+
+

That's it. Full interactive CLI with tools, memory, and skills.

+
+
+ +
+
4
+
+

Go multi-platform (optional)

+
+
+ bash + +
+
# Start the messaging gateway
+hermes gateway
+
+# Install as a system service
+hermes gateway install
+
+

Connect Telegram, Discord, Slack, or WhatsApp. Runs as a systemd service.

+
+
+
+ +
+

Windows? Use WSL or PowerShell:

+
+
+ powershell + +
+
irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1 | iex
+
+
+
+
+ + +
+
+
+ +

Research-ready

+
+ +
+
+

Batch Processing

+

Generate thousands of tool-calling trajectories in parallel with automatic checkpointing. Configurable workers, batch sizes, and toolset distributions.

+
+
+

RL Training

+

Atropos integration for reinforcement learning on agent behaviors. 11 tool-call parsers for training any model architecture.

+
+
+

Trajectory Export

+

Export conversations in ShareGPT format for fine-tuning. Trajectory compression fits training data into token budgets.

+
+
+
+
+ + + + + + + diff --git a/landingpage/nous-logo.png b/landingpage/nous-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cfea9a661337855b90209ab3160d8e07a16e183b GIT binary patch literal 20988 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 literal 0 HcmV?d00001 diff --git a/landingpage/script.js b/landingpage/script.js new file mode 100644 index 000000000..6f1c6c105 --- /dev/null +++ b/landingpage/script.js @@ -0,0 +1,284 @@ +// ========================================================================= +// Hermes Agent Landing Page — Interactions +// ========================================================================= + +// --- Copy to clipboard --- +function copyInstall() { + const text = document.getElementById('install-command').textContent; + navigator.clipboard.writeText(text).then(() => { + const btn = document.querySelector('.hero-install .copy-btn'); + const original = btn.querySelector('.copy-text').textContent; + btn.querySelector('.copy-text').textContent = 'Copied!'; + btn.style.color = 'var(--gold)'; + setTimeout(() => { + btn.querySelector('.copy-text').textContent = original; + btn.style.color = ''; + }, 2000); + }); +} + +function copyText(btn) { + const text = btn.getAttribute('data-text'); + navigator.clipboard.writeText(text).then(() => { + const original = btn.textContent; + btn.textContent = 'Copied!'; + btn.style.color = 'var(--gold)'; + setTimeout(() => { + btn.textContent = original; + btn.style.color = ''; + }, 2000); + }); +} + +// --- Scroll-triggered fade-in --- +function initScrollAnimations() { + const elements = document.querySelectorAll( + '.feature-card, .tool-pill, .platform-group, .skill-category, ' + + '.install-step, .research-card, .footer-card, .section-header, ' + + '.lead-text, .section-desc, .terminal-window' + ); + + elements.forEach(el => el.classList.add('fade-in')); + + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + // Stagger children within grids + const parent = entry.target.parentElement; + if (parent) { + const siblings = parent.querySelectorAll('.fade-in'); + let idx = Array.from(siblings).indexOf(entry.target); + if (idx < 0) idx = 0; + setTimeout(() => { + entry.target.classList.add('visible'); + }, idx * 60); + } else { + entry.target.classList.add('visible'); + } + observer.unobserve(entry.target); + } + }); + }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }); + + elements.forEach(el => observer.observe(el)); +} + +// --- Terminal Demo --- +const demoSequence = [ + // Scene 1: Research task with delegation + { type: 'prompt', text: '❯ ' }, + { type: 'type', text: 'Research the latest approaches to GRPO training and write a summary', delay: 30 }, + { type: 'pause', ms: 600 }, + { type: 'output', lines: [ + '', + '┊ 🔍 web_search "GRPO reinforcement learning 2026" 1.2s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ 📄 web_extract arxiv.org/abs/2402.03300 3.1s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ 🔍 web_search "GRPO vs PPO ablation results" 0.9s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ 📄 web_extract huggingface.co/blog/grpo 2.8s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ ✍️ write_file ~/research/grpo-summary.md 0.1s', + ]}, + { type: 'pause', ms: 500 }, + { type: 'output', lines: [ + '', + 'Done! I\'ve written a summary covering:', + '', + ' GRPO\'s group-relative advantage (no critic model needed)', + ' Comparison with PPO/DPO on reasoning benchmarks', + ' Implementation notes for Axolotl and TRL', + '', + 'Saved to ~/research/grpo-summary.md', + ]}, + { type: 'pause', ms: 2500 }, + + // Scene 2: Quick delegation + { type: 'clear' }, + { type: 'prompt', text: '❯ ' }, + { type: 'type', text: 'Review the PR at NousResearch/hermes-agent#42 and fix any issues', delay: 30 }, + { type: 'pause', ms: 600 }, + { type: 'output', lines: [ + '', + '┊ 🔀 delegate_task "review PR #42 changes" 2.1s', + ]}, + { type: 'pause', ms: 500 }, + { type: 'output', lines: [ + '┊ 💻 git diff main..pr-42 0.4s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ ✏️ patch tools/registry.py 0.1s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ 💻 python -m pytest tests/ -x 3.2s', + ]}, + { type: 'pause', ms: 400 }, + { type: 'output', lines: [ + '┊ 💻 git commit -m "fix: handle empty tool schemas" 0.3s', + ]}, + { type: 'pause', ms: 500 }, + { type: 'output', lines: [ + '', + 'Found 2 issues in the PR and fixed both:', + '', + ' Empty tool schema crash in registry.py — added guard', + ' Missing error handling in delegate_tool.py — added try/except', + '', + 'Tests pass. Committed the fix and pushed to the PR branch.', + 'I also saved a skill for this PR review pattern.', + ]}, + { type: 'pause', ms: 2500 }, + + // Scene 3: Session search by keyword + { type: 'clear' }, + { type: 'prompt', text: '❯ ' }, + { type: 'type', text: 'How did we fix that Docker networking issue?', delay: 35 }, + { type: 'pause', ms: 500 }, + { type: 'output', lines: [ + '', + '┊ 🔎 session_search "Docker networking" 1.4s', + ]}, + { type: 'pause', ms: 500 }, + { type: 'output', lines: [ + '', + 'Found it — from a session on February 12th:', + '', + 'The containers couldn\'t reach each other because the compose', + 'file was using the default bridge network. We switched to a', + 'custom network with driver: overlay, added explicit', + 'aliases, and set dns: 8.8.8.8 as a fallback.', + '', + 'The fix was committed in docker-compose.prod.yml.', + ]}, + { type: 'pause', ms: 3000 }, +]; + +class TerminalDemo { + constructor(element, cursorElement) { + this.el = element; + this.cursor = cursorElement; + this.running = false; + this.content = ''; + this.observer = null; + } + + async start() { + if (this.running) return; + this.running = true; + + while (this.running) { + for (const step of demoSequence) { + if (!this.running) return; + await this.execute(step); + } + // Loop + this.clear(); + await this.sleep(1000); + } + } + + stop() { + this.running = false; + } + + async execute(step) { + switch (step.type) { + case 'prompt': + this.append(`${step.text}`); + break; + + case 'type': + for (const char of step.text) { + if (!this.running) return; + this.append(`${char}`); + await this.sleep(step.delay || 30); + } + break; + + case 'output': + for (const line of step.lines) { + if (!this.running) return; + this.append('\n' + line); + await this.sleep(50); + } + break; + + case 'pause': + await this.sleep(step.ms); + break; + + case 'clear': + this.clear(); + break; + } + } + + append(html) { + this.content += html; + this.el.innerHTML = this.content; + // Keep cursor at end + this.el.parentElement.scrollTop = this.el.parentElement.scrollHeight; + } + + clear() { + this.content = ''; + this.el.innerHTML = ''; + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } +} + +// --- Initialize --- +document.addEventListener('DOMContentLoaded', () => { + initScrollAnimations(); + + // Terminal demo - start when visible + const terminalEl = document.getElementById('terminal-content'); + const cursorEl = document.getElementById('terminal-cursor'); + + if (terminalEl && cursorEl) { + const demo = new TerminalDemo(terminalEl, cursorEl); + + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + demo.start(); + } else { + demo.stop(); + } + }); + }, { threshold: 0.3 }); + + observer.observe(document.querySelector('.terminal-window')); + } + + // Smooth nav background on scroll + const nav = document.querySelector('.nav'); + let ticking = false; + window.addEventListener('scroll', () => { + if (!ticking) { + requestAnimationFrame(() => { + if (window.scrollY > 50) { + nav.style.borderBottomColor = 'rgba(255, 215, 0, 0.1)'; + } else { + nav.style.borderBottomColor = ''; + } + ticking = false; + }); + ticking = true; + } + }); +}); diff --git a/landingpage/style.css b/landingpage/style.css new file mode 100644 index 000000000..dd4e645c0 --- /dev/null +++ b/landingpage/style.css @@ -0,0 +1,950 @@ +/* ========================================================================= + Hermes Agent Landing Page + Colors: Gold (#FFD700) / Amber (#FFBF00) / Bronze (#CD7F32) + ========================================================================= */ + +/* --- Reset & Base --- */ +*, *::before, *::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --gold: #FFD700; + --amber: #FFBF00; + --bronze: #CD7F32; + --dark-gold: #B8860B; + --bg: #07070d; + --bg-card: #0f0f18; + --bg-card-hover: #14142a; + --border: rgba(255, 215, 0, 0.08); + --border-hover: rgba(255, 215, 0, 0.18); + --text: #e8e4dc; + --text-dim: #9a968e; + --text-muted: #6a665e; + --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace; + --container: 1080px; + --radius: 12px; + --radius-sm: 8px; +} + +html { + scroll-behavior: smooth; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font-family: var(--font-sans); + background: var(--bg); + color: var(--text); + line-height: 1.6; + overflow-x: hidden; + background-image: radial-gradient(rgba(255, 215, 0, 0.03) 1px, transparent 1px); + background-size: 32px 32px; +} + +a { + color: var(--gold); + text-decoration: none; + transition: color 0.2s; +} +a:hover { + color: var(--amber); +} + +strong { + color: #fff; + font-weight: 600; +} + +/* --- Ambient Glow --- */ +.ambient-glow { + position: fixed; + pointer-events: none; + z-index: 0; + border-radius: 50%; + filter: blur(120px); + opacity: 0.15; +} +.glow-1 { + width: 600px; + height: 600px; + background: var(--gold); + top: -200px; + left: -200px; + opacity: 0.08; +} +.glow-2 { + width: 500px; + height: 500px; + background: var(--bronze); + bottom: 20%; + right: -150px; + opacity: 0.06; +} + +/* --- Container --- */ +.container { + max-width: var(--container); + margin: 0 auto; + padding: 0 24px; +} + +/* --- Navigation --- */ +.nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; + background: rgba(7, 7, 13, 0.8); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-bottom: 1px solid var(--border); +} + +.nav-inner { + max-width: var(--container); + margin: 0 auto; + padding: 0 24px; + height: 60px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.nav-logo { + display: flex; + align-items: center; + gap: 10px; + color: var(--text); + font-weight: 600; + font-size: 15px; +} +.nav-logo:hover { color: var(--gold); } + +.nav-symbol { + font-size: 22px; + color: var(--gold); +} + +.nav-links { + display: flex; + align-items: center; + gap: 28px; +} + +.nav-links a { + color: var(--text-dim); + font-size: 14px; + font-weight: 500; + display: flex; + align-items: center; + gap: 4px; + transition: color 0.2s; +} +.nav-links a:hover { color: #fff; } + +.external-icon { opacity: 0.4; } + +/* --- Hero --- */ +.hero { + position: relative; + z-index: 1; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 120px 24px 80px; + text-align: center; +} + +.hero-content { + max-width: 760px; +} + +.hero-badge { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 16px; + background: rgba(255, 215, 0, 0.06); + border: 1px solid rgba(255, 215, 0, 0.15); + border-radius: 100px; + font-size: 13px; + color: var(--text-dim); + margin-bottom: 32px; + font-weight: 450; +} + +.badge-dot { + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--gold); + display: inline-block; + animation: pulse-dot 2s ease-in-out infinite; +} + +@keyframes pulse-dot { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.3; } +} + +.hero-ascii { + margin-bottom: 28px; + display: flex; + justify-content: center; +} + +.hero-logo { + max-width: 700px; + width: 100%; + height: auto; + display: block; + filter: drop-shadow(0 0 24px rgba(255, 215, 0, 0.15)); + transition: opacity 0.3s; + opacity: 0.9; +} + +.hero-ascii:hover .hero-logo { + opacity: 1; +} + +.hero-title { + font-size: clamp(36px, 6vw, 56px); + font-weight: 700; + line-height: 1.15; + letter-spacing: -0.03em; + margin-bottom: 20px; + color: #fff; +} + +.hero-gradient { + background: linear-gradient(135deg, var(--gold), var(--amber), var(--bronze)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.hero-subtitle { + font-size: 17px; + line-height: 1.7; + color: var(--text-dim); + max-width: 620px; + margin: 0 auto 36px; +} + +.hero-install { + margin-bottom: 32px; +} + +.install-box { + display: flex; + align-items: center; + gap: 0; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 14px 16px; + max-width: 680px; + margin: 0 auto; + font-family: var(--font-mono); + font-size: 13px; + color: var(--text); + overflow-x: auto; + transition: border-color 0.3s; +} + +.install-box:hover { + border-color: var(--border-hover); +} + +.install-box code { + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: left; +} + +.copy-btn { + flex-shrink: 0; + display: flex; + align-items: center; + gap: 6px; + background: none; + border: none; + color: var(--text-dim); + cursor: pointer; + padding: 4px 8px; + border-radius: 6px; + font-family: var(--font-sans); + font-size: 12px; + transition: all 0.2s; +} +.copy-btn:hover { + color: var(--gold); + background: rgba(255, 215, 0, 0.08); +} + +.install-note { + font-size: 13px; + color: var(--text-muted); + margin-top: 12px; +} + +.hero-links { + display: flex; + gap: 12px; + justify-content: center; + flex-wrap: wrap; +} + +.btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 11px 24px; + border-radius: var(--radius); + font-size: 14px; + font-weight: 550; + transition: all 0.25s; + border: 1px solid transparent; +} + +.btn-primary { + background: rgba(255, 215, 0, 0.1); + color: var(--gold); + border-color: rgba(255, 215, 0, 0.2); +} +.btn-primary:hover { + background: rgba(255, 215, 0, 0.18); + border-color: rgba(255, 215, 0, 0.35); + color: var(--gold); + transform: translateY(-1px); +} + +.btn-secondary { + background: rgba(255, 255, 255, 0.04); + color: var(--text-dim); + border-color: rgba(255, 255, 255, 0.08); +} +.btn-secondary:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.15); + color: var(--text); + transform: translateY(-1px); +} + +/* --- Sections --- */ +.section { + position: relative; + z-index: 1; + padding: 80px 0; +} + +.section-header { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + margin-bottom: 48px; +} + +.section-marker { + font-size: 20px; + color: var(--gold); + opacity: 0.7; +} + +.section-header h2 { + font-size: 28px; + font-weight: 650; + color: #fff; + letter-spacing: -0.02em; +} + +.section-desc { + color: var(--text-dim); + font-size: 16px; + line-height: 1.7; + max-width: 640px; + margin: 0 auto 40px; + text-align: center; +} + +/* --- Section: What --- */ +.section-what { + padding: 60px 0 20px; + border-top: 1px solid var(--border); +} + +.lead-text { + font-size: 20px; + line-height: 1.75; + color: var(--text-dim); + max-width: 720px; + margin: 0 auto; + text-align: center; +} + +/* --- Features Grid --- */ +.features-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 16px; +} + +.feature-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 28px 24px; + transition: all 0.3s; +} + +.feature-card:hover { + border-color: var(--border-hover); + background: var(--bg-card-hover); + transform: translateY(-2px); +} + +.feature-icon { + font-size: 28px; + margin-bottom: 16px; +} + +.feature-card h3 { + font-size: 16px; + font-weight: 600; + color: #fff; + margin-bottom: 10px; + letter-spacing: -0.01em; +} + +.feature-card p { + font-size: 14px; + color: var(--text-dim); + line-height: 1.65; +} + +/* --- Terminal Demo --- */ +.section-demo { + padding-bottom: 60px; +} + +.terminal-window { + background: #0c0c14; + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; + max-width: 800px; + margin: 0 auto; +} + +.terminal-header { + display: flex; + align-items: center; + padding: 12px 16px; + background: rgba(255, 255, 255, 0.02); + border-bottom: 1px solid var(--border); + gap: 12px; +} + +.terminal-dots { + display: flex; + gap: 6px; +} + +.dot { + width: 10px; + height: 10px; + border-radius: 50%; +} +.dot-red { background: #ff5f57; } +.dot-yellow { background: #febc2e; } +.dot-green { background: #28c840; } + +.terminal-title { + font-family: var(--font-mono); + font-size: 12px; + color: var(--text-muted); +} + +.terminal-body { + padding: 20px 24px; + height: 340px; + font-family: var(--font-mono); + font-size: 13px; + line-height: 1.7; + white-space: pre-wrap; + overflow-y: auto; + overflow-x: hidden; +} + +.terminal-cursor { + animation: blink 1s step-end infinite; + color: var(--gold); + opacity: 0.8; +} + +@keyframes blink { + 0%, 100% { opacity: 0.8; } + 50% { opacity: 0; } +} + +/* Terminal demo colors */ +.t-prompt { color: var(--gold); } +.t-cmd { color: #fff; } +.t-dim { color: var(--text-muted); } +.t-text { color: var(--text-dim); } +.t-green { color: #4ade80; } +.t-blue { color: #60a5fa; } +.t-amber { color: var(--amber); } +.t-bronze { color: var(--bronze); } +.t-tool { color: var(--text-muted); } + +/* --- Tools Grid --- */ +.tools-grid { + display: flex; + flex-wrap: wrap; + gap: 10px; + justify-content: center; +} + +.tool-pill { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 18px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 100px; + font-size: 14px; + color: var(--text-dim); + transition: all 0.25s; +} + +.tool-pill:hover { + border-color: var(--border-hover); + color: var(--text); + background: var(--bg-card-hover); +} + +.tool-emoji { + font-size: 16px; +} + +/* --- Platforms --- */ +.platforms-row { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 32px; +} + +.platform-group { + text-align: center; +} + +.platform-label { + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--text-muted); + margin-bottom: 16px; + font-weight: 550; +} + +.platform-pills { + display: flex; + flex-wrap: wrap; + gap: 8px; + justify-content: center; +} + +.platform-pill { + padding: 8px 16px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 100px; + font-size: 13px; + color: var(--text-dim); + transition: all 0.25s; +} + +.platform-pill:hover { + border-color: var(--border-hover); + color: var(--text); +} + +/* --- Skills --- */ +.section-skills { + border-top: 1px solid var(--border); +} + +.skills-categories { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; +} + +.skill-category { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 24px; +} + +.skill-category h4 { + font-size: 14px; + font-weight: 600; + color: var(--gold); + margin-bottom: 14px; +} + +.skill-tags { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.skill-tags span { + padding: 4px 10px; + background: rgba(255, 215, 0, 0.04); + border: 1px solid rgba(255, 215, 0, 0.08); + border-radius: 6px; + font-size: 12px; + color: var(--text-dim); +} + +.skill-tags span a { + color: inherit; +} +.skill-tags span a:hover { + color: var(--gold); +} + +.skill-hub-desc { + font-size: 13px; + color: var(--text-muted); + line-height: 1.6; + margin-top: 12px; +} + +/* --- Install Section --- */ +.section-install { + border-top: 1px solid var(--border); +} + +.install-steps { + display: grid; + gap: 28px; + max-width: 640px; + margin: 0 auto; +} + +.install-step { + display: flex; + gap: 20px; +} + +.step-number { + flex-shrink: 0; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + background: rgba(255, 215, 0, 0.08); + border: 1px solid rgba(255, 215, 0, 0.15); + border-radius: 50%; + font-size: 14px; + font-weight: 600; + color: var(--gold); + margin-top: 2px; +} + +.step-content { + flex: 1; + min-width: 0; +} + +.step-content h4 { + font-size: 16px; + font-weight: 600; + color: #fff; + margin-bottom: 10px; +} + +.step-optional { + font-size: 12px; + font-weight: 400; + color: var(--text-muted); +} + +.step-note { + font-size: 13px; + color: var(--text-muted); + margin-top: 8px; +} + +.code-block { + background: #0c0c14; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + overflow: hidden; +} + +.code-block-sm { + max-width: 640px; +} + +.code-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 14px; + background: rgba(255, 255, 255, 0.02); + border-bottom: 1px solid var(--border); + font-family: var(--font-mono); + font-size: 11px; + color: var(--text-muted); +} + +.code-block pre { + padding: 14px 16px; + font-family: var(--font-mono); + font-size: 13px; + line-height: 1.6; + color: var(--text); + overflow-x: auto; + white-space: pre-wrap; + word-break: break-all; +} + +.code-comment { + color: var(--text-muted); +} + +.install-windows { + margin-top: 48px; + padding-top: 32px; + border-top: 1px solid var(--border); + max-width: 640px; + margin-left: auto; + margin-right: auto; +} + +.install-windows p { + font-size: 14px; + color: var(--text-dim); + margin-bottom: 12px; +} + +/* --- Research --- */ +.research-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 16px; +} + +.research-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 24px; + transition: all 0.3s; +} + +.research-card:hover { + border-color: var(--border-hover); + transform: translateY(-2px); +} + +.research-card h4 { + font-size: 15px; + font-weight: 600; + color: #fff; + margin-bottom: 8px; +} + +.research-card p { + font-size: 14px; + color: var(--text-dim); + line-height: 1.6; +} + +/* --- Footer --- */ +.footer { + position: relative; + z-index: 1; + padding: 80px 0 40px; + border-top: 1px solid var(--border); +} + +.footer-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 12px; + margin-bottom: 48px; +} + +.footer-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + transition: all 0.25s; +} + +.footer-card:hover { + border-color: var(--border-hover); + background: var(--bg-card-hover); + transform: translateY(-2px); +} + +.footer-card a { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + padding: 28px 20px; + color: var(--text-dim); + font-size: 14px; + font-weight: 500; +} + +.footer-card a:hover { + color: var(--text); +} + +.footer-card svg { + opacity: 0.7; +} + +.footer-nous-logo { + width: 28px; + height: 28px; + border-radius: 6px; +} + +.footer-skills-icon { + font-size: 22px; +} + +.footer-bottom { + text-align: center; + padding-top: 24px; + border-top: 1px solid var(--border); +} + +.footer-bottom p { + font-size: 13px; + color: var(--text-muted); +} + +.footer-bottom a { + color: var(--text-dim); +} +.footer-bottom a:hover { + color: var(--gold); +} + +/* --- Scroll Animations --- */ +.fade-in { + opacity: 0; + transform: translateY(20px); + transition: opacity 0.6s ease, transform 0.6s ease; +} + +.fade-in.visible { + opacity: 1; + transform: translateY(0); +} + +/* --- Responsive --- */ +@media (max-width: 900px) { + .features-grid, + .research-grid, + .platforms-row, + .skills-categories { + grid-template-columns: repeat(2, 1fr); + } + + .footer-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 640px) { + .hero { + padding: 100px 20px 60px; + } + + .hero-title { + font-size: 32px; + } + + .hero-subtitle { + font-size: 15px; + } + + .features-grid, + .research-grid, + .platforms-row, + .skills-categories, + .footer-grid { + grid-template-columns: 1fr; + } + + .section { + padding: 60px 0; + } + + .section-header h2 { + font-size: 22px; + } + + .install-box { + font-size: 11px; + } + + .nav-links a:not(:last-child):not(:nth-last-child(2)) { + display: none; + } + + .hero-logo { + max-width: 320px; + } + + .terminal-body { + font-size: 11px; + padding: 16px; + height: 280px; + } +} + +/* --- Selection --- */ +::selection { + background: rgba(255, 215, 0, 0.2); + color: #fff; +} + +/* --- Scrollbar --- */ +::-webkit-scrollbar { + width: 6px; + height: 6px; +} +::-webkit-scrollbar-track { + background: var(--bg); +} +::-webkit-scrollbar-thumb { + background: var(--border-hover); + border-radius: 3px; +} +::-webkit-scrollbar-thumb:hover { + background: var(--dark-gold); +}