@aexol/spectral 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index.js +76 -301
- package/dist/cli.js +11 -0
- package/dist/designer/data/systems/agentic/DESIGN.md +71 -0
- package/dist/designer/data/systems/agentic/components.html +154 -0
- package/dist/designer/data/systems/agentic/tokens.css +63 -0
- package/dist/designer/data/systems/airbnb/DESIGN.md +393 -0
- package/dist/designer/data/systems/airbnb/components.html +1373 -0
- package/dist/designer/data/systems/airbnb/tokens.css +261 -0
- package/dist/designer/data/systems/airtable/DESIGN.md +92 -0
- package/dist/designer/data/systems/airtable/components.html +489 -0
- package/dist/designer/data/systems/airtable/tokens.css +261 -0
- package/dist/designer/data/systems/ant/DESIGN.md +71 -0
- package/dist/designer/data/systems/ant/components.html +154 -0
- package/dist/designer/data/systems/ant/tokens.css +63 -0
- package/dist/designer/data/systems/apple/DESIGN.md +250 -0
- package/dist/designer/data/systems/apple/components.html +749 -0
- package/dist/designer/data/systems/apple/tokens.css +286 -0
- package/dist/designer/data/systems/application/DESIGN.md +71 -0
- package/dist/designer/data/systems/application/components.html +154 -0
- package/dist/designer/data/systems/application/tokens.css +63 -0
- package/dist/designer/data/systems/arc/DESIGN.md +152 -0
- package/dist/designer/data/systems/arc/components.html +432 -0
- package/dist/designer/data/systems/arc/tokens.css +137 -0
- package/dist/designer/data/systems/artistic/DESIGN.md +71 -0
- package/dist/designer/data/systems/artistic/components.html +136 -0
- package/dist/designer/data/systems/artistic/tokens.css +63 -0
- package/dist/designer/data/systems/atelier-zero/DESIGN.md +316 -0
- package/dist/designer/data/systems/atelier-zero/components.html +136 -0
- package/dist/designer/data/systems/atelier-zero/tokens.css +63 -0
- package/dist/designer/data/systems/bento/DESIGN.md +71 -0
- package/dist/designer/data/systems/bento/components.html +136 -0
- package/dist/designer/data/systems/bento/tokens.css +63 -0
- package/dist/designer/data/systems/binance/DESIGN.md +348 -0
- package/dist/designer/data/systems/binance/components.html +550 -0
- package/dist/designer/data/systems/binance/tokens.css +255 -0
- package/dist/designer/data/systems/bmw/DESIGN.md +183 -0
- package/dist/designer/data/systems/bmw/components.html +551 -0
- package/dist/designer/data/systems/bmw/tokens.css +179 -0
- package/dist/designer/data/systems/bmw-m/DESIGN.md +246 -0
- package/dist/designer/data/systems/bmw-m/components.html +342 -0
- package/dist/designer/data/systems/bmw-m/tokens.css +64 -0
- package/dist/designer/data/systems/bold/DESIGN.md +71 -0
- package/dist/designer/data/systems/bold/components.html +136 -0
- package/dist/designer/data/systems/bold/tokens.css +63 -0
- package/dist/designer/data/systems/brutalism/DESIGN.md +71 -0
- package/dist/designer/data/systems/brutalism/components.html +154 -0
- package/dist/designer/data/systems/brutalism/tokens.css +63 -0
- package/dist/designer/data/systems/bugatti/DESIGN.md +271 -0
- package/dist/designer/data/systems/bugatti/components.html +342 -0
- package/dist/designer/data/systems/bugatti/tokens.css +64 -0
- package/dist/designer/data/systems/cafe/DESIGN.md +71 -0
- package/dist/designer/data/systems/cafe/components.html +136 -0
- package/dist/designer/data/systems/cafe/tokens.css +63 -0
- package/dist/designer/data/systems/cal/DESIGN.md +262 -0
- package/dist/designer/data/systems/cal/components.html +376 -0
- package/dist/designer/data/systems/cal/tokens.css +265 -0
- package/dist/designer/data/systems/canva/DESIGN.md +157 -0
- package/dist/designer/data/systems/canva/components.html +461 -0
- package/dist/designer/data/systems/canva/tokens.css +147 -0
- package/dist/designer/data/systems/cisco/DESIGN.md +201 -0
- package/dist/designer/data/systems/cisco/components.html +342 -0
- package/dist/designer/data/systems/cisco/tokens.css +64 -0
- package/dist/designer/data/systems/claude/DESIGN.md +315 -0
- package/dist/designer/data/systems/claude/components.html +483 -0
- package/dist/designer/data/systems/claude/tokens.css +130 -0
- package/dist/designer/data/systems/clay/DESIGN.md +307 -0
- package/dist/designer/data/systems/clay/components.html +136 -0
- package/dist/designer/data/systems/clay/tokens.css +63 -0
- package/dist/designer/data/systems/claymorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/claymorphism/components.html +136 -0
- package/dist/designer/data/systems/claymorphism/tokens.css +63 -0
- package/dist/designer/data/systems/clean/DESIGN.md +71 -0
- package/dist/designer/data/systems/clean/components.html +136 -0
- package/dist/designer/data/systems/clean/tokens.css +63 -0
- package/dist/designer/data/systems/clickhouse/DESIGN.md +284 -0
- package/dist/designer/data/systems/clickhouse/components.html +506 -0
- package/dist/designer/data/systems/clickhouse/tokens.css +135 -0
- package/dist/designer/data/systems/cohere/DESIGN.md +269 -0
- package/dist/designer/data/systems/cohere/components.html +353 -0
- package/dist/designer/data/systems/cohere/tokens.css +126 -0
- package/dist/designer/data/systems/coinbase/DESIGN.md +132 -0
- package/dist/designer/data/systems/coinbase/components.html +501 -0
- package/dist/designer/data/systems/coinbase/tokens.css +257 -0
- package/dist/designer/data/systems/colorful/DESIGN.md +71 -0
- package/dist/designer/data/systems/colorful/components.html +136 -0
- package/dist/designer/data/systems/colorful/tokens.css +63 -0
- package/dist/designer/data/systems/composio/DESIGN.md +310 -0
- package/dist/designer/data/systems/composio/components.html +342 -0
- package/dist/designer/data/systems/composio/tokens.css +64 -0
- package/dist/designer/data/systems/contemporary/DESIGN.md +71 -0
- package/dist/designer/data/systems/contemporary/components.html +136 -0
- package/dist/designer/data/systems/contemporary/tokens.css +63 -0
- package/dist/designer/data/systems/corporate/DESIGN.md +71 -0
- package/dist/designer/data/systems/corporate/components.html +136 -0
- package/dist/designer/data/systems/corporate/tokens.css +63 -0
- package/dist/designer/data/systems/cosmic/DESIGN.md +71 -0
- package/dist/designer/data/systems/cosmic/components.html +136 -0
- package/dist/designer/data/systems/cosmic/tokens.css +63 -0
- package/dist/designer/data/systems/creative/DESIGN.md +71 -0
- package/dist/designer/data/systems/creative/components.html +136 -0
- package/dist/designer/data/systems/creative/tokens.css +63 -0
- package/dist/designer/data/systems/cursor/DESIGN.md +312 -0
- package/dist/designer/data/systems/cursor/components.html +654 -0
- package/dist/designer/data/systems/cursor/tokens.css +218 -0
- package/dist/designer/data/systems/dashboard/DESIGN.md +71 -0
- package/dist/designer/data/systems/dashboard/components.html +154 -0
- package/dist/designer/data/systems/dashboard/tokens.css +63 -0
- package/dist/designer/data/systems/default/DESIGN.md +62 -0
- package/dist/designer/data/systems/default/components.html +523 -0
- package/dist/designer/data/systems/default/tokens.css +200 -0
- package/dist/designer/data/systems/discord/DESIGN.md +162 -0
- package/dist/designer/data/systems/discord/components.html +359 -0
- package/dist/designer/data/systems/discord/tokens.css +125 -0
- package/dist/designer/data/systems/dithered/DESIGN.md +71 -0
- package/dist/designer/data/systems/dithered/components.html +136 -0
- package/dist/designer/data/systems/dithered/tokens.css +63 -0
- package/dist/designer/data/systems/doodle/DESIGN.md +71 -0
- package/dist/designer/data/systems/doodle/components.html +136 -0
- package/dist/designer/data/systems/doodle/tokens.css +63 -0
- package/dist/designer/data/systems/dramatic/DESIGN.md +71 -0
- package/dist/designer/data/systems/dramatic/components.html +136 -0
- package/dist/designer/data/systems/dramatic/tokens.css +63 -0
- package/dist/designer/data/systems/duolingo/DESIGN.md +154 -0
- package/dist/designer/data/systems/duolingo/components.html +532 -0
- package/dist/designer/data/systems/duolingo/tokens.css +130 -0
- package/dist/designer/data/systems/editorial/DESIGN.md +71 -0
- package/dist/designer/data/systems/editorial/components.html +154 -0
- package/dist/designer/data/systems/editorial/tokens.css +63 -0
- package/dist/designer/data/systems/elegant/DESIGN.md +71 -0
- package/dist/designer/data/systems/elegant/components.html +136 -0
- package/dist/designer/data/systems/elegant/tokens.css +63 -0
- package/dist/designer/data/systems/elevenlabs/DESIGN.md +268 -0
- package/dist/designer/data/systems/elevenlabs/components.html +342 -0
- package/dist/designer/data/systems/elevenlabs/tokens.css +127 -0
- package/dist/designer/data/systems/energetic/DESIGN.md +72 -0
- package/dist/designer/data/systems/energetic/components.html +136 -0
- package/dist/designer/data/systems/energetic/tokens.css +63 -0
- package/dist/designer/data/systems/enterprise/DESIGN.md +71 -0
- package/dist/designer/data/systems/enterprise/components.html +154 -0
- package/dist/designer/data/systems/enterprise/tokens.css +63 -0
- package/dist/designer/data/systems/expo/DESIGN.md +284 -0
- package/dist/designer/data/systems/expo/components.html +342 -0
- package/dist/designer/data/systems/expo/tokens.css +64 -0
- package/dist/designer/data/systems/expressive/DESIGN.md +71 -0
- package/dist/designer/data/systems/expressive/components.html +136 -0
- package/dist/designer/data/systems/expressive/tokens.css +63 -0
- package/dist/designer/data/systems/fantasy/DESIGN.md +71 -0
- package/dist/designer/data/systems/fantasy/components.html +136 -0
- package/dist/designer/data/systems/fantasy/tokens.css +63 -0
- package/dist/designer/data/systems/ferrari/DESIGN.md +317 -0
- package/dist/designer/data/systems/ferrari/components.html +342 -0
- package/dist/designer/data/systems/ferrari/tokens.css +64 -0
- package/dist/designer/data/systems/figma/DESIGN.md +223 -0
- package/dist/designer/data/systems/figma/components.html +344 -0
- package/dist/designer/data/systems/figma/tokens.css +126 -0
- package/dist/designer/data/systems/flat/DESIGN.md +71 -0
- package/dist/designer/data/systems/flat/components.html +136 -0
- package/dist/designer/data/systems/flat/tokens.css +63 -0
- package/dist/designer/data/systems/framer/DESIGN.md +249 -0
- package/dist/designer/data/systems/framer/components.html +438 -0
- package/dist/designer/data/systems/framer/tokens.css +238 -0
- package/dist/designer/data/systems/friendly/DESIGN.md +71 -0
- package/dist/designer/data/systems/friendly/components.html +136 -0
- package/dist/designer/data/systems/friendly/tokens.css +63 -0
- package/dist/designer/data/systems/futuristic/DESIGN.md +71 -0
- package/dist/designer/data/systems/futuristic/components.html +136 -0
- package/dist/designer/data/systems/futuristic/tokens.css +63 -0
- package/dist/designer/data/systems/github/DESIGN.md +155 -0
- package/dist/designer/data/systems/github/components.html +383 -0
- package/dist/designer/data/systems/github/tokens.css +125 -0
- package/dist/designer/data/systems/glassmorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/glassmorphism/components.html +154 -0
- package/dist/designer/data/systems/glassmorphism/tokens.css +63 -0
- package/dist/designer/data/systems/gradient/DESIGN.md +71 -0
- package/dist/designer/data/systems/gradient/components.html +154 -0
- package/dist/designer/data/systems/gradient/tokens.css +63 -0
- package/dist/designer/data/systems/hashicorp/DESIGN.md +281 -0
- package/dist/designer/data/systems/hashicorp/components.html +502 -0
- package/dist/designer/data/systems/hashicorp/tokens.css +272 -0
- package/dist/designer/data/systems/hud/DESIGN.md +173 -0
- package/dist/designer/data/systems/hud/components.html +136 -0
- package/dist/designer/data/systems/hud/tokens.css +63 -0
- package/dist/designer/data/systems/huggingface/DESIGN.md +149 -0
- package/dist/designer/data/systems/huggingface/components.html +346 -0
- package/dist/designer/data/systems/huggingface/tokens.css +125 -0
- package/dist/designer/data/systems/ibm/DESIGN.md +335 -0
- package/dist/designer/data/systems/ibm/components.html +342 -0
- package/dist/designer/data/systems/ibm/tokens.css +64 -0
- package/dist/designer/data/systems/intercom/DESIGN.md +149 -0
- package/dist/designer/data/systems/intercom/components.html +557 -0
- package/dist/designer/data/systems/intercom/tokens.css +150 -0
- package/dist/designer/data/systems/kami/DESIGN.md +410 -0
- package/dist/designer/data/systems/kami/components.html +601 -0
- package/dist/designer/data/systems/kami/tokens.css +272 -0
- package/dist/designer/data/systems/kraken/DESIGN.md +128 -0
- package/dist/designer/data/systems/kraken/components.html +342 -0
- package/dist/designer/data/systems/kraken/tokens.css +64 -0
- package/dist/designer/data/systems/lamborghini/DESIGN.md +291 -0
- package/dist/designer/data/systems/lamborghini/components.html +342 -0
- package/dist/designer/data/systems/lamborghini/tokens.css +64 -0
- package/dist/designer/data/systems/levels/DESIGN.md +71 -0
- package/dist/designer/data/systems/levels/components.html +154 -0
- package/dist/designer/data/systems/levels/tokens.css +63 -0
- package/dist/designer/data/systems/linear-app/DESIGN.md +370 -0
- package/dist/designer/data/systems/linear-app/components.html +370 -0
- package/dist/designer/data/systems/linear-app/tokens.css +130 -0
- package/dist/designer/data/systems/lingo/DESIGN.md +71 -0
- package/dist/designer/data/systems/lingo/components.html +154 -0
- package/dist/designer/data/systems/lingo/tokens.css +63 -0
- package/dist/designer/data/systems/loom/DESIGN.md +201 -0
- package/dist/designer/data/systems/loom/components.html +446 -0
- package/dist/designer/data/systems/loom/tokens.css +138 -0
- package/dist/designer/data/systems/lovable/DESIGN.md +301 -0
- package/dist/designer/data/systems/lovable/components.html +441 -0
- package/dist/designer/data/systems/lovable/tokens.css +258 -0
- package/dist/designer/data/systems/luxury/DESIGN.md +71 -0
- package/dist/designer/data/systems/luxury/components.html +154 -0
- package/dist/designer/data/systems/luxury/tokens.css +63 -0
- package/dist/designer/data/systems/mastercard/DESIGN.md +368 -0
- package/dist/designer/data/systems/mastercard/components.html +342 -0
- package/dist/designer/data/systems/mastercard/tokens.css +64 -0
- package/dist/designer/data/systems/material/DESIGN.md +71 -0
- package/dist/designer/data/systems/material/components.html +154 -0
- package/dist/designer/data/systems/material/tokens.css +63 -0
- package/dist/designer/data/systems/meta/DESIGN.md +369 -0
- package/dist/designer/data/systems/meta/components.html +398 -0
- package/dist/designer/data/systems/meta/tokens.css +263 -0
- package/dist/designer/data/systems/minimal/DESIGN.md +71 -0
- package/dist/designer/data/systems/minimal/components.html +154 -0
- package/dist/designer/data/systems/minimal/tokens.css +63 -0
- package/dist/designer/data/systems/minimax/DESIGN.md +260 -0
- package/dist/designer/data/systems/minimax/components.html +590 -0
- package/dist/designer/data/systems/minimax/tokens.css +148 -0
- package/dist/designer/data/systems/mintlify/DESIGN.md +329 -0
- package/dist/designer/data/systems/mintlify/components.html +737 -0
- package/dist/designer/data/systems/mintlify/tokens.css +256 -0
- package/dist/designer/data/systems/miro/DESIGN.md +111 -0
- package/dist/designer/data/systems/miro/components.html +342 -0
- package/dist/designer/data/systems/miro/tokens.css +64 -0
- package/dist/designer/data/systems/mission-control/DESIGN.md +474 -0
- package/dist/designer/data/systems/mission-control/components.html +136 -0
- package/dist/designer/data/systems/mission-control/tokens.css +63 -0
- package/dist/designer/data/systems/mistral-ai/DESIGN.md +264 -0
- package/dist/designer/data/systems/mistral-ai/components.html +338 -0
- package/dist/designer/data/systems/mistral-ai/tokens.css +125 -0
- package/dist/designer/data/systems/modern/DESIGN.md +71 -0
- package/dist/designer/data/systems/modern/components.html +154 -0
- package/dist/designer/data/systems/modern/tokens.css +63 -0
- package/dist/designer/data/systems/mongodb/DESIGN.md +269 -0
- package/dist/designer/data/systems/mongodb/components.html +462 -0
- package/dist/designer/data/systems/mongodb/tokens.css +176 -0
- package/dist/designer/data/systems/mono/DESIGN.md +71 -0
- package/dist/designer/data/systems/mono/components.html +136 -0
- package/dist/designer/data/systems/mono/tokens.css +63 -0
- package/dist/designer/data/systems/neobrutalism/DESIGN.md +71 -0
- package/dist/designer/data/systems/neobrutalism/components.html +136 -0
- package/dist/designer/data/systems/neobrutalism/tokens.css +63 -0
- package/dist/designer/data/systems/neon/DESIGN.md +71 -0
- package/dist/designer/data/systems/neon/components.html +136 -0
- package/dist/designer/data/systems/neon/tokens.css +63 -0
- package/dist/designer/data/systems/neumorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/neumorphism/components.html +136 -0
- package/dist/designer/data/systems/neumorphism/tokens.css +63 -0
- package/dist/designer/data/systems/nike/DESIGN.md +366 -0
- package/dist/designer/data/systems/nike/components.html +512 -0
- package/dist/designer/data/systems/nike/tokens.css +304 -0
- package/dist/designer/data/systems/notion/DESIGN.md +312 -0
- package/dist/designer/data/systems/notion/components.html +413 -0
- package/dist/designer/data/systems/notion/tokens.css +130 -0
- package/dist/designer/data/systems/nvidia/DESIGN.md +296 -0
- package/dist/designer/data/systems/nvidia/components.html +414 -0
- package/dist/designer/data/systems/nvidia/tokens.css +133 -0
- package/dist/designer/data/systems/ollama/DESIGN.md +270 -0
- package/dist/designer/data/systems/ollama/components.html +700 -0
- package/dist/designer/data/systems/ollama/tokens.css +242 -0
- package/dist/designer/data/systems/openai/DESIGN.md +140 -0
- package/dist/designer/data/systems/openai/components.html +382 -0
- package/dist/designer/data/systems/openai/tokens.css +133 -0
- package/dist/designer/data/systems/opencode-ai/DESIGN.md +284 -0
- package/dist/designer/data/systems/opencode-ai/components.html +389 -0
- package/dist/designer/data/systems/opencode-ai/tokens.css +126 -0
- package/dist/designer/data/systems/pacman/DESIGN.md +71 -0
- package/dist/designer/data/systems/pacman/components.html +342 -0
- package/dist/designer/data/systems/pacman/tokens.css +64 -0
- package/dist/designer/data/systems/paper/DESIGN.md +71 -0
- package/dist/designer/data/systems/paper/components.html +136 -0
- package/dist/designer/data/systems/paper/tokens.css +63 -0
- package/dist/designer/data/systems/perplexity/DESIGN.md +286 -0
- package/dist/designer/data/systems/perplexity/components.html +455 -0
- package/dist/designer/data/systems/perplexity/tokens.css +151 -0
- package/dist/designer/data/systems/perspective/DESIGN.md +71 -0
- package/dist/designer/data/systems/perspective/components.html +136 -0
- package/dist/designer/data/systems/perspective/tokens.css +63 -0
- package/dist/designer/data/systems/pinterest/DESIGN.md +233 -0
- package/dist/designer/data/systems/pinterest/components.html +865 -0
- package/dist/designer/data/systems/pinterest/tokens.css +262 -0
- package/dist/designer/data/systems/playstation/DESIGN.md +367 -0
- package/dist/designer/data/systems/playstation/components.html +414 -0
- package/dist/designer/data/systems/playstation/tokens.css +150 -0
- package/dist/designer/data/systems/posthog/DESIGN.md +259 -0
- package/dist/designer/data/systems/posthog/components.html +827 -0
- package/dist/designer/data/systems/posthog/tokens.css +272 -0
- package/dist/designer/data/systems/premium/DESIGN.md +71 -0
- package/dist/designer/data/systems/premium/components.html +154 -0
- package/dist/designer/data/systems/premium/tokens.css +63 -0
- package/dist/designer/data/systems/professional/DESIGN.md +71 -0
- package/dist/designer/data/systems/professional/components.html +136 -0
- package/dist/designer/data/systems/professional/tokens.css +63 -0
- package/dist/designer/data/systems/publication/DESIGN.md +71 -0
- package/dist/designer/data/systems/publication/components.html +154 -0
- package/dist/designer/data/systems/publication/tokens.css +63 -0
- package/dist/designer/data/systems/raycast/DESIGN.md +271 -0
- package/dist/designer/data/systems/raycast/components.html +507 -0
- package/dist/designer/data/systems/raycast/tokens.css +143 -0
- package/dist/designer/data/systems/refined/DESIGN.md +71 -0
- package/dist/designer/data/systems/refined/components.html +136 -0
- package/dist/designer/data/systems/refined/tokens.css +63 -0
- package/dist/designer/data/systems/renault/DESIGN.md +314 -0
- package/dist/designer/data/systems/renault/components.html +154 -0
- package/dist/designer/data/systems/renault/tokens.css +63 -0
- package/dist/designer/data/systems/replicate/DESIGN.md +264 -0
- package/dist/designer/data/systems/replicate/components.html +340 -0
- package/dist/designer/data/systems/replicate/tokens.css +125 -0
- package/dist/designer/data/systems/resend/DESIGN.md +306 -0
- package/dist/designer/data/systems/resend/components.html +839 -0
- package/dist/designer/data/systems/resend/tokens.css +353 -0
- package/dist/designer/data/systems/retro/DESIGN.md +71 -0
- package/dist/designer/data/systems/retro/components.html +136 -0
- package/dist/designer/data/systems/retro/tokens.css +63 -0
- package/dist/designer/data/systems/revolut/DESIGN.md +188 -0
- package/dist/designer/data/systems/revolut/components.html +342 -0
- package/dist/designer/data/systems/revolut/tokens.css +64 -0
- package/dist/designer/data/systems/runwayml/DESIGN.md +247 -0
- package/dist/designer/data/systems/runwayml/components.html +638 -0
- package/dist/designer/data/systems/runwayml/tokens.css +204 -0
- package/dist/designer/data/systems/sanity/DESIGN.md +360 -0
- package/dist/designer/data/systems/sanity/components.html +342 -0
- package/dist/designer/data/systems/sanity/tokens.css +64 -0
- package/dist/designer/data/systems/sentry/DESIGN.md +265 -0
- package/dist/designer/data/systems/sentry/components.html +387 -0
- package/dist/designer/data/systems/sentry/tokens.css +219 -0
- package/dist/designer/data/systems/shadcn/DESIGN.md +71 -0
- package/dist/designer/data/systems/shadcn/components.html +732 -0
- package/dist/designer/data/systems/shadcn/tokens.css +255 -0
- package/dist/designer/data/systems/shopify/DESIGN.md +353 -0
- package/dist/designer/data/systems/shopify/components.html +342 -0
- package/dist/designer/data/systems/shopify/tokens.css +141 -0
- package/dist/designer/data/systems/simple/DESIGN.md +71 -0
- package/dist/designer/data/systems/simple/components.html +136 -0
- package/dist/designer/data/systems/simple/tokens.css +63 -0
- package/dist/designer/data/systems/skeumorphism/DESIGN.md +71 -0
- package/dist/designer/data/systems/skeumorphism/components.html +136 -0
- package/dist/designer/data/systems/skeumorphism/tokens.css +63 -0
- package/dist/designer/data/systems/slack/DESIGN.md +363 -0
- package/dist/designer/data/systems/slack/components.html +387 -0
- package/dist/designer/data/systems/slack/tokens.css +127 -0
- package/dist/designer/data/systems/sleek/DESIGN.md +71 -0
- package/dist/designer/data/systems/sleek/components.html +136 -0
- package/dist/designer/data/systems/sleek/tokens.css +63 -0
- package/dist/designer/data/systems/spacex/DESIGN.md +197 -0
- package/dist/designer/data/systems/spacex/components.html +496 -0
- package/dist/designer/data/systems/spacex/tokens.css +154 -0
- package/dist/designer/data/systems/spacious/DESIGN.md +71 -0
- package/dist/designer/data/systems/spacious/components.html +136 -0
- package/dist/designer/data/systems/spacious/tokens.css +63 -0
- package/dist/designer/data/systems/spotify/DESIGN.md +249 -0
- package/dist/designer/data/systems/spotify/components.html +365 -0
- package/dist/designer/data/systems/spotify/tokens.css +127 -0
- package/dist/designer/data/systems/starbucks/DESIGN.md +583 -0
- package/dist/designer/data/systems/starbucks/components.html +493 -0
- package/dist/designer/data/systems/starbucks/tokens.css +182 -0
- package/dist/designer/data/systems/storytelling/DESIGN.md +71 -0
- package/dist/designer/data/systems/storytelling/components.html +136 -0
- package/dist/designer/data/systems/storytelling/tokens.css +63 -0
- package/dist/designer/data/systems/stripe/DESIGN.md +325 -0
- package/dist/designer/data/systems/stripe/components.html +1018 -0
- package/dist/designer/data/systems/stripe/tokens.css +295 -0
- package/dist/designer/data/systems/supabase/DESIGN.md +258 -0
- package/dist/designer/data/systems/supabase/components.html +741 -0
- package/dist/designer/data/systems/supabase/tokens.css +294 -0
- package/dist/designer/data/systems/superhuman/DESIGN.md +255 -0
- package/dist/designer/data/systems/superhuman/components.html +537 -0
- package/dist/designer/data/systems/superhuman/tokens.css +160 -0
- package/dist/designer/data/systems/tesla/DESIGN.md +289 -0
- package/dist/designer/data/systems/tesla/components.html +724 -0
- package/dist/designer/data/systems/tesla/tokens.css +285 -0
- package/dist/designer/data/systems/tetris/DESIGN.md +71 -0
- package/dist/designer/data/systems/tetris/components.html +342 -0
- package/dist/designer/data/systems/tetris/tokens.css +64 -0
- package/dist/designer/data/systems/theverge/DESIGN.md +342 -0
- package/dist/designer/data/systems/theverge/components.html +342 -0
- package/dist/designer/data/systems/theverge/tokens.css +64 -0
- package/dist/designer/data/systems/together-ai/DESIGN.md +266 -0
- package/dist/designer/data/systems/together-ai/components.html +422 -0
- package/dist/designer/data/systems/together-ai/tokens.css +127 -0
- package/dist/designer/data/systems/totality-festival/DESIGN.md +206 -0
- package/dist/designer/data/systems/totality-festival/components.html +136 -0
- package/dist/designer/data/systems/totality-festival/tokens.css +63 -0
- package/dist/designer/data/systems/trading-terminal/DESIGN.md +178 -0
- package/dist/designer/data/systems/trading-terminal/components.html +154 -0
- package/dist/designer/data/systems/trading-terminal/tokens.css +63 -0
- package/dist/designer/data/systems/uber/DESIGN.md +298 -0
- package/dist/designer/data/systems/uber/components.html +347 -0
- package/dist/designer/data/systems/uber/tokens.css +131 -0
- package/dist/designer/data/systems/urdu/DESIGN.md +1002 -0
- package/dist/designer/data/systems/urdu/components.html +136 -0
- package/dist/designer/data/systems/urdu/tokens.css +63 -0
- package/dist/designer/data/systems/vercel/DESIGN.md +313 -0
- package/dist/designer/data/systems/vercel/components.html +839 -0
- package/dist/designer/data/systems/vercel/tokens.css +270 -0
- package/dist/designer/data/systems/vibrant/DESIGN.md +71 -0
- package/dist/designer/data/systems/vibrant/components.html +136 -0
- package/dist/designer/data/systems/vibrant/tokens.css +63 -0
- package/dist/designer/data/systems/vintage/DESIGN.md +71 -0
- package/dist/designer/data/systems/vintage/components.html +136 -0
- package/dist/designer/data/systems/vintage/tokens.css +63 -0
- package/dist/designer/data/systems/vodafone/DESIGN.md +426 -0
- package/dist/designer/data/systems/vodafone/components.html +342 -0
- package/dist/designer/data/systems/vodafone/tokens.css +64 -0
- package/dist/designer/data/systems/voltagent/DESIGN.md +326 -0
- package/dist/designer/data/systems/voltagent/components.html +154 -0
- package/dist/designer/data/systems/voltagent/tokens.css +63 -0
- package/dist/designer/data/systems/warm-editorial/DESIGN.md +65 -0
- package/dist/designer/data/systems/warm-editorial/components.html +136 -0
- package/dist/designer/data/systems/warm-editorial/tokens.css +63 -0
- package/dist/designer/data/systems/warp/DESIGN.md +256 -0
- package/dist/designer/data/systems/warp/components.html +411 -0
- package/dist/designer/data/systems/warp/tokens.css +156 -0
- package/dist/designer/data/systems/webex/DESIGN.md +207 -0
- package/dist/designer/data/systems/webex/components.html +342 -0
- package/dist/designer/data/systems/webex/tokens.css +64 -0
- package/dist/designer/data/systems/webflow/DESIGN.md +95 -0
- package/dist/designer/data/systems/webflow/components.html +413 -0
- package/dist/designer/data/systems/webflow/tokens.css +191 -0
- package/dist/designer/data/systems/wechat/DESIGN.md +302 -0
- package/dist/designer/data/systems/wechat/components.html +507 -0
- package/dist/designer/data/systems/wechat/tokens.css +176 -0
- package/dist/designer/data/systems/wired/DESIGN.md +281 -0
- package/dist/designer/data/systems/wired/components.html +342 -0
- package/dist/designer/data/systems/wired/tokens.css +64 -0
- package/dist/designer/data/systems/wise/DESIGN.md +176 -0
- package/dist/designer/data/systems/wise/components.html +365 -0
- package/dist/designer/data/systems/wise/tokens.css +141 -0
- package/dist/designer/data/systems/x-ai/DESIGN.md +260 -0
- package/dist/designer/data/systems/x-ai/components.html +460 -0
- package/dist/designer/data/systems/x-ai/tokens.css +268 -0
- package/dist/designer/data/systems/xiaohongshu/DESIGN.md +402 -0
- package/dist/designer/data/systems/xiaohongshu/components.html +865 -0
- package/dist/designer/data/systems/xiaohongshu/tokens.css +193 -0
- package/dist/designer/data/systems/zapier/DESIGN.md +331 -0
- package/dist/designer/data/systems/zapier/components.html +342 -0
- package/dist/designer/data/systems/zapier/tokens.css +64 -0
- package/dist/designer/guidelines.js +176 -0
- package/dist/designer/index.js +236 -0
- package/dist/designer/skills.js +1675 -0
- package/dist/designer/systems.js +216 -0
- package/dist/server/pi-bridge.js +155 -5
- package/dist/server/session-stream.js +45 -1
- package/package.json +1 -1
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Duolingo — reference components</title>
|
|
7
|
+
<meta
|
|
8
|
+
name="description"
|
|
9
|
+
content="Reference fixture for design-systems/duolingo. Owl-green gamified
|
|
10
|
+
universe, chunky 4px tactile shadows, big confident type, friendly pill geometry."
|
|
11
|
+
/>
|
|
12
|
+
|
|
13
|
+
<style>
|
|
14
|
+
:root {
|
|
15
|
+
--bg: #ffffff;
|
|
16
|
+
--surface: #f7f7f7;
|
|
17
|
+
--surface-warm: var(--surface);
|
|
18
|
+
|
|
19
|
+
--fg: #3c3c3c;
|
|
20
|
+
--fg-2: var(--fg);
|
|
21
|
+
--muted: #777777;
|
|
22
|
+
--meta: #afafaf;
|
|
23
|
+
|
|
24
|
+
--border: #e5e5e5;
|
|
25
|
+
--border-soft: var(--border);
|
|
26
|
+
|
|
27
|
+
--accent: #58cc02;
|
|
28
|
+
--accent-on: #ffffff;
|
|
29
|
+
--accent-hover: #89e219;
|
|
30
|
+
--accent-active: #58a700;
|
|
31
|
+
|
|
32
|
+
--success: #58cc02;
|
|
33
|
+
--warn: #ffc800;
|
|
34
|
+
--danger: #ff4b4b;
|
|
35
|
+
|
|
36
|
+
--font-display: "Feather Bold", "DIN Round Pro", "Helvetica Neue", sans-serif;
|
|
37
|
+
--font-body: "Mona Sans", "Helvetica Neue", system-ui, sans-serif;
|
|
38
|
+
--font-mono: "JetBrains Mono", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
39
|
+
|
|
40
|
+
--text-xs: 12px;
|
|
41
|
+
--text-sm: 13px;
|
|
42
|
+
--text-base: 15px;
|
|
43
|
+
--text-lg: 18px;
|
|
44
|
+
--text-xl: 24px;
|
|
45
|
+
--text-2xl: 32px;
|
|
46
|
+
--text-3xl: 40px;
|
|
47
|
+
--text-4xl: 56px;
|
|
48
|
+
|
|
49
|
+
--leading-body: 1.5;
|
|
50
|
+
--leading-tight: 1.15;
|
|
51
|
+
--tracking-display: -0.01em;
|
|
52
|
+
|
|
53
|
+
--space-1: 4px;
|
|
54
|
+
--space-2: 8px;
|
|
55
|
+
--space-3: 12px;
|
|
56
|
+
--space-4: 16px;
|
|
57
|
+
--space-5: 20px;
|
|
58
|
+
--space-6: 24px;
|
|
59
|
+
--space-8: 32px;
|
|
60
|
+
--space-12: 48px;
|
|
61
|
+
|
|
62
|
+
--section-y-desktop: 80px;
|
|
63
|
+
--section-y-tablet: 56px;
|
|
64
|
+
--section-y-phone: 40px;
|
|
65
|
+
|
|
66
|
+
--radius-sm: 12px;
|
|
67
|
+
--radius-md: 16px;
|
|
68
|
+
--radius-lg: 20px;
|
|
69
|
+
--radius-pill: 9999px;
|
|
70
|
+
|
|
71
|
+
--elev-flat: none;
|
|
72
|
+
--elev-ring: 0 0 0 2px var(--border);
|
|
73
|
+
--elev-raised: 0 4px 0 #d7d7d7;
|
|
74
|
+
|
|
75
|
+
--focus-ring: 0 0 0 3px rgba(28, 176, 246, 0.2);
|
|
76
|
+
|
|
77
|
+
--motion-fast: 180ms;
|
|
78
|
+
--motion-base: 320ms;
|
|
79
|
+
--ease-standard: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
80
|
+
|
|
81
|
+
--container-max: 1080px;
|
|
82
|
+
--container-gutter-desktop: 24px;
|
|
83
|
+
--container-gutter-tablet: 20px;
|
|
84
|
+
--container-gutter-phone: 16px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* ─── Reset ─────────────────────────────────────────────── */
|
|
88
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
89
|
+
html, body { margin: 0; padding: 0; }
|
|
90
|
+
body {
|
|
91
|
+
background: var(--bg);
|
|
92
|
+
color: var(--fg);
|
|
93
|
+
font-family: var(--font-body);
|
|
94
|
+
font-size: var(--text-base);
|
|
95
|
+
line-height: var(--leading-body);
|
|
96
|
+
-webkit-font-smoothing: antialiased;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* ─── Layout ────────────────────────────────────────────── */
|
|
100
|
+
.container {
|
|
101
|
+
max-width: var(--container-max);
|
|
102
|
+
margin-inline: auto;
|
|
103
|
+
padding-inline: var(--container-gutter-desktop);
|
|
104
|
+
}
|
|
105
|
+
section { padding-block: var(--section-y-desktop); }
|
|
106
|
+
section + section { border-top: 2px solid var(--border); }
|
|
107
|
+
@media (max-width: 1023px) {
|
|
108
|
+
.container { padding-inline: var(--container-gutter-tablet); }
|
|
109
|
+
section { padding-block: var(--section-y-tablet); }
|
|
110
|
+
}
|
|
111
|
+
@media (max-width: 639px) {
|
|
112
|
+
.container { padding-inline: var(--container-gutter-phone); }
|
|
113
|
+
section { padding-block: var(--section-y-phone); }
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* ─── Typography — Feather Bold @ 800 across chrome ─────── */
|
|
117
|
+
h1, h2, h3 {
|
|
118
|
+
font-family: var(--font-display);
|
|
119
|
+
font-weight: 800;
|
|
120
|
+
line-height: var(--leading-tight);
|
|
121
|
+
margin: 0;
|
|
122
|
+
color: var(--fg);
|
|
123
|
+
}
|
|
124
|
+
h1 {
|
|
125
|
+
font-size: var(--text-4xl);
|
|
126
|
+
letter-spacing: var(--tracking-display);
|
|
127
|
+
line-height: 1.05;
|
|
128
|
+
}
|
|
129
|
+
h2 { font-size: var(--text-2xl); letter-spacing: -0.005em; }
|
|
130
|
+
h3 { font-size: var(--text-lg); font-weight: 700; line-height: 1.25; }
|
|
131
|
+
p { margin: 0; }
|
|
132
|
+
.lead { font-size: var(--text-lg); color: var(--fg); line-height: var(--leading-body); }
|
|
133
|
+
.body-muted { color: var(--muted); }
|
|
134
|
+
.body-meta { color: var(--meta); }
|
|
135
|
+
.body-sm { font-size: var(--text-sm); }
|
|
136
|
+
.eyebrow {
|
|
137
|
+
display: inline-block;
|
|
138
|
+
font-family: var(--font-display);
|
|
139
|
+
font-size: var(--text-xs);
|
|
140
|
+
color: var(--accent-active);
|
|
141
|
+
background: color-mix(in oklab, var(--accent), transparent 82%);
|
|
142
|
+
text-transform: uppercase;
|
|
143
|
+
letter-spacing: 0.08em;
|
|
144
|
+
font-weight: 800;
|
|
145
|
+
padding: var(--space-1) var(--space-3);
|
|
146
|
+
border-radius: var(--radius-pill);
|
|
147
|
+
}
|
|
148
|
+
.stack-2 > * + * { margin-block-start: var(--space-2); }
|
|
149
|
+
.stack-3 > * + * { margin-block-start: var(--space-3); }
|
|
150
|
+
.stack-4 > * + * { margin-block-start: var(--space-4); }
|
|
151
|
+
.stack-6 > * + * { margin-block-start: var(--space-6); }
|
|
152
|
+
|
|
153
|
+
/* ─── Buttons — chunky 4px bottom-shadow tactile press ──── */
|
|
154
|
+
.btn {
|
|
155
|
+
display: inline-flex;
|
|
156
|
+
align-items: center;
|
|
157
|
+
justify-content: center;
|
|
158
|
+
gap: var(--space-2);
|
|
159
|
+
padding: 14px var(--space-6);
|
|
160
|
+
border-radius: var(--radius-md);
|
|
161
|
+
font-family: var(--font-display);
|
|
162
|
+
font-size: var(--text-base);
|
|
163
|
+
font-weight: 800;
|
|
164
|
+
line-height: 1.2;
|
|
165
|
+
letter-spacing: 0.04em;
|
|
166
|
+
text-transform: uppercase;
|
|
167
|
+
cursor: pointer;
|
|
168
|
+
border: none;
|
|
169
|
+
text-decoration: none;
|
|
170
|
+
transition:
|
|
171
|
+
background-color var(--motion-fast) var(--ease-standard),
|
|
172
|
+
transform var(--motion-fast) var(--ease-standard),
|
|
173
|
+
box-shadow var(--motion-fast) var(--ease-standard);
|
|
174
|
+
}
|
|
175
|
+
.btn:focus-visible { outline: none; box-shadow: var(--focus-ring); }
|
|
176
|
+
|
|
177
|
+
/* Primary — Owl Green with darker green underside */
|
|
178
|
+
.btn-primary {
|
|
179
|
+
background: var(--accent);
|
|
180
|
+
color: var(--accent-on);
|
|
181
|
+
box-shadow: 0 4px 0 var(--accent-active);
|
|
182
|
+
}
|
|
183
|
+
.btn-primary:hover { background: var(--accent-hover); }
|
|
184
|
+
.btn-primary:active {
|
|
185
|
+
transform: translateY(4px);
|
|
186
|
+
box-shadow: 0 0 0 var(--accent-active);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Secondary — White with neutral underside */
|
|
190
|
+
.btn-secondary {
|
|
191
|
+
background: var(--bg);
|
|
192
|
+
color: var(--muted);
|
|
193
|
+
border: 2px solid var(--border);
|
|
194
|
+
box-shadow: 0 4px 0 var(--border);
|
|
195
|
+
padding: 12px calc(var(--space-6) - 2px);
|
|
196
|
+
}
|
|
197
|
+
.btn-secondary:hover { color: var(--fg); border-color: var(--meta); }
|
|
198
|
+
.btn-secondary:active {
|
|
199
|
+
transform: translateY(4px);
|
|
200
|
+
box-shadow: 0 0 0 var(--border);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* Streak — Bee Yellow with warm underside */
|
|
204
|
+
.btn-streak {
|
|
205
|
+
background: var(--warn);
|
|
206
|
+
color: var(--fg);
|
|
207
|
+
box-shadow: 0 4px 0 color-mix(in oklab, var(--warn), black 18%);
|
|
208
|
+
}
|
|
209
|
+
.btn-streak:hover { background: color-mix(in oklab, var(--warn), white 8%); }
|
|
210
|
+
.btn-streak:active {
|
|
211
|
+
transform: translateY(4px);
|
|
212
|
+
box-shadow: 0 0 0 color-mix(in oklab, var(--warn), black 18%);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* ─── Inputs — thick borders, soft eel-blue focus glow ─── */
|
|
216
|
+
.field { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
217
|
+
.field label {
|
|
218
|
+
font-family: var(--font-display);
|
|
219
|
+
font-size: var(--text-sm);
|
|
220
|
+
font-weight: 800;
|
|
221
|
+
color: var(--fg);
|
|
222
|
+
text-transform: uppercase;
|
|
223
|
+
letter-spacing: 0.06em;
|
|
224
|
+
}
|
|
225
|
+
.field input {
|
|
226
|
+
padding: 14px var(--space-4);
|
|
227
|
+
border-radius: var(--radius-sm);
|
|
228
|
+
border: 2px solid var(--border);
|
|
229
|
+
background: var(--bg);
|
|
230
|
+
color: var(--fg);
|
|
231
|
+
font-family: var(--font-body);
|
|
232
|
+
font-size: var(--text-base);
|
|
233
|
+
outline: none;
|
|
234
|
+
transition:
|
|
235
|
+
border-color var(--motion-fast) var(--ease-standard),
|
|
236
|
+
box-shadow var(--motion-fast) var(--ease-standard);
|
|
237
|
+
}
|
|
238
|
+
.field input::placeholder { color: var(--meta); }
|
|
239
|
+
.field input:hover { border-color: var(--meta); }
|
|
240
|
+
.field input:focus-visible {
|
|
241
|
+
border-color: var(--accent);
|
|
242
|
+
box-shadow: var(--focus-ring);
|
|
243
|
+
}
|
|
244
|
+
.field-help { font-size: var(--text-xs); color: var(--muted); }
|
|
245
|
+
|
|
246
|
+
/* ─── Cards / Lesson tiles — chunky offset shadow ───────── */
|
|
247
|
+
.card {
|
|
248
|
+
background: var(--bg);
|
|
249
|
+
border: 2px solid var(--border);
|
|
250
|
+
border-radius: var(--radius-md);
|
|
251
|
+
padding: var(--space-6);
|
|
252
|
+
display: flex;
|
|
253
|
+
flex-direction: column;
|
|
254
|
+
gap: var(--space-3);
|
|
255
|
+
box-shadow: var(--elev-raised);
|
|
256
|
+
transition:
|
|
257
|
+
transform var(--motion-fast) var(--ease-standard),
|
|
258
|
+
box-shadow var(--motion-fast) var(--ease-standard);
|
|
259
|
+
}
|
|
260
|
+
.card:hover {
|
|
261
|
+
transform: translateY(-2px);
|
|
262
|
+
box-shadow: 0 6px 0 #d7d7d7;
|
|
263
|
+
}
|
|
264
|
+
.card-icon {
|
|
265
|
+
width: 56px;
|
|
266
|
+
height: 56px;
|
|
267
|
+
border-radius: var(--radius-pill);
|
|
268
|
+
display: inline-flex;
|
|
269
|
+
align-items: center;
|
|
270
|
+
justify-content: center;
|
|
271
|
+
color: var(--accent-on);
|
|
272
|
+
font-family: var(--font-display);
|
|
273
|
+
font-weight: 800;
|
|
274
|
+
font-size: var(--text-xl);
|
|
275
|
+
box-shadow: 0 3px 0 color-mix(in oklab, currentColor, black 22%);
|
|
276
|
+
}
|
|
277
|
+
.card-icon-green { background: var(--accent); }
|
|
278
|
+
.card-icon-red { background: var(--danger); }
|
|
279
|
+
.card-icon-yellow { background: var(--warn); color: var(--fg); }
|
|
280
|
+
|
|
281
|
+
/* ─── Badges + chips ────────────────────────────────────── */
|
|
282
|
+
.badge {
|
|
283
|
+
display: inline-flex;
|
|
284
|
+
align-items: center;
|
|
285
|
+
gap: var(--space-2);
|
|
286
|
+
padding: var(--space-1) var(--space-3);
|
|
287
|
+
border-radius: var(--radius-pill);
|
|
288
|
+
font-family: var(--font-display);
|
|
289
|
+
font-size: var(--text-xs);
|
|
290
|
+
font-weight: 800;
|
|
291
|
+
letter-spacing: 0.04em;
|
|
292
|
+
line-height: 1.6;
|
|
293
|
+
text-transform: uppercase;
|
|
294
|
+
}
|
|
295
|
+
.badge-success { color: var(--accent-on); background: var(--success); }
|
|
296
|
+
.badge-streak { color: var(--fg); background: var(--warn); }
|
|
297
|
+
.badge-muted { color: var(--muted); background: var(--surface); border: 2px solid var(--border); }
|
|
298
|
+
.badge-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
|
|
299
|
+
|
|
300
|
+
/* ─── Progress bar ──────────────────────────────────────── */
|
|
301
|
+
.progress {
|
|
302
|
+
position: relative;
|
|
303
|
+
background: var(--border);
|
|
304
|
+
border-radius: var(--radius-pill);
|
|
305
|
+
height: 16px;
|
|
306
|
+
overflow: hidden;
|
|
307
|
+
}
|
|
308
|
+
.progress > .progress-fill {
|
|
309
|
+
height: 100%;
|
|
310
|
+
width: 64%;
|
|
311
|
+
background: var(--accent);
|
|
312
|
+
border-radius: var(--radius-pill);
|
|
313
|
+
box-shadow: inset 0 -4px 0 var(--accent-active);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* ─── Mascot panel ──────────────────────────────────────── */
|
|
317
|
+
.mascot-card {
|
|
318
|
+
background: var(--surface);
|
|
319
|
+
border: 2px solid var(--border);
|
|
320
|
+
border-radius: var(--radius-lg);
|
|
321
|
+
padding: var(--space-6);
|
|
322
|
+
display: flex;
|
|
323
|
+
flex-direction: column;
|
|
324
|
+
gap: var(--space-4);
|
|
325
|
+
box-shadow: var(--elev-raised);
|
|
326
|
+
}
|
|
327
|
+
.mascot-row {
|
|
328
|
+
display: flex;
|
|
329
|
+
align-items: center;
|
|
330
|
+
gap: var(--space-4);
|
|
331
|
+
}
|
|
332
|
+
.mascot-svg {
|
|
333
|
+
width: 96px;
|
|
334
|
+
height: 96px;
|
|
335
|
+
flex-shrink: 0;
|
|
336
|
+
filter: drop-shadow(0 3px 0 var(--accent-active));
|
|
337
|
+
}
|
|
338
|
+
.row-between { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); }
|
|
339
|
+
|
|
340
|
+
/* ─── Links + kbd ───────────────────────────────────────── */
|
|
341
|
+
a { color: var(--accent-active); text-decoration: none; font-weight: 700; }
|
|
342
|
+
a:hover { text-decoration: underline; text-underline-offset: 3px; }
|
|
343
|
+
kbd {
|
|
344
|
+
font-family: var(--font-mono);
|
|
345
|
+
font-size: var(--text-xs);
|
|
346
|
+
padding: 2px var(--space-2);
|
|
347
|
+
border-radius: var(--radius-sm);
|
|
348
|
+
border: 2px solid var(--border);
|
|
349
|
+
background: var(--bg);
|
|
350
|
+
color: var(--muted);
|
|
351
|
+
box-shadow: 0 2px 0 var(--border);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/* ─── Layout helpers ────────────────────────────────────── */
|
|
355
|
+
.hero-grid {
|
|
356
|
+
display: grid;
|
|
357
|
+
grid-template-columns: 1.4fr 1fr;
|
|
358
|
+
gap: var(--space-12);
|
|
359
|
+
align-items: center;
|
|
360
|
+
}
|
|
361
|
+
@media (max-width: 1023px) {
|
|
362
|
+
.hero-grid { grid-template-columns: 1fr; gap: var(--space-8); }
|
|
363
|
+
}
|
|
364
|
+
.hero-actions {
|
|
365
|
+
display: flex;
|
|
366
|
+
gap: var(--space-3);
|
|
367
|
+
margin-block-start: var(--space-6);
|
|
368
|
+
flex-wrap: wrap;
|
|
369
|
+
}
|
|
370
|
+
.features-grid {
|
|
371
|
+
display: grid;
|
|
372
|
+
grid-template-columns: repeat(3, 1fr);
|
|
373
|
+
gap: var(--space-5);
|
|
374
|
+
}
|
|
375
|
+
@media (max-width: 1023px) { .features-grid { grid-template-columns: 1fr 1fr; } }
|
|
376
|
+
@media (max-width: 639px) { .features-grid { grid-template-columns: 1fr; } }
|
|
377
|
+
.form-row {
|
|
378
|
+
display: grid;
|
|
379
|
+
grid-template-columns: 1.2fr 1fr;
|
|
380
|
+
gap: var(--space-12);
|
|
381
|
+
align-items: start;
|
|
382
|
+
}
|
|
383
|
+
@media (max-width: 1023px) { .form-row { grid-template-columns: 1fr; } }
|
|
384
|
+
.form {
|
|
385
|
+
display: flex;
|
|
386
|
+
flex-direction: column;
|
|
387
|
+
gap: var(--space-4);
|
|
388
|
+
max-width: 420px;
|
|
389
|
+
background: var(--bg);
|
|
390
|
+
border: 2px solid var(--border);
|
|
391
|
+
border-radius: var(--radius-md);
|
|
392
|
+
padding: var(--space-6);
|
|
393
|
+
box-shadow: var(--elev-raised);
|
|
394
|
+
}
|
|
395
|
+
.form-actions { display: flex; gap: var(--space-3); margin-block-start: var(--space-2); }
|
|
396
|
+
.icon { width: 18px; height: 18px; flex-shrink: 0; }
|
|
397
|
+
</style>
|
|
398
|
+
</head>
|
|
399
|
+
<body>
|
|
400
|
+
<main class="container">
|
|
401
|
+
<section data-od-id="hero">
|
|
402
|
+
<div class="hero-grid">
|
|
403
|
+
<div class="stack-6">
|
|
404
|
+
<span class="eyebrow">Reference fixture · duolingo</span>
|
|
405
|
+
<div class="stack-4">
|
|
406
|
+
<h1>Free language learning for the world.</h1>
|
|
407
|
+
<p class="lead" style="max-width: 48ch">
|
|
408
|
+
15 minutes a day can teach you a language. Practice with bite-sized lessons,
|
|
409
|
+
keep your streak alive, and let Duo the owl cheer you on every step of the way.
|
|
410
|
+
</p>
|
|
411
|
+
</div>
|
|
412
|
+
<div class="hero-actions">
|
|
413
|
+
<a href="./tokens.css" class="btn btn-primary">
|
|
414
|
+
Get started — it's free
|
|
415
|
+
<svg class="icon" viewBox="0 0 24 24" fill="none"
|
|
416
|
+
stroke="currentColor" stroke-width="3"
|
|
417
|
+
stroke-linecap="round" stroke-linejoin="round"
|
|
418
|
+
aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
|
|
419
|
+
</a>
|
|
420
|
+
<a href="./DESIGN.md" class="btn btn-secondary">I already have an account</a>
|
|
421
|
+
</div>
|
|
422
|
+
</div>
|
|
423
|
+
<aside class="mascot-card" aria-label="Today's lesson">
|
|
424
|
+
<div class="mascot-row">
|
|
425
|
+
<svg class="mascot-svg" viewBox="0 0 96 96" aria-hidden="true">
|
|
426
|
+
<ellipse cx="48" cy="58" rx="34" ry="32" fill="var(--accent)"/>
|
|
427
|
+
<ellipse cx="48" cy="58" rx="22" ry="22" fill="color-mix(in oklab, var(--accent), white 22%)"/>
|
|
428
|
+
<circle cx="36" cy="46" r="9" fill="#ffffff"/>
|
|
429
|
+
<circle cx="60" cy="46" r="9" fill="#ffffff"/>
|
|
430
|
+
<circle cx="36" cy="48" r="4.5" fill="var(--fg)"/>
|
|
431
|
+
<circle cx="60" cy="48" r="4.5" fill="var(--fg)"/>
|
|
432
|
+
<circle cx="34.5" cy="46.5" r="1.6" fill="#ffffff"/>
|
|
433
|
+
<circle cx="58.5" cy="46.5" r="1.6" fill="#ffffff"/>
|
|
434
|
+
<path d="M40 60 L48 67 L56 60 Z" fill="var(--warn)"/>
|
|
435
|
+
<path d="M22 32 Q30 18 42 26" fill="none" stroke="var(--accent-active)" stroke-width="6" stroke-linecap="round"/>
|
|
436
|
+
<path d="M74 32 Q66 18 54 26" fill="none" stroke="var(--accent-active)" stroke-width="6" stroke-linecap="round"/>
|
|
437
|
+
</svg>
|
|
438
|
+
<div class="stack-2">
|
|
439
|
+
<h3>Spanish · Unit 3</h3>
|
|
440
|
+
<p class="body-sm body-muted">Order food at the café</p>
|
|
441
|
+
</div>
|
|
442
|
+
</div>
|
|
443
|
+
<div class="stack-2">
|
|
444
|
+
<div class="row-between">
|
|
445
|
+
<span class="body-sm" style="font-family: var(--font-display); font-weight: 800">Lesson progress</span>
|
|
446
|
+
<span class="body-sm" style="color: var(--muted)">3 / 5 crowns</span>
|
|
447
|
+
</div>
|
|
448
|
+
<div class="progress" aria-label="Lesson progress 64%">
|
|
449
|
+
<div class="progress-fill"></div>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
<div class="row-between">
|
|
453
|
+
<span class="badge badge-streak">
|
|
454
|
+
<span class="badge-dot" aria-hidden="true"></span>
|
|
455
|
+
14 day streak
|
|
456
|
+
</span>
|
|
457
|
+
<span class="body-sm" style="color: var(--muted)">+15 XP today</span>
|
|
458
|
+
</div>
|
|
459
|
+
</aside>
|
|
460
|
+
</div>
|
|
461
|
+
</section>
|
|
462
|
+
|
|
463
|
+
<section data-od-id="features">
|
|
464
|
+
<div class="stack-3">
|
|
465
|
+
<span class="eyebrow">What this fixture exercises</span>
|
|
466
|
+
<h2 style="max-width: 22ch">Joy is the curriculum.</h2>
|
|
467
|
+
<p class="body-muted" style="max-width: 56ch">
|
|
468
|
+
Every surface is built for the next correct answer — green to celebrate,
|
|
469
|
+
chunky shadows to invite the press, and Duo waiting on the other side.
|
|
470
|
+
</p>
|
|
471
|
+
</div>
|
|
472
|
+
<div class="features-grid" style="margin-block-start: var(--space-8)">
|
|
473
|
+
<article class="card">
|
|
474
|
+
<span class="card-icon card-icon-green" aria-hidden="true">✓</span>
|
|
475
|
+
<h3>Owl green throughout</h3>
|
|
476
|
+
<p class="body-muted body-sm">
|
|
477
|
+
--accent (#58cc02) covers 30%+ of every screen. Primary CTA, correct
|
|
478
|
+
answer, progress fill — they're all the same affirming green.
|
|
479
|
+
</p>
|
|
480
|
+
<a href="./tokens.css" class="body-sm">Inspect tokens →</a>
|
|
481
|
+
</article>
|
|
482
|
+
<article class="card">
|
|
483
|
+
<span class="card-icon card-icon-yellow" aria-hidden="true">★</span>
|
|
484
|
+
<h3>Tactile 4px shadow</h3>
|
|
485
|
+
<p class="body-muted body-sm">
|
|
486
|
+
--elev-raised drops a hard 4px offset under every button. On :active
|
|
487
|
+
we translateY(4px) and zero the shadow — the button literally presses.
|
|
488
|
+
</p>
|
|
489
|
+
<a href="./DESIGN.md" class="body-sm">Read the rule →</a>
|
|
490
|
+
</article>
|
|
491
|
+
<article class="card">
|
|
492
|
+
<span class="card-icon card-icon-red" aria-hidden="true">!</span>
|
|
493
|
+
<h3>Big confident type</h3>
|
|
494
|
+
<p class="body-muted body-sm">
|
|
495
|
+
--text-4xl (56px) is +25% over typical product brands. Feather Bold at
|
|
496
|
+
800 is the default — we never whisper, we never apologize for size.
|
|
497
|
+
</p>
|
|
498
|
+
<a href="./tokens.css" class="body-sm">Inspect ladder →</a>
|
|
499
|
+
</article>
|
|
500
|
+
</div>
|
|
501
|
+
</section>
|
|
502
|
+
|
|
503
|
+
<section data-od-id="form">
|
|
504
|
+
<div class="form-row">
|
|
505
|
+
<div class="stack-4">
|
|
506
|
+
<span class="eyebrow">Start your streak</span>
|
|
507
|
+
<h2>One inbox is all it takes.</h2>
|
|
508
|
+
<p class="body-muted" style="max-width: 48ch">
|
|
509
|
+
We'll send a friendly nudge when Duo notices you missed a day. No tricks,
|
|
510
|
+
no spam — just the kind of gentle accountability that turns 15 minutes
|
|
511
|
+
into a year-long habit.
|
|
512
|
+
</p>
|
|
513
|
+
<p class="body-meta body-sm">
|
|
514
|
+
Press <kbd>⌘</kbd> <kbd>K</kbd> to search the lesson library.
|
|
515
|
+
</p>
|
|
516
|
+
</div>
|
|
517
|
+
<form class="form" onsubmit="event.preventDefault();">
|
|
518
|
+
<div class="field">
|
|
519
|
+
<label for="email">Email</label>
|
|
520
|
+
<input id="email" type="email" placeholder="you@duolingo.com" autocomplete="email" required />
|
|
521
|
+
<p class="field-help">Free forever · 600M+ learners worldwide</p>
|
|
522
|
+
</div>
|
|
523
|
+
<div class="form-actions">
|
|
524
|
+
<button type="submit" class="btn btn-primary">Create account</button>
|
|
525
|
+
<button type="button" class="btn btn-secondary">Sign in</button>
|
|
526
|
+
</div>
|
|
527
|
+
</form>
|
|
528
|
+
</div>
|
|
529
|
+
</section>
|
|
530
|
+
</main>
|
|
531
|
+
</body>
|
|
532
|
+
</html>
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/* ─────────────────────────────────────────────────────────────────────────
|
|
2
|
+
* design-systems/duolingo/tokens.css
|
|
3
|
+
*
|
|
4
|
+
* Structured token bindings for "Design System Inspired by Duolingo".
|
|
5
|
+
* Bright owl-green gamified universe: chunky 4px bottom-shadows, big
|
|
6
|
+
* confident type, friendly pill geometry, mascot-driven warmth.
|
|
7
|
+
*
|
|
8
|
+
* Key brand decisions encoded here:
|
|
9
|
+
* - Owl Green (#58cc02) — dominant brand color, primary CTA + correct answer
|
|
10
|
+
* - Snow white canvas (#ffffff) — never tinted; optical clarity is the foundation
|
|
11
|
+
* - 4px chunky offset shadow (--elev-raised) — the "tactile press" signature
|
|
12
|
+
* - Feather Bold + Mona Sans — rounded display + Swiss workhorse body
|
|
13
|
+
* - Display starts at 56px — Duolingo never whispers; size is identity
|
|
14
|
+
* - Pill-and-rounded radii — 16px cards, 12px buttons/inputs, 9999px chips
|
|
15
|
+
* - Spring easing (back-out, slight overshoot) — gamified joy in motion
|
|
16
|
+
* - Eel-blue focus ring (#1cb0f6 tinted) — playful contrast to the green brand
|
|
17
|
+
* ─────────────────────────────────────────────────────────────────── */
|
|
18
|
+
|
|
19
|
+
:root {
|
|
20
|
+
/* ─── Surface ─────────────────────────────────────────────────────
|
|
21
|
+
* Snow white canvas with Eel as the section-break tone. Pure optical
|
|
22
|
+
* clarity — Duolingo never tints the page itself, only the chrome. */
|
|
23
|
+
--bg: #ffffff; /* Snow — primary background, the page canvas */
|
|
24
|
+
--surface: #f7f7f7; /* Eel — section break, secondary surface, lesson row */
|
|
25
|
+
--surface-warm: var(--surface); /* alias — palette has no third (warm) surface tier */
|
|
26
|
+
|
|
27
|
+
/* ─── Foreground ──────────────────────────────────────────────────
|
|
28
|
+
* Three real text tiers: Eel Black for primary, Wolf for secondary,
|
|
29
|
+
* Hare for tertiary. Each tier carries clear, child-readable contrast. */
|
|
30
|
+
--fg: #3c3c3c; /* Eel Black — primary text, headings, button labels */
|
|
31
|
+
--fg-2: var(--fg); /* alias — single primary text weight throughout */
|
|
32
|
+
--muted: #777777; /* Wolf — secondary text, captions, dividers */
|
|
33
|
+
--meta: #afafaf; /* Hare — tertiary metadata, placeholder, disabled */
|
|
34
|
+
|
|
35
|
+
/* ─── Border ──────────────────────────────────────────────────────
|
|
36
|
+
* Swan grey at thick 2–3px on most surfaces. Borders are visual,
|
|
37
|
+
* never hairlines — they read as part of the chunky aesthetic. */
|
|
38
|
+
--border: #e5e5e5; /* Swan — standard 2px border, card edge */
|
|
39
|
+
--border-soft: var(--border); /* alias — single border tier (no inner-row separation) */
|
|
40
|
+
|
|
41
|
+
/* ─── Accent ──────────────────────────────────────────────────────
|
|
42
|
+
* Owl Green — the brand IS this green. Used liberally in 30%+ of the
|
|
43
|
+
* surface for buttons, progress bars, success states, brand chrome. */
|
|
44
|
+
--accent: #58cc02;
|
|
45
|
+
--accent-on: #ffffff;
|
|
46
|
+
--accent-hover: #89e219; /* Owl Green Light — hover state, soft fills */
|
|
47
|
+
--accent-active: #58a700; /* Owl Green Deep — pressed state, the chunky shadow color */
|
|
48
|
+
|
|
49
|
+
/* ─── Semantic ────────────────────────────────────────────────────
|
|
50
|
+
* Success IS owl green — DESIGN.md: "primary CTA, correct answer" are
|
|
51
|
+
* the same affordance. Bee Yellow warns; Cardinal Red marks wrong. */
|
|
52
|
+
--success: #58cc02; /* Owl Green — "correct answer" is the brand */
|
|
53
|
+
--warn: #ffc800; /* Bee Yellow — pro badge, achievement glow */
|
|
54
|
+
--danger: #ff4b4b; /* Cardinal Red — wrong answer, life lost */
|
|
55
|
+
|
|
56
|
+
/* ─── Typography ──────────────────────────────────────────────────
|
|
57
|
+
* Feather Bold (rounded display) drives chrome and headings; Mona Sans
|
|
58
|
+
* carries body. Default weight is 800 — Duolingo never whispers. */
|
|
59
|
+
--font-display: "Feather Bold", "DIN Round Pro", "Helvetica Neue", sans-serif;
|
|
60
|
+
--font-body: "Mona Sans", "Helvetica Neue", system-ui, sans-serif;
|
|
61
|
+
--font-mono: "JetBrains Mono", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
62
|
+
|
|
63
|
+
/* Type scale — DESIGN.md §3. Display 56px is +25–40% above typical
|
|
64
|
+
* product brands; the ladder favors round whole-pixel sizes. */
|
|
65
|
+
--text-xs: 12px; /* Tiny utility, progress numerals */
|
|
66
|
+
--text-sm: 13px; /* Caption — XP counter, metadata */
|
|
67
|
+
--text-base: 15px; /* Body — standard prose */
|
|
68
|
+
--text-lg: 18px; /* H3 / lesson row title / featured body */
|
|
69
|
+
--text-xl: 24px; /* H2 — section heading */
|
|
70
|
+
--text-2xl: 32px; /* H1 — page title */
|
|
71
|
+
--text-3xl: 40px; /* Sub-display — hero secondary, marketing eyebrow */
|
|
72
|
+
--text-4xl: 56px; /* Display — onboarding hero, never timid */
|
|
73
|
+
|
|
74
|
+
--leading-body: 1.5;
|
|
75
|
+
--leading-tight: 1.15; /* Headings — slight breathing under big rounded faces */
|
|
76
|
+
--tracking-display: -0.01em; /* ≈ -0.56px at 56px — confident, not condensed */
|
|
77
|
+
|
|
78
|
+
/* ─── Spacing ─────────────────────────────────────────────────────
|
|
79
|
+
* 4px base unit (DESIGN.md §5): 4, 8, 12, 16, 20, 24, 32, 48. */
|
|
80
|
+
--space-1: 4px;
|
|
81
|
+
--space-2: 8px;
|
|
82
|
+
--space-3: 12px;
|
|
83
|
+
--space-4: 16px;
|
|
84
|
+
--space-5: 20px;
|
|
85
|
+
--space-6: 24px;
|
|
86
|
+
--space-8: 32px;
|
|
87
|
+
--space-12: 48px;
|
|
88
|
+
|
|
89
|
+
/* Section rhythm — generous on desktop, tight on phone so the lesson
|
|
90
|
+
* tree column reads as a continuous flow rather than chunked pages. */
|
|
91
|
+
--section-y-desktop: 80px;
|
|
92
|
+
--section-y-tablet: 56px;
|
|
93
|
+
--section-y-phone: 40px;
|
|
94
|
+
|
|
95
|
+
/* ─── Radius ──────────────────────────────────────────────────────
|
|
96
|
+
* Pill-and-rounded everywhere. Cards 16px (DESIGN.md §4), buttons +
|
|
97
|
+
* inputs 12px, chips and progress bars 9999px — friendly forever. */
|
|
98
|
+
--radius-sm: 12px; /* Inputs, buttons — friendly compact corners */
|
|
99
|
+
--radius-md: 16px; /* Cards, lesson tiles — primary signature */
|
|
100
|
+
--radius-lg: 20px; /* Featured containers, modals */
|
|
101
|
+
--radius-pill: 9999px; /* Chips, progress bars, avatars */
|
|
102
|
+
|
|
103
|
+
/* ─── Elevation ───────────────────────────────────────────────────
|
|
104
|
+
* Chunky 4px bottom-shadow IS Duolingo. Buttons and cards cast a hard
|
|
105
|
+
* offset shadow that reads as a 3D button waiting to be pressed. The
|
|
106
|
+
* raised value pairs with translateY(4px) on :active to "press" it. */
|
|
107
|
+
--elev-flat: none;
|
|
108
|
+
--elev-ring: 0 0 0 2px var(--border); /* 2px ring matches the chunky border weight */
|
|
109
|
+
--elev-raised: 0 4px 0 #d7d7d7; /* Hard tactile shadow — the press affordance */
|
|
110
|
+
|
|
111
|
+
/* ─── Focus ring ──────────────────────────────────────────────────
|
|
112
|
+
* Eel Blue 20% tint (DESIGN.md §4 inputs) — playful contrast against
|
|
113
|
+
* the ambient owl-green brand; signals "you can interact with this". */
|
|
114
|
+
--focus-ring: 0 0 0 3px rgba(28, 176, 246, 0.2);
|
|
115
|
+
|
|
116
|
+
/* ─── Motion ──────────────────────────────────────────────────────
|
|
117
|
+
* 180ms button press, 320ms skill-node unlock; back-out spring with
|
|
118
|
+
* slight overshoot (DESIGN.md §6). Every state change feels gamified. */
|
|
119
|
+
--motion-fast: 180ms;
|
|
120
|
+
--motion-base: 320ms;
|
|
121
|
+
--ease-standard: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
122
|
+
|
|
123
|
+
/* ─── Layout ──────────────────────────────────────────────────────
|
|
124
|
+
* 1080px container (DESIGN.md §5) — narrower than a SaaS deck because
|
|
125
|
+
* Duolingo content reads vertically as a focused lesson tree column. */
|
|
126
|
+
--container-max: 1080px;
|
|
127
|
+
--container-gutter-desktop: 24px;
|
|
128
|
+
--container-gutter-tablet: 20px;
|
|
129
|
+
--container-gutter-phone: 16px;
|
|
130
|
+
}
|