commit 47f63ee3902435f6c1f46bda48c7bb99da1ac86b Author: dk Date: Wed Apr 15 09:58:35 2026 +0000 Initial commit diff --git a/.env b/.env new file mode 100644 index 0000000..f762bcd --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ + + NEXT_PUBLIC_API_URL=https://api.webild.io + NEXT_PUBLIC_PROJECT_ID=5ba6637d-cc62-45b3-b459-eacdb570d950 + \ No newline at end of file diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..9aa1e08 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,37 @@ +name: Code Check + +on: + workflow_dispatch: + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - name: Checkout + run: git clone --depth 1 --branch ${{ gitea.ref_name }} ${{ gitea.server_url }}/${{ gitea.repository }}.git . || exit 1 + + - name: Install dependencies + run: | + if [ -d "/var/node_modules_cache/node_modules" ]; then + ln -s /var/node_modules_cache/node_modules ./node_modules + else + npm ci --prefer-offline --no-audit + fi + timeout-minutes: 5 + + - name: TypeScript check + run: npm run typecheck 2>&1 | tee build.log + timeout-minutes: 3 + + - name: ESLint check + run: npm run lint 2>&1 | tee -a build.log + timeout-minutes: 3 + + - name: Upload build log on failure + if: failure() + uses: actions/upload-artifact@v3 + with: + name: build-log + path: build.log + retention-days: 1 diff --git a/NEW.md b/NEW.md new file mode 100644 index 0000000..27cb6d0 --- /dev/null +++ b/NEW.md @@ -0,0 +1,218 @@ +# AI-Friendly Component Library + +## The Problem + +Current architecture is optimized for human developers (DRY, reusable, flexible) but this makes AI editing fail. AI can't trace through ThemeProvider indirection, 40+ prop interfaces, nested component layers, and custom Tailwind scales. It hallucinates because it can't see the actual output. + +## The Solution + +Shift from human-optimized to AI-optimized code: +- **Explicit over implicit** - All styles visible in file, no ThemeProvider magic +- **Flat over nested** - Direct components, no wrapper layers to trace through +- **Concrete over abstract** - Actual Tailwind classes, not prop names that map to hidden styles +- **Standard over custom** - Default Tailwind values AI already knows +- **Simple over flexible** - One way to do things, not 11 variants + +Components become templates that AI reads, understands, and edits directly. + +--- + +## 1. Backend-Driven Sections + +Generated website repository only contains what is used, plus general UI components. Section components are stored on the backend and injected when needed, not bundled in the boilerplate. + +**Alternative:** If backend approach takes too long, keep all sections in the boilerplate but with the new simplified structure defined below. + +--- + +## 2. Props & Structure + +Remove all styling/className props. AI edits classes directly in the component file. + +**Option A - Minimal props:** Keep text, links, assets, arrays, icons as props. Backend passes content, AI edits props in page file. + +**Option B - No props:** All content hardcoded in section file. Backend injects entire file with content baked in. AI edits section file directly. Maximum explicitness. + +**Flat structure:** Sections use direct components (TextAnimation, Button, MediaContent) not wrapper components like TextBox that nest other components inside. + +--- + +## 3. Framer Motion for Element Animations + +Replace GSAP (ScrollTrigger, `gsap.context()`, `ctx.revert()`) with Framer Motion `motion` divs for cards, buttons, tags, and other elements. Use `whileInView` for scroll-triggered animations. + +--- + +## 4. Simplified Tailwind & Single CSS File + +Remove all custom Tailwind values (spacing, widths, gaps). Use default Tailwind classes. + +**Keep:** +- Content width approach (for page width and carousels) +- Fluid font sizes (AI picks bad font sizes otherwise) + +**One globals.css file with:** +- Color variables in `:root` +- `--radius` variable, applied globally via `@layer base` +- Card styles +- Button styles +- Utility classes (masks, animations) - consolidated, fewer variants +- Base styling (body defaults, scrollbar, heading font-family) + +AI picks from a reference list of available styles and writes them directly to globals.css. + +--- + +## 5. Remove ThemeProvider + +Delete the entire ThemeProvider system. No dynamic style injection. + +**Card/button styles:** AI chooses on backend, adds one card style, one primary button style, one secondary button style to globals.css. + +**Text animations:** Remove TextBox component. Use simple `TextAnimation` component in section files with `text` and `animationType` props. + +**Button:** Single `components/ui/Button.tsx` with `text`, `href`, and `className` (e.g. `primary-button` defined in globals.css). + +**Content width:** Fixed value in globals.css. + +**Text sizing:** Fixed values in globals.css. Future: AI picks from 3 presets on backend and adds to globals.css. + +**Background components:** Remove all (aurora, grid, floatingGradient, etc.). + +**Fonts:** Keep current logic. + +--- + +## 6. New Folder Structure + +``` +src/ +├── app/ # Pages +├── components/ +│ ├── ui/ # Atomic UI components +│ └── [sections] # Section components flat, not nested (injected from backend) +├── hooks/ # Common hooks +├── lib/ # Utilities +└── styles/ + └── globals.css # Single CSS file +``` + +Remove: `providers/themeProvider/`, multiple CSS files, `button/` variants folder, `text/` folder, `background/` folder. + +--- + +## 7. Atomic UI Components + +Add simple, single-purpose components to `components/ui/`: + +Button, TextAnimation, MediaContent, Toggle, Dropdown, Accordion, Avatar, Badge, Breadcrumb, Calendar, Chart, Checkbox, Form, Input, Label, Tooltip + +Expand as needed. + +--- + +## 8. Simplify Complex Components + +**Navbar:** Separate navbar components instead of one with variants. AI chooses which one. Reduce to 4 navbars for now. + +**CardStack → GridLayout:** Replace complex CardStack (mode, gridVariant, carouselThreshold, ~40 props) with simple wrapper. Children as items. Single prop: items per row (3 or 4). Under = grid, over = carousel. Carousel mode keeps controls (prev/next, progress bar). No title/description/animation props - sections handle all that directly. Remove timelines, grid configs, auto-carousel variants for now, refactor later. + +**TextBox:** Remove completely. Use TextAnimation and Button directly in sections. + +--- + +## 9. Consistent File Patterns + +Every section file follows the EXACT same structure. AI sees one section, knows how all work. + +**Template:** +``` +1. IMPORTS (same order: react, framer-motion, ui components, icons) +2. CONTENT (variables at top if Option B) +3. COMPONENT (predictable JSX order) +4. EXPORT (always at bottom) +``` + +**JSX order:** tag → title → description → buttons → media (always same sequence) + +--- + +## 10. Short Files, No Sub-components + +**Line limits:** +- Sections: under 100 lines +- UI components: under 50 lines + +**Key rule:** Don't split into sub-components to achieve this. Sub-components add nesting/indirection. Instead, simplify the section itself. + +If a section is too long, it's too complex. Simplify the design, don't extract parts. + +--- + +## 11. Content at Top + +If using Option B (no props), put all editable content as variables at the very top of the file. + +AI immediately knows: "edit content? check the top." + +--- + +## 12. Remove Complex Components + +Remove overly complex components for now. Add back simplified versions later if needed. + +--- + +## 13. CSS Class Organization + +**Consistent class order:** layout → spacing → sizing → typography → colors → effects + +**Keep className short.** Too many classes = section too complex. Use global CSS (`.card`, `.btn-primary`) for repeated patterns. + +**No dynamic classes in sections.** Avoid `cls(condition && "class")`. Keep it explicit. + +**One line if short, split by category if long.** + +--- + +## Implementation Roadmap + +### Phase 1: Foundation (Delete) +- Delete `providers/themeProvider/` (13 files) +- Delete `components/background/` (27 files) +- Delete `components/Textbox.tsx` +- Delete `components/text/` (GSAP TextAnimation) +- Consolidate all CSS → single `styles/globals.css` + +### Phase 2: Core Simplification +- Button → single `ui/Button.tsx` (50 lines max) +- Navbar → 4 separate components, no animation hooks +- TextAnimation → new Framer Motion version +- CardStack → simple GridLayout wrapper + +### Phase 3: Section Refactoring +- Remove all className/containerClassName props +- Remove useTheme() calls +- Each section under 100 lines +- Content variables at top (if Option B) +- Flat structure, no nested wrappers + +### Phase 4: Organize +- Create `components/ui/` with atomic components +- Move hooks to `hooks/` folder +- Update all imports + +--- + +## Current → Target + +| Metric | Current | Target | +|--------|---------|--------| +| Total files | ~270 | ~100 | +| Lines of code | ~25,000 | ~10,000 | +| Props per section | 20-40 | 5-10 | +| CSS files | 37 | 1 | +| Button variants | 11 | 1 | +| Navbar variants | 5 | 4 | + +--- diff --git a/README.md b/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/THEME_PROVIDER_OPTIONS.txt b/THEME_PROVIDER_OPTIONS.txt new file mode 100644 index 0000000..92415cc --- /dev/null +++ b/THEME_PROVIDER_OPTIONS.txt @@ -0,0 +1,117 @@ +================================================================================ + THEME PROVIDER OPTIONS +================================================================================ + +PROPS (All Required except showBlurBottom) +------------------------------------------- + +1. defaultButtonVariant + • "hover-magnetic" + • "hover-bubble" + • "expand-hover" + • "elastic-effect" + • "bounce-effect" + • "icon-arrow" + • "shift-hover" + • "text-stagger" + • "text-shift" + • "directional-hover" + +2. defaultTextAnimation + • "entrance-slide" + • "reveal-blur" + • "background-highlight" + +3. borderRadius + • "rounded" + • "soft" + • "pill" + +4. contentWidth + • "small" + • "smallMedium" + • "compact" + • "mediumSmall" + • "medium" + • "mediumLarge" + +5. sizing + • "medium" + • "mediumLarge" + • "largeSmall" + • "large" + • "mediumSizeLargeTitles" + • "mediumLargeSizeLargeTitles" + • "largeSmallSizeLargeTitles" + • "largeSizeMediumTitles" + • "mediumLargeSizeMediumTitles" + • "largeSmallSizeMediumTitles" + +6. background + • "none" + • "circleGradient" + • "aurora" + • "floatingGradient" + • "noise" + • "noiseDiagonalGradient" + • "fluid" + • "blurBottom" + • "grid" + +7. cardStyle + • "solid" + • "outline" + • "gradient-mesh" + • "gradient-radial" + • "inset" + • "glass-elevated" + • "glass-depth" + • "gradient-bordered" + • "layered-gradient" + • "soft-shadow" + • "subtle-shadow" + +8. primaryButtonStyle + • "gradient" + • "shadow" + • "flat" + • "radial-glow" + • "diagonal-gradient" + • "double-inset" + • "primary-glow" + +9. secondaryButtonStyle + • "glass" + • "solid" + • "layered" + • "radial-glow" + +10. headingFontWeight + • "light" + • "normal" + • "medium" + • "semibold" + • "bold" + • "extrabold" + +================================================================================ + +EXAMPLE USAGE: + + + {children} + + +================================================================================ diff --git a/colorThemes.css b/colorThemes.css new file mode 100644 index 0000000..43d4f5a --- /dev/null +++ b/colorThemes.css @@ -0,0 +1,804 @@ +/* ============================================ */ +/* LIGHT THEME VARIANTS */ +/* ============================================ */ + +/* Light Theme - Minimal Dark Blue */ +:root[data-theme="minimal-dark-blue"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #000612e6; + --primary-cta: #15479c; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #000612e6; + --accent: #e2e2e2; + --background-accent: #c4c4c4; +} + +/* Light Theme - Minimal Dark Green */ +:root[data-theme="minimal-dark-green"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #000f06e6; + --primary-cta: #0a7039; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #000f06e6; + --accent: #e2e2e2; + --background-accent: #c4c4c4; +} + +/* Light Theme - Minimal Light Red */ +:root[data-theme="minimal-light-red"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #120006e6; + --primary-cta: #e63946; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #120006e6; + --accent: #e2e2e2; + --background-accent: #c4c4c4; +} + +/* Light Theme - Minimal Bright Blue */ +:root[data-theme="minimal-bright-blue"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #000612e6; + --primary-cta: #106EFB; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #000612e6; + --accent: #e2e2e2; + --background-accent: #106EFB; +} + +/* Light Theme - Minimal Bright Orange */ +:root[data-theme="minimal-bright-orange"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #120a00e6; + --primary-cta: #E34400; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #120a00e6; + --accent: #e2e2e2; + --background-accent: #E34400; +} + +/* Light Theme - Minimal Golden Orange */ +:root[data-theme="minimal-golden-orange"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #120a00e6; + --primary-cta: #FF7B05; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #120a00e6; + --accent: #e2e2e2; + --background-accent: #FF7B05; +} + +/* Light Theme - Minimal Light Orange */ +:root[data-theme="minimal-light-orange"] { + --background: #ffffff; + --card: #f9f9f9; + --foreground: #120a00e6; + --primary-cta: #ff8c42; + --primary-cta-text: #ffffff; + --secondary-cta: #f9f9f9; + --secondary-cta-text: #120a00e6; + --accent: #e2e2e2; + --background-accent: #c4c4c4; +} + +/* Light Theme - Dark Blue */ +:root[data-theme="dark-blue"] { + --background: #f5faff; + --card: #f1f8ff; + --foreground: #001122; + --primary-cta: #15479c; + --primary-cta-text: #f5faff; + --secondary-cta: #ffffff; + --secondary-cta-text: #001122; + --accent: #a8cce8; + --background-accent: #7ba3cf; +} + +/* Light Theme - Dark Green */ +:root[data-theme="dark-green"] { + --background: #fafffb; + --card: #f7fffa; + --foreground: #001a0a; + --primary-cta: #0a7039; + --primary-cta-text: #fafffb; + --secondary-cta: #ffffff; + --secondary-cta-text: #001a0a; + --accent: #a8d9be; + --background-accent: #6bbf8e; +} + +/* Light Theme - Light Red */ +:root[data-theme="light-red"] { + --background: #fffafa; + --card: #fff7f7; + --foreground: #1a0000; + --primary-cta: #e63946; + --primary-cta-text: #fffafa; + --secondary-cta: #ffffff; + --secondary-cta-text: #1a0000; + --accent: #f5c4c7; + --background-accent: #f09199; +} + +/* Light Theme - Light Purple */ +:root[data-theme="light-purple"] { + --background: #fbfaff; + --card: #f7f5ff; + --foreground: #0f0022; + --primary-cta: #8b5cf6; + --primary-cta-text: #fbfaff; + --secondary-cta: #ffffff; + --secondary-cta-text: #0f0022; + --accent: #d8cef5; + --background-accent: #c4a8f9; +} + +/* Light Theme - Warm Cream */ +:root[data-theme="warm-cream"] { + --background: #f6f0e9; + --card: #efe7dd; + --foreground: #2b180a; + --primary-cta: #2b180a; + --primary-cta-text: #f6f0e9; + --secondary-cta: #efe7dd; + --secondary-cta-text: #2b180a; + --accent: #94877c; + --background-accent: #afa094; +} + +/* Light Theme - Gray Blue Accent */ +:root[data-theme="gray-blue-accent"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #1c1c1c; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #15479c; + --background-accent: #a8cce8; +} + +/* Light Theme - Gray Green Accent */ +:root[data-theme="gray-green-accent"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #1c1c1c; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #159c49; + --background-accent: #a8e8ba; +} + +/* Light Theme - Gray Red Accent */ +:root[data-theme="gray-red-accent"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #1c1c1c; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #e63946; + --background-accent: #e8bea8; +} + +/* Light Theme - Gray Purple Accent */ +:root[data-theme="gray-purple-accent"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #1c1c1c; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #6139e6; + --background-accent: #b3a8e8; +} + +/* Light Theme - Warm Beige */ +:root[data-theme="warm-beige"] { + --background: #efebe5; + --card: #f7f2ea; + --foreground: #000000; + --primary-cta: #000000; + --primary-cta-text: #efebe5; + --secondary-cta: #ffffff; + --secondary-cta-text: #000000; + --accent: #ffffff; + --background-accent: #e1b875; +} + +/* Light Theme - Gray Teal Green */ +:root[data-theme="gray-teal-green"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #1f514c; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #159c49; + --background-accent: #a8e8ba; +} + +/* Light Theme - Gray Navy Blue */ +:root[data-theme="gray-navy-blue"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #1f3251; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #15479c; + --background-accent: #a8cce8; +} + +/* Light Theme - Gray Burgundy Red */ +:root[data-theme="gray-burgundy-red"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #511f1f; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #e63946; + --background-accent: #e8bea8; +} + +/* Light Theme - Gray Indigo Purple */ +:root[data-theme="gray-indigo-purple"] { + --background: #f5f5f5; + --card: #ffffff; + --foreground: #1c1c1c; + --primary-cta: #341f51; + --primary-cta-text: #f5f5f5; + --secondary-cta: #ffffff; + --secondary-cta-text: #1c1c1c; + --accent: #6139e6; + --background-accent: #b3a8e8; +} + +/* Light Theme - Warm Gray Pink */ +:root[data-theme="warmgray-pink"] { + --background: #f7f6f7; + --card: #ffffff; + --foreground: #1b0c25; + --primary-cta: #1b0c25; + --primary-cta-text: #f7f6f7; + --secondary-cta: #ffffff; + --secondary-cta-text: #1b0c25; + --accent: #ff93e4; + --background-accent: #e8a8c3; +} + +/* Light Theme - Warm Gray Orange */ +:root[data-theme="warmgray-orange"] { + --background: #f7f6f7; + --card: #ffffff; + --foreground: #25190c; + --primary-cta: #ff6207; + --primary-cta-text: #f7f6f7; + --secondary-cta: #ffffff; + --secondary-cta-text: #25190c; + --accent: #ffce93; + --background-accent: #e8cfa8; +} + +/* Light Theme - Warm Gray Blue */ +:root[data-theme="warmgray-blue"] { + --background: #f7f6f7; + --card: #ffffff; + --foreground: #0c1325; + --primary-cta: #0798ff; + --primary-cta-text: #f7f6f7; + --secondary-cta: #ffffff; + --secondary-cta-text: #0c1325; + --accent: #93c7ff; + --background-accent: #a8cde8; +} + +/* Light Theme - Warm Gray Indigo */ +:root[data-theme="warmgray-indigo"] { + --background: #f7f6f7; + --card: #ffffff; + --foreground: #0c1325; + --primary-cta: #0b07ff; + --primary-cta-text: #f7f6f7; + --secondary-cta: #ffffff; + --secondary-cta-text: #0c1325; + --accent: #93b7ff; + --background-accent: #a8bae8; +} + +/* Light Theme - Lavender Peach */ +:root[data-theme="lavender-peach"] { + --background: #e3deea; + --card: #ffffff; + --foreground: #27231f; + --primary-cta: #27231f; + --primary-cta-text: #e3deea; + --secondary-cta: #ffffff; + --secondary-cta-text: #27231f; + --accent: #c68a62; + --background-accent: #c68a62; +} + +/* Light Theme - Lavender Blue */ +:root[data-theme="lavender-blue"] { + --background: #e3deea; + --card: #ffffff; + --foreground: #1f2027; + --primary-cta: #1f2027; + --primary-cta-text: #e3deea; + --secondary-cta: #ffffff; + --secondary-cta-text: #1f2027; + --accent: #627dc6; + --background-accent: #627dc6; +} + +/* Light Theme - Warm Stone */ +:root[data-theme="warm-stone"] { + --background: #f5f4ef; + --card: #dad6cd; + --foreground: #2a2928; + --primary-cta: #2a2928; + --primary-cta-text: #f5f4ef; + --secondary-cta: #ecebea; + --secondary-cta-text: #2a2928; + --accent: #ffffff; + --background-accent: #c6b180; +} + +/* Light Theme - Warm Stone Gray */ +:root[data-theme="warm-stone-gray"] { + --background: #f5f4f0; + --card: #ffffff; + --foreground: #1a1a1a; + --primary-cta: #2c2c2c; + --primary-cta-text: #f5f4f0; + --secondary-cta: #f5f4f0; + --secondary-cta-text: #1a1a1a; + --accent: #8a8a8a; + --background-accent: #e8e6e1; +} + +/* Light Theme - Warm Green */ +:root[data-theme="warm-green"] { + --background: #fffefe; + --card: #f6f7f4; + --foreground: #080908; + --primary-cta: #0e3a29; + --primary-cta-text: #fffefe; + --secondary-cta: #e7eecd; + --secondary-cta-text: #080908; + --accent: #35c18b; + --background-accent: #ecebe4; +} + +/* Light Theme - Warm Sand */ +:root[data-theme="warm-sand"] { + --background: #fcf6ec; + --card: #f3ede2; + --foreground: #2e2521; + --primary-cta: #2e2521; + --primary-cta-text: #fcf6ec; + --secondary-cta: #ffffff; + --secondary-cta-text: #2e2521; + --accent: #b2a28b; + --background-accent: #b2a28b; +} + +/* Light Theme - Warm Gray Red */ +:root[data-theme="warmgray-red"] { + --background: #f7f6f7; + --card: #ffffff; + --foreground: #250c0d; + --primary-cta: #b82b40; + --primary-cta-text: #f7f6f7; + --secondary-cta: #ffffff; + --secondary-cta-text: #250c0d; + --accent: #b90941; + --background-accent: #e8a8b6; +} + + +/* ============================================ */ +/* DARK THEME VARIANTS */ +/* ============================================ */ + +/* Dark Theme - Minimal */ +:root[data-theme="dark"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #ffffffe6; + --primary-cta: #e6e6e6; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #ffffffe6; + --accent: #737373; + --background-accent: #737373; +} + +/* Dark Theme - Minimal Light Blue */ +:root[data-theme="dark-minimal-light-blue"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #f0f8ffe6; + --primary-cta: #cee7ff; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #f0f8ffe6; + --accent: #737373; + --background-accent: #737373; +} + +/* Dark Theme - Minimal Light Green */ +:root[data-theme="dark-minimal-light-green"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #f5fffae6; + --primary-cta: #80da9b; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #f5fffae6; + --accent: #737373; + --background-accent: #737373; +} + +/* Dark Theme - Minimal Light Red */ +:root[data-theme="dark-minimal-light-red"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #fff5f5e6; + --primary-cta: #ff7a7a; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #fff5f5e6; + --accent: #737373; + --background-accent: #737373; +} + +/* Dark Theme - Minimal Light Purple */ +:root[data-theme="dark-minimal-light-purple"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #f8f5ffe6; + --primary-cta: #c89bff; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #f8f5ffe6; + --accent: #737373; + --background-accent: #737373; +} + +/* Dark Theme - Light Blue White */ +:root[data-theme="dark-light-blue-white"] { + --background: #010912; + --card: #152840; + --foreground: #e6f0ff; + --primary-cta: #cee7ff; + --primary-cta-text: #010912; + --secondary-cta: #0e1a29; + --secondary-cta-text: #ffffff; + --accent: #3f5c79; + --background-accent: #004a93; +} + +/* Dark Theme - Lime */ +:root[data-theme="dark-lime"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #f5f5f5; + --primary-cta: #dfff1c; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #ffffff; + --accent: #8b9a1b; + --background-accent: #5d6b00; +} + +/* Dark Theme - Gold */ +:root[data-theme="dark-gold"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #f5f5f5; + --primary-cta: #ffdf7d; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #ffffff; + --accent: #b8860b; + --background-accent: #8b6914; +} + +/* Dark Theme - Crimson */ +:root[data-theme="dark-crimson"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #f5f5f5; + --primary-cta: #ff0000; + --primary-cta-text: #ffffff; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #ffffff; + --accent: #991b1b; + --background-accent: #7f1d1d; +} + +/* Dark Theme - Midnight Ice */ +:root[data-theme="dark-midnight-ice"] { + --background: #000000; + --card: #0c0c0c; + --foreground: #ffffff; + --primary-cta: #cee7ff; + --primary-cta-text: #000000; + --secondary-cta: #000000; + --secondary-cta-text: #ffffff; + --accent: #535353; + --background-accent: #CEE7FF; +} + +/* Dark Theme - Midnight Blue */ +:root[data-theme="dark-midnight-blue"] { + --background: #000000; + --card: #0c0c0c; + --foreground: #ffffff; + --primary-cta: #106EFB; + --primary-cta-text: #ffffff; + --secondary-cta: #000000; + --secondary-cta-text: #ffffff; + --accent: #535353; + --background-accent: #106EFB; +} + +/* Dark Theme - Blue Orange Accent */ +:root[data-theme="dark-blue-orange-accent"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #ffffff; + --primary-cta: #1f7cff; + --primary-cta-text: #ffffff; + --secondary-cta: #010101; + --secondary-cta-text: #ffffff; + --accent: #1f7cff; + --background-accent: #f96b2f; +} + +/* Dark Theme - Orange Blue Accent */ +:root[data-theme="dark-orange-blue-accent"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #ffffff; + --primary-cta: #e34400; + --primary-cta-text: #ffffff; + --secondary-cta: #010101; + --secondary-cta-text: #ffffff; + --accent: #ff7b05; + --background-accent: #106efb; +} + +/* Dark Theme - Minimal Bright Orange */ +:root[data-theme="dark-minimal-bright-orange"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #ffffff; + --primary-cta: #e34400; + --primary-cta-text: #ffffff; + --secondary-cta: #010101; + --secondary-cta-text: #ffffff; + --accent: #737373; + --background-accent: #e34400; +} + +/* Dark Theme - Minimal Light Orange */ +:root[data-theme="dark-minimal-light-orange"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #fffaf5e6; + --primary-cta: #ffaa70; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #fffaf5e6; + --accent: #737373; + --background-accent: #737373; +} + + +/* Dark Theme - Minimal Light Yellow */ +:root[data-theme="dark-minimal-light-yellow"] { + --background: #0a0a0a; + --card: #1a1a1a; + --foreground: #fffffae6; + --primary-cta: #fde047; + --primary-cta-text: #0a0a0a; + --secondary-cta: #1a1a1a; + --secondary-cta-text: #fffffae6; + --accent: #737373; + --background-accent: #737373; +} + +/* Dark Theme - Light Blue */ +:root[data-theme="dark-light-blue"] { + --background: #010912; + --card: #152840; + --foreground: #e6f0ff; + --primary-cta: #cee7ff; + --primary-cta-text: #010912; + --secondary-cta: #0e1a29; + --secondary-cta-text: #e6f0ff; + --accent: #3f5c79; + --background-accent: #004a93; +} + +/* Dark Theme - Light Green */ +:root[data-theme="dark-light-green"] { + --background: #000802; + --card: #0b1a0b; + --foreground: #e6ffe6; + --primary-cta: #80da9b; + --primary-cta-text: #000802; + --secondary-cta: #07170b; + --secondary-cta-text: #e6ffe6; + --accent: #38714a; + --background-accent: #2c6541; +} + +/* Dark Theme - Light Red */ +:root[data-theme="dark-light-red"] { + --background: #080000; + --card: #1e0d0d; + --foreground: #ffe6e6; + --primary-cta: #ff7a7a; + --primary-cta-text: #080000; + --secondary-cta: #1e0909; + --secondary-cta-text: #ffe6e6; + --accent: #7b4242; + --background-accent: #65292c; +} + +/* Dark Theme - Dark Red */ +:root[data-theme="dark-dark-red"] { + --background: #060000; + --card: #1d0d0d; + --foreground: #ffe6e6; + --primary-cta: #ff3d4a; + --primary-cta-text: #ffffff; + --secondary-cta: #1f0a0a; + --secondary-cta-text: #ffe6e6; + --accent: #7b2d2d; + --background-accent: #b8111f; +} + +/* Dark Theme - Light Purple */ +:root[data-theme="dark-light-purple"] { + --background: #050012; + --card: #040121; + --foreground: #f0e6ff; + --primary-cta: #c89bff; + --primary-cta-text: #050012; + --secondary-cta: #1d123b; + --secondary-cta-text: #f0e6ff; + --accent: #684f7b; + --background-accent: #65417c; +} + +/* Dark Theme - Light Orange */ +:root[data-theme="dark-light-orange"] { + --background: #080200; + --card: #1a0d0b; + --foreground: #ffe6d5; + --primary-cta: #ffaa70; + --primary-cta-text: #080200; + --secondary-cta: #170b07; + --secondary-cta-text: #ffe6d5; + --accent: #7b5e4a; + --background-accent: #b8541e; +} + +/* Dark Theme - Deep Blue */ +:root[data-theme="dark-deep-blue"] { + --background: #020617; + --card: #0f172a; + --foreground: #e2e8f0; + --primary-cta: #c4d8f9; + --primary-cta-text: #020617; + --secondary-cta: #041633; + --secondary-cta-text: #e2e8f0; + --accent: #2d30f3; + --background-accent: #1d4ed8; +} + +/* Dark Theme - Violet */ +:root[data-theme="dark-violet"] { + --background: #030128; + --card: #241f48; + --foreground: #ffffff; + --primary-cta: #ffffff; + --primary-cta-text: #030128; + --secondary-cta: #131136; + --secondary-cta-text: #d5d4f6; + --accent: #44358a; + --background-accent: #b597fe; +} + +/* Dark Theme - Ruby */ +:root[data-theme="dark-ruby"] { + --background: #000000; + --card: #481f1f; + --foreground: #ffffff; + --primary-cta: #ffffff; + --primary-cta-text: #280101; + --secondary-cta: #361311; + --secondary-cta-text: #f6d4d4; + --accent: #51000b; + --background-accent: #ff2231; +} + +/* Dark Theme - Emerald */ +:root[data-theme="dark-emerald"] { + --background: #000000; + --card: #1f4035; + --foreground: #ffffff; + --primary-cta: #ffffff; + --primary-cta-text: #051a12; + --secondary-cta: #0d2b1f; + --secondary-cta-text: #d4f6e8; + --accent: #0d5238; + --background-accent: #10b981; +} + +/* Dark Theme - Indigo */ +:root[data-theme="dark-indigo"] { + --background: #000000; + --card: #1f1f40; + --foreground: #ffffff; + --primary-cta: #ffffff; + --primary-cta-text: #0a051a; + --secondary-cta: #0d0d2b; + --secondary-cta-text: #d4d4f6; + --accent: #3d2880; + --background-accent: #663cff; +} + +/* Dark Theme - Forest */ +:root[data-theme="dark-forest"] { + --background: #000000; + --card: #1a2f1d; + --foreground: #ffffff; + --primary-cta: #ffffff; + --primary-cta-text: #0a1a0c; + --secondary-cta: #0d200f; + --secondary-cta-text: #d4f6d8; + --accent: #1a3d1f; + --background-accent: #355e3b; +} + +/* Dark Theme - Mint */ +:root[data-theme="dark-mint"] { + --background: #000000; + --card: #1a2a1a; + --foreground: #ffffff; + --primary-cta: #ffffff; + --primary-cta-text: #0a150a; + --secondary-cta: #0d1a0d; + --secondary-cta-text: #e1f6e1; + --accent: #2d4a2d; + --background-accent: #c1e1c1; +} + + diff --git a/colorThemes.json b/colorThemes.json new file mode 100644 index 0000000..2e4fccc --- /dev/null +++ b/colorThemes.json @@ -0,0 +1,677 @@ +{ + "lightTheme": { + "minimalDarkBlue": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#000612e6", + "--primary-cta": "#15479c", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#c4c4c4", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#000612e6" + }, + "minimalDarkGreen": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#000f06e6", + "--primary-cta": "#0a7039", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#c4c4c4", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#000f06e6" + }, + "minimalLightRed": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#120006e6", + "--primary-cta": "#e63946", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#c4c4c4", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#120006e6" + }, + "minimalBrightBlue": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#000612e6", + "--primary-cta": "#106EFB", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#106EFB", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#000612e6" + }, + "minimalBrightOrange": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#120a00e6", + "--primary-cta": "#E34400", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#E34400", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#120a00e6" + }, + "minimalGoldenOrange": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#120a00e6", + "--primary-cta": "#FF7B05", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#FF7B05", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#120a00e6" + }, + "minimalLightOrange": { + "--background": "#ffffff", + "--card": "#f9f9f9", + "--foreground": "#120a00e6", + "--primary-cta": "#ff8c42", + "--secondary-cta": "#f9f9f9", + "--accent": "#e2e2e2", + "--background-accent": "#c4c4c4", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#120a00e6" + }, + "darkBlue": { + "--background": "#f5faff", + "--card": "#f1f8ff", + "--foreground": "#001122", + "--primary-cta": "#15479c", + "--secondary-cta": "#ffffff", + "--accent": "#a8cce8", + "--background-accent": "#7ba3cf", + "--primary-cta-text": "#f5faff", + "--secondary-cta-text": "#001122" + }, + "darkGreen": { + "--background": "#fafffb", + "--card": "#f7fffa", + "--foreground": "#001a0a", + "--primary-cta": "#0a7039", + "--secondary-cta": "#ffffff", + "--accent": "#a8d9be", + "--background-accent": "#6bbf8e", + "--primary-cta-text": "#fafffb", + "--secondary-cta-text": "#001a0a" + }, + "lightRed": { + "--background": "#fffafa", + "--card": "#fff7f7", + "--foreground": "#1a0000", + "--primary-cta": "#e63946", + "--secondary-cta": "#ffffff", + "--accent": "#f5c4c7", + "--background-accent": "#f09199", + "--primary-cta-text": "#fffafa", + "--secondary-cta-text": "#1a0000" + }, + "lightPurple": { + "--background": "#fbfaff", + "--card": "#f7f5ff", + "--foreground": "#0f0022", + "--primary-cta": "#8b5cf6", + "--secondary-cta": "#ffffff", + "--accent": "#d8cef5", + "--background-accent": "#c4a8f9", + "--primary-cta-text": "#fbfaff", + "--secondary-cta-text": "#0f0022" + }, + "warmCream": { + "--background": "#f6f0e9", + "--card": "#efe7dd", + "--foreground": "#2b180a", + "--primary-cta": "#2b180a", + "--secondary-cta": "#efe7dd", + "--accent": "#94877c", + "--background-accent": "#afa094", + "--primary-cta-text": "#f6f0e9", + "--secondary-cta-text": "#2b180a" + }, + "grayBlueAccent": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#1c1c1c", + "--secondary-cta": "#ffffff", + "--accent": "#15479c", + "--background-accent": "#a8cce8", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "grayGreenAccent": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#1c1c1c", + "--secondary-cta": "#ffffff", + "--accent": "#159c49", + "--background-accent": "#a8e8ba", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "grayRedAccent": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#1c1c1c", + "--secondary-cta": "#ffffff", + "--accent": "#e63946", + "--background-accent": "#e8bea8", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "grayPurpleAccent": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#1c1c1c", + "--secondary-cta": "#ffffff", + "--accent": "#6139e6", + "--background-accent": "#b3a8e8", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "warmBeige": { + "--background": "#efebe5", + "--card": "#f7f2ea", + "--foreground": "#000000", + "--primary-cta": "#000000", + "--secondary-cta": "#ffffff", + "--accent": "#ffffff", + "--background-accent": "#e1b875", + "--primary-cta-text": "#efebe5", + "--secondary-cta-text": "#000000" + }, + "grayTealGreen": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#1f514c", + "--secondary-cta": "#ffffff", + "--accent": "#159c49", + "--background-accent": "#a8e8ba", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "grayNavyBlue": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#1f3251", + "--secondary-cta": "#ffffff", + "--accent": "#15479c", + "--background-accent": "#a8cce8", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "grayBurgundyRed": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#511f1f", + "--secondary-cta": "#ffffff", + "--accent": "#e63946", + "--background-accent": "#e8bea8", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "grayIndigoPurple": { + "--background": "#f5f5f5", + "--card": "#ffffff", + "--foreground": "#1c1c1c", + "--primary-cta": "#341f51", + "--secondary-cta": "#ffffff", + "--accent": "#6139e6", + "--background-accent": "#b3a8e8", + "--primary-cta-text": "#f5f5f5", + "--secondary-cta-text": "#1c1c1c" + }, + "warmgrayPink": { + "--background": "#f7f6f7", + "--card": "#ffffff", + "--foreground": "#1b0c25", + "--primary-cta": "#1b0c25", + "--secondary-cta": "#ffffff", + "--accent": "#ff93e4", + "--background-accent": "#e8a8c3", + "--primary-cta-text": "#f7f6f7", + "--secondary-cta-text": "#1b0c25" + }, + "warmgrayOrange": { + "--background": "#f7f6f7", + "--card": "#ffffff", + "--foreground": "#25190c", + "--primary-cta": "#ff6207", + "--secondary-cta": "#ffffff", + "--accent": "#ffce93", + "--background-accent": "#e8cfa8", + "--primary-cta-text": "#f7f6f7", + "--secondary-cta-text": "#25190c" + }, + "warmgrayBlue": { + "--background": "#f7f6f7", + "--card": "#ffffff", + "--foreground": "#0c1325", + "--primary-cta": "#0798ff", + "--secondary-cta": "#ffffff", + "--accent": "#93c7ff", + "--background-accent": "#a8cde8", + "--primary-cta-text": "#f7f6f7", + "--secondary-cta-text": "#0c1325" + }, + "warmgrayIndigo": { + "--background": "#f7f6f7", + "--card": "#ffffff", + "--foreground": "#0c1325", + "--primary-cta": "#0b07ff", + "--secondary-cta": "#ffffff", + "--accent": "#93b7ff", + "--background-accent": "#a8bae8", + "--primary-cta-text": "#f7f6f7", + "--secondary-cta-text": "#0c1325" + }, + "lavenderPeach": { + "--background": "#e3deea", + "--card": "#ffffff", + "--foreground": "#27231f", + "--primary-cta": "#27231f", + "--secondary-cta": "#ffffff", + "--accent": "#c68a62", + "--background-accent": "#c68a62", + "--primary-cta-text": "#e3deea", + "--secondary-cta-text": "#27231f" + }, + "lavenderBlue": { + "--background": "#e3deea", + "--card": "#ffffff", + "--foreground": "#1f2027", + "--primary-cta": "#1f2027", + "--secondary-cta": "#ffffff", + "--accent": "#627dc6", + "--background-accent": "#627dc6", + "--primary-cta-text": "#e3deea", + "--secondary-cta-text": "#1f2027" + }, + "warmStone": { + "--background": "#f5f4ef", + "--card": "#dad6cd", + "--foreground": "#2a2928", + "--primary-cta": "#2a2928", + "--secondary-cta": "#ecebea", + "--accent": "#ffffff", + "--background-accent": "#c6b180", + "--primary-cta-text": "#f5f4ef", + "--secondary-cta-text": "#2a2928" + }, + "warmStoneGray": { + "--background": "#f5f4f0", + "--card": "#ffffff", + "--foreground": "#1a1a1a", + "--primary-cta": "#2c2c2c", + "--secondary-cta": "#f5f4f0", + "--accent": "#8a8a8a", + "--background-accent": "#e8e6e1", + "--primary-cta-text": "#f5f4f0", + "--secondary-cta-text": "#1a1a1a" + }, + "warmGreen": { + "--background": "#fffefe", + "--card": "#f6f7f4", + "--foreground": "#080908", + "--primary-cta": "#0e3a29", + "--secondary-cta": "#e7eecd", + "--accent": "#35c18b", + "--background-accent": "#ecebe4", + "--primary-cta-text": "#fffefe", + "--secondary-cta-text": "#080908" + }, + "warmSand": { + "--background": "#fcf6ec", + "--card": "#f3ede2", + "--foreground": "#2e2521", + "--primary-cta": "#2e2521", + "--secondary-cta": "#ffffff", + "--accent": "#b2a28b", + "--background-accent": "#b2a28b", + "--primary-cta-text": "#fcf6ec", + "--secondary-cta-text": "#2e2521" + }, + "warmgrayRed": { + "--background": "#f7f6f7", + "--card": "#ffffff", + "--foreground": "#250c0d", + "--primary-cta": "#b82b40", + "--secondary-cta": "#ffffff", + "--accent": "#b90941", + "--background-accent": "#e8a8b6", + "--primary-cta-text": "#f7f6f7", + "--secondary-cta-text": "#250c0d" + } + }, + "darkTheme": { + "minimal": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#ffffffe6", + "--primary-cta": "#e6e6e6", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#ffffffe6" + }, + "minimalLightBlue": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#f0f8ffe6", + "--primary-cta": "#cee7ff", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#f0f8ffe6" + }, + "minimalLightGreen": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#f5fffae6", + "--primary-cta": "#80da9b", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#f5fffae6" + }, + "minimalLightRed": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#fff5f5e6", + "--primary-cta": "#ff7a7a", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#fff5f5e6" + }, + "minimalLightPurple": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#f8f5ffe6", + "--primary-cta": "#c89bff", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#f8f5ffe6" + }, + "lightBlueWhite": { + "--background": "#010912", + "--card": "#152840", + "--foreground": "#e6f0ff", + "--primary-cta": "#cee7ff", + "--secondary-cta": "#0e1a29", + "--accent": "#3f5c79", + "--background-accent": "#004a93", + "--primary-cta-text": "#010912", + "--secondary-cta-text": "#ffffff" + }, + "lime": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#f5f5f5", + "--primary-cta": "#dfff1c", + "--secondary-cta": "#1a1a1a", + "--accent": "#8b9a1b", + "--background-accent": "#5d6b00", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#ffffff" + }, + "gold": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#f5f5f5", + "--primary-cta": "#ffdf7d", + "--secondary-cta": "#1a1a1a", + "--accent": "#b8860b", + "--background-accent": "#8b6914", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#ffffff" + }, + "crimson": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#f5f5f5", + "--primary-cta": "#ff0000", + "--secondary-cta": "#1a1a1a", + "--accent": "#991b1b", + "--background-accent": "#7f1d1d", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#ffffff" + }, + "midnightIce": { + "--background": "#000000", + "--card": "#0c0c0c", + "--foreground": "#ffffff", + "--primary-cta": "#cee7ff", + "--secondary-cta": "#000000", + "--accent": "#535353", + "--background-accent": "#CEE7FF", + "--primary-cta-text": "#000000", + "--secondary-cta-text": "#ffffff" + }, + "midnightBlue": { + "--background": "#000000", + "--card": "#0c0c0c", + "--foreground": "#ffffff", + "--primary-cta": "#106EFB", + "--secondary-cta": "#000000", + "--accent": "#535353", + "--background-accent": "#106EFB", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#ffffff" + }, + "blueOrangeAccent": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#ffffff", + "--primary-cta": "#1f7cff", + "--secondary-cta": "#010101", + "--accent": "#1f7cff", + "--background-accent": "#f96b2f", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#ffffff" + }, + "orangeBlueAccent": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#ffffff", + "--primary-cta": "#e34400", + "--secondary-cta": "#010101", + "--accent": "#ff7b05", + "--background-accent": "#106efb", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#ffffff" + }, + "minimalBrightOrange": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#ffffff", + "--primary-cta": "#e34400", + "--secondary-cta": "#010101", + "--accent": "#737373", + "--background-accent": "#e34400", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#ffffff" + }, + "minimalLightOrange": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#fffaf5e6", + "--primary-cta": "#ffaa70", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#fffaf5e6" + }, + "minimalLightYellow": { + "--background": "#0a0a0a", + "--card": "#1a1a1a", + "--foreground": "#fffffae6", + "--primary-cta": "#fde047", + "--secondary-cta": "#1a1a1a", + "--accent": "#737373", + "--background-accent": "#737373", + "--primary-cta-text": "#0a0a0a", + "--secondary-cta-text": "#fffffae6" + }, + "lightBlue": { + "--background": "#010912", + "--card": "#152840", + "--foreground": "#e6f0ff", + "--primary-cta": "#cee7ff", + "--secondary-cta": "#0e1a29", + "--accent": "#3f5c79", + "--background-accent": "#004a93", + "--primary-cta-text": "#010912", + "--secondary-cta-text": "#e6f0ff" + }, + "lightGreen": { + "--background": "#000802", + "--card": "#0b1a0b", + "--foreground": "#e6ffe6", + "--primary-cta": "#80da9b", + "--secondary-cta": "#07170b", + "--accent": "#38714a", + "--background-accent": "#2c6541", + "--primary-cta-text": "#000802", + "--secondary-cta-text": "#e6ffe6" + }, + "lightRed": { + "--background": "#080000", + "--card": "#1e0d0d", + "--foreground": "#ffe6e6", + "--primary-cta": "#ff7a7a", + "--secondary-cta": "#1e0909", + "--accent": "#7b4242", + "--background-accent": "#65292c", + "--primary-cta-text": "#080000", + "--secondary-cta-text": "#ffe6e6" + }, + "darkRed": { + "--background": "#060000", + "--card": "#1d0d0d", + "--foreground": "#ffe6e6", + "--primary-cta": "#ff3d4a", + "--secondary-cta": "#1f0a0a", + "--accent": "#7b2d2d", + "--background-accent": "#b8111f", + "--primary-cta-text": "#ffffff", + "--secondary-cta-text": "#ffe6e6" + }, + "lightPurple": { + "--background": "#050012", + "--card": "#040121", + "--foreground": "#f0e6ff", + "--primary-cta": "#c89bff", + "--secondary-cta": "#1d123b", + "--accent": "#684f7b", + "--background-accent": "#65417c", + "--primary-cta-text": "#050012", + "--secondary-cta-text": "#f0e6ff" + }, + "lightOrange": { + "--background": "#080200", + "--card": "#1a0d0b", + "--foreground": "#ffe6d5", + "--primary-cta": "#ffaa70", + "--secondary-cta": "#170b07", + "--accent": "#7b5e4a", + "--background-accent": "#b8541e", + "--primary-cta-text": "#080200", + "--secondary-cta-text": "#ffe6d5" + }, + "deepBlue": { + "--background": "#020617", + "--card": "#0f172a", + "--foreground": "#e2e8f0", + "--primary-cta": "#c4d8f9", + "--secondary-cta": "#041633", + "--accent": "#2d30f3", + "--background-accent": "#1d4ed8", + "--primary-cta-text": "#020617", + "--secondary-cta-text": "#e2e8f0" + }, + "violet": { + "--background": "#030128", + "--card": "#241f48", + "--foreground": "#ffffff", + "--primary-cta": "#ffffff", + "--secondary-cta": "#131136", + "--accent": "#44358a", + "--background-accent": "#b597fe", + "--primary-cta-text": "#030128", + "--secondary-cta-text": "#d5d4f6" + }, + "ruby": { + "--background": "#000000", + "--card": "#481f1f", + "--foreground": "#ffffff", + "--primary-cta": "#ffffff", + "--secondary-cta": "#361311", + "--accent": "#51000b", + "--background-accent": "#ff2231", + "--primary-cta-text": "#280101", + "--secondary-cta-text": "#f6d4d4" + }, + "emerald": { + "--background": "#000000", + "--card": "#1f4035", + "--foreground": "#ffffff", + "--primary-cta": "#ffffff", + "--secondary-cta": "#0d2b1f", + "--accent": "#0d5238", + "--background-accent": "#10b981", + "--primary-cta-text": "#051a12", + "--secondary-cta-text": "#d4f6e8" + }, + "indigo": { + "--background": "#000000", + "--card": "#1f1f40", + "--foreground": "#ffffff", + "--primary-cta": "#ffffff", + "--secondary-cta": "#0d0d2b", + "--accent": "#3d2880", + "--background-accent": "#663cff", + "--primary-cta-text": "#0a051a", + "--secondary-cta-text": "#d4d4f6" + }, + "forest": { + "--background": "#000000", + "--card": "#1a2f1d", + "--foreground": "#ffffff", + "--primary-cta": "#ffffff", + "--secondary-cta": "#0d200f", + "--accent": "#1a3d1f", + "--background-accent": "#355e3b", + "--primary-cta-text": "#0a1a0c", + "--secondary-cta-text": "#d4f6d8" + }, + "mint": { + "--background": "#000000", + "--card": "#1a2a1a", + "--foreground": "#ffffff", + "--primary-cta": "#ffffff", + "--secondary-cta": "#0d1a0d", + "--accent": "#2d4a2d", + "--background-accent": "#c1e1c1", + "--primary-cta-text": "#0a150a", + "--secondary-cta-text": "#e1f6e1" + } + } +} diff --git a/docs/ACCESSIBILITY.md b/docs/ACCESSIBILITY.md new file mode 100644 index 0000000..8303571 --- /dev/null +++ b/docs/ACCESSIBILITY.md @@ -0,0 +1,500 @@ +# Accessibility Standards + +This document outlines accessibility (a11y) requirements for all components in the library, ensuring compatibility with screen readers and assistive technologies. + +## Interactive Components + +For buttons, links, and other interactive elements. + +### Required Props + +```tsx +interface ButtonProps { + text: string; + onClick?: () => void; + className?: string; + // Accessibility props + disabled?: boolean; + ariaLabel?: string; + type?: "button" | "submit" | "reset"; +} +``` + +### Implementation Pattern + +```tsx +const Button = ({ + text, + onClick, + className = "", + disabled = false, + ariaLabel, + type = "button", +}: ButtonProps) => { + return ( + + ); +}; +``` + +### Key Points + +**ariaLabel:** +- Optional prop with sensible fallback +- Falls back to `text` content for buttons +- Provides context for screen readers + +**type:** +- Default: `"button"` +- Options: `"button" | "submit" | "reset"` +- Prevents accidental form submission + +**disabled:** +- Default: `false` +- Includes visual disabled states: + - `disabled:cursor-not-allowed` - Shows not-allowed cursor + - `disabled:opacity-50` - Reduces opacity for visual feedback + +## Media Components + +### Images + +**Required Props:** +```tsx +interface ImageProps { + imageSrc: string; + imageAlt?: string; // Empty string for decorative images + className?: string; +} +``` + +**Implementation:** +```tsx +const ImageComponent = ({ + imageSrc, + imageAlt = "", + className = "", +}: ImageProps) => { + return ( + {imageAlt} + ); +}; +``` + +**Key Points:** +- `imageAlt` - Alt text for images + - Provide descriptive alt text for meaningful images + - Use empty string (`""`) for decorative images +- `aria-hidden={true}` - When alt is empty, mark as decorative +- Screen readers will skip decorative images + +### Videos + +**Required Props:** +```tsx +interface VideoProps { + videoSrc: string; + videoAriaLabel?: string; + className?: string; +} +``` + +**Implementation:** +```tsx +const VideoComponent = ({ + videoSrc, + videoAriaLabel = "Video content", + className = "", +}: VideoProps) => { + return ( +