diff --git a/docs/business-model.md b/docs/business-model.md index 19abb98..b1d0da3 100644 --- a/docs/business-model.md +++ b/docs/business-model.md @@ -141,9 +141,9 @@ compliance questionnaires, procurement) comes later, when real pull justifies it to seed the network effect and author ecosystem — later, once the wedge has real referenceable users, not a near-term dependency for revenue. -Pricing ($79/seat, flat) is already published — see `CLAUDE.md`. The remaining -work here is proving time-to-value with real instrumentation -(`organizer_time_to_value`), not gating pricing on it. +Pricing for the cloud product is the tiered table above (see also `CLAUDE.md` +and the marketing site). Early money is implementation services, then seats. -The first paid-relevant feature (audit-as-compliance-artifact) is scoped as -concrete work in `docs/PRODUCT_ROADMAP.md` §6. +Near-term paid proof for the cloud MVP: land one customer workflow end-to-end +(record → approve → execute → verify → audit), then expand playbooks. Desktop +Organizer monetization notes elsewhere in this file are historical. diff --git a/public/index.html b/public/index.html index ac09d05..203f166 100644 --- a/public/index.html +++ b/public/index.html @@ -3,36 +3,45 @@ - Ghost — Auditable automation for work that can't go to the cloud + Ghost — Approval-gated AI operator (open build) + - - + - - + + - + - + @@ -42,559 +51,366 @@ "@type": "SoftwareApplication", "name": "Ghost", "applicationCategory": "BusinessApplication", - "operatingSystem": "macOS, Windows", + "operatingSystem": "Web", "url": "https://ghost.muharafiq.com/", - "description": "Ghost is auditable, approval-gated automation that runs entirely on your machine. It scans, proposes an exact plan, waits for approval, executes deterministically, seals a tamper-evident receipt, and can undo the run — nothing leaves the device.", - "keywords": "local-first automation, auditable automation, approval-gated file automation, desktop automation Mac Windows, audit undo automation", - "downloadUrl": "https://ghost.muharafiq.com/#download" + "description": "Open early-stage AI operator with approval gates, verification, and a hash-chained audit log. Built by Muhammad Rafiq.", + "author": { + "@type": "Person", + "name": "Muhammad Rafiq", + "url": "https://github.com/mohabbis" + }, + "codeRepository": "https://github.com/mohabbis/ghost", + "keywords": "AI operator, workflow automation, approval-gated automation, audit log" } - - Honest status. + Ghost is an independent open build — a real engine in the repo, not a vapor landing page. + No paid customers yet. Built to become a product companies would buy; today it is also a + portfolio-grade systems project. + Read the code → + + + +
- -
-
-

Local-first · Auditable · Reversible

-

The automation you can run on files that can't leave your machine.

-

- Ghost scans, proposes an exact plan, and waits for your approval — then - moves, renames, or files, sealing a tamper-evident receipt and an undo - path for every run. Nothing is uploaded. Nothing is deleted or overwritten silently. -

- -

v2.0.3 · Mac & Windows · developer preview · no account required · local-first by default

-
- - - -
- -
- Scans read-only - Previews every change - Flags conflicts before it acts - Sealed receipt & undo -
-
- - -
-
-
-

One engine

-

One trust pipeline, under everything Ghost does.

-

- Ghost runs a single pipeline over both file operations and app steps. Ghost - Organizer — safe folder cleanup — is the flagship expression of it today. The - same pipeline is what lets Ghost grow into auditable workflows for teams that can't put - their data through a cloud tool. +

+ + Solo project by + Muhammad Rafiq + · working name may change · commercial intent, no fake logos

-
-
- -

Capture & review

-

Ghost scans the boundary you chose — read-only — and compiles a reviewable plan. Every proposed step is visible before/after, with conflicts and low-confidence items called out.

-
-
- -

Approve & execute

-

Nothing mutates until you approve the exact plan. Deterministic code then executes it, re-checking policy per step — never a model's raw output, never a silent delete or overwrite.

-
-
- -

Verify & recover

-

Each step is verified, the run is sealed into a tamper-evident receipt, and undo data is written first — so any run reverses in one click.

-
-
-
CaptureReviewApproveExecuteVerifyRecover
-
-
- - -
-
-

Interactive demo

-

Watch the trust model, live.

-

- In-browser simulations of the desktop product — Ghost Organizer's scan-to-approved-plan - loop, the Ghost 2.0 Action Plan invoice run, and record-and-replay verification. - Nothing here touches your files or opens network sockets. -

-
- -
-
- - - -
- -
-
-
-
Downloads — 6 items
-
    + +
    + + +
    +
    +

    The loop

    +

    Capture → Review → Approve → Execute → Verify → Recover

    +

    + AI may propose. Deterministic code executes only approved plans. Sensitivity is decided by + a classifier — not a model hoping for the best. +

    +
      +
    1. + 1 +

      Capture

      +

      Demonstrate the workflow once. Compile into editable, typed steps. (Recording is the next build phase.)

      +
    2. +
    3. + 2 +

      Review

      +

      Inspect every step before it can run. No silent send, pay, or overwrite.

      +
    4. +
    5. + 3 +

      Approve

      +

      Risky steps halt. A human decides. The engine cannot skip the gate.

      +
    6. +
    7. + 4 +

      Execute

      +

      Replay via browser automation today; APIs/connectors next — still through the same pipeline.

      +
    8. +
    9. + 5 +

      Verify & audit

      +

      Assertions + screenshots per step. Hash-chained audit events per organization.

      +
    10. +
    - -
    +
    -

    Inside the desktop app

    -

    Three views. One trust pipeline.

    +

    Proof, not pitch

    +

    What works in the repo today.

    - The marketing site is the reference look. The desktop app is where these views - are wired — same language, same approve-before-it-acts model. + Phase 1 of the cloud product is runnable end-to-end against a bundled fixture: + navigate → fill → halt on Submit → approve → resume → verify → succeed. + If it isn’t in this list, don’t assume it ships.

    -
      +
      • - Organizer -

        Scan a folder, review the proposed moves and renames, approve, audit, undo. No silent delete, no silent overwrite.

        + +
        + Playwright execution engine + Semantic selectors, per-step screenshots, verification assertions. +
      • - Record & Replay -

        Capture a data-entry routine once, review every step and the value it writes, then replay only what you approved — with each value verified as it lands.

        + +
        + Deterministic approval gate + classifyStep — not an LLM — decides what must wait for a human. +
      • - Workflows -

        Save approved routines and run them again period after period, through the same review → approve → verify → receipt → undo path.

        + +
        + Live run timeline + Status, screenshots, approve/reject; resume restores browser state after the gate. +
      • -
    -

    - Everything else stays off the default surface — experimental tools sit behind an explicit build flag. -

    +
  • + +
    + Hash-chained audit log + Per-org append-only events for run/step/gate/finish. +
    +
  • +
  • + +
    + Not built yet + Browser recording, real connectors (email/CRM/ERP), billing, customer deployments. +
    +
  • +
    - -
    +
    -

    Where this is going

    -

    The same pipeline, shaped into playbooks for specific teams.

    +

    Engineering

    +

    Stack you can actually clone.

    - Organizer is the beachhead. The roadmap turns the audited pipeline into repeatable - playbooks for the teams that feel the pain most — always local, always - approval-gated, always reversible. These are direction, not shipped features yet. + Self-contained Turborepo under cloud/. Legacy Rust/Tauri desktop remains in-tree + for history — it is not the product being built.

    -
    -
    - -

    Accounting & bookkeeping

    -

    Month-end close: scan and rename by period, file per client, reconcile against an expected-docs checklist, and produce a partner-signable close report.

    - Roadmap +
    +
    +

    Web

    +

    Next.js 15 · Auth.js · org-scoped API routes

    -
    - -

    Legal & paralegal

    -

    Matter intake and filing, dated renaming, and privilege-review packet assembly — with on-export redaction, entirely on the machine that holds the client files.

    - Roadmap +
    +

    Worker

    +

    BullMQ · Playwright · approval state machine

    -
    - -

    Healthcare admin

    -

    Claims, EOB, and record filing where cloud RPA is a compliance burden — local, audited, and reversible, with on-device OCR and ID parsing.

    - Roadmap +
    +

    Core

    +

    Prisma · Postgres · Zod step schema · audit chain

    -
    - -

    Legacy data entry

    -

    Desktop apps with no API: record once, review every step, approve, and replay with semantic resolution and coordinate fallback — the trusted alternative to heavyweight RPA.

    - Roadmap +
    +

    Ops

    +

    Redis queue · disk/S3 artifacts · Docker Compose local

    -

    Each playbook rides the same audited pipeline above — nothing gets a fast lane around approval, receipt, or undo.

    - -
    +
    -

    Who it's for

    -

    Built for people whose data can't go to the cloud.

    +

    Product sense

    +

    Who this is for — when it graduates.

    - Ghost is for bookkeepers and finance/admin staff, consultants handling client - deliverables, small-business operators, and founders whose local folders became the - system of record — people who need the work done safely and need proof of what changed. + The design target is operations-heavy SMBs (wholesale, bookkeeping, property admin, + logistics) that re-key work between ugly systems and cannot accept unsupervised agents. + That ICP guides the build even before the first paid pilot.

    - -

    Barred from cloud tools

    -

    Handling client financials, PHI, or privileged files and told it can't go through a cloud service. Ghost runs entirely on your machine — no account, no uploads.

    +

    Cross-app grunt work

    +

    Reporting, reconciliation, document processing — repetitive and measurable.

    - -

    Accountable for what changed

    -

    Recurring operational files and workflows — month-end packets, client deliverables, exports — where "what moved, and can I show it" is the job, not a nicety.

    +

    Human on the sensitive step

    +

    Send, pay, delete, submit must stop. That constraint is the product, not a bug.

    - -

    The same non-negotiables

    -

    Local-first, no account required, files never leave the machine. Nothing runs unapproved, every change is audited, and reversible steps undo in one click.

    +

    Proof afterward

    +

    Screenshots, verification, audit chain — something a manager can review.

    - -
    -
    -

    The trust pipeline

    -

    Every action takes the same path.

    -

    Select a folder → scan → propose a plan → review → approve → execute → audit → undo. AI may propose. Deterministic code executes only what you approved — and checks the result.

    -
    -
      -
    1. 1

      Select

      Point Ghost at a folder or Zone. Read-only, and never in the background.

    2. -
    3. 2

      Scan

      Ghost reads file metadata inside that boundary only — nothing moves yet.

    4. -
    5. 3

      Propose

      A deterministic planner suggests folders, moves, and dated renames.

    6. -
    7. 4

      Review & Approve

      Every move and rename is visible before/after, with conflicts and low-confidence items flagged. Nothing mutates until you approve.

    8. -
    9. 5

      Execute

      The executor re-checks policy and boundaries, then applies the change. No silent delete, no silent overwrite.

    10. -
    11. 6

      Audit & Undo

      The run is sealed into a local audit chain. Undo data is written first, so one click reverses it.

    12. -
    -
    - - -
    +
    -

    The sharper claim

    -

    “Approve before it acts” is table stakes. Local, reversible, and audited isn't.

    -

    Every serious automation now waits for a human. Ghost's difference is where it runs and what happens next: entirely on your machine, no silent delete or overwrite ever, every run sealed into an audit trail, and any run undoable in one click.

    +

    Positioning

    +

    What this is not.

    -
    -
    -

    Manual work

    -
      -
    • You're the safety net — a wrong delete or overwrite is permanent
    • -
    • No record of what moved where, or why
    • -
    • Nothing to undo once it's gone
    • -
    • Doesn't scale past a few folders a week
    • -
    -
    -
    -

    RPA suites & cloud agents

    -
      -
    • Often run your files and data through someone else's servers
    • -
    • “Human approves” the plan — but nothing stops a silent overwrite
    • -
    • Hard to see exactly what changed, or to reverse it
    • -
    • Procurement, licenses, and consultants before the first run
    • -
    -
    -
    -

    Ghost

    -
      -
    • Previews the exact plan before anything happens
    • -
    • Never deletes or overwrites silently — conflicts are flagged, not guessed
    • -
    • Runs entirely on your Mac or PC — no account, no uploads
    • -
    • Every run seals a tamper-evident receipt; every change is reversible
    • -
    • Deterministic code executes the approved plan, not a model's raw output
    • -
    -
    -
    -
    -
    -

    Keep doing it by hand

    -

    You are the safety net. A wrong delete or overwrite is permanent — if you even notice.

    -
    -
    -

    Script it yourself

    -

    Days to build, and one bad regex away from clobbering a folder.

    -
    -
    -

    Buy an RPA suite

    -

    Procurement, licenses, and consultants before the first run — usually cloud-hosted.

    -
    -
    -

    Ghost

    -

    Download, point it at a folder, and approve the exact plan — same machine, same day.

    -
    -
    -

    - “Automate the work, but never let it delete or overwrite silently — and prove every change. That's the whole trust model.” -

    -
    - - -
    -
    -

    Privacy by default

    -

    What Ghost will never do.

    -
    -
    - Local-first — data stays on your machine - Encrypted at rest when you set a vault password - Deny-by-default policy on every action - Undo written before any change - Tamper-evident audit chain - Replay interruptible at any step -
    -
    -

    No camera or microphone access.

    -

    No hidden screen capture or background recording.

    -

    No background email, browser, or tab reading.

    -

    No raw secret capture — password & payment fields are suppressed.

    -

    No cloud-first storage. Workflows stay on your device.

    -

    No account required. Ghost runs fully without signing in to anything.

    -

    Keyboard & pointer captured only while you record or an approved replay runs.

    +
    + Not a chatbot wrapper + Not a Zapier clone + Not unsupervised “agentic” magic + Not a fake customer page
    - -
    -
    -

    Honest status

    -

    What's real today — and what's next.

    -

    We'd rather under-promise. Here's exactly where things stand.

    -
    -
    -
    - Shipped -

    Organizer: scan → propose → approve → execute → audit → undo

    -

    Point Ghost at a folder or Zone. It scans read-only, proposes moves and dated renames, detects conflicts, and never overwrites or deletes silently. Every run seals into a tamper-evident audit chain with one-click undo.

    -
    -
    - Now -

    Record → replay → verify, as a trust-core capability

    -

    Record a data-entry routine, replay it with per-step verification, a sealed execution receipt, and undo written before every change — useful today, but not the front-page promise until reliability and verification are stronger.

    -
    -
    - Next -

    Scheduled runs & the first vertical playbook

    -

    Recurring “propose a plan every month-end” that still resolves to an approval and a sealed receipt, plus the accounting-close playbook (reconcile + signable close report) — building now, not fully shipped.

    -
    -
    - Later -

    Team audit layer & scoped connectors

    -

    Aggregate sealed receipts (never files) for a reviewer or auditor, and opt-in, scoped connectors to the systems teams already run — behind the experimental flag. Ghost proposes; deterministic code executes only what you approved.

    +
    +
    +

    Built in public. Aimed at a real business.

    +

    + I’m building Ghost as a serious systems project — trust pipeline, tests, and a runnable + cloud engine — with the long-term goal of selling implementation + seats to ops teams. + Today: open source, early, no logos. If you hire for product engineering or want to + follow the build, the repo is the résumé. +

    + +

    + Working name: Ghost (likely to change before a real go-to-market). Direction will not: + approval-gated execution with verification and audit. +

    - -
    +
    -

    Connect your AI

    -

    Use Ghost safely from the AI tools you already work with.

    +

    Archive

    +

    Legacy desktop preview (not the résumé piece).

    - Claude Desktop and Cursor can drive a saved-routine demo over local stdio: - list → preview → approve in Ghost → execute → receipt. - The AI proposes; you approve; deterministic code acts on your machine. - ChatGPT needs a remote HTTP/connector path that is still experimental, - so it is not supported on the stock local build. + An earlier local-first Mac/Windows Organizer build (v2.0.3) is still + downloadable for reference. The active work — and what to judge — is the cloud operator + under cloud/ on GitHub.

    -
      -
    1. - 1 -

      Install Ghost

      -

      Download for macOS or Windows below. No account, no cloud setup. Save one short routine first if you want the full list→receipt demo.

      -
    2. -
    3. - 2 -

      Add Ghost to your client

      -

      Paste into Claude Desktop's or Cursor's MCP config (Windows: C:\Program Files\Ghost\Ghost.exe):

      -
      {
      -  "mcpServers": {
      -    "ghost": {
      -      "command": "/Applications/Ghost.app/Contents/MacOS/Ghost",
      -      "args": ["mcp", "serve"]
      -    }
      -  }
      -}
      -
    4. -
    5. - 3 -

      Pair, then walk the routine flow

      -

      Enable a pairing code in Settings. From the client: list_routinespreview_routinerequest_routine_approval. Approve in Ghost, then execute_approved_routine and read the receipt — nothing runs until you approve locally.

      -
    6. -
    -

    - Local stdio only (Claude Desktop / Cursor). No listening socket, no relay, no uploads on the stock build. - ChatGPT is not supported on stock local stdio today. Step-by-step: docs/claude-ghost-demo.md in the repo. -

    - -
    +
    -

    Get Ghost

    -

    v2.0.3 for macOS and Windows.

    +

    Legacy · optional

    +

    Desktop preview downloads

    +

    v2.0.3 for macOS and Windows — superseded by the cloud build.

    macOS 12+ · Apple Silicon & Intel · Windows 10/11 · v2.0.3 — macOS notarized; Windows unsigned (SmartScreen may warn). All releases → - · SHA256SUMS + · + SHA256SUMS

    @@ -602,20 +418,25 @@

    Get Ghost

    diff --git a/public/main.js b/public/main.js index f58d5d5..19f3389 100644 --- a/public/main.js +++ b/public/main.js @@ -1,8 +1,8 @@ /* ============================================================ - Ghost marketing site — interactions + interactive demos. - Vanilla ES module, no dependencies. All demos are faithful - in-browser SIMULATIONS of the desktop app; nothing here - touches real files or the network. + Ghost marketing site — interactions. + Desktop Organizer demos were removed when the product pivoted + to the cloud AI operator; demo helpers below no-op if markup + is absent so this file stays safe to load. ============================================================ */ const reduce = window.matchMedia("(prefers-reduced-motion: reduce)"); @@ -40,13 +40,17 @@ function platformDetection() { document.body.dataset.platform = platform; const sub = $("#download-sub"); - if (platform === "mac" && sub) sub.textContent = "Detected macOS — v2.0.3 (notarized)."; - if (platform === "windows" && sub) sub.textContent = "Detected Windows — v2.0.3 (unsigned installer)."; + if (platform === "mac" && sub) { + sub.textContent = "Detected macOS — legacy desktop v2.0.3 (notarized). Not the current product."; + } + if (platform === "windows" && sub) { + sub.textContent = "Detected Windows — legacy desktop v2.0.3 (unsigned). Not the current product."; + } const primaryLabel = $("[data-download-label]"); if (primaryLabel) { - if (platform === "mac") primaryLabel.textContent = "Download v2.0.3 for macOS"; - else if (platform === "windows") primaryLabel.textContent = "Download v2.0.3 for Windows"; + if (platform === "mac") primaryLabel.textContent = "Legacy macOS v2.0.3"; + else if (platform === "windows") primaryLabel.textContent = "Legacy Windows v2.0.3"; } } @@ -136,6 +140,7 @@ function setupMobileNav() { function setupTabs() { const tabs = $$(".demo__tab"); const panels = $$(".demo__panel"); + if (!tabs.length) return; const select = (tab, focus = false) => { const name = tab.dataset.tab; @@ -726,7 +731,8 @@ window.addEventListener("DOMContentLoaded", () => { setupMobileNav(); setupTabs(); setupScrollSpy(); - organizerDemo(); - actionPlanDemo(); - replayDemo(); + // Legacy desktop demos — only if old markup is present. + if ($("[data-panel='organizer']")) organizerDemo(); + if ($("#ap-run")) actionPlanDemo(); + if ($("#rep-run")) replayDemo(); }); diff --git a/public/styles.css b/public/styles.css index 10cd047..c97434e 100644 --- a/public/styles.css +++ b/public/styles.css @@ -1,5 +1,5 @@ /* ============================================================ - Ghost — marketing surface. + Ghost — marketing surface (cloud AI operator). Dark-first "audit instrument" look: deep canvas, teal accent, editorial serif headers, precise mono labels. Proof-first. ============================================================ */ @@ -117,6 +117,33 @@ code { font-family: var(--mono); } } .skip-link:focus { left: 12px; } +/* ── Direction banner (product pivot notice) ── */ +.dir-banner { + position: relative; z-index: 60; + padding: 12px 24px; + text-align: center; + font-size: 13.5px; + line-height: 1.5; + color: var(--paper); + background: + linear-gradient(90deg, rgba(251, 191, 36, 0.14), rgba(45, 212, 191, 0.12)), + var(--surface-2); + border-bottom: 1px solid var(--amber); +} +.dir-banner strong { color: var(--paper-strong); font-weight: 650; } +.dir-banner em { font-style: normal; color: var(--teal-bright); } +.dir-banner a { + color: var(--teal-bright); + font-weight: 600; + margin-left: 6px; + text-decoration: underline; + text-underline-offset: 3px; +} +.dir-banner a:hover { color: var(--paper-strong); } +@media (max-width: 720px) { + .dir-banner { text-align: left; font-size: 13px; padding: 12px 16px; } +} + /* ───────────────────────── Buttons ───────────────────────── */ .btn { display: inline-flex; align-items: center; gap: 8px; justify-content: center; @@ -539,6 +566,152 @@ code { font-family: var(--mono); } } .connect-note { margin-top: 20px; text-align: center; color: var(--faint); font-size: 13.5px; font-family: var(--mono); letter-spacing: 0.01em; } +/* ── Niche / customers ── */ +.niche-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 14px; +} +.niche-card { + border: 1px solid var(--line); + border-radius: var(--r-lg); + padding: 26px; + background: var(--surface); +} +.niche-card h3 { font-size: 18px; margin-bottom: 8px; letter-spacing: 0; } +.niche-card p { color: var(--muted); font-size: 14.5px; } + +.never-row { + display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; + margin-top: 8px; +} +.never-row span { + display: inline-flex; align-items: center; gap: 8px; + padding: 10px 14px; border-radius: 999px; + border: 1px solid var(--line-2); background: var(--surface); + color: var(--muted); font-size: 14px; font-weight: 500; +} +.never-row .i { color: var(--red); } + +/* ── Pricing ── */ +.price-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 14px; +} +.price-card { + border: 1px solid var(--line); + border-radius: var(--r-lg); + padding: 26px 24px; + background: var(--surface); +} +.price-card h3 { font-size: 16px; letter-spacing: 0; margin-bottom: 10px; } +.price-card__amt { + font-family: var(--display); + font-size: 28px; + font-weight: 600; + color: var(--paper-strong); + margin-bottom: 10px; + letter-spacing: -0.02em; +} +.price-card__amt span { font-size: 14px; color: var(--muted); font-family: var(--sans); font-weight: 500; } +.price-card p:last-child { color: var(--muted); font-size: 14px; line-height: 1.5; } +.price-card--featured { + border-color: var(--teal-line); + background: linear-gradient(180deg, rgba(45, 212, 191, 0.1), var(--surface)); + box-shadow: 0 0 0 1px var(--teal-line); +} + +/* ── Early access CTA ── */ +.access { max-width: var(--maxw); margin: 0 auto; padding: 24px 24px 40px; } +.access__inner { + text-align: center; + border: 1px solid var(--teal-line); + border-radius: var(--r-xl); + padding: 56px 28px; + background: + radial-gradient(760px 340px at 50% -20%, rgba(45, 212, 191, 0.2), transparent 62%), + var(--surface); + box-shadow: var(--shadow-glow); +} +.access__inner h2 { font-size: clamp(1.8rem, 3.6vw, 2.6rem); } +.access__sub { color: var(--muted); font-size: 17px; margin: 14px auto 0; max-width: 640px; } +.access__actions { display: flex; gap: 13px; justify-content: center; flex-wrap: wrap; margin: 28px 0 16px; } +.access__note { color: var(--faint); font-size: 13px; max-width: 520px; margin: 0 auto; } + +.proof-list { + display: grid; + gap: 12px; + max-width: 820px; + margin: 0 auto; +} +.proof-list li { + display: flex; + gap: 14px; + align-items: flex-start; + list-style: none; + padding: 18px 20px; + border: 1px solid var(--line); + border-radius: var(--r); + background: var(--surface); +} +.proof-list .i { + margin-top: 3px; + color: var(--teal-bright); + font-size: 18px; + flex: none; +} +.proof-list li:last-child .i { color: var(--amber); } +.proof-list strong { + display: block; + font-size: 15px; + margin-bottom: 4px; + letter-spacing: 0; + font-family: var(--sans); +} +.proof-list span { color: var(--muted); font-size: 14px; line-height: 1.5; } +.proof-list code { + font-size: 12.5px; + padding: 1px 6px; + border-radius: 6px; + background: var(--surface-3); + border: 1px solid var(--line); +} + +.stack-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 12px; +} +.stack-card { + border: 1px solid var(--line); + border-radius: var(--r); + padding: 22px 20px; + background: var(--surface); +} +.stack-card h3 { + font-size: 15px; + letter-spacing: 0; + font-family: var(--mono); + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.1em; + color: var(--teal-bright); + margin-bottom: 8px; +} +.stack-card p { color: var(--muted); font-size: 14.5px; line-height: 1.45; } + +.hero__note a { color: var(--teal-bright); text-decoration: underline; text-underline-offset: 3px; } +.hero__note a:hover { color: var(--paper-strong); } + +.legacy .section__sub { max-width: 720px; } +.legacy-download .download__inner { + border-color: var(--line-2); + box-shadow: none; + background: var(--surface); +} +.legacy-download .download__inner .pill { margin-bottom: 16px; } + /* ───────────────────────── Download ───────────────────────── */ .download { max-width: var(--maxw); margin: 0 auto; padding: 44px 24px 120px; } .download__inner {