From 99f1091f20cecc5c7566dfb8def0b5ac46f0a683 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Sun, 14 Dec 2025 13:55:29 -0800 Subject: [PATCH] more progress --- biome.json | 8 + bun.lock | 44 ++ bunfig.toml | 3 + package.json | 9 +- public/css/animations.css | 81 ---- public/css/buttons.css | 69 --- public/css/cards.css | 112 ----- public/css/footer.css | 65 --- public/css/gallery.css | 144 +++---- public/css/hero.css | 119 ------ public/css/intro.css | 64 --- public/css/layout.css | 160 ------- public/css/main.css | 392 ++++++++++++++++- public/css/problem-section.css | 18 +- public/css/reset.css | 71 ---- public/css/skill-demos.css | 350 +++++++-------- public/css/solution-section.css | 96 ----- public/css/tokens.css | 66 --- public/css/workflow.css | 126 +++--- public/index.html | 137 +++--- public/js/command-demos.js | 110 ----- public/js/commands.js | 31 +- public/js/demo-renderer.js | 129 ++++++ public/js/demo-toggles.js | 422 ++++--------------- public/js/demos/commands/animate.js | 36 ++ public/js/demos/commands/bolder.js | 21 + public/js/demos/commands/index.js | 15 + public/js/demos/commands/normalize.js | 39 ++ public/js/demos/index.js | 3 + public/js/demos/skills/color-and-contrast.js | 65 +++ public/js/demos/skills/index.js | 23 + public/js/demos/skills/interaction-design.js | 76 ++++ public/js/demos/skills/motion-design.js | 66 +++ public/js/demos/skills/responsive-design.js | 88 ++++ public/js/demos/skills/spatial-design.js | 59 +++ public/js/demos/skills/typography.js | 35 ++ public/js/demos/skills/ux-writing.js | 68 +++ public/js/skill-demos.js | 386 ----------------- public/js/skills.js | 8 +- 39 files changed, 1648 insertions(+), 2166 deletions(-) create mode 100644 biome.json create mode 100644 bun.lock create mode 100644 bunfig.toml delete mode 100644 public/css/animations.css delete mode 100644 public/css/buttons.css delete mode 100644 public/css/cards.css delete mode 100644 public/css/footer.css delete mode 100644 public/css/hero.css delete mode 100644 public/css/intro.css delete mode 100644 public/css/layout.css delete mode 100644 public/css/reset.css delete mode 100644 public/css/solution-section.css delete mode 100644 public/css/tokens.css delete mode 100644 public/js/command-demos.js create mode 100644 public/js/demo-renderer.js create mode 100644 public/js/demos/commands/animate.js create mode 100644 public/js/demos/commands/bolder.js create mode 100644 public/js/demos/commands/index.js create mode 100644 public/js/demos/commands/normalize.js create mode 100644 public/js/demos/index.js create mode 100644 public/js/demos/skills/color-and-contrast.js create mode 100644 public/js/demos/skills/index.js create mode 100644 public/js/demos/skills/interaction-design.js create mode 100644 public/js/demos/skills/motion-design.js create mode 100644 public/js/demos/skills/responsive-design.js create mode 100644 public/js/demos/skills/spatial-design.js create mode 100644 public/js/demos/skills/typography.js create mode 100644 public/js/demos/skills/ux-writing.js delete mode 100644 public/js/skill-demos.js diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..c488ed2d3 --- /dev/null +++ b/biome.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "css": { + "parser": { + "tailwindDirectives": true + } + } +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 000000000..210065ea3 --- /dev/null +++ b/bun.lock @@ -0,0 +1,44 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "vibe-design-plugins", + "dependencies": { + "tailwindcss": "^4.1.18", + }, + "devDependencies": { + "bun-plugin-tailwind": "^0.1.2", + }, + }, + }, + "packages": { + "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.3.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2Ie4jDGvNGuPSD+pyyBKL8dJmX+bZfDNYEalwgROImVtwB1XYAatJK20dMaRlPA7jOhjvS9Io+4IZAJu7Js0AA=="], + + "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.3.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-4/BJojT8hk5g6Gecjn5yI7y96/+9Mtzsvdp9+2dcy9sTMdlV7jBvDzswqyJPZyQqw0F3HV3Vu9XuMubZwKd9lA=="], + + "@oven/bun-darwin-x64-baseline": ["@oven/bun-darwin-x64-baseline@1.3.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZYxzIOCDqylTMsnWYERjKMMuK2b4an4qbloBmUZTwLHmVzos00yrhtpitZhJBgH6yB/l4Q5eoJ2W98UKtFFeiQ=="], + + "@oven/bun-linux-aarch64": ["@oven/bun-linux-aarch64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-8DUIlanftMdFxLGq2FxwKwfrp8O4ZofF/8Oc6lxCyEFmg2hixbHhL04+fPfJIi5D4hZloynxZdwTeDbGv/Kc4A=="], + + "@oven/bun-linux-aarch64-musl": ["@oven/bun-linux-aarch64-musl@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-6UtmM4wXgRKz+gnLZEfddfsuBSVQpJr09K12e5pbdnLzeWgXYlBT5FG8S7SVn1t6cbgBMnigEsFjWwfTuMNoCw=="], + + "@oven/bun-linux-x64": ["@oven/bun-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-03iSDMqdrmIFAsvsRptq+A7EGNjkg20dNzPnqxAlXHk5rc1PeIRWIP0eIn0i3nI6mmdj33mimf9AGr0+d0lKMg=="], + + "@oven/bun-linux-x64-baseline": ["@oven/bun-linux-x64-baseline@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-ZMGPbFPqmG/VYJv61D+Y1V7T23jPK57vYl7yYLakmkTRjG6vcJ0Akhb2qR1iW94rHvfEBjeuVDAZBp8Qp9oyWA=="], + + "@oven/bun-linux-x64-musl": ["@oven/bun-linux-x64-musl@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-xUXPuJHndGhk4K3Cx1FgTyTgDZOn+ki3eWvdXYqKdfi0EaNA9KpUq+/vUtpJbZRjzpHs9L+OJcdDILq5H0LX4g=="], + + "@oven/bun-linux-x64-musl-baseline": ["@oven/bun-linux-x64-musl-baseline@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-qsGSSlNsxiX8lAayK2uYCfMLtqu776F0nn7qoyzg9Ti7mElM3woNh7RtGClTwQ6qsp5/UvgqT9g4pLaDHmqJFg=="], + + "@oven/bun-windows-x64": ["@oven/bun-windows-x64@1.3.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nswsuN6+HZPim6x4tFpDFpMa/qpTKfywbGvCkzxwrbJO9MtpuW/54NA1nFbHhpV14OLU0xuxyBj2PK4FHq4MlA=="], + + "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.4", "", { "os": "win32", "cpu": "x64" }, "sha512-ZQiSDFfSUdOrPTiL2GvkxlC/kMED4fsJwdZnwJK6S9ylXnk9xY/9ZXfe1615SFLQl2LsVRzJAtjQLeM0BifIKQ=="], + + "bun": ["bun@1.3.4", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.4", "@oven/bun-darwin-x64": "1.3.4", "@oven/bun-darwin-x64-baseline": "1.3.4", "@oven/bun-linux-aarch64": "1.3.4", "@oven/bun-linux-aarch64-musl": "1.3.4", "@oven/bun-linux-x64": "1.3.4", "@oven/bun-linux-x64-baseline": "1.3.4", "@oven/bun-linux-x64-musl": "1.3.4", "@oven/bun-linux-x64-musl-baseline": "1.3.4", "@oven/bun-windows-x64": "1.3.4", "@oven/bun-windows-x64-baseline": "1.3.4" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-xV6KgD5ImquuKsoghzbWmYzeCXmmSgN6yJGz444hri2W+NGKNRFUNrEhy9+/rRXbvNA2qF0K0jAwqFNy1/GhBg=="], + + "bun-plugin-tailwind": ["bun-plugin-tailwind@0.1.2", "", { "peerDependencies": { "bun": ">=1.0.0" } }, "sha512-41jNC1tZRSK3s1o7pTNrLuQG8kL/0vR/JgiTmZAJ1eHwe0w5j6HFPKeqEk0WAD13jfrUC7+ULuewFBBCoADPpg=="], + + "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], + } +} diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 000000000..88894bd16 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,3 @@ +# Configure Tailwind CSS plugin for Bun's static server and bundler +[serve.static] +plugins = ["bun-plugin-tailwind"] diff --git a/package.json b/package.json index 9551c0dea..59e3f976c 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,11 @@ "ux" ], "author": "Paul Bakaus", - "license": "SEE LICENSE FILE" + "license": "SEE LICENSE FILE", + "devDependencies": { + "bun-plugin-tailwind": "^0.1.2" + }, + "dependencies": { + "tailwindcss": "^4.1.18" + } } - diff --git a/public/css/animations.css b/public/css/animations.css deleted file mode 100644 index cba78e423..000000000 --- a/public/css/animations.css +++ /dev/null @@ -1,81 +0,0 @@ -/* Animations & Keyframes */ - -/* Background Atmosphere */ -body::before { - content: ''; - position: fixed; - inset: 0; - background: - radial-gradient(circle at 20% 30%, var(--c-accent-dim) 0%, transparent 50%), - radial-gradient(circle at 80% 70%, var(--c-accent-dim) 0%, transparent 50%); - opacity: 0; - z-index: -1; - animation: fadeInBg var(--duration-slowest) var(--ease-out) 0.3s forwards; - pointer-events: none; -} - -/* Keyframe Definitions */ -@keyframes fadeInBg { - to { - opacity: 1; - } -} - -@keyframes slideInLeft { - from { - opacity: 0; - transform: translateX(-40px); - } -} - -@keyframes slideInRight { - from { - opacity: 0; - transform: translateX(40px); - } -} - -@keyframes fadeInUp { - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes expandLine { - from { - width: 0; - } -} - -@keyframes drawCircle { - from { - opacity: 0; - scale: 0; - } - to { - opacity: 1; - scale: 1; - } -} - -@keyframes pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.5; - } -} - -/* Animation Utilities */ -[data-animate] { - opacity: 0; - transform: translateY(20px); - - &.animated { - animation: fadeInUp var(--duration-slow) var(--ease-out) both; - } -} - diff --git a/public/css/buttons.css b/public/css/buttons.css deleted file mode 100644 index 5817ba2fd..000000000 --- a/public/css/buttons.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Button Components */ - -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - padding: 0.875rem 2rem; - font-family: var(--font-body); - font-size: 0.9375rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - border: none; - cursor: pointer; - transition: all var(--duration-base) var(--ease-out); - position: relative; - overflow: hidden; - text-decoration: none; -} - -/* Primary Button */ -.btn-primary { - background: var(--c-accent); - color: var(--c-paper); - width: 100%; - position: relative; - z-index: 1; - - &::before { - content: ''; - position: absolute; - inset: 0; - background: var(--c-ink); - transform: translateY(100%); - transition: transform var(--duration-base) var(--ease-out); - z-index: -1; - } - - &:hover::before { - transform: translateY(0); - } -} - -/* Secondary Button */ -.btn-secondary { - background: transparent; - color: var(--c-ink); - border: 1px solid var(--c-ink); - - &:hover { - background: var(--c-ink); - color: var(--c-paper); - } -} - -/* Small Button Variant */ -.btn-small { - padding: 0.5rem 1rem; - font-size: 0.8125rem; - border: 1px solid var(--c-mist); - background: transparent; - color: var(--c-ink); - - &:hover { - border-color: var(--c-accent); - color: var(--c-accent); - } -} - diff --git a/public/css/cards.css b/public/css/cards.css deleted file mode 100644 index 34235f745..000000000 --- a/public/css/cards.css +++ /dev/null @@ -1,112 +0,0 @@ -/* Card Components */ - -/* Download Bundles Section */ -.download-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); - gap: var(--s-md); - - @media (max-width: 640px) { - grid-template-columns: 1fr; - } -} - -.download-card { - opacity: 0; - transform: translateY(20px); - - &.animated { - animation: fadeInUp var(--duration-slow) var(--ease-out) both; - } -} - -.card-inner { - height: 100%; - padding: var(--s-lg); - background: var(--c-paper); - border: 1px solid var(--c-mist); - display: flex; - flex-direction: column; - gap: var(--s-md); - transition: all var(--duration-base) var(--ease-out); - position: relative; - overflow: hidden; - - &::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 2px; - background: var(--c-accent); - transform: translateX(-100%); - transition: transform 0.4s var(--ease-out); - } - - &:hover { - border-color: var(--c-accent); - transform: translateY(-4px); - - &::before { - transform: translateX(0); - } - } -} - -.card-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - gap: var(--s-md); - - h3 { - font-size: 1.375rem; - font-weight: 500; - margin: 0; - } -} - -.badge { - font-size: 0.625rem; - text-transform: uppercase; - letter-spacing: 0.1em; - padding: 0.25em 0.625em; - border: 1px solid var(--c-accent); - color: var(--c-accent); - border-radius: 2px; - font-weight: 600; - white-space: nowrap; -} - -.card-inner p { - color: var(--c-ash); - font-size: 0.9375rem; - line-height: 1.6; - flex-grow: 1; - margin: 0; -} - -/* Contribute Section */ -.contribute { - padding: var(--s-2xl) 0; - text-align: center; -} - -.contribute-content { - max-width: 480px; - margin: 0 auto; -} - -.contribute h2 { - font-size: 2rem; - font-weight: 600; - margin-bottom: var(--s-sm); -} - -.contribute p { - font-size: 1.125rem; - color: var(--c-ash); - margin-bottom: var(--s-lg); - line-height: 1.6; -} diff --git a/public/css/footer.css b/public/css/footer.css deleted file mode 100644 index 939e279ab..000000000 --- a/public/css/footer.css +++ /dev/null @@ -1,65 +0,0 @@ -/* Footer & Contribute Section */ - -.contribute { - padding: var(--s-2xl) 0; - border-top: 1px solid var(--c-mist); - text-align: center; -} - -.contribute-content { - max-width: var(--content-width); - margin: 0 auto; - display: flex; - flex-direction: column; - align-items: center; - gap: var(--s-md); - - h2 { - font-size: clamp(2rem, 4vw, 3rem); - font-weight: 600; - } - - p { - font-size: 1.125rem; - color: var(--c-ash); - max-width: 42ch; - } -} - -footer { - border-top: 1px solid var(--c-mist); - padding: var(--s-2xl) var(--s-lg); - background: var(--c-paper); -} - -.footer-content { - max-width: var(--max-width); - margin: 0 auto; - display: flex; - justify-content: space-between; - align-items: center; - font-size: 0.875rem; - color: var(--c-ash); - - a { - color: var(--c-ink); - text-decoration: underline; - text-underline-offset: 0.2em; - } - - @media (max-width: 768px) { - flex-direction: column; - gap: var(--s-sm); - text-align: center; - } -} - -/* Print Styles */ -@media print { - body::before, - .hero-decoration, - .btn { - display: none; - } -} - diff --git a/public/css/gallery.css b/public/css/gallery.css index 6f3b52eb7..c20cd97ea 100644 --- a/public/css/gallery.css +++ b/public/css/gallery.css @@ -10,11 +10,11 @@ } .skill-nav-item { - padding: var(--s-sm) var(--s-md); + padding: var(--spacing-sm) var(--spacing-md); background: transparent; border: none; border-left: 2px solid transparent; - color: var(--c-ash); + color: var(--color-ash); font-family: var(--font-body); font-size: 0.9375rem; font-weight: 400; @@ -26,14 +26,14 @@ } .skill-nav-item:hover { - color: var(--c-text); - background: color-mix(in oklch, var(--c-paper) 85%, var(--c-accent)); + color: var(--color-text); + background: color-mix(in oklch, var(--color-paper) 85%, var(--color-accent)); } .skill-nav-item.active { - color: var(--c-accent); - border-left-color: var(--c-accent); - background: color-mix(in oklch, var(--c-accent) 5%, var(--c-paper)); + color: var(--color-accent); + border-left-color: var(--color-accent); + background: color-mix(in oklch, var(--color-accent) 5%, var(--color-paper)); font-weight: 500; } @@ -41,17 +41,17 @@ .skills-nav { flex-direction: row; flex-wrap: wrap; - gap: var(--s-xs); + gap: var(--spacing-xs); } .skill-nav-item { border-left: none; border-bottom: 2px solid transparent; - padding: var(--s-xs) var(--s-md); + padding: var(--spacing-xs) var(--spacing-md); } .skill-nav-item.active { - border-bottom-color: var(--c-accent); + border-bottom-color: var(--color-accent); } } @@ -59,7 +59,7 @@ .skills-showcase { display: grid; grid-template-columns: 1.2fr 1fr; - gap: var(--s-lg); + gap: var(--spacing-lg); align-items: start; @media (max-width: 1100px) { @@ -86,7 +86,7 @@ } .skill-header { - margin-bottom: var(--s-md); + margin-bottom: var(--spacing-md); } .skill-header h3 { @@ -94,17 +94,17 @@ font-size: 1.75rem; font-weight: 300; font-style: italic; - margin: 0 0 var(--s-xs) 0; - color: var(--c-text); + margin: 0 0 var(--spacing-xs) 0; + color: var(--color-text); letter-spacing: -0.02em; line-height: 1.1; } .skill-header .meta { display: flex; - gap: var(--s-sm); + gap: var(--spacing-sm); align-items: center; - color: var(--c-ash); + color: var(--color-ash); font-size: 0.8125rem; font-weight: 400; letter-spacing: 0.03em; @@ -112,7 +112,7 @@ } .skill-header .meta a { - color: var(--c-accent); + color: var(--color-accent); text-decoration: none; transition: opacity 0.2s ease; } @@ -124,22 +124,22 @@ .skill-description { font-size: 0.9375rem; line-height: 1.6; - margin-bottom: var(--s-md); - color: var(--c-charcoal); + margin-bottom: var(--spacing-md); + color: var(--color-charcoal); max-width: 50ch; } /* Skill Sections (Focus Areas, Relationships) */ .skill-section { - margin-bottom: var(--s-lg); + margin-bottom: var(--spacing-lg); } .skill-section h4 { font-family: var(--font-body); font-size: 0.75rem; font-weight: 600; - margin: 0 0 var(--s-sm) 0; - color: var(--c-ash); + margin: 0 0 var(--spacing-sm) 0; + color: var(--color-ash); text-transform: uppercase; letter-spacing: 0.1em; } @@ -148,26 +148,26 @@ .focus-areas-compact { display: flex; flex-wrap: wrap; - gap: var(--s-xs); + gap: var(--spacing-xs); } .focus-area-tag { display: inline-flex; align-items: center; - gap: var(--s-xs); - padding: var(--s-xs) var(--s-sm); - background: var(--c-paper); + gap: var(--spacing-xs); + padding: var(--spacing-xs) var(--spacing-sm); + background: var(--color-paper); border-radius: 3px; font-size: 0.8125rem; } .focus-area-tag strong { - color: var(--c-text); + color: var(--color-text); font-weight: 500; } .focus-area-tag span { - color: var(--c-ash); + color: var(--color-ash); font-size: 0.75rem; } @@ -175,15 +175,15 @@ .relationship-tags { display: flex; flex-wrap: wrap; - gap: var(--s-xs); + gap: var(--spacing-xs); } .relationship-tag { display: inline-block; - padding: var(--s-xs) var(--s-sm); - background: var(--c-paper); - color: var(--c-text); - border: 1px solid color-mix(in oklch, var(--c-accent) 30%, transparent); + padding: var(--spacing-xs) var(--spacing-sm); + background: var(--color-paper); + color: var(--color-text); + border: 1px solid color-mix(in oklch, var(--color-accent) 30%, transparent); font-size: 0.8125rem; font-weight: 400; border-radius: 2px; @@ -192,36 +192,36 @@ } .relationship-tag:hover { - border-color: var(--c-accent); - color: var(--c-accent); - background: color-mix(in oklch, var(--c-accent) 5%, var(--c-paper)); + border-color: var(--color-accent); + color: var(--color-accent); + background: color-mix(in oklch, var(--color-accent) 5%, var(--color-paper)); } /* Skill Downloads (Icons) */ .skill-downloads { display: flex; align-items: center; - gap: var(--s-sm); - padding-top: var(--s-md); - margin-top: var(--s-md); - border-top: 1px solid var(--c-mist); + gap: var(--spacing-sm); + padding-top: var(--spacing-md); + margin-top: var(--spacing-md); + border-top: 1px solid var(--color-mist); } .downloads-label { font-size: 0.75rem; - color: var(--c-ash); - margin-right: var(--s-xs); + color: var(--color-ash); + margin-right: var(--spacing-xs); } .download-icon { display: flex; align-items: center; - gap: var(--s-xs); + gap: var(--spacing-xs); padding: 6px 10px; border-radius: 4px; background: transparent; - border: 1px solid var(--c-mist); - color: var(--c-ash); + border: 1px solid var(--color-mist); + color: var(--color-ash); text-decoration: none; font-size: 0.75rem; transition: all 0.15s ease; @@ -234,16 +234,16 @@ } .download-icon:hover { - color: var(--c-accent); - border-color: var(--c-accent); - background: color-mix(in oklch, var(--c-accent) 5%, transparent); + color: var(--color-accent); + border-color: var(--color-accent); + background: color-mix(in oklch, var(--color-accent) 5%, transparent); } /* Command Detail Panel - mirrors skills showcase */ .command-detail-panel { display: grid; grid-template-columns: 1.2fr 1fr; - gap: var(--s-lg); + gap: var(--spacing-lg); align-items: start; @media (max-width: 1100px) { @@ -263,15 +263,15 @@ font-family: 'Space Grotesk', monospace; font-size: 2rem; font-weight: 500; - margin: 0 0 var(--s-xs) 0; - color: var(--c-text); + margin: 0 0 var(--spacing-xs) 0; + color: var(--color-text); } .command-header .meta { display: flex; - gap: var(--s-sm); + gap: var(--spacing-sm); align-items: center; - color: var(--c-ash); + color: var(--color-ash); font-size: 0.8125rem; text-transform: uppercase; letter-spacing: 0.03em; @@ -280,24 +280,24 @@ .command-description { font-size: 1rem; line-height: 1.7; - color: var(--c-charcoal); - margin-bottom: var(--s-lg); + color: var(--color-charcoal); + margin-bottom: var(--spacing-lg); } /* Process Steps - Compact */ .process-steps-compact { display: flex; flex-wrap: wrap; - gap: var(--s-sm); + gap: var(--spacing-sm); counter-reset: step; } .process-step-compact { display: flex; align-items: center; - gap: var(--s-xs); - padding: var(--s-xs) var(--s-sm); - background: var(--c-paper); + gap: var(--spacing-xs); + padding: var(--spacing-xs) var(--spacing-sm); + background: var(--color-paper); border-radius: 3px; font-size: 0.8125rem; } @@ -310,8 +310,8 @@ justify-content: center; width: 20px; height: 20px; - background: var(--c-accent); - color: var(--c-paper); + background: var(--color-accent); + color: var(--color-paper); border-radius: 50%; font-size: 0.6875rem; font-weight: 600; @@ -331,10 +331,10 @@ text-transform: uppercase; letter-spacing: 0.05em; padding: 2px 5px; - background: var(--c-mist); - color: var(--c-ash); + background: var(--color-mist); + color: var(--color-ash); border-radius: 2px; - margin-left: var(--s-xs); + margin-left: var(--spacing-xs); vertical-align: middle; } @@ -344,13 +344,13 @@ align-items: center; justify-content: center; text-align: center; - padding: var(--s-2xl); + padding: var(--spacing-2xl); min-height: 300px; } .coming-soon-icon { - color: var(--c-mist); - margin-bottom: var(--s-lg); + color: var(--color-mist); + margin-bottom: var(--spacing-lg); } .coming-soon-showcase h3 { @@ -358,20 +358,20 @@ font-size: 1.75rem; font-weight: 300; font-style: italic; - margin: 0 0 var(--s-sm) 0; - color: var(--c-text); + margin: 0 0 var(--spacing-sm) 0; + color: var(--color-text); } .coming-soon-text { font-size: 1rem; - color: var(--c-accent); + color: var(--color-accent); font-weight: 500; - margin-bottom: var(--s-md); + margin-bottom: var(--spacing-md); } .coming-soon-showcase .skill-description { max-width: 50ch; - color: var(--c-ash); + color: var(--color-ash); font-size: 0.9375rem; line-height: 1.6; } diff --git a/public/css/hero.css b/public/css/hero.css deleted file mode 100644 index d6aaa5bb9..000000000 --- a/public/css/hero.css +++ /dev/null @@ -1,119 +0,0 @@ -/* Hero Section */ - -.hero { - min-height: 85vh; - display: flex; - align-items: center; - position: relative; - padding: var(--s-2xl) var(--s-lg); - overflow: hidden; -} - -.hero-grid { - max-width: var(--max-width); - margin: 0 auto; - display: grid; - grid-template-columns: 1fr auto; - gap: var(--s-2xl); - align-items: center; - width: 100%; - position: relative; -} - -.hero-content { - animation: slideInLeft var(--duration-slower) var(--ease-out) 0.1s both; -} - -/* Title Styling */ -.title { - font-size: clamp(3rem, 8vw, 7rem); - font-weight: 300; - line-height: 0.9; - margin-bottom: var(--s-lg); - display: flex; - flex-direction: column; - gap: -0.1em; -} - -.title-main { - font-weight: 400; - letter-spacing: -0.03em; -} - -.title-sub { - font-weight: 300; - font-style: italic; - color: var(--c-accent); - letter-spacing: -0.02em; -} - -/* Tagline & Providers */ -.tagline { - font-size: clamp(1.125rem, 2vw, 1.5rem); - line-height: 1.4; - color: var(--c-charcoal); - margin-bottom: var(--s-md); - max-width: 32ch; -} - -.providers { - font-size: 0.875rem; - color: var(--c-ash); - text-transform: uppercase; - letter-spacing: 0.08em; - font-weight: 500; -} - -/* Decorative Elements */ -.hero-decoration { - width: 240px; - height: 240px; - position: relative; - animation: slideInRight var(--duration-slower) var(--ease-out) 0.3s both; -} - -.deco-line { - position: absolute; - width: 160px; - height: 2px; - background: var(--c-accent); - top: 50%; - left: 50%; - transform: translate(-50%, -50%) rotate(-25deg); - animation: expandLine 1s var(--ease-out) 0.6s both; -} - -.deco-circle { - position: absolute; - width: 120px; - height: 120px; - border: 2px solid var(--c-accent); - border-radius: 50%; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - animation: drawCircle 1s var(--ease-out) 0.8s both; - opacity: 0.3; -} - -/* Hero Responsive */ -@media (max-width: 768px) { - .hero { - min-height: 70vh; - padding: var(--s-xl) var(--s-md); - } - - .hero-grid { - grid-template-columns: 1fr; - gap: var(--s-xl); - } - - .hero-decoration { - display: none; - } - - .title { - font-size: clamp(2.5rem, 12vw, 4rem); - } -} - diff --git a/public/css/intro.css b/public/css/intro.css deleted file mode 100644 index 1ea6e82de..000000000 --- a/public/css/intro.css +++ /dev/null @@ -1,64 +0,0 @@ -/* Intro Section */ - -.intro { - padding: var(--s-2xl) 0; -} - -.intro-grid { - display: grid; - grid-template-columns: 2fr 1fr; - gap: var(--s-2xl); - align-items: start; - - @media (max-width: 768px) { - grid-template-columns: 1fr; - gap: var(--s-xl); - } -} - -.intro-content h2 { - font-size: clamp(1.75rem, 3vw, 2.5rem); - font-weight: 400; - line-height: 1.3; - color: var(--c-charcoal); -} - -/* Meta Statistics */ -.intro-meta { - display: flex; - flex-direction: column; - gap: var(--s-lg); - padding-top: var(--s-md); - - @media (max-width: 768px) { - flex-direction: row; - justify-content: space-between; - } -} - -.meta-item { - display: flex; - flex-direction: column; - gap: var(--s-xs); -} - -.meta-number { - font-family: var(--font-display); - font-size: 3rem; - font-weight: 600; - line-height: 1; - color: var(--c-accent); - - @media (max-width: 480px) { - font-size: 2.5rem; - } -} - -.meta-label { - font-size: 0.875rem; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--c-ash); - font-weight: 500; -} - diff --git a/public/css/layout.css b/public/css/layout.css deleted file mode 100644 index 1da3ee5ba..000000000 --- a/public/css/layout.css +++ /dev/null @@ -1,160 +0,0 @@ -/* Layout Components */ - -.container { - max-width: var(--max-width); - margin: 0 auto; - padding: 0 var(--s-lg); - - @media (max-width: 640px) { - padding: 0 var(--s-md); - } -} - -/* Section Styling */ -section { - border-top: 1px solid var(--c-mist); -} - -.section-title { - font-size: clamp(2rem, 4vw, 3rem); - font-weight: 600; - margin-bottom: 0; - padding-bottom: var(--s-sm); - position: relative; - display: block; - - &::after { - content: ''; - position: absolute; - bottom: -0.25em; - left: 0; - width: 80px; - height: 2px; - background: var(--c-accent); - } - - @media (max-width: 968px) { - margin-bottom: var(--s-lg); - } -} - -.section-subtitle { - font-size: 1.125rem; - color: var(--c-ash); - margin-top: var(--s-md); - max-width: 50ch; -} - -/* Section Headers */ -.section-header-sticky { - margin-bottom: var(--s-lg); - - .section-title { - margin-bottom: var(--s-sm); - } - - .section-subtitle { - margin-top: var(--s-sm); - } -} - -/* Skills Section Layout */ -.skills-section { - padding: var(--s-xl) 0; -} - -.skills-layout { - display: grid; - grid-template-columns: 180px 1fr; - gap: var(--s-lg); - align-items: start; - - @media (max-width: 968px) { - grid-template-columns: 1fr; - gap: var(--s-md); - } -} - -.skills-nav { - display: flex; - flex-direction: column; - gap: 2px; - - @media (max-width: 968px) { - flex-direction: row; - flex-wrap: wrap; - gap: var(--s-xs); - } -} - -.skills-showcase { - /* Contain the showcase to prevent excessive scrolling */ -} - -/* Commands Section Layout - mirrors skills layout */ -.commands-section { - padding: var(--s-xl) 0; -} - -.commands-layout { - display: grid; - grid-template-columns: 180px 1fr; - gap: var(--s-lg); - align-items: start; - - @media (max-width: 968px) { - grid-template-columns: 1fr; - gap: var(--s-md); - } -} - -.commands-nav { - display: flex; - flex-direction: column; - gap: var(--s-sm); - - @media (max-width: 968px) { - flex-direction: row; - flex-wrap: wrap; - gap: var(--s-xs); - } -} - -.commands-showcase { - /* Contains demo + info */ -} - -/* Downloads Section */ -.downloads-section { - padding: var(--s-2xl) 0; -} - -.downloads-header { - margin-bottom: var(--s-xl); - max-width: 600px; -} - -.downloads-header .section-title { - margin-bottom: var(--s-md); -} - -.downloads-lead { - font-size: 1.125rem; - line-height: 1.6; - color: var(--c-ash); -} - -/* Grid Utilities */ -.item-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); - gap: var(--s-md); -} - -/* Loading State */ -.loading { - padding: var(--s-xl); - text-align: center; - color: var(--c-ash); - font-style: italic; -} diff --git a/public/css/main.css b/public/css/main.css index ad9c890c7..8f57a0d33 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -1,29 +1,377 @@ /* - * impeccable.style — Modular CSS Architecture + * impeccable.style — Tailwind CSS v4 + Custom Components * - * Uses Bun's CSS bundler for: - * - CSS nesting (no preprocessor needed) - * - OKLCH colors with automatic fallbacks - * - Automatic bundling via @import - * - * Structure: - * - tokens.css: Design system (colors, spacing, typography) - * - reset.css: Modern baseline - * - animations.css: Keyframes & utilities - * - layout.css: Grid & section primitives - * - hero/intro/buttons/cards/footer.css: Component styles + * Architecture: + * - Tailwind v4 with custom theme tokens + * - Custom components for complex UI patterns + * - Minimal CSS for what Tailwind can't express */ -@import "./tokens.css"; -@import "./reset.css"; -@import "./animations.css"; -@import "./layout.css"; -@import "./hero.css"; -@import "./buttons.css"; -@import "./cards.css"; -@import "./gallery.css"; +@import "tailwindcss"; + +/* ============================================ + TAILWIND THEME - Static Design Tokens + ============================================ */ + +@theme { + /* Typography */ + --font-display: 'Cormorant Garamond', Georgia, serif; + --font-body: 'Instrument Sans', system-ui, sans-serif; + --font-mono: 'Space Grotesk', monospace; + + /* Spacing Scale */ + --spacing-xs: 8px; + --spacing-sm: 16px; + --spacing-md: 24px; + --spacing-lg: 48px; + --spacing-xl: 80px; + --spacing-2xl: 128px; + --spacing-3xl: 192px; + + /* Width */ + --width-max: 1280px; + --width-content: 840px; + + /* Animation */ + --ease-out: cubic-bezier(0.16, 1, 0.3, 1); + --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); + --duration-fast: 0.2s; + --duration-base: 0.3s; + --duration-slow: 0.6s; + --duration-slower: 0.8s; + --duration-slowest: 1.2s; +} + +/* ============================================ + COLOR TOKENS - Light/Dark Mode via CSS + ============================================ */ + +:root { + /* Colors - Light Mode */ + --color-ink: oklch(10% 0 0); + --color-text: oklch(10% 0 0); + --color-paper: oklch(98% 0 0); + --color-charcoal: oklch(25% 0 0); + --color-ash: oklch(55% 0 0); + --color-mist: oklch(92% 0 0); + --color-bg: oklch(96% 0.005 350); + --color-accent: oklch(60% 0.25 350); + --color-accent-hover: oklch(52% 0.25 350); + --color-accent-dim: oklch(60% 0.25 350 / 0.15); +} + +/* Dark Mode */ +@media (prefers-color-scheme: dark) { + :root { + --color-ink: oklch(98% 0 0); + --color-text: oklch(98% 0 0); + --color-paper: oklch(10% 0 0); + --color-charcoal: oklch(92% 0 0); + --color-ash: oklch(65% 0 0); + --color-mist: oklch(20% 0 0); + --color-bg: oklch(12% 0.005 350); + --color-accent: oklch(68% 0.23 350); + --color-accent-hover: oklch(76% 0.23 350); + } +} + +/* ============================================ + BASE STYLES + ============================================ */ + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +body { + font-family: var(--font-body); + color: var(--color-ink); + background: var(--color-paper); +} + +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-display); + font-weight: 600; + line-height: 1.1; + letter-spacing: -0.02em; +} + +a { + color: var(--color-accent); + text-decoration: none; + transition: opacity var(--duration-fast) var(--ease-out); +} + +a:hover { + opacity: 0.7; +} + +/* ============================================ + SECTION TITLE - With accent underline + ============================================ */ + +.section-title { + font-size: clamp(2rem, 4vw, 3rem); + font-weight: 600; + position: relative; + display: block; + padding-bottom: var(--spacing-sm); +} + +.section-title::after { + content: ''; + position: absolute; + bottom: -0.25em; + left: 0; + width: 80px; + height: 2px; + background: var(--color-accent); +} + +/* ============================================ + BACKGROUND ATMOSPHERE + ============================================ */ + +body::before { + content: ''; + position: fixed; + inset: 0; + background: + radial-gradient(circle at 20% 30%, var(--color-accent-dim) 0%, transparent 50%), + radial-gradient(circle at 80% 70%, var(--color-accent-dim) 0%, transparent 50%); + opacity: 0; + z-index: -1; + animation: fadeInBg var(--duration-slowest) var(--ease-out) 0.3s forwards; + pointer-events: none; +} + +/* ============================================ + HERO DECORATIONS + ============================================ */ + +.deco-line { + position: absolute; + width: 160px; + height: 2px; + background: var(--color-accent); + top: 50%; + left: 50%; + transform: translate(-50%, -50%) rotate(-25deg); + animation: expandLine 1s var(--ease-out) 0.6s both; +} + +.deco-circle { + position: absolute; + width: 120px; + height: 120px; + border: 2px solid var(--color-accent); + border-radius: 50%; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + animation: drawCircle 1s var(--ease-out) 0.8s both; + opacity: 0.3; +} + +/* ============================================ + BUTTONS + ============================================ */ + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.875rem 2rem; + font-family: var(--font-body); + font-size: 0.9375rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + border: none; + cursor: pointer; + transition: all var(--duration-base) var(--ease-out); + position: relative; + overflow: hidden; + text-decoration: none; +} + +.btn-primary { + background: var(--color-accent); + color: var(--color-paper); + width: 100%; + position: relative; + z-index: 1; +} + +.btn-primary::before { + content: ''; + position: absolute; + inset: 0; + background: var(--color-ink); + transform: translateY(100%); + transition: transform var(--duration-base) var(--ease-out); + z-index: -1; +} + +.btn-primary:hover::before { + transform: translateY(0); +} + +.btn-secondary { + background: transparent; + color: var(--color-ink); + border: 1px solid var(--color-ink); +} + +.btn-secondary:hover { + background: var(--color-ink); + color: var(--color-paper); +} + +/* ============================================ + CARD COMPONENTS + ============================================ */ + +.card-inner { + height: 100%; + padding: var(--spacing-lg); + background: var(--color-paper); + border: 1px solid var(--color-mist); + display: flex; + flex-direction: column; + gap: var(--spacing-md); + transition: all var(--duration-base) var(--ease-out); + position: relative; + overflow: hidden; +} + +.card-inner::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + background: var(--color-accent); + transform: translateX(-100%); + transition: transform 0.4s var(--ease-out); +} + +.card-inner:hover { + border-color: var(--color-accent); + transform: translateY(-4px); +} + +.card-inner:hover::before { + transform: translateX(0); +} + +.badge { + font-size: 0.625rem; + text-transform: uppercase; + letter-spacing: 0.1em; + padding: 0.25em 0.625em; + border: 1px solid var(--color-accent); + color: var(--color-accent); + border-radius: 2px; + font-weight: 600; + white-space: nowrap; +} + +/* ============================================ + SOLUTION CARDS + ============================================ */ + +.solution-card { + padding: var(--spacing-lg); + background: var(--color-paper); + border-left: 3px solid var(--color-accent); + transition: all var(--duration-base) var(--ease-out); +} + +.solution-card:hover { + background: color-mix(in oklch, var(--color-paper) 90%, var(--color-accent)); + transform: translateX(4px); +} + +.solution-card code { + font-family: var(--font-mono); + font-size: 0.875em; + background: color-mix(in oklch, var(--color-accent) 15%, transparent); + color: var(--color-accent); + padding: 0.125em 0.375em; + border-radius: 3px; +} + +/* ============================================ + ANIMATIONS + ============================================ */ + +@keyframes fadeInBg { + to { opacity: 1; } +} + +@keyframes slideInLeft { + from { + opacity: 0; + transform: translateX(-40px); + } +} + +@keyframes slideInRight { + from { + opacity: 0; + transform: translateX(40px); + } +} + +@keyframes fadeInUp { + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes expandLine { + from { width: 0; } +} + +@keyframes drawCircle { + from { + opacity: 0; + scale: 0; + } + to { + opacity: 1; + scale: 1; + } +} + +[data-animate] { + opacity: 0; + transform: translateY(20px); +} + +[data-animate].animated { + animation: fadeInUp var(--duration-slow) var(--ease-out) both; +} + +/* Hero animations */ +.hero-content { + animation: slideInLeft var(--duration-slower) var(--ease-out) 0.1s both; +} + +.hero-decoration { + animation: slideInRight var(--duration-slower) var(--ease-out) 0.3s both; +} + +/* ============================================ + IMPORTS - Complex components that need custom CSS + ============================================ */ + @import "./problem-section.css"; -@import "./solution-section.css"; @import "./skill-demos.css"; +@import "./gallery.css"; @import "./workflow.css"; -@import "./footer.css"; diff --git a/public/css/problem-section.css b/public/css/problem-section.css index 9149e44a5..e33dd5724 100644 --- a/public/css/problem-section.css +++ b/public/css/problem-section.css @@ -4,19 +4,19 @@ */ .problem-section { - padding: var(--s-2xl) 0; - border-top: 1px solid var(--c-mist); + padding: var(--spacing-2xl) 0; + border-top: 1px solid var(--color-mist); } .problem-grid { display: grid; grid-template-columns: 1fr 1fr; - gap: var(--s-2xl); + gap: var(--spacing-2xl); align-items: center; @media (max-width: 968px) { grid-template-columns: 1fr; - gap: var(--s-xl); + gap: var(--spacing-xl); } } @@ -25,13 +25,13 @@ } .problem-content .section-title { - margin-bottom: var(--s-md); + margin-bottom: var(--spacing-md); } .problem-lead { font-size: 1.25rem; line-height: 1.6; - color: var(--c-charcoal); + color: var(--color-charcoal); } /* AI Slop Demo - Deliberately generic design */ @@ -124,10 +124,10 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; - color: var(--c-accent); - background: var(--c-paper); + color: var(--color-accent); + background: var(--color-paper); padding: 4px 8px; - border: 1px solid var(--c-accent); + border: 1px solid var(--color-accent); border-radius: 2px; white-space: nowrap; opacity: 0; diff --git a/public/css/reset.css b/public/css/reset.css deleted file mode 100644 index 0eea8f9c1..000000000 --- a/public/css/reset.css +++ /dev/null @@ -1,71 +0,0 @@ -/* Modern CSS Reset */ - -*, -*::before, -*::after { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html { - font-size: 16px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-rendering: optimizeLegibility; -} - -body { - font-family: var(--font-body); - font-weight: 400; - font-size: 1rem; - line-height: 1.6; - color: var(--c-ink); - background: var(--c-paper); - overflow-x: hidden; - min-height: 100vh; -} - -/* Typography Defaults */ -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: var(--font-display); - font-weight: 600; - line-height: 1.1; - letter-spacing: -0.02em; -} - -p { - max-width: 65ch; -} - -a { - color: var(--c-accent); - text-decoration: none; - transition: opacity var(--duration-fast) var(--ease-out); - - &:hover { - opacity: 0.7; - } -} - -/* Better image defaults */ -img, -picture, -video, -canvas, -svg { - display: block; - max-width: 100%; -} - -/* Remove default button styles */ -button { - font: inherit; - cursor: pointer; -} - diff --git a/public/css/skill-demos.css b/public/css/skill-demos.css index 4eb08022b..21a335678 100644 --- a/public/css/skill-demos.css +++ b/public/css/skill-demos.css @@ -14,30 +14,30 @@ .demo-tabs { display: flex; gap: 2px; - margin-bottom: var(--s-sm); + margin-bottom: var(--spacing-sm); justify-content: center; } .demo-tab { - padding: var(--s-xs) var(--s-md); + padding: var(--spacing-xs) var(--spacing-md); background: transparent; border: none; border-bottom: 2px solid transparent; font-family: var(--font-body); font-size: 0.8125rem; font-weight: 400; - color: var(--c-ash); + color: var(--color-ash); cursor: pointer; transition: all 0.15s ease; } .demo-tab:hover { - color: var(--c-text); + color: var(--color-text); } .demo-tab.active { - color: var(--c-accent); - border-bottom-color: var(--c-accent); + color: var(--color-accent); + border-bottom-color: var(--color-accent); font-weight: 500; } @@ -58,8 +58,8 @@ ============================================ */ .demo-container { - background: var(--c-paper); - border: 1px solid var(--c-mist); + background: var(--color-paper); + border: 1px solid var(--color-mist); border-radius: 6px; overflow: hidden; } @@ -68,16 +68,16 @@ display: flex; align-items: center; justify-content: flex-end; - padding: var(--s-xs) var(--s-md); - background: var(--c-bg); - border-bottom: 1px solid var(--c-mist); + padding: var(--spacing-xs) var(--spacing-md); + background: var(--color-bg); + border-bottom: 1px solid var(--color-mist); min-height: 40px; } .demo-toggle { display: flex; align-items: center; - gap: var(--s-sm); + gap: var(--spacing-sm); } .demo-toggle-label { @@ -85,19 +85,19 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; - color: var(--c-ash); + color: var(--color-ash); transition: color 0.15s ease; } .demo-toggle-label.active { - color: var(--c-accent); + color: var(--color-accent); } .demo-toggle-switch { position: relative; width: 36px; height: 20px; - background: var(--c-mist); + background: var(--color-mist); border-radius: 10px; cursor: pointer; transition: background 0.15s ease; @@ -110,14 +110,14 @@ left: 2px; width: 16px; height: 16px; - background: var(--c-paper); + background: var(--color-paper); border-radius: 50%; box-shadow: 0 1px 3px rgba(0,0,0,0.2); transition: transform 0.15s ease; } .demo-toggle-switch.active { - background: var(--c-accent); + background: var(--color-accent); } .demo-toggle-switch.active::after { @@ -125,20 +125,20 @@ } .demo-viewport { - padding: var(--s-lg); + padding: var(--spacing-lg); display: flex; align-items: center; justify-content: center; min-height: 200px; - background: var(--c-bg); + background: var(--color-bg); } .demo-caption { - padding: var(--s-xs) var(--s-md); + padding: var(--spacing-xs) var(--spacing-md); font-size: 0.75rem; - color: var(--c-ash); - border-top: 1px solid var(--c-mist); - background: var(--c-bg); + color: var(--color-ash); + border-top: 1px solid var(--color-mist); + background: var(--color-bg); text-align: center; } @@ -149,39 +149,39 @@ .uxw-demo { width: 100%; max-width: 320px; - padding: var(--s-lg); - background: var(--c-paper); - border: 1px solid var(--c-mist); + padding: var(--spacing-lg); + background: var(--color-paper); + border: 1px solid var(--color-mist); border-radius: 6px; text-align: center; } /* Error Messages */ -.uxw-error-icon { font-size: 2rem; margin-bottom: var(--s-sm); } -.uxw-error-title { font-weight: 600; color: #c00; margin-bottom: var(--s-xs); } -.uxw-error-text { font-size: 0.875rem; color: var(--c-ash); } -.uxw-error-action { margin-top: var(--s-sm); font-size: 0.875rem; color: var(--c-accent); cursor: pointer; text-decoration: underline; } +.uxw-error-icon { font-size: 2rem; margin-bottom: var(--spacing-sm); } +.uxw-error-title { font-weight: 600; color: #c00; margin-bottom: var(--spacing-xs); } +.uxw-error-text { font-size: 0.875rem; color: var(--color-ash); } +.uxw-error-action { margin-top: var(--spacing-sm); font-size: 0.875rem; color: var(--color-accent); cursor: pointer; text-decoration: underline; } -.uxw-error-after .uxw-error-icon { color: var(--c-accent); } -.uxw-error-after .uxw-error-title { color: var(--c-text); } -.uxw-error-after .uxw-error-text { color: var(--c-charcoal); } +.uxw-error-after .uxw-error-icon { color: var(--color-accent); } +.uxw-error-after .uxw-error-title { color: var(--color-text); } +.uxw-error-after .uxw-error-text { color: var(--color-charcoal); } /* Button Labels */ -.uxw-button-context { font-size: 0.875rem; color: var(--c-charcoal); margin-bottom: var(--s-md); font-weight: 500; } -.uxw-button-row { display: flex; gap: var(--s-sm); justify-content: center; } -.uxw-btn { padding: var(--s-xs) var(--s-md); border-radius: 4px; font-size: 0.875rem; font-weight: 500; cursor: pointer; border: none; } -.uxw-btn-primary { background: var(--c-text); color: var(--c-paper); } -.uxw-btn-secondary { background: transparent; color: var(--c-ash); border: 1px solid var(--c-mist); } +.uxw-button-context { font-size: 0.875rem; color: var(--color-charcoal); margin-bottom: var(--spacing-md); font-weight: 500; } +.uxw-button-row { display: flex; gap: var(--spacing-sm); justify-content: center; } +.uxw-btn { padding: var(--spacing-xs) var(--spacing-md); border-radius: 4px; font-size: 0.875rem; font-weight: 500; cursor: pointer; border: none; } +.uxw-btn-primary { background: var(--color-text); color: var(--color-paper); } +.uxw-btn-secondary { background: transparent; color: var(--color-ash); border: 1px solid var(--color-mist); } .uxw-btn-danger { background: #c00; color: white; } /* Empty States */ -.uxw-empty-icon { font-size: 2.5rem; margin-bottom: var(--s-sm); opacity: 0.4; } -.uxw-empty-title { font-weight: 500; color: var(--c-ash); } -.uxw-empty-text { font-size: 0.875rem; color: var(--c-charcoal); margin-top: var(--s-xs); } -.uxw-empty-action { margin-top: var(--s-md); } +.uxw-empty-icon { font-size: 2.5rem; margin-bottom: var(--spacing-sm); opacity: 0.4; } +.uxw-empty-title { font-weight: 500; color: var(--color-ash); } +.uxw-empty-text { font-size: 0.875rem; color: var(--color-charcoal); margin-top: var(--spacing-xs); } +.uxw-empty-action { margin-top: var(--spacing-md); } .uxw-empty-after .uxw-empty-icon { opacity: 1; } -.uxw-empty-after .uxw-empty-title { color: var(--c-text); } +.uxw-empty-after .uxw-empty-title { color: var(--color-text); } /* ============================================ SPATIAL DESIGN DEMOS @@ -190,9 +190,9 @@ .spatial-demo { width: 100%; max-width: 340px; - padding: var(--s-md); - background: var(--c-paper); - border: 1px solid var(--c-mist); + padding: var(--spacing-md); + background: var(--color-paper); + border: 1px solid var(--color-mist); border-radius: 6px; } @@ -206,16 +206,16 @@ .spatial-grid-after { display: grid; grid-template-columns: 1fr 1fr; - gap: var(--s-sm); + gap: var(--spacing-sm); } .spatial-card-item { - padding: var(--s-sm); - background: var(--c-bg); - border: 1px solid var(--c-mist); + padding: var(--spacing-sm); + background: var(--color-bg); + border: 1px solid var(--color-mist); border-radius: 4px; font-size: 0.8125rem; - color: var(--c-charcoal); + color: var(--color-charcoal); text-align: center; } @@ -229,8 +229,8 @@ .spatial-hierarchy-before .spatial-h-cta, .spatial-hierarchy-before .spatial-h-link { font-size: 0.9375rem; - margin-bottom: var(--s-xs); - color: var(--c-charcoal); + margin-bottom: var(--spacing-xs); + color: var(--color-charcoal); } .spatial-hierarchy-after .spatial-h-title { @@ -238,52 +238,52 @@ font-size: 1.75rem; font-weight: 300; font-style: italic; - margin-bottom: var(--s-xs); - color: var(--c-text); + margin-bottom: var(--spacing-xs); + color: var(--color-text); } .spatial-hierarchy-after .spatial-h-subtitle { font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.1em; - color: var(--c-ash); - margin-bottom: var(--s-md); + color: var(--color-ash); + margin-bottom: var(--spacing-md); } .spatial-hierarchy-after .spatial-h-cta { display: inline-block; - padding: var(--s-sm) var(--s-lg); - background: var(--c-text); - color: var(--c-paper); + padding: var(--spacing-sm) var(--spacing-lg); + background: var(--color-text); + color: var(--color-paper); font-size: 0.875rem; font-weight: 500; border-radius: 4px; - margin-bottom: var(--s-sm); + margin-bottom: var(--spacing-sm); } .spatial-hierarchy-after .spatial-h-link { font-size: 0.75rem; - color: var(--c-ash); + color: var(--color-ash); } /* Whitespace */ .spatial-whitespace-before { - padding: var(--s-xs) !important; + padding: var(--spacing-xs) !important; } .spatial-whitespace-before .spatial-ws-title { font-size: 1rem; font-weight: 600; margin-bottom: 2px; } -.spatial-whitespace-before .spatial-ws-price { font-size: 0.875rem; color: var(--c-ash); margin-bottom: 4px; } -.spatial-whitespace-before .spatial-ws-features { font-size: 0.75rem; color: var(--c-ash); margin-bottom: 6px; } -.spatial-whitespace-before .spatial-ws-btn { width: 100%; padding: 6px; font-size: 0.75rem; background: var(--c-text); color: var(--c-paper); border: none; border-radius: 3px; cursor: pointer; } +.spatial-whitespace-before .spatial-ws-price { font-size: 0.875rem; color: var(--color-ash); margin-bottom: 4px; } +.spatial-whitespace-before .spatial-ws-features { font-size: 0.75rem; color: var(--color-ash); margin-bottom: 6px; } +.spatial-whitespace-before .spatial-ws-btn { width: 100%; padding: 6px; font-size: 0.75rem; background: var(--color-text); color: var(--color-paper); border: none; border-radius: 3px; cursor: pointer; } .spatial-whitespace-after { - padding: var(--s-lg) !important; + padding: var(--spacing-lg) !important; } -.spatial-whitespace-after .spatial-ws-title { font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; margin-bottom: var(--s-sm); } -.spatial-whitespace-after .spatial-ws-price { font-size: 1.25rem; font-weight: 600; color: var(--c-text); margin-bottom: var(--s-sm); } -.spatial-whitespace-after .spatial-ws-features { font-size: 0.8125rem; color: var(--c-ash); margin-bottom: var(--s-lg); line-height: 1.6; } -.spatial-whitespace-after .spatial-ws-btn { width: 100%; padding: var(--s-sm); font-size: 0.875rem; background: var(--c-text); color: var(--c-paper); border: none; border-radius: 4px; cursor: pointer; font-weight: 500; } +.spatial-whitespace-after .spatial-ws-title { font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; margin-bottom: var(--spacing-sm); } +.spatial-whitespace-after .spatial-ws-price { font-size: 1.25rem; font-weight: 600; color: var(--color-text); margin-bottom: var(--spacing-sm); } +.spatial-whitespace-after .spatial-ws-features { font-size: 0.8125rem; color: var(--color-ash); margin-bottom: var(--spacing-lg); line-height: 1.6; } +.spatial-whitespace-after .spatial-ws-btn { width: 100%; padding: var(--spacing-sm); font-size: 0.875rem; background: var(--color-text); color: var(--color-paper); border: none; border-radius: 4px; cursor: pointer; font-weight: 500; } /* ============================================ MOTION DESIGN DEMOS @@ -293,7 +293,7 @@ display: flex; flex-direction: column; align-items: center; - gap: var(--s-sm); + gap: var(--spacing-sm); width: 100%; max-width: 280px; } @@ -306,19 +306,19 @@ .motion-list-item { display: flex; align-items: center; - gap: var(--s-sm); - padding: var(--s-sm) var(--s-md); - background: var(--c-bg); - border: 1px solid var(--c-mist); + gap: var(--spacing-sm); + padding: var(--spacing-sm) var(--spacing-md); + background: var(--color-bg); + border: 1px solid var(--color-mist); border-radius: 4px; font-size: 0.875rem; - color: var(--c-charcoal); + color: var(--color-charcoal); } .motion-dot { width: 8px; height: 8px; - background: var(--c-accent); + background: var(--color-accent); border-radius: 50%; } @@ -348,13 +348,13 @@ } .motion-btn-before { - background: var(--c-charcoal); - color: var(--c-paper); + background: var(--color-charcoal); + color: var(--color-paper); } .motion-btn-after { - background: var(--c-text); - color: var(--c-paper); + background: var(--color-text); + color: var(--color-paper); transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.2s ease; } @@ -369,24 +369,24 @@ /* State Transitions */ .motion-card { - padding: var(--s-md); - background: var(--c-bg); - border: 1px solid var(--c-mist); + padding: var(--spacing-md); + background: var(--color-bg); + border: 1px solid var(--color-mist); border-radius: 6px; text-align: center; min-width: 140px; } -.motion-card-icon { font-size: 1.5rem; margin-bottom: var(--s-xs); } -.motion-card-text { font-size: 0.8125rem; color: var(--c-charcoal); } +.motion-card-icon { font-size: 1.5rem; margin-bottom: var(--spacing-xs); } +.motion-card-text { font-size: 0.8125rem; color: var(--color-charcoal); } .motion-card-after { transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); } .demo-viewport[data-state="after"] .motion-card-after { - background: color-mix(in oklch, var(--c-accent) 10%, var(--c-paper)); - border-color: var(--c-accent); + background: color-mix(in oklch, var(--color-accent) 10%, var(--color-paper)); + border-color: var(--color-accent); } .demo-viewport[data-state="after"] .motion-card-after .motion-card-icon { @@ -415,13 +415,13 @@ .typo-pairing-before .typo-heading { font-size: 1.5rem; font-weight: 600; - margin-bottom: var(--s-xs); + margin-bottom: var(--spacing-xs); } .typo-pairing-before .typo-body { font-size: 0.9375rem; line-height: 1.5; - color: var(--c-ash); + color: var(--color-ash); } .typo-pairing-after .typo-heading { @@ -430,21 +430,21 @@ font-weight: 300; font-style: italic; letter-spacing: -0.02em; - margin-bottom: var(--s-sm); - color: var(--c-text); + margin-bottom: var(--spacing-sm); + color: var(--color-text); } .typo-pairing-after .typo-body { font-family: var(--font-body); font-size: 0.9375rem; line-height: 1.7; - color: var(--c-charcoal); + color: var(--color-charcoal); } /* Hierarchy */ .typo-hierarchy-before .typo-h1 { font-size: 1.125rem; font-weight: 600; margin-bottom: 4px; } -.typo-hierarchy-before .typo-meta { font-size: 0.9375rem; color: var(--c-ash); margin-bottom: var(--s-xs); } -.typo-hierarchy-before .typo-p { font-size: 0.875rem; line-height: 1.5; color: var(--c-charcoal); } +.typo-hierarchy-before .typo-meta { font-size: 0.9375rem; color: var(--color-ash); margin-bottom: var(--spacing-xs); } +.typo-hierarchy-before .typo-p { font-size: 0.875rem; line-height: 1.5; color: var(--color-charcoal); } .typo-hierarchy-after .typo-h1 { font-family: var(--font-display); @@ -459,14 +459,14 @@ font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.12em; - color: var(--c-accent); - margin-bottom: var(--s-md); + color: var(--color-accent); + margin-bottom: var(--spacing-md); } .typo-hierarchy-after .typo-p { font-size: 0.9375rem; line-height: 1.7; - color: var(--c-ash); + color: var(--color-ash); } /* ============================================ @@ -476,33 +476,33 @@ .int-demo { display: flex; flex-direction: column; - gap: var(--s-md); + gap: var(--spacing-md); width: 100%; max-width: 280px; } /* Button States */ .int-states-demo { - gap: var(--s-lg); + gap: var(--spacing-lg); } .int-state-row { display: flex; align-items: center; - gap: var(--s-md); + gap: var(--spacing-md); } .int-state-label { font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.08em; - color: var(--c-ash); + color: var(--color-ash); width: 40px; } .int-btn { flex: 1; - padding: var(--s-sm) var(--s-md); + padding: var(--spacing-sm) var(--spacing-md); font-size: 0.875rem; font-weight: 500; border-radius: 4px; @@ -510,26 +510,26 @@ } .int-btn-poor { - background: var(--c-charcoal); - color: var(--c-paper); + background: var(--color-charcoal); + color: var(--color-paper); border: none; } .int-btn-good { - background: var(--c-text); - color: var(--c-paper); + background: var(--color-text); + color: var(--color-paper); border: 2px solid transparent; transition: all 0.15s ease; } .int-btn-good:hover { - background: var(--c-charcoal); + background: var(--color-charcoal); } .int-btn-good:focus { outline: none; - border-color: var(--c-accent); - box-shadow: 0 0 0 3px color-mix(in oklch, var(--c-accent) 25%, transparent); + border-color: var(--color-accent); + box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 25%, transparent); } .int-btn-good:active { @@ -538,18 +538,18 @@ /* Affordances */ .int-aff-item { - padding: var(--s-sm) var(--s-md); + padding: var(--spacing-sm) var(--spacing-md); border-radius: 4px; font-size: 0.875rem; cursor: pointer; } .int-aff-poor { - color: var(--c-charcoal); + color: var(--color-charcoal); } .int-aff-good { - color: var(--c-accent); + color: var(--color-accent); text-decoration: underline; text-underline-offset: 2px; } @@ -559,16 +559,16 @@ } .int-affordance-after .int-aff-item { - background: var(--c-bg); - border: 1px solid var(--c-mist); - color: var(--c-accent); + background: var(--color-bg); + border: 1px solid var(--color-mist); + color: var(--color-accent); text-decoration: underline; text-underline-offset: 2px; transition: background 0.15s ease; } .int-affordance-after .int-aff-item:hover { - background: color-mix(in oklch, var(--c-accent) 5%, var(--c-paper)); + background: color-mix(in oklch, var(--color-accent) 5%, var(--color-paper)); } .int-affordance-after .int-aff-item::after { @@ -580,7 +580,7 @@ .int-feedback-after { display: flex; align-items: center; - gap: var(--s-md); + gap: var(--spacing-md); flex-direction: row; } @@ -601,13 +601,13 @@ } .int-fb-silent { - background: var(--c-mist); - color: var(--c-ash); + background: var(--color-mist); + color: var(--color-ash); } .int-fb-active { - background: var(--c-charcoal); - color: var(--c-paper); + background: var(--color-charcoal); + color: var(--color-paper); transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1); } @@ -620,7 +620,7 @@ } .int-fb-active.liked { - background: var(--c-accent); + background: var(--color-accent); animation: heartPop 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); } @@ -630,7 +630,7 @@ .int-fb-label { font-size: 0.875rem; - color: var(--c-charcoal); + color: var(--color-charcoal); } /* ============================================ @@ -647,10 +647,10 @@ .color-palette-after { display: flex; flex-wrap: wrap; - gap: var(--s-xs); - padding: var(--s-md); - background: var(--c-paper); - border: 1px solid var(--c-mist); + gap: var(--spacing-xs); + padding: var(--spacing-md); + background: var(--color-paper); + border: 1px solid var(--color-mist); border-radius: 6px; } @@ -663,10 +663,10 @@ .color-card { width: 100%; - margin-top: var(--s-sm); - padding: var(--s-sm); - background: var(--c-paper); - border: 1px solid var(--c-mist); + margin-top: var(--spacing-sm); + padding: var(--spacing-sm); + background: var(--color-paper); + border: 1px solid var(--color-mist); border-radius: 4px; display: flex; flex-direction: column; @@ -687,18 +687,18 @@ .color-palette-before .card-btn { background: #ffe66d; color: #333; } /* After - Harmonious palette */ -.color-palette-after .swatch-1 { background: var(--c-text); } -.color-palette-after .swatch-2 { background: var(--c-charcoal); } -.color-palette-after .swatch-3 { background: var(--c-ash); } -.color-palette-after .swatch-4 { background: var(--c-mist); } -.color-palette-after .swatch-5 { background: var(--c-accent); } -.color-palette-after .card-title { color: var(--c-text); } -.color-palette-after .card-subtitle { color: var(--c-ash); } -.color-palette-after .card-btn { background: var(--c-accent); color: var(--c-paper); } +.color-palette-after .swatch-1 { background: var(--color-text); } +.color-palette-after .swatch-2 { background: var(--color-charcoal); } +.color-palette-after .swatch-3 { background: var(--color-ash); } +.color-palette-after .swatch-4 { background: var(--color-mist); } +.color-palette-after .swatch-5 { background: var(--color-accent); } +.color-palette-after .card-title { color: var(--color-text); } +.color-palette-after .card-subtitle { color: var(--color-ash); } +.color-palette-after .card-btn { background: var(--color-accent); color: var(--color-paper); } /* Strategic Accent */ .color-accent-card { - padding: var(--s-md); + padding: var(--spacing-md); border-radius: 6px; } @@ -708,27 +708,27 @@ } .color-accent-before .color-accent-title { font-weight: 600; color: #333; margin-bottom: 4px; } -.color-accent-before .color-accent-text { font-size: 0.8125rem; color: #666; margin-bottom: var(--s-sm); } -.color-accent-before .color-accent-btn { width: 100%; padding: var(--s-xs); background: #333; color: white; border: none; border-radius: 4px; font-size: 0.8125rem; cursor: pointer; } +.color-accent-before .color-accent-text { font-size: 0.8125rem; color: #666; margin-bottom: var(--spacing-sm); } +.color-accent-before .color-accent-btn { width: 100%; padding: var(--spacing-xs); background: #333; color: white; border: none; border-radius: 4px; font-size: 0.8125rem; cursor: pointer; } .color-accent-after .color-accent-card { - background: color-mix(in oklch, var(--c-accent) 8%, var(--c-paper)); - border: 1px solid color-mix(in oklch, var(--c-accent) 20%, var(--c-paper)); + background: color-mix(in oklch, var(--color-accent) 8%, var(--color-paper)); + border: 1px solid color-mix(in oklch, var(--color-accent) 20%, var(--color-paper)); } -.color-accent-after .color-accent-title { font-weight: 600; color: var(--c-text); margin-bottom: 4px; } -.color-accent-after .color-accent-text { font-size: 0.8125rem; color: var(--c-ash); margin-bottom: var(--s-sm); } -.color-accent-after .color-accent-btn { width: 100%; padding: var(--s-xs); background: var(--c-accent); color: var(--c-paper); border: none; border-radius: 4px; font-size: 0.8125rem; font-weight: 500; cursor: pointer; } +.color-accent-after .color-accent-title { font-weight: 600; color: var(--color-text); margin-bottom: 4px; } +.color-accent-after .color-accent-text { font-size: 0.8125rem; color: var(--color-ash); margin-bottom: var(--spacing-sm); } +.color-accent-after .color-accent-btn { width: 100%; padding: var(--spacing-xs); background: var(--color-accent); color: var(--color-paper); border: none; border-radius: 4px; font-size: 0.8125rem; font-weight: 500; cursor: pointer; } /* Contrast Ratios */ .color-contrast-static { display: flex; flex-direction: column; - gap: var(--s-sm); + gap: var(--spacing-sm); } .contrast-example { - padding: var(--s-md); + padding: var(--spacing-md); border-radius: 6px; text-align: center; } @@ -739,8 +739,8 @@ } .contrast-pass { - background: var(--c-charcoal); - color: var(--c-paper); + background: var(--color-charcoal); + color: var(--color-paper); } .contrast-badge { @@ -755,7 +755,7 @@ } .contrast-fail .contrast-badge { background: #ddd; } -.contrast-pass .contrast-badge { background: var(--c-accent); color: var(--c-paper); } +.contrast-pass .contrast-badge { background: var(--color-accent); color: var(--color-paper); } .contrast-text { font-size: 1rem; font-weight: 500; margin-bottom: 2px; } .contrast-ratio { font-size: 0.6875rem; opacity: 0.7; } @@ -773,20 +773,20 @@ .resp-touch-demo { display: flex; flex-direction: column; - gap: var(--s-lg); + gap: var(--spacing-lg); } .resp-touch-row { display: flex; align-items: center; - gap: var(--s-md); + gap: var(--spacing-md); } .resp-label { font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.08em; - color: var(--c-ash); + color: var(--color-ash); width: 70px; } @@ -806,36 +806,36 @@ width: 24px; height: 24px; font-size: 0.75rem; - background: var(--c-mist); - color: var(--c-ash); + background: var(--color-mist); + color: var(--color-ash); } .resp-touch-good button { width: 44px; height: 44px; font-size: 1rem; - background: var(--c-text); - color: var(--c-paper); + background: var(--color-text); + color: var(--color-paper); } /* Fluid Layout */ .resp-fluid-demo { - padding: var(--s-md); - background: var(--c-bg); - border: 1px solid var(--c-mist); + padding: var(--spacing-md); + background: var(--color-bg); + border: 1px solid var(--color-mist); border-radius: 6px; } .resp-fluid-container { display: flex; flex-direction: column; - gap: var(--s-md); + gap: var(--spacing-md); } .resp-fluid-fixed, .resp-fluid-adaptive { font-size: 0.75rem; - color: var(--c-ash); + color: var(--color-ash); } .resp-fluid-fixed span, @@ -846,18 +846,18 @@ .resp-fluid-bar { height: 24px; - background: var(--c-mist); + background: var(--color-mist); border-radius: 4px; } .resp-fluid-adaptive .resp-fluid-bar { - background: var(--c-accent); + background: var(--color-accent); } /* Adaptive Content */ .resp-adapt-demo { display: flex; - gap: var(--s-sm); + gap: var(--spacing-sm); align-items: flex-end; } @@ -869,14 +869,14 @@ display: block; margin-top: 4px; font-size: 0.625rem; - color: var(--c-ash); + color: var(--color-ash); text-transform: uppercase; letter-spacing: 0.08em; } .resp-device-screen { - background: var(--c-paper); - border: 2px solid var(--c-mist); + background: var(--color-paper); + border: 2px solid var(--color-mist); border-radius: 4px; padding: 4px; display: flex; @@ -889,7 +889,7 @@ .resp-device-desktop .resp-device-screen { width: 120px; height: 70px; } .resp-block { - background: var(--c-mist); + background: var(--color-mist); border-radius: 2px; } @@ -899,8 +899,8 @@ flex: 1; } -.resp-header { height: 16px; background: var(--c-charcoal); } -.resp-sidebar { width: 30%; background: var(--c-charcoal); } +.resp-header { height: 16px; background: var(--color-charcoal); } +.resp-sidebar { width: 30%; background: var(--color-charcoal); } .resp-content { flex: 1; } /* ============================================ diff --git a/public/css/solution-section.css b/public/css/solution-section.css deleted file mode 100644 index da34d1f9b..000000000 --- a/public/css/solution-section.css +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Solution Section - Skills + Commands explanation - */ - -.solution-section { - padding: var(--s-2xl) 0; - border-top: 1px solid var(--c-mist); -} - -.solution-grid { - display: grid; - grid-template-columns: 1fr; - gap: var(--s-xl); -} - -.solution-content { - max-width: 680px; -} - -.solution-content .section-title { - margin-bottom: var(--s-md); -} - -.solution-lead { - font-size: 1.375rem; - line-height: 1.6; - color: var(--c-charcoal); -} - -.solution-lead strong { - color: var(--c-text); - font-weight: 600; -} - -/* Solution Cards - Side by side */ -.solution-cards { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: var(--s-lg); - - @media (max-width: 640px) { - grid-template-columns: 1fr; - } -} - -.solution-card { - padding: var(--s-lg); - background: var(--c-paper); - border-left: 3px solid var(--c-accent); - transition: all var(--duration-base) var(--ease-out); -} - -.solution-card:hover { - background: color-mix(in oklch, var(--c-paper) 90%, var(--c-accent)); - transform: translateX(4px); -} - -.solution-icon { - width: 48px; - height: 48px; - display: flex; - align-items: center; - justify-content: center; - margin-bottom: var(--s-md); - color: var(--c-accent); -} - -.solution-card h3 { - font-family: var(--font-display); - font-size: 1.75rem; - font-weight: 400; - margin: 0 0 var(--s-sm) 0; - color: var(--c-text); -} - -.solution-card p { - font-size: 1rem; - line-height: 1.6; - color: var(--c-ash); - margin: 0; -} - -.solution-card code { - font-family: 'Space Grotesk', monospace; - font-size: 0.875em; - background: color-mix(in oklch, var(--c-accent) 15%, transparent); - color: var(--c-accent); - padding: 0.125em 0.375em; - border-radius: 3px; -} - -.solution-card em { - font-style: italic; - color: var(--c-charcoal); -} - diff --git a/public/css/tokens.css b/public/css/tokens.css deleted file mode 100644 index 61d6f0fd8..000000000 --- a/public/css/tokens.css +++ /dev/null @@ -1,66 +0,0 @@ -/* Design Tokens — Single Source of Truth */ - -:root { - /* Typography Scale */ - --font-display: 'Cormorant Garamond', Georgia, serif; - --font-body: 'Instrument Sans', system-ui, sans-serif; - - /* Base Colors — Refined Monochrome + Electric Accent */ - --c-ink: oklch(10% 0 0); - --c-paper: oklch(98% 0 0); - --c-charcoal: oklch(25% 0 0); - --c-ash: oklch(55% 0 0); - --c-mist: oklch(92% 0 0); - - /* Semantic aliases for common use */ - --c-text: var(--c-ink); - --c-bg: oklch(96% 0.005 350); /* Very subtle pink tint */ - - /* Accent — Vibrant Electric Pink using OKLCH for perceptual uniformity */ - --c-accent: oklch(60% 0.25 350); - --c-accent-hover: oklch(from var(--c-accent) calc(l - 8%) c h); - --c-accent-dim: color-mix(in oklch, var(--c-accent), transparent 85%); - - /* Spacing Scale — 8px base unit */ - --s-unit: 8px; - --s-xs: calc(var(--s-unit) * 1); /* 8px */ - --s-sm: calc(var(--s-unit) * 2); /* 16px */ - --s-md: calc(var(--s-unit) * 3); /* 24px */ - --s-lg: calc(var(--s-unit) * 6); /* 48px */ - --s-xl: calc(var(--s-unit) * 10); /* 80px */ - --s-2xl: calc(var(--s-unit) * 16); /* 128px */ - --s-3xl: calc(var(--s-unit) * 24); /* 192px */ - - /* Layout Constraints */ - --max-width: 1280px; - --content-width: 840px; - - /* Animation Curves */ - --ease-out: cubic-bezier(0.16, 1, 0.3, 1); - --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); - --duration-fast: 0.2s; - --duration-base: 0.3s; - --duration-slow: 0.6s; - --duration-slower: 0.8s; - --duration-slowest: 1.2s; - - /* Shadows */ - --shadow-sm: 0 1px 2px color-mix(in oklch, var(--c-ink), transparent 90%); - --shadow-md: 0 4px 8px color-mix(in oklch, var(--c-ink), transparent 85%); -} - -/* Dark Mode — Automatic via prefers-color-scheme */ -@media (prefers-color-scheme: dark) { - :root { - --c-ink: oklch(98% 0 0); - --c-paper: oklch(10% 0 0); - --c-charcoal: oklch(92% 0 0); - --c-ash: oklch(65% 0 0); - --c-mist: oklch(20% 0 0); - --c-accent: oklch(68% 0.23 350); - --c-accent-hover: oklch(from var(--c-accent) calc(l + 8%) c h); - --c-text: var(--c-ink); - --c-bg: oklch(12% 0.005 350); - } -} - diff --git a/public/css/workflow.css b/public/css/workflow.css index 76be59c66..357cf9004 100644 --- a/public/css/workflow.css +++ b/public/css/workflow.css @@ -14,7 +14,7 @@ display: flex; flex-direction: column; gap: 2px; - margin-bottom: var(--s-sm); + margin-bottom: var(--spacing-sm); &:last-child { margin-bottom: 0; @@ -26,10 +26,10 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; - color: var(--c-ash); - padding: var(--s-xs) var(--s-md); + color: var(--color-ash); + padding: var(--spacing-xs) var(--spacing-md); margin-bottom: 2px; - margin-top: var(--s-xs); + margin-top: var(--spacing-xs); &:first-child { margin-top: 0; @@ -37,11 +37,11 @@ } .command-nav-item { - padding: var(--s-xs) var(--s-md); + padding: var(--spacing-xs) var(--spacing-md); background: transparent; border: none; border-left: 2px solid transparent; - color: var(--c-ash); + color: var(--color-ash); font-family: 'Space Grotesk', monospace; font-size: 0.875rem; font-weight: 400; @@ -52,14 +52,14 @@ } .command-nav-item:hover { - color: var(--c-text); - background: color-mix(in oklch, var(--c-paper) 85%, var(--c-accent)); + color: var(--color-text); + background: color-mix(in oklch, var(--color-paper) 85%, var(--color-accent)); } .command-nav-item.active { - color: var(--c-accent); - border-left-color: var(--c-accent); - background: color-mix(in oklch, var(--c-accent) 5%, var(--c-paper)); + color: var(--color-accent); + border-left-color: var(--color-accent); + background: color-mix(in oklch, var(--color-accent) 5%, var(--color-paper)); font-weight: 500; } @@ -67,30 +67,30 @@ .commands-nav { flex-direction: row; flex-wrap: wrap; - gap: var(--s-xs); + gap: var(--spacing-xs); } .command-nav-group { flex-direction: row; flex-wrap: wrap; - gap: var(--s-xs); - margin-bottom: var(--s-sm); + gap: var(--spacing-xs); + margin-bottom: var(--spacing-sm); } .command-nav-label { width: 100%; - padding: var(--s-xs) 0; + padding: var(--spacing-xs) 0; margin-top: 0; } .command-nav-item { border-left: none; border-bottom: 2px solid transparent; - padding: var(--s-xs) var(--s-sm); + padding: var(--spacing-xs) var(--spacing-sm); } .command-nav-item.active { - border-bottom-color: var(--c-accent); + border-bottom-color: var(--color-accent); } } @@ -98,7 +98,7 @@ .workflow-row { display: flex; align-items: center; - gap: var(--s-md); + gap: var(--spacing-md); flex-wrap: wrap; } @@ -107,20 +107,20 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; - color: var(--c-ash); + color: var(--color-ash); width: 120px; flex-shrink: 0; @media (max-width: 768px) { width: 100%; - margin-bottom: var(--s-xs); + margin-bottom: var(--spacing-xs); } } .workflow-row-content { display: flex; align-items: center; - gap: var(--s-sm); + gap: var(--spacing-sm); flex-wrap: wrap; } @@ -130,35 +130,35 @@ align-items: center; padding: 4px 10px; background: transparent; - border: 1px solid var(--c-mist); + border: 1px solid var(--color-mist); border-radius: 3px; font-family: 'Space Grotesk', monospace; font-size: 0.8125rem; font-weight: 500; - color: var(--c-charcoal); + color: var(--color-charcoal); cursor: pointer; transition: all var(--duration-fast) var(--ease-out); } .workflow-node:hover { - border-color: var(--c-accent); - color: var(--c-accent); - background: color-mix(in oklch, var(--c-accent) 5%, transparent); + border-color: var(--color-accent); + color: var(--color-accent); + background: color-mix(in oklch, var(--color-accent) 5%, transparent); } .workflow-node.active { - background: var(--c-accent); - border-color: var(--c-accent); - color: var(--c-paper); + background: var(--color-accent); + border-color: var(--color-accent); + color: var(--color-paper); } /* Workflow Arrow */ .workflow-arrow { display: flex; align-items: center; - color: var(--c-ash); + color: var(--color-ash); font-size: 1.25rem; - padding: 0 var(--s-xs); + padding: 0 var(--spacing-xs); } .workflow-arrow-bidirectional::before { @@ -178,17 +178,17 @@ .workflow-group { display: flex; align-items: center; - gap: var(--s-sm); - padding: var(--s-sm); - background: color-mix(in oklch, var(--c-paper) 50%, transparent); - border: 1px dashed var(--c-mist); + gap: var(--spacing-sm); + padding: var(--spacing-sm); + background: color-mix(in oklch, var(--color-paper) 50%, transparent); + border: 1px dashed var(--color-mist); border-radius: 4px; } .workflow-group-label { font-size: 0.6875rem; font-weight: 500; - color: var(--c-ash); + color: var(--color-ash); text-transform: uppercase; letter-spacing: 0.05em; writing-mode: vertical-lr; @@ -198,7 +198,7 @@ writing-mode: horizontal-tb; transform: none; width: 100%; - margin-bottom: var(--s-xs); + margin-bottom: var(--spacing-xs); } } @@ -206,20 +206,20 @@ .workflow-production { display: grid; grid-template-columns: auto 1fr; - gap: var(--s-md); + gap: var(--spacing-md); align-items: start; } .workflow-production-stages { display: flex; flex-direction: column; - gap: var(--s-sm); + gap: var(--spacing-sm); } .workflow-stage { display: flex; align-items: center; - gap: var(--s-sm); + gap: var(--spacing-sm); } .workflow-stage-label { @@ -227,21 +227,21 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; - color: var(--c-ash); + color: var(--color-ash); width: 80px; } .workflow-stage-nodes { display: flex; - gap: var(--s-xs); + gap: var(--spacing-xs); flex-wrap: wrap; } /* Aesthetic Adjustments Section */ .workflow-aesthetics { - border-top: 1px solid var(--c-mist); - padding-top: var(--s-lg); - margin-top: var(--s-sm); + border-top: 1px solid var(--color-mist); + padding-top: var(--spacing-lg); + margin-top: var(--spacing-sm); } .workflow-aesthetics-title { @@ -249,26 +249,26 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; - color: var(--c-ash); - margin-bottom: var(--s-md); + color: var(--color-ash); + margin-bottom: var(--spacing-md); } .workflow-pairs { display: flex; flex-wrap: wrap; - gap: var(--s-lg); + gap: var(--spacing-lg); } .workflow-pair { display: flex; align-items: center; - gap: var(--s-sm); + gap: var(--spacing-sm); } /* Responsive */ @media (max-width: 768px) { .workflow-container { - padding: var(--s-md); + padding: var(--spacing-md); } .workflow-production { @@ -282,15 +282,15 @@ .workflow-stage-label { width: auto; - margin-bottom: var(--s-xs); + margin-bottom: var(--spacing-xs); } } /* Command Card in Grid */ .command-card { - padding: var(--s-sm) var(--s-md); - background: var(--c-paper); - border: 1px solid var(--c-mist); + padding: var(--spacing-sm) var(--spacing-md); + background: var(--color-paper); + border: 1px solid var(--color-mist); border-radius: 3px; cursor: pointer; transition: all var(--duration-fast) var(--ease-out); @@ -298,27 +298,27 @@ } .command-card:hover { - border-color: var(--c-accent); + border-color: var(--color-accent); transform: translateY(-2px); - box-shadow: 0 4px 12px color-mix(in oklch, var(--c-accent) 10%, transparent); + box-shadow: 0 4px 12px color-mix(in oklch, var(--color-accent) 10%, transparent); } .command-card.active { - border-color: var(--c-accent); - background: color-mix(in oklch, var(--c-accent) 5%, var(--c-paper)); + border-color: var(--color-accent); + background: color-mix(in oklch, var(--color-accent) 5%, var(--color-paper)); } .command-card-name { font-family: 'Space Grotesk', monospace; font-size: 0.9375rem; font-weight: 500; - color: var(--c-text); + color: var(--color-text); margin-bottom: 2px; } .command-card-desc { font-size: 0.75rem; - color: var(--c-ash); + color: var(--color-ash); line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; @@ -334,9 +334,9 @@ text-transform: uppercase; letter-spacing: 0.08em; padding: 2px 6px; - background: var(--c-mist); - color: var(--c-ash); + background: var(--color-mist); + color: var(--color-ash); border-radius: 2px; - margin-top: var(--s-xs); + margin-top: var(--spacing-xs); } diff --git a/public/index.html b/public/index.html index 94631304c..e6653d312 100644 --- a/public/index.html +++ b/public/index.html @@ -7,37 +7,38 @@ + - + -
-
+
+
-

- Impeccable style - made easy +

+ Impeccable style + made easy

-

Your LLM can design beautiful interfaces.
It just needs to know what to ask for.

-

Works with Cursor · Claude Code · Gemini CLI · Codex CLI

+

Your LLM can design beautiful interfaces.
It just needs to know what to ask for.

+

Works with Cursor · Claude Code · Gemini CLI · Codex CLI

-
-
+
-
-
-
-

The Problem

-

LLMs are biased toward safe, generic design choices. Without guidance, you get the same predictable aesthetic every time.

+
+
+
+

The Problem

+

LLMs are biased toward safe, generic design choices. Without guidance, you get the same predictable aesthetic every time.

-
-
+
+
@@ -61,118 +62,118 @@
-
-
-
-

The Solution

-

Teach your AI assistant the language of design. Skills provide deep design knowledge. Commands give you precise control over the creative process.

+
+
+
+

The Solution

+

Teach your AI assistant the language of design. Skills provide deep design knowledge. Commands give you precise control over the creative process.

-
+
-
+
-

8 Skills

-

Deep knowledge in typography, color, motion, spatial design, and more. The AI learns how to think about design.

+

8 Skills

+

Deep knowledge in typography, color, motion, spatial design, and more. The AI learns how to think about design.

-
+
-

15 Commands

-

Precise actions like /bolder, /animate, /audit. Steer the AI through iterative design refinement.

+

15 Commands

+

Precise actions like /bolder, /animate, /audit. Steer the AI through iterative design refinement.

-
-
-

Skills

-

Design knowledge that transforms AI output

+
+
+

Skills

+

Design knowledge that transforms AI output

-
-
-
-
-

Commands

-

Precise control over the design process

+
+
+

Commands

+

Precise control over the design process

-
+
-
-
-
-

Get Started

-

Download the complete bundle for your preferred AI tool. Extract into your project root and start creating.

+
+
+

Get Started

+

Download the complete bundle for your preferred AI tool. Extract into your project root and start creating.

-
+
-
-

Cursor

+
+

Cursor

Rules + Commands
-

Commands and rules for Cursor IDE. Works via appending, no frontmatter required.

+

Commands and rules for Cursor IDE. Works via appending, no frontmatter required.

-
-

Claude Code

+
+

Claude Code

Full Featured
-

Complete YAML frontmatter with argument support. Follows Anthropic Skills specification.

+

Complete YAML frontmatter with argument support. Follows Anthropic Skills specification.

-
-

Gemini CLI

+
+

Gemini CLI

TOML + Modular
-

TOML-formatted commands with modular skill imports via GEMINI.md.

+

TOML-formatted commands with modular skill imports via GEMINI.md.

-
-

Codex CLI

+
+

Codex CLI

Prompts + Routing
-

Custom prompt format with skill routing through AGENTS.md architecture.

+

Custom prompt format with skill routing through AGENTS.md architecture.

@@ -180,19 +181,19 @@
-
-
-

Open Source

-

View the source, contribute skills and commands, or report issues on GitHub.

+
+
+

Open Source

+

View the source, contribute skills and commands, or report issues on GitHub.

View Repository
-