diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93e7507..8eb0490 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,20 @@ jobs: node-version: 22 cache: npm + - name: Set up Rust + run: | + rustup update stable + rustup default stable + + - name: Install Tauri Linux dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + build-essential curl file pkg-config wget \ + libdbus-1-dev libwebkit2gtk-4.1-dev \ + libayatana-appindicator3-dev librsvg2-dev \ + poppler-utils unzip patchelf + - name: Install dependencies run: npm ci diff --git a/Cargo.lock b/Cargo.lock index 91caf3f..dd81323 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2095,7 +2095,7 @@ dependencies = [ [[package]] name = "mint-cli" -version = "1.6.0" +version = "1.6.2" dependencies = [ "anyhow", "base64 0.22.1", @@ -2113,7 +2113,7 @@ dependencies = [ [[package]] name = "mint-core" -version = "1.6.0" +version = "1.6.2" dependencies = [ "base64 0.22.1", "chrono", @@ -2134,7 +2134,7 @@ dependencies = [ [[package]] name = "mint-desktop" -version = "1.6.0" +version = "1.6.2" dependencies = [ "base64 0.22.1", "dirs", diff --git a/docs/WEBHOOK_FORWARDING.md b/docs/WEBHOOK_FORWARDING.md deleted file mode 100644 index 6eef363..0000000 --- a/docs/WEBHOOK_FORWARDING.md +++ /dev/null @@ -1,52 +0,0 @@ -# LINE and WhatsApp Cloud Webhook Forwarding - -Mint listens on localhost intentionally. Expose only the required listener through a TLS tunnel and -keep the configured signature secrets private. - -## LINE - -Mint listens at `http://127.0.0.1:3000/callback`. - -```bash -cloudflared tunnel --url http://127.0.0.1:3000 -``` - -Append `/callback` to the HTTPS URL printed by Cloudflare Tunnel and register it as the webhook URL -in LINE Developers Console. Configure these Mint settings: - -- `lineChannelAccessToken` -- `lineChannelSecret` -- `enableLineBridge` - -Mint validates `x-line-signature` before processing messages. - -## WhatsApp Cloud API - -Mint listens at `http://127.0.0.1:3001/`. - -```bash -cloudflared tunnel --url http://127.0.0.1:3001 -``` - -Register the HTTPS URL in Meta Webhooks. Configure these Mint settings: - -- `whatsappCloudAccessToken` -- `whatsappPhoneNumberId` -- `whatsappVerifyToken` -- `whatsappAppSecret` -- `enableWhatsappBridge` - -Use the same verify token when Meta validates the subscription. Mint verifies -`x-hub-signature-256` for incoming messages when `whatsappAppSecret` is configured. - -## Alternative Tunnel - -The equivalent ngrok commands are: - -```bash -ngrok http 3000 -ngrok http 3001 -``` - -Do not bind Mint directly to `0.0.0.0`; the localhost listener plus TLS tunnel keeps the exposed -surface narrow. diff --git a/docs/assets/Agent_Mint.png b/docs/assets/Agent_Mint.png deleted file mode 100644 index 7fdb0da..0000000 Binary files a/docs/assets/Agent_Mint.png and /dev/null differ diff --git a/docs/assets/CLI_Screen.png b/docs/assets/CLI_Screen.png deleted file mode 100644 index fd76e4b..0000000 Binary files a/docs/assets/CLI_Screen.png and /dev/null differ diff --git a/docs/assets/Settings.png b/docs/assets/Settings.png deleted file mode 100644 index c2c4d0c..0000000 Binary files a/docs/assets/Settings.png and /dev/null differ diff --git a/docs/assets/icon.png b/docs/assets/icon.png deleted file mode 100644 index 7919277..0000000 Binary files a/docs/assets/icon.png and /dev/null differ diff --git a/docs/guide.html b/docs/guide.html deleted file mode 100644 index 2d15a93..0000000 --- a/docs/guide.html +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - Mint Guide | Complete Professional Manual - - - - - -
- - - -
-
-
-
- -
- - -
-
- Complete Professional Manual -

Agent Mint

-

Welcome to the definitive guide for Mint. This document covers everything from your first installation to advanced autonomous engineering workflows.

-
- -
-

1. Installation

-
-

Option A: Global NPM (Recommended)

-

Install Mint globally to use the mint command anywhere in your terminal.

-
$npm run tauri:build
-
-
-

Option B: Manual Build (For Developers)

-

Perfect for contributing or testing the latest experimental branch.

-
$git clone https://github.com/Pheem49/Mint.git
-$cd Mint
-$npm install
-
-
- -
-

2. Initial Setup (The Onboarding Wizard)

-

Configuring a powerful AI assistant can be complex, so Mint includes a built-in Onboarding Wizard to handle everything in one go. Run it by typing:

-
-
$mint onboard
- -

Step 1: Core AI Activation (Gemini)

-

Mint is powered primarily by Google Gemini. You will be prompted for:

-
    -
  • API Key: Paste your key from Google AI Studio. This key is stored locally and never shared.
  • -
  • Model Selection: Choose between flash (fast & cheap) or pro (highly intelligent). We recommend gemini-3.1-flash-lite-preview for daily tasks.
  • -
- -

Step 2: QuickStart Provider Selection

-

This is where you choose which "plugins" or "channels" Mint should connect to. The menu uses an interactive checkbox system:

-
- Keyboard Controls: -
    -
  • / : Navigate through the list.
  • -
  • Space : Toggle (Select/Deselect) an item. Selected items show a .
  • -
  • a : Select all items.
  • -
  • i : Invert your current selection.
  • -
  • Enter : Confirm and move to configuration.
  • -
-
- -

Step 3: Categorized Services

-
-
- 💬 Chat Bridges -

Connect Mint to Telegram, Discord, WhatsApp, Slack, or LINE. This allows you to talk to your desktop agent from your phone!

-
-
- 🤖 Alternative AI -

Enable support for Anthropic (Claude), OpenAI, or Hugging Face if you prefer their models for specific coding tasks.

-
-
- 🏠 Local AI -

Privacy first. Connect to Ollama or LM Studio running on your machine to use Mint without sending data to the cloud.

-
-
- 🔎 Search Engines -

Enable Google Search or Brave Search to give Mint real-time internet browsing capabilities for technical research.

-
-
- -

Step 4: Dynamic Detail Entry

-

Based on your selections in Step 2, the wizard will now ask for the specific details needed for each service (e.g., Discord Bot Tokens, Search Engine IDs, or Local API URLs). Simply follow the prompts until you see the ✅ Configuration saved successfully! message.

-
-
- -
-

3. Primary CLI Commands

-

Use these global commands to interact with Mint from your terminal:

-
-
-
- mint / mint chat -

Starts the unified interactive agent UI. This is your main gateway to talking with Mint.

-
-
- mint code "<task>" -

Executes a specific autonomous coding task in the current directory (Workspace Mode).

-
-
- mint task "<task>" -

Queues a long-running background task for the headless agent to perform autonomously.

-
-
- mint mcp -

Primary command for managing Model Context Protocol (MCP) servers and tools.

-
-
- mint list -

Displays an exhaustive list of all available features, tools, and terminal commands.

-
-
-
-
- -
-

4. The Agent Workflow

-

Mint operates on a Plan-Act-Observe loop. It understands that complex tasks require a multi-step sequence of operations.

- -
-

Thinking & Tool Selection

-

When given a task, Mint plans its moves, selects the appropriate tool (like web search or file editing), executes it, and then observes the results to decide the next action.

-
-
- -
-

5. Coding Agent & Workspace

-

The specialized engineering mode (mint code) is optimized for technical integrity and idiomatic code standards.

-
-

Autonomous Safety

-

Before any destructive change (shell commands or file edits), Mint will prompt for your y/n approval, ensuring you remain in control of your machine.

-
-
- -
-

6. Slash Commands In-Depth

-

In the interactive TUI, typing / opens the command menu. These allow you to control the agent's state directly.

- -
-
- /help (or /?) - Displays a quick reference for all available slash commands and usage tips. -
-
- /code <task> - Force-activates the autonomous engineering agent for complex coding tasks in your project. -
-
- /models [name] - List all configured AI models or switch between them instantly (Gemini, Claude, GPT, Ollama). -
-
- /agent <type> - Switch between specialized personas: chat, code, reviewer, or custom agents. -
-
- /workspace <cmd> - Manage multi-project workflows: add, list, remove, or use to switch project contexts. -
-
- /cd <path> - Changes the agent's working directory. Useful for moving between sub-modules of a project. -
-
- /stats - Fetch real-time hardware telemetry: CPU load, available RAM, and operating system info. -
-
- /review - Invokes the Reviewer Agent to analyze and critique the last response for technical accuracy. -
-
- /config - Prints your current local configuration, active providers, and enabled chat bridges. -
-
- /copy - Surgically copies the last AI response directly to your system clipboard (requires xclip/xsel on Linux). -
-
- /clear (or /reset) - Wipes the current conversation history to refresh the AI's context and start a new session. -
-
- /exit (or /quit) - Safely terminates the CLI session and returns to your primary shell. -
-
-
- -
-

7. Autonomous Toolset

-
-
    -
  • web_search: Real-time internet access for up-to-date answers.
  • -
  • open_url: Launches any website or URL in your system's default browser.
  • -
  • open_app: Opens local applications (e.g., VS Code, Spotify, Slack) by name.
  • -
  • open_file / open_folder: Opens files or directories using your system's default apps (e.g., Nautilus, Finder, Explorer).
  • -
  • read_file / write_file: High-speed I/O operations with line range support.
  • -
  • apply_patch: Surgical, non-destructive code edits using exact matching.
  • -
  • run_shell: Executes terminal commands (Requires your y/n approval).
  • -
  • find_path: Advanced fuzzy search to locate files and folders by name.
  • -
  • system_automation: Controls hardware like Volume, Brightness, and Power.
  • -
-
-
- -
-

8. Desktop GUI Features

-
-

Screen Vision

-

Let Mint "see" your screen to analyze errors, translate UI elements, or provide context-aware help based on your active windows.

-

Proactive Engine

-

Background monitoring that offers suggestions before you even ask, identifying task optimizations in real-time.

-
-
- -
-

9. Advanced MCP (Extensions)

-

The Model Context Protocol (MCP) is the universal standard for connecting AI agents to data sources and tools. Mint acts as a host that can orchestrate multiple MCP servers simultaneously.

- -
-

Adding a New Server

-

Use the following template to connect any MCP-compatible server to Mint:

-
# Template
-mint mcp add <name> <command> --args <args...> --env <KEY=VALUE>
- -

Common Extension Examples

-

Copy and run these commands in your terminal to extend Mint's capabilities:

- -
- 🔍 Google Search -

Allows Mint to perform deep web searches beyond its basic internal browser.

-
$mint mcp add google-search npx --args -y @modelcontextprotocol/server-google-search --env GOOGLE_API_KEY=YOUR_KEY GOOGLE_SEARCH_ENGINE_ID=YOUR_ID
-
- -
- 📊 SQLite Database -

Gives Mint the ability to query and analyze local SQLite databases.

-
$mint mcp add my-db npx --args -y @modelcontextprotocol/server-sqlite /path/to/your/database.db
-
- -
- ☁️ Fetch Weather -

Provides Mint with real-time weather data for any location.

-
$mint mcp add weather npx --args -y @modelcontextprotocol/server-everything
-

*The 'everything' server includes weather, time, and more.

-
- -
- 📂 Git Repository Manager -

Allows Mint to perform advanced Git operations like branching and merging across folders.

-
$mint mcp add git npx --args -y @modelcontextprotocol/server-git /path/to/repo
-
- -
- 🛠️ Command Management -
    -
  • mint mcp list - View all connected servers and their tools.
  • -
  • mint mcp remove <name> - Disconnect a specific server.
  • -
  • mint mcp clear - Wipe all extensions and start fresh.
  • -
-
-
-
- - -
-
- - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 4ccad0d..0000000 --- a/docs/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - Mint | Experience the Future of Desktop Assistance - - - - - - -
-
-
-
-
-
- - -
-

Experience the Future
of Desktop Assistance

-

Mint คือ Native Desktop AI Assistant ที่ใช้ Rust Backend และ React UI มาพร้อมกับ Unified Agent Loop ที่รวม Screen Vision, Web Automation และ AI เชิงรุกเข้าด้วยกันเพื่อยกระดับการทำงานของคุณ ขับเคลื่อนด้วย Google Gemini 1.5 Flash

- -
- $ - npm run tauri:build - -
- -
-
Terminal Interface
- Mint CLI Preview -
- -
-
- Mint Icon -

Modern Desktop Interface

-

Enjoy a premium, glassmorphism-inspired GUI designed for the modern desktop environment. Manage your AI companion and customize your experience with ease.

-
- -
-
-
- Agent Mint Main UI - Main Interface -
-
- Mint Settings UI - Settings & Controls -
-
- -
-
-

Intelligent Companion

-

A sleek, floating chat interface that provides powerful AI capabilities without cluttering your workspace.

-
-
-

Granular Controls

-

Fully customize your experience. Manage API keys, switch models, and toggle proactive features with ease.

-
-
-
-
- -
-
-

Get the Latest Release

-

Download the latest stable binaries for Linux including .deb and .tar.gz formats directly from our GitHub releases page.

- - - Download Latest Binaries - -
-
-
- -
-
-
- -
-

Screen Vision

-

Mint can see what you see. It understands your active applications and provides context-aware assistance.

-
-
-
- -
-

Web Automation

-

Automate repetitive web tasks effortlessly. Mint can browse, interact, and extract data for you.

-
-
-
- -
-

Proactive Suggestions

-

Mint doesn't just wait for you. It suggests optimizations and help before you even ask, powered by smart context analysis.

-
-
- - - - - - diff --git a/docs/style.css b/docs/style.css deleted file mode 100644 index 2523178..0000000 --- a/docs/style.css +++ /dev/null @@ -1,579 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Outfit:wght@600;700;800&display=swap'); - -:root { - --bg-color: #050505; - --accent-mint: #00ffa3; - --accent-blue: #00e0ff; - --text-primary: #ffffff; - --text-secondary: #a1a1aa; - --glass-bg: rgba(255, 255, 255, 0.03); - --glass-border: rgba(255, 255, 255, 0.1); - --card-bg: rgba(20, 20, 23, 0.6); - --font-heading: 'Outfit', sans-serif; - --font-body: 'Inter', sans-serif; -} - -html { - scroll-behavior: smooth; -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - background-color: var(--bg-color); - color: var(--text-primary); - font-family: var(--font-body); - line-height: 1.6; - overflow-x: hidden; -} - -/* Background Gradients & Texture */ -.bg-glow { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: -1; - background: - radial-gradient(circle at 0% 0%, rgba(0, 255, 163, 0.03) 0%, transparent 40%), - radial-gradient(circle at 100% 100%, rgba(0, 224, 255, 0.03) 0%, transparent 40%), - var(--bg-color); -} - -.bg-glow::before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-image: radial-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px); - background-size: 40px 40px; - opacity: 0.5; - mask-image: radial-gradient(ellipse at center, black, transparent 80%); -} - -/* Floating Blobs */ -.floating-blobs { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: -1; - overflow: hidden; - pointer-events: none; -} - -.blob { - position: absolute; - border-radius: 50%; - filter: blur(120px); - opacity: 0.15; - animation: float 20s infinite alternate cubic-bezier(0.45, 0, 0.55, 1); -} - -.blob-1 { - width: 600px; - height: 600px; - background: var(--accent-mint); - top: -200px; - left: -100px; - animation-duration: 25s; -} - -.blob-2 { - width: 500px; - height: 500px; - background: var(--accent-blue); - bottom: -100px; - right: -100px; - animation-duration: 30s; - animation-delay: -5s; -} - -.blob-3 { - width: 400px; - height: 400px; - background: #8b5cf6; - top: 40%; - left: 50%; - opacity: 0.08; - animation-duration: 22s; - animation-delay: -10s; -} - -@keyframes float { - 0% { transform: translate(0, 0) scale(1); } - 100% { transform: translate(100px, 50px) scale(1.1); } -} - -/* Navigation */ -nav { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.5rem 10%; - position: fixed; - top: 0; - width: 100%; - z-index: 1000; - backdrop-filter: blur(12px); - border-bottom: 1px solid var(--glass-border); - background: var(--glass-bg); -} - -.logo-container { - display: flex; - align-items: center; - gap: 0.75rem; - font-family: var(--font-heading); - font-size: 1.5rem; - letter-spacing: -0.5px; -} - -.logo-container img { - height: 32px; - border-radius: 6px; -} - -.nav-links { - display: flex; - gap: 2rem; -} - -.nav-links a { - text-decoration: none; - color: var(--text-secondary); - font-size: 0.95rem; - font-weight: 500; - transition: color 0.3s ease; -} - -.nav-links a:hover { - color: var(--accent-mint); -} - -.github-link { - background: var(--text-primary); - color: var(--bg-color) !important; - padding: 0.5rem 1.25rem; - border-radius: 100px; - font-weight: 600 !important; -} - -/* Hero Section */ -.hero { - min-height: 90vh; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - text-align: center; - padding: 120px 20px 60px; - position: relative; -} - -.hero::after { - content: ''; - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 300px; - background: linear-gradient(to top, var(--bg-color), transparent); - pointer-events: none; -} - -.hero h1 { - font-family: var(--font-heading); - font-size: clamp(3rem, 8vw, 5.5rem); - line-height: 1.1; - margin-bottom: 1.5rem; - background: linear-gradient(to bottom right, #fff 50%, #999); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - z-index: 1; -} - -.hero p { - font-size: 1.25rem; - color: var(--text-secondary); - max-width: 700px; - margin-bottom: 3rem; - z-index: 1; -} - -/* Install Command */ -.install-container { - background: #0a0a0c; - border: 1px solid var(--glass-border); - padding: 0.75rem 1.5rem; - border-radius: 12px; - display: flex; - align-items: center; - gap: 1rem; - font-family: 'Courier New', Courier, monospace; - position: relative; - z-index: 1; - box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4); - transition: border-color 0.3s ease, box-shadow 0.3s ease; - margin-bottom: 4rem; -} - -.hero-preview { - margin-top: 4rem; - width: 95%; - max-width: 1100px; - z-index: 1; - border-radius: 24px; - padding: 2rem; - background: rgba(20, 20, 23, 0.4); - border: 1px solid rgba(139, 92, 246, 0.4); - box-shadow: 0 40px 100px rgba(0, 0, 0, 0.6); - animation: slideUp 1s cubic-bezier(0.16, 1, 0.3, 1); - backdrop-filter: blur(10px); -} - -.hero-preview img { - width: 100%; - display: block; - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.05); -} - -.preview-badge { - position: absolute; - top: -15px; - left: 50%; - transform: translateX(-50%); - background: var(--accent-mint); - color: #000; - padding: 0.4rem 1.2rem; - border-radius: 100px; - font-size: 0.8rem; - font-weight: 800; - text-transform: uppercase; - letter-spacing: 1px; - box-shadow: 0 10px 20px rgba(0, 255, 163, 0.3); -} - -@keyframes slideUp { - from { - opacity: 0; - transform: translateY(40px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.install-container:hover { - border-color: var(--accent-mint); - box-shadow: 0 0 30px rgba(0, 255, 163, 0.15); -} - -.install-container span { - color: var(--accent-mint); -} - -.install-container code { - color: #fff; - font-size: 1.1rem; -} - -.copy-btn { - background: none; - border: none; - color: var(--text-secondary); - cursor: pointer; - padding: 5px; - transition: color 0.3s; -} - -.copy-btn:hover { - color: #fff; -} - -/* Features Section */ -.features { - padding: 100px 10%; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; - position: relative; - z-index: 1; -} - -.feature-card { - background: var(--card-bg); - border: 1px solid var(--glass-border); - padding: 2.5rem; - border-radius: 24px; - transition: transform 0.3s ease, border-color 0.3s ease; - backdrop-filter: blur(5px); -} - -.feature-card:hover { - transform: translateY(-10px); - border-color: var(--accent-mint); -} - -.feature-icon { - width: 48px; - height: 48px; - background: rgba(0, 255, 163, 0.1); - border-radius: 12px; - display: flex; - align-items: center; - justify-content: center; - color: var(--accent-mint); - margin-bottom: 1.5rem; - font-size: 1.5rem; -} - -.feature-card h3 { - font-family: var(--font-heading); - font-size: 1.5rem; - margin-bottom: 1rem; -} - -.feature-card p { - color: var(--text-secondary); - font-size: 1rem; -} - -/* Desktop Showcase */ -.desktop-showcase { - padding: 100px 10%; - z-index: 1; - position: relative; -} - -.showcase-header { - text-align: center; - margin-bottom: 5rem; -} - -.section-icon { - width: 64px; - height: 64px; - margin-bottom: 1.5rem; - filter: drop-shadow(0 0 20px rgba(0, 255, 163, 0.4)); -} - -.showcase-header h2 { - font-family: var(--font-heading); - font-size: 3.5rem; - margin-bottom: 1rem; -} - -.showcase-header p { - color: var(--text-secondary); - font-size: 1.2rem; - max-width: 600px; - margin: 0 auto; -} - -.showcase-group { - display: flex; - flex-direction: column; - align-items: center; - gap: 4rem; -} - -.showcase-images { - display: flex; - justify-content: center; - align-items: flex-start; - gap: 2rem; - width: 100%; -} - -.image-wrapper { - flex: 1; - max-width: 450px; - background: rgba(255, 255, 255, 0.02); - border: 1px solid var(--glass-border); - padding: 0.75rem; - border-radius: 20px; - position: relative; - backdrop-filter: blur(10px); - transition: transform 0.4s ease; -} - -.image-wrapper:hover { - transform: translateY(-10px); - border-color: var(--accent-mint); -} - -.image-wrapper img { - width: 100%; - display: block; - border-radius: 12px; - box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4); -} - -.image-wrapper span { - display: block; - text-align: center; - margin-top: 1rem; - font-size: 0.85rem; - color: var(--text-secondary); - font-weight: 500; -} - -.showcase-text-combined { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 3rem; - width: 100%; - max-width: 900px; - margin-top: 2rem; -} - -.text-block { - text-align: left; -} - -.text-block h3 { - font-family: var(--font-heading); - font-size: 1.5rem; - margin-bottom: 0.75rem; - color: var(--accent-mint); - display: flex; - align-items: center; - gap: 0.5rem; -} - -.text-block p { - font-size: 1rem; - color: var(--text-secondary); - line-height: 1.6; -} - -/* Downloads Section */ -.downloads { - padding: 100px 10% 60px; - display: flex; - justify-content: center; - z-index: 5; - position: relative; -} - -.download-container { - background: linear-gradient(135deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.01)); - border: 1px solid var(--glass-border); - padding: 3.5rem; - border-radius: 32px; - max-width: 800px; - text-align: center; - backdrop-filter: blur(15px); - box-shadow: 0 30px 60px rgba(0, 0, 0, 0.3); - z-index: 10; -} - -.download-container h2 { - font-family: var(--font-heading); - font-size: 2.5rem; - margin-bottom: 1.5rem; -} - -.download-container p { - color: var(--text-secondary); - font-size: 1.1rem; - margin-bottom: 2.5rem; - line-height: 1.8; -} - -.download-container b { - color: var(--text-primary); -} - -.download-btn { - display: inline-flex; - align-items: center; - gap: 0.75rem; - background: var(--accent-mint); - color: #000; - text-decoration: none; - padding: 1.25rem 2.5rem; - border-radius: 100px; - font-weight: 700; - font-size: 1.1rem; - transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); - box-shadow: 0 10px 30px rgba(0, 255, 163, 0.3); - cursor: pointer; - position: relative; - z-index: 11; -} - -.download-btn:hover { - transform: scale(1.05); - box-shadow: 0 15px 40px rgba(0, 255, 163, 0.5); - background: #fff; -} - -.download-btn i { - font-size: 1.4rem; -} - -.download-card h4 { - font-family: var(--font-heading); - font-size: 1.25rem; - margin-bottom: 1rem; - display: flex; - align-items: center; - gap: 0.75rem; -} - -.download-card h4 i { - color: var(--accent-blue); -} - -.download-card pre { - background: #000; - padding: 1rem; - border-radius: 8px; - font-size: 0.9rem; - color: var(--accent-mint); - margin-top: 1rem; - overflow-x: auto; - border: 1px solid rgba(255, 255, 255, 0.05); -} - -.download-card p { - color: var(--text-secondary); - font-size: 0.95rem; -} - -/* Footer */ -footer { - padding: 60px 10% 40px; - border-top: 1px solid var(--glass-border); - text-align: center; - color: var(--text-secondary); - font-size: 0.9rem; -} - -/* Responsive */ -@media (max-width: 768px) { - .nav-links { - display: none; - } - - .hero h1 { - font-size: 3.5rem; - } - - .hero p { - font-size: 1.1rem; - } -}