commit e781cbbbcbc64fc837b2e5dbf90d0a7052fc9bcf Author: metatroncubeswdev Date: Sun Oct 18 18:23:44 2026 -0400 Initial commit: Multi-page React website for CrawlerX diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..1255078 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "oxc"], + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c24580 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# CrawlerX โ€” Official Brand & Operations Platform Website + +The official multi-page marketing and product website for **CrawlerX**, the unified SEO operations platform built for modern agencies and search professionals. + +> **Find it. Fix it. Prove it.** + +--- + +## ๐ŸŒŸ Key Architecture & Highlights + +- **Multi-Page Routing**: Powered by `react-router-dom` with smooth scroll restoration: + - `/` โ€” Platform Overview, Live Interactive Audit Simulator, CMS Webhook Push, & ROI Calculator + - `/features` โ€” Deep dive into all 6 platform engines with live diagnostic mocks + - `/pricing` โ€” Multi-currency switcher (INR โ‚น, USD $, CAD $), Annual/Monthly toggle (2 months free discount), and detailed plan matrix + - `/agencies` โ€” Purpose-built Agency OS page with multi-client portfolio switcher and retainer economics + - `/compare` โ€” Honest comparison against legacy platforms (Semrush, Ahrefs, SE Ranking) + - `/blog` โ€” Filterable field notes, technical guides, and agency playbooks + - `/contact` โ€” 15-minute agency consultation & demo scheduling +- **Dual-Theme Design System**: Obsidian dark mode and high-contrast light mode with glassmorphic top navigation. +- **Brand Lockup**: Minimalist, integrated logo mark directly alongside the typography without enclosing container boxes. + +--- + +## ๐Ÿš€ Quick Start + +### 1. Install Dependencies +```bash +npm install +``` + +### 2. Run Local Development Server +```bash +npm run dev +``` +The application will launch on `http://localhost:5173`. + +### 3. Production Build +```bash +npm run build +``` +Generates an optimized static bundle in the `dist/` folder ready for deployment on Cloudflare Pages, Vercel, Netlify, or AWS Amplify. + +### 4. Local Build Preview +```bash +npm run preview +``` + +--- + +## ๐Ÿ“ Project Structure + +``` +crawlerx-react/ +โ”œโ”€โ”€ public/ # Favicons and static assets +โ”œโ”€โ”€ src/ +โ”‚ โ”œโ”€โ”€ components/ # Shared Header, Footer, BrandLogo, ScrollToTop +โ”‚ โ”œโ”€โ”€ pages/ # Multi-page views (Home, Features, Pricing, Agencies, Compare, Blog, Contact) +โ”‚ โ”œโ”€โ”€ assets/ # Brand SVGs and symbols +โ”‚ โ”œโ”€โ”€ App.jsx # Main Router and layout root +โ”‚ โ”œโ”€โ”€ main.jsx # React root with BrowserRouter +โ”‚ โ””โ”€โ”€ index.css # Design tokens, themes, and layout rules +โ”œโ”€โ”€ package.json +โ””โ”€โ”€ vite.config.js +``` + +--- + +## ๐Ÿข Organization +A product of **Metatroncube Software Solutions**. +- Production Web App: [app.crawlerx.co](https://app.crawlerx.co) diff --git a/index.html b/index.html new file mode 100644 index 0000000..f3831b8 --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + CrawlerX โ€” The SEO Operations Platform for Agencies | Find it. Fix it. Prove it. + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c173deb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1336 @@ +{ + "name": "crawlerx-react", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "crawlerx-react", + "version": "0.0.0", + "dependencies": { + "lucide-react": "^1.59.0", + "react": "^19.2.8", + "react-dom": "^19.2.8", + "react-router-dom": "^7.18.4" + }, + "devDependencies": { + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.7", + "@vitejs/plugin-react": "^6.1.1", + "oxlint": "^1.81.0", + "vite": "^8.3.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.154.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.154.0.tgz", + "integrity": "sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.88.0.tgz", + "integrity": "sha512-k6Fgkf86ubfeH4GvqYsRolfuVAp0pfYVZvifSlXNHPdMaWUOfxUrmLEeDD7hF6U2oJuhsVxhSWq86/xCJ+9MmA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.88.0.tgz", + "integrity": "sha512-AsIyhl9o1ejwtac7NMbhKpMdSml6NWR0ljKjZERxC8OHYDAW8o/Om9n1QHVLi4VCEUo42Zte2/Op9kyoGpJZMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.88.0.tgz", + "integrity": "sha512-qgBjB7eEKcCB4RqjXGuoSZq74g0wD09fWFJ+HWcCJcKaga8TeUHtb+BY0SsxdleSLBgx4RZ7qmgo0EzqEq7JoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.88.0.tgz", + "integrity": "sha512-sCz3X5Mw/xdzEzn4fsCt1Iq8NKJnGNfhR+b9B5k+4DysYAHsmIhYoocnBPiQ9kvY3+pUun2A0Z8Vtun/Nv6YoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.88.0.tgz", + "integrity": "sha512-xTOdYOIqCufgIj0knvxu86FBfovP6QBiD7ngNva01gb8xPQCD5gXkE5APGczH35zStim1O3zqvFbLQmY85xXRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.88.0.tgz", + "integrity": "sha512-BLadtw88NdYJBrAtC1dYzrPfSP2d5zgx6iuZycdD0YmZBJ2Nqbit9Z4PSaIb6gxK25dweArGMPbOmq/0ugwUPg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.88.0.tgz", + "integrity": "sha512-wILSczl/DaZsCcf7j7tvNbssp8hxEHIJxrv4j7+JjI3TAL1U/JTWbeUtoJJC/vo8+2hkTmHLYoKJjmiNbijdXw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.88.0.tgz", + "integrity": "sha512-jutT2Hy8JCuZuMwIFHo2HtyxfOfBJHyQxlBHBK1SL9W2f8n/WhjAP0FnDMz9d/mjhv9+QA0mx5AdQ9fDjsrFFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.88.0.tgz", + "integrity": "sha512-8N8iGV9hh4Lkeuq7QsEkjoXNRRflqR1G2qyoGYXcA0k5qllrdqmfylKEXyHIVERxqNDyMO4StqDQ0uLxXcBQAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.88.0.tgz", + "integrity": "sha512-5ydcQt3znNQ/rGEWYRvpS2cK9+T18P2VYgnyJ+eloEAwi9YUmsXy5VGrRqNWIK6qzWwHGnEE3ojVqqQNo+f0hA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.88.0.tgz", + "integrity": "sha512-iGx0uvFT54b/5DPJdEBCxYIrVB3v0uTy+JhRh3CyEp8/22BXDkG8rffkFwREdLsdj9mOrPbJYVOZw8ipcBuzjw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.88.0.tgz", + "integrity": "sha512-Wt47mKMWelVjRjuR7BCFxXkB0m79K1sTEbqMHRWciKUgo5iv7sWsF4RXSOyFYHD9zerNrkRZblnN273rhwOA1Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.88.0.tgz", + "integrity": "sha512-g3L12KCS4+1gtUt3RbJ4F+Yxx4LNmmZLEPfhd8rAHEJjJk2lAgNfnjGoP/phJyhG5WS6VbNYbJtadJelNfvTMA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.88.0.tgz", + "integrity": "sha512-og/XHVDOD9ZJgRiZkT9DgzQd4sr+JZW7e4l17Q/jVMZiIbeEd4uIu9iAoUbTF1gIvVZoRc4QDOxyVUvQGp4WHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.88.0.tgz", + "integrity": "sha512-EmhBsp+xuKb6YbZNEMLBo80Xw71AZOIm18do8ni/GLX/Lw1XzNhVYpbxO1KasYtoAvrGtCOdCPULRlIE0bPbTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.88.0.tgz", + "integrity": "sha512-DBUcx/KwYdg1DAz+G01P/GFv512J04EsZadbHptx2FTpWT/MWRg21ZToNHt9pnsfQRBQ3et/g+vqzbvrdAVbuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.88.0.tgz", + "integrity": "sha512-xeVd0n4XG5HvynxfYvXi6uB+JvZbVZataowPS8cYpMbYg9mwE4sSyElFQd4LVJFifq8bRLDSR18XgEildmcXAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.88.0.tgz", + "integrity": "sha512-MA6iOw//amleaz2mVMsZrA7NHlEexjTrhIxSMFCXQi6IUuQO+3Od00GZhr2iCYw6RFzMW36jkKK/WHBXMsoQAw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.88.0.tgz", + "integrity": "sha512-3Sz6rVWe8Dy+ufsXurFN1GX2dX43F/lQMSLelK9gFjiba7nHvLlqlhR5cHlWVnCpSqUY1hN9pyCX9XToe6ve6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.14.tgz", + "integrity": "sha512-aWR+XKH9+rW7m5fWq/5360J3mHycrx/o6xZM2DQFdJnTMdyP7/WzxPjhtLbVWdKo2y612/4U1bWqb3HQhiF7vg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.14.tgz", + "integrity": "sha512-QiVxHofl6A8lQU7WAtOUY4QMVZXohxwz7WJJoeh8NBEUyKfIkMRKhYyq8az/1RypNiIXzNTtiS6KwHz0erxYRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.14.tgz", + "integrity": "sha512-lTQOzHuBIooh3jIr5XINQkjPGEuGy+Dsy0meXDr6Sjty0b99kYgGh4uBC/8mJX1T0kC8d6S0aPP1Y+bHkh6aBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.14.tgz", + "integrity": "sha512-hyMKEGatjmBYCs/Q4sbIcL/GqpFEqsX3wc+HYVQ/85A4rxc1o7rPm4DUI4GV4k/h0ITddwFSGpqQunI14GXjTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.14.tgz", + "integrity": "sha512-u371GbXoVXrEgP20PwzoGNOdAOqAMhzo19JzzY+V4YmmnC+DTOoqdbMu+O+54emM59Mik/UdrtWgcuEDKWRPKA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.14.tgz", + "integrity": "sha512-BqwKsdZQf6EqVWr8fv2MrDYzAvOZ7+NYFSJESRGs87fkseEhs0TU9TXgRJTkZoRRkxTizyEg1LKUXfU3/78uqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.14.tgz", + "integrity": "sha512-SD9kY8M009x/7s57Z1dgUVlP5+uYBgKQK0Tkr1WIWngrtUJmRCW1RJFMY7QDla2khXhmg2i5Io7MUjcmZNZ/KQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.14.tgz", + "integrity": "sha512-BJ2CL19M6uuWesMgnqJzgxoI+N+eV7b0A9O9vLV42y+gitC41fNa8KElau1tHVzuLWX5GzEuxMPhAO0tQXQMkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.14.tgz", + "integrity": "sha512-4+Kl8daPV8NDHaD7mfCcc1pRM+Qg7ab8DyMm5FG5WoZgv4h2i3KFN1CybYBNbQqmuYm7ftJLvmMI1eHYJ22S/Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.14.tgz", + "integrity": "sha512-V/h8ePq1fKDrmtFMz6xcCN3DKvuvMRrwwD1q0PkBeeo4DpK64biaKvqWGVxqCeYKqeRk7gE7/iKPxLCn08O97A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.14.tgz", + "integrity": "sha512-WxalXzgrLVpKC93xfpaJ3gCXUWzeCr+FRCbDVD2mUAy4L6Vo3lNVz0epUEUpxPWJkLNYUwM4OSIikv36OJ9mLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.14.tgz", + "integrity": "sha512-3G3tnAmTpdk9jO3GQtyHXqeFD2SlecfTws/Y3M2mmj9nMBwwuLT4kur8sZKeu7ENUHSpVO3cIsm5A52LEWWwlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.14.tgz", + "integrity": "sha512-qyr5XiNGxm2ytx17vvtcJ9nXn6v1gENETi503bJx3OGwZ1tSonj7BosxbMa/xeAfSl5iS9X6KjEWYXLu6v1L7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.14.tgz", + "integrity": "sha512-oA4o5o0S2yB199YyYXDzKUv1Z56Rc+mgOjwm7Z/vJ9Z8igiDPYvoOuDyo6g7AK/ZaF09nPhDKVnGBcYHO11GXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.14.tgz", + "integrity": "sha512-9mE94bf2GZUaR/fUSXCMpBoWkctu421Mi0ORpm4zqfbkjKep7RxzPFa5etcGs5h+2KApoWBOA/hAJa/7saGgEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lucide-react": { + "version": "1.59.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.59.0.tgz", + "integrity": "sha512-5qgMyyCPU6OvnKpLS2t693+ZtiqA8oaSweWoUows0BLFKFf6V75m4+CptpmohZHpD5IuOVIBXHBBiv2vpLJmtw==", + "license": "ISC", + "peerDependencies": { + "@types/react": "*", + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/oxlint": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.88.0.tgz", + "integrity": "sha512-uIcFgw8BmqvFRGzH5+r7d2zJMEexwNSrEmM6WQNnGh3VkO0XYTEFoyxyNE6tjKMUib9Cue4XJA2DoWruO5D6aw==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/oxc-project" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.88.0", + "@oxlint/binding-android-arm64": "1.88.0", + "@oxlint/binding-darwin-arm64": "1.88.0", + "@oxlint/binding-darwin-x64": "1.88.0", + "@oxlint/binding-freebsd-x64": "1.88.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.88.0", + "@oxlint/binding-linux-arm-musleabihf": "1.88.0", + "@oxlint/binding-linux-arm64-gnu": "1.88.0", + "@oxlint/binding-linux-arm64-musl": "1.88.0", + "@oxlint/binding-linux-ppc64-gnu": "1.88.0", + "@oxlint/binding-linux-riscv64-gnu": "1.88.0", + "@oxlint/binding-linux-riscv64-musl": "1.88.0", + "@oxlint/binding-linux-s390x-gnu": "1.88.0", + "@oxlint/binding-linux-x64-gnu": "1.88.0", + "@oxlint/binding-linux-x64-musl": "1.88.0", + "@oxlint/binding-openharmony-arm64": "1.88.0", + "@oxlint/binding-win32-arm64-msvc": "1.88.0", + "@oxlint/binding-win32-ia32-msvc": "1.88.0", + "@oxlint/binding-win32-x64-msvc": "1.88.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2003", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz", + "integrity": "sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.1" + } + }, + "node_modules/react-router": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.4.tgz", + "integrity": "sha512-PUPQcMhMGRAslLcvtlPz/kmzBEWPhLdgLFrL7pLNepBL6dX0lWj4WD2cUYVgYCuT3jxvghYFg81cDTj44DhetQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.4.tgz", + "integrity": "sha512-yrfmJHIpDG7taCpqKjT1G5B6q3O2K+RN8/fgNf0lTjCwiPbQ0ei6vXX9ZjQR+7ld8Tr7Z5xmyMnZ8YJrphWQUw==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/rolldown": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.14.tgz", + "integrity": "sha512-eTBTTqMR6uHKLgcUqpJP8ntzDI6V4LYA8negAMBEI7gkgVvOdrx6VsvS2Ym+83KhOPdLCHWJu0w7UQFJZhHKNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.154.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.14", + "@rolldown/binding-android-arm64": "1.2.14", + "@rolldown/binding-darwin-arm64": "1.2.14", + "@rolldown/binding-darwin-x64": "1.2.14", + "@rolldown/binding-freebsd-x64": "1.2.14", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.14", + "@rolldown/binding-linux-arm64-gnu": "1.2.14", + "@rolldown/binding-linux-arm64-musl": "1.2.14", + "@rolldown/binding-linux-ppc64-gnu": "1.2.14", + "@rolldown/binding-linux-s390x-gnu": "1.2.14", + "@rolldown/binding-linux-x64-gnu": "1.2.14", + "@rolldown/binding-linux-x64-musl": "1.2.14", + "@rolldown/binding-openharmony-arm64": "1.2.14", + "@rolldown/binding-win32-arm64-msvc": "1.2.14", + "@rolldown/binding-win32-x64-msvc": "1.2.14" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vite": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz", + "integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.29", + "rolldown": "~1.2.12", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bed45a3 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "crawlerx-react", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "oxlint", + "preview": "vite preview" + }, + "dependencies": { + "lucide-react": "^1.59.0", + "react": "^19.2.8", + "react-dom": "^19.2.8", + "react-router-dom": "^7.18.4" + }, + "devDependencies": { + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.7", + "@vitejs/plugin-react": "^6.1.1", + "oxlint": "^1.81.0", + "vite": "^8.3.0" + } +} diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..7797f7c --- /dev/null +++ b/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 diff --git a/public/crawlerx-symbol.svg b/public/crawlerx-symbol.svg new file mode 100644 index 0000000..6047e06 --- /dev/null +++ b/public/crawlerx-symbol.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..321cc3a Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..f90339d --- /dev/null +++ b/src/App.css @@ -0,0 +1,184 @@ +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..803a8da --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,52 @@ +import React, { useState, useEffect } from 'react'; +import { Routes, Route } from 'react-router-dom'; +import Header from './components/Header'; +import Footer from './components/Footer'; +import ScrollToTop from './components/ScrollToTop'; + +// Page components +import HomePage from './pages/HomePage'; +import FeaturesPage from './pages/FeaturesPage'; +import PricingPage from './pages/PricingPage'; +import AgenciesPage from './pages/AgenciesPage'; +import ComparePage from './pages/ComparePage'; +import BlogPage from './pages/BlogPage'; +import ContactPage from './pages/ContactPage'; + +export default function App() { + const [theme, setTheme] = useState(() => { + return localStorage.getItem('crawlerx-theme') || + (window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'); + }); + + useEffect(() => { + document.documentElement.setAttribute('data-theme', theme); + localStorage.setItem('crawlerx-theme', theme); + }, [theme]); + + const toggleTheme = () => { + setTheme(prev => (prev === 'light' ? 'dark' : 'light')); + }; + + return ( +
+ +
+ + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + {/* Fallback route */} + } /> + + +
+
+ ); +} diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000..02251f4 Binary files /dev/null and b/src/assets/hero.png differ diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/components/BrandLogo.jsx b/src/components/BrandLogo.jsx new file mode 100644 index 0000000..dcdc85f --- /dev/null +++ b/src/components/BrandLogo.jsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +export default function BrandLogo({ size = 'default', showLink = true }) { + const isLarge = size === 'large'; + const iconSize = isLarge ? 42 : 36; + + const content = ( + <> + + + CrawlerX + + + ); + + if (!showLink) { + return
{content}
; + } + + return ( + + {content} + + ); +} diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx new file mode 100644 index 0000000..4ef187a --- /dev/null +++ b/src/components/Footer.jsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import BrandLogo from './BrandLogo'; + +export default function Footer() { + return ( + + ); +} diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 0000000..2780300 --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,101 @@ +import React, { useState } from 'react'; +import { NavLink, Link } from 'react-router-dom'; +import { Sun, Moon, Menu, X, ArrowUpRight } from 'lucide-react'; +import BrandLogo from './BrandLogo'; + +export default function Header({ theme, toggleTheme }) { + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + + const closeMenu = () => setMobileMenuOpen(false); + + return ( +
+
+ + + + +
+ + Sign in + + Start Free + + +
+
+ + {/* Mobile Drawer */} + {mobileMenuOpen && ( +
+ Overview + Features + Pricing & Plans + For Agencies & Freelancers + Compare Semrush + Insights & Guides + Contact & Demo + + Sign In to Dashboard โ†’ + +
+ )} +
+ ); +} diff --git a/src/components/ScrollToTop.jsx b/src/components/ScrollToTop.jsx new file mode 100644 index 0000000..ec85a04 --- /dev/null +++ b/src/components/ScrollToTop.jsx @@ -0,0 +1,12 @@ +import { useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; + +export default function ScrollToTop() { + const { pathname } = useLocation(); + + useEffect(() => { + window.scrollTo({ top: 0, left: 0, behavior: 'instant' }); + }, [pathname]); + + return null; +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..1c98a37 --- /dev/null +++ b/src/index.css @@ -0,0 +1,3393 @@ +@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,600;12..96,700;12..96,800&family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap'); + +/* ========================================================================== + CRAWLERX COMPLETE BRAND & OPERATIONS PLATFORM DESIGN SYSTEM + Apple & Linear Minimalist Dark Craft (Obsidian, Precision Hairlines, Rich Glows) + ========================================================================== */ + +:root { + /* Brand Tokens from Manual */ + --teal-primary: #0E6E6A; + --teal-vibrant: #3FB6AE; + --teal-glow: #4fd1c5; + --teal-deep: #073836; + --teal-soft: rgba(63, 182, 174, 0.12); + --teal-subtle: rgba(63, 182, 174, 0.05); + + --amber-primary: #C8811F; + --amber-vibrant: #E3A44A; + --amber-glow: #f6ad55; + --amber-soft: rgba(200, 129, 31, 0.14); + + /* Obsidian / Dark Surfaces */ + --bg-canvas: #090D11; + --bg-surface: #0E151C; + --bg-elevated: #141E28; + --bg-glass: rgba(14, 21, 28, 0.75); + --bg-card: rgba(20, 30, 40, 0.65); + --bg-card-hover: rgba(26, 40, 54, 0.85); + + /* Contrast / Secondary */ + --bg-cloud: #101720; + --bg-cloud-card: #151F2A; + + /* Typography Colors */ + --ink-primary: #F0F4F8; + --ink-secondary: #9EAFBF; + --ink-muted: #5F7488; + --ink-faint: #3A4A58; + + /* Borders & Dividers */ + --border-subtle: rgba(255, 255, 255, 0.08); + --border-medium: rgba(255, 255, 255, 0.14); + --border-strong: rgba(255, 255, 255, 0.22); + --border-glow-teal: rgba(63, 182, 174, 0.35); + + /* Shadows */ + --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.35); + --shadow-md: 0 12px 32px rgba(0, 0, 0, 0.5); + --shadow-lg: 0 24px 64px rgba(0, 0, 0, 0.7); + --shadow-glow-teal: 0 0 40px rgba(63, 182, 174, 0.15); + --shadow-glow-amber: 0 0 35px rgba(200, 129, 31, 0.2); + + /* Radii */ + --radius-xs: 6px; + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 18px; + --radius-xl: 24px; + --radius-full: 9999px; + + /* Typography */ + --font-display: 'Bricolage Grotesque', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + --font-ui: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + --font-mono: 'IBM Plex Mono', 'SF Mono', Menlo, Consolas, monospace; + + /* Transitions */ + --ease-apple: cubic-bezier(0.16, 1, 0.3, 1); + --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); + --duration-fast: 150ms; + --duration-normal: 250ms; +} + +/* Base Global Reset */ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + scroll-behavior: smooth; + scroll-padding-top: 80px; + color-scheme: dark; + -webkit-font-smoothing: antialiased; + background-color: var(--bg-canvas); +} + +#overview, +#agencies, +#pricing, +#compare, +.agency-pain-section, +.pricing-section, +.comparison-table-wrapper { + scroll-margin-top: 80px; +} + +body { + background-color: var(--bg-canvas); + color: var(--ink-primary); + font-family: var(--font-ui); + font-size: 16px; + line-height: 1.65; + overflow-x: hidden; + position: relative; + background-image: + radial-gradient(ellipse 80% 50% at 50% -20%, rgba(63, 182, 174, 0.12), transparent), + radial-gradient(circle 600px at 90% 20%, rgba(200, 129, 31, 0.05), transparent), + radial-gradient(circle 500px at 10% 60%, rgba(63, 182, 174, 0.04), transparent); + background-attachment: fixed; +} + +body::before { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + z-index: 9999; + opacity: 0.025; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E"); +} + +/* Headings */ +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-display); + font-weight: 700; + color: var(--ink-primary); + letter-spacing: -0.035em; + line-height: 1.12; + text-wrap: balance; +} + +h1 { font-size: clamp(2.6rem, 5.2vw, 4.8rem); } +h2 { font-size: clamp(2.0rem, 3.6vw, 3.2rem); } +h3 { font-size: clamp(1.35rem, 2.2vw, 1.8rem); } +h4 { font-size: 1.2rem; } + +p { + color: var(--ink-secondary); + font-weight: 400; + line-height: 1.7; +} + +a { + color: inherit; + text-decoration: none; + transition: color var(--duration-fast) ease; +} + +button, input, select, textarea { + font: inherit; + color: inherit; +} + +button { + cursor: pointer; + border: none; + background: none; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +:focus-visible { + outline: 2px solid var(--teal-vibrant); + outline-offset: 3px; +} + +/* ========================================================================== + NAVIGATION & BRAND + ========================================================================== */ + +.site-header { + position: sticky; + top: 0; + z-index: 1000; + width: 100%; + height: 72px; + background: rgba(9, 13, 17, 0.78); + backdrop-filter: blur(20px) saturate(190%); + -webkit-backdrop-filter: blur(20px) saturate(190%); + border-bottom: 1px solid var(--border-subtle); +} + +.header-inner { + max-width: 1280px; + height: 100%; + margin: 0 auto; + padding: 0 24px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 32px; +} + +/* BRAND LOGO LOCKUP: Integrated Icon & Wordmark (No Box, Larger Size) */ +.brand { + display: inline-flex; + align-items: center; + gap: 13px; + text-decoration: none; + white-space: nowrap; + font-family: var(--font-display); + font-weight: 700; + font-size: 26px; + letter-spacing: -0.04em; + color: #FFFFFF; + line-height: 1; + transition: opacity var(--duration-fast) ease; +} + +.brand:hover { + opacity: 0.92; +} + +.brand-symbol-box { + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + background: transparent !important; + border: none !important; + box-shadow: none !important; + padding: 0 !important; + margin: 0 !important; + border-radius: 0 !important; +} + +.brand-icon-svg, .brand-symbol-box svg { + width: 36px !important; + height: 36px !important; + max-width: 36px !important; + max-height: 36px !important; + flex-shrink: 0; + display: block; + overflow: visible; +} + +.brand-text { + display: inline-flex; + align-items: baseline; + line-height: 1; + color: inherit; +} + +.brand-text span, .brand-x { + color: var(--teal-vibrant); + font-weight: 700; +} + +.desktop-nav { + display: flex; + align-items: center; + gap: 8px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--border-subtle); + padding: 4px 6px; + border-radius: var(--radius-full); +} + +.desktop-nav a, .desktop-nav button.nav-link { + padding: 6px 14px; + font-size: 13.5px; + font-weight: 500; + color: var(--ink-secondary); + border-radius: var(--radius-full); + transition: color var(--duration-fast) ease, background-color var(--duration-fast) ease; +} + +.desktop-nav a:hover, .desktop-nav a.active, .desktop-nav button.nav-link.active { + color: #FFFFFF; + background: rgba(255, 255, 255, 0.08); +} + +.nav-badge-agency { + background: var(--amber-soft); + color: var(--amber-vibrant); + font-family: var(--font-mono); + font-size: 10px; + padding: 2px 7px; + border-radius: 999px; + margin-left: 4px; + border: 1px solid rgba(227, 164, 74, 0.3); +} + +.header-actions { + display: flex; + align-items: center; + gap: 14px; +} + +.signin { + font-size: 13.5px; + font-weight: 500; + color: var(--ink-secondary); + padding: 8px 14px; +} + +.signin:hover { color: #FFFFFF; } + +.menu-btn { + display: none; + color: var(--ink-primary); + padding: 8px 12px; + border-radius: var(--radius-sm); + background: rgba(255, 255, 255, 0.05); + border: 1px solid var(--border-subtle); + font-size: 18px; +} + +/* Mobile Drawer */ +.mobile-menu { + display: none; +} + +.mobile-menu.open { + display: flex; + flex-direction: column; + position: absolute; + top: 72px; + left: 0; + right: 0; + background: #0B1016; + border-bottom: 1px solid var(--border-medium); + padding: 24px; + gap: 16px; + z-index: 999; + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.7); +} + +.mobile-menu a { + font-size: 15.5px; + font-weight: 500; + color: var(--ink-primary); + padding: 8px 0; + border-bottom: 1px solid var(--border-subtle); +} + +/* ========================================================================== + BUTTONS & BADGES + ========================================================================== */ + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 10px 20px; + min-height: 42px; + border-radius: var(--radius-sm); + font-size: 14px; + font-weight: 600; + letter-spacing: -0.01em; + white-space: nowrap; + transition: all var(--duration-normal) var(--ease-apple); + position: relative; + border: 1px solid transparent; +} + +.btn-primary { + background: linear-gradient(180deg, #138E88 0%, #0E6E6A 100%); + color: #FFFFFF; + border: 1px solid rgba(63, 182, 174, 0.4); + box-shadow: 0 4px 16px rgba(14, 110, 106, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.2); +} + +.btn-primary:hover { + background: linear-gradient(180deg, #16A39C 0%, #107E79 100%); + border-color: var(--teal-vibrant); + box-shadow: 0 6px 24px rgba(63, 182, 174, 0.45); + transform: translateY(-1px); +} + +.btn-amber { + background: linear-gradient(180deg, #E3A44A 0%, #C8811F 100%); + color: #0B1015; + font-weight: 700; + border: 1px solid rgba(246, 173, 85, 0.5); + box-shadow: 0 4px 16px rgba(200, 129, 31, 0.35); +} + +.btn-amber:hover { + background: linear-gradient(180deg, #EEB463 0%, #D48E28 100%); + transform: translateY(-1px); +} + +.btn-outline { + background: rgba(255, 255, 255, 0.04); + color: var(--ink-primary); + border: 1px solid var(--border-medium); + backdrop-filter: blur(8px); +} + +.btn-outline:hover { + background: rgba(255, 255, 255, 0.08); + border-color: var(--border-strong); + color: #FFFFFF; + transform: translateY(-1px); +} + +.btn-lg { + padding: 13px 26px; + min-height: 48px; + font-size: 15px; + border-radius: var(--radius-md); +} + +/* Eyebrows */ +.eyebrow, .eyebrow-pill { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 5px 12px; + border-radius: var(--radius-full); + background: rgba(63, 182, 174, 0.08); + border: 1px solid rgba(63, 182, 174, 0.25); + color: var(--teal-vibrant); + font-family: var(--font-mono); + font-size: 11px; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + margin-bottom: 18px; +} + +.eyebrow-pill.amber { + background: rgba(200, 129, 31, 0.1); + border-color: rgba(227, 164, 74, 0.3); + color: var(--amber-vibrant); +} + +.status-dot { + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--teal-vibrant); + box-shadow: 0 0 10px var(--teal-vibrant); +} + +.status-dot.amber { + background: var(--amber-vibrant); + box-shadow: 0 0 10px var(--amber-vibrant); +} + +/* ========================================================================== + LAYOUT CONTAINERS (Support both legacy and modern classnames) + ========================================================================== */ + +.hero, .pagehero, .section, .agency-pain-section, .operating-loop-section, +.bento-section, .pricing-section, .final-cta-section, .trustline, .faq-section { + max-width: 1280px; + margin-left: auto; + margin-right: auto; + padding-left: 24px; + padding-right: 24px; +} + +.hero { + padding-top: 64px; + padding-bottom: 72px; + display: grid; + grid-template-columns: 1.05fr 0.95fr; + align-items: center; + gap: 56px; +} + +.pagehero { + padding-top: 64px; + padding-bottom: 36px; +} + +.pagehero.narrow { + max-width: 900px; +} + +.pagehero h1 { + margin: 16px 0; +} + +.pagehero p { + font-size: 18px; + max-width: 720px; +} + +.section { + padding-top: 72px; + padding-bottom: 72px; +} + +.section.compact { + padding-top: 24px; +} + +.sectionhead, .section-lead-center { + margin-bottom: 40px; +} + +.section-lead-center { + text-align: center; + max-width: 780px; + margin-left: auto; + margin-right: auto; +} + +.sectionhead h2, .section-lead-center h2 { + margin-bottom: 14px; +} + +.sectionhead p, .section-lead-center p { + font-size: 17px; +} + +/* Trustline */ +.trustline { + padding: 22px 24px; + display: flex; + justify-content: space-around; + gap: 20px; + border-top: 1px solid var(--border-subtle); + border-bottom: 1px solid var(--border-subtle); + font-family: var(--font-mono); + font-size: 11px; + color: var(--ink-muted); + letter-spacing: 0.1em; + text-transform: uppercase; +} + +/* Light Surface (Contrast in dark theme) */ +.light-surface { + background: rgba(255, 255, 255, 0.02); + border-top: 1px solid var(--border-subtle); + border-bottom: 1px solid var(--border-subtle); + max-width: 100%; + padding-left: max(24px, calc((100vw - 1280px) / 2)); + padding-right: max(24px, calc((100vw - 1280px) / 2)); +} + +/* ========================================================================== + HERO SEARCH & INTERACTIVE AUDIT WORKBENCH + ========================================================================== */ + +.hero-copy h1 { margin-bottom: 20px; } +.hero-copy h1 em { + font-style: normal; + background: linear-gradient(135deg, #3FB6AE 0%, #A2E8E4 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.hero-copy h1 .highlight-amber { + background: linear-gradient(135deg, #E3A44A 0%, #FBD38D 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.hero-copy > p { + font-size: 18.5px; + line-height: 1.65; + color: var(--ink-secondary); + max-width: 540px; + margin-bottom: 28px; +} + +.hero-pain-callout { + display: flex; + align-items: center; + gap: 12px; + background: rgba(200, 129, 31, 0.08); + border: 1px solid rgba(227, 164, 74, 0.25); + border-radius: var(--radius-md); + padding: 10px 14px; + margin-bottom: 28px; + max-width: 540px; +} + +.hero-pain-callout .pain-tag { + background: var(--amber-primary); + color: #090D11; + font-family: var(--font-mono); + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + padding: 3px 6px; + border-radius: 4px; + white-space: nowrap; +} + +.hero-pain-callout p { + font-size: 13.5px; + color: #F0F4F8; + line-height: 1.45; + margin: 0; +} + +.audit-search-wrapper { max-width: 540px; } + +.hero-audit-form, .audit-form { + display: flex; + align-items: center; + background: rgba(18, 27, 36, 0.95); + border: 1px solid var(--border-medium); + border-radius: var(--radius-md); + padding: 6px; + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.45); + position: relative; + transition: border-color var(--duration-fast) ease; +} + +.hero-audit-form:focus-within, .audit-form:focus-within { + border-color: var(--teal-vibrant); + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.45), var(--shadow-glow-teal); +} + +.url-input-icon { + padding-left: 12px; + color: var(--ink-muted); + display: flex; + align-items: center; +} + +.hero-audit-form input, .audit-form input { + flex: 1; + background: transparent; + border: none; + padding: 12px 14px; + font-size: 15px; + color: #FFFFFF; + outline: none; +} + +.hero-audit-form input::placeholder, .audit-form input::placeholder { + color: var(--ink-muted); +} + +.hero-audit-form button, .audit-form button { + border: 0; + border-radius: 7px; + background: var(--teal-primary); + color: white; + font-weight: 600; + padding: 12px 18px; + white-space: nowrap; + transition: background var(--duration-fast) ease; +} + +.hero-audit-form button:hover, .audit-form button:hover { + background: var(--teal-deep); +} + +.audit-demo-presets { + display: flex; + align-items: center; + gap: 8px; + margin-top: 12px; + font-size: 12px; + color: var(--ink-muted); + flex-wrap: wrap; +} + +.preset-chip { + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--border-subtle); + padding: 4px 10px; + border-radius: var(--radius-full); + font-family: var(--font-mono); + font-size: 11.5px; + color: var(--ink-secondary); + cursor: pointer; +} + +.preset-chip:hover { + background: rgba(63, 182, 174, 0.12); + border-color: var(--teal-vibrant); + color: #FFFFFF; +} + +.hero-trust-metrics { + display: flex; + align-items: center; + gap: 24px; + margin-top: 32px; + padding-top: 24px; + border-top: 1px solid var(--border-subtle); +} + +.trust-metric-item strong { + font-family: var(--font-display); + font-size: 20px; + font-weight: 700; + color: #FFFFFF; + display: block; +} + +.trust-metric-item span { + font-size: 12px; + color: var(--ink-muted); + font-family: var(--font-mono); +} + +/* Workbench Frame */ +.hero-visual { position: relative; } + +.product-ui-frame, .product-ui { + position: relative; + background: #0B1015; + border: 1px solid var(--border-medium); + border-radius: var(--radius-lg); + overflow: hidden; + box-shadow: 0 25px 70px rgba(0, 0, 0, 0.7); +} + +.ui-window-bar, .ui-top { + height: 46px; + background: #111720; + border-bottom: 1px solid var(--border-subtle); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 16px; +} + +.ui-window-controls, .ui-dots { display: flex; align-items: center; gap: 7px; } +.ui-dot, .ui-dots b { width: 9px; height: 9px; border-radius: 50%; display: block; } +.ui-dot.red, .ui-dots b:nth-child(1) { background: #FF5F56; } +.ui-dot.yellow, .ui-dots b:nth-child(2) { background: #FFBD2E; } +.ui-dot.green, .ui-dots b:nth-child(3) { background: #27C93F; } + +.ui-url-badge, .ui-top strong { + display: flex; + align-items: center; + gap: 8px; + background: rgba(0, 0, 0, 0.35); + border: 1px solid var(--border-subtle); + padding: 3px 12px; + border-radius: var(--radius-full); + font-family: var(--font-mono); + font-size: 11px; + color: var(--ink-secondary); +} + +.ui-status-tag, .small-label { + font-family: var(--font-mono); + font-size: 10px; + color: var(--teal-vibrant); + background: rgba(63, 182, 174, 0.12); + padding: 2px 7px; + border-radius: 4px; +} + +.ui-workbench, .ui-body { + display: grid; + grid-template-columns: 52px 1fr; + min-height: 380px; +} + +.ui-rail, .ui-sidebar { + background: #0D131A; + border-right: 1px solid var(--border-subtle); + display: flex; + flex-direction: column; + align-items: center; + padding: 16px 0; + gap: 18px; + color: var(--ink-muted); +} + +.ui-rail-icon, .ui-sidebar span { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--radius-sm); + color: var(--ink-muted); +} + +.ui-rail-icon.active, .ui-sidebar .on { + color: var(--teal-vibrant); + background: rgba(63, 182, 174, 0.1); +} + +.ui-content-area, .ui-main { + padding: 20px 24px; + display: flex; + flex-direction: column; + gap: 14px; + background: #0B1015; +} + +.ui-action-header, .ui-titleline { + display: flex; + justify-content: space-between; + align-items: flex-start; + padding-bottom: 12px; + border-bottom: 1px solid var(--border-subtle); +} + +.ui-action-title small, .ui-titleline small { + font-family: var(--font-mono); + font-size: 10px; + letter-spacing: 0.08em; + color: var(--teal-vibrant); + text-transform: uppercase; + display: block; +} + +.ui-action-title h3, .ui-titleline h3 { + font-size: 18px; + color: #FFFFFF; + margin-top: 4px; +} + +/* Health Gauge */ +.ui-health-gauge, .score { + display: flex; + align-items: center; + gap: 10px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--border-subtle); + padding: 4px 10px; + border-radius: var(--radius-md); +} + +.gauge-ring { + width: 40px; + height: 40px; + position: relative; + display: flex; + align-items: center; + justify-content: center; +} + +.gauge-svg { + transform: rotate(-90deg); + width: 40px; + height: 40px; +} + +.gauge-bg { + fill: none; + stroke: rgba(255, 255, 255, 0.1); + stroke-width: 4; +} + +.gauge-val { + fill: none; + stroke: var(--teal-vibrant); + stroke-width: 4; + stroke-linecap: round; + stroke-dasharray: 100; + stroke-dashoffset: 19; + transition: stroke-dashoffset 0.8s ease; +} + +.gauge-score-number { + position: absolute; + font-family: var(--font-mono); + font-weight: 700; + font-size: 13px; + color: #FFFFFF; +} + +.gauge-meta small { + display: block; + font-family: var(--font-mono); + font-size: 9px; + color: var(--ink-muted); +} + +.gauge-meta strong { + font-size: 11px; + color: var(--teal-vibrant); +} + +.ui-issue-card, .issue { + background: #111822; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); + padding: 12px 14px; +} + +.ui-issue-meta { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 10px; +} + +.pill-priority, .pill { + font-family: var(--font-mono); + font-size: 10px; + font-weight: 600; + padding: 2px 7px; + border-radius: 4px; + text-transform: uppercase; +} + +.pill-priority.high, .pill-amber { + background: rgba(200, 129, 31, 0.2); + color: var(--amber-vibrant); + border: 1px solid rgba(227, 164, 74, 0.4); +} + +.ui-issue-label { + font-size: 13px; + font-weight: 500; + color: #FFFFFF; +} + +.ui-diff-container, .codecmp { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; +} + +.diff-box, .codecmp > div { + background: rgba(0, 0, 0, 0.4); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-sm); + padding: 10px 12px; +} + +.diff-box.suggested { + border-color: rgba(63, 182, 174, 0.3); + background: rgba(63, 182, 174, 0.04); +} + +.diff-label, .codecmp small { + font-family: var(--font-mono); + font-size: 9.5px; + font-weight: 600; + letter-spacing: 0.05em; + color: var(--ink-muted); + text-transform: uppercase; + margin-bottom: 4px; + display: block; +} + +.diff-text, .codecmp p { + font-size: 12.5px; + color: var(--ink-secondary); + line-height: 1.45; + margin: 0; +} + +.diff-text.strikethrough, .codecmp .strike { + text-decoration: line-through; + opacity: 0.6; +} + +.diff-text.resolved { + color: #FFFFFF; + font-weight: 500; +} + +.ui-footer-bar, .ui-actions { + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 10px; + border-top: 1px solid var(--border-subtle); +} + +.ui-cms-status, .ui-actions span { + display: flex; + align-items: center; + gap: 8px; + font-size: 11.5px; + color: var(--ink-muted); + font-family: var(--font-mono); +} + +.cms-dot { + width: 6px; + height: 6px; + border-radius: 50%; + background: #27C93F; +} + +.ui-simulate-btn, .ui-actions button { + background: var(--amber-vibrant); + color: #090D11; + font-weight: 700; + font-size: 12px; + padding: 8px 14px; + border-radius: var(--radius-sm); + display: flex; + align-items: center; + gap: 6px; + border: 0; + cursor: pointer; +} + +/* ========================================================================== + AGENCY PAIN POINTS & CALCULATOR + ========================================================================== */ + +.agency-pain-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; + margin-bottom: 60px; +} + +.pain-card { + background: linear-gradient(180deg, rgba(20, 30, 42, 0.6) 0%, rgba(13, 19, 27, 0.9) 100%); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + padding: 32px 28px; + display: flex; + flex-direction: column; +} + +.pain-card-badge { + font-family: var(--font-mono); + font-size: 11px; + font-weight: 600; + color: var(--amber-vibrant); + background: rgba(200, 129, 31, 0.12); + padding: 4px 10px; + border-radius: 4px; + align-self: flex-start; + margin-bottom: 16px; +} + +.pain-card h3 { font-size: 21px; margin-bottom: 12px; } +.pain-card .legacy-trap { + font-size: 14px; + color: var(--ink-muted); + margin-bottom: 16px; + border-left: 2px solid rgba(255, 255, 255, 0.1); + padding-left: 12px; +} + +.pain-card .crawlerx-solution { + font-size: 14px; + color: var(--ink-primary); + margin-top: auto; + padding-top: 16px; + border-top: 1px solid var(--border-subtle); + display: flex; + align-items: flex-start; + gap: 8px; +} + +.calculator-container { + background: linear-gradient(180deg, #0F1722 0%, #0A0F16 100%); + border: 1px solid var(--border-medium); + border-radius: var(--radius-xl); + padding: 44px; + box-shadow: var(--shadow-lg), var(--shadow-glow-teal); +} + +.calc-grid { + display: grid; + grid-template-columns: 1.15fr 0.85fr; + gap: 48px; + align-items: center; +} + +.slider-group { margin-bottom: 24px; } +.slider-label-row { + display: flex; + justify-content: space-between; + align-items: baseline; + margin-bottom: 12px; +} + +.client-count-display { + font-family: var(--font-mono); + font-size: 24px; + font-weight: 700; + color: var(--teal-vibrant); +} + +input[type=range].agency-slider { + width: 100%; + height: 8px; + border-radius: 4px; + background: #1B2633; + outline: none; + -webkit-appearance: none; + cursor: pointer; +} + +input[type=range].agency-slider::-webkit-slider-thumb { + -webkit-appearance: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: var(--teal-vibrant); + border: 2px solid #FFFFFF; + box-shadow: 0 0 12px rgba(63, 182, 174, 0.6); + cursor: grab; +} + +.slider-markers { + display: flex; + justify-content: space-between; + margin-top: 8px; + font-family: var(--font-mono); + font-size: 11px; + color: var(--ink-muted); +} + +.calc-results-box { + background: rgba(14, 21, 30, 0.85); + border: 1px solid var(--border-medium); + border-radius: var(--radius-lg); + padding: 26px; + display: flex; + flex-direction: column; + gap: 16px; +} + +.compare-row { + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 12px; + border-bottom: 1px solid var(--border-subtle); +} + +.compare-row .tool-price { + font-family: var(--font-mono); + font-size: 16px; + font-weight: 600; +} + +.compare-row.crawlerx-highlight { + border-bottom: none; + background: rgba(63, 182, 174, 0.08); + padding: 12px; + border-radius: var(--radius-md); + border: 1px solid rgba(63, 182, 174, 0.3); +} + +.compare-row.crawlerx-highlight .tool-name { color: var(--teal-vibrant); font-weight: 600; } +.compare-row.crawlerx-highlight .tool-price { font-size: 20px; color: #FFFFFF; } + +.savings-total-banner { + background: linear-gradient(135deg, rgba(200, 129, 31, 0.2) 0%, rgba(63, 182, 174, 0.15) 100%); + border: 1px solid rgba(227, 164, 74, 0.35); + border-radius: var(--radius-md); + padding: 16px; + text-align: center; +} + +.savings-total-banner small { + display: block; + font-family: var(--font-mono); + font-size: 10.5px; + color: var(--amber-vibrant); + margin-bottom: 4px; +} + +.savings-total-banner .savings-amount { + font-family: var(--font-display); + font-size: 32px; + font-weight: 800; + color: #FFFFFF; +} + +/* ========================================================================== + OPERATING LOOP ("FIND IT. FIX IT. PROVE IT.") + ========================================================================== */ + +.loop-tabs-nav { + display: flex; + justify-content: center; + gap: 12px; + margin-bottom: 40px; +} + +.loop-tab-btn { + display: flex; + align-items: center; + gap: 10px; + padding: 12px 24px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-full); + color: var(--ink-secondary); + font-size: 14px; + font-weight: 600; +} + +.loop-tab-btn.active, .loop-tab-btn:hover { + background: rgba(63, 182, 174, 0.12); + border-color: var(--teal-vibrant); + color: #FFFFFF; +} + +.loop-display-card { + background: #0E151D; + border: 1px solid var(--border-medium); + border-radius: var(--radius-xl); + overflow: hidden; + display: grid; + grid-template-columns: 0.9fr 1.1fr; + align-items: center; +} + +.loop-copy-side { padding: 48px; } +.loop-copy-side h3 { font-size: 30px; margin-bottom: 14px; } +.loop-copy-side p { font-size: 16px; margin-bottom: 24px; } + +.loop-features-list { + list-style: none; + display: flex; + flex-direction: column; + gap: 10px; +} + +.loop-features-list li { + display: flex; + align-items: center; + gap: 10px; + font-size: 14px; +} + +.loop-interactive-side { + background: #090E14; + border-left: 1px solid var(--border-subtle); + padding: 36px; +} + +.loop-sandbox-card { + background: #0F1620; + border: 1px solid var(--border-subtle); + border-radius: 12px; + padding: 24px; + width: 100%; + color: #FFFFFF; +} + +.loop-sandbox-header { + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid var(--border-subtle); + padding-bottom: 12px; + margin-bottom: 16px; +} + +.loop-item-row { + display: flex; + align-items: center; + gap: 16px; + background: #141F2B; + padding: 12px; + border-radius: 8px; + border: 1px solid transparent; +} + +.loop-item-row strong { + display: block; + font-size: 14px; + color: #FFFFFF; +} + +.loop-item-row small { + color: #94A6B5; + font-size: 12px; +} + +.loop-code-pre { + background: #090D11; + padding: 14px; + border-radius: 8px; + font-family: var(--font-mono); + font-size: 12px; + border: 1px solid var(--border-subtle); + margin-bottom: 14px; + overflow-x: auto; + color: #F0F4F8; +} + +.loop-bar-inactive { + flex: 1; + background: #1E2B38; + border-radius: 4px 4px 0 0; +} + +/* ========================================================================== + BENTO GRID & LEGACY FEATURE GRID + ========================================================================== */ + +.bento-grid, .feature-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 20px; +} + +.bento-card, .feature-card { + background: linear-gradient(180deg, #111822 0%, #0C121A 100%); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + padding: 28px; + display: flex; + flex-direction: column; + transition: all var(--duration-normal) var(--ease-apple); +} + +.bento-card:hover, .feature-card:hover { + transform: translateY(-3px); + border-color: rgba(63, 182, 174, 0.4); + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5), var(--shadow-glow-teal); +} + +.bento-card-header, .feature-icon { + margin-bottom: 20px; +} + +.bento-icon-box, .feature-icon { + width: 40px; + height: 40px; + border-radius: var(--radius-md); + background: rgba(63, 182, 174, 0.1); + border: 1px solid rgba(63, 182, 174, 0.25); + display: flex; + align-items: center; + justify-content: center; + color: var(--teal-vibrant); + font-family: var(--font-mono); + font-size: 13px; + font-weight: 600; +} + +.bento-card h3, .feature-card h3 { font-size: 21px; margin-bottom: 8px; color: #fff; } +.bento-card p, .feature-card p { font-size: 14px; margin-bottom: 20px; } +.bento-preview-widget { + margin-top: auto; + background: rgba(0, 0, 0, 0.35); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-sm); + padding: 10px 12px; +} + +.card-more, .bento-link { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 13px; + font-weight: 600; + color: var(--teal-vibrant); + margin-top: 14px; +} + +/* ========================================================================== + PRICING GRIDS & COMPARISON + ========================================================================== */ + +.pricing-controls, .toggles { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + margin-bottom: 40px; + flex-wrap: wrap; +} + +.toggle-group { + display: flex; + align-items: center; + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-full); + padding: 4px; +} + +.toggle-btn, .toggle { + padding: 8px 16px; + border-radius: var(--radius-full); + font-size: 13px; + font-weight: 500; + color: var(--ink-secondary); + border: 0; + background: transparent; + cursor: pointer; +} + +.toggle-btn.active, .toggle.active { + background: #FFFFFF; + color: #090D11; + font-weight: 600; +} + +.save-pill { + background: rgba(227, 164, 74, 0.2); + color: var(--amber-vibrant); + font-family: var(--font-mono); + font-size: 10px; + padding: 2px 6px; + border-radius: 999px; + margin-left: 4px; +} + +.pricing-cards-grid, .pricing-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 18px; + align-items: stretch; +} + +.price-card { + background: linear-gradient(180deg, #111720 0%, #0B1017 100%); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + padding: 28px 22px; + display: flex; + flex-direction: column; + position: relative; + transition: transform var(--duration-normal) var(--ease-apple); +} + +.price-card:hover { + transform: translateY(-3px); + border-color: var(--border-medium); +} + +.price-card.featured { + background: linear-gradient(180deg, #131E2A 0%, #0E1620 100%); + border: 2px solid var(--teal-vibrant); + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.6), var(--shadow-glow-teal); +} + +.featured-banner, .price-tag { + font-family: var(--font-mono); + font-size: 10.5px; + font-weight: 700; + color: var(--teal-vibrant); + text-transform: uppercase; + margin-bottom: 8px; +} + +.plan-tier-label { + font-family: var(--font-mono); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.05em; + color: var(--teal-vibrant); + text-transform: uppercase; + margin-bottom: 6px; +} + +.price-card.featured .featured-banner { + background: var(--teal-vibrant); + color: #090D11; + padding: 3px 10px; + border-radius: var(--radius-full); + display: inline-block; + align-self: flex-start; +} + +.price-card h3 { font-size: 24px; margin-bottom: 4px; color: var(--ink-primary); } +.plan-tagline, .price-card p { font-size: 13px; color: var(--ink-secondary); min-height: 38px; } + +.price-figure, .price { + font-family: var(--font-display); + font-size: 34px; + font-weight: 700; + color: #FFFFFF; + margin: 16px 0; + display: flex; + align-items: baseline; + gap: 4px; +} + +.price-figure small, .price small { font-size: 13px; font-weight: 400; color: var(--ink-muted); } + +.plan-core-entitlement, .included { + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-sm); + padding: 8px 10px; + font-size: 13.5px; + font-weight: 600; + color: #FFFFFF; + margin-bottom: 16px; + text-align: center; +} + +.plan-core-entitlement span, .included span { + display: block; + font-size: 11px; + font-weight: 400; + color: var(--ink-muted); + margin-top: 4px; +} + +.plan-features-ul { + list-style: none; + display: flex; + flex-direction: column; + gap: 10px; + margin-bottom: 24px; + flex: 1; +} + +.plan-features-ul li { + font-size: 12.5px; + color: var(--ink-secondary); + display: flex; + align-items: flex-start; + gap: 8px; +} + +.price-card .btn { margin-top: auto; width: 100%; } + +/* Comparison Table */ +.comparison-table-wrapper, .table-scroll { + background: #0D131B; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + overflow-x: auto; + margin-top: 36px; +} + +.compare-table { + width: 100%; + border-collapse: collapse; + min-width: 680px; + text-align: left; +} + +.compare-table th, .compare-table td { + padding: 16px 20px; + border-bottom: 1px solid var(--border-subtle); + font-size: 13.5px; +} + +.compare-table th { background: #111822; color: #FFFFFF; font-weight: 600; } +.compare-table th.col-crawlerx, .compare-table td.col-crawlerx { + background: rgba(63, 182, 174, 0.06); + border-left: 1px solid rgba(63, 182, 174, 0.25); + border-right: 1px solid rgba(63, 182, 174, 0.25); +} + +/* ========================================================================== + FAQ & ACCORDION + ========================================================================== */ + +.faq-section { + max-width: 860px; + margin: 96px auto 40px; + padding: 0 24px; +} + +.faq-list { + display: flex; + flex-direction: column; + gap: 16px; + margin-top: 40px; +} + +.faq-item { + background: rgba(18, 26, 35, 0.85); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: var(--radius-lg); + overflow: hidden; + transition: all var(--duration-normal) var(--ease-apple); +} + +.faq-item:hover { + border-color: rgba(63, 182, 174, 0.4); + background: rgba(22, 33, 45, 0.95); +} + +.faq-item.open { + border-color: rgba(63, 182, 174, 0.6); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.5), var(--shadow-glow-teal); + background: rgba(16, 26, 36, 0.98); +} + +.faq-question { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 22px 28px; + font-family: var(--font-display); + font-size: 17px; + font-weight: 600; + color: #FFFFFF; + text-align: left; + background: none; + border: none; + cursor: pointer; + transition: color var(--duration-fast) ease; +} + +.faq-question:hover { + color: var(--teal-vibrant); +} + +.faq-chevron { + font-size: 11px; + color: var(--ink-muted); + transition: transform var(--duration-normal) var(--ease-apple), color var(--duration-fast) ease; +} + +.faq-item.open .faq-chevron { + transform: rotate(180deg); + color: var(--teal-vibrant); +} + +.faq-answer { + display: none; + padding: 0 28px 24px; + color: var(--ink-secondary); + font-size: 15px; + line-height: 1.7; + border-top: 1px solid rgba(255, 255, 255, 0.04); + padding-top: 18px; +} + +.faq-item.open .faq-answer { + display: block; +} + +/* ========================================================================== + BLOG & ARTICLES LISTING + ========================================================================= */ + +.filters { + display: flex; + gap: 10px; + flex-wrap: wrap; + margin-bottom: 36px; +} + +.filters span { + padding: 6px 14px; + border-radius: var(--radius-full); + font-size: 13px; + font-weight: 500; + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--border-subtle); + color: var(--ink-secondary); + cursor: pointer; +} + +.filters span:hover { + background: rgba(63, 182, 174, 0.12); + border-color: var(--teal-vibrant); + color: #fff; +} + +.articles { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 24px; +} + +.article-card { + background: #0E151D; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + overflow: hidden; + display: flex; + flex-direction: column; + text-decoration: none; + transition: all var(--duration-normal) var(--ease-apple); +} + +.article-card:hover { + transform: translateY(-4px); + border-color: rgba(63, 182, 174, 0.4); + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5), var(--shadow-glow-teal); +} + +.article-art { + height: 160px; + background: linear-gradient(135deg, #131E2A 0%, #0B1017 100%); + color: var(--teal-vibrant); + font-family: var(--font-display); + font-weight: 800; + font-size: 64px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + border-bottom: 1px solid var(--border-subtle); +} + +.article-art span { + position: absolute; + left: 20px; + bottom: 14px; + font-family: var(--font-mono); + font-size: 11px; + font-weight: 500; + color: #94a6b5; + letter-spacing: 0.08em; +} + +.article-copy { + padding: 24px; + display: flex; + flex-direction: column; + flex: 1; +} + +.article-copy h3 { + font-size: 21px; + margin: 8px 0 6px; + color: #FFFFFF; +} + +.article-copy p { + font-size: 14px; + margin-bottom: 20px; + flex: 1; +} + +.article-copy > span:last-child { + font-size: 13px; + font-weight: 600; + color: var(--teal-vibrant); +} + +/* Article Prose */ +.prose-wrap { + display: grid; + grid-template-columns: 1fr 280px; + gap: 56px; + max-width: 1280px; + margin: 32px auto 80px; +} + +.prose { + color: var(--ink-secondary); + font-size: 17px; + line-height: 1.8; +} + +.prose h2 { font-size: 26px; margin: 36px 0 16px; color: #fff; } +.side-note { + background: #0E151D; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); + padding: 24px; + display: flex; + flex-direction: column; + gap: 12px; + align-self: flex-start; + position: sticky; + top: 96px; +} + +.side-note .eyebrow { + margin-bottom: 6px; +} + +.side-note a { + font-size: 13.5px; + color: var(--ink-secondary); + padding: 4px 0; + border-left: 2px solid transparent; + padding-left: 8px; + transition: all var(--duration-fast) ease; +} + +.side-note a:hover { + color: var(--teal-vibrant); + border-left-color: var(--teal-vibrant); + padding-left: 12px; +} + +/* Contact & Forms */ +.contact-grid { + display: grid; + grid-template-columns: 1.2fr 0.8fr; + gap: 48px; + max-width: 1280px; + margin: 0 auto 80px; +} + +.contact-form label, .auth-card label { + display: flex; + flex-direction: column; + gap: 6px; + font-size: 13px; + font-weight: 500; + color: #fff; + margin-bottom: 14px; +} + +.contact-form input, .contact-form select, .contact-form textarea, .auth-card input { + background: #111822; + border: 1px solid var(--border-medium); + border-radius: var(--radius-sm); + padding: 12px 14px; + color: #fff; + width: 100%; +} + +.contact-aside { + background: #0E151D; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + padding: 32px; +} + +/* Auth Layout */ +.auth-layout { + display: grid; + grid-template-columns: 1fr 1fr; + min-height: 600px; + max-width: 1100px; + margin: 40px auto; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-xl); + overflow: hidden; + background: #0E151D; +} + +.auth-card { padding: 56px; } +.auth-product { + background: #080D12; + border-left: 1px solid var(--border-subtle); + padding: 48px; + display: flex; + flex-direction: column; + justify-content: center; +} + +/* ========================================================================== + FOOTER (Strictly Constrained Vector Logo & Clean Nav) + ========================================================================== */ + +.footer, .site-footer { + border-top: 1px solid var(--border-subtle); + background: #070B0E; + padding: 56px 24px 28px; + margin-top: 60px; +} + +.footer-inner { + max-width: 1280px; + margin: 0 auto; + display: grid; + grid-template-columns: 2fr repeat(3, 1fr); + gap: 48px; + padding-bottom: 40px; + border-bottom: 1px solid var(--border-subtle); +} + +.footer-brand p { + font-size: 13.5px; + color: var(--ink-muted); + margin: 14px 0 6px; + max-width: 280px; +} + +.footer-brand small { + font-size: 11.5px; + color: var(--ink-faint); + display: block; +} + +.footer-inner > div:not(:first-child), .footer-col { + display: flex; + flex-direction: column; + gap: 10px; +} + +.footer-inner h4, .footer-col h4 { + font-family: var(--font-mono); + font-size: 11px; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--teal-vibrant); + margin-bottom: 12px; +} + +.footer-inner a:not(.brand), .footer-col a { + font-size: 13.5px; + color: var(--ink-secondary); +} + +.footer-inner a:not(.brand):hover, .footer-col a:hover { + color: #FFFFFF; +} + +.footer-bottom { + max-width: 1280px; + margin: 24px auto 0; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 12px; + color: var(--ink-muted); +} + +/* ========================================================================== + RESPONSIVE BREAKPOINTS + ========================================================================== */ + +@media (max-width: 1024px) { + .hero { grid-template-columns: 1fr; gap: 48px; padding-top: 48px; } + .agency-pain-grid, .calc-grid, .loop-display-card, .contact-grid, .auth-layout { grid-template-columns: 1fr; } + .bento-grid, .feature-grid, .pricing-cards-grid, .pricing-grid, .articles { grid-template-columns: repeat(2, 1fr); } + .prose-wrap { grid-template-columns: 1fr; } +} + +@media (max-width: 820px) { + .desktop-nav, .signin { display: none; } + .menu-btn { display: block; } + .footer-inner { grid-template-columns: 1fr 1fr; } +} + +@media (max-width: 600px) { + .hero { padding: 36px 16px 48px; } + .bento-grid, .feature-grid, .pricing-cards-grid, .pricing-grid, .articles { grid-template-columns: 1fr; } + .footer-inner { grid-template-columns: 1fr; } + .footer-bottom { flex-direction: column; gap: 10px; text-align: center; } + .calculator-container { padding: 20px 16px; } + .loop-copy-side { padding: 24px 16px; } + .ui-diff-container, .codecmp { grid-template-columns: 1fr; } + .ui-workbench, .ui-body { grid-template-columns: 1fr; } + .ui-rail, .ui-sidebar { display: none; } +} + +/* ========================================================================== + THEME TOGGLE BUTTON + ========================================================================== */ + +.theme-toggle-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border-radius: var(--radius-full); + background: rgba(255, 255, 255, 0.05); + border: 1px solid var(--border-subtle); + color: var(--ink-secondary); + cursor: pointer; + transition: all var(--duration-fast) ease; + padding: 0; + flex-shrink: 0; +} + +.theme-toggle-btn:hover { + color: var(--ink-primary); + background: rgba(255, 255, 255, 0.1); + border-color: var(--border-medium); + transform: scale(1.04); +} + +.theme-toggle-btn svg { + width: 17px; + height: 17px; + stroke: currentColor; + transition: transform var(--duration-normal) var(--ease-spring); +} + +.theme-toggle-btn:hover svg { + transform: rotate(15deg); +} + +/* ========================================================================== + LIGHT MODE DESIGN SYSTEM (Apple & Linear Minimalist Porcelain Craft) + ========================================================================== */ + +[data-theme="light"], +html.theme-light, +body.theme-light { + color-scheme: light; + + /* Brand Tokens - Light Context */ + --teal-primary: #0E6E6A; + --teal-vibrant: #0E6E6A; + --teal-glow: #148d88; + --teal-deep: #073836; + --teal-soft: rgba(14, 110, 106, 0.08); + --teal-subtle: rgba(14, 110, 106, 0.04); + + --amber-primary: #C8811F; + --amber-vibrant: #B46E13; + --amber-glow: #e08b17; + --amber-soft: rgba(200, 129, 31, 0.10); + + /* Light Canvas & Porcelain Surfaces */ + --bg-canvas: #F8FAFC; + --bg-surface: #FFFFFF; + --bg-elevated: #F1F5F9; + --bg-glass: rgba(255, 255, 255, 0.85); + --bg-card: #FFFFFF; + --bg-card-hover: #FFFFFF; + + /* Cloud & Contrast */ + --bg-cloud: #F1F5F9; + --bg-cloud-card: #FFFFFF; + + /* Typography Colors */ + --ink-primary: #0F172A; + --ink-secondary: #475569; + --ink-muted: #64748B; + --ink-faint: #94A3B8; + + /* Borders & Dividers */ + --border-subtle: rgba(15, 23, 42, 0.08); + --border-medium: rgba(15, 23, 42, 0.14); + --border-strong: rgba(15, 23, 42, 0.22); + --border-glow-teal: rgba(14, 110, 106, 0.3); + + /* Shadows - Apple Diffused Ambient */ + --shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.05); + --shadow-md: 0 12px 30px -8px rgba(15, 23, 42, 0.08), 0 4px 12px -2px rgba(15, 23, 42, 0.03); + --shadow-lg: 0 24px 50px -12px rgba(15, 23, 42, 0.12); + --shadow-glow-teal: 0 12px 32px rgba(14, 110, 106, 0.10); + --shadow-glow-amber: 0 12px 32px rgba(200, 129, 31, 0.10); +} + +/* Background Gradients in Light Mode */ +[data-theme="light"] body, +body.theme-light { + background-color: #F8FAFC; + color: #0F172A; + background-image: + radial-gradient(ellipse 80% 50% at 50% -10%, rgba(14, 110, 106, 0.08), transparent), + radial-gradient(circle 600px at 90% 20%, rgba(200, 129, 31, 0.04), transparent), + radial-gradient(circle 500px at 10% 60%, rgba(14, 110, 106, 0.03), transparent); +} + +[data-theme="light"] body::before, +body.theme-light::before { + opacity: 0.015; +} + +/* Header & Nav in Light Mode */ +[data-theme="light"] .site-header, +.theme-light .site-header { + background: rgba(255, 255, 255, 0.88); + border-bottom: 1px solid rgba(15, 23, 42, 0.08); + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.03); +} + +[data-theme="light"] .brand, +.theme-light .brand { + color: #0F172A; +} + +[data-theme="light"] .brand-x, +[data-theme="light"] .brand-text span, +.theme-light .brand-x, +.theme-light .brand-text span { + color: #0E6E6A; +} + +[data-theme="light"] .desktop-nav, +.theme-light .desktop-nav { + background: rgba(15, 23, 42, 0.04); + border: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .desktop-nav a, +[data-theme="light"] .desktop-nav button.nav-link, +[data-theme="light"] .desktop-nav .nav-link, +.theme-light .desktop-nav a, +.theme-light .desktop-nav button.nav-link, +.theme-light .desktop-nav .nav-link { + color: #475569 !important; + background: transparent; + border: none; + cursor: pointer; +} + +[data-theme="light"] .desktop-nav a:hover, +[data-theme="light"] .desktop-nav button.nav-link:hover, +[data-theme="light"] .desktop-nav .nav-link:hover, +.theme-light .desktop-nav a:hover, +.theme-light .desktop-nav button.nav-link:hover, +.theme-light .desktop-nav .nav-link:hover { + color: #0F172A !important; + background: rgba(15, 23, 42, 0.06) !important; +} + +[data-theme="light"] .desktop-nav a.active, +[data-theme="light"] .desktop-nav button.nav-link.active, +[data-theme="light"] .desktop-nav .nav-link.active, +.theme-light .desktop-nav a.active, +.theme-light .desktop-nav button.nav-link.active, +.theme-light .desktop-nav .nav-link.active { + color: #0E6E6A !important; + background: #FFFFFF !important; + box-shadow: 0 1px 4px rgba(15, 23, 42, 0.08), 0 0 0 1px rgba(15, 23, 42, 0.06) !important; + font-weight: 700 !important; +} + +[data-theme="light"] .signin, +.theme-light .signin { + color: #475569; +} + +[data-theme="light"] .signin:hover, +.theme-light .signin:hover { + color: #0F172A; +} + +[data-theme="light"] .theme-toggle-btn, +.theme-light .theme-toggle-btn { + background: rgba(15, 23, 42, 0.05); + border: 1px solid rgba(15, 23, 42, 0.1); + color: #475569; +} + +[data-theme="light"] .theme-toggle-btn:hover, +.theme-light .theme-toggle-btn:hover { + background: rgba(15, 23, 42, 0.09); + color: #0F172A; +} + +/* Buttons in Light Mode */ +[data-theme="light"] .btn-primary, +.theme-light .btn-primary { + background: #0E6E6A; + color: #FFFFFF; + box-shadow: 0 2px 8px rgba(14, 110, 106, 0.22); +} + +[data-theme="light"] .btn-primary:hover, +.theme-light .btn-primary:hover { + background: #094e4b; + box-shadow: 0 4px 14px rgba(14, 110, 106, 0.32); +} + +[data-theme="light"] .btn-secondary, +.theme-light .btn-secondary { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.15); + color: #0F172A; + box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05); +} + +[data-theme="light"] .btn-secondary:hover, +.theme-light .btn-secondary:hover { + background: #F8FAFC; + border-color: rgba(15, 23, 42, 0.25); + color: #0E6E6A; +} + +/* Eyebrow & Badges in Light Mode */ +[data-theme="light"] .eyebrow-pill, +[data-theme="light"] .eyebrow, +.theme-light .eyebrow-pill, +.theme-light .eyebrow { + background: rgba(14, 110, 106, 0.08) !important; + border-color: rgba(14, 110, 106, 0.28) !important; + color: #074744 !important; + font-weight: 700 !important; +} + +[data-theme="light"] .nav-badge-agency, +.theme-light .nav-badge-agency { + background: rgba(200, 129, 31, 0.12) !important; + border-color: rgba(200, 129, 31, 0.28) !important; + color: #9A3412 !important; + font-weight: 700 !important; +} + +/* Mobile Drawer in Light Mode */ +[data-theme="light"] .mobile-menu.open, +.theme-light .mobile-menu.open { + background: #FFFFFF !important; + border-bottom: 1px solid rgba(15, 23, 42, 0.1) !important; + box-shadow: 0 16px 40px rgba(15, 23, 42, 0.1) !important; +} + +[data-theme="light"] .mobile-menu a, +.theme-light .mobile-menu a { + color: #0F172A !important; + border-bottom: 1px solid rgba(15, 23, 42, 0.08) !important; +} + +/* Hero Simulator Bar in Light Mode */ +[data-theme="light"] .hero-audit-form, +.theme-light .hero-audit-form { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.14); + box-shadow: 0 10px 32px rgba(15, 23, 42, 0.07); +} + +[data-theme="light"] .hero-audit-form input, +.theme-light .hero-audit-form input { + color: #0F172A; +} + +[data-theme="light"] .preset-btn, +[data-theme="light"] .preset-chip, +.theme-light .preset-btn, +.theme-light .preset-chip { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.12); + color: #475569; +} + +[data-theme="light"] .preset-btn:hover, +[data-theme="light"] .preset-chip:hover, +.theme-light .preset-btn:hover, +.theme-light .preset-chip:hover { + background: rgba(14, 110, 106, 0.08); + border-color: #0E6E6A; + color: #0E6E6A; +} + +/* Hero Pain Callout & Stats in Light Mode */ +[data-theme="light"] .hero-pain-callout, +.theme-light .hero-pain-callout { + background: rgba(200, 129, 31, 0.08); + border: 1.5px solid rgba(200, 129, 31, 0.35); +} + +[data-theme="light"] .hero-pain-callout .pain-tag, +.theme-light .hero-pain-callout .pain-tag { + background: #C8811F; + color: #FFFFFF; + font-weight: 700; +} + +[data-theme="light"] .hero-pain-callout p, +.theme-light .hero-pain-callout p { + color: #1E293B; + font-weight: 500; +} + +[data-theme="light"] .hero-pain-callout p strong, +.theme-light .hero-pain-callout p strong { + color: #0F172A; + font-weight: 700; +} + +[data-theme="light"] .hero-trust-metrics, +.theme-light .hero-trust-metrics { + border-top: 1px solid rgba(15, 23, 42, 0.1); +} + +[data-theme="light"] .trust-metric-item strong, +.theme-light .trust-metric-item strong { + color: #0F172A !important; + font-weight: 800; +} + +[data-theme="light"] .trust-metric-item span, +.theme-light .trust-metric-item span { + color: #475569 !important; + font-weight: 500; +} + +/* Hero Mockup Workbench in Light Mode */ +[data-theme="light"] .hero-mockup-window, +.theme-light .hero-mockup-window { + box-shadow: 0 24px 60px -12px rgba(15, 23, 42, 0.16), 0 0 0 1px rgba(15, 23, 42, 0.06); +} + +/* Cards & Bento in Light Mode */ +[data-theme="light"] .bento-card, +[data-theme="light"] .feature-card, +[data-theme="light"] .pain-card, +[data-theme="light"] .price-card, +[data-theme="light"] .article-card, +[data-theme="light"] .faq-item, +[data-theme="light"] .contact-aside, +[data-theme="light"] .side-note, +[data-theme="light"] .auth-card, +[data-theme="light"] .loop-display-card, +[data-theme="light"] .comparison-table-wrapper, +[data-theme="light"] .calculator-container, +.theme-light .bento-card, +.theme-light .feature-card, +.theme-light .pain-card, +.theme-light .price-card, +.theme-light .article-card, +.theme-light .faq-item, +.theme-light .contact-aside, +.theme-light .side-note, +.theme-light .auth-card, +.theme-light .loop-display-card, +.theme-light .comparison-table-wrapper, +.theme-light .calculator-container { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.09); + box-shadow: 0 4px 20px -2px rgba(15, 23, 42, 0.05), 0 1px 3px rgba(15, 23, 42, 0.02); +} + +[data-theme="light"] .bento-card:hover, +[data-theme="light"] .feature-card:hover, +[data-theme="light"] .pain-card:hover, +[data-theme="light"] .price-card:hover, +[data-theme="light"] .article-card:hover, +[data-theme="light"] .faq-item:hover, +.theme-light .bento-card:hover, +.theme-light .feature-card:hover, +.theme-light .pain-card:hover, +.theme-light .price-card:hover, +.theme-light .article-card:hover, +.theme-light .faq-item:hover { + box-shadow: 0 16px 36px -4px rgba(15, 23, 42, 0.08), 0 0 0 1px rgba(14, 110, 106, 0.25); + border-color: rgba(14, 110, 106, 0.35); +} + +[data-theme="light"] .bento-card h3, +[data-theme="light"] .feature-card h3, +[data-theme="light"] .pain-card h3, +[data-theme="light"] .price-card h3, +.theme-light .bento-card h3, +.theme-light .feature-card h3, +.theme-light .pain-card h3, +.theme-light .price-card h3 { + color: #0F172A !important; + font-weight: 700; +} + +[data-theme="light"] .bento-card p, +[data-theme="light"] .feature-card p, +[data-theme="light"] .pain-card p, +[data-theme="light"] .price-card p, +[data-theme="light"] .plan-tagline, +.theme-light .bento-card p, +.theme-light .feature-card p, +.theme-light .pain-card p, +.theme-light .price-card p, +.theme-light .plan-tagline { + color: #475569 !important; +} + +/* Pain Cards in Light Mode */ +[data-theme="light"] .pain-card-badge, +.theme-light .pain-card-badge { + background: rgba(200, 129, 31, 0.12) !important; + color: #9A3412 !important; + border: 1px solid rgba(200, 129, 31, 0.25); + font-weight: 700; +} + +[data-theme="light"] .pain-card .legacy-trap, +.theme-light .pain-card .legacy-trap { + color: #475569 !important; + border-left-color: rgba(15, 23, 42, 0.15) !important; +} + +[data-theme="light"] .pain-card .legacy-trap strong, +.theme-light .pain-card .legacy-trap strong { + color: #1E293B !important; +} + +[data-theme="light"] .pain-card .crawlerx-solution, +.theme-light .pain-card .crawlerx-solution { + color: #0F172A !important; + border-top: 1px solid rgba(15, 23, 42, 0.08) !important; +} + +[data-theme="light"] .pain-card .crawlerx-solution strong, +.theme-light .pain-card .crawlerx-solution strong { + color: #0E6E6A !important; +} + +[data-theme="light"] .bento-preview-widget, +.theme-light .bento-preview-widget { + background: #F1F5F9; + border: 1px solid rgba(15, 23, 42, 0.09); +} + +[data-theme="light"] .bento-preview-widget div, +.theme-light .bento-preview-widget div { + font-weight: 700; + color: #0E6E6A !important; +} + +[data-theme="light"] .bento-preview-widget div[style*="var(--teal-vibrant)"], +.theme-light .bento-preview-widget div[style*="var(--teal-vibrant)"] { + color: #0E6E6A !important; +} + +[data-theme="light"] .bento-preview-widget div[style*="var(--amber-vibrant)"], +[data-theme="light"] .bento-preview-widget div[style*="amber"], +.theme-light .bento-preview-widget div[style*="var(--amber-vibrant)"], +.theme-light .bento-preview-widget div[style*="amber"] { + color: #9A3412 !important; +} + +[data-theme="light"] .bento-preview-widget div[style*="#27C93F"], +.theme-light .bento-preview-widget div[style*="#27C93F"] { + color: #15803d !important; +} + +[data-theme="light"] .pain-card.crawlerx-relief, +.theme-light .pain-card.crawlerx-relief { + background: rgba(14, 110, 106, 0.04); + border: 1.5px solid rgba(14, 110, 106, 0.35); +} + +[data-theme="light"] .bento-tag, +[data-theme="light"] .bento-index, +.theme-light .bento-tag, +.theme-light .bento-index { + background: rgba(14, 110, 106, 0.08); + border-color: rgba(14, 110, 106, 0.2); + color: #0E6E6A; + font-weight: 700; +} + +/* Pricing in Light Mode */ +[data-theme="light"] .price-card.popular, +[data-theme="light"] .price-card.featured, +.theme-light .price-card.popular, +.theme-light .price-card.featured { + border: 2px solid #0E6E6A !important; + box-shadow: 0 16px 40px rgba(14, 110, 106, 0.12) !important; + background: #FFFFFF !important; +} + +[data-theme="light"] .popular-badge, +[data-theme="light"] .featured-banner, +.theme-light .popular-badge, +.theme-light .featured-banner { + background: #0E6E6A !important; + color: #FFFFFF !important; + font-weight: 700; +} + +[data-theme="light"] .plan-tier-label, +.theme-light .plan-tier-label { + color: #0E6E6A !important; + font-weight: 700; +} + +[data-theme="light"] .plan-figure, +[data-theme="light"] .price-figure, +.theme-light .plan-figure, +.theme-light .price-figure { + color: #0F172A; +} + +[data-theme="light"] .plan-core-entitlement, +[data-theme="light"] .included, +.theme-light .plan-core-entitlement, +.theme-light .included { + background: rgba(14, 110, 106, 0.06); + border-color: rgba(14, 110, 106, 0.18); + color: #0E6E6A; + font-weight: 700; +} + +[data-theme="light"] .plan-features-ul li, +.theme-light .plan-features-ul li { + color: #334155; +} + +[data-theme="light"] .toggle-wrapper, +.theme-light .toggle-wrapper { + background: rgba(15, 23, 42, 0.05); + border: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .toggle-btn, +.theme-light .toggle-btn { + color: #64748B; +} + +[data-theme="light"] .toggle-btn.active, +.theme-light .toggle-btn.active { + background: #FFFFFF; + color: #0F172A; + box-shadow: 0 2px 6px rgba(15, 23, 42, 0.08); +} + +/* Comparison Table in Light Mode */ +[data-theme="light"] .compare-table th, +.theme-light .compare-table th { + background: #F8FAFC; + color: #0F172A; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .compare-table td, +.theme-light .compare-table td { + border-bottom: 1px solid rgba(15, 23, 42, 0.06); + color: #475569; +} + +[data-theme="light"] .compare-table td strong, +.theme-light .compare-table td strong { + color: #0F172A; +} + +[data-theme="light"] .compare-table th.col-crawlerx, +[data-theme="light"] .compare-table td.col-crawlerx, +.theme-light .compare-table th.col-crawlerx, +.theme-light .compare-table td.col-crawlerx { + background: rgba(14, 110, 106, 0.04); + border-left: 1px solid rgba(14, 110, 106, 0.15); + border-right: 1px solid rgba(14, 110, 106, 0.15); +} + +[data-theme="light"] .compare-table .badge-check, +.theme-light .compare-table .badge-check { + color: #0E6E6A !important; + font-weight: 700; +} + +/* Calculator in Light Mode */ +[data-theme="light"] .calc-results-box, +.theme-light .calc-results-box { + background: #F8FAFC; + border: 1px solid rgba(15, 23, 42, 0.12); + box-shadow: 0 4px 16px rgba(15, 23, 42, 0.04); +} + +[data-theme="light"] .compare-row, +.theme-light .compare-row { + border-bottom: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .compare-row .tool-name, +.theme-light .compare-row .tool-name { + color: #475569; +} + +[data-theme="light"] .compare-row .tool-price, +.theme-light .compare-row .tool-price { + color: #0F172A; + font-weight: 700; +} + +[data-theme="light"] .compare-row.crawlerx-highlight, +.theme-light .compare-row.crawlerx-highlight { + background: rgba(14, 110, 106, 0.08); + border: 1.5px solid rgba(14, 110, 106, 0.35); +} + +[data-theme="light"] .compare-row.crawlerx-highlight .tool-name, +.theme-light .compare-row.crawlerx-highlight .tool-name { + color: #0E6E6A; + font-weight: 700; +} + +[data-theme="light"] .compare-row.crawlerx-highlight .tool-price, +.theme-light .compare-row.crawlerx-highlight .tool-price { + color: #0E6E6A; + font-weight: 800; +} + +[data-theme="light"] .savings-total-banner, +.theme-light .savings-total-banner { + background: linear-gradient(135deg, rgba(200, 129, 31, 0.08) 0%, rgba(14, 110, 106, 0.08) 100%); + border: 1.5px solid rgba(14, 110, 106, 0.3); +} + +[data-theme="light"] .savings-total-banner small, +.theme-light .savings-total-banner small { + color: #8A4B06; + font-weight: 700; +} + +[data-theme="light"] .savings-total-banner .savings-amount, +.theme-light .savings-total-banner .savings-amount { + color: #0E6E6A; + font-weight: 800; +} + +[data-theme="light"] .savings-total-banner p, +.theme-light .savings-total-banner p { + color: #475569; +} + +[data-theme="light"] input[type=range].agency-slider, +.theme-light input[type=range].agency-slider { + background: #CBD5E1; +} + +[data-theme="light"] input[type=range].agency-slider::-webkit-slider-thumb, +.theme-light input[type=range].agency-slider::-webkit-slider-thumb { + background: #0E6E6A; + border: 2px solid #FFFFFF; +} + +[data-theme="light"] .slider-markers span, +.theme-light .slider-markers span { + color: #64748B; + font-weight: 500; +} + +[data-theme="light"] .calc-card-out, +.theme-light .calc-card-out { + background: #F8FAFC; + border: 1px solid rgba(14, 110, 106, 0.2); +} + +[data-theme="light"] .calc-savings-number, +.theme-light .calc-savings-number { + color: #0E6E6A; +} + +/* Loop Switcher in Light Mode */ +[data-theme="light"] .loop-tabs-nav, +.theme-light .loop-tabs-nav { + gap: 12px; +} + +[data-theme="light"] .loop-tab-btn, +.theme-light .loop-tab-btn { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.12); + color: #475569; +} + +[data-theme="light"] .loop-tab-btn:hover, +.theme-light .loop-tab-btn:hover { + background: rgba(14, 110, 106, 0.06); + border-color: #0E6E6A; + color: #0E6E6A; +} + +[data-theme="light"] .loop-tab-btn.active, +.theme-light .loop-tab-btn.active { + background: #0E6E6A; + border-color: #0E6E6A; + color: #FFFFFF; + box-shadow: 0 4px 14px rgba(14, 110, 106, 0.3); +} + +[data-theme="light"] .loop-tab-btn.active .tab-step-num, +.theme-light .loop-tab-btn.active .tab-step-num { + color: #FFFFFF; + opacity: 0.9; +} + +[data-theme="light"] .loop-display-card, +.theme-light .loop-display-card { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.1); +} + +[data-theme="light"] .loop-copy-side h3, +.theme-light .loop-copy-side h3 { + color: #0F172A; +} + +[data-theme="light"] .loop-copy-side p, +.theme-light .loop-copy-side p { + color: #475569; +} + +[data-theme="light"] .loop-features-list li, +.theme-light .loop-features-list li { + color: #1E293B; +} + +[data-theme="light"] .step-eyebrow, +.theme-light .step-eyebrow { + color: #0E6E6A; + font-weight: 700; +} + +[data-theme="light"] .loop-interactive-side, +.theme-light .loop-interactive-side { + background: #F8FAFC; + border-left: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .loop-interactive-side > div, +[data-theme="light"] .loop-sandbox-card, +.theme-light .loop-interactive-side > div, +.theme-light .loop-sandbox-card { + background: #FFFFFF !important; + border: 1px solid rgba(15, 23, 42, 0.12) !important; + color: #0F172A !important; + box-shadow: 0 4px 16px rgba(15, 23, 42, 0.04); +} + +[data-theme="light"] .loop-sandbox-header, +.theme-light .loop-sandbox-header { + border-bottom: 1px solid rgba(15, 23, 42, 0.08) !important; +} + +[data-theme="light"] .loop-item-row, +.theme-light .loop-item-row { + background: #F8FAFC !important; + border: 1px solid rgba(15, 23, 42, 0.08) !important; +} + +[data-theme="light"] .loop-item-row strong, +.theme-light .loop-item-row strong { + color: #0F172A !important; +} + +[data-theme="light"] .loop-item-row small, +.theme-light .loop-item-row small { + color: #475569 !important; + font-weight: 500; +} + +[data-theme="light"] .loop-code-pre, +[data-theme="light"] .loop-interactive-side pre, +.theme-light .loop-code-pre, +.theme-light .loop-interactive-side pre { + background: #F1F5F9 !important; + border: 1px solid rgba(15, 23, 42, 0.12) !important; + color: #0F172A !important; +} + +[data-theme="light"] .loop-bar-inactive, +.theme-light .loop-bar-inactive { + background: #CBD5E1 !important; +} + +[data-theme="light"] .loop-interactive-side strong, +.theme-light .loop-interactive-side strong { + color: #0F172A !important; +} + +[data-theme="light"] .loop-interactive-side small, +.theme-light .loop-interactive-side small { + color: #475569 !important; +} + +[data-theme="light"] .loop-interactive-side [style*="background: #141F2B"], +[data-theme="light"] .loop-interactive-side [style*="background:#141F2B"], +[data-theme="light"] .loop-interactive-side [style*="rgb(20, 31, 43)"], +.theme-light .loop-interactive-side [style*="background: #141F2B"], +.theme-light .loop-interactive-side [style*="background:#141F2B"], +.theme-light .loop-interactive-side [style*="rgb(20, 31, 43)"] { + background: #F8FAFC !important; + border: 1px solid rgba(15, 23, 42, 0.08) !important; +} + +/* FAQ in Light Mode */ +[data-theme="light"] .faq-question, +.theme-light .faq-question { + color: #0F172A; +} + +[data-theme="light"] .faq-question:hover, +.theme-light .faq-question:hover { + color: #0E6E6A; +} + +[data-theme="light"] .faq-item.open, +.theme-light .faq-item.open { + border-color: rgba(14, 110, 106, 0.45); + box-shadow: 0 8px 24px rgba(14, 110, 106, 0.08); + background: #FFFFFF; +} + +[data-theme="light"] .faq-chevron, +.theme-light .faq-chevron { + color: #0E6E6A; +} + +[data-theme="light"] .faq-answer, +.theme-light .faq-answer { + color: #475569; + border-top: 1px solid rgba(15, 23, 42, 0.06); +} + +/* Articles in Light Mode */ +[data-theme="light"] .article-art, +.theme-light .article-art { + background: linear-gradient(135deg, #E6F4F2 0%, #F1F5F9 100%); + color: #0E6E6A; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .article-copy h3, +.theme-light .article-copy h3 { + color: #0F172A; +} + +[data-theme="light"] .filters span, +.theme-light .filters span { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.1); + color: #475569; +} + +[data-theme="light"] .filters span:hover, +.theme-light .filters span:hover { + background: rgba(14, 110, 106, 0.08); + border-color: #0E6E6A; + color: #0E6E6A; +} + +/* Forms & Inputs in Light Mode */ +[data-theme="light"] .contact-form input, +[data-theme="light"] .contact-form select, +[data-theme="light"] .contact-form textarea, +[data-theme="light"] .auth-card input, +.theme-light .contact-form input, +.theme-light .contact-form select, +.theme-light .contact-form textarea, +.theme-light .auth-card input { + background: #FFFFFF; + border: 1px solid rgba(15, 23, 42, 0.18); + color: #0F172A; +} + +[data-theme="light"] .auth-product, +.theme-light .auth-product { + background: #F8FAFC; + border-left: 1px solid rgba(15, 23, 42, 0.08); +} + +/* Pre-footer CTA & Footer in Light Mode */ +[data-theme="light"] .pre-footer-cta h2, +.theme-light .pre-footer-cta h2 { + color: #0F172A; +} + +[data-theme="light"] .pre-footer-cta p, +.theme-light .pre-footer-cta p { + color: #475569; +} + +[data-theme="light"] .footer, +[data-theme="light"] .site-footer, +.theme-light .footer, +.theme-light .site-footer { + background: #F1F5F9; + border-top: 1px solid rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .footer-brand p, +[data-theme="light"] .footer-brand small, +.theme-light .footer-brand p, +.theme-light .footer-brand small { + color: #64748B; +} + +[data-theme="light"] .footer-inner h4, +[data-theme="light"] .footer-col h4, +.theme-light .footer-inner h4, +.theme-light .footer-col h4 { + color: #0E6E6A; +} + +[data-theme="light"] .footer-inner a:not(.brand), +[data-theme="light"] .footer-col a, +.theme-light .footer-inner a:not(.brand), +.theme-light .footer-col a { + color: #475569; +} + +[data-theme="light"] .footer-inner a:not(.brand):hover, +[data-theme="light"] .footer-col a:hover, +.theme-light .footer-inner a:not(.brand):hover, +.theme-light .footer-col a:hover { + color: #0E6E6A; +} + +[data-theme="light"] .footer-bottom, +.theme-light .footer-bottom { + color: #64748B; + border-top: 1px solid rgba(15, 23, 42, 0.08); +} + +/* ========================================================================== + BLOG / JOURNAL PAGE STYLING + ========================================================================== */ +.blog-controls-bar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 20px; + flex-wrap: wrap; + margin-bottom: 32px; + padding-bottom: 20px; + border-bottom: 1px solid var(--border-subtle); +} + +.category-pills { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.category-pill { + padding: 8px 16px; + font-size: 13.5px; + font-weight: 500; + border-radius: var(--radius-full); + background: var(--bg-surface); + color: var(--ink-secondary); + border: 1px solid var(--border-subtle); + cursor: pointer; + transition: all var(--duration-fast) ease; +} + +.category-pill:hover { + color: var(--ink-primary); + border-color: var(--border-medium); +} + +.category-pill.active { + background: var(--teal-soft); + color: var(--teal-vibrant); + border-color: var(--teal-vibrant); + font-weight: 600; +} + +[data-theme="light"] .category-pill.active, +.theme-light .category-pill.active { + background: rgba(14, 110, 106, 0.12); + color: var(--teal-primary); + border-color: var(--teal-primary); +} + +.search-input-wrapper { + position: relative; + display: flex; + align-items: center; + min-width: 260px; +} + +.search-icon { + position: absolute; + left: 14px; + color: var(--ink-muted); + pointer-events: none; +} + +.blog-search-input { + width: 100%; + padding: 9px 16px 9px 38px; + font-size: 13.5px; + background: var(--bg-surface); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-full); + color: var(--ink-primary); + outline: none; + transition: border-color var(--duration-fast) ease; +} + +.blog-search-input:focus { + border-color: var(--teal-vibrant); +} + +/* Featured Article Card */ +.featured-article-card { + position: relative; + background: linear-gradient(135deg, rgba(20, 30, 42, 0.95), rgba(12, 19, 27, 0.95)); + border: 1px solid rgba(63, 182, 174, 0.3); + border-radius: var(--radius-xl); + padding: 36px 40px; + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4); +} + +[data-theme="light"] .featured-article-card, +.theme-light .featured-article-card { + background: #FFFFFF; + border-color: rgba(14, 110, 106, 0.25); + box-shadow: 0 12px 30px rgba(15, 23, 42, 0.07); +} + +.featured-badge { + display: inline-block; + background: var(--teal-vibrant); + color: #062220; + font-weight: 700; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 4px 12px; + border-radius: var(--radius-full); + margin-bottom: 18px; +} + +[data-theme="light"] .featured-badge, +.theme-light .featured-badge { + background: var(--teal-primary); + color: #FFFFFF; +} + +.article-meta { + display: flex; + align-items: center; + gap: 10px; + font-size: 13px; + color: var(--ink-muted); + margin-bottom: 12px; +} + +.article-category { + color: var(--teal-vibrant); + font-weight: 600; +} + +[data-theme="light"] .article-category, +.theme-light .article-category { + color: var(--teal-primary); +} + +.featured-content h2 { + font-size: 26px; + line-height: 1.3; + margin-bottom: 14px; +} + +.featured-content p { + color: var(--ink-secondary); + font-size: 15px; + line-height: 1.6; + max-width: 800px; + margin-bottom: 24px; +} + +.featured-footer { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: 16px; + padding-top: 20px; + border-top: 1px solid var(--border-subtle); +} + +.author-info { + display: flex; + align-items: center; + gap: 12px; +} + +.author-avatar { + width: 38px; + height: 38px; + border-radius: 50%; + background: var(--teal-soft); + color: var(--teal-vibrant); + border: 1px solid var(--border-subtle); + display: flex; + align-items: center; + justify-content: center; + font-weight: 700; + font-size: 13px; +} + +.author-info strong { + display: block; + font-size: 13.5px; + color: var(--ink-primary); +} + +.author-info small { + color: var(--ink-muted); + font-size: 12px; +} + +/* Articles Grid */ +.articles-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); + gap: 24px; +} + +.article-card-modern { + background: var(--bg-card); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + padding: 26px; + display: flex; + flex-direction: column; + transition: all var(--duration-fast) ease; +} + +.article-card-modern:hover { + transform: translateY(-3px); + border-color: rgba(63, 182, 174, 0.4); + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35); +} + +[data-theme="light"] .article-card-modern, +.theme-light .article-card-modern { + background: #FFFFFF; + border-color: rgba(15, 23, 42, 0.08); +} + +[data-theme="light"] .article-card-modern:hover, +.theme-light .article-card-modern:hover { + border-color: rgba(14, 110, 106, 0.3); + box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06); +} + +.article-card-top { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 14px; +} + +.article-card-tag { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 12px; + font-weight: 600; + color: var(--teal-vibrant); + font-family: var(--font-mono); +} + +[data-theme="light"] .article-card-tag, +.theme-light .article-card-tag { + color: var(--teal-primary); +} + +.article-badge-pill { + font-size: 11px; + font-weight: 600; + padding: 2px 8px; + border-radius: 999px; + background: var(--amber-soft); + color: var(--amber-vibrant); + border: 1px solid rgba(227, 164, 74, 0.3); +} + +.article-card-title { + font-size: 18px; + line-height: 1.4; + margin-bottom: 10px; + color: var(--ink-primary); +} + +.article-card-excerpt { + font-size: 13.5px; + color: var(--ink-secondary); + line-height: 1.6; + margin-bottom: 20px; + flex-grow: 1; +} + +.article-card-bottom { + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 16px; + border-top: 1px solid var(--border-subtle); + font-size: 12.5px; +} + +.article-card-meta { + display: flex; + align-items: center; + gap: 8px; + color: var(--ink-muted); +} + +.read-more-link { + display: inline-flex; + align-items: center; + gap: 4px; + color: var(--teal-vibrant); + font-weight: 600; + text-decoration: none; + transition: gap var(--duration-fast) ease; +} + +[data-theme="light"] .read-more-link, +.theme-light .read-more-link { + color: var(--teal-primary); +} + +.read-more-link:hover { + gap: 7px; +} + +/* Newsletter Section */ +.newsletter-form { + display: flex; + gap: 12px; + max-width: 480px; + margin: 24px auto 0; +} + +.newsletter-input { + flex-grow: 1; + padding: 12px 18px; + border-radius: var(--radius-md); + border: 1px solid var(--border-subtle); + background: var(--bg-surface); + color: var(--ink-primary); + font-size: 14px; + outline: none; +} + +.newsletter-input:focus { + border-color: var(--teal-vibrant); +} + +/* ========================================================================== + CONTACT PAGE STYLING + ========================================================================== */ +.contact-layout-grid { + display: grid; + grid-template-columns: 1.6fr 1fr; + gap: 36px; + align-items: start; +} + +@media (max-width: 900px) { + .contact-layout-grid { + grid-template-columns: 1fr; + } +} + +.contact-form-card { + background: var(--bg-card); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-xl); + padding: 36px 40px; + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4); +} + +[data-theme="light"] .contact-form-card, +.theme-light .contact-form-card { + background: #FFFFFF; + border-color: rgba(15, 23, 42, 0.08); + box-shadow: 0 12px 32px rgba(15, 23, 42, 0.06); +} + +.form-heading { + font-size: 22px; + margin-bottom: 6px; +} + +.form-subheading { + font-size: 14px; + color: var(--ink-secondary); + margin-bottom: 24px; +} + +.form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; + margin-bottom: 16px; +} + +@media (max-width: 600px) { + .form-row { + grid-template-columns: 1fr; + } +} + +.form-field { + display: flex; + flex-direction: column; + gap: 6px; + margin-bottom: 16px; +} + +.form-field label { + font-size: 13px; + font-weight: 500; + color: var(--ink-secondary); +} + +.form-field input, +.form-field select, +.form-field textarea { + width: 100%; + padding: 11px 14px; + font-size: 14px; + background: var(--bg-surface); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-sm); + color: var(--ink-primary); + outline: none; + font-family: inherit; + transition: border-color var(--duration-fast) ease; +} + +.form-field input:focus, +.form-field select:focus, +.form-field textarea:focus { + border-color: var(--teal-vibrant); +} + +.form-disclaimer { + display: block; + font-size: 12px; + color: var(--ink-muted); + margin-top: 12px; + text-align: center; +} + +.contact-success-state { + text-align: center; + padding: 40px 20px; +} + +.success-icon-badge { + display: inline-flex; + padding: 16px; + border-radius: 50%; + background: var(--teal-soft); + margin-bottom: 20px; +} + +.contact-sidebar { + display: flex; + flex-direction: column; + gap: 20px; +} + +.contact-info-card { + background: var(--bg-card); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg); + padding: 24px; +} + +[data-theme="light"] .contact-info-card, +.theme-light .contact-info-card { + background: #FFFFFF; + border-color: rgba(15, 23, 42, 0.08); +} + +.contact-info-card.highlighted-card { + border-color: rgba(227, 164, 74, 0.3); + background: rgba(227, 164, 74, 0.04); +} + +.info-card-header { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 10px; +} + +.info-card-header h4 { + font-size: 16px; + margin: 0; +} + +.contact-info-card p { + font-size: 13.5px; + color: var(--ink-secondary); + line-height: 1.5; + margin-bottom: 14px; +} + +.stat-pill-row { + display: flex; + gap: 12px; +} + +.stat-pill { + flex: 1; + background: var(--bg-surface); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-sm); + padding: 10px; + text-align: center; +} + +.stat-pill strong { + display: block; + font-size: 16px; + color: var(--teal-vibrant); + font-family: var(--font-mono); +} + +[data-theme="light"] .stat-pill strong, +.theme-light .stat-pill strong { + color: var(--teal-primary); +} + +.stat-pill span { + font-size: 11px; + color: var(--ink-muted); +} + +.channel-list { + display: flex; + flex-direction: column; + gap: 12px; + font-size: 13.5px; +} + +.channel-label { + display: block; + font-size: 12px; + color: var(--ink-muted); +} diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..2898346 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,13 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { BrowserRouter } from 'react-router-dom' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + + + , +) diff --git a/src/pages/AgenciesPage.jsx b/src/pages/AgenciesPage.jsx new file mode 100644 index 0000000..6fe6ab9 --- /dev/null +++ b/src/pages/AgenciesPage.jsx @@ -0,0 +1,312 @@ +import React, { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { CheckCircle2, ArrowUpRight, ShieldCheck, Users, Globe, ExternalLink, Zap } from 'lucide-react'; + +const AGENCY_CLIENTS = [ + { domain: 'smileline-dental.in', health: 81, status: 'Fixes Approved', pages: 1420, keywords: 124, trend: '+14%' }, + { domain: 'speedyplumbing.com', health: 64, status: 'Patch Ready', pages: 890, keywords: 78, trend: '+8%' }, + { domain: 'fashiondirect.in', health: 83, status: 'Indexed 100%', pages: 3200, keywords: 410, trend: '+22%' }, + { domain: 'apexlegaladvisors.com', health: 91, status: 'All Clean', pages: 420, keywords: 65, trend: '+19%' }, + { domain: 'zenithcrossfit.co', health: 76, status: 'Review Pending', pages: 610, keywords: 92, trend: '+11%' } +]; + +export default function AgenciesPage() { + const [selectedClient, setSelectedClient] = useState(AGENCY_CLIENTS[0]); + const [clientCount, setClientCount] = useState(15); + + const formatMoney = (n) => n.toLocaleString('en-US'); + + const calculateSavings = () => { + let semrushUSD = 250; + if (clientCount <= 5) semrushUSD = 140; + else if (clientCount <= 15) semrushUSD = 350; + else if (clientCount <= 30) semrushUSD = 500; + else semrushUSD = 900; + + let crawlerxINR = 2499; + if (clientCount <= 3) crawlerxINR = 999; + else if (clientCount <= 10) crawlerxINR = 2499; + else if (clientCount <= 30) crawlerxINR = 7499; + else crawlerxINR = 9999; + + const semrushINR = semrushUSD * 86; + return { + semrush: `โ‚น${formatMoney(semrushINR)}/mo`, + crawlerx: `โ‚น${formatMoney(crawlerxINR)}/mo`, + annualSavings: `โ‚น${formatMoney((semrushINR - crawlerxINR) * 12)}` + }; + }; + + const savings = calculateSavings(); + + return ( +
+ {/* Agency Hero */} +
+
+
+ + THE AGENCY OPERATING SYSTEM +
+ +

+ Stop losing margin on legacy tool fees. +

+ +

+ Managing 10โ€“30 client retainers shouldn't cost you $600โ€“$1,000 every month in software seat licenses. + CrawlerX gives agencies a unified multi-client operations hub: automated audits, CMS-ready code patches, + and white-label client approval portals โ€” at an honest flat price. +

+ +
+ PROVEN ARITHMETIC +

30 client sites on CrawlerX costs โ‚น7,499/mo ($79/mo). On Semrush Business, that same portfolio costs over $499/mo (~โ‚น42,500/mo).

+
+ +
+ + Start Agency Trial + + + Calculate Your Margin + +
+
+ + {/* Agency Multi-Site Dashboard Visual */} +
+
+
+
+ + + +
+
+ + AGENCY WORKSPACE (5 ACTIVE CLIENTS) +
+ ALL ACTIVE +
+ +
+
+ CLIENT SITES PORTFOLIO + โœ“ 0 Per-Seat Fees +
+ + {/* Client List */} +
+ {AGENCY_CLIENTS.map((client, idx) => ( +
setSelectedClient(client)} + style={{ + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + padding: '12px 14px', + borderRadius: '8px', + background: selectedClient.domain === client.domain ? 'rgba(63, 182, 174, 0.12)' : 'rgba(255, 255, 255, 0.03)', + border: selectedClient.domain === client.domain ? '1px solid var(--teal-vibrant)' : '1px solid var(--border-subtle)', + cursor: 'pointer', + transition: 'all 0.15s ease' + }} + > +
+ +
+
{client.domain}
+
{client.pages} pages ยท {client.keywords} keywords
+
+
+
+
= 80 ? 'var(--teal-vibrant)' : '#E3A44A' }}> + {client.health}/100 +
+
{client.trend}
+
+
+ ))} +
+ +
+ White-label client approvals: Enabled + 1-Click Sign-Off Link โ†— +
+
+
+
+
+ + {/* 3 Agency Killers */} +
+
+
+ + AGENCY PROFITABILITY AUDIT +
+

The 3 hidden leaks eroding your retainer margins.

+

Traditional SEO suites were built to maximize enterprise software revenue, not protect boutique and growth agency margins.

+
+ +
+
+ LEAK 01: THE SEAT TAX +

$80/Month Per User Penalty

+
+ How Legacy Tools Trap You: Every time you hire an SEO specialist, content strategist, or account manager, your monthly bill jumps by $45โ€“$80 per person. +
+
+ + CrawlerX Rule: Unlimited seats on all team plans. Invite your entire agency team and freelance contributors without paying an extra dime. +
+
+ +
+ LEAK 02: THE PDF DUMP CHASM +

Clients Don't Read 80-Page Reports

+
+ How Retainers Churn: Handing clients a massive PDF list of 400 warnings creates anxiety rather than confidence. Clients question what they are paying for. +
+
+ + CrawlerX Proof Link: Send clients an interactive, branded 1-click approval link showing before-and-after SERP impact and exact code fixes. +
+
+ +
+ LEAK 03: DEVELOPER BOTTLENECKS +

Audits Sit Unimplemented in Jira

+
+ Where ROI Dies: Telling a client their schema is broken accomplishes nothing if their developer takes 6 weeks to write the JSON-LD snippet. +
+
+ + CrawlerX AI Patches: Generates verified JSON-LD, title tags, and meta descriptions ready to push directly into WordPress, Shopify, or Webflow. +
+
+
+
+ + {/* Interactive Agency ROI Calculator */} +
+
+
+
+ + AGENCY MARGIN CALCULATOR +
+

Calculate your agency's annual savings.

+

Slide to your agency's active client portfolio to see exact monthly software savings and annual margin gains.

+
+ +
+
+
+
+ + {clientCount} Clients +
+ setClientCount(Number(e.target.value))} + className="agency-slider" + /> +
+ 3 Clients + 10 Clients + 25 Clients + 50 Clients +
+
+ +
+ Unlike legacy suites that charge $80 per user seat, CrawlerX includes unlimited agency team members in every plan. +
+
+ +
+
+ Legacy Enterprise (Semrush / Ahrefs): + {savings.semrush} +
+
+ CrawlerX Agency Equivalent: + {savings.crawlerx} +
+
+ YOUR ESTIMATED ANNUAL AGENCY SAVINGS +
{savings.annualSavings}
+ Direct margin recaptured to hire talent or increase agency profits. +
+
+
+
+
+ + {/* Agency Workflow Features */} +
+
+
+ + BUILT FOR AGENCY TEAMS +
+

Everything needed to run 30+ retainers smoothly.

+
+ +
+
+
+
+ WHITE-LABEL +
+

Custom Domain Client Portals

+

Give each client a clean, view-only URL on your own domain (e.g. seo.youragency.com) featuring your agency logo and colors.

+
+ +
+
+
+ AUTOMATION +
+

1-Click Client Approvals

+

Clients click a single button to sign off on meta tag changes and schema patches before they are automatically deployed to their CMS.

+
+ +
+
+
+ COLLABORATION +
+

Unlimited Team & Freelancer Seats

+

Grant role-based access to junior SEOs, copywriters, and developers without paying monthly per-user licensing taxes.

+
+
+
+ + {/* Agency Plans Callout */} +
+
+ + 14-DAY AGENCY PILOT +
+

Scale your agency retainers on CrawlerX.

+

10 client sites for โ‚น2,499/mo ($29) or 30 client sites for โ‚น7,499/mo ($79). Unlimited seats. Zero risk.

+
+ + Start 14-Day Agency Pilot + + + View All Plan Entitlements + +
+
+
+ ); +} diff --git a/src/pages/BlogPage.jsx b/src/pages/BlogPage.jsx new file mode 100644 index 0000000..784f9fc --- /dev/null +++ b/src/pages/BlogPage.jsx @@ -0,0 +1,233 @@ +import React, { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { ArrowUpRight, BookOpen, Clock, Tag, Search, Sparkles } from 'lucide-react'; + +const ARTICLES = [ + { + id: 1, + category: 'Technical SEO', + title: 'A Practical Way to Prioritize Technical Fixes: Revenue Impact First', + excerpt: 'How to turn a 4,000-line crawl dump into a razor-sharp, 5-task sprint that clients immediately approve and developers can actually deploy.', + readTime: '6 min read', + date: 'Oct 14, 2026', + author: 'CrawlerX Engineering', + tag: 'Field Notes', + badge: 'Popular', + }, + { + id: 2, + category: 'Agency Growth', + title: 'The Weekly SEO Operating Rhythm That Stops Client Churn', + excerpt: 'Audit on Monday, execute CMS push on Wednesday, send 1-page visual proof on Friday. The exact sequence 120+ boutique agencies use to lock in retainers.', + readTime: '8 min read', + date: 'Oct 08, 2026', + author: 'Agency OS Team', + tag: 'Playbook', + badge: 'Growth', + }, + { + id: 3, + category: 'AI Search', + title: 'How to Audit and Optimize for Google AI Overviews in 2026', + excerpt: 'Focus on query fan-out, citation-density patterns, and structured entity authority rather than guessing keywords in LLM summaries.', + readTime: '7 min read', + date: 'Sep 29, 2026', + author: 'AI Research Lab', + tag: 'Strategy', + badge: 'New', + }, + { + id: 4, + category: 'Local SEO', + title: 'Geo-Grid Tracking Without Overpaying: The 13x13 Radius Playbook', + excerpt: 'Why traditional rank trackers fail multi-location clients and how proximity heatmaps turn local SEO pitches into closed contracts.', + readTime: '5 min read', + date: 'Sep 19, 2026', + author: 'CrawlerX Local', + tag: 'Guide', + badge: null, + }, + { + id: 5, + category: 'Technical SEO', + title: 'Client CMS Permissions: How to Fix Metadata Without Waiting on Web Devs', + excerpt: 'Setting up safe, sandboxed WordPress & Shopify webhook integrations so your SEO analysts can deploy fixes directly with audit logging.', + readTime: '9 min read', + date: 'Sep 12, 2026', + author: 'Engineering', + tag: 'Automation', + badge: null, + }, + { + id: 6, + category: 'Agency Growth', + title: 'Why $2,400/yr Semrush Accounts Bleed Agency Profit Margins', + excerpt: 'A financial breakdown of seat-add costs, report limits, and API markupโ€”and how switching to a flat agency model restores 35% net margin.', + readTime: '6 min read', + date: 'Aug 28, 2026', + author: 'Operations', + tag: 'Economics', + badge: 'Finance', + }, +]; + +const CATEGORIES = ['All Topics', 'Technical SEO', 'Agency Growth', 'AI Search', 'Local SEO']; + +export default function BlogPage() { + const [activeCategory, setActiveCategory] = useState('All Topics'); + const [searchQuery, setSearchQuery] = useState(''); + + const filteredArticles = ARTICLES.filter((article) => { + const matchesCategory = activeCategory === 'All Topics' || article.category === activeCategory; + const matchesSearch = article.title.toLowerCase().includes(searchQuery.toLowerCase()) || + article.excerpt.toLowerCase().includes(searchQuery.toLowerCase()); + return matchesCategory && matchesSearch; + }); + + return ( +
+ {/* Hero Section */} +
+
+
+ + CRAWLERX JOURNAL & FIELD NOTES +
+

Useful ideas. Zero noise.

+

+ Battle-tested frameworks, agency blueprints, and technical SEO architecture for teams who would rather ship fixes than admire warnings. +

+
+
+ + {/* Filter and Search Bar */} +
+
+
+
+ {CATEGORIES.map((cat) => ( + + ))} +
+ +
+ + setSearchQuery(e.target.value)} + className="blog-search-input" + /> +
+
+ + {/* Featured Article */} + {activeCategory === 'All Topics' && !searchQuery && ( +
+
Featured Blueprint
+
+
+ Agency Operations + โ€ข + 10 min read + โ€ข + Oct 18, 2026 +
+

The 2026 Agency Playbook: Automating the Find โ†’ Fix โ†’ Prove Cycle

+

+ Most agencies lose clients not because rankings dropped, but because the client never saw what was actually done. Here is the operational architecture to link technical audits directly to CMS deployment and automated weekly ROI proofs. +

+
+
+
CX
+
+ CrawlerX Core Team + Operations Architecture +
+
+ + Read Blueprint + +
+
+
+ )} + + {/* Articles Grid */} +
+ {filteredArticles.length > 0 ? ( + filteredArticles.map((article) => ( +
+
+
+ {article.category} +
+ {article.badge && ( + {article.badge} + )} +
+ +

{article.title}

+

{article.excerpt}

+ +
+
+ {article.readTime} + {article.date} +
+ + Read Guide + +
+
+ )) + ) : ( +
+ +

No guides found matching "{searchQuery}".

+ +
+ )} +
+
+
+ + {/* Newsletter / CTA */} +
+
+

Get weekly field notes in your inbox

+

+ Zero marketing fluff. Just technical fixes, agency operating templates, and algorithm tracking. +

+
+ + +
+ + No spam. One actionable email every Thursday. Unsubscribe anytime. + +
+
+
+ ); +} diff --git a/src/pages/ComparePage.jsx b/src/pages/ComparePage.jsx new file mode 100644 index 0000000..290d2bc --- /dev/null +++ b/src/pages/ComparePage.jsx @@ -0,0 +1,167 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { CheckCircle2, XCircle, ArrowUpRight, Zap, ShieldCheck, DollarSign } from 'lucide-react'; + +export default function ComparePage() { + return ( +
+ {/* Compare Hero */} +
+
+
+ + OBJECTIVE COMPARISON +
+

CrawlerX vs. Semrush & Ahrefs.

+

A transparent breakdown of agency economics, actionable execution workflows, and client retention.

+
+ + {/* The 3 Core Differences */} +
+
+ DIFFERENCE 01: PRICING +

No $80/Month User Seat Taxes

+
+ Semrush / Ahrefs: Guru ($249/mo) and Standard ($249/mo) only cover 1 user. Adding a team member or client manager costs an extra $45โ€“$80/mo per person. +
+
+ + CrawlerX: Unlimited seats on all team tiers. 10 client sites for โ‚น2,499/mo ($29) or 30 sites for โ‚น7,499/mo ($79). +
+
+ +
+ DIFFERENCE 02: CODE PATCHES +

Fixes vs. 400-Page PDF Dumps

+
+ Legacy Suites: Hand you a massive spreadsheet of 400 issues without writing a single line of code. Clients panic and retainers churn. +
+
+ + CrawlerX AI Patches: Generates ready-to-deploy JSON-LD schema, title tags, and meta descriptions with 1-click CMS webhooks. +
+
+ +
+ DIFFERENCE 03: CLIENT PROOF +

1-Click Client Sign-Off Links

+
+ Legacy Suites: You spend 4 hours each month manually compiling PDF reports and chasing clients over email for approval. +
+
+ + CrawlerX Portals: Send clients an executive, white-label link on your domain where they approve changes with one tap. +
+
+
+ + {/* Detailed Side-by-Side Table */} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Evaluation FactorCrawlerX OperationsSemrush (Guru)Ahrefs (Standard)SE Ranking (Pro)
Primary PhilosophyFind it. Fix it. Prove it.
Audit directly into CMS code patches and client sign-off
Data database suite
PPC & historical backlink index
Data database suite
Link index & content explorer
Mid-market tracker
Keyword tracking & audits
Price for 10 Client Sitesโ‚น2,499/mo ($29)$249.95/mo (~โ‚น21,500)$249.00/mo (~โ‚น21,400)$109.00/mo (~โ‚น9,300)
Price for 30 Client Sitesโ‚น7,499/mo ($79)$499.95/mo (~โ‚น42,500)$499.00/mo (~โ‚น42,500)$239.00/mo (~โ‚น20,500)
Extra Team Member SeatsUnlimited (Free)+$80/mo per seat+$75/mo per seat+$40/mo per seat
AI Code & Tag Patchesโœ“ Built-in (CMS Ready)โœ— Audit warnings onlyโœ— Audit warnings onlyโœ— Audit warnings only
Client 1-Click Approval Linkโœ“ Includedโœ— PDF exports onlyโœ— PDF exports onlyโœ— PDF exports only
AI Search Visibility (Perplexity/ChatGPT)โœ“ Included+$199/mo add-onโœ— Not supportedโœ— Not supported
+
+ + {/* 3-Minute Migration Guarantee */} +
+

+ Zero-Downtime 3-Minute Agency Migration +

+

+ Moving from Semrush or Ahrefs? Simply enter your client URLs or upload a CSV. + CrawlerX automatically imports your project history, keywords, and schedules in under 3 minutes. +

+ + Migrate Your Agency in 3 Minutes + +
+
+ + {/* Pre-footer CTA */} +
+
+ + TRY CRAWLERX RISK-FREE +
+

Ready to cut your SEO software bill by 90%?

+

Start a 7-day trial of CrawlerX Pro. See why modern agencies are migrating their entire client portfolios today.

+
+ + Start Free Pro Trial + + + View All Plans + +
+
+
+ ); +} diff --git a/src/pages/ContactPage.jsx b/src/pages/ContactPage.jsx new file mode 100644 index 0000000..881862f --- /dev/null +++ b/src/pages/ContactPage.jsx @@ -0,0 +1,207 @@ +import React, { useState } from 'react'; +import { ArrowUpRight, Mail, MessageSquare, ShieldCheck, CheckCircle2, Clock, Sparkles } from 'lucide-react'; + +export default function ContactPage() { + const [formData, setFormData] = useState({ + name: '', + email: '', + agencyName: '', + clientCount: '5-15', + topic: 'Agency Workflow & Migration Demo', + message: '', + }); + const [submitted, setSubmitted] = useState(false); + + const handleSubmit = (e) => { + e.preventDefault(); + setSubmitted(true); + }; + + return ( +
+ {/* Hero */} +
+
+
+ + AGENCY CONSULTATION & DEMO +
+

Talk to the engineers behind CrawlerX.

+

+ Need a personalized walkthrough for your agency? Migrating 20+ client domains from Semrush or Ahrefs? We'll set up your workspace and import your historical rankings. +

+
+
+ + {/* Main Grid */} +
+
+
+ {/* Form */} +
+ {submitted ? ( +
+
+ +
+

Demo Request Received

+

+ Thank you, {formData.name}. An agency solutions engineer will reach out to {formData.email} within 4 business hours with your private sandbox credentials. +

+ +
+ ) : ( +
+

Schedule a 15-Minute Agency Walkthrough

+

See how CrawlerX cuts client reporting time by 75%.

+ +
+
+ + setFormData({ ...formData, name: e.target.value })} + /> +
+
+ + setFormData({ ...formData, email: e.target.value })} + /> +
+
+ +
+
+ + setFormData({ ...formData, agencyName: e.target.value })} + /> +
+
+ + +
+
+ +
+ + +
+ +
+ +