feat(site): 🛬 PCBJam landing page — waitlist, sections, Tailwind
Replace the placeholder homepage with the PCBJam waitlist conversion page (13 sections from the copy spec), shared chrome, and a real email-capture backend, keeping the site zero-runtime-JS / zero-web-font. - Tailwind v4 via @tailwindcss/postcss (the Vite plugin breaks on Astro 6 rolldown-vite); Preflight skipped; brand tokens in :root + @theme inline. - Waitlist: /api/waitlist serverless route (prerender=false) + Resend, with dual JSON/303 responses; WaitlistForm progressive enhancement bound on astro:page-load (survives ClientRouter swaps); honeypot + validation. - New components (Icon, Placeholder, DemoVideo, SectionBand, Chip, EECredit, StatBar, Pillar, Step, CheckItem, WaitlistForm) + 13 section components. - Redesigned Header (sticky, mobile menu, CTA) + 4-col Footer (KiCad attribution); BaseLayout gains full-bleed mode + OG/canonical meta. - Assets scaffolded with marked placeholders; EE/generic/client SVGs copied. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
14
site/.env.example
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# PCBJam marketing site — server-side secrets for the waitlist endpoint.
|
||||
# Copy to `.env` for local dev, and set these in the Vercel project settings.
|
||||
# Without RESEND_API_KEY the endpoint still accepts submits (logs + no email),
|
||||
# so the form UX is testable locally without keys.
|
||||
|
||||
# Resend API key (https://resend.com/api-keys). Server-only — never PUBLIC_.
|
||||
RESEND_API_KEY=
|
||||
|
||||
# Resend Audience to add waitlist contacts to (https://resend.com/audiences).
|
||||
RESEND_AUDIENCE_ID=
|
||||
|
||||
# Optional: confirmation sender. Domain must be verified in Resend.
|
||||
# Defaults to "PCBJam <waitlist@pcbjam.com>".
|
||||
WAITLIST_FROM_EMAIL=
|
||||
689
site/package-lock.json
generated
|
|
@ -9,12 +9,30 @@
|
|||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"@astrojs/vercel": "^10.0.8",
|
||||
"astro": "^6.4.4"
|
||||
"astro": "^6.4.4",
|
||||
"resend": "^6.12.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/postcss": "^4.3.0",
|
||||
"tailwindcss": "^4.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@alloc/quick-lru": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
||||
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/compiler": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-4.0.0.tgz",
|
||||
|
|
@ -1098,12 +1116,55 @@
|
|||
"node": ">=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.13",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
|
||||
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/remapping": {
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
|
||||
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.31",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
|
||||
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.1.0",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@mapbox/node-pre-gyp": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz",
|
||||
|
|
@ -1578,6 +1639,283 @@
|
|||
"integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@stablelib/base64": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz",
|
||||
"integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tailwindcss/node": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz",
|
||||
"integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/remapping": "^2.3.5",
|
||||
"enhanced-resolve": "^5.21.0",
|
||||
"jiti": "^2.6.1",
|
||||
"lightningcss": "1.32.0",
|
||||
"magic-string": "^0.30.21",
|
||||
"source-map-js": "^1.2.1",
|
||||
"tailwindcss": "4.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz",
|
||||
"integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@tailwindcss/oxide-android-arm64": "4.3.0",
|
||||
"@tailwindcss/oxide-darwin-arm64": "4.3.0",
|
||||
"@tailwindcss/oxide-darwin-x64": "4.3.0",
|
||||
"@tailwindcss/oxide-freebsd-x64": "4.3.0",
|
||||
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0",
|
||||
"@tailwindcss/oxide-linux-arm64-gnu": "4.3.0",
|
||||
"@tailwindcss/oxide-linux-arm64-musl": "4.3.0",
|
||||
"@tailwindcss/oxide-linux-x64-gnu": "4.3.0",
|
||||
"@tailwindcss/oxide-linux-x64-musl": "4.3.0",
|
||||
"@tailwindcss/oxide-wasm32-wasi": "4.3.0",
|
||||
"@tailwindcss/oxide-win32-arm64-msvc": "4.3.0",
|
||||
"@tailwindcss/oxide-win32-x64-msvc": "4.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-android-arm64": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz",
|
||||
"integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-darwin-arm64": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz",
|
||||
"integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-darwin-x64": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz",
|
||||
"integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-freebsd-x64": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz",
|
||||
"integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz",
|
||||
"integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz",
|
||||
"integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz",
|
||||
"integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz",
|
||||
"integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz",
|
||||
"integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz",
|
||||
"integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==",
|
||||
"bundleDependencies": [
|
||||
"@napi-rs/wasm-runtime",
|
||||
"@emnapi/core",
|
||||
"@emnapi/runtime",
|
||||
"@tybys/wasm-util",
|
||||
"@emnapi/wasi-threads",
|
||||
"tslib"
|
||||
],
|
||||
"cpu": [
|
||||
"wasm32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@emnapi/core": "^1.10.0",
|
||||
"@emnapi/runtime": "^1.10.0",
|
||||
"@emnapi/wasi-threads": "^1.2.1",
|
||||
"@napi-rs/wasm-runtime": "^1.1.4",
|
||||
"@tybys/wasm-util": "^0.10.1",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz",
|
||||
"integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz",
|
||||
"integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/postcss": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.0.tgz",
|
||||
"integrity": "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
"@tailwindcss/node": "4.3.0",
|
||||
"@tailwindcss/oxide": "4.3.0",
|
||||
"postcss": "^8.5.10",
|
||||
"tailwindcss": "4.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/debug": {
|
||||
"version": "4.1.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
|
||||
|
|
@ -2429,6 +2767,20 @@
|
|||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/enhanced-resolve": {
|
||||
"version": "5.23.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz",
|
||||
"integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
"tapable": "^2.3.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
|
||||
|
|
@ -2555,6 +2907,12 @@
|
|||
"license": "MIT",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/fast-sha256": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz",
|
||||
"integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==",
|
||||
"license": "Unlicense"
|
||||
},
|
||||
"node_modules/fast-string-truncated-width": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
|
||||
|
|
@ -3042,6 +3400,16 @@
|
|||
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/jiti": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
|
||||
"integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
|
||||
|
|
@ -3077,6 +3445,267 @@
|
|||
"integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lightningcss": {
|
||||
"version": "1.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
|
||||
"integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
|
||||
"devOptional": 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.32.0",
|
||||
"lightningcss-darwin-arm64": "1.32.0",
|
||||
"lightningcss-darwin-x64": "1.32.0",
|
||||
"lightningcss-freebsd-x64": "1.32.0",
|
||||
"lightningcss-linux-arm-gnueabihf": "1.32.0",
|
||||
"lightningcss-linux-arm64-gnu": "1.32.0",
|
||||
"lightningcss-linux-arm64-musl": "1.32.0",
|
||||
"lightningcss-linux-x64-gnu": "1.32.0",
|
||||
"lightningcss-linux-x64-musl": "1.32.0",
|
||||
"lightningcss-win32-arm64-msvc": "1.32.0",
|
||||
"lightningcss-win32-x64-msvc": "1.32.0"
|
||||
}
|
||||
},
|
||||
"node_modules/lightningcss-android-arm64": {
|
||||
"version": "1.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
|
||||
"integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
|
||||
"integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
|
||||
"integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
|
||||
"integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
|
||||
"integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
|
||||
"integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
|
||||
"integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
|
||||
"integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
|
||||
"integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
|
||||
"integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
|
||||
"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.32.0",
|
||||
"resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
|
||||
"integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
|
||||
"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/longest-streak": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
|
||||
|
|
@ -4329,6 +4958,12 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/postal-mime": {
|
||||
"version": "2.7.4",
|
||||
"resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.4.tgz",
|
||||
"integrity": "sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==",
|
||||
"license": "MIT-0"
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.5.15",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
|
||||
|
|
@ -4571,6 +5206,27 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/resend": {
|
||||
"version": "6.12.4",
|
||||
"resolved": "https://registry.npmjs.org/resend/-/resend-6.12.4.tgz",
|
||||
"integrity": "sha512-lRpJ2Hxd+ht+JPDm97juRcUp9HOMuZyxaRFRFmc9Tx8iNWiei94Dx9v6SWufgKk2667C/uCeKKspMotOHSpCSg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"postal-mime": "2.7.4",
|
||||
"standardwebhooks": "1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@react-email/render": "*"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@react-email/render": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-from": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
|
||||
|
|
@ -4843,6 +5499,16 @@
|
|||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/standardwebhooks": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.0.0.tgz",
|
||||
"integrity": "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@stablelib/base64": "^1.0.0",
|
||||
"fast-sha256": "^1.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/stringify-entities": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
|
||||
|
|
@ -4891,6 +5557,27 @@
|
|||
"url": "https://opencollective.com/svgo"
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz",
|
||||
"integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/tapable": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
|
||||
"integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
}
|
||||
},
|
||||
"node_modules/tar": {
|
||||
"version": "7.5.16",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz",
|
||||
|
|
|
|||
|
|
@ -13,7 +13,12 @@
|
|||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/vercel": "^10.0.8",
|
||||
"astro": "^6.4.4",
|
||||
"@astrojs/vercel": "^10.0.8"
|
||||
"resend": "^6.12.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/postcss": "^4.3.0",
|
||||
"tailwindcss": "^4.3.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
9
site/postcss.config.mjs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
// Tailwind v4 via PostCSS.
|
||||
// NOTE: we use the PostCSS plugin (not @tailwindcss/vite) on purpose — the Vite
|
||||
// plugin currently fails to build under Astro 6's rolldown-vite (withastro/astro#16542).
|
||||
// Astro auto-detects this file; no astro.config.mjs change is needed.
|
||||
export default {
|
||||
plugins: {
|
||||
'@tailwindcss/postcss': {},
|
||||
},
|
||||
};
|
||||
28
site/public/clients/axdraft.svg
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<svg width="136" height="50" viewBox="0 0 136 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1233_5288)">
|
||||
<path d="M131 7H5V42H131V7Z" fill="url(#paint0_linear_1233_5288)"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.3437 9.75781H18.0979L10.1885 28.056H14.0128L18.7353 16.6269L21.0821 22.6776H17.0259L15.7801 25.7175H22.3858L23.3129 28.0852H27.2821L19.3437 9.75781ZM91.1657 9.75781H89.9205L82.0107 28.056H85.8352L90.5579 16.5684L92.9045 22.6191H88.877L87.631 25.6591H94.2082L95.1355 28.0267H99.1045L91.1657 9.75781ZM36.4664 22.1222L40.2038 28.0852H44.5207L38.6972 18.8777L44.173 10.0501H40.0299L36.5532 15.75L33.0766 10.0501H28.9336L34.4962 18.8777L28.5859 28.0852H32.7289L36.4664 22.1222ZM59.6441 12.5055C61.4404 14.1131 62.3675 16.2762 62.3675 19.0531C62.3675 21.713 61.4404 23.9053 59.6441 25.6006C57.8478 27.2959 55.501 28.1729 52.6617 28.1729H46.8673V10.1378H52.7487C55.501 10.0793 57.8767 11.0147 59.6441 12.5055ZM50.4309 13.4408V24.7529H52.6038C54.4001 24.7529 55.9067 24.256 56.9207 23.233C58.0796 22.2099 58.6011 20.8653 58.6011 19.0531C58.6011 17.3577 58.0216 15.9254 56.9207 14.8731C55.8197 13.7916 54.3711 13.3531 52.6038 13.3531L50.4309 13.4408ZM77.6939 18.9653C77.0275 19.9007 76.2743 20.573 75.3472 21.0699L80.6492 28.2605H76.5061L69.6107 18.7022H72.2471C73.0873 18.7022 73.7537 18.4392 74.2462 17.9422C74.7387 17.4746 74.9995 16.8023 74.9995 16.0423C74.9995 15.3115 74.7387 14.6392 74.2462 14.1423C73.7537 13.7331 73.0004 13.47 72.2471 13.47H69.1471V28.1728H65.4965V10.1377H72.1602C74.0144 10.1377 75.492 10.7224 76.7378 11.7454C77.8678 12.7977 78.5341 14.23 78.5341 15.9253C78.5341 17.0653 78.2733 18.1176 77.6939 18.9653ZM112.257 13.4408H104.783V17.9715H110.258V21.3037H104.696V28.1436H101.046V10.1085H112.257V13.4408ZM122.804 13.4408H127.294V10.1085H114.634V13.4408H119.153V28.1436H122.804V13.4408Z" fill="white"/>
|
||||
<path d="M53.5598 31.7834H54.3131L56.9495 38.5941H56.1094L55.3851 36.7526H52.4878L51.7925 38.5941H50.9233L53.5598 31.7834ZM52.7775 35.9633H55.0953L53.9364 32.9526L52.7775 35.9633Z" fill="#3B3B3C"/>
|
||||
<path d="M61.4404 35.7002V38.594H60.6291V35.8464C60.6291 35.0864 60.1656 34.7356 59.5572 34.7356C58.8329 34.7356 58.4562 35.4956 58.4562 35.4956V38.594H57.645V34.0925H58.3983V34.7356C58.3983 34.7356 58.8039 33.9756 59.76 33.9756C60.6581 33.9756 61.4404 34.5894 61.4404 35.7002Z" fill="#3B3B3C"/>
|
||||
<path d="M71.7833 35.1741C71.7833 37.1325 70.3926 38.6818 68.4514 38.6818C66.5103 38.6818 65.1196 37.1325 65.1196 35.1741C65.1196 33.2157 66.5103 31.6665 68.4514 31.6665C70.3926 31.6665 71.7833 33.2157 71.7833 35.1741ZM70.9141 35.1741C70.9141 33.7126 69.929 32.4265 68.4514 32.4265C66.9738 32.4265 65.9888 33.7126 65.9888 35.1741C65.9888 36.6356 66.9738 37.9217 68.4514 37.9217C69.929 37.9217 70.9141 36.6356 70.9141 35.1741Z" fill="#3B3B3C"/>
|
||||
<path d="M76.5639 35.7002V38.594H75.7527V35.8464C75.7527 35.0864 75.2891 34.7356 74.6807 34.7356C73.9564 34.7356 73.5798 35.4956 73.5798 35.4956V38.594H72.7686V34.0925H73.5218V34.7356C73.5218 34.7356 73.9275 33.9756 74.8835 33.9756C75.7817 33.9756 76.5639 34.5894 76.5639 35.7002Z" fill="#3B3B3C"/>
|
||||
<path d="M78.36 32.105C78.6498 32.105 78.9105 32.3681 78.9105 32.6604C78.9105 32.9527 78.6498 33.2157 78.36 33.2157C78.0703 33.2157 77.8096 32.9527 77.8096 32.6604C77.8096 32.3681 78.0413 32.105 78.36 32.105ZM77.9544 34.0927H78.7656V38.5941H77.9544V34.0927Z" fill="#3B3B3C"/>
|
||||
<path d="M79.7505 34.0926H80.6199V32.7188H81.4307V34.0926H82.8212V34.8234H81.4307V37.2495C81.4307 37.6879 81.6338 37.951 82.0682 37.951C82.329 37.951 82.5899 37.7756 82.5899 37.7756L82.8797 38.4479C82.5025 38.6525 82.2134 38.711 81.9525 38.711C81.3151 38.711 80.6199 38.3018 80.6199 37.3079V34.8526H79.7505V34.0926Z" fill="#3B3B3C"/>
|
||||
<path d="M91.3974 33.245C91.3974 33.245 90.76 32.4557 89.543 32.4557C88.0659 32.4557 87.0808 33.7419 87.0808 35.2034C87.0808 36.6649 88.0948 37.951 89.543 37.951C90.76 37.951 91.4842 37.0449 91.4842 37.0449L92.0349 37.6003C92.0349 37.6003 91.1076 38.7111 89.543 38.7111C87.6019 38.7111 86.2114 37.1618 86.2114 35.2034C86.2114 33.245 87.6019 31.6958 89.543 31.6958C91.1365 31.6958 91.9481 32.7481 91.9481 32.7481L91.3974 33.245Z" fill="#3B3B3C"/>
|
||||
<path d="M97.1341 36.3432C97.1341 37.6586 96.1491 38.7109 94.8454 38.7109C93.5417 38.7109 92.5566 37.6586 92.5566 36.3432C92.5566 35.0279 93.5417 33.9756 94.8454 33.9756C96.1491 33.9756 97.1341 34.9987 97.1341 36.3432ZM96.3226 36.3432C96.3226 35.4664 95.7437 34.7356 94.8454 34.7356C93.9471 34.7356 93.3675 35.4664 93.3675 36.3432C93.3675 37.2202 93.9471 37.9509 94.8454 37.9509C95.7437 37.9509 96.3226 37.2202 96.3226 36.3432Z" fill="#3B3B3C"/>
|
||||
<path d="M104.29 35.7002V38.594H103.479V35.8464C103.479 35.1156 103.102 34.7649 102.523 34.7649C101.856 34.7649 101.566 35.4956 101.566 35.4956V38.6233H100.756V35.8756C100.756 35.1449 100.379 34.794 99.7994 34.794C99.1331 34.794 98.8433 35.5248 98.8433 35.5248V38.6525H98.0317V34.151H98.7855V34.8233C98.7855 34.8233 99.1042 34.0341 100.031 34.0341C101.132 34.0341 101.422 34.8818 101.422 34.8818C101.422 34.8818 101.769 34.0341 102.755 34.0341C103.682 33.9756 104.29 34.5895 104.29 35.7002Z" fill="#3B3B3C"/>
|
||||
<path d="M106.289 34.0925V34.7356C106.289 34.7356 106.723 33.9756 107.796 33.9756C109.012 33.9756 109.968 35.0279 109.968 36.3432C109.968 37.6586 109.012 38.7109 107.796 38.7109C106.984 38.7109 106.521 38.2432 106.347 38.0386V40.8155H105.536V34.0925H106.289ZM106.347 37.1617C106.347 37.1617 106.782 37.9217 107.651 37.9217C108.549 37.9217 109.129 37.191 109.129 36.314C109.129 35.4371 108.549 34.7063 107.651 34.7063C106.752 34.7063 106.347 35.4664 106.347 35.4664V37.1617Z" fill="#3B3B3C"/>
|
||||
<path d="M114.576 35.6125V38.5648H113.822V37.9217C113.822 37.9217 113.33 38.6817 112.316 38.6817C111.504 38.6817 110.665 38.1263 110.665 37.1325C110.665 36.2556 111.418 35.6417 112.432 35.6417C113.243 35.6417 113.764 36.0217 113.764 36.0217V35.7879C113.764 34.8525 112.982 34.7356 112.635 34.7356C111.968 34.7356 111.302 35.1156 111.302 35.1156L110.954 34.4433C110.954 34.4433 111.65 33.9756 112.635 33.9756C113.938 33.9756 114.576 34.7941 114.576 35.6125ZM113.764 37.3079V36.6648C113.764 36.6648 113.33 36.3432 112.606 36.3432C111.91 36.3432 111.475 36.694 111.475 37.1617C111.475 37.7464 111.997 37.9802 112.489 37.9802C113.272 37.9802 113.764 37.3079 113.764 37.3079Z" fill="#3B3B3C"/>
|
||||
<path d="M119.588 35.7002V38.594H118.777V35.8464C118.777 35.0864 118.313 34.7356 117.704 34.7356C116.98 34.7356 116.604 35.4956 116.604 35.4956V38.594H115.792V34.0925H116.546V34.7356C116.546 34.7356 116.951 33.9756 117.907 33.9756C118.806 33.9756 119.588 34.5894 119.588 35.7002Z" fill="#3B3B3C"/>
|
||||
<path d="M120.833 39.9386C120.833 39.9386 121.123 40.1725 121.355 40.1725C121.703 40.1725 121.876 39.9094 122.05 39.4709L122.398 38.594L120.312 34.0925H121.239L122.803 37.6294L124.136 34.0925H125.005C125.005 34.0925 122.774 39.7633 122.659 40.0263C122.398 40.6694 121.905 40.9324 121.413 40.9324C120.862 40.9324 120.457 40.6109 120.457 40.6109L120.833 39.9386Z" fill="#3B3B3C"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_1233_5288" x1="68" y1="7" x2="68" y2="42" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.656747" stop-color="#183DAB"/>
|
||||
<stop offset="0.660819" stop-color="#F8D548"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_1233_5288">
|
||||
<rect width="126" height="35" fill="white" transform="translate(5 7)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
1
site/public/clients/chapterly.svg
Normal file
|
After Width: | Height: | Size: 8 KiB |
13
site/public/clients/filtered.svg
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<svg width="107" height="50" viewBox="0 0 107 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1233_5202)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M98.7919 29.7778C98.5203 29.9592 98.2236 30.0989 97.9116 30.1923C97.5608 30.2954 97.197 30.3458 96.8325 30.3417C96.3184 30.342 95.8091 30.2407 95.3338 30.0433C94.848 29.8426 94.4059 29.5472 94.0332 29.1737C93.638 28.7764 93.3243 28.3036 93.1109 27.7826C92.8805 27.2363 92.765 26.6094 92.765 25.9021V25.869C92.7658 25.1737 92.8805 24.5496 93.1109 23.9966C93.3235 23.4724 93.6363 22.9966 94.0332 22.5971C94.4075 22.2231 94.8488 21.9251 95.3338 21.7194C95.8083 21.5169 96.3176 21.4128 96.8325 21.4131C97.2003 21.409 97.5665 21.459 97.9197 21.5615C98.2317 21.6538 98.5308 21.7874 98.8089 21.9587C99.07 22.1226 99.31 22.3176 99.5259 22.5395C99.7344 22.7545 99.9244 22.9872 100.093 23.2351V18.0667H101.362V30.1593H100.093V28.4364C99.9155 28.6929 99.7199 28.9367 99.5089 29.1657C99.2947 29.3975 99.0538 29.603 98.7919 29.7778ZM94.9588 28.3038C95.2296 28.5881 95.5545 28.8134 95.9142 28.966C96.2796 29.1214 96.6716 29.2003 97.0677 29.1979C97.4614 29.1982 97.851 29.1165 98.2115 28.9576C98.5809 28.7973 98.9164 28.5668 99.1993 28.2785C99.4943 27.9796 99.7296 27.6253 99.8912 27.2355C100.062 26.8324 100.147 26.3822 100.147 25.8848V25.8517C100.153 25.3889 100.066 24.9296 99.8912 24.5021C99.7304 24.1139 99.4951 23.762 99.1993 23.4667C98.9139 23.1832 98.5793 22.9557 98.2115 22.7956C97.8502 22.6371 97.4614 22.5555 97.0677 22.5557C96.6668 22.5525 96.2699 22.6282 95.8981 22.7786C95.5408 22.9243 95.2182 23.1448 94.9507 23.4256C94.671 23.7238 94.4528 24.0755 94.3089 24.4603C94.1496 24.8695 94.0696 25.3333 94.0696 25.8517V25.8848C94.0704 26.3931 94.1504 26.8515 94.3089 27.2602C94.4552 27.6484 94.6759 28.0031 94.9588 28.3038ZM91.7634 26.3987C91.7739 26.3134 91.7796 26.2276 91.7812 26.1418V25.9516C91.7853 25.3502 91.6955 24.7519 91.5169 24.1784C91.3544 23.6515 91.0917 23.162 90.7433 22.7378C90.3998 22.3269 89.973 21.9962 89.4912 21.7683C88.9973 21.5316 88.4371 21.4129 87.8115 21.4125C87.2465 21.4064 86.6879 21.5251 86.173 21.7604C85.6828 21.9855 85.2428 22.3094 84.88 22.7124C84.5103 23.1282 84.2226 23.6117 84.0322 24.137C83.8269 24.696 83.7235 25.2882 83.7271 25.8845C83.7271 26.5477 83.8397 27.155 84.0649 27.7066C84.2741 28.2356 84.5848 28.7172 84.9788 29.1237C85.3643 29.516 85.8237 29.8256 86.3298 30.0341C86.852 30.2508 87.4114 30.3605 87.9764 30.3569C88.7888 30.3569 89.4694 30.2108 90.0174 29.9185C90.5719 29.6218 91.0683 29.2263 91.4837 28.7509L90.6932 28.0386C90.3553 28.3925 89.9633 28.6889 89.5324 28.9163C89.1097 29.137 88.602 29.2475 88.0095 29.2477C87.6442 29.2492 87.2812 29.1848 86.9385 29.0576C86.5998 28.9315 86.2878 28.7431 86.017 28.5021C85.7358 28.2517 85.5063 27.9479 85.3413 27.6077C85.158 27.2291 85.0463 26.819 85.0118 26.3987H91.7634ZM85.3197 24.2186C85.1577 24.5779 85.0547 24.9617 85.0147 25.3547H90.4984C90.4677 24.9798 90.3844 24.6113 90.2518 24.26C90.1266 23.926 89.9455 23.6166 89.7159 23.3456C89.4888 23.0799 89.2083 22.8664 88.893 22.7196C88.5689 22.5663 88.1987 22.4896 87.7816 22.4896C87.43 22.4872 87.0824 22.5599 86.7607 22.7029C86.4438 22.8446 86.1584 23.049 85.9208 23.3042C85.6716 23.573 85.4685 23.882 85.3197 24.2186Z" fill="#00C8DC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.9858 30.1593H51.2547V22.722H53.9387V21.6286H51.2379V20.9325C51.2379 19.7179 51.7319 19.1104 52.7199 19.1104C52.9244 19.1089 53.1285 19.1282 53.3291 19.1679C53.5162 19.2071 53.7249 19.2597 53.9554 19.3255V18.216C53.7498 18.1398 53.5373 18.0843 53.3209 18.0501C53.0672 18.0144 52.8113 17.9977 52.5551 18.0002C51.7748 18.0002 51.1655 18.2213 50.7272 18.6633C50.2327 19.1602 49.9856 19.8943 49.9858 20.866V30.1593ZM59.5558 30.1589H60.8233V18.294H59.5558V30.1589ZM67.4623 29.9438C67.2421 30.0657 67.0068 30.1576 66.7628 30.2171C66.4902 30.2806 66.2112 30.3112 65.9315 30.3083C65.6083 30.3109 65.2864 30.2662 64.9757 30.1756C64.6925 30.095 64.4309 29.9507 64.2103 29.7534C63.9863 29.5461 63.814 29.2877 63.7079 28.9997C63.587 28.6909 63.5266 28.3199 63.5266 27.8896V18.3069H64.7948V21.5955H67.4955V22.722H64.7948V27.7115C64.795 28.2399 64.9266 28.6087 65.1896 28.818C65.4531 29.0277 65.7991 29.1326 66.2274 29.1326C66.4349 29.1339 66.642 29.1128 66.8452 29.0699C67.0584 29.0205 67.2654 28.9469 67.4623 28.8504V29.9438ZM76.5135 26.1422C76.5127 26.2281 76.5074 26.3138 76.4976 26.3991H69.7452C69.7805 26.8194 69.8923 27.2294 70.0753 27.6082C70.2402 27.9483 70.4697 28.2522 70.7505 28.5025C71.0212 28.7439 71.3338 28.9321 71.6724 29.0577C72.0153 29.185 72.3779 29.2495 72.7432 29.2482C73.3357 29.2479 73.8432 29.1375 74.2657 28.9168C74.6968 28.6892 75.089 28.3929 75.4272 28.0391L76.2175 28.7508C75.8025 29.2263 75.3059 29.622 74.752 29.9187C74.2022 30.2116 73.5217 30.358 72.7105 30.358C72.1456 30.3615 71.5856 30.2515 71.0628 30.0346C70.5569 29.8263 70.0977 29.5166 69.7126 29.1242C69.3188 28.7174 69.0083 28.2359 68.7986 27.7071C68.5737 27.1555 68.4612 26.5482 68.4612 25.8851C68.4575 25.2886 68.5606 24.6965 68.7657 24.1375C68.956 23.6122 69.2438 23.1287 69.6138 22.7132C69.9763 22.3102 70.416 21.986 70.9061 21.7605C71.4211 21.5254 71.9803 21.4068 72.5451 21.413C73.1711 21.4129 73.731 21.5318 74.2248 21.7694C74.7065 21.9966 75.1334 22.3272 75.4762 22.7383C75.8248 23.1625 76.0877 23.652 76.2502 24.1789C76.429 24.7521 76.5178 25.3503 76.5135 25.9515V26.1422ZM79.5982 30.1591H78.3301V21.5953H79.5982V23.8316C79.7493 23.4827 79.9429 23.1542 80.1745 22.8539C80.4008 22.5603 80.6672 22.3009 80.9656 22.0835C81.2613 21.8686 81.5894 21.7038 81.9372 21.5953C82.3052 21.4823 82.6891 21.4318 83.0733 21.4461V22.8208H82.9745C82.5265 22.8185 82.0822 22.9025 81.6654 23.0687C81.2557 23.2334 80.8873 23.4882 80.5867 23.8147C80.2793 24.1461 80.0376 24.5575 79.8615 25.0491C79.686 25.5408 79.5982 26.1066 79.5982 26.7466V30.1591ZM69.7488 25.3552C69.7892 24.9623 69.8921 24.5787 70.0535 24.2191C70.2028 23.8828 70.4059 23.5739 70.6545 23.3047C70.8924 23.0498 71.178 22.8454 71.4946 22.7034C71.8163 22.5603 72.1642 22.4877 72.5154 22.49C72.9327 22.49 73.3034 22.5667 73.6274 22.7201C73.9425 22.8674 74.2231 23.0807 74.4508 23.3461C74.6803 23.617 74.8614 23.9265 74.9859 24.2606C75.1184 24.6119 75.2016 24.9804 75.233 25.3552H69.7488ZM57.1749 20.0054H55.7261V18.5967H57.1749V20.0054ZM57.0778 30.1597H55.8259V21.595H57.0778V30.1597Z" fill="#00C8DC"/>
|
||||
<path d="M24.4 44C35.1143 44 43.8 35.2696 43.8 24.5C43.8 13.7304 35.1143 5 24.4 5C13.6857 5 5 13.7304 5 24.5C5 35.2696 13.6857 44 24.4 44Z" fill="#00C8DC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.7751 16.4006H15.4407C15.3714 16.4007 15.3074 16.4384 15.2727 16.4996C15.238 16.5607 15.2379 16.6361 15.2724 16.6974L23.6125 31.2158L23.6656 31.3077L22.0606 34.1072C22.0314 34.1564 22.0306 34.218 22.0585 34.2682C22.0865 34.3182 22.1388 34.3489 22.1954 34.3484H26.0784C26.135 34.3491 26.1875 34.3185 26.2157 34.2684C26.2439 34.2184 26.2434 34.1567 26.2144 34.1072L24.5876 31.2713L24.6219 31.213L32.9433 16.6974C32.9778 16.6361 32.9777 16.5607 32.9431 16.4996C32.9084 16.4384 32.8444 16.4007 32.7751 16.4006ZM31.5994 17.2861L24.1166 30.3371L16.6178 17.2861H31.5994Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1233_5202">
|
||||
<rect width="97" height="39" fill="white" transform="translate(5 5)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
28
site/public/clients/lex.svg
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M31.6383 34.2546H14.4419V37.5056H31.6383V34.2546Z" fill="#DCCCA3"/>
|
||||
<path d="M21.2921 30.4147L20.7464 29.8865H19.3926H19.1299V33.117H23.9796L22.0195 31.1665L21.2921 30.4147Z" fill="#DCCCA3"/>
|
||||
<path d="M23.9795 33.117H31.6381V29.8865H31.1935H27.2733L23.9795 33.117Z" fill="#DCCCA3"/>
|
||||
<path d="M31.1933 28.8096H31.6379V25.5791L28.3643 28.8096H31.1933Z" fill="#DCCCA3"/>
|
||||
<path d="M19.4532 28.5659L19.1299 28.2408L21.8174 25.5588H19.1299V28.8097H19.3926H19.6755L19.4532 28.5659Z" fill="#DCCCA3"/>
|
||||
<path d="M31.6585 38.5823H14.4419V41.8333H31.6585V38.5823Z" fill="#DCCCA3"/>
|
||||
<path d="M22.8481 16.9644H14.4419V20.1949H26.0813L22.8481 16.9644Z" fill="#DCCCA3"/>
|
||||
<path d="M26.0813 21.2717H14.4419V24.5226H22.8481L26.0813 21.2717Z" fill="#DCCCA3"/>
|
||||
<path d="M13.3709 8.26831H10.1377V28.8097H14.4419V25.5588H13.3709V8.26831Z" fill="#FFA0D6"/>
|
||||
<path d="M9.06666 8.26831H5.8335V33.117L14.4418 33.1374V29.8865H9.06666V8.26831Z" fill="#FFA0D6"/>
|
||||
<path d="M19.13 25.5588H14.4419V28.8097H19.13V25.5588Z" fill="#FF6B86"/>
|
||||
<path d="M19.13 29.8865H14.4419V33.117H19.13V29.8865Z" fill="#FF6B86"/>
|
||||
<path d="M44.1666 13.2257L42.0046 11.072L32.3857 20.7433L42.0046 30.4146L44.1666 28.2609L36.6899 20.7433L44.1666 13.2257Z" fill="#48DEFF"/>
|
||||
<path d="M31.6584 21.4951L41.277 31.1664L39.216 33.2389L31.6382 25.579V25.5587V21.4951" fill="#48DEFF"/>
|
||||
<path d="M31.6382 19.9917H31.6585L41.2771 10.3204L39.1351 8.16675L31.6585 15.6843L24.1615 8.16675L22.0195 10.3204L28.6274 16.9644H31.6382V19.9917Z" fill="#48DEFF"/>
|
||||
<path d="M21.2921 11.072L19.1299 13.2257L22.848 16.9642H27.1522L21.2921 11.072Z" fill="#48DEFF"/>
|
||||
<path d="M31.6382 20.012L31.6584 19.9917H31.6382V20.012Z" fill="white"/>
|
||||
<path d="M31.6382 21.4952H31.6584L31.6382 21.4749V21.4952Z" fill="white"/>
|
||||
<path d="M31.6383 16.9644H28.6274L31.6383 19.9917V16.9644Z" fill="#0094FF"/>
|
||||
<path d="M23.2926 29.8865L22.0195 31.1665L23.9797 33.117L27.2735 29.8865H23.2926Z" fill="#0094FF"/>
|
||||
<path d="M27.5968 25.5588L24.3838 28.8097H28.3647L31.6382 25.5792V25.5588H27.5968Z" fill="#0094FF"/>
|
||||
<path d="M31.6585 21.4951H31.6383L28.6274 24.5225H31.6383V21.4951" fill="#0094FF"/>
|
||||
<path d="M20.7466 29.8865L21.2921 30.4147L21.8175 29.8865H20.7466Z" fill="#0094FF"/>
|
||||
<path d="M26.1216 25.5588H21.8175L19.1299 28.2408L19.6755 28.8097H22.8884L26.1216 25.5588Z" fill="#0094FF"/>
|
||||
<path d="M30.3653 20.1949L28.7689 18.5898L27.1523 16.9644H22.8481L26.0813 20.1949H30.3653Z" fill="#0094FF"/>
|
||||
<path d="M30.3653 21.2717H26.0813L22.8481 24.5226H27.1523L30.3653 21.2717Z" fill="#0094FF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
17
site/public/clients/memrise.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1409_1466)">
|
||||
<path d="M44.6554 14.4831C44.6554 13.9275 44.6647 13.3765 44.6415 12.8209C44.6183 12.2653 44.6654 11.7312 44.6894 11.1741C44.7311 10.205 44.6438 9.22838 44.7179 8.25936C44.7612 7.69385 44.45 7.12757 43.8377 7.07561C43.3257 7.03205 42.8192 7.08478 42.3049 7.03892C42.0068 7.01218 41.7598 7.02287 41.498 7.18336C41.2215 7.35378 41.1119 7.59221 40.9667 7.86503C40.7081 8.35031 40.5034 8.8585 40.2579 9.34683C40.1668 9.52719 40.0726 9.70678 39.9876 9.88942C39.8432 10.1951 39.6378 10.4626 39.4741 10.7606C39.3104 11.0587 39.139 11.3315 38.9599 11.6158C38.7915 11.8825 38.6641 12.2271 38.4456 12.4564C38.1854 12.2271 38.0147 11.8901 37.8194 11.6112C37.5962 11.291 37.3692 10.9738 37.1576 10.6468C36.8673 10.1966 36.6055 9.7297 36.326 9.28111C35.9669 8.70031 35.6511 8.08283 35.2658 7.52343C34.8164 6.86851 34.1539 7.04274 33.4597 7.04274C32.8829 7.04274 32.3014 7.02211 31.9601 7.58228C31.7408 7.94298 31.8451 8.4359 31.8644 8.83252C31.8891 9.31932 31.9092 9.80689 31.92 10.2952C31.9393 11.1229 31.9408 11.9467 31.9408 12.7743C31.9408 13.4697 31.9153 14.1659 31.9153 14.8614C31.9153 15.8548 31.9624 16.8567 31.9084 17.8479C31.8775 18.4134 31.869 18.9743 31.869 19.5399C31.869 20.0259 31.869 20.5112 31.869 20.9972C31.869 21.5665 31.9794 22.2291 32.6613 22.3437C33.1246 22.4202 33.6095 22.2857 34.0828 22.3231C34.306 22.3407 34.5276 22.3995 34.75 22.3613C35.1245 22.2925 35.4364 22.0449 35.5276 21.6735C35.5994 21.3816 35.5353 21.043 35.5391 20.742C35.5484 19.9594 35.4982 19.1776 35.5028 18.3958C35.5028 18.162 35.5615 17.9335 35.5801 17.7012C35.5911 17.4602 35.5891 17.2189 35.5739 16.9782C35.57 16.7925 35.5739 16.6061 35.5739 16.4204C35.5739 16.1689 35.5739 15.9175 35.5739 15.6661C35.5739 15.4873 35.5469 14.898 35.8125 15.0624C35.936 15.1388 36.0272 15.3459 36.1044 15.4651C36.2151 15.6558 36.3395 15.8384 36.4766 16.0115C36.6935 16.2606 36.9067 16.5121 37.1036 16.7757C37.5221 17.3382 37.8603 18.2529 38.7367 18.0504C39.0711 17.974 39.2162 17.7677 39.3992 17.5017C39.6289 17.1742 39.8755 16.8586 40.1382 16.5564C40.3907 16.2576 40.5652 15.8227 40.9104 15.6195C40.9922 15.637 40.9621 16.4845 40.9629 16.5495C40.9667 16.9064 40.908 17.2449 40.9335 17.6041C40.9621 18.0038 40.9096 18.4058 40.9111 18.807L40.9158 19.7806C40.9158 20.4034 40.9258 21.0262 40.9158 21.6491C40.9104 21.941 40.8818 22.2322 40.8779 22.5248C40.8725 22.8894 40.8779 23.3876 41.0702 23.7086C41.2864 24.0701 41.6107 24.0984 41.9906 24.0747C42.3937 24.0494 42.7999 24.0815 43.2029 24.0915C43.9249 24.1098 44.6438 23.8813 44.6701 23.0552C44.6925 22.4018 44.5928 21.7629 44.6029 21.1118C44.6145 20.5349 44.6299 19.9579 44.6461 19.3809C44.6616 18.8253 44.7048 18.2621 44.6932 17.7065C44.6832 17.193 44.7311 16.6817 44.7226 16.1682C44.7179 15.6034 44.6554 15.044 44.6554 14.4831Z" fill="#FDC010"/>
|
||||
<path d="M17.9941 8.10813C17.9941 7.47536 17.4782 7.04359 16.8597 7.03824C16.6404 7.03824 16.4211 7.03824 16.2018 7.03824C15.8482 7.03289 15.4799 6.945 15.1332 7.05123C14.7702 7.16127 14.5764 7.48148 14.3926 7.78792C14.1957 8.11501 14.0143 8.44591 13.8058 8.76535C13.4969 9.23763 13.239 9.73513 12.941 10.2128C12.6807 10.6293 12.4066 11.0343 12.1279 11.4355C11.8962 11.7664 11.687 12.1852 11.3812 12.4511C11.1858 12.2448 11.0723 11.9429 10.9241 11.703C10.7441 11.4095 10.548 11.1321 10.3889 10.8279C10.2299 10.5238 10.0029 10.2456 9.85846 9.92771C9.73182 9.65259 9.58434 9.39276 9.45307 9.11841C9.31408 8.83031 9.21524 8.52539 9.07239 8.24034C8.93803 7.9721 8.78823 7.61827 8.59133 7.39512C8.09405 6.83343 7.42458 7.1009 6.78136 7.0688C6.27868 7.04358 5.71576 6.97175 5.35207 7.39971C4.98838 7.82766 5.12891 8.39318 5.13355 8.90367C5.13895 9.50357 5.16675 10.105 5.14513 10.7049C5.12196 11.3468 5.20767 11.9804 5.18914 12.6238C5.17138 13.2436 5.17061 13.8596 5.17138 14.4793C5.17138 15.2688 5.07795 16.0505 5.11347 16.8415C5.16057 17.8816 5.17138 18.927 5.20227 19.9694C5.21462 20.379 5.23856 20.7909 5.21462 21.2006C5.17756 21.8509 5.09339 22.5066 5.15826 23.1592C5.21848 23.7706 5.75437 24.0671 6.32964 24.0862C6.69797 24.0984 7.0717 24.0702 7.44002 24.0625C7.71028 24.0572 8.02842 24.1321 8.28941 24.0663C8.95965 23.8982 8.95579 22.9888 8.94576 22.4493C8.93726 21.951 8.91255 21.4558 8.91101 20.956C8.91101 19.8097 8.84923 18.6527 8.89479 17.5171C8.91641 16.9905 8.83919 16.467 8.86777 15.9397C8.86777 15.8801 8.87703 15.6707 8.93263 15.6448C9.00984 15.6081 9.19131 15.874 9.22296 15.913C9.45462 16.2118 9.64689 16.519 9.90865 16.7941C10.2175 17.122 10.399 17.6676 10.7758 17.9221C11.2986 18.2767 11.9441 17.9863 12.2391 17.4995C12.5402 16.9943 12.8893 16.5186 13.2815 16.0788C13.4784 15.8633 13.6143 15.6203 13.7741 15.3773C13.9757 15.0716 14.1764 14.8133 14.2374 15.3566C14.3309 16.1644 14.1602 16.9951 14.2537 17.8021C14.3641 18.739 14.3108 19.7042 14.2853 20.6496C14.2699 21.2219 14.1015 22.0534 14.6799 22.4172C15.1486 22.7114 15.6621 22.4936 16.174 22.5074C16.7787 22.5234 17.4798 22.7366 17.8126 22.0664C18.0219 21.6469 17.9547 21.1555 17.9547 20.7015C17.9547 19.8945 17.9771 19.0837 17.9392 18.2767C17.9014 17.4697 17.9485 16.6665 17.9246 15.8587C17.913 15.4873 17.9639 15.119 17.9531 14.7476C17.9439 14.4365 17.9083 14.1278 17.9145 13.816C17.9222 13.3781 17.889 12.9387 17.8829 12.5C17.8736 11.8023 17.8898 11.1069 17.9006 10.4084C17.9153 9.64113 17.9941 8.87234 17.9941 8.10813Z" fill="#FDC010"/>
|
||||
<path d="M24.2959 16.1635C23.4744 16.1635 23.3964 16.8062 23.4087 17.4627C23.4188 17.9701 23.3578 18.6029 23.9207 18.849C24.3569 19.04 24.9145 19.0117 25.3801 19.0247C25.9098 19.04 26.4349 19.0308 26.9646 19.0194C27.3738 19.0102 27.7815 19.0415 28.1908 19.0232C28.6178 19.0041 29.0402 18.9743 29.4695 18.9537C29.7421 18.9414 30.1088 18.9942 30.3281 19.1722C30.5737 19.3724 30.6525 19.7622 30.6702 20.0595C30.7034 20.5998 30.8247 21.1668 30.783 21.7071C30.722 22.4354 29.9583 22.3146 29.41 22.2856C29.0239 22.265 28.6494 22.3276 28.2672 22.3414C27.8549 22.3552 27.4441 22.3009 27.0317 22.3001C26.3916 22.3001 25.7507 22.3131 25.1106 22.3292C23.9338 22.3582 22.7586 22.2703 21.5825 22.3131C21.137 22.3292 20.3471 22.4392 19.9533 22.1748C19.7262 22.022 19.561 21.6819 19.5316 21.419C19.5108 21.2364 19.5378 20.3453 19.5147 20.0778C19.4374 19.202 19.473 18.2911 19.4807 17.4115C19.4807 17.1952 19.5216 16.9835 19.5262 16.7688C19.5324 16.4486 19.4807 16.1291 19.4807 15.8089C19.4807 15.2572 19.4575 14.7062 19.4575 14.1544C19.4575 13.5431 19.5587 12.9317 19.5247 12.3203C19.4861 11.6394 19.5247 10.973 19.5247 10.2914C19.5247 10.03 19.5517 9.77169 19.5463 9.51033C19.5378 9.08008 19.4629 8.65747 19.4845 8.22493C19.5216 7.49893 19.8405 7.02512 20.6173 7.04499C21.459 7.06639 22.3007 6.99303 23.1408 7.04499C23.7176 7.07862 24.299 7.05034 24.8728 7.04499C25.3183 7.03964 25.7646 7.00449 26.2094 7.0022C27.0426 7.0022 27.8881 7.10002 28.722 7.06028C29.3954 7.02894 30.2177 6.92501 30.1892 7.83136C30.176 8.22722 30.1451 8.59022 30.1853 8.98685C30.2254 9.36895 30.2455 9.67846 29.9861 9.98414C29.5475 10.5015 28.5877 10.2776 27.997 10.2959C27.3174 10.3166 26.6688 10.2035 25.9893 10.2004C25.3098 10.1974 24.4048 10.1156 23.7979 10.4236C23.6555 10.4953 23.5453 10.6171 23.489 10.7652C23.3145 11.2237 23.3454 11.6539 23.4226 12.1125C23.5153 12.6657 23.9346 12.7338 24.4071 12.7651C24.9183 12.798 25.431 12.8301 25.943 12.8369C26.2364 12.8408 26.5291 12.8537 26.8225 12.8583C27.251 12.8644 27.6757 12.8056 28.1051 12.8125C28.3969 12.8171 28.5869 12.8797 28.7545 13.1342C28.9089 13.3742 28.8703 13.6073 28.8502 13.8763C28.8201 14.2813 28.8155 14.6794 28.7954 15.0845C28.7676 15.6278 28.6101 16.0634 28.0163 16.1605C27.2148 16.2912 26.3368 16.1666 25.5276 16.1796C25.117 16.1958 24.7059 16.1904 24.2959 16.1635Z" fill="#FDC010"/>
|
||||
<path d="M10.3434 28.9512C10.0346 28.8901 9.8284 28.9008 9.54115 29.0391C9.30178 29.1545 9.23228 29.3058 9.13499 29.545C8.87168 30.1969 9.05777 30.8931 9.03152 31.5763C9.00372 32.3015 9.03152 32.9992 9.06318 33.723C9.09329 34.3488 9.49019 34.4696 10.0353 34.5109C10.8909 34.575 11.7187 34.0798 12.2816 33.4792C12.4252 33.3263 12.5202 33.1276 12.6229 32.9442C12.7886 32.6815 12.9331 32.4063 13.0553 32.1212C13.2499 31.6211 13.2952 31.0763 13.1858 30.5515C13.0252 29.879 12.5557 29.3242 11.8731 29.1316C11.5932 29.0418 11.3023 28.9904 11.0083 28.9787C10.7867 28.9818 10.5666 28.9512 10.3434 28.9512ZM17.0613 30.2443C17.0613 30.8174 17.1339 31.3486 17.0227 31.9179C16.9579 32.2496 16.8683 32.5759 16.7764 32.8999C16.4799 33.9316 15.7293 34.6637 15.0066 35.4271C14.7247 35.7252 14.3711 36.0737 14.5888 36.5146C14.7433 36.8256 15.1294 37.0496 15.4251 37.207C15.612 37.3056 15.7865 37.424 15.9741 37.5195C16.1841 37.6265 16.4644 37.69 16.6752 37.7863C17.1563 38.0063 17.025 38.4228 17.0096 38.8477C16.9988 39.1534 17.0482 39.453 17.032 39.7564C17.0127 40.1133 16.9548 40.4602 16.9748 40.8194C17.0011 41.307 16.9385 41.6096 16.4706 41.8182C15.5834 42.2148 14.4522 41.5561 13.7889 40.986C13.3525 40.6179 12.9372 40.226 12.5449 39.8122C12.419 39.6769 11.7287 39.0969 11.5187 38.928C10.9735 38.4909 9.92878 37.7052 9.33884 38.4855C9.04928 38.8676 9.02997 39.3514 9.03383 39.8106C9.03769 40.2699 9.21066 40.7277 9.22224 41.1946C9.23074 41.5729 9.00063 41.8717 8.60914 41.9023C8.41455 41.9176 8.21842 41.8541 8.02769 41.8259C7.74455 41.7856 7.45749 41.7797 7.1729 41.8083C6.80921 41.8335 6.44783 41.8152 6.08491 41.8358C5.60462 41.8625 5.21931 41.8702 5.04325 41.3352C4.94828 41.0471 5.02318 40.7483 5.06101 40.4572C5.09023 40.1971 5.09824 39.9352 5.08495 39.6738C5.0628 39.0399 5.0793 38.4052 5.13437 37.7733C5.18919 37.1711 5.1197 36.5742 5.11429 35.972C5.10966 35.3484 5.09267 34.7287 5.11429 34.1051C5.13437 33.4341 5.06256 32.7654 5.08186 32.0921C5.10039 31.4364 5.15136 30.7846 5.18997 30.1296C5.24003 29.1168 5.22791 28.1018 5.15367 27.0904C5.12433 26.6319 5.04866 26.0167 5.35289 25.6269C5.7274 25.147 6.33355 25.3212 6.86481 25.3083C7.50571 25.2876 8.14584 25.2945 8.78751 25.3228C9.42918 25.351 10.0778 25.2846 10.7226 25.2677C11.6978 25.2425 12.863 25.2998 13.7688 25.714C14.5495 26.0709 15.3996 26.4332 15.9247 27.1416C16.4297 27.8233 16.8119 28.4751 16.9995 29.3127C17.0698 29.623 17.0644 29.9256 17.0644 30.2443H17.0613Z" fill="#FDC010"/>
|
||||
<path d="M22.581 31.8291C22.581 32.4359 22.4736 33.035 22.4759 33.6426C22.4783 34.2501 22.4242 34.8477 22.442 35.4453C22.4597 36.043 22.5238 36.6176 22.5323 37.203C22.5408 37.8075 22.4968 38.399 22.5601 39.002C22.6319 39.6898 22.7462 40.6718 22.4389 41.3114C22.2304 41.7462 21.9385 41.9702 21.4351 41.9411C20.8497 41.9067 20.2884 41.9633 19.7023 41.9702C19.3293 41.974 18.8529 41.9908 18.683 41.5789C18.585 41.3397 18.6514 41.0271 18.6722 40.7757C18.6992 40.4586 18.7363 40.1429 18.7494 39.825C18.7981 38.6734 18.7193 37.5148 18.7093 36.3639C18.7008 35.4858 18.6676 34.6062 18.6622 33.7297C18.6583 33.1328 18.7309 32.5398 18.7325 31.943C18.7325 31.408 18.4807 30.7378 18.9209 30.316C19.3263 29.927 20.0258 30.1234 20.5208 30.1746C20.9548 30.2189 21.4073 30.1601 21.8451 30.1624C22.2265 30.1624 22.5941 30.5514 22.6041 30.9357C22.6126 31.2307 22.581 31.5341 22.581 31.8291Z" fill="#FDC010"/>
|
||||
<path d="M23.9029 41.0852C23.9029 41.5307 24.5593 41.7569 24.9323 41.8211C25.5193 41.9114 26.1109 41.9693 26.7044 41.9946C27.0132 42.0129 27.3221 41.9793 27.631 41.9679C27.9955 41.9549 28.3607 41.977 28.7221 41.9189C29.2255 41.8425 29.6958 41.6133 30.1506 41.3978C30.5139 41.2343 30.849 41.0154 31.1436 40.7489C31.5338 40.3862 31.8864 39.9858 32.1961 39.5537C32.4648 39.193 32.5613 38.8338 32.7543 38.4364C33.02 37.8923 33.0408 37.2726 33.0416 36.6788C33.0416 35.43 32.759 34.3808 32.0841 33.3254C31.8324 32.9311 31.4749 32.6628 31.3258 32.5138C31.078 32.2639 30.7969 32.0553 30.5683 31.7886C30.3807 31.5685 30.129 31.4065 29.9112 31.2154C29.6317 30.9686 29.3522 30.7317 29.0526 30.5085C28.4008 30.024 27.746 29.4157 27.8557 28.5216C27.9391 27.8453 28.6448 27.3333 29.3228 27.3684C29.8449 27.3907 30.3654 27.4417 30.8818 27.5213C31.2996 27.59 31.6864 27.7543 32.0687 27.4624C32.4146 27.1988 32.2864 26.6753 32.2764 26.3016C32.2694 26.0333 32.281 25.7666 32.2679 25.4953C32.2523 25.2825 32.2549 25.0688 32.2756 24.8565C32.3003 24.6516 32.3273 24.417 32.1536 24.2642C32.0262 24.1519 31.8146 24.1045 31.6555 24.0609C31.2254 23.9547 30.7883 23.8781 30.3475 23.8317C29.0441 23.6589 27.5808 23.7598 26.3662 24.268C25.5168 24.6218 24.8265 25.0636 24.3709 25.8828C24.0248 26.502 23.8326 27.1938 23.8103 27.9011C23.7616 29.47 24.1354 31.1482 25.3044 32.28C25.6419 32.6063 25.967 32.9471 26.3222 33.2551C26.499 33.408 26.7082 33.6227 26.8773 33.7794C27.086 33.9536 27.3052 34.1152 27.5337 34.2631C27.8341 34.471 27.9916 34.6345 28.2642 34.8745C28.5678 35.1264 28.7997 35.4526 28.9367 35.8206C29.2294 36.6146 28.9722 37.6119 28.092 37.8839C27.6287 38.0284 27.1407 38.0016 26.6542 37.9603C26.4183 37.9461 26.1849 37.9038 25.9592 37.8342C25.6827 37.7302 25.3935 37.6628 25.099 37.634C24.8218 37.6187 24.4535 37.5874 24.1956 37.7013C23.9037 37.8297 23.9284 38.0734 23.9593 38.3425C24.0064 38.7559 23.9253 39.1571 23.906 39.5652C23.8829 40.0711 23.9029 40.5869 23.9029 41.0852Z" fill="#FDC010"/>
|
||||
<path d="M34.2831 41.4117C34.5634 41.9023 35.0252 41.8824 35.5418 41.8755C36.1093 41.8679 36.6761 41.8664 37.2444 41.8755C38.2359 41.8924 39.2181 41.9061 40.2095 41.8694C41.0056 41.8404 41.7994 41.9222 42.5924 41.8817C42.9407 41.8641 43.2812 41.8167 43.6302 41.8389C43.9793 41.861 44.4024 41.9588 44.7113 41.7701C45.1746 41.4889 44.9615 40.6238 44.8974 40.205C44.8202 39.6914 44.9746 38.8455 44.4472 38.5107C44.1939 38.3487 43.8356 38.3197 43.5461 38.3449C43.1353 38.3808 42.7284 38.3908 42.3176 38.4099C41.5006 38.4481 40.645 38.4611 39.8273 38.4183C39.3161 38.3915 38.6073 38.3587 38.2945 37.8833C37.9965 37.4309 38.0745 36.6713 38.1023 36.1585C38.1401 35.4577 38.5447 35.139 39.2389 35.1337C39.5339 35.1337 39.8281 35.0779 40.123 35.0863C40.3454 35.0924 40.5601 35.1482 40.7817 35.1574C41.0304 35.1673 41.2751 35.1306 41.5238 35.1429C41.9392 35.1627 42.3539 35.1574 42.7693 35.1574C43.1971 35.1574 43.7484 35.2116 44.0488 34.8517C44.3229 34.5208 44.2395 33.9056 44.2426 33.5075C44.2426 33.0145 44.5067 32.3749 44.2225 31.9332C44.0511 31.668 43.8634 31.616 43.5615 31.6153C43.1114 31.6153 42.6643 31.6787 42.2156 31.6649C41.8651 31.6542 41.5207 31.5748 41.1717 31.571C40.74 31.5656 40.3115 31.6428 39.8798 31.642C39.3169 31.642 38.4204 31.6497 38.181 31.0184C38.059 30.6944 38.0946 30.3146 38.0969 29.976C38.0969 29.7109 38.0969 29.4296 38.2081 29.182C38.4027 28.7533 38.8822 28.6631 39.31 28.628C39.947 28.5753 40.5501 28.6815 41.1817 28.7204C41.5616 28.7441 41.9454 28.712 42.3253 28.7044C42.6712 28.6983 43.0272 28.751 43.3716 28.7235C43.6418 28.7013 43.9553 28.6135 44.1329 28.4033C44.3924 28.0976 44.3754 27.7828 44.3383 27.403C44.2991 27.0287 44.2942 26.6517 44.3237 26.2765C44.3491 25.9594 44.3715 25.5925 44.0681 25.3969C43.8511 25.2571 43.5754 25.2739 43.3291 25.2853C42.9059 25.3164 42.4813 25.3238 42.0573 25.3075C41.3245 25.2639 40.5848 25.225 39.8559 25.2907C39.2322 25.3417 38.6056 25.3474 37.981 25.3075C37.1517 25.2593 36.3294 25.3457 35.5008 25.3167C35.1642 25.3052 34.7711 25.2326 34.4847 25.4542C34.2923 25.6128 34.1606 25.8318 34.1117 26.0748C33.9372 26.8229 34.1688 27.5963 34.1117 28.3513C34.0754 28.8588 34.087 29.3716 34.0607 29.8798C34.0518 30.2556 34.0634 30.6316 34.0955 31.0062C34.1163 31.3745 34.0654 31.7322 34.0368 32.0983C34.002 32.5453 34.0237 33.0038 34.0244 33.4524C34.0244 34.0019 34.0314 34.5552 34.0507 35.1047C34.063 35.4684 34.1117 35.8131 34.0723 36.1745C34.0555 36.336 34.0475 36.4983 34.0484 36.6606C34.0484 37.5532 34.0407 38.4481 34.0746 39.3353C34.0878 39.683 34.1156 40.0231 34.1024 40.37C34.0916 40.7399 34.0669 41.0968 34.2831 41.4117Z" fill="#FDC010"/>
|
||||
<path d="M22.7506 26.7158C22.7158 27.6106 22.0379 28.4069 21.258 28.8074C20.8495 29.0176 20.404 29.1131 19.9492 28.9877C19.5739 28.8823 19.1391 28.6179 18.9307 28.2801C18.6697 27.8552 18.4728 27.5037 18.3901 27.0031C18.3206 26.5272 18.4293 26.0425 18.6959 25.6405C19.1098 24.9833 19.9669 24.6318 20.726 24.7708C21.1854 24.8543 21.6175 25.0468 21.9854 25.3318C22.4518 25.7062 22.6958 26.1258 22.7506 26.7158Z" fill="#FDC010"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1409_1466">
|
||||
<rect width="40" height="35" fill="white" transform="translate(5 7)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
11
site/public/clients/skiff.svg
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M25 47C37.1503 47 47 37.1503 47 25C47 12.8497 37.1503 3 25 3C12.8497 3 3 12.8497 3 25C3 37.1503 12.8497 47 25 47Z" fill="white"/>
|
||||
<mask id="mask0_1409_3225" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="5" y="6" width="39" height="38">
|
||||
<path d="M5.99121 6.08789H43.8158V43.9124H5.99121V6.08789Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1409_3225)">
|
||||
<path d="M30.3249 8.02099C31.9638 7.97892 33.6029 8.3151 35.1159 8.98745C33.9764 8.27413 32.765 7.68254 31.5018 7.22243C25.1974 4.91088 18.0949 6.08769 12.9256 10.3325C12.7574 10.4584 12.337 10.8366 12.1691 11.0049C12.0009 11.1732 11.6226 11.5093 11.4547 11.6772C11.2444 11.8876 10.9923 12.1817 10.782 12.3917C10.6141 12.602 10.2779 12.9803 10.1517 13.1481C9.98343 13.4006 9.77347 13.6526 9.64726 13.863C9.52143 14.0308 9.22695 14.4932 9.05905 14.7032C9.01698 14.7873 8.84869 15.0394 8.80701 15.1239C8.76494 15.1656 8.63874 15.4176 8.59667 15.4597C8.51253 15.5859 8.21842 16.1324 8.13428 16.2586C8.05053 16.4686 7.7981 16.9306 7.71396 17.141C7.6302 17.3509 7.46192 17.6871 7.37778 17.8974C7.33571 17.9816 7.12575 18.5698 7.08368 18.6539C6.99954 18.8218 6.91578 19.1163 6.87371 19.2842C6.7475 19.6204 6.66336 20.0407 6.53753 20.419C6.49546 20.6293 6.36926 21.1754 6.32719 21.3858L6.28512 21.5537C5.44448 25.9668 6.28512 30.6316 8.55459 34.5403C8.80701 34.9185 9.10112 35.4226 9.35315 35.8008C9.47936 35.9691 9.64725 36.2215 9.77347 36.3473L10.1938 36.8939C10.32 37.0618 10.6982 37.4821 10.8241 37.6504C11.0344 37.8603 11.2865 38.1544 11.4964 38.3644L11.9588 38.8268L12.2112 39.0371L12.2529 39.0792L12.337 39.1213L12.4633 39.2054C12.6312 39.3312 12.8415 39.4574 13.0094 39.5837L13.1356 39.6674C13.1777 39.7099 13.2198 39.7099 13.2618 39.7516C13.4297 39.8357 13.6821 40.0036 13.808 40.0877C13.8921 40.1302 14.0183 40.2139 14.1024 40.256C14.1862 40.2981 14.4386 40.4239 14.5645 40.466C14.6907 40.5501 14.9006 40.5922 15.0268 40.6763L16.0354 41.0546C16.2036 41.0966 16.4136 41.1804 16.5819 41.2225C16.7081 41.2645 16.9601 41.3066 17.0864 41.3487C17.2122 41.3907 17.4225 41.3907 17.5904 41.4328C18.1611 41.5164 18.737 41.5584 19.3138 41.5586C20.7005 41.5166 22.0873 41.2225 23.3482 40.6763C26.038 39.5416 28.2654 37.2721 29.316 34.4982L29.4422 34.2041C29.4843 34.1199 29.5685 33.8258 29.6105 33.7417C29.6943 33.4897 29.7784 33.1952 29.8205 32.9431C29.8205 32.859 29.8626 32.6911 29.9046 32.607C29.9888 32.1446 30.0725 31.5984 30.0725 31.136V30.5474C29.6943 30.5474 29.3581 30.5054 28.9799 30.4637C23.222 29.8751 18.8514 24.8738 19.0197 19.0322C19.1455 12.854 24.273 7.97892 30.3249 8.02099ZM15.9516 37.44C15.2372 37.0197 14.5224 36.5156 13.9342 35.927C11.3285 33.4055 9.5635 30.0434 8.9749 26.4288C7.88224 20.0411 10.53 13.4843 15.7833 9.66018C18.7252 7.51653 22.4239 6.33973 26.0801 6.46594C21.7511 6.6759 17.5067 8.48338 14.4386 11.5935C10.6141 15.4176 8.80701 20.9655 9.68933 26.3026C10.2779 30.0013 12.1271 33.5317 14.9006 36.0532C17.7587 38.5747 22.0456 39.1633 25.4915 37.5241C22.5917 39.2054 18.8514 39.1213 15.9516 37.44ZM16.4977 32.859C9.73139 26.093 10.9503 14.6194 19.0197 9.40776C20.0852 8.72817 21.228 8.17803 22.4239 7.76895C24.3151 7.13829 26.3321 6.88625 28.3075 7.05453C24.3568 7.01208 20.4485 8.52506 17.6325 11.2152C11.7068 16.7627 11.2865 26.0926 16.7081 32.1866C16.8339 32.3129 17.0443 32.5649 17.2122 32.7332C19.7761 35.3809 24.0206 36.1374 27.2569 34.2878C23.8948 36.5573 19.2296 35.7591 16.4977 32.859ZM18.3469 27.858L18.6831 28.3621L19.0613 28.8666L19.4816 29.3706C19.902 29.833 20.3223 30.2954 20.8267 30.6737C22.8021 32.2287 25.5757 32.859 28.0134 32.0184C26.4163 32.7332 24.5671 32.7748 22.8859 32.2708C21.3729 31.8084 20.0702 30.9257 19.0613 29.791C17.0864 27.6839 15.8733 24.9766 15.6154 22.1002C14.7748 13.6947 22.0456 6.54969 30.4508 7.81064C28.5175 7.72688 26.5846 7.97892 24.8192 8.65127C24.3568 8.81955 23.8106 9.07197 23.3903 9.32362L22.97 9.53397C22.8859 9.57604 22.6338 9.74394 22.5497 9.78601C22.3818 9.87015 22.1714 10.0384 22.0035 10.1222C21.8353 10.2484 21.6253 10.3746 21.4991 10.5004C16.0354 14.4932 14.6486 22.1427 18.3469 27.858Z" fill="black"/>
|
||||
<path d="M36.6709 39.6253C36.8388 39.4995 37.2591 39.1212 37.4274 38.9529C37.5953 38.7846 37.9735 38.4485 38.1418 38.2806C38.3518 38.0702 38.6042 37.7761 38.8142 37.5662C38.9824 37.3558 39.3186 36.9776 39.4444 36.8097C39.6127 36.5993 39.8227 36.3473 39.9489 36.1369C40.0751 35.969 40.3692 35.5066 40.5371 35.2967C40.5792 35.2125 40.7475 34.9605 40.7895 34.876C40.8316 34.8343 40.9574 34.5823 40.9995 34.5402C41.0836 34.414 41.3777 33.8675 41.4619 33.7412C41.546 33.5313 41.7981 33.0689 41.8822 32.8589C41.9663 32.649 42.1342 32.3128 42.2184 32.1024C42.2604 32.0183 42.4704 31.4301 42.5125 31.3459C42.5966 31.178 42.6808 30.8836 42.7228 30.7157C42.8487 30.3795 42.9328 29.9592 43.059 29.5809C43.1011 29.3706 43.2269 28.8244 43.269 28.6141L43.311 28.4462C44.1517 24.0331 43.311 19.3683 41.0416 15.4596C40.7895 15.0814 40.4954 14.5769 40.243 14.1987C40.1589 14.0308 39.9489 13.8204 39.8648 13.6525L39.4444 13.106C39.3186 12.9381 38.9404 12.5178 38.8142 12.3495C38.6042 12.1396 38.3518 11.8455 38.1418 11.6355L37.6794 11.1727L37.4274 10.9627L37.3853 10.9207L37.3012 10.8786L37.0912 10.7528C36.9229 10.6266 36.713 10.5004 36.5447 10.3745L36.4185 10.2904C36.3764 10.2479 36.3347 10.2479 36.2927 10.2063C36.1244 10.1221 35.8723 9.95422 35.7461 9.87008C35.662 9.82801 35.5362 9.74387 35.452 9.7018C35.3679 9.65973 35.1158 9.53391 34.9896 9.49184C34.8634 9.4077 34.6535 9.36563 34.5272 9.28149L33.5187 8.90324C33.3504 8.86117 33.1405 8.77742 32.9722 8.73535C32.8464 8.69328 32.594 8.65121 32.4681 8.60914C32.3419 8.56706 32.132 8.56706 31.9637 8.52499C31.3932 8.44132 30.8173 8.39927 30.2407 8.39917C28.8536 8.44124 27.4668 8.73496 26.2058 9.28149C23.5161 10.4162 21.2887 12.6857 20.2381 15.4596L20.1118 15.7537C20.0702 15.8379 19.986 16.132 19.944 16.2161C19.8598 16.4682 19.7757 16.7626 19.7336 17.0147C19.7336 17.0988 19.6919 17.2667 19.6498 17.3509C19.5657 17.8132 19.4816 18.3594 19.4816 18.8218V19.4524C25.7018 19.4941 30.661 24.7054 30.4928 30.9256C30.3245 37.1038 25.2394 41.9368 19.1875 41.9368C17.5483 41.9789 15.9095 41.6427 14.3965 40.9704C15.536 41.6837 16.7474 42.2753 18.0107 42.7354C24.3988 45.0469 31.4592 43.8701 36.6709 39.6253ZM33.6449 12.5599C34.3594 12.9802 35.0738 13.4843 35.662 14.0729C38.2676 16.5944 40.033 19.9565 40.6213 23.5711C41.7139 29.9588 39.0241 36.5572 33.7708 40.3397C30.8289 42.4833 27.1306 43.6602 23.4744 43.5339C27.845 43.3657 32.0899 41.5586 35.1158 38.4485C38.9824 34.6239 40.7475 29.0765 39.8648 23.6969C39.2766 19.9986 37.4274 16.4682 34.6535 13.9466C31.7958 11.4251 27.5089 10.8365 24.0626 12.4757C27.0044 10.7945 30.7448 10.8786 33.6449 12.5599ZM33.0984 17.1409C39.8648 23.9069 38.6459 35.3804 30.5769 40.5921C29.5113 41.2717 28.3685 41.8218 27.1727 42.2309C25.2815 42.8616 23.264 43.1136 21.2887 42.9453C25.2394 42.9874 29.1481 41.4744 31.9637 38.7846C37.9315 33.1951 38.3097 23.8652 32.9305 17.8132C32.8043 17.687 32.594 17.435 32.4261 17.2667C29.8625 14.619 25.6176 13.8625 22.3813 15.7117C25.7018 13.4422 30.3665 14.2411 33.0984 17.1409ZM24.8611 41.4324C25.3235 41.2645 25.8697 41.0124 26.29 40.76L26.7103 40.55C26.7944 40.508 27.0465 40.3397 27.1306 40.2976C27.2985 40.2139 27.5089 40.0456 27.6768 39.9618C27.845 39.8356 28.055 39.7094 28.1812 39.5836C33.6029 35.5066 34.9476 27.858 31.2913 22.1418L30.9131 21.6378L30.5348 21.1333L30.1145 20.6289C29.6942 20.1669 29.2739 19.7045 28.7698 19.3262C26.7944 17.7712 24.0205 17.1409 21.5831 17.9811C23.1799 17.2671 25.029 17.2246 26.7103 17.7291C28.2233 18.1915 29.5263 19.0742 30.5348 20.2089C32.5099 22.3159 33.7231 25.0233 33.9811 27.8997C34.8217 36.3052 27.5509 43.4498 19.1454 42.1889C21.1208 42.3992 23.0541 42.1051 24.8611 41.4324Z" fill="black"/>
|
||||
<path d="M19.9862 19.5366C19.8599 19.5366 19.7341 19.4941 19.6079 19.4941V19.5366C19.902 19.5366 20.1961 19.5787 20.4906 19.6207C20.3223 19.5783 20.1544 19.5783 19.9862 19.5366Z" fill="black"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.8 KiB |
9
site/public/clients/swaralink.svg
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
36
site/public/ee/ee-logo.svg
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<svg width="611" height="111" viewBox="0 0 611 111" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_44_130)">
|
||||
<path d="M47.8516 42.9951C47.6634 42.9951 47.4753 42.9757 47.2872 42.9418C46.3128 42.7527 45.4976 42.0788 45.1213 41.1529L35.387 17.2484C34.7696 15.7359 35.4931 14.0053 36.9981 13.3847C38.5031 12.7642 40.2252 13.4914 40.8426 15.0039L48.5992 34.0557C50.4371 30.9144 52.2701 26.1393 51.0883 20.7049C49.4337 13.1181 42.7914 7.34439 34.5862 6.12759L25.8842 25.9454C25.2282 27.4434 23.482 28.122 21.9963 27.4627C20.5057 26.8034 19.8304 25.0534 20.4864 23.5554L30.0568 1.76458C30.5536 0.63504 31.6968 -0.0581952 32.9172 -2.1646e-05C44.6582 0.654431 54.5035 8.64845 56.8527 19.4348C59.5443 31.7773 50.9532 41.0802 49.9644 42.0982C49.4048 42.6751 48.6378 42.9951 47.8516 42.9951Z" fill="#F03F20"/>
|
||||
<path d="M13.9358 64.466C12.8746 64.466 11.8471 63.8891 11.3213 62.8759L0.337655 41.7832C-0.231547 40.6876 -0.0675395 39.3544 0.752498 38.4333C8.58626 29.6152 20.9399 26.8617 30.7948 31.7434C42.0775 37.328 43.954 49.8741 44.1325 51.2848C44.2579 52.2738 43.8768 53.2627 43.1195 53.9124C42.3621 54.562 41.3347 54.7801 40.3796 54.4989L15.7109 47.2466C14.148 46.7861 13.2508 45.1427 13.7091 43.5672C14.1673 41.9965 15.8026 41.0948 17.3703 41.5553L37.0271 47.3387C35.7295 43.9356 33.1584 39.5192 28.19 37.0614C21.2582 33.6292 12.6237 35.2483 6.56029 40.9397L16.5503 60.1321C17.3076 61.5816 16.748 63.3753 15.3057 64.1315C14.8716 64.3594 14.4037 64.4709 13.9406 64.4709L13.9358 64.466Z" fill="#F03F20"/>
|
||||
<path d="M36.7618 94.6581C36.5737 94.6581 36.3855 94.6387 36.1974 94.6047L12.9373 90.0818C11.7314 89.8491 10.7955 88.8843 10.5881 87.6724C8.61039 76.0231 14.1722 64.5969 24.1139 59.8945C35.4883 54.5135 46.4237 60.8592 47.6297 61.6009C48.4787 62.1197 49.0093 63.0359 49.043 64.0345C49.0768 65.0332 48.6041 65.9785 47.7937 66.5554L26.7718 81.4139C25.4404 82.3544 23.6026 82.0344 22.662 80.6964C21.7262 79.3584 22.0445 77.5066 23.3759 76.5661L40.1288 64.7229C36.6701 63.6225 31.6293 62.8856 26.6223 65.2562C19.6278 68.5672 15.5083 76.3625 16.1547 84.6716L37.3117 88.7874C38.9083 89.0976 39.9551 90.6538 39.6464 92.2584C39.3714 93.674 38.1365 94.6581 36.7521 94.6581H36.7618Z" fill="#F03F20"/>
|
||||
<path d="M56.4523 111C55.9651 111 55.4731 110.879 55.0293 110.632C44.7306 104.921 39.3135 93.4316 41.8508 82.684C44.7547 70.3949 56.5102 65.7555 57.8415 65.2707C58.7773 64.9265 59.8193 65.0817 60.6152 65.6779C61.4111 66.2742 61.8549 67.2341 61.797 68.2327L60.2486 94.0182C60.1521 95.6519 58.758 96.8978 57.1276 96.8008C55.502 96.7038 54.2623 95.298 54.3588 93.6643L55.5888 73.1193C52.574 75.1505 48.8645 78.6555 47.5862 84.0608C45.8015 91.6185 49.2938 99.7192 56.1629 104.392L72.554 90.3338C73.7937 89.2722 75.6556 89.4176 76.712 90.6635C77.7684 91.9094 77.6237 93.7806 76.384 94.8423L58.3625 110.297C57.8174 110.767 57.1324 111.005 56.4475 111.005L56.4523 111Z" fill="#F03F20"/>
|
||||
<path d="M90.098 92.1517C82.5102 92.1517 75.2794 88.9134 70.6438 82.9652C62.892 73.0175 66.616 60.8932 67.0646 59.5406C67.3829 58.5953 68.1499 57.8681 69.1098 57.616C70.0698 57.364 71.0972 57.616 71.8353 58.2802L90.9277 75.5723C92.1384 76.6679 92.2349 78.544 91.1447 79.7559C90.0546 80.9727 88.1878 81.0697 86.9818 79.9741L71.7629 66.1966C71.4638 69.8276 71.8739 74.9324 75.2842 79.3099C80.0501 85.423 88.5303 87.7306 96.446 85.2485L95.7273 63.6031C95.6742 61.9645 96.9477 60.5974 98.5781 60.5441C100.209 60.4762 101.569 61.7706 101.622 63.4092L102.413 87.2021C102.452 88.4335 101.728 89.563 100.594 90.0381C97.1648 91.4682 93.5904 92.1566 90.0931 92.1566L90.098 92.1517Z" fill="#F03F20"/>
|
||||
<path d="M89.0126 60.5102C88.9451 60.5102 88.8824 60.5102 88.8148 60.5102C76.2442 60.3987 69.1291 49.9129 68.3622 48.7203C67.8219 47.8817 67.7399 46.8248 68.1403 45.9135C68.5406 44.9972 69.3751 44.3525 70.3544 44.1876L95.708 39.9652C97.3143 39.7034 98.8338 40.7893 99.0991 42.4037C99.3644 44.018 98.279 45.545 96.6727 45.8117L76.4661 49.176C79.1095 51.6775 83.3302 54.5328 88.8631 54.5813C88.9113 54.5813 88.9644 54.5813 89.0126 54.5813C96.6824 54.5813 103.691 49.3748 106.677 41.6522L89.3889 28.7183C88.0816 27.7391 87.8115 25.8824 88.7859 24.5686C89.7603 23.2549 91.6078 22.9834 92.915 23.9626L111.921 38.1764C112.905 38.9132 113.334 40.1882 112.996 41.3711C109.769 52.6616 99.9288 60.5053 89.0174 60.5053L89.0126 60.5102Z" fill="#F03F20"/>
|
||||
<path d="M62.8149 41.0463C61.7585 41.0463 61.0301 40.9833 60.7455 40.959C59.7566 40.8621 58.8835 40.2658 58.4253 39.3835C57.967 38.4964 57.9815 37.4395 58.4638 36.5669L70.9863 14.0101C71.7822 12.58 73.5766 12.071 74.9996 12.8661C76.4227 13.6659 76.9291 15.4693 76.1381 16.8994L66.1577 34.8751C69.7466 34.3563 74.6041 32.8244 78.0917 28.505C82.9637 22.4744 83.311 13.6514 79.1433 6.44757L58.3047 11.9692C56.7321 12.3861 55.1162 11.4408 54.7013 9.86042C54.2865 8.27519 55.2271 6.65603 56.7996 6.23912L79.7028 0.164827C80.8894 -0.15028 82.1484 0.310261 82.8575 1.31375C89.6687 10.9463 89.5915 23.6621 82.6694 32.2379C76.3358 40.0816 67.0163 41.0463 62.8149 41.0463Z" fill="#F03F20"/>
|
||||
<path d="M139.098 34.7539H156.656V40.6003H145.422V49.273H155.604V55.1195H145.422V64.1945H156.859V70.041H139.098V34.749V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M183.298 51.8472L184.002 45.0893H183.751L181.894 51.1394L176.173 63.5401H174.065L167.997 51.0861L166.14 44.9875H165.84L166.796 51.7938V70.0458H160.824V34.7538H166.892L174.219 50.0293L175.425 54.4165H175.628L176.781 49.9274L183.655 34.7538H189.626V70.0458H183.307V51.8472H183.298Z" fill="#2C232F"/>
|
||||
<path d="M194.281 34.7539H211.84V40.6003H200.6V49.273H210.783V55.1195H200.6V64.1945H212.037V70.041H194.276V34.749L194.281 34.7539Z" fill="#2C232F"/>
|
||||
<path d="M216.003 35.1078C217.373 34.8072 218.844 34.589 220.416 34.4533C221.989 34.3176 223.344 34.2497 224.478 34.2497C225.915 34.2497 227.319 34.3951 228.694 34.6763C230.064 34.9623 231.279 35.481 232.331 36.2373C233.383 36.9935 234.236 38.0213 234.888 39.3108C235.539 40.6052 235.867 42.2437 235.867 44.2265C235.867 47.0818 235.341 49.4136 234.285 51.2073C233.233 53.0058 231.786 54.242 229.943 54.911L231.95 56.5253L238.423 70.0361H231.149L225.028 56.1229L222.317 55.4685V70.041H215.998V35.1029L216.003 35.1078ZM222.322 51.1394H224.478C226.05 51.1394 227.237 50.6595 228.038 49.7045C228.839 48.7446 229.244 47.2612 229.244 45.2445C229.244 43.732 228.911 42.4958 228.24 41.5408C227.57 40.5809 226.518 40.1058 225.081 40.1058C224.545 40.1058 224.029 40.1252 223.528 40.1543C223.026 40.1882 222.626 40.2561 222.322 40.3579V51.1491V51.1394Z" fill="#2C232F"/>
|
||||
<path d="M250.719 51.7939H261.553V67.4232C260.314 68.6012 258.871 69.4495 257.212 69.9683C255.557 70.487 253.908 70.7488 252.272 70.7488C250.299 70.7488 248.51 70.3949 246.904 69.6919C245.297 68.9841 243.937 67.8837 242.813 66.3906C241.694 64.8975 240.826 62.9971 240.203 60.6944C239.581 58.3917 239.272 55.6285 239.272 52.3998C239.272 49.1712 239.639 46.1995 240.377 43.8774C241.11 41.5602 242.089 39.6695 243.31 38.2055C244.53 36.7415 245.953 35.6846 247.574 35.0302C249.195 34.3757 250.912 34.0461 252.716 34.0461C254.322 34.0461 255.784 34.1915 257.106 34.4727C258.427 34.7587 259.522 35.0884 260.391 35.4568L259.083 40.9542C258.413 40.6536 257.636 40.4015 256.749 40.1979C255.861 39.9943 254.786 39.8974 253.512 39.8974C252.34 39.8974 251.279 40.1349 250.328 40.6052C249.373 41.0754 248.573 41.8171 247.921 42.8254C247.27 43.8338 246.768 45.1378 246.416 46.7328C246.064 48.3277 245.891 50.2377 245.891 52.4532C245.891 56.7241 246.532 59.8654 247.82 61.8821C249.108 63.8988 250.806 64.9072 252.914 64.9072C253.584 64.9072 254.226 64.8053 254.843 64.6017C255.461 64.3981 256.006 64.0733 256.474 63.6322V56.3363L250.705 55.5461V51.7987L250.719 51.7939Z" fill="#2C232F"/>
|
||||
<path d="M265.417 34.7539H282.976V40.6003H271.741V49.273H281.924V55.1195H271.741V64.1945H283.178V70.041H265.417V34.749V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M294.866 52.7004L292.555 46.5001H292.305L293.105 52.5986V70.041H287.134V34.4969H292.001L302.082 52.2447L304.239 58.3432H304.538L303.737 52.3417V34.7442H309.709V70.2882H304.842L294.856 52.6907L294.866 52.7004Z" fill="#2C232F"/>
|
||||
<path d="M334.295 68.6351C333.427 69.3768 332.265 69.9149 330.808 70.2494C329.351 70.5839 327.904 70.7536 326.466 70.7536C324.662 70.7536 322.979 70.4433 321.426 69.8228C319.872 69.2023 318.507 68.1697 317.34 66.7202C316.168 65.2756 315.251 63.3753 314.581 61.0241C313.91 58.6729 313.577 55.7788 313.577 52.3514C313.577 48.924 313.954 45.8311 314.706 43.4799C315.459 41.1287 316.443 39.2526 317.668 37.8565C318.888 36.4603 320.282 35.481 321.855 34.909C323.427 34.337 325.014 34.0509 326.621 34.0509C328.227 34.0509 329.689 34.1867 330.909 34.4533C332.13 34.7248 333.123 35.0253 333.895 35.3598L332.641 40.9542C332.004 40.6197 331.261 40.3579 330.407 40.1737C329.554 39.9895 328.541 39.8974 327.373 39.8974C325.068 39.8974 323.292 40.9057 322.058 42.9224C320.818 44.9391 320.2 48.0998 320.2 52.3998C320.2 54.2469 320.34 55.9387 320.625 57.4658C320.909 58.9977 321.363 60.3163 321.98 61.4216C322.598 62.5317 323.384 63.3898 324.339 63.9909C325.289 64.5969 326.438 64.8975 327.774 64.8975C328.946 64.8975 329.949 64.7375 330.784 64.4175C331.618 64.0976 332.371 63.7194 333.041 63.2831L334.295 68.6254V68.6351Z" fill="#2C232F"/>
|
||||
<path d="M337.46 34.7539H355.018V40.6003H343.784V49.273H353.967V55.1195H343.784V64.1945H355.221V70.041H337.46V34.749V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M372.461 34.7539H388.061V38.2346H376.223V50.1844H387.111V53.6651H376.223V66.57H388.312V70.0507H372.461V34.7587V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M399.498 47.6635L397.342 42.1177H397.192L397.742 47.6635V70.0507H394.129V34.2061H396.387L409.382 57.0974L411.437 62.3911H411.639L411.089 57.0974V34.7636H414.702V70.6082H412.397L399.503 47.6684L399.498 47.6635Z" fill="#2C232F"/>
|
||||
<path d="M430.954 52.4483H440.635V67.9758C439.699 68.8484 438.493 69.5126 437.022 69.9683C435.551 70.424 434.06 70.6469 432.555 70.6469C430.683 70.6469 428.986 70.2931 427.461 69.5901C425.937 68.8824 424.644 67.7819 423.573 66.2888C422.502 64.7957 421.673 62.905 421.089 60.6169C420.505 58.3335 420.211 55.5945 420.211 52.3998C420.211 49.2051 420.563 46.3062 421.263 44.0035C421.967 41.7008 422.908 39.8198 424.099 38.3558C425.286 36.8917 426.641 35.8252 428.161 35.1562C429.68 34.4824 431.248 34.1479 432.849 34.1479C434.451 34.1479 435.802 34.2594 436.887 34.4775C437.972 34.6957 438.903 34.9914 439.67 35.3598L438.768 38.7872C438.098 38.4188 437.306 38.1328 436.385 37.9292C435.464 37.7256 434.403 37.6286 433.201 37.6286C432 37.6286 430.91 37.8807 429.839 38.3849C428.768 38.889 427.809 39.7229 426.955 40.8815C426.101 42.0401 425.426 43.5623 424.924 45.4433C424.422 47.3242 424.171 49.6463 424.171 52.3998C424.171 57.4415 424.967 61.1647 426.554 63.5692C428.141 65.9737 430.327 67.1759 433.1 67.1759C434.837 67.1759 436.279 66.759 437.413 65.9252V55.7303L430.939 54.7413V52.4532L430.954 52.4483Z" fill="#2C232F"/>
|
||||
<path d="M446.858 34.7539H450.62V70.0458H446.858V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M463.311 47.6635L461.155 42.1177H461.006L461.555 47.6635V70.0507H457.942V34.2061H460.2L473.195 57.0974L475.25 62.3911H475.453L474.903 57.0974V34.7636H478.516V70.6082H476.21L463.316 47.6684L463.311 47.6635Z" fill="#2C232F"/>
|
||||
<path d="M485.081 34.7539H500.681V38.2346H488.843V50.1844H499.731V53.6651H488.843V66.57H500.932V70.0507H485.081V34.7587V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M506.754 34.7539H522.354V38.2346H510.517V50.1844H521.404V53.6651H510.517V66.57H522.605V70.0507H506.754V34.7587V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M528.427 35.1078C529.532 34.8411 530.742 34.6472 532.064 34.526C533.386 34.4097 534.597 34.3515 535.701 34.3515C537.004 34.3515 538.243 34.5115 539.416 34.8314C540.588 35.1514 541.606 35.6895 542.474 36.4457C543.342 37.202 544.037 38.1958 544.558 39.4223C545.074 40.6488 545.334 42.1855 545.334 44.0374C545.334 46.8297 544.755 49.0646 543.603 50.7419C542.45 52.4241 540.921 53.5488 539.01 54.1208L540.916 55.9872L547.838 70.0555H543.472L535.947 54.6783L532.185 53.9221V70.0555H528.422V35.1175L528.427 35.1078ZM532.19 51.3915H535.2C537.105 51.3915 538.61 50.8049 539.715 49.6269C540.819 48.4489 541.369 46.6504 541.369 44.2313C541.369 42.3843 540.911 40.8524 539.99 39.6453C539.068 38.4333 537.708 37.8322 535.899 37.8322C535.229 37.8322 534.534 37.8565 533.815 37.9098C533.096 37.9583 532.551 38.0358 532.185 38.1376V51.3964L532.19 51.3915Z" fill="#2C232F"/>
|
||||
<path d="M553.409 34.7539H557.172V70.0458H553.409V34.7539Z" fill="#2C232F"/>
|
||||
<path d="M569.863 47.6635L567.707 42.1177H567.557L568.107 47.6635V70.0507H564.494V34.2061H566.752L579.747 57.0974L581.802 62.3911H582.004L581.455 57.0974V34.7636H585.068V70.6082H582.762L569.868 47.6684L569.863 47.6635Z" fill="#2C232F"/>
|
||||
<path d="M601.314 52.4483H610.995V67.9758C610.059 68.8484 608.853 69.5126 607.382 69.9683C605.911 70.424 604.42 70.6469 602.915 70.6469C601.044 70.6469 599.346 70.2931 597.822 69.5901C596.297 68.8824 595.004 67.7819 593.934 66.2888C592.863 64.7957 592.033 62.905 591.449 60.6169C590.866 58.3335 590.571 55.5945 590.571 52.3998C590.571 49.2051 590.924 46.3062 591.623 44.0035C592.327 41.7008 593.268 39.8198 594.459 38.3558C595.646 36.8917 597.002 35.8252 598.521 35.1562C600.04 34.4824 601.608 34.1479 603.21 34.1479C604.811 34.1479 606.162 34.2594 607.247 34.4775C608.332 34.6957 609.263 34.9914 610.03 35.3598L609.128 38.7872C608.458 38.4188 607.667 38.1328 606.745 37.9292C605.824 37.7256 604.763 37.6286 603.562 37.6286C602.361 37.6286 601.271 37.8807 600.2 38.3849C599.129 38.889 598.169 39.7229 597.315 40.8815C596.461 42.0401 595.786 43.5623 595.284 45.4433C594.783 47.3242 594.532 49.6463 594.532 52.3998C594.532 57.4415 595.328 61.1647 596.915 63.5692C598.502 65.9737 600.687 67.1759 603.461 67.1759C605.197 67.1759 606.639 66.759 607.773 65.9252V55.7303L601.299 54.7413V52.4532L601.314 52.4483Z" fill="#2C232F"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_44_130">
|
||||
<rect width="611" height="111" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
9
site/public/ee/ee-mark.svg
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.2351 10.571C11.1909 10.571 11.1468 10.5664 11.1026 10.5585C10.8738 10.5142 10.6824 10.3564 10.594 10.1395L8.30847 4.54067C8.1635 4.18642 8.33338 3.78108 8.68675 3.63573C9.04011 3.49039 9.44446 3.66072 9.58942 4.01497L11.4106 8.47723C11.8422 7.74148 12.2726 6.62307 11.9951 5.35024C11.6066 3.57328 10.047 2.22098 8.12044 1.93599L6.07724 6.57766C5.92321 6.92851 5.51321 7.08745 5.16437 6.93303C4.81439 6.77861 4.65583 6.36873 4.80985 6.01788L7.05695 0.914095C7.1736 0.649538 7.44202 0.48717 7.72856 0.500795C10.4853 0.654079 12.797 2.52641 13.3485 5.05276C13.9805 7.94359 11.9634 10.1225 11.7312 10.3609C11.5998 10.496 11.4197 10.571 11.2351 10.571Z" fill="#FF1B00"/>
|
||||
<path d="M3.27171 15.6001C3.02254 15.6001 2.78129 15.465 2.65783 15.2277L0.0789077 10.2874C-0.054739 10.0308 -0.0162306 9.71856 0.176311 9.50282C2.01565 7.43747 4.91624 6.79255 7.23014 7.93593C9.87928 9.24394 10.3199 12.1825 10.3618 12.5129C10.3912 12.7445 10.3018 12.9761 10.1239 13.1283C9.9461 13.2804 9.70487 13.3315 9.48062 13.2657L3.68849 11.567C3.32153 11.4592 3.11087 11.0743 3.21848 10.7053C3.32606 10.3374 3.71002 10.1262 4.07811 10.234L8.69346 11.5886C8.38879 10.7916 7.78511 9.75716 6.61854 9.1815C4.99098 8.37762 2.96363 8.75684 1.53996 10.0899L3.88558 14.5851C4.06339 14.9245 3.932 15.3447 3.59335 15.5218C3.49143 15.5752 3.38157 15.6013 3.27283 15.6013L3.27171 15.6001Z" fill="#FF1B00"/>
|
||||
<path d="M8.63118 22.6711C8.58701 22.6711 8.54282 22.6666 8.49866 22.6586L3.03726 21.5993C2.75412 21.5448 2.53438 21.3188 2.48568 21.035C2.02132 18.3065 3.32721 15.6303 5.66149 14.5289C8.33216 13.2686 10.8998 14.7549 11.1829 14.9286C11.3823 15.0501 11.5068 15.2647 11.5148 15.4986C11.5227 15.7325 11.4117 15.9539 11.2214 16.089L6.28556 19.5691C5.97295 19.7894 5.54144 19.7145 5.32059 19.4011C5.10087 19.0877 5.1756 18.654 5.48821 18.4337L9.42174 15.6598C8.60965 15.4021 7.42608 15.2295 6.25046 15.7847C4.60817 16.5602 3.64093 18.386 3.7927 20.3321L8.76029 21.2961C9.13517 21.3688 9.38095 21.7333 9.30847 22.1091C9.2439 22.4407 8.95395 22.6711 8.6289 22.6711H8.63118Z" fill="#FF1B00"/>
|
||||
<path d="M13.2546 26.4989C13.1402 26.4989 13.0247 26.4706 12.9205 26.4127C10.5024 25.0751 9.23051 22.3841 9.82626 19.8668C10.5081 16.9885 13.2682 15.9019 13.5808 15.7883C13.8005 15.7077 14.0452 15.7441 14.2321 15.8837C14.419 16.0234 14.5232 16.2482 14.5096 16.4821L14.146 22.5215C14.1233 22.9041 13.796 23.1959 13.4132 23.1732C13.0315 23.1505 12.7404 22.8212 12.7631 22.4386L13.0519 17.6266C12.344 18.1024 11.4731 18.9233 11.1729 20.1893C10.7539 21.9594 11.5739 23.8568 13.1867 24.9512L17.0353 21.6585C17.3263 21.4099 17.7635 21.444 18.0116 21.7358C18.2596 22.0276 18.2256 22.4658 17.9345 22.7145L13.7032 26.3343C13.5752 26.4444 13.4143 26.5001 13.2535 26.5001L13.2546 26.4989Z" fill="#FF1B00"/>
|
||||
<path d="M21.1544 22.084C19.3728 22.084 17.675 21.3255 16.5866 19.9324C14.7665 17.6024 15.6409 14.7627 15.7462 14.4459C15.821 14.2245 16.0011 14.0542 16.2264 13.9951C16.4518 13.9361 16.6931 13.9951 16.8664 14.1507L21.3492 18.2008C21.6335 18.4574 21.6561 18.8968 21.4002 19.1807C21.1442 19.4657 20.7059 19.4884 20.4227 19.2318L16.8494 16.0049C16.7792 16.8553 16.8754 18.0509 17.6762 19.0762C18.7952 20.508 20.7863 21.0485 22.6449 20.4671L22.4761 15.3974C22.4637 15.0136 22.7627 14.6934 23.1455 14.6809C23.5284 14.665 23.8478 14.9682 23.8602 15.352L24.0459 20.9247C24.0551 21.2131 23.8851 21.4777 23.6188 21.5889C22.8137 21.9239 21.9744 22.0851 21.1532 22.0851L21.1544 22.084Z" fill="#FF1B00"/>
|
||||
<path d="M20.8996 14.6734C20.8838 14.6734 20.8691 14.6734 20.8532 14.6734C17.9016 14.6473 16.231 12.1913 16.051 11.912C15.9241 11.7156 15.9049 11.4681 15.9989 11.2546C16.0929 11.04 16.2888 10.889 16.5187 10.8504L22.4717 9.86142C22.8488 9.8001 23.2056 10.0544 23.2679 10.4326C23.3302 10.8107 23.0753 11.1683 22.6982 11.2308L17.9537 12.0187C18.5744 12.6046 19.5654 13.2734 20.8645 13.2848C20.8758 13.2848 20.8883 13.2848 20.8996 13.2848C22.7005 13.2848 24.3461 12.0653 25.0472 10.2565L20.988 7.2272C20.681 6.99786 20.6176 6.56299 20.8464 6.25527C21.0752 5.94758 21.509 5.88399 21.8159 6.11334L26.2784 9.44245C26.5095 9.61502 26.6102 9.91365 26.5308 10.1907C25.7732 12.8351 23.4627 14.6723 20.9007 14.6723L20.8996 14.6734Z" fill="#FF1B00"/>
|
||||
<path d="M14.7484 10.1147C14.5003 10.1147 14.3293 10.0999 14.2625 10.0943C14.0303 10.0716 13.8253 9.9319 13.7177 9.72525C13.6101 9.51748 13.6135 9.26993 13.7267 9.06555L16.667 3.78237C16.8539 3.44741 17.2752 3.3282 17.6093 3.51442C17.9434 3.70175 18.0623 4.12414 17.8766 4.45909L15.5332 8.6693C16.3759 8.54779 17.5164 8.189 18.3353 7.17732C19.4792 5.76485 19.5608 3.69835 18.5822 2.01109L13.6894 3.30435C13.3201 3.402 12.9407 3.18059 12.8433 2.81044C12.7459 2.43915 12.9668 2.05992 13.336 1.96227L18.7136 0.539568C18.9922 0.465764 19.2878 0.573631 19.4543 0.808665C21.0535 3.06477 21.0354 6.04303 19.4101 8.05163C17.923 9.88876 15.7348 10.1147 14.7484 10.1147Z" fill="#FF1B00"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
1
site/public/ee/stripe-partner.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="60" fill-rule="evenodd" fill="#6772e5"><path d="M101.547 30.94c0-5.885-2.85-10.53-8.3-10.53-5.47 0-8.782 4.644-8.782 10.483 0 6.92 3.908 10.414 9.517 10.414 2.736 0 4.805-.62 6.368-1.494v-4.598c-1.563.782-3.356 1.264-5.632 1.264-2.23 0-4.207-.782-4.46-3.494h11.24c0-.3.046-1.494.046-2.046zM90.2 28.757c0-2.598 1.586-3.678 3.035-3.678 1.402 0 2.897 1.08 2.897 3.678zm-14.597-8.345c-2.253 0-3.7 1.057-4.506 1.793l-.3-1.425H65.73v26.805l5.747-1.218.023-6.506c.828.598 2.046 1.448 4.07 1.448 4.115 0 7.862-3.3 7.862-10.598-.023-6.667-3.816-10.3-7.84-10.3zm-1.38 15.84c-1.356 0-2.16-.483-2.713-1.08l-.023-8.53c.598-.667 1.425-1.126 2.736-1.126 2.092 0 3.54 2.345 3.54 5.356 0 3.08-1.425 5.38-3.54 5.38zm-16.4-17.196l5.77-1.24V13.15l-5.77 1.218zm0 1.747h5.77v20.115h-5.77zm-6.185 1.7l-.368-1.7h-4.966V40.92h5.747V27.286c1.356-1.77 3.655-1.448 4.368-1.195v-5.287c-.736-.276-3.425-.782-4.782 1.7zm-11.494-6.7L34.535 17l-.023 18.414c0 3.402 2.552 5.908 5.954 5.908 1.885 0 3.264-.345 4.023-.76v-4.667c-.736.3-4.368 1.356-4.368-2.046V25.7h4.368v-4.897h-4.37zm-15.54 10.828c0-.897.736-1.24 1.954-1.24a12.85 12.85 0 0 1 5.7 1.47V21.47c-1.908-.76-3.793-1.057-5.7-1.057-4.667 0-7.77 2.437-7.77 6.506 0 6.345 8.736 5.333 8.736 8.07 0 1.057-.92 1.402-2.207 1.402-1.908 0-4.345-.782-6.276-1.84v5.47c2.138.92 4.3 1.3 6.276 1.3 4.782 0 8.07-2.368 8.07-6.483-.023-6.85-8.782-5.632-8.782-8.207z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
9
site/public/icons/ai.svg
Normal file
|
After Width: | Height: | Size: 23 KiB |
8
site/public/icons/arrow-outward.svg
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_683_2587" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="25">
|
||||
<rect y="0.5" width="24" height="24" fill="#D9D9D9"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_683_2587)">
|
||||
<path d="M6.4 18.5L5 17.1L14.6 7.5H6V5.5H18V17.5H16V8.9L6.4 18.5Z" fill="#FFD644"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 399 B |
50
site/public/icons/cloud.svg
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 511.997 511.997" style="enable-background:new 0 0 511.997 511.997;" xml:space="preserve">
|
||||
<circle style="fill:#FF5B62;" cx="255.999" cy="255.999" r="255.999"/>
|
||||
<path style="fill:#C9CACC;" d="M97.376,233.736c0.617,0,1.225,0.013,1.836,0.042c9.036-25.27,33.176-43.348,61.546-43.348
|
||||
c7.559,0,14.82,1.287,21.572,3.651c7.607-54.123,54.094-95.773,110.316-95.773c59.296,0,107.769,46.325,111.21,104.758
|
||||
c31.618,1.133,56.901,27.117,56.901,59.012c0,32.617-26.437,59.054-59.054,59.054c-104.611,0-200.309,0-304.326,0
|
||||
c-24.135,0-43.699-19.565-43.699-43.699S73.243,233.736,97.376,233.736z"/>
|
||||
<path style="fill:#FFFFFF;" d="M94.942,227.895c0.617,0,1.225,0.016,1.836,0.042c9.036-25.268,33.176-43.345,61.548-43.345
|
||||
c7.559,0,14.82,1.287,21.572,3.651c7.607-54.123,54.094-95.773,110.316-95.773c59.296,0,107.769,46.325,111.21,104.758
|
||||
c31.62,1.133,56.901,27.117,56.901,59.012c0,32.617-26.437,59.054-59.054,59.054c-104.611,0-200.311,0-304.326,0
|
||||
c-24.135,0-43.699-19.565-43.699-43.699s19.565-43.699,43.699-43.699H94.942z"/>
|
||||
<path style="fill:#FFBA1B;" d="M356.219,361.036l-58.204-5.872l10.702,18.652c0,0-45.048,21.372-86.764,8.176
|
||||
c-41.716-13.196-53.316-47.574-53.316-47.574s10.799,38.469,49.027,63.615c38.228,25.144,77.602,12.714,103.806-4.052l10.494,16.399
|
||||
l24.257-49.341L356.219,361.036z"/>
|
||||
<path style="fill:#21D0C3;" d="M188.292,265.211l58.204,5.872l-10.702-18.652c0,0,45.048-21.372,86.764-8.173
|
||||
c41.716,13.196,53.316,47.574,53.316,47.574s-10.799-38.469-49.027-63.615c-38.228-25.144-77.602-12.716-103.806,4.052
|
||||
l-10.494-16.399l-24.257,49.341H188.292z"/>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
9
site/public/icons/collab.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
10
site/public/icons/divider-dot.svg
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<svg width="10" height="11" viewBox="0 0 10 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_217_4333)">
|
||||
<path d="M9.93997 5.04832C9.93997 7.79377 7.71576 10.018 4.9703 10.018C2.22485 10.018 0.000488281 7.79377 0.000488281 5.04832C0.000488281 2.30286 2.22485 0.0786133 4.9703 0.0786133C7.71576 0.0786133 9.93997 2.30286 9.93997 5.04832Z" fill="#0E0C0C"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_217_4333">
|
||||
<rect width="10" height="10" fill="white" transform="translate(0 0.0786133)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 532 B |
10
site/public/icons/github.svg
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_665_1847)">
|
||||
<path d="M8.52656 18.6281C8.52656 18.7219 8.41875 18.7969 8.28281 18.7969C8.12812 18.8109 8.02031 18.7359 8.02031 18.6281C8.02031 18.5344 8.12813 18.4594 8.26406 18.4594C8.40469 18.4453 8.52656 18.5203 8.52656 18.6281ZM7.06875 18.4172C7.03594 18.5109 7.12969 18.6187 7.27031 18.6469C7.39219 18.6937 7.53281 18.6469 7.56094 18.5531C7.58906 18.4594 7.5 18.3516 7.35938 18.3094C7.2375 18.2766 7.10156 18.3234 7.06875 18.4172ZM9.14062 18.3375C9.00469 18.3703 8.91094 18.4594 8.925 18.5672C8.93906 18.6609 9.06094 18.7219 9.20156 18.6891C9.3375 18.6562 9.43125 18.5672 9.41719 18.4734C9.40312 18.3844 9.27656 18.3234 9.14062 18.3375ZM12.225 0.375C5.72344 0.375 0.75 5.31094 0.75 11.8125C0.75 17.0109 4.02188 21.4594 8.69531 23.025C9.29531 23.1328 9.50625 22.7625 9.50625 22.4578C9.50625 22.1672 9.49219 20.5641 9.49219 19.5797C9.49219 19.5797 6.21094 20.2828 5.52188 18.1828C5.52188 18.1828 4.9875 16.8187 4.21875 16.4672C4.21875 16.4672 3.14531 15.7312 4.29375 15.7453C4.29375 15.7453 5.46094 15.8391 6.10312 16.9547C7.12969 18.7641 8.85 18.2437 9.52031 17.9344C9.62813 17.1844 9.93281 16.6641 10.2703 16.3547C7.65 16.0641 5.00625 15.6844 5.00625 11.175C5.00625 9.88594 5.3625 9.23906 6.1125 8.41406C5.99062 8.10938 5.59219 6.85312 6.23438 5.23125C7.21406 4.92656 9.46875 6.49688 9.46875 6.49688C10.4062 6.23438 11.4141 6.09844 12.4125 6.09844C13.4109 6.09844 14.4188 6.23438 15.3563 6.49688C15.3563 6.49688 17.6109 4.92188 18.5906 5.23125C19.2328 6.85781 18.8344 8.10938 18.7125 8.41406C19.4625 9.24375 19.9219 9.89062 19.9219 11.175C19.9219 15.6984 17.1609 16.0594 14.5406 16.3547C14.9719 16.725 15.3375 17.4281 15.3375 18.5297C15.3375 20.1094 15.3234 22.0641 15.3234 22.4484C15.3234 22.7531 15.5391 23.1234 16.1344 23.0156C20.8219 21.4594 24 17.0109 24 11.8125C24 5.31094 18.7266 0.375 12.225 0.375ZM5.30625 16.5422C5.24531 16.5891 5.25938 16.6969 5.33906 16.7859C5.41406 16.8609 5.52187 16.8938 5.58281 16.8328C5.64375 16.7859 5.62969 16.6781 5.55 16.5891C5.475 16.5141 5.36719 16.4812 5.30625 16.5422ZM4.8 16.1625C4.76719 16.2234 4.81406 16.2984 4.90781 16.3453C4.98281 16.3922 5.07656 16.3781 5.10938 16.3125C5.14219 16.2516 5.09531 16.1766 5.00156 16.1297C4.90781 16.1016 4.83281 16.1156 4.8 16.1625ZM6.31875 17.8312C6.24375 17.8922 6.27187 18.0328 6.37969 18.1219C6.4875 18.2297 6.62344 18.2437 6.68437 18.1688C6.74531 18.1078 6.71719 17.9672 6.62344 17.8781C6.52031 17.7703 6.37969 17.7563 6.31875 17.8312ZM5.78438 17.1422C5.70937 17.1891 5.70937 17.3109 5.78438 17.4188C5.85938 17.5266 5.98594 17.5734 6.04688 17.5266C6.12187 17.4656 6.12187 17.3438 6.04688 17.2359C5.98125 17.1281 5.85938 17.0813 5.78438 17.1422Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_665_1847">
|
||||
<rect width="23.25" height="24" fill="white" transform="translate(0.75)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
9
site/public/icons/idea.svg
Normal file
|
After Width: | Height: | Size: 29 KiB |
3
site/public/icons/mail.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2 16.6445C1.45 16.6445 0.979167 16.4487 0.5875 16.057C0.195833 15.6654 0 15.1945 0 14.6445V2.64453C0 2.09453 0.195833 1.6237 0.5875 1.23203C0.979167 0.840365 1.45 0.644531 2 0.644531H18C18.55 0.644531 19.0208 0.840365 19.4125 1.23203C19.8042 1.6237 20 2.09453 20 2.64453V14.6445C20 15.1945 19.8042 15.6654 19.4125 16.057C19.0208 16.4487 18.55 16.6445 18 16.6445H2ZM10 9.64453L2 4.64453V14.6445H18V4.64453L10 9.64453ZM10 7.64453L18 2.64453H2L10 7.64453ZM2 4.64453V2.64453V14.6445V4.64453Z" fill="#A9A9A9"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 619 B |
11
site/public/icons/message.svg
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<svg width="84" height="84" viewBox="0 0 84 84" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M83.1443 41.8222C83.1443 64.6438 64.6438 83.1443 41.8222 83.1443C19.0006 83.1443 0.5 64.6438 0.5 41.8222C0.5 19.0006 19.0006 0.5 41.8222 0.5C64.6438 0.5 83.1443 19.0006 83.1443 41.8222Z" fill="black" stroke="white"/>
|
||||
<path d="M28.5935 22.2815L13.3008 50.7202L33.0522 51.484L38.7326 67.6487L65.4206 51.5577L50.7928 35.5587L57.405 19.5391" stroke="white" stroke-width="0.40604" stroke-miterlimit="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M75.1089 50.1565C73.5598 49.7784 71.4386 49.3532 69.3453 47.2961C67.2539 45.241 66.8392 43.2114 66.4345 41.6343C66.0298 43.2114 65.6172 45.241 63.5258 47.2961C61.4305 49.3532 59.3093 49.7784 57.7622 50.1565C59.3093 50.5346 61.4305 50.9616 63.5258 53.0168C65.6172 55.0719 66.0298 57.1016 66.4345 58.6786C66.8392 57.1016 67.2539 55.0719 69.3453 53.0168C71.4386 50.9616 73.5598 50.5346 75.1089 50.1565Z" fill="#FD7503"/>
|
||||
<path d="M37.1323 52.3048C36.403 52.1022 35.4034 51.8691 34.4343 50.8564C33.4661 49.8446 33.2913 48.8687 33.1164 48.1092C32.9081 48.8573 32.6913 49.8215 31.6796 50.7742C30.666 51.7278 29.6574 51.9011 28.921 52.0599C29.6494 52.2625 30.649 52.4966 31.6191 53.5084C32.5873 54.5201 32.7611 55.496 32.936 56.2555C33.1443 55.5074 33.362 54.5432 34.3737 53.5905C35.3864 52.6378 36.395 52.4636 37.1323 52.3048Z" fill="#FD7503"/>
|
||||
<path d="M54.6462 35.6752C53.9155 35.4937 52.9148 35.2896 51.9272 34.302C50.9406 33.3154 50.745 32.3411 50.5541 31.584C50.3632 32.3411 50.1685 33.3154 49.1819 34.302C48.1934 35.2896 47.1927 35.4937 46.4629 35.6752C47.1927 35.8567 48.1934 36.0617 49.1819 37.0483C50.1685 38.0349 50.3632 39.0093 50.5541 39.7664C50.745 39.0093 50.9406 38.0349 51.9272 37.0483C52.9148 36.0617 53.9155 35.8567 54.6462 35.6752Z" fill="#FD7503"/>
|
||||
<path d="M61.1374 19.2592C60.4067 19.0776 59.406 18.8735 58.4184 17.886C57.4318 16.8994 57.2362 15.9251 57.0453 15.168C56.8544 15.9251 56.6597 16.8994 55.6731 17.886C54.6846 18.8735 53.6839 19.0776 52.9541 19.2592C53.6839 19.4407 54.6846 19.6457 55.6731 20.6323C56.6597 21.6189 56.8544 22.5932 57.0453 23.3503C57.2362 22.5932 57.4318 21.6189 58.4184 20.6323C59.406 19.6457 60.4067 19.4407 61.1374 19.2592Z" fill="#FD7503"/>
|
||||
<path d="M16.7244 51.1307C15.9936 50.9492 14.9929 50.7451 14.0054 49.7576C13.0188 48.771 12.8231 47.7967 12.6322 47.0396C12.4413 47.7967 12.2466 48.771 11.26 49.7576C10.2716 50.7451 9.27085 50.9492 8.54102 51.1307C9.27085 51.3123 10.2716 51.5173 11.26 52.5039C12.2466 53.4904 12.4413 54.4648 12.6322 55.2219C12.8231 54.4648 13.0188 53.4904 14.0054 52.5039C14.9929 51.5173 15.9936 51.3123 16.7244 51.1307Z" fill="#FD7503"/>
|
||||
<path d="M42.6218 67.3939C41.8911 67.2124 40.8903 67.0083 39.9028 66.0208C38.9162 65.0342 38.7206 64.0598 38.5297 63.3027C38.3387 64.0598 38.1441 65.0342 37.1575 66.0208C36.169 67.0083 35.1683 67.2124 34.4385 67.3939C35.1683 67.5754 36.169 67.7805 37.1575 68.767C38.1441 69.7536 38.3387 70.728 38.5297 71.4851C38.7206 70.728 38.9162 69.7536 39.9028 68.767C40.8903 67.7805 41.8911 67.5754 42.6218 67.3939Z" fill="#FD7503"/>
|
||||
<path d="M37.2625 22.1657C35.4749 21.7217 33.0269 21.2224 30.6112 18.8067C28.1977 16.3933 27.7192 14.0098 27.2521 12.1577C26.7851 14.0098 26.3089 16.3933 23.8955 18.8067C21.4774 21.2224 19.0295 21.7217 17.2441 22.1657C19.0295 22.6097 21.4774 23.1113 23.8955 25.5247C26.3089 27.9381 26.7851 30.3216 27.2521 32.1737C27.7192 30.3216 28.1977 27.9381 30.6112 25.5247C33.0269 23.1113 35.4749 22.6097 37.2625 22.1657Z" fill="#FFD644"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
1
site/public/icons/play.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 228 B |
9
site/public/icons/product.svg
Normal file
|
After Width: | Height: | Size: 29 KiB |
9
site/public/icons/prototype.svg
Normal file
|
After Width: | Height: | Size: 28 KiB |
126
site/public/icons/responsive.svg
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 511.997 511.997" style="enable-background:new 0 0 511.997 511.997;" xml:space="preserve">
|
||||
<circle style="fill:#FAD24D;" cx="255.999" cy="255.999" r="255.999"/>
|
||||
<path style="fill:#666666;" d="M49.359,118.027h370.52c12.173,0,22.133,9.959,22.133,22.133v228.246H27.227V140.16
|
||||
C27.227,127.987,37.186,118.027,49.359,118.027z"/>
|
||||
<path style="fill:#FFFFFF;" d="M42.256,353.376h384.729V140.16c0-3.876-3.227-7.103-7.103-7.103H49.362
|
||||
c-3.876,0-7.103,3.227-7.103,7.103v213.216h-0.003V353.376z"/>
|
||||
<path style="fill:#ECF0F1;" d="M50.218,163.474h368.805v85.374H50.218V163.474z"/>
|
||||
<path style="fill:#B6B6B8;" d="M7.082,368.406h455.076v12.782c0,7.029-5.753,12.782-12.782,12.782H19.861
|
||||
c-7.029,0-12.782-5.753-12.782-12.782v-12.782H7.082z"/>
|
||||
<path style="fill:#919191;" d="M189.199,373.077h90.84l-9.731,6.463h-71.38l-9.731-6.463H189.199z"/>
|
||||
<path style="fill:#666666;" d="M331.128,198.396h136.094c4.316,0,7.814,3.498,7.814,7.814v179.945c0,4.316-3.498,7.814-7.814,7.814
|
||||
H331.128c-4.316,0-7.814-3.498-7.814-7.814V206.21C323.314,201.894,326.813,198.396,331.128,198.396z"/>
|
||||
<path style="fill:#FFFFFF;" d="M332.814,212.237h132.724c0.501,0,0.907,0.406,0.907,0.907v161.608c0,0.501-0.406,0.907-0.907,0.907
|
||||
H332.814c-0.501,0-0.907-0.406-0.907-0.907V213.145C331.907,212.644,332.313,212.237,332.814,212.237z"/>
|
||||
<circle style="fill:#B6B6B8;" cx="399.178" cy="384.487" r="5.096"/>
|
||||
<path style="fill:#ECF0F1;" d="M338.989,232.48h120.377v70.95H338.989V232.48z"/>
|
||||
<path style="fill:#666666;" d="M437.9,268.396h63.051c2.191,0,3.966,1.776,3.966,3.966v117.642c0,2.191-1.776,3.966-3.966,3.966
|
||||
H437.9c-2.191,0-3.966-1.776-3.966-3.966V272.362C433.934,270.172,435.709,268.396,437.9,268.396z"/>
|
||||
<path style="fill:#FFFFFF;" d="M440.853,280.15h57.145c0.216,0,0.391,0.175,0.391,0.391v101.282c0,0.216-0.175,0.391-0.391,0.391
|
||||
h-57.145c-0.216,0-0.391-0.175-0.391-0.391V280.54C440.462,280.325,440.638,280.15,440.853,280.15z"/>
|
||||
<g>
|
||||
<circle style="fill:#B6B6B8;" cx="469.43" cy="387.561" r="3.586"/>
|
||||
<path style="fill:#B6B6B8;" d="M459.833,274.868h19.184c0.484,0,0.876,0.392,0.876,0.876v0.003c0,0.484-0.392,0.876-0.876,0.876
|
||||
h-19.184c-0.484,0-0.876-0.392-0.876-0.876v-0.003C458.957,275.26,459.349,274.868,459.833,274.868z"/>
|
||||
</g>
|
||||
<path style="fill:#21D0C3;" d="M426.986,156.83H42.256V140.16c0-3.876,3.227-7.103,7.103-7.103h370.52
|
||||
c3.876,0,7.103,3.227,7.103,7.103v16.669H426.986z"/>
|
||||
<path style="fill:#FFFFFF;" d="M206.441,139.861H403.52c1.453,0,2.636,1.186,2.636,2.636v4.891c0,1.453-1.186,2.636-2.636,2.636
|
||||
H206.441c-1.453,0-2.636-1.186-2.636-2.636v-4.891C203.805,141.047,204.99,139.861,206.441,139.861z"/>
|
||||
<g>
|
||||
<path style="fill:#ECF0F1;" d="M58.624,139.68c3.292,0,5.962,2.668,5.962,5.962s-2.67,5.962-5.962,5.962
|
||||
c-3.295,0-5.967-2.668-5.967-5.962S55.327,139.68,58.624,139.68z"/>
|
||||
<path style="fill:#ECF0F1;" d="M82.16,139.68c3.295,0,5.962,2.668,5.962,5.962s-2.668,5.962-5.962,5.962
|
||||
c-3.292,0-5.962-2.668-5.962-5.962S78.868,139.68,82.16,139.68z"/>
|
||||
<path style="fill:#ECF0F1;" d="M105.702,139.68c3.292,0,5.962,2.668,5.962,5.962s-2.67,5.962-5.962,5.962
|
||||
c-3.298,0-5.967-2.668-5.967-5.962S102.404,139.68,105.702,139.68z"/>
|
||||
</g>
|
||||
<path style="fill:#FF5B62;" d="M91.149,269.445c9.503,0,17.204,7.701,17.204,17.204c0,9.5-7.701,17.204-17.204,17.204
|
||||
c-9.5,0-17.201-7.704-17.201-17.204C73.948,277.146,81.649,269.445,91.149,269.445z"/>
|
||||
<path style="fill:#21D0C3;" d="M180.029,269.445c9.5,0,17.201,7.701,17.201,17.204c0,9.5-7.701,17.204-17.201,17.204
|
||||
s-17.201-7.704-17.201-17.204C162.828,277.146,170.529,269.445,180.029,269.445z"/>
|
||||
<g>
|
||||
<path style="fill:#DCE3DB;" d="M66.467,311.229h49.37v2.678h-49.37V311.229z M66.467,328.059h33.16v2.678h-33.16V328.059z
|
||||
M66.467,319.645h49.37v2.676h-49.37V319.645z"/>
|
||||
<path style="fill:#DCE3DB;" d="M155.348,311.229h49.367v2.678h-49.367V311.229z M155.348,328.059h33.163v2.678h-33.163V328.059z
|
||||
M155.348,319.645h49.367v2.676h-49.367V319.645z"/>
|
||||
</g>
|
||||
<path style="fill:#FAD24D;" d="M274.374,269.445c9.5,0,17.201,7.701,17.201,17.204c0,9.5-7.701,17.204-17.201,17.204
|
||||
c-9.5,0-17.201-7.704-17.201-17.204C257.172,277.146,264.873,269.445,274.374,269.445z"/>
|
||||
<path style="fill:#DCE3DB;" d="M249.692,311.229h49.367v2.678h-49.367L249.692,311.229L249.692,311.229z M249.692,328.059h33.163
|
||||
v2.678h-33.163V328.059z M249.692,319.645h49.367v2.676h-49.367L249.692,319.645L249.692,319.645z"/>
|
||||
<path style="fill:#FF5B62;" d="M362.963,313.651c5.896,0,10.678,4.782,10.678,10.678c0,5.896-4.779,10.678-10.678,10.678
|
||||
c-5.896,0-10.678-4.782-10.678-10.678C352.285,318.432,357.065,313.651,362.963,313.651z"/>
|
||||
<path style="fill:#DCE3DB;" d="M347.642,339.587h30.642v2.167h-30.642V339.587z M347.642,353.203h20.583v2.167h-20.583V353.203z
|
||||
M347.642,346.393h30.642v2.167h-30.642V346.393z"/>
|
||||
<path style="fill:#21D0C3;" d="M404.64,313.651c5.896,0,10.678,4.782,10.678,10.678c0,5.896-4.782,10.678-10.678,10.678
|
||||
c-5.896,0-10.678-4.782-10.678-10.678C393.962,318.432,398.744,313.651,404.64,313.651z"/>
|
||||
<path style="fill:#DCE3DB;" d="M389.319,339.587h30.642v2.167h-30.642V339.587z M389.319,353.203h20.583v2.167h-20.583V353.203z
|
||||
M389.319,346.393h30.642v2.167h-30.642V346.393z"/>
|
||||
<path style="fill:#21D0C3;" d="M466.446,227.782H331.904v-14.636c0-0.501,0.406-0.907,0.907-0.907h132.724
|
||||
c0.501,0,0.907,0.406,0.907,0.907v14.636H466.446z"/>
|
||||
<g>
|
||||
<path style="fill:#ECF0F1;" d="M341.877,216.66c1.936,0,3.502,1.566,3.502,3.499s-1.566,3.499-3.502,3.499
|
||||
c-1.933,0-3.499-1.566-3.499-3.499S339.946,216.66,341.877,216.66z"/>
|
||||
<path style="fill:#ECF0F1;" d="M351.729,216.66c1.933,0,3.499,1.566,3.499,3.499s-1.566,3.499-3.499,3.499
|
||||
s-3.499-1.566-3.499-3.499S349.796,216.66,351.729,216.66z"/>
|
||||
<path style="fill:#ECF0F1;" d="M361.581,216.66c1.933,0,3.499,1.566,3.499,3.499s-1.566,3.499-3.499,3.499
|
||||
c-1.933,0-3.499-1.566-3.499-3.499S359.65,216.66,361.581,216.66z"/>
|
||||
</g>
|
||||
<path style="fill:#FFFFFF;" d="M381.219,217.442h80.009c0.59,0,1.07,0.635,1.07,1.411v2.618c0,0.776-0.48,1.411-1.07,1.411h-80.009
|
||||
c-0.59,0-1.07-0.635-1.07-1.411v-2.618C380.149,218.077,380.629,217.442,381.219,217.442z"/>
|
||||
<path style="fill:#21D0C3;" d="M498.389,286.941h-57.927v-6.4c0-0.218,0.176-0.391,0.391-0.391h57.145
|
||||
c0.216,0,0.391,0.173,0.391,0.391L498.389,286.941L498.389,286.941z"/>
|
||||
<path style="fill:#FFFFFF;" d="M444.554,281.299c1.107,0,2.001,0.894,2.001,2.001c0,1.104-0.894,2.001-2.001,2.001
|
||||
c-1.104,0-2.001-0.897-2.001-2.001C442.553,282.193,443.45,281.299,444.554,281.299z"/>
|
||||
<g>
|
||||
<path style="fill:#ECF0F1;" d="M450.186,281.299c1.107,0,2.001,0.894,2.001,2.001c0,1.104-0.894,2.001-2.001,2.001
|
||||
s-2.001-0.897-2.001-2.001C448.185,282.193,449.081,281.299,450.186,281.299z"/>
|
||||
<path style="fill:#ECF0F1;" d="M455.817,281.299c1.107,0,2.001,0.894,2.001,2.001c0,1.104-0.894,2.001-2.001,2.001
|
||||
c-1.104,0-2.001-0.897-2.001-2.001C453.816,282.193,454.713,281.299,455.817,281.299z"/>
|
||||
</g>
|
||||
<path style="fill:#FFFFFF;" d="M463.951,281.558h32.208c0.432,0,0.781,0.35,0.781,0.781v2.093c0,0.432-0.35,0.781-0.781,0.781
|
||||
h-32.208c-0.432,0-0.781-0.35-0.781-0.781v-2.093C463.17,281.909,463.52,281.558,463.951,281.558z"/>
|
||||
<path style="fill:#ECF0F1;" d="M443.272,289.134h52.308v30.831h-52.308V289.134z"/>
|
||||
<path style="fill:#FAD24D;" d="M470.962,326.286c5.362,0,9.708,4.346,9.708,9.71c0,5.362-4.346,9.71-9.708,9.71
|
||||
c-5.362,0-9.708-4.346-9.708-9.71C461.255,330.634,465.601,326.286,470.962,326.286z"/>
|
||||
<path style="fill:#DCE3DB;" d="M454.112,352.776h33.7v2.381h-33.7V352.776z M454.112,367.753h22.64v2.381h-22.64V367.753z
|
||||
M454.112,360.264h33.7v2.381h-33.7V360.264z"/>
|
||||
<path style="fill:#EDB937;" d="M40.323,393.97h431.353c-1.429,2.23-2.903,4.425-4.398,6.607H44.724
|
||||
C43.229,398.395,41.753,396.199,40.323,393.97z"/>
|
||||
<path style="fill:#B6B6B8;" d="M382.161,203.956h34.033c0.484,0,0.876,0.392,0.876,0.876v0.003c0,0.484-0.392,0.876-0.876,0.876
|
||||
h-34.033c-0.484,0-0.876-0.392-0.876-0.876v-0.003C381.285,204.349,381.677,203.956,382.161,203.956z"/>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8 KiB |
3
site/public/icons/right-arrow.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="8" height="13" viewBox="0 0 8 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.6 6.5L0 1.9L1.4 0.5L7.4 6.5L1.4 12.5L0 11.1L4.6 6.5Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 182 B |
92
site/public/icons/yjs.svg
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="15.024172mm"
|
||||
height="17.795792mm"
|
||||
viewBox="0 0 15.024172 17.795792"
|
||||
version="1.1"
|
||||
id="svg1020"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="yjs.svg">
|
||||
<defs
|
||||
id="defs1014" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="-944.46501"
|
||||
inkscape:cy="202.20128"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1330"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="36"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata1017">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-185.25577,-184.53663)">
|
||||
<path
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#6eeb83;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
d="m 195.29683,184.53663 c -0.76895,0.008 -1.31878,0.38862 -1.64951,1.14102 l -2.37919,5.5392 v 0.0217 l 1.72651,2.59209 3.91449,-6.71432 c 0.32246,-0.55396 0.30593,-1.12448 -0.0496,-1.71152 -0.35553,-0.57877 -0.86816,-0.86816 -1.53789,-0.86816 z"
|
||||
id="path1304-2-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path1307-0-7"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#30bced;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
d="m 191.26813,191.2246 -2.01434,2.7218 0.0155,0.0284 v 4.41523 c 0,0.61185 0.1819,1.09968 0.5457,1.46348 0.35554,0.3638 0.78549,0.5457 1.28985,0.5457 h 0.0496 c 0.0406,0 0.074,-0.0198 0.11369,-0.0222 z m 1.72651,2.60604 -1.72651,-2.59209 v 9.13846 c 0.44556,-0.0273 0.84213,-0.18945 1.17616,-0.52348 0.3638,-0.35553 0.5457,-0.84336 0.5457,-1.46348 v -4.55166 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#ffbc42;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
d="m 187.06167,184.53663 c -0.64492,0.008 -1.14928,0.29766 -1.51308,0.86817 -0.36381,0.5705 -0.38861,1.13688 -0.0744,1.69912 l 3.77962,6.84248 2.01434,-2.7218 v -0.008 l -0.002,0.005 c -0.81028,-1.78593 -1.59576,-3.63388 -2.35644,-5.54385 -0.29765,-0.76067 -0.84749,-1.14101 -1.64951,-1.14101 z"
|
||||
id="text3715-6-6-6-2-6-9-6-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="text3723-9-5-1-3"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#313330;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
aria-label="js"
|
||||
transform="translate(52.80281,-62.099754)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path959"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Dyuthi;-inkscape-font-specification:Dyuthi;fill:#313330;fill-opacity:1;stroke-width:0.26458332"
|
||||
d="m 143.40997,262.00879 q 0,1.09554 -0.5426,1.79317 -0.63562,0.80099 -1.72082,0.58394 -0.093,-0.0155 -0.23255,-0.0827 -0.33073,-0.16019 -0.33073,-0.52193 0,-0.23254 0.14986,-0.39791 0.15503,-0.16536 0.37207,-0.16536 0.21705,0 0.40308,-0.0982 0.45475,-0.21187 0.44959,-1.00769 v -3.43131 q 0,-0.29973 0.21187,-0.5116 0.20154,-0.20671 0.50643,-0.20671 h 0.0207 q 0.30489,0 0.50643,0.20671 0.2067,0.21187 0.2067,0.5116 z m -0.22737,-4.7439 q -0.22738,0.24288 -0.56328,0.24288 -0.32039,0 -0.5581,-0.23771 -0.23771,-0.23771 -0.23771,-0.56327 0,-0.33073 0.22737,-0.56328 0.22738,-0.23771 0.56844,-0.23771 0.3359,0 0.56328,0.23771 0.22737,0.23772 0.22737,0.56328 -0.005,0.31006 -0.22737,0.5581 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path961"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Dyuthi;-inkscape-font-specification:Dyuthi;fill:#313330;fill-opacity:1;stroke-width:0.26458332"
|
||||
d="m 144.0766,261.70907 q 0.0465,-0.19637 0.25321,-0.3204 0.18604,-0.11369 0.50126,-0.0103 0.31523,0.10335 0.64079,0.093 0.62012,-0.0103 0.62012,-0.38757 0,-0.17053 -0.13436,-0.27905 -0.13436,-0.10852 -0.5426,-0.25322 -1.34359,-0.46508 -1.33325,-1.4056 0.0103,-0.67696 0.5271,-1.1007 0.51159,-0.42375 1.36942,-0.42375 0.40308,-0.005 0.83199,0.11369 0.19121,0.0517 0.30489,0.22737 0.10852,0.1757 0.0517,0.37724 v 0.005 q -0.0362,0.19637 -0.22738,0.31523 -0.1912,0.11368 -0.43408,0.0465 -0.24805,-0.0672 -0.48059,-0.0775 -0.55294,-0.0103 -0.55294,0.3669 0,0.15503 0.1602,0.27906 0.1602,0.11885 0.59428,0.26871 1.2454,0.43925 1.25057,1.42627 0.0103,0.67696 -0.50126,1.10071 -0.5116,0.41858 -1.50379,0.41858 -0.52193,0 -1.03869,-0.13953 -0.18087,-0.0465 -0.29973,-0.24804 -0.11368,-0.18604 -0.0568,-0.37724 z" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
5
site/public/icons/you-are-here-mobile.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="122" height="22" viewBox="0 0 122 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.10965 11.0001C7.59844 11.0001 8.01687 10.8158 8.36494 10.4473C8.71302 10.0787 8.88706 9.63564 8.88706 9.11809C8.88706 8.60054 8.71302 8.15748 8.36494 7.78893C8.01687 7.42037 7.59844 7.23609 7.10965 7.23609C6.62086 7.23609 6.20243 7.42037 5.85435 7.78893C5.50627 8.15748 5.33224 8.60054 5.33224 9.11809C5.33224 9.63564 5.50627 10.0787 5.85435 10.4473C6.20243 10.8158 6.62086 11.0001 7.10965 11.0001ZM7.10965 20.4101C4.72495 18.2615 2.94384 16.2658 1.7663 14.423C0.588768 12.5802 0 10.8746 0 9.30629C0 6.95379 0.714668 5.07963 2.144 3.68381C3.57334 2.288 5.22855 1.59009 7.10965 1.59009C8.99074 1.59009 10.646 2.288 12.0753 3.68381C13.5046 5.07963 14.2193 6.95379 14.2193 9.30629C14.2193 10.8746 13.6305 12.5802 12.453 14.423C11.2755 16.2658 9.49434 18.2615 7.10965 20.4101Z" fill="#FF1B00"/>
|
||||
<path d="M22.2192 11C22.2192 4.92487 27.1441 0 33.2192 0H110.219C116.294 0 121.219 4.92487 121.219 11C121.219 17.0751 116.294 22 110.219 22H33.2192C27.1441 22 22.2192 17.0751 22.2192 11Z" fill="#FFD644"/>
|
||||
<path d="M33.1513 11.88L30.3913 6.6H32.3473L33.8833 9.756L34.0513 10.644H34.1113L34.2913 9.732L35.7793 6.6H37.5433L34.7953 11.868V15H33.1513V11.88ZM37.9987 10.8C37.9987 9.4 38.3067 8.324 38.9227 7.572C39.5387 6.812 40.4187 6.432 41.5627 6.432C42.1627 6.432 42.6867 6.536 43.1347 6.744C43.5827 6.952 43.9547 7.248 44.2507 7.632C44.5467 8.016 44.7667 8.476 44.9107 9.012C45.0547 9.548 45.1267 10.144 45.1267 10.8C45.1267 12.2 44.8147 13.28 44.1907 14.04C43.5747 14.792 42.6987 15.168 41.5627 15.168C40.9547 15.168 40.4267 15.064 39.9787 14.856C39.5307 14.648 39.1587 14.352 38.8627 13.968C38.5747 13.584 38.3587 13.124 38.2147 12.588C38.0707 12.052 37.9987 11.456 37.9987 10.8ZM39.7267 10.8C39.7267 11.224 39.7627 11.616 39.8347 11.976C39.9067 12.328 40.0147 12.632 40.1587 12.888C40.3107 13.144 40.5027 13.344 40.7347 13.488C40.9667 13.632 41.2427 13.704 41.5627 13.704C42.1467 13.704 42.5987 13.476 42.9187 13.02C43.2387 12.564 43.3987 11.824 43.3987 10.8C43.3987 10.392 43.3627 10.012 43.2907 9.66C43.2267 9.308 43.1227 9 42.9787 8.736C42.8347 8.472 42.6467 8.268 42.4147 8.124C42.1827 7.972 41.8987 7.896 41.5627 7.896C40.9787 7.896 40.5267 8.132 40.2067 8.604C39.8867 9.068 39.7267 9.8 39.7267 10.8ZM51.4617 6.6H53.0217V12.024C53.0217 12.568 52.9497 13.036 52.8057 13.428C52.6617 13.82 52.4617 14.144 52.2057 14.4C51.9497 14.656 51.6377 14.844 51.2697 14.964C50.9017 15.084 50.4977 15.144 50.0577 15.144C47.9297 15.144 46.8657 14.172 46.8657 12.228V6.6H48.5097V11.904C48.5097 12.232 48.5377 12.512 48.5937 12.744C48.6577 12.968 48.7537 13.152 48.8817 13.296C49.0097 13.432 49.1697 13.532 49.3617 13.596C49.5537 13.652 49.7777 13.68 50.0337 13.68C50.5377 13.68 50.9017 13.54 51.1257 13.26C51.3497 12.98 51.4617 12.528 51.4617 11.904V6.6ZM62.3199 13.14H59.7399L59.1039 15H57.4599L60.4839 6.54H61.6959L64.7199 15H62.9919L62.3199 13.14ZM60.1599 11.82H61.9599L61.3359 9.948L61.0839 8.628H61.0239L60.7719 9.96L60.1599 11.82ZM66.0455 6.684C66.2295 6.652 66.4255 6.624 66.6335 6.6C66.8495 6.568 67.0615 6.544 67.2695 6.528C67.4855 6.512 67.6935 6.5 67.8935 6.492C68.0935 6.484 68.2775 6.48 68.4455 6.48C68.8375 6.48 69.2215 6.516 69.5975 6.588C69.9815 6.66 70.3215 6.784 70.6175 6.96C70.9215 7.136 71.1615 7.38 71.3375 7.692C71.5215 7.996 71.6135 8.38 71.6135 8.844C71.6135 9.532 71.4535 10.092 71.1335 10.524C70.8135 10.956 70.3855 11.256 69.8495 11.424L70.4375 11.796L72.3575 15H70.4615L68.5535 11.712L67.6895 11.556V15H66.0455V6.684ZM68.5655 7.944C68.3975 7.944 68.2295 7.948 68.0615 7.956C67.9015 7.964 67.7775 7.98 67.6895 8.004V10.44H68.3855C68.8415 10.44 69.2055 10.336 69.4775 10.128C69.7495 9.92 69.8855 9.576 69.8855 9.096C69.8855 8.736 69.7735 8.456 69.5495 8.256C69.3255 8.048 68.9975 7.944 68.5655 7.944ZM73.8642 6.6H78.8442V8.064H75.5082V10.02H78.5442V11.484H75.5082V13.536H78.9042V15H73.8642V6.6ZM89.0849 11.484H86.0129V15H84.3689V6.6H86.0129V10.02H89.0849V6.6H90.7289V15H89.0849V11.484ZM92.7853 6.6H97.7653V8.064H94.4293V10.02H97.4653V11.484H94.4293V13.536H97.8253V15H92.7853V6.6ZM99.6549 6.684C99.8389 6.652 100.035 6.624 100.243 6.6C100.459 6.568 100.671 6.544 100.879 6.528C101.095 6.512 101.303 6.5 101.503 6.492C101.703 6.484 101.887 6.48 102.055 6.48C102.447 6.48 102.831 6.516 103.207 6.588C103.591 6.66 103.931 6.784 104.227 6.96C104.531 7.136 104.771 7.38 104.947 7.692C105.131 7.996 105.223 8.38 105.223 8.844C105.223 9.532 105.063 10.092 104.743 10.524C104.423 10.956 103.995 11.256 103.459 11.424L104.047 11.796L105.967 15H104.071L102.163 11.712L101.299 11.556V15H99.6549V6.684ZM102.175 7.944C102.007 7.944 101.839 7.948 101.671 7.956C101.511 7.964 101.387 7.98 101.299 8.004V10.44H101.995C102.451 10.44 102.815 10.336 103.087 10.128C103.359 9.92 103.495 9.576 103.495 9.096C103.495 8.736 103.383 8.456 103.159 8.256C102.935 8.048 102.607 7.944 102.175 7.944ZM107.474 6.6H112.454V8.064H109.118V10.02H112.154V11.484H109.118V13.536H112.514V15H107.474V6.6Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
5
site/public/icons/you-are-here.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="119" height="69" viewBox="0 0 119 69" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 11C0 4.92487 4.92487 0 11 0H108C114.075 0 119 4.92487 119 11C119 17.0751 114.075 22 108 22H11C4.92487 22 0 17.0751 0 11Z" fill="#FFD644"/>
|
||||
<path d="M20.9321 11.88L18.1721 6.6H20.1281L21.6641 9.756L21.8321 10.644H21.8921L22.0721 9.732L23.5601 6.6H25.3241L22.5761 11.868V15H20.9321V11.88ZM25.7794 10.8C25.7794 9.4 26.0874 8.324 26.7034 7.572C27.3194 6.812 28.1994 6.432 29.3434 6.432C29.9434 6.432 30.4674 6.536 30.9154 6.744C31.3634 6.952 31.7354 7.248 32.0314 7.632C32.3274 8.016 32.5474 8.476 32.6914 9.012C32.8354 9.548 32.9074 10.144 32.9074 10.8C32.9074 12.2 32.5954 13.28 31.9714 14.04C31.3554 14.792 30.4794 15.168 29.3434 15.168C28.7354 15.168 28.2074 15.064 27.7594 14.856C27.3114 14.648 26.9394 14.352 26.6434 13.968C26.3554 13.584 26.1394 13.124 25.9954 12.588C25.8514 12.052 25.7794 11.456 25.7794 10.8ZM27.5074 10.8C27.5074 11.224 27.5434 11.616 27.6154 11.976C27.6874 12.328 27.7954 12.632 27.9394 12.888C28.0914 13.144 28.2834 13.344 28.5154 13.488C28.7474 13.632 29.0234 13.704 29.3434 13.704C29.9274 13.704 30.3794 13.476 30.6994 13.02C31.0194 12.564 31.1794 11.824 31.1794 10.8C31.1794 10.392 31.1434 10.012 31.0714 9.66C31.0074 9.308 30.9034 9 30.7594 8.736C30.6154 8.472 30.4274 8.268 30.1954 8.124C29.9634 7.972 29.6794 7.896 29.3434 7.896C28.7594 7.896 28.3074 8.132 27.9874 8.604C27.6674 9.068 27.5074 9.8 27.5074 10.8ZM39.2425 6.6H40.8025V12.024C40.8025 12.568 40.7305 13.036 40.5865 13.428C40.4425 13.82 40.2425 14.144 39.9865 14.4C39.7305 14.656 39.4185 14.844 39.0505 14.964C38.6825 15.084 38.2785 15.144 37.8385 15.144C35.7105 15.144 34.6465 14.172 34.6465 12.228V6.6H36.2905V11.904C36.2905 12.232 36.3185 12.512 36.3745 12.744C36.4385 12.968 36.5345 13.152 36.6625 13.296C36.7905 13.432 36.9505 13.532 37.1425 13.596C37.3345 13.652 37.5585 13.68 37.8145 13.68C38.3185 13.68 38.6825 13.54 38.9065 13.26C39.1305 12.98 39.2425 12.528 39.2425 11.904V6.6ZM50.1006 13.14H47.5206L46.8846 15H45.2406L48.2646 6.54H49.4766L52.5006 15H50.7726L50.1006 13.14ZM47.9406 11.82H49.7406L49.1166 9.948L48.8646 8.628H48.8046L48.5526 9.96L47.9406 11.82ZM53.8263 6.684C54.0103 6.652 54.2063 6.624 54.4143 6.6C54.6303 6.568 54.8423 6.544 55.0503 6.528C55.2663 6.512 55.4743 6.5 55.6743 6.492C55.8743 6.484 56.0583 6.48 56.2263 6.48C56.6183 6.48 57.0023 6.516 57.3783 6.588C57.7623 6.66 58.1023 6.784 58.3983 6.96C58.7023 7.136 58.9423 7.38 59.1183 7.692C59.3023 7.996 59.3943 8.38 59.3943 8.844C59.3943 9.532 59.2343 10.092 58.9143 10.524C58.5943 10.956 58.1663 11.256 57.6303 11.424L58.2183 11.796L60.1383 15H58.2423L56.3343 11.712L55.4703 11.556V15H53.8263V6.684ZM56.3463 7.944C56.1783 7.944 56.0103 7.948 55.8423 7.956C55.6823 7.964 55.5583 7.98 55.4703 8.004V10.44H56.1663C56.6223 10.44 56.9863 10.336 57.2583 10.128C57.5303 9.92 57.6663 9.576 57.6663 9.096C57.6663 8.736 57.5543 8.456 57.3303 8.256C57.1063 8.048 56.7783 7.944 56.3463 7.944ZM61.645 6.6H66.625V8.064H63.289V10.02H66.325V11.484H63.289V13.536H66.685V15H61.645V6.6ZM76.8657 11.484H73.7937V15H72.1497V6.6H73.7937V10.02H76.8657V6.6H78.5097V15H76.8657V11.484ZM80.5661 6.6H85.5461V8.064H82.2101V10.02H85.2461V11.484H82.2101V13.536H85.6061V15H80.5661V6.6ZM87.4356 6.684C87.6196 6.652 87.8156 6.624 88.0236 6.6C88.2396 6.568 88.4516 6.544 88.6596 6.528C88.8756 6.512 89.0836 6.5 89.2836 6.492C89.4836 6.484 89.6676 6.48 89.8356 6.48C90.2276 6.48 90.6116 6.516 90.9876 6.588C91.3716 6.66 91.7116 6.784 92.0076 6.96C92.3116 7.136 92.5516 7.38 92.7276 7.692C92.9116 7.996 93.0036 8.38 93.0036 8.844C93.0036 9.532 92.8436 10.092 92.5236 10.524C92.2036 10.956 91.7756 11.256 91.2396 11.424L91.8276 11.796L93.7476 15H91.8516L89.9436 11.712L89.0796 11.556V15H87.4356V6.684ZM89.9556 7.944C89.7876 7.944 89.6196 7.948 89.4516 7.956C89.2916 7.964 89.1676 7.98 89.0796 8.004V10.44H89.7756C90.2316 10.44 90.5956 10.336 90.8676 10.128C91.1396 9.92 91.2756 9.576 91.2756 9.096C91.2756 8.736 91.1636 8.456 90.9396 8.256C90.7156 8.048 90.3876 7.944 89.9556 7.944ZM95.2544 6.6H100.234V8.064H96.8984V10.02H99.9344V11.484H96.8984V13.536H100.294V15H95.2544V6.6Z" fill="black"/>
|
||||
<path d="M59.5002 49.4121C60.5085 49.4121 61.3717 49.032 62.0897 48.2717C62.8078 47.5114 63.1668 46.5974 63.1668 45.5297C63.1668 44.462 62.8078 43.548 62.0897 42.7877C61.3717 42.0274 60.5085 41.6473 59.5002 41.6473C58.4918 41.6473 57.6286 42.0274 56.9106 42.7877C56.1925 43.548 55.8335 44.462 55.8335 45.5297C55.8335 46.5974 56.1925 47.5114 56.9106 48.2717C57.6286 49.032 58.4918 49.4121 59.5002 49.4121ZM59.5002 68.8242C54.5807 64.3918 50.9064 60.2748 48.4772 56.4733C46.0481 52.6717 44.8335 49.1533 44.8335 45.9179C44.8335 41.0649 46.3078 37.1987 49.2564 34.3192C52.205 31.4397 55.6196 30 59.5002 30C63.3807 30 66.7953 31.4397 69.7439 34.3192C72.6925 37.1987 74.1668 41.0649 74.1668 45.9179C74.1668 49.1533 72.9522 52.6717 70.5231 56.4733C68.0939 60.2748 64.4196 64.3918 59.5002 68.8242Z" fill="#FF1B00"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
26
site/src/components/CheckItem.astro
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
/** CheckItem — a ✓ capability row (§12). Render inside a <ul class="checklist">. */
|
||||
interface Props {
|
||||
label: string;
|
||||
}
|
||||
const { label } = Astro.props;
|
||||
---
|
||||
|
||||
<li class="check">
|
||||
<span class="tick" aria-hidden="true">✓</span>
|
||||
<span>{label}</span>
|
||||
</li>
|
||||
|
||||
<style>
|
||||
.check {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 0.5rem;
|
||||
padding: 0.3rem 0;
|
||||
}
|
||||
.tick {
|
||||
color: var(--signal-400);
|
||||
font-weight: 700;
|
||||
line-height: 1.5;
|
||||
}
|
||||
</style>
|
||||
15
site/src/components/Chip.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
/** Chip — a mono file/feature chip (e.g. `.kicad_pcb`, "Self-hostable"). */
|
||||
interface Props {
|
||||
label?: string;
|
||||
icon?: string; // optional /public icon path for a leading mark
|
||||
class?: string;
|
||||
}
|
||||
const { label, icon, class: cls = '' } = Astro.props;
|
||||
import Icon from './Icon.astro';
|
||||
---
|
||||
|
||||
<span class={`chip ${cls}`}>
|
||||
{icon && <Icon name={icon} size="0.9rem" alt="" />}
|
||||
{label}<slot />
|
||||
</span>
|
||||
133
site/src/components/DemoVideo.astro
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
---
|
||||
/**
|
||||
* DemoVideo — the multiplayer demo centerpiece.
|
||||
*
|
||||
* Poster-first and lazy (`preload="none"`); never autoplays in markup. A tiny
|
||||
* IntersectionObserver (bound on astro:page-load, see <script> below) plays it
|
||||
* when scrolled into view ONLY if the user hasn't asked for reduced motion —
|
||||
* otherwise the static poster + manual play control stays.
|
||||
*
|
||||
* Until the real files exist, pass no `mp4`/`webm` and it renders a Placeholder.
|
||||
*/
|
||||
import Placeholder from './Placeholder.astro';
|
||||
import Icon from './Icon.astro';
|
||||
|
||||
interface Props {
|
||||
mp4?: string; // e.g. "/video/multiplayer-demo.mp4"
|
||||
webm?: string;
|
||||
poster?: string;
|
||||
caption?: string;
|
||||
ratio?: string; // default 16/9
|
||||
class?: string;
|
||||
}
|
||||
|
||||
const { mp4, webm, poster, caption, ratio = '16 / 9', class: cls = '' } = Astro.props;
|
||||
const hasVideo = Boolean(mp4 || webm);
|
||||
---
|
||||
|
||||
<figure class={`demo ${cls}`}>
|
||||
{
|
||||
hasVideo ? (
|
||||
<div class="demo-frame" data-demo-video style={`aspect-ratio:${ratio};`}>
|
||||
<video
|
||||
poster={poster}
|
||||
preload="none"
|
||||
muted
|
||||
loop
|
||||
playsinline
|
||||
controls
|
||||
aria-label={caption ?? 'PCBJam multiplayer editing demo'}
|
||||
>
|
||||
{webm && <source src={webm} type="video/webm" />}
|
||||
{mp4 && <source src={mp4} type="video/mp4" />}
|
||||
</video>
|
||||
<button class="demo-play" type="button" aria-label="Play demo" data-demo-play>
|
||||
<Icon name="icons/play.svg" size="3.5rem" alt="" />
|
||||
</button>
|
||||
</div>
|
||||
) : (
|
||||
<Placeholder
|
||||
label="PRODUCE: multiplayer demo loop — 2–3 live cursors, one board (§4b.2)"
|
||||
kind="video"
|
||||
ratio={ratio}
|
||||
/>
|
||||
)
|
||||
}
|
||||
{caption && <figcaption class="demo-caption">{caption}</figcaption>}
|
||||
</figure>
|
||||
|
||||
<style>
|
||||
.demo {
|
||||
margin: 0;
|
||||
}
|
||||
.demo-frame {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg);
|
||||
background: var(--bg-soft);
|
||||
}
|
||||
.demo-frame video {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
.demo-play {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
border: 0;
|
||||
background: color-mix(in srgb, var(--bg) 35%, transparent);
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.demo-play[hidden] {
|
||||
display: none;
|
||||
}
|
||||
.demo-caption {
|
||||
margin-top: 0.75rem;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8rem;
|
||||
color: var(--fg-muted);
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
// Bound on every load + SPA swap (ClientRouter re-runs astro:page-load).
|
||||
function initDemoVideos() {
|
||||
const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||
document.querySelectorAll<HTMLElement>('[data-demo-video]').forEach((frame) => {
|
||||
if (frame.dataset.bound === '1') return;
|
||||
frame.dataset.bound = '1';
|
||||
const video = frame.querySelector('video');
|
||||
const playBtn = frame.querySelector<HTMLButtonElement>('[data-demo-play]');
|
||||
if (!video) return;
|
||||
|
||||
playBtn?.addEventListener('click', () => {
|
||||
video.play();
|
||||
playBtn.hidden = true;
|
||||
});
|
||||
video.addEventListener('play', () => {
|
||||
if (playBtn) playBtn.hidden = true;
|
||||
});
|
||||
|
||||
if (reduce || !('IntersectionObserver' in window)) return; // poster + manual play only
|
||||
|
||||
const io = new IntersectionObserver(
|
||||
(entries) => {
|
||||
for (const e of entries) {
|
||||
if (e.isIntersecting) video.play().catch(() => {});
|
||||
else video.pause();
|
||||
}
|
||||
},
|
||||
{ threshold: 0.5 },
|
||||
);
|
||||
io.observe(frame);
|
||||
});
|
||||
}
|
||||
document.addEventListener('astro:page-load', initDemoVideos);
|
||||
</script>
|
||||
66
site/src/components/EECredit.astro
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
---
|
||||
/**
|
||||
* EECredit — the "Built by Emergence Engineering" lockup. The EE wordmark keeps
|
||||
* its own (guest-brand) colors via Icon mode="img".
|
||||
* - variant="footer": wordmark + studio blurb + contact (footer column 3).
|
||||
* - variant="inline": compact wordmark + "Built by" label.
|
||||
*/
|
||||
import Icon from './Icon.astro';
|
||||
|
||||
interface Props {
|
||||
variant?: 'footer' | 'inline';
|
||||
class?: string;
|
||||
}
|
||||
const { variant = 'footer', class: cls = '' } = Astro.props;
|
||||
---
|
||||
|
||||
{
|
||||
variant === 'inline' ? (
|
||||
<a class={`ee-inline ${cls}`} href="/built-by-emergence">
|
||||
<span class="ee-by">Built by</span>
|
||||
<Icon name="ee/ee-logo.svg" mode="img" size="1rem" alt="Emergence Engineering" />
|
||||
</a>
|
||||
) : (
|
||||
<div class={`ee-footer ${cls}`}>
|
||||
<Icon name="ee/ee-logo.svg" mode="img" size="1.5rem" alt="Emergence Engineering" />
|
||||
<p class="ee-blurb muted">
|
||||
PCBJam is a project by Emergence Engineering, a full-stack software studio. Need
|
||||
something hard built?{' '}
|
||||
<a href="mailto:contact@emergence-engineering.com">contact@emergence-engineering.com</a>
|
||||
</p>
|
||||
<a class="ee-link" href="/built-by-emergence">
|
||||
About Emergence Engineering →
|
||||
</a>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
<style>
|
||||
.ee-inline {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
color: var(--fg-muted);
|
||||
}
|
||||
.ee-inline:hover {
|
||||
text-decoration: none;
|
||||
color: var(--fg);
|
||||
}
|
||||
.ee-by {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.ee-footer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.6rem;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.ee-blurb {
|
||||
margin: 0;
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.ee-link {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,14 +1,135 @@
|
|||
---
|
||||
import Icon from './Icon.astro';
|
||||
import EECredit from './EECredit.astro';
|
||||
|
||||
const year = new Date().getFullYear();
|
||||
// TODO(links): add Roadmap (/roadmap) and dedicated How-it-works/Open pages when they ship.
|
||||
const GITHUB_URL = 'https://github.com/emergence-engineering';
|
||||
---
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<span>© {year} KiCad WebAssembly — placeholder.</span>
|
||||
<nav aria-label="Legal">
|
||||
<a href="/terms">Terms & Conditions</a>
|
||||
<a href="/privacy">Privacy Policy</a>
|
||||
<a href="/cookies">Cookie Policy</a>
|
||||
</nav>
|
||||
<div class="container cols">
|
||||
<div class="col col-brand">
|
||||
<a class="brand" href="/">
|
||||
<img src="/favicon.svg" alt="" width="22" height="22" />
|
||||
<span>PCBJam</span>
|
||||
</a>
|
||||
<p class="tagline muted">KiCad, in your browser. Now multiplayer.</p>
|
||||
<nav class="links" aria-label="PCBJam">
|
||||
<a href={GITHUB_URL} rel="noopener" target="_blank">
|
||||
<Icon name="icons/github.svg" size="0.9rem" alt="" /> GitHub
|
||||
</a>
|
||||
<a href="/blog">Blog</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<h2 class="col-title">Product</h2>
|
||||
<nav class="links stack" aria-label="Product">
|
||||
<a href="/#how-it-works">How it works</a>
|
||||
<a href="/#open">Open & yours</a>
|
||||
<a href="/#multiplayer">Multiplayer</a>
|
||||
<a href="/#waitlist">Join the waitlist</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<h2 class="col-title">Built by</h2>
|
||||
<EECredit variant="footer" />
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<h2 class="col-title">Legal</h2>
|
||||
<nav class="links stack" aria-label="Legal">
|
||||
<a href="/privacy">Privacy Policy</a>
|
||||
<a href="/terms">Terms & Conditions</a>
|
||||
<a href="/cookies">Cookie Policy</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container bottom">
|
||||
<span>© {year} Emergence Engineering</span>
|
||||
<span class="attrib muted">
|
||||
Built on the open-source <a href="https://www.kicad.org" rel="noopener" target="_blank"
|
||||
>KiCad</a
|
||||
> EDA suite. Not affiliated with or endorsed by the KiCad project.
|
||||
</span>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
.site-footer {
|
||||
border-top: 1px solid var(--border);
|
||||
background: var(--bg-soft);
|
||||
color: var(--fg-muted);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cols {
|
||||
display: grid;
|
||||
grid-template-columns: 1.4fr 1fr 1.4fr 1fr;
|
||||
gap: 2rem;
|
||||
padding-block: 2.5rem 1.5rem;
|
||||
}
|
||||
.col-title {
|
||||
font-size: 0.8rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: var(--fg);
|
||||
margin: 0 0 0.75rem;
|
||||
}
|
||||
.brand {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--fg);
|
||||
}
|
||||
.tagline {
|
||||
margin: 0.6rem 0 0.9rem;
|
||||
}
|
||||
.links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem 1rem;
|
||||
}
|
||||
.links.stack {
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.links a {
|
||||
color: var(--fg-muted);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
.links a:hover {
|
||||
color: var(--fg);
|
||||
text-decoration: none;
|
||||
}
|
||||
.bottom {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem 1.5rem;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-block: 1.25rem;
|
||||
border-top: 1px solid var(--border);
|
||||
}
|
||||
.attrib {
|
||||
font-size: 0.82rem;
|
||||
max-width: 42rem;
|
||||
}
|
||||
|
||||
@media (max-width: 820px) {
|
||||
.cols {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1.75rem;
|
||||
}
|
||||
}
|
||||
@media (max-width: 520px) {
|
||||
.cols {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,18 +1,170 @@
|
|||
---
|
||||
import Icon from './Icon.astro';
|
||||
|
||||
// TODO(assets): replace favicon "K" + text wordmark with the real PCBJam logo (§4b.1).
|
||||
// TODO(links): add "Roadmap" → /roadmap and repoint How-it-works/Open to their own
|
||||
// pages once the supporting pages ship; for now they anchor to landing sections.
|
||||
// TODO(config): point at the public PCBJam repo when it exists.
|
||||
const GITHUB_URL = 'https://github.com/emergence-engineering';
|
||||
|
||||
const links = [
|
||||
{ href: '/#how-it-works', label: 'How it works' },
|
||||
{ href: '/#open', label: 'Open & yours' },
|
||||
{ href: '/blog', label: 'Blog' },
|
||||
{ href: '/#built-by', label: 'Built by Emergence Engineering' },
|
||||
];
|
||||
|
||||
const path = Astro.url.pathname;
|
||||
const isActive = (href: string) =>
|
||||
href === '/' ? path === '/' : path.startsWith(href);
|
||||
href.startsWith('/#') ? false : href === '/' ? path === '/' : path.startsWith(href);
|
||||
---
|
||||
|
||||
<header class="site-header" transition:persist>
|
||||
<div class="container">
|
||||
<div class="container bar">
|
||||
<a class="brand" href="/">
|
||||
<img src="/favicon.svg" alt="" width="24" height="24" />
|
||||
<span>KiCad in the browser</span>
|
||||
<span class="brand-name">PCBJam</span>
|
||||
<span class="brand-chip">built on KiCad</span>
|
||||
</a>
|
||||
<nav class="nav">
|
||||
<a href="/" aria-current={isActive('/') ? 'page' : undefined}>Home</a>
|
||||
<a href="/blog" aria-current={isActive('/blog') ? 'page' : undefined}>Blog</a>
|
||||
|
||||
<input type="checkbox" id="nav-toggle" class="nav-toggle sr-only" />
|
||||
<label class="hamburger" for="nav-toggle" aria-label="Toggle menu">
|
||||
<span></span><span></span><span></span>
|
||||
</label>
|
||||
|
||||
<nav class="nav" aria-label="Primary">
|
||||
{
|
||||
links.map((l) => (
|
||||
<a href={l.href} aria-current={isActive(l.href) ? 'page' : undefined}>
|
||||
{l.label}
|
||||
</a>
|
||||
))
|
||||
}
|
||||
<a class="gh" href={GITHUB_URL} rel="noopener" target="_blank">
|
||||
<Icon name="icons/github.svg" size="1rem" alt="GitHub" /> <span>★</span>
|
||||
</a>
|
||||
<a class="btn btn-primary cta-join" href="/#waitlist">Join the waitlist</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
.site-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 50;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: color-mix(in srgb, var(--bg-soft) 92%, transparent);
|
||||
backdrop-filter: blur(8px);
|
||||
}
|
||||
.bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding-block: 0.75rem;
|
||||
}
|
||||
.brand {
|
||||
font-weight: 700;
|
||||
color: var(--fg);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.brand img {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
}
|
||||
.brand-chip {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.7rem;
|
||||
color: var(--fg-muted);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-sm);
|
||||
padding: 0.1rem 0.4rem;
|
||||
}
|
||||
.nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1.1rem;
|
||||
}
|
||||
.nav > a {
|
||||
color: var(--fg-muted);
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
.nav > a:hover {
|
||||
color: var(--fg);
|
||||
text-decoration: none;
|
||||
}
|
||||
.nav > a[aria-current='page'] {
|
||||
color: var(--fg);
|
||||
}
|
||||
.gh {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
.cta-join {
|
||||
padding-block: 0.5rem;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
/* Mobile menu (CSS-only via checkbox toggle). */
|
||||
.hamburger {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
padding: 0.4rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.hamburger span {
|
||||
width: 22px;
|
||||
height: 2px;
|
||||
background: var(--fg);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
@media (max-width: 820px) {
|
||||
.brand-chip {
|
||||
display: none;
|
||||
}
|
||||
.hamburger {
|
||||
display: flex;
|
||||
}
|
||||
.nav {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 0;
|
||||
background: var(--bg-soft);
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding: 0.5rem 1.25rem 1rem;
|
||||
display: none;
|
||||
}
|
||||
.nav-toggle:checked ~ .nav {
|
||||
display: flex;
|
||||
}
|
||||
.nav > a,
|
||||
.gh {
|
||||
padding-block: 0.6rem;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.cta-join {
|
||||
margin-top: 0.75rem;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
// ClientRouter persists the header (transition:persist), so reset the mobile
|
||||
// menu toggle after every navigation to avoid it staying open.
|
||||
function resetNav() {
|
||||
const t = document.getElementById('nav-toggle') as HTMLInputElement | null;
|
||||
if (t) t.checked = false;
|
||||
}
|
||||
document.addEventListener('astro:page-load', resetNav);
|
||||
</script>
|
||||
|
|
|
|||
57
site/src/components/Icon.astro
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
---
|
||||
/**
|
||||
* Icon — renders an SVG from /public.
|
||||
*
|
||||
* mode="mask" (default): paints the SVG silhouette with `currentColor` via a CSS
|
||||
* mask, so monochrome glyphs (github, arrows, play, mail…) tint to the brand
|
||||
* regardless of the file's own hardcoded fills.
|
||||
* mode="img": a plain <img>, preserving the file's original colors — use for
|
||||
* multicolor illustrations, brand wordmarks, and client/partner logos.
|
||||
*
|
||||
* `name` is a path under /public, e.g. "icons/github.svg" or "clients/skiff.svg".
|
||||
*/
|
||||
interface Props {
|
||||
name: string;
|
||||
alt?: string;
|
||||
size?: string; // any CSS length; defaults to 1.25rem
|
||||
mode?: 'mask' | 'img';
|
||||
class?: string;
|
||||
}
|
||||
|
||||
const { name, alt = '', size = '1.25rem', mode = 'mask', class: cls = '' } = Astro.props;
|
||||
const src = `/${name.replace(/^\/+/, '')}`;
|
||||
const decorative = alt === '';
|
||||
---
|
||||
|
||||
{
|
||||
mode === 'mask' ? (
|
||||
<span
|
||||
class={`icon-mask ${cls}`}
|
||||
role={decorative ? undefined : 'img'}
|
||||
aria-label={decorative ? undefined : alt}
|
||||
aria-hidden={decorative ? 'true' : undefined}
|
||||
style={`--icon-url:url('${src}');--icon-size:${size};`}
|
||||
/>
|
||||
) : (
|
||||
<img
|
||||
src={src}
|
||||
alt={alt}
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
class={cls}
|
||||
style={`height:${size};width:auto;`}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
<style>
|
||||
.icon-mask {
|
||||
display: inline-block;
|
||||
width: var(--icon-size);
|
||||
height: var(--icon-size);
|
||||
flex: none;
|
||||
background-color: currentColor;
|
||||
-webkit-mask: var(--icon-url) no-repeat center / contain;
|
||||
mask: var(--icon-url) no-repeat center / contain;
|
||||
}
|
||||
</style>
|
||||
35
site/src/components/Pillar.astro
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
/** Pillar — one value-pillar card (§10). Body via default slot. */
|
||||
import Icon from './Icon.astro';
|
||||
interface Props {
|
||||
title: string;
|
||||
icon?: string;
|
||||
iconMode?: 'mask' | 'img';
|
||||
}
|
||||
const { title, icon, iconMode = 'mask' } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="card pillar">
|
||||
{icon && <Icon name={icon} mode={iconMode} size="2.25rem" alt="" class="pillar-icon" />}
|
||||
<h3>{title}</h3>
|
||||
<p class="muted"><slot /></p>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.pillar {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.pillar-icon {
|
||||
color: var(--accent);
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.pillar h3 {
|
||||
margin: 0;
|
||||
}
|
||||
.pillar p {
|
||||
margin: 0;
|
||||
line-height: 1.55;
|
||||
}
|
||||
</style>
|
||||
63
site/src/components/Placeholder.astro
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
/**
|
||||
* Placeholder — a clearly-marked, dashed-box slot for an asset that doesn't
|
||||
* exist yet (PCBJam logo, demo video, product screenshots…). Real assets drop
|
||||
* into the same spot later by swapping this component for an <img>/<DemoVideo>.
|
||||
*
|
||||
* The `label` should name what to produce + the spec ref, e.g.
|
||||
* "PRODUCE: multiplayer demo loop (§4b.2)"
|
||||
*/
|
||||
interface Props {
|
||||
label: string;
|
||||
ratio?: string; // e.g. "16 / 9", "1 / 1"; default 16/9
|
||||
kind?: 'image' | 'video' | 'logo';
|
||||
class?: string;
|
||||
}
|
||||
|
||||
const { label, ratio = '16 / 9', kind = 'image', class: cls = '' } = Astro.props;
|
||||
const glyph = kind === 'video' ? '▶' : kind === 'logo' ? '◆' : '▦';
|
||||
---
|
||||
|
||||
<div
|
||||
class={`placeholder ${cls}`}
|
||||
data-placeholder={kind}
|
||||
style={`aspect-ratio:${ratio};`}
|
||||
role="img"
|
||||
aria-label={label}
|
||||
>
|
||||
<span class="ph-glyph" aria-hidden="true">{glyph}</span>
|
||||
<span class="ph-label">{label}</span>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.placeholder {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.5rem;
|
||||
width: 100%;
|
||||
padding: 1.5rem;
|
||||
text-align: center;
|
||||
border: 2px dashed var(--border);
|
||||
border-radius: var(--radius);
|
||||
background:
|
||||
repeating-linear-gradient(
|
||||
45deg,
|
||||
color-mix(in srgb, var(--bg-soft) 88%, transparent),
|
||||
color-mix(in srgb, var(--bg-soft) 88%, transparent) 12px,
|
||||
var(--bg-soft) 12px,
|
||||
var(--bg-soft) 24px
|
||||
);
|
||||
color: var(--fg-muted);
|
||||
}
|
||||
.ph-glyph {
|
||||
font-size: 1.75rem;
|
||||
opacity: 0.6;
|
||||
}
|
||||
.ph-label {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8rem;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
</style>
|
||||
55
site/src/components/SectionBand.astro
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
/**
|
||||
* SectionBand — a full-width section wrapper. Centers its content in the shared
|
||||
* .container with default vertical rhythm; optionally tints the band
|
||||
* (`tone="soft"`) and/or paints the faint blueprint dot-grid motif (`grid`).
|
||||
* Pass `flush` to drop the default block padding (e.g. the thin stat bar).
|
||||
* Pass an `id` for in-page anchor links.
|
||||
*/
|
||||
interface Props {
|
||||
id?: string;
|
||||
tone?: 'default' | 'soft';
|
||||
grid?: boolean;
|
||||
flush?: boolean;
|
||||
class?: string;
|
||||
labelledby?: string;
|
||||
}
|
||||
|
||||
const {
|
||||
id,
|
||||
tone = 'default',
|
||||
grid = false,
|
||||
flush = false,
|
||||
class: cls = '',
|
||||
labelledby,
|
||||
} = Astro.props;
|
||||
const bandClass = ['band', tone === 'soft' ? 'band-soft' : '', grid ? 'bp-grid' : '', cls]
|
||||
.filter(Boolean)
|
||||
.join(' ');
|
||||
const innerClass = ['container', flush ? '' : 'band-inner'].filter(Boolean).join(' ');
|
||||
---
|
||||
|
||||
<section id={id} class={bandClass} aria-labelledby={labelledby}>
|
||||
<div class={innerClass}>
|
||||
<slot />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.band {
|
||||
border-block: 1px solid transparent;
|
||||
}
|
||||
.band-soft {
|
||||
background: var(--bg-soft);
|
||||
border-color: var(--border);
|
||||
}
|
||||
.bp-grid {
|
||||
background-color: var(--bg);
|
||||
}
|
||||
.band-soft.bp-grid {
|
||||
background-color: var(--bg-soft);
|
||||
}
|
||||
.band-inner {
|
||||
padding-block: clamp(3rem, 7vw, 5.5rem);
|
||||
}
|
||||
</style>
|
||||
48
site/src/components/StatBar.astro
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
/** StatBar — thin band of mono numerals (§8). */
|
||||
interface Props {
|
||||
stats: { value: string; label: string }[];
|
||||
}
|
||||
const { stats } = Astro.props;
|
||||
---
|
||||
|
||||
<dl class="statbar">
|
||||
{
|
||||
stats.map((s) => (
|
||||
<div class="stat">
|
||||
<dt class="stat-value">{s.value}</dt>
|
||||
<dd class="stat-label muted">{s.label}</dd>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</dl>
|
||||
|
||||
<style>
|
||||
.statbar {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 1.5rem;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
.stat {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
.stat-value {
|
||||
font-family: var(--font-mono);
|
||||
font-size: clamp(1.2rem, 2.4vw, 1.6rem);
|
||||
font-weight: 700;
|
||||
color: var(--fg);
|
||||
}
|
||||
.stat-label {
|
||||
margin: 0;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
@media (max-width: 680px) {
|
||||
.statbar {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
52
site/src/components/Step.astro
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
/** Step — one numbered "how a jam works" step (§11). Body via default slot. */
|
||||
import Icon from './Icon.astro';
|
||||
interface Props {
|
||||
n: number;
|
||||
title: string;
|
||||
icon?: string;
|
||||
}
|
||||
const { n, title, icon } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="step">
|
||||
<div class="step-head">
|
||||
<span class="step-n">{n}</span>
|
||||
{icon && <Icon name={icon} mode="img" size="1.6rem" alt="" />}
|
||||
</div>
|
||||
<h3>{title}</h3>
|
||||
<p class="muted"><slot /></p>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.step {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.step-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
}
|
||||
.step-n {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
flex: none;
|
||||
border-radius: var(--radius-full, 9999px);
|
||||
background: color-mix(in srgb, var(--brand-600) 22%, transparent);
|
||||
border: 1px solid var(--accent);
|
||||
color: var(--fg);
|
||||
font-family: var(--font-mono);
|
||||
font-weight: 700;
|
||||
}
|
||||
.step h3 {
|
||||
margin: 0;
|
||||
}
|
||||
.step p {
|
||||
margin: 0;
|
||||
line-height: 1.55;
|
||||
}
|
||||
</style>
|
||||
203
site/src/components/WaitlistForm.astro
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
---
|
||||
/**
|
||||
* WaitlistForm — email capture with progressive enhancement.
|
||||
* - Works with NO JS: native POST to /api/waitlist → 303 back to /?waitlist=ok.
|
||||
* - With JS: fetch + inline success state, no navigation.
|
||||
* Reused in the hero, final CTA, and footer via the `source` prop (attribution).
|
||||
* The script is bound on astro:page-load so it survives ClientRouter SPA swaps.
|
||||
*/
|
||||
interface Props {
|
||||
source: string; // 'hero' | 'final' | 'footer' …
|
||||
id?: string; // wrapper id; pass "waitlist" on the hero for the #waitlist anchor
|
||||
layout?: 'row' | 'stack';
|
||||
microcopy?: string;
|
||||
class?: string;
|
||||
}
|
||||
|
||||
const {
|
||||
source,
|
||||
id,
|
||||
layout = 'row',
|
||||
microcopy = "Early access rolls out in waves. We'll email you when your seat opens — no spam.",
|
||||
class: cls = '',
|
||||
} = Astro.props;
|
||||
|
||||
const emailId = `wl-email-${source}`;
|
||||
const hpId = `wl-hp-${source}`;
|
||||
---
|
||||
|
||||
<div class={`waitlist layout-${layout} ${cls}`} id={id} data-waitlist-wrap>
|
||||
<form
|
||||
class="wl-form"
|
||||
method="POST"
|
||||
action="/api/waitlist"
|
||||
data-waitlist
|
||||
data-source={source}
|
||||
>
|
||||
<label class="sr-only" for={emailId}>Email address</label>
|
||||
<input
|
||||
id={emailId}
|
||||
type="email"
|
||||
name="email"
|
||||
placeholder="you@company.com"
|
||||
autocomplete="email"
|
||||
required
|
||||
/>
|
||||
|
||||
{/* Honeypot — humans never see/fill this. */}
|
||||
<div class="sr-only" aria-hidden="true">
|
||||
<label for={hpId}>Leave this empty</label>
|
||||
<input id={hpId} type="text" name="company_url" tabindex="-1" autocomplete="off" />
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="source" value={source} />
|
||||
<button class="btn btn-primary" type="submit">Join the waitlist</button>
|
||||
</form>
|
||||
|
||||
<p class="wl-error" role="alert" hidden data-wl-error>
|
||||
Please enter a valid email address and try again.
|
||||
</p>
|
||||
|
||||
<div class="wl-success" hidden data-wl-success>
|
||||
<strong>You're on the list. 🎉</strong>
|
||||
<span class="muted">We'll email you when your early-access seat opens — no spam.</span>
|
||||
</div>
|
||||
|
||||
{microcopy && <p class="wl-micro muted">{microcopy}</p>}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.waitlist {
|
||||
width: 100%;
|
||||
}
|
||||
.wl-form {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.layout-stack .wl-form {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
.wl-form input[type='email'] {
|
||||
flex: 1 1 16rem;
|
||||
min-width: 0;
|
||||
padding: 0.7rem 0.9rem;
|
||||
border-radius: var(--radius);
|
||||
border: 1px solid var(--border);
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
font-size: 1rem;
|
||||
}
|
||||
.wl-form input[type='email']::placeholder {
|
||||
color: var(--fg-muted);
|
||||
}
|
||||
.wl-form input[type='email']:focus-visible {
|
||||
outline: 2px solid var(--accent);
|
||||
outline-offset: 1px;
|
||||
}
|
||||
.wl-form .btn {
|
||||
flex: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.layout-stack .wl-form .btn {
|
||||
width: 100%;
|
||||
}
|
||||
.wl-micro {
|
||||
font-size: 0.85rem;
|
||||
margin: 0.6rem 0 0;
|
||||
}
|
||||
.wl-error {
|
||||
color: var(--presence-7);
|
||||
font-size: 0.9rem;
|
||||
margin: 0.6rem 0 0;
|
||||
}
|
||||
.wl-success {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.2rem;
|
||||
padding: 0.9rem 1rem;
|
||||
border: 1px solid var(--signal-fill, var(--signal-600));
|
||||
border-radius: var(--radius);
|
||||
background: color-mix(in srgb, var(--signal-600) 14%, transparent);
|
||||
color: var(--fg);
|
||||
}
|
||||
|
||||
@media (max-width: 540px) {
|
||||
.wl-form {
|
||||
flex-direction: column;
|
||||
}
|
||||
.wl-form .btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function initWaitlist() {
|
||||
document.querySelectorAll<HTMLFormElement>('[data-waitlist]').forEach((form) => {
|
||||
if (form.dataset.bound === '1') return;
|
||||
form.dataset.bound = '1';
|
||||
const wrap = form.closest<HTMLElement>('[data-waitlist-wrap]');
|
||||
const errEl = wrap?.querySelector<HTMLElement>('[data-wl-error]');
|
||||
const okEl = wrap?.querySelector<HTMLElement>('[data-wl-success]');
|
||||
const btn = form.querySelector<HTMLButtonElement>('button[type="submit"]');
|
||||
|
||||
form.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
if (errEl) errEl.hidden = true;
|
||||
const payload = Object.fromEntries(new FormData(form).entries());
|
||||
const label = btn?.textContent;
|
||||
if (btn) {
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Joining…';
|
||||
}
|
||||
try {
|
||||
const res = await fetch(form.action, {
|
||||
method: 'POST',
|
||||
headers: { 'content-type': 'application/json', accept: 'application/json' },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
const data = await res.json().catch(() => ({}));
|
||||
if (res.ok && data.ok) {
|
||||
form.hidden = true;
|
||||
if (okEl) okEl.hidden = false;
|
||||
return;
|
||||
}
|
||||
if (errEl) errEl.hidden = false;
|
||||
} catch {
|
||||
if (errEl) errEl.hidden = false;
|
||||
}
|
||||
if (btn) {
|
||||
btn.disabled = false;
|
||||
btn.textContent = label ?? 'Join the waitlist';
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// No-JS redirect landing: /?waitlist=ok|error[#anchor]
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const status = params.get('waitlist');
|
||||
if (status === 'ok' || status === 'error') {
|
||||
const hashId = window.location.hash.slice(1);
|
||||
const wrap =
|
||||
(hashId && document.getElementById(hashId)?.closest('[data-waitlist-wrap]')) ||
|
||||
document.querySelector('[data-waitlist-wrap]');
|
||||
if (wrap) {
|
||||
if (status === 'ok') {
|
||||
wrap.querySelector('[data-waitlist]')?.setAttribute('hidden', '');
|
||||
wrap.querySelector('[data-wl-success]')?.removeAttribute('hidden');
|
||||
} else {
|
||||
wrap.querySelector('[data-wl-error]')?.removeAttribute('hidden');
|
||||
}
|
||||
}
|
||||
params.delete('waitlist');
|
||||
const qs = params.toString();
|
||||
history.replaceState(
|
||||
{},
|
||||
'',
|
||||
window.location.pathname + (qs ? `?${qs}` : '') + window.location.hash,
|
||||
);
|
||||
}
|
||||
}
|
||||
document.addEventListener('astro:page-load', initWaitlist);
|
||||
</script>
|
||||
|
|
@ -7,14 +7,24 @@ import '../styles/global.css';
|
|||
interface Props {
|
||||
title: string;
|
||||
description?: string;
|
||||
/** When true, render the page edge-to-edge (no .container) so full-width
|
||||
* bands work; each section manages its own container. Used by the landing
|
||||
* page. Blog/legal keep the default centered container. */
|
||||
wide?: boolean;
|
||||
/** Absolute or root-relative OG/Twitter share image. */
|
||||
ogImage?: string;
|
||||
}
|
||||
|
||||
const { title, description = 'KiCad in the browser — WebAssembly port.' } =
|
||||
Astro.props;
|
||||
const fullTitle =
|
||||
title === 'KiCad in the browser'
|
||||
? title
|
||||
: `${title} — KiCad in the browser`;
|
||||
const {
|
||||
title,
|
||||
description = 'PCBJam — open-source PCB design in your browser, with real-time multiplayer. Built on KiCad.',
|
||||
wide = false,
|
||||
ogImage = '/og/og-home.png',
|
||||
} = Astro.props;
|
||||
|
||||
// Pages may pass a complete title (containing "PCBJam"); otherwise append the suffix.
|
||||
const fullTitle = title.includes('PCBJam') ? title : `${title} — PCBJam`;
|
||||
const canonical = Astro.url.href;
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
|
|
@ -23,18 +33,43 @@ const fullTitle =
|
|||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<link rel="canonical" href={canonical} />
|
||||
<meta name="description" content={description} />
|
||||
<title>{fullTitle}</title>
|
||||
|
||||
{/* Open Graph / Twitter */}
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="PCBJam" />
|
||||
<meta property="og:title" content={fullTitle} />
|
||||
<meta property="og:description" content={description} />
|
||||
<meta property="og:url" content={canonical} />
|
||||
<meta property="og:image" content={ogImage} />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content={fullTitle} />
|
||||
<meta name="twitter:description" content={description} />
|
||||
<meta name="twitter:image" content={ogImage} />
|
||||
|
||||
{/* Per-page extras (e.g. JSON-LD) */}
|
||||
<slot name="head" />
|
||||
|
||||
{/* SPA-style navigation: swaps the page without a full reload. */}
|
||||
<ClientRouter />
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
<main>
|
||||
<div class="container">
|
||||
<slot />
|
||||
</div>
|
||||
</main>
|
||||
{
|
||||
wide ? (
|
||||
<main class="wide">
|
||||
<slot />
|
||||
</main>
|
||||
) : (
|
||||
<main>
|
||||
<div class="container">
|
||||
<slot />
|
||||
</div>
|
||||
</main>
|
||||
)
|
||||
}
|
||||
<Footer />
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
99
site/src/pages/api/waitlist.ts
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
import type { APIRoute } from 'astro';
|
||||
import { Resend } from 'resend';
|
||||
|
||||
// Opt this single route into on-demand (serverless) rendering. The rest of the
|
||||
// site stays static; Vercel emits exactly one function for /api/waitlist.
|
||||
export const prerender = false;
|
||||
|
||||
const EMAIL_RE = /^[^@\s]+@[^@\s]+\.[^@\s]+$/;
|
||||
|
||||
// Runtime secrets (Vercel injects at runtime). Never prefix with PUBLIC_.
|
||||
const RESEND_API_KEY = process.env.RESEND_API_KEY ?? import.meta.env.RESEND_API_KEY;
|
||||
const RESEND_AUDIENCE_ID =
|
||||
process.env.RESEND_AUDIENCE_ID ?? import.meta.env.RESEND_AUDIENCE_ID;
|
||||
const FROM_EMAIL =
|
||||
process.env.WAITLIST_FROM_EMAIL ??
|
||||
import.meta.env.WAITLIST_FROM_EMAIL ??
|
||||
'PCBJam <waitlist@pcbjam.com>';
|
||||
|
||||
function json(status: number, body: Record<string, unknown>) {
|
||||
return new Response(JSON.stringify(body), {
|
||||
status,
|
||||
headers: { 'content-type': 'application/json' },
|
||||
});
|
||||
}
|
||||
|
||||
function redirect(status: 'ok' | 'error') {
|
||||
// No-JS native submit: bounce back to the page with a status flag.
|
||||
return new Response(null, {
|
||||
status: 303,
|
||||
headers: { Location: `/?waitlist=${status}#waitlist` },
|
||||
});
|
||||
}
|
||||
|
||||
export const POST: APIRoute = async ({ request }) => {
|
||||
const ct = request.headers.get('content-type') ?? '';
|
||||
const wantsJson = ct.includes('application/json');
|
||||
|
||||
let data: Record<string, unknown> = {};
|
||||
try {
|
||||
data = wantsJson
|
||||
? await request.json()
|
||||
: Object.fromEntries(await request.formData());
|
||||
} catch {
|
||||
return wantsJson ? json(400, { ok: false, error: 'bad_request' }) : redirect('error');
|
||||
}
|
||||
|
||||
const email = String(data.email ?? '').trim().toLowerCase();
|
||||
const honeypot = String(data.company_url ?? ''); // hidden field — must stay empty
|
||||
const source = String(data.source ?? 'unknown');
|
||||
|
||||
// Bot caught by honeypot: silently "succeed" so we don't tip them off.
|
||||
if (honeypot) return wantsJson ? json(200, { ok: true }) : redirect('ok');
|
||||
|
||||
if (!EMAIL_RE.test(email) || email.length > 254) {
|
||||
return wantsJson ? json(400, { ok: false, error: 'invalid_email' }) : redirect('error');
|
||||
}
|
||||
|
||||
// No key configured (e.g. local dev without secrets): accept + log, don't 500.
|
||||
if (!RESEND_API_KEY) {
|
||||
console.warn(`[waitlist] RESEND_API_KEY not set — skipping send. email=${email} source=${source}`);
|
||||
return wantsJson ? json(200, { ok: true }) : redirect('ok');
|
||||
}
|
||||
|
||||
try {
|
||||
const resend = new Resend(RESEND_API_KEY);
|
||||
|
||||
if (RESEND_AUDIENCE_ID) {
|
||||
await resend.contacts.create({
|
||||
email,
|
||||
unsubscribed: false,
|
||||
audienceId: RESEND_AUDIENCE_ID,
|
||||
});
|
||||
}
|
||||
|
||||
await resend.emails.send({
|
||||
from: FROM_EMAIL,
|
||||
to: email,
|
||||
subject: "You're on the PCBJam waitlist",
|
||||
text: [
|
||||
"You're on the list. 🎉",
|
||||
'',
|
||||
"We'll email you the moment your early-access seat opens. Early access rolls",
|
||||
'out in waves — no spam, just a heads-up when your seat is ready.',
|
||||
'',
|
||||
'In the meantime: star us on GitHub and follow along.',
|
||||
'',
|
||||
'— The PCBJam team, built by Emergence Engineering',
|
||||
].join('\n'),
|
||||
});
|
||||
|
||||
return wantsJson ? json(200, { ok: true }) : redirect('ok');
|
||||
} catch (err) {
|
||||
console.error('[waitlist] send failed', err);
|
||||
return wantsJson ? json(500, { ok: false, error: 'send_failed' }) : redirect('error');
|
||||
}
|
||||
};
|
||||
|
||||
// A bare GET (e.g. someone visiting the URL) shouldn't 500.
|
||||
export const GET: APIRoute = () => json(405, { ok: false, error: 'method_not_allowed' });
|
||||
|
|
@ -1,36 +1,64 @@
|
|||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
import Hero from '../sections/Hero.astro';
|
||||
import TrustBar from '../sections/TrustBar.astro';
|
||||
import Multiplayer from '../sections/Multiplayer.astro';
|
||||
import Pillars from '../sections/Pillars.astro';
|
||||
import HowItWorks from '../sections/HowItWorks.astro';
|
||||
import CapabilityProof from '../sections/CapabilityProof.astro';
|
||||
import OpenYours from '../sections/OpenYours.astro';
|
||||
import MigrationStrip from '../sections/MigrationStrip.astro';
|
||||
import PositioningMap from '../sections/PositioningMap.astro';
|
||||
import BuiltByEmergence from '../sections/BuiltByEmergence.astro';
|
||||
import MakeMoney from '../sections/MakeMoney.astro';
|
||||
import AiNote from '../sections/AiNote.astro';
|
||||
import FinalCta from '../sections/FinalCta.astro';
|
||||
|
||||
// Toggle the optional positioning-map section (§15).
|
||||
const SHOW_MAP = true;
|
||||
|
||||
const description =
|
||||
'Open-source PCB design in your browser with real-time collaboration. Built on KiCad. No install, open format, free to start. Join the waitlist.';
|
||||
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareApplication',
|
||||
name: 'PCBJam',
|
||||
applicationCategory: 'DesignApplication',
|
||||
operatingSystem: 'Web browser',
|
||||
description,
|
||||
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
||||
creator: {
|
||||
'@type': 'Organization',
|
||||
name: 'Emergence Engineering',
|
||||
url: 'https://www.emergence-engineering.com',
|
||||
},
|
||||
};
|
||||
---
|
||||
|
||||
<BaseLayout title="KiCad in the browser">
|
||||
<section class="hero">
|
||||
<h1>KiCad in the browser</h1>
|
||||
<p class="lead">
|
||||
Placeholder landing page for the KiCad WebAssembly port — run PCB and
|
||||
schematic tools in a browser, no installation required. Copy here is a
|
||||
placeholder and will be replaced.
|
||||
</p>
|
||||
<a class="cta" href="/blog">Read the blog</a>
|
||||
</section>
|
||||
<BaseLayout
|
||||
title="PCBJam — KiCad in your browser, now multiplayer"
|
||||
description={description}
|
||||
wide
|
||||
>
|
||||
<script
|
||||
slot="head"
|
||||
type="application/ld+json"
|
||||
is:inline
|
||||
set:html={JSON.stringify(jsonLd)}
|
||||
/>
|
||||
|
||||
<section class="grid" aria-label="Highlights">
|
||||
<div class="card">
|
||||
<h3>Placeholder feature</h3>
|
||||
<p class="muted">
|
||||
Short description of something the project does. Replace with real copy.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Placeholder feature</h3>
|
||||
<p class="muted">
|
||||
Short description of something the project does. Replace with real copy.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Placeholder feature</h3>
|
||||
<p class="muted">
|
||||
Short description of something the project does. Replace with real copy.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<Hero />
|
||||
<TrustBar />
|
||||
<Multiplayer />
|
||||
<Pillars />
|
||||
<HowItWorks />
|
||||
<CapabilityProof />
|
||||
<OpenYours />
|
||||
<MigrationStrip />
|
||||
{SHOW_MAP && <PositioningMap />}
|
||||
<BuiltByEmergence />
|
||||
<MakeMoney />
|
||||
<AiNote />
|
||||
<FinalCta />
|
||||
</BaseLayout>
|
||||
|
|
|
|||
37
site/src/sections/AiNote.astro
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Icon from '../components/Icon.astro';
|
||||
---
|
||||
|
||||
<SectionBand tone="soft" labelledby="ai-h3">
|
||||
<div class="ai">
|
||||
<Icon name="icons/ai.svg" mode="img" size="2.5rem" alt="" class="ai-icon" />
|
||||
<div>
|
||||
<h3 id="ai-h3">AI when you want it. Never a paywall, never a black box.</h3>
|
||||
<p class="muted">
|
||||
Everyone else leads with an “AI hardware engineer.” We lead with <em>you</em> and an open
|
||||
tool you control. AI assistance is on the roadmap as an <strong>opt-in</strong> helper —
|
||||
never metered by the token, never the thing standing between you and your own board.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.ai {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
align-items: flex-start;
|
||||
max-width: 48rem;
|
||||
}
|
||||
.ai h3 {
|
||||
margin: 0 0 0.4rem;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
.ai p {
|
||||
margin: 0;
|
||||
}
|
||||
.ai-icon {
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
88
site/src/sections/BuiltByEmergence.astro
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Chip from '../components/Chip.astro';
|
||||
import Icon from '../components/Icon.astro';
|
||||
|
||||
const proof = [
|
||||
'WebAssembly',
|
||||
'Real-time collaboration (Yjs/CRDT)',
|
||||
'Rich-text & ProseMirror editors',
|
||||
'AI / LLM features',
|
||||
'Fintech & Stripe',
|
||||
];
|
||||
const clients = [
|
||||
{ name: 'Skiff', file: 'clients/skiff.svg' },
|
||||
{ name: 'Memrise', file: 'clients/memrise.svg' },
|
||||
{ name: 'AXDRAFT', file: 'clients/axdraft.svg' },
|
||||
{ name: 'Lex', file: 'clients/lex.svg' },
|
||||
{ name: 'Filtered', file: 'clients/filtered.svg' },
|
||||
{ name: 'SwaraLink', file: 'clients/swaralink.svg' },
|
||||
];
|
||||
---
|
||||
|
||||
<SectionBand id="built-by" tone="soft" labelledby="ee-h2">
|
||||
<div class="section-head">
|
||||
<span class="eyebrow">Who’s behind PCBJam</span>
|
||||
<h2 id="ee-h2">We’re Emergence Engineering. We build hard things in the browser.</h2>
|
||||
<p class="lead">
|
||||
PCBJam exists because we got obsessed with a genuinely hard problem: running a full,
|
||||
native C++ EDA suite — and real-time multiplayer — entirely in a browser, on WebAssembly.
|
||||
That’s the kind of work we do for a living. Emergence Engineering is a full-stack software
|
||||
studio (🇪🇺, remote-first) that builds WASM ports, real-time collaborative editors, AI
|
||||
features, and the payments and infrastructure behind them — for startups and scale-ups who
|
||||
need the hard parts done right.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="cluster proof">
|
||||
{proof.map((p) => <Chip label={p} />)}
|
||||
</div>
|
||||
|
||||
<p class="trusted muted">Trusted by teams at</p>
|
||||
<div class="clients">
|
||||
{clients.map((c) => <Icon name={c.file} mode="img" size="1.5rem" alt={c.name} />)}
|
||||
</div>
|
||||
|
||||
<blockquote class="quote">
|
||||
“For any new product, they’re my go-to dev house. They work fast and to super high quality.”
|
||||
<cite>— Ben Whately</cite>
|
||||
</blockquote>
|
||||
|
||||
<a class="btn btn-ghost" href="/built-by-emergence">
|
||||
Need something hard built? → Talk to the team
|
||||
</a>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.proof {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.trusted {
|
||||
font-size: 0.85rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
margin: 0 0 0.75rem;
|
||||
}
|
||||
.clients {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 1.5rem 2rem;
|
||||
opacity: 0.85;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.quote {
|
||||
margin: 0 0 2rem;
|
||||
padding-left: 1rem;
|
||||
border-left: 3px solid var(--accent);
|
||||
font-size: 1.05rem;
|
||||
max-width: 38rem;
|
||||
}
|
||||
.quote cite {
|
||||
display: block;
|
||||
margin-top: 0.5rem;
|
||||
font-style: normal;
|
||||
font-size: 0.9rem;
|
||||
color: var(--fg-muted);
|
||||
}
|
||||
</style>
|
||||
88
site/src/sections/CapabilityProof.astro
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import CheckItem from '../components/CheckItem.astro';
|
||||
import Placeholder from '../components/Placeholder.astro';
|
||||
|
||||
const capabilities = [
|
||||
'Schematic capture (Eeschema)',
|
||||
'PCB layout (Pcbnew)',
|
||||
'DRC / ERC',
|
||||
'Interactive router',
|
||||
'3D board view',
|
||||
'BOM export',
|
||||
'Gerber / drill export',
|
||||
'Footprint & symbol libraries',
|
||||
'Net classes & constraints',
|
||||
'Push-and-shove routing',
|
||||
];
|
||||
|
||||
// TODO(assets): replace with real annotated screenshots (§4b.4).
|
||||
const shots = [
|
||||
'PRODUCE: PCB layout editor screenshot (§4b.4a)',
|
||||
'PRODUCE: schematic capture (Eeschema) (§4b.4b)',
|
||||
'PRODUCE: 3D board view (§4b.4c)',
|
||||
'PRODUCE: DRC / ERC results panel (§4b.4d)',
|
||||
];
|
||||
---
|
||||
|
||||
<SectionBand tone="soft" labelledby="cap-h2">
|
||||
<div class="section-head">
|
||||
<span class="eyebrow">The actual engine, compiled to WebAssembly</span>
|
||||
<h2 id="cap-h2">This is real KiCad — the whole thing.</h2>
|
||||
<p class="lead">
|
||||
PCBJam isn’t a web re-implementation with a fraction of the features. It’s the genuine
|
||||
KiCad engine compiled to WebAssembly, running in your tab. Schematic capture. Multi-layer
|
||||
PCB layout. Design rule checks. 3D view. BOM and Gerber export. The same
|
||||
<code>.kicad_pcb</code> you’d open on the desktop — because it <em>is</em> the same tool.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="cap-grid">
|
||||
<ul class="checklist">
|
||||
{capabilities.map((c) => <CheckItem label={c} />)}
|
||||
</ul>
|
||||
<div class="shots">
|
||||
{shots.map((s) => <Placeholder label={s} kind="image" ratio="4 / 3" />)}
|
||||
</div>
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.cap-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1.2fr;
|
||||
gap: 2rem;
|
||||
align-items: start;
|
||||
}
|
||||
.checklist {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
columns: 2;
|
||||
column-gap: 1.5rem;
|
||||
}
|
||||
.checklist :global(.check) {
|
||||
break-inside: avoid;
|
||||
}
|
||||
.shots {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 0.75rem;
|
||||
}
|
||||
:global(code) {
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
@media (max-width: 820px) {
|
||||
.cap-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
@media (max-width: 460px) {
|
||||
.checklist {
|
||||
columns: 1;
|
||||
}
|
||||
.shots {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
52
site/src/sections/FinalCta.astro
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import WaitlistForm from '../components/WaitlistForm.astro';
|
||||
---
|
||||
|
||||
<SectionBand grid class="final" labelledby="final-h2">
|
||||
<div class="final-inner">
|
||||
<h2 id="final-h2">Be there when the first jam opens.</h2>
|
||||
<p class="lead">
|
||||
Early access rolls out in waves. Join the waitlist and we’ll save you a seat.
|
||||
</p>
|
||||
|
||||
<WaitlistForm
|
||||
source="final"
|
||||
class="final-form"
|
||||
microcopy="No spam. One email when your seat is ready. Unsubscribe anytime."
|
||||
/>
|
||||
|
||||
<ul class="final-trust">
|
||||
<li>Open source</li>
|
||||
<li>Built on KiCad</li>
|
||||
<li>Built by Emergence Engineering</li>
|
||||
</ul>
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.final-inner {
|
||||
max-width: 36rem;
|
||||
margin-inline: auto;
|
||||
text-align: center;
|
||||
}
|
||||
.final-inner .lead {
|
||||
margin-inline: auto;
|
||||
}
|
||||
.final-form {
|
||||
margin-top: 1.5rem;
|
||||
text-align: left;
|
||||
}
|
||||
.final-trust {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
gap: 0.5rem 1.25rem;
|
||||
padding: 0;
|
||||
margin: 1.5rem 0 0;
|
||||
font-size: 0.8rem;
|
||||
color: var(--fg-muted);
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
</style>
|
||||
100
site/src/sections/Hero.astro
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
---
|
||||
import WaitlistForm from '../components/WaitlistForm.astro';
|
||||
import DemoVideo from '../components/DemoVideo.astro';
|
||||
import Icon from '../components/Icon.astro';
|
||||
---
|
||||
|
||||
<section class="hero bp-grid">
|
||||
<div class="container hero-grid">
|
||||
<div class="hero-copy">
|
||||
<span class="eyebrow">PCBJam · built on KiCad</span>
|
||||
<h1>KiCad, in your browser — now multiplayer.</h1>
|
||||
<p class="lead">
|
||||
The PCB design tool millions trust — now zero-install and collaborative. Open a
|
||||
board in a tab, invite your team, and edit the same schematic and layout together
|
||||
in real time. Open format. No install. Free to start.
|
||||
</p>
|
||||
|
||||
<WaitlistForm source="hero" id="waitlist" class="hero-form" />
|
||||
|
||||
<p class="hero-secondary">
|
||||
<a href="#multiplayer" class="watch">
|
||||
<Icon name="icons/play.svg" size="1.1rem" alt="" /> Watch the 90-second demo →
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<ul class="hero-trust">
|
||||
<li>Open source</li>
|
||||
<li>Your files stay in KiCad format</li>
|
||||
<li>Runs on Mac, Linux, Chromebook, iPad</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="hero-visual">
|
||||
{/* TODO(assets): swap for hero board still w/ presence cursors (§4b.3) or the
|
||||
multiplayer demo loop (§4b.2) once produced. */}
|
||||
<DemoVideo
|
||||
caption="2 editors · live cursors · one board.kicad_pcb · no merge step"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.hero {
|
||||
padding-block: clamp(2.5rem, 6vw, 4.5rem);
|
||||
}
|
||||
.hero-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1.1fr 1fr;
|
||||
gap: 2.5rem;
|
||||
align-items: center;
|
||||
}
|
||||
.hero-copy h1 {
|
||||
font-size: clamp(2rem, 5vw, 3.25rem);
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
.hero-form {
|
||||
margin-top: 1.5rem;
|
||||
max-width: 30rem;
|
||||
}
|
||||
.hero-secondary {
|
||||
margin: 1rem 0 0;
|
||||
}
|
||||
.watch {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
color: var(--fg);
|
||||
}
|
||||
.hero-trust {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem 1.25rem;
|
||||
padding: 0;
|
||||
margin: 1.5rem 0 0;
|
||||
font-size: 0.85rem;
|
||||
color: var(--fg-muted);
|
||||
}
|
||||
.hero-trust li {
|
||||
position: relative;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
.hero-trust li::before {
|
||||
content: '●';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
color: var(--signal-400);
|
||||
font-size: 0.6rem;
|
||||
top: 0.25rem;
|
||||
}
|
||||
@media (max-width: 880px) {
|
||||
.hero-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.hero-visual {
|
||||
order: -1;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
44
site/src/sections/HowItWorks.astro
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Step from '../components/Step.astro';
|
||||
---
|
||||
|
||||
<SectionBand id="how-it-works" labelledby="hiw-h2">
|
||||
<div class="section-head">
|
||||
<h2 id="hiw-h2">From link to layout in three moves.</h2>
|
||||
</div>
|
||||
<div class="steps">
|
||||
<Step n={1} title="Open a board." icon="icons/idea.svg">
|
||||
Paste a link, drag in a <code>.kicad_pcb</code>, or pull from GitHub. It opens in seconds —
|
||||
no install, no account wall to <em>look</em>.
|
||||
</Step>
|
||||
<Step n={2} title="Start a jam." icon="icons/prototype.svg">
|
||||
Share the URL. Teammates join with live cursors and presence. Everyone sees the same
|
||||
board update in real time.
|
||||
</Step>
|
||||
<Step n={3} title="Design, route & export — together." icon="icons/product.svg">
|
||||
Schematic capture, PCB layout, DRC/ERC, 3D, BOM, and Gerbers — the full flow, then hand
|
||||
off to any fab. Your call.
|
||||
</Step>
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.steps {
|
||||
display: grid;
|
||||
gap: 1.5rem;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
.steps :global(code) {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.9em;
|
||||
background: color-mix(in srgb, var(--bg-soft) 70%, transparent);
|
||||
padding: 0.05rem 0.3rem;
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
@media (max-width: 760px) {
|
||||
.steps {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
52
site/src/sections/MakeMoney.astro
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
|
||||
const row = [
|
||||
{ title: 'Free core', body: 'The full editor and real-time collaboration, free to start.' },
|
||||
{ title: 'Open format', body: 'Your .kicad_pcb / .kicad_sch, open forever.' },
|
||||
{
|
||||
title: 'Paid for team scale',
|
||||
body: 'Private org workspaces, SSO, compliance, hosted storage.',
|
||||
},
|
||||
];
|
||||
---
|
||||
|
||||
<SectionBand labelledby="money-h3">
|
||||
<div class="section-head">
|
||||
<h3 id="money-h3">Free to start — and the core stays open.</h3>
|
||||
<p class="lead">
|
||||
The full editor and real-time collaboration are <strong>free to start</strong>, and the
|
||||
file format is open, forever. Later, we’ll charge teams for the things teams actually need —
|
||||
private org workspaces, SSO and compliance, hosted storage, and optional AI assistance. The
|
||||
individual, open-source core isn’t the thing we paywall.
|
||||
<strong>No per-editor toll. No metered AI. No surprises.</strong>
|
||||
</p>
|
||||
{/* TODO(verify): point-in-time competitor pricing — Flux was ~$112–158/editor/mo.
|
||||
Re-verify before stating a hard number publicly (§17, §31.10). */}
|
||||
<p class="contrast muted">
|
||||
Some browser EDA tools charge over $100 per editor, per month. We won’t.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="cards-3">
|
||||
{
|
||||
row.map((r) => (
|
||||
<div class="card money-card">
|
||||
<strong>{r.title}</strong>
|
||||
<p class="muted">{r.body}</p>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.contrast {
|
||||
margin-top: 1rem;
|
||||
font-style: italic;
|
||||
}
|
||||
.money-card p {
|
||||
margin: 0.35rem 0 0;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
</style>
|
||||
68
site/src/sections/MigrationStrip.astro
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Chip from '../components/Chip.astro';
|
||||
import Icon from '../components/Icon.astro';
|
||||
|
||||
// TODO(assets): replace name chips with grayscale source logos once usage rights
|
||||
// are cleared (§4b.7). Kept text-only for now to avoid trademark/asset issues.
|
||||
const sources = ['EAGLE', 'Altium', 'CADSTAR', 'OrCAD'];
|
||||
---
|
||||
|
||||
<SectionBand tone="soft" labelledby="mig-h3">
|
||||
<div class="mig">
|
||||
<div class="mig-copy">
|
||||
<h3 id="mig-h3">Coming from EAGLE, Altium, CADSTAR, or OrCAD?</h3>
|
||||
<p class="muted">
|
||||
KiCad is where designs are migrating — and PCBJam opens them in a browser tab, free,
|
||||
with nothing to install. <em>Bring your board. Invite your team. Pick up where you left
|
||||
off.</em>
|
||||
</p>
|
||||
<a class="btn btn-primary" href="#waitlist">Join the waitlist →</a>
|
||||
</div>
|
||||
<div class="mig-flow" aria-hidden="true">
|
||||
<div class="cluster sources">
|
||||
{sources.map((s) => <Chip label={s} />)}
|
||||
</div>
|
||||
<Icon name="icons/arrow-outward.svg" mode="mask" size="1.5rem" class="mig-arrow" />
|
||||
<span class="mig-dest">PCBJam</span>
|
||||
</div>
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.mig {
|
||||
display: grid;
|
||||
grid-template-columns: 1.3fr 1fr;
|
||||
gap: 2rem;
|
||||
align-items: center;
|
||||
}
|
||||
.mig-copy h3 {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.mig-copy .btn {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
.mig-flow {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
justify-content: flex-end;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.mig-arrow {
|
||||
color: var(--accent);
|
||||
}
|
||||
.mig-dest {
|
||||
font-weight: 700;
|
||||
color: var(--accent);
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
@media (max-width: 820px) {
|
||||
.mig {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.mig-flow {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
84
site/src/sections/Multiplayer.astro
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import DemoVideo from '../components/DemoVideo.astro';
|
||||
import Icon from '../components/Icon.astro';
|
||||
|
||||
const subpoints = [
|
||||
{
|
||||
icon: 'icons/collab.svg',
|
||||
title: 'Live cursors & presence',
|
||||
body: 'See who’s here and where they’re working.',
|
||||
},
|
||||
{
|
||||
icon: 'icons/yjs.svg',
|
||||
title: 'Conflict-free editing',
|
||||
body: 'CRDT sync (Yjs) merges everyone’s edits — no overwrite wars.',
|
||||
},
|
||||
{
|
||||
icon: 'icons/message.svg',
|
||||
title: 'Pin a comment to a pad',
|
||||
body: 'Review and resolve right on the canvas.',
|
||||
},
|
||||
];
|
||||
---
|
||||
|
||||
<SectionBand id="multiplayer" labelledby="mp-h2">
|
||||
<div class="section-head">
|
||||
<span class="eyebrow">Real-time, not “real-time-ish”</span>
|
||||
<h2 id="mp-h2">Your whole team. One board. The same second.</h2>
|
||||
<p class="lead">
|
||||
Everyone else who says “real-time collaboration” means comments, check-out locks, or a
|
||||
read-only viewer. PCBJam means <strong>live co-editing</strong>: shared cursors, presence,
|
||||
and conflict-free edits on the same schematic and layout — the way you already work in
|
||||
Google Docs and Figma. Route a trace while a teammate places parts on the other side of
|
||||
the board. No emailing files. No “who has it checked out?”
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<DemoVideo
|
||||
class="mp-demo"
|
||||
caption="2 editors · live cursors · one board.kicad_pcb · no merge step"
|
||||
/>
|
||||
|
||||
<ul class="subpoints">
|
||||
{
|
||||
subpoints.map((s) => (
|
||||
<li class="subpoint">
|
||||
<Icon name={s.icon} mode="img" size="1.6rem" alt="" />
|
||||
<div>
|
||||
<strong>{s.title}</strong>
|
||||
<p class="muted">{s.body}</p>
|
||||
</div>
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.mp-demo {
|
||||
margin-block: 0.5rem 2rem;
|
||||
}
|
||||
.subpoints {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: grid;
|
||||
gap: 1.25rem;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
.subpoint {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.subpoint p {
|
||||
margin: 0.2rem 0 0;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
@media (max-width: 760px) {
|
||||
.subpoints {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
75
site/src/sections/OpenYours.astro
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Chip from '../components/Chip.astro';
|
||||
import Icon from '../components/Icon.astro';
|
||||
|
||||
const chips = [
|
||||
'Open .kicad_pcb / .kicad_sch',
|
||||
'Self-hostable',
|
||||
'Offline PWA',
|
||||
'Open source (GPL)',
|
||||
];
|
||||
---
|
||||
|
||||
<SectionBand id="open" labelledby="open-h2">
|
||||
<div class="open-grid">
|
||||
<div class="section-head open-copy">
|
||||
<span class="eyebrow">No lock-in. No data hostage.</span>
|
||||
<h2 id="open-h2">Design <em>and</em> collaborate in the browser — without surrendering your files.</h2>
|
||||
<p class="lead">
|
||||
Cloud EDA tools trap your designs in proprietary formats and clouds you can’t leave.
|
||||
Desktop open-source tools keep you free but strand you offline and solo. PCBJam refuses
|
||||
the trade-off: <strong>real KiCad format</strong> in and out, <strong>self-host</strong>
|
||||
it on your own server, run it <strong>offline as a PWA</strong>, and it’s
|
||||
<strong>open source</strong>. Collaborate in our cloud when it’s convenient — and walk
|
||||
away with every byte whenever you want.
|
||||
</p>
|
||||
<div class="cluster">
|
||||
{chips.map((c) => <Chip label={c} />)}
|
||||
</div>
|
||||
<p class="reassure muted">
|
||||
PCBJam rides KiCad — a project backed for decades by CERN, the KiCad Services Corp, and a
|
||||
global community. This isn’t a VC bet that vanishes when the runway ends.
|
||||
</p>
|
||||
</div>
|
||||
<div class="open-art" aria-hidden="true">
|
||||
<Icon name="icons/cloud.svg" mode="img" size="5rem" />
|
||||
<Icon name="icons/github.svg" mode="mask" size="3rem" class="open-gh" />
|
||||
</div>
|
||||
</div>
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.open-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1.4fr 0.6fr;
|
||||
gap: 2rem;
|
||||
align-items: center;
|
||||
}
|
||||
.open-copy {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.open-copy .cluster {
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
.reassure {
|
||||
margin-top: 1.25rem;
|
||||
font-size: 0.9rem;
|
||||
max-width: 40rem;
|
||||
}
|
||||
.open-art {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 1rem;
|
||||
color: var(--accent);
|
||||
}
|
||||
@media (max-width: 820px) {
|
||||
.open-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.open-art {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
24
site/src/sections/Pillars.astro
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Pillar from '../components/Pillar.astro';
|
||||
---
|
||||
|
||||
<SectionBand tone="soft" labelledby="pillars-h2">
|
||||
<div class="section-head">
|
||||
<h2 id="pillars-h2">Three things that set PCBJam apart.</h2>
|
||||
</div>
|
||||
<div class="cards-3">
|
||||
<Pillar title="Runs in a browser tab." icon="icons/responsive.svg" iconMode="img">
|
||||
Zero install, zero toolchain. Mac, Linux, Windows, Chromebook, iPad — if it has a
|
||||
modern browser, it designs PCBs.
|
||||
</Pillar>
|
||||
<Pillar title="Truly multiplayer." icon="icons/collab.svg" iconMode="img">
|
||||
Live cursors, presence, and conflict-free co-editing on the same board. Plus
|
||||
pin-to-canvas comments for review.
|
||||
</Pillar>
|
||||
<Pillar title="Open & yours." icon="icons/github.svg" iconMode="mask">
|
||||
Real KiCad format in, real KiCad format out. Self-host it, run it offline as a PWA, or
|
||||
use our cloud — your files are never held hostage.
|
||||
</Pillar>
|
||||
</div>
|
||||
</SectionBand>
|
||||
21
site/src/sections/PositioningMap.astro
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import Placeholder from '../components/Placeholder.astro';
|
||||
---
|
||||
|
||||
<SectionBand labelledby="pos-h3">
|
||||
<div class="section-head">
|
||||
<h3 id="pos-h3">Everyone picks two. We do all three.</h3>
|
||||
<p class="lead">
|
||||
Browser-native. Open & yours. Truly multiplayer. Flux is browser + collab but closed.
|
||||
KiCanvas is browser + open but read-only. LibrePCB is open + full but desktop-only.
|
||||
<strong>PCBJam is the only one in the middle.</strong>
|
||||
</p>
|
||||
</div>
|
||||
{/* TODO(assets): build the quadrant/Venn graphic on the you-are-here motif (§4b.5). */}
|
||||
<Placeholder
|
||||
label="PRODUCE: positioning quadrant — Browser × Open × Multiplayer (§15)"
|
||||
kind="image"
|
||||
ratio="2 / 1"
|
||||
/>
|
||||
</SectionBand>
|
||||
23
site/src/sections/TrustBar.astro
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
import SectionBand from '../components/SectionBand.astro';
|
||||
import StatBar from '../components/StatBar.astro';
|
||||
|
||||
// TODO(numbers): replace with defensible, current figures. Pull PCBJam-native
|
||||
// counts (boards opened in beta, GitHub stars) once they exist (§8, §31.6).
|
||||
const stats = [
|
||||
{ value: 'Millions', label: 'KiCad users worldwide' },
|
||||
{ value: 'Largest', label: 'open component & footprint library in EDA' },
|
||||
{ value: '100%', label: 'open file format — your .kicad_pcb / .kicad_sch' },
|
||||
{ value: 'Free', label: 'to start — no card, no per-seat toll' },
|
||||
];
|
||||
---
|
||||
|
||||
<SectionBand tone="soft" flush class="trust">
|
||||
<StatBar stats={stats} />
|
||||
</SectionBand>
|
||||
|
||||
<style>
|
||||
.trust :global(.container) {
|
||||
padding-block: 1.75rem;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,20 +1,100 @@
|
|||
/* Tailwind v4 — theme + utilities only. Preflight is intentionally skipped:
|
||||
this file already ships a hand-rolled reset (below), and skipping Preflight
|
||||
avoids base-reset clashes on the existing blog/legal pages. */
|
||||
@import "tailwindcss/theme.css" layer(theme);
|
||||
@import "tailwindcss/utilities.css" layer(utilities);
|
||||
|
||||
:root {
|
||||
--bg: #0b1020;
|
||||
--bg-soft: #11182e;
|
||||
--fg: #e7ecf5;
|
||||
--fg-muted: #9aa6c0;
|
||||
--accent: #4f7cff;
|
||||
--border: #233052;
|
||||
/* ── Ink neutrals (authoritative; existing names kept) ───────────────── */
|
||||
--bg: #0b1020; /* ink-950 */
|
||||
--bg-soft: #11182e; /* ink-900 / surface */
|
||||
--fg: #e7ecf5; /* ink-100 */
|
||||
--fg-muted: #9aa6c0; /* ink-400 */
|
||||
--border: #233052; /* ink-800 */
|
||||
|
||||
/* ── Primary (Circuit Blue) ─────────────────────────────────────────── */
|
||||
--accent: #4f7cff; /* brand-500 (links/accents) */
|
||||
--brand-600: #2f57f5; /* primary button */
|
||||
--brand-700: #1d4ed8; /* favicon / deep */
|
||||
|
||||
/* ── Signal (green / "live" presence) ───────────────────────────────── */
|
||||
--signal-400: #32d583; /* online text */
|
||||
--signal-600: #039855; /* online fill / success */
|
||||
|
||||
/* ── Presence palette (peer cursors) ────────────────────────────────── */
|
||||
--presence-1: #818cf8;
|
||||
--presence-2: #38bdf8;
|
||||
--presence-3: #2dd4bf;
|
||||
--presence-4: #4ade80;
|
||||
--presence-5: #fbbf24;
|
||||
--presence-6: #fb923c;
|
||||
--presence-7: #fb7185;
|
||||
--presence-8: #c084fc;
|
||||
|
||||
/* ── Geometry ───────────────────────────────────────────────────────── */
|
||||
--max-width: 64rem;
|
||||
--radius: 10px;
|
||||
--radius-sm: 6px;
|
||||
--radius: 10px; /* radius-md (existing) */
|
||||
--radius-lg: 16px;
|
||||
|
||||
/* ── Motion ─────────────────────────────────────────────────────────── */
|
||||
--dur-fast: 120ms;
|
||||
--dur: 200ms;
|
||||
--dur-slow: 360ms;
|
||||
--ease: cubic-bezier(0.2, 0.8, 0.2, 1);
|
||||
|
||||
/* ── Type ───────────────────────────────────────────────────────────── */
|
||||
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
|
||||
"Liberation Mono", monospace;
|
||||
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial,
|
||||
sans-serif;
|
||||
}
|
||||
|
||||
/* Map the :root tokens into Tailwind's namespaces with `inline` so utilities
|
||||
(bg-surface, text-accent, font-mono, rounded-lg…) emit `var(--token)` and
|
||||
share ONE source of truth with the hand-written CSS — no duplicated hexes. */
|
||||
@theme inline {
|
||||
--color-bg: var(--bg);
|
||||
--color-surface: var(--bg-soft);
|
||||
--color-fg: var(--fg);
|
||||
--color-muted: var(--fg-muted);
|
||||
--color-border: var(--border);
|
||||
|
||||
--color-accent: var(--accent);
|
||||
--color-brand-600: var(--brand-600);
|
||||
--color-brand-700: var(--brand-700);
|
||||
|
||||
--color-signal: var(--signal-400);
|
||||
--color-signal-fill: var(--signal-600);
|
||||
|
||||
--color-presence-1: var(--presence-1);
|
||||
--color-presence-2: var(--presence-2);
|
||||
--color-presence-3: var(--presence-3);
|
||||
--color-presence-4: var(--presence-4);
|
||||
--color-presence-5: var(--presence-5);
|
||||
--color-presence-6: var(--presence-6);
|
||||
--color-presence-7: var(--presence-7);
|
||||
--color-presence-8: var(--presence-8);
|
||||
|
||||
--font-mono: var(--font-mono);
|
||||
|
||||
--radius-sm: var(--radius-sm);
|
||||
--radius-md: var(--radius);
|
||||
--radius-lg: var(--radius-lg);
|
||||
|
||||
--ease-brand: var(--ease);
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* The `hidden` attribute must win over any component `display` (e.g. flex). */
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
html {
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
|
|
@ -61,46 +141,7 @@ main {
|
|||
color: var(--fg-muted);
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.site-header {
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--bg-soft);
|
||||
}
|
||||
|
||||
.site-header .container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding-block: 1rem;
|
||||
}
|
||||
|
||||
.brand {
|
||||
font-weight: 700;
|
||||
color: var(--fg);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.brand img {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
||||
.nav {
|
||||
display: flex;
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
.nav a {
|
||||
color: var(--fg-muted);
|
||||
}
|
||||
|
||||
.nav a:hover {
|
||||
color: var(--fg);
|
||||
text-decoration: none;
|
||||
}
|
||||
/* Header & Footer styles live scoped in their components. */
|
||||
|
||||
/* Hero / landing */
|
||||
.hero {
|
||||
|
|
@ -175,25 +216,146 @@ main {
|
|||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
.site-footer {
|
||||
border-top: 1px solid var(--border);
|
||||
background: var(--bg-soft);
|
||||
color: var(--fg-muted);
|
||||
font-size: 0.9rem;
|
||||
/* ─────────────────────────────────────────────────────────────────────────
|
||||
Shared landing-page helpers
|
||||
───────────────────────────────────────────────────────────────────────── */
|
||||
|
||||
/* The landing page renders edge-to-edge; sections own their own spacing. */
|
||||
main.wide {
|
||||
padding-block: 0;
|
||||
}
|
||||
|
||||
.site-footer .container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem 1.5rem;
|
||||
/* Visually-hidden but accessible (labels, honeypot). */
|
||||
.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;
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-block: 1.5rem;
|
||||
justify-content: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.7rem 1.25rem;
|
||||
border-radius: var(--radius);
|
||||
font-weight: 600;
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
border: 1px solid transparent;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
transition:
|
||||
background-color var(--dur) var(--ease),
|
||||
border-color var(--dur) var(--ease),
|
||||
filter var(--dur) var(--ease);
|
||||
}
|
||||
.btn:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.btn-primary {
|
||||
background: var(--brand-600);
|
||||
color: #fff;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
filter: brightness(1.08);
|
||||
}
|
||||
.btn-ghost {
|
||||
background: transparent;
|
||||
border-color: var(--border);
|
||||
color: var(--fg);
|
||||
}
|
||||
.btn-ghost:hover {
|
||||
border-color: var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.site-footer nav {
|
||||
/* Eyebrow: mono, muted, uppercase-ish section kicker. */
|
||||
.eyebrow {
|
||||
display: inline-block;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8rem;
|
||||
letter-spacing: 0.04em;
|
||||
color: var(--fg-muted);
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
/* Mono file / feature chip. */
|
||||
.chip {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
padding: 0.25rem 0.6rem;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-sm);
|
||||
background: color-mix(in srgb, var(--bg-soft) 70%, transparent);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8rem;
|
||||
color: var(--fg);
|
||||
}
|
||||
|
||||
/* Faint blueprint dot-grid backdrop (brand motif). */
|
||||
.bp-grid {
|
||||
background-image: radial-gradient(
|
||||
var(--border) 1px,
|
||||
transparent 1px
|
||||
);
|
||||
background-size: 22px 22px;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
/* Section vertical rhythm + width. */
|
||||
.section {
|
||||
padding-block: clamp(3rem, 7vw, 5.5rem);
|
||||
}
|
||||
.section-narrow {
|
||||
max-width: 48rem;
|
||||
}
|
||||
|
||||
/* Large intro paragraph. */
|
||||
.lead {
|
||||
font-size: 1.2rem;
|
||||
color: var(--fg-muted);
|
||||
max-width: 42rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Section header block (eyebrow + heading + lead). */
|
||||
.section-head {
|
||||
max-width: 44rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.section-head h2 {
|
||||
font-size: clamp(1.6rem, 3.5vw, 2.25rem);
|
||||
}
|
||||
.section-head h3 {
|
||||
font-size: clamp(1.4rem, 3vw, 1.9rem);
|
||||
}
|
||||
|
||||
/* Generic responsive 3-up card grid. */
|
||||
.cards-3 {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
|
||||
}
|
||||
|
||||
/* Inline cluster of chips/links. */
|
||||
.cluster {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
gap: 0.5rem 0.75rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.btn {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
|
|
|
|||