diff --git a/CLAUDE.md b/CLAUDE.md
index a66fbbd..ff60c1a 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -41,6 +41,23 @@ mcp__figma__get_design_context({
**Patterns**: Use native HTML elements, `.sr-only` for accessibility, `peer-*` modifiers for state styling, design tokens (`border-primary`, `bg-background`), avoid Radix UI unless complex state needed
+5. **Update Vanilla Components** (IMPORTANT):
+ - Extract component classes: `node vanilla/extract-components.cjs ComponentName`
+ - Update relevant vanilla HTML files in `vanilla/components/`
+ - If new component: Create new `.html` file with examples
+ - If modified component: Update existing examples to match new styles/variants
+ - Add component to `vanilla/index.html` showcase if not already present
+ - Update `vanilla/README.md` with new component documentation
+ - Test: Open HTML files in browser, verify styling matches React version
+
+**Vanilla Component Files**:
+- `vanilla/components/forms.html` - Checkbox, Radio, Select, Textarea
+- `vanilla/components/ui-elements.html` - Badge, Avatar, Separator
+- `vanilla/components/interactive.html` - Tabs, Accordion, Progress, Skeleton
+- `vanilla/components/button.html`, `card.html`, `input.html`, `alert.html`, `dialog.html`
+
+**Important**: The vanilla HTML/CSS/JS version must stay in sync with React components for consistency across frameworks.
+
---
## Adding a New Theme
diff --git a/README.md b/README.md
index 2200f58..28de0e5 100644
--- a/README.md
+++ b/README.md
@@ -149,6 +149,87 @@ function MyCustomComponent() {
**Note**: This is completely optional. The design system components work perfectly without any Tailwind setup in your project.
+## Vanilla HTML/CSS/JS Version
+
+Can't use React? **We've got you covered!** The ATXP Design System includes a complete vanilla HTML/CSS/JavaScript version of all components for projects that can't use React.
+
+### Quick Start
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### Available Components
+
+The vanilla version includes 20+ components:
+
+- **Form Components**: Checkbox, Radio, Select, Textarea, Input
+- **UI Elements**: Badge, Avatar, Separator
+- **Interactive**: Tabs, Accordion, Progress, Skeleton
+- **Layout**: Button, Card, Alert, Dialog, Toast
+
+### Features
+
+- ✅ **Zero Dependencies** - Just HTML, CSS, and vanilla JavaScript
+- ✅ **All 4 Themes** - Light, Dark, ATXP, DBG with live switching
+- ✅ **Fully Accessible** - ARIA labels, keyboard navigation, screen reader support
+- ✅ **Same Design** - Matches the React version pixel-perfect
+- ✅ **Interactive Components** - Dialog, Tabs, Accordion, Toast with vanilla JS
+
+### Documentation
+
+- **Main Guide**: [`vanilla/README.md`](./vanilla/README.md)
+- **Live Examples**: Open [`vanilla/index.html`](./vanilla/index.html) in your browser
+- **Component Pages**:
+ - [`vanilla/components/forms.html`](./vanilla/components/forms.html) - Complete form elements
+ - [`vanilla/components/ui-elements.html`](./vanilla/components/ui-elements.html) - Badges, avatars, separators
+ - [`vanilla/components/interactive.html`](./vanilla/components/interactive.html) - Tabs, accordions, progress
+ - And more individual component examples
+
+### Theme Switching
+
+```html
+
+
+
+
+
+```
+
+### Extraction Tool
+
+Keep vanilla components in sync with React:
+
+```bash
+# Extract a single component's classes
+node vanilla/extract-components.cjs Button
+
+# Extract all components
+node vanilla/extract-components.cjs --all
+```
+
+See [`vanilla/README.md`](./vanilla/README.md) for complete documentation, examples, and JavaScript API reference.
+
## Development
### Prerequisites
diff --git a/render.yaml b/render.yaml
index ab62915..edd77ca 100644
--- a/render.yaml
+++ b/render.yaml
@@ -6,4 +6,13 @@ services:
buildCommand: pnpm install --frozen-lockfile && pnpm run build-storybook
staticPublishPath: storybook-static
autoDeployTrigger: commit
+
+- type: web
+ name: design-system-vanilla
+ runtime: static
+ repo: https://github.com/atxp-dev/design-system
+ buildCommand: pnpm install --frozen-lockfile && chmod +x vanilla/build.sh && ./vanilla/build.sh
+ staticPublishPath: vanilla
+ autoDeployTrigger: commit
+
version: "1"
diff --git a/vanilla/.gitignore b/vanilla/.gitignore
new file mode 100644
index 0000000..70bc4ec
--- /dev/null
+++ b/vanilla/.gitignore
@@ -0,0 +1,14 @@
+# Build artifacts
+dist/
+*.tar.gz
+*.zip
+
+# Backup files
+*.bak
+*~
+
+# Extracted component data
+extracted/
+
+# OS files
+.DS_Store
diff --git a/vanilla/README.md b/vanilla/README.md
new file mode 100644
index 0000000..3a11f42
--- /dev/null
+++ b/vanilla/README.md
@@ -0,0 +1,519 @@
+# ATXP Design System - Vanilla HTML/CSS/JS
+
+A complete collection of design system components built with pure HTML, CSS, and vanilla JavaScript. **No React required!**
+
+This directory contains vanilla HTML/CSS/JS versions of the ATXP Design System components, perfect for projects that cannot use React or prefer a framework-free approach.
+
+## 🚀 Quick Start
+
+### Option 1: Download the Archive
+
+Download the complete vanilla package as a compressed archive:
+
+```bash
+# The build script creates: atxp-design-system-vanilla.tar.gz (~136KB)
+# Contains: HTML files, CSS, JavaScript, and all components
+
+tar -xzf atxp-design-system-vanilla.tar.gz
+cd atxp-design-system-vanilla
+# Open index.html in your browser!
+```
+
+The archive includes everything you need to get started with zero configuration.
+
+### Option 2: Manual Setup
+
+### 1. Include the CSS
+
+```html
+
+```
+
+The `styles.css` file contains:
+- All Tailwind CSS utilities
+- Design tokens (colors, spacing, typography)
+- All 4 theme definitions (light, dark, ATXP, DBG)
+
+### 2. Include the JavaScript (for interactive components)
+
+```html
+
+```
+
+The `components.js` file provides:
+- `Dialog` - Modal dialog functionality
+- `ThemeSwitcher` - Theme management and persistence
+- `Toast` - Toast notification system
+- Auto-initialization for data attributes
+
+### 3. Set the Theme
+
+Add the `data-theme` attribute to your `` tag:
+
+```html
+
+```
+
+### 4. Use Components
+
+Copy the HTML markup from the component examples:
+
+```html
+
+```
+
+## 📁 Directory Structure
+
+```
+vanilla/
+├── index.html # Showcase page with all components
+├── README.md # This file
+├── components/ # Individual component examples
+│ ├── button.html
+│ ├── card.html
+│ ├── input.html
+│ ├── alert.html
+│ └── dialog.html
+├── js/
+│ └── components.js # Vanilla JS implementations
+├── css/ # (Optional) Additional styles
+└── extracted/ # Auto-generated extraction data
+ ├── Button.json
+ ├── Button.html
+ └── ...
+
+extract-components.cjs # Script to extract class names from React components
+```
+
+## 🎨 Available Components
+
+### Static Components (HTML/CSS only)
+
+- **Button** - Interactive buttons with multiple variants and sizes
+- **Card** - Container components with header, content, and footer
+- **Input** - Form inputs with various types and icon support
+- **Alert** - Notification and message components
+
+### Interactive Components (Requires JavaScript)
+
+- **Dialog** - Modal dialogs with overlay and keyboard support
+- **Toast** - Toast notifications (success, error, info)
+- **Theme Switcher** - Live theme switching with localStorage persistence
+
+## 📋 Component List
+
+### Form Components
+- **Checkbox** - Checkboxes for multi-select options
+- **Radio** - Radio buttons for single-select options
+- **Select** - Dropdown select menus
+- **Textarea** - Multi-line text input
+- **Input** - Single-line text inputs with icon support
+
+### UI Elements
+- **Badge** - Small labels for status, tags, or counts (5 variants, 2 sizes)
+- **Avatar** - User profile images with fallback initials
+- **Separator** - Horizontal and vertical content dividers
+
+### Interactive Components
+- **Tabs** - Tabbed content with vanilla JS
+- **Accordion** - Collapsible content sections
+- **Progress** - Progress bars with percentage indicators
+- **Skeleton** - Loading placeholders
+
+### Layout Components
+- **Button** - Buttons with multiple variants and sizes
+- **Card** - Container cards with header/content/footer
+- **Alert** - Notification and message components
+- **Dialog** - Modal dialogs with overlay
+
+## 🎯 Component Examples
+
+### Button
+
+```html
+
+
+
+
+
+
+
+
+```
+
+### Checkbox
+
+```html
+
+
+
+
+
+
+
+```
+
+### Badge
+
+```html
+
+
+ New
+
+
+
+
+ Active
+
+
+
+
+ Pending
+
+```
+
+### Avatar
+
+```html
+
+
+
+
+
+
+
+
+ JD
+
+
+```
+
+### Tabs
+
+```html
+
+
+
+
+
+
+
+
+ Account content here
+
+
+ Password content here
+
+
+
+```
+
+### Accordion
+
+```html
+
+
+
+
Answer content here
+
+
+```
+
+### Progress
+
+```html
+
+
+
+```
+
+### Card
+
+```html
+
+
+
+
+ Card Title
+
+
+ Card Description
+
+
+
+
+
+
Card content goes here.
+
+
+
+
+
+
+
+```
+
+### Dialog
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Dialog Title
+
Dialog description
+
+
+
+
+
Dialog content
+
+
+
+
+
+
+
+
+
+```
+
+## 🔧 JavaScript API
+
+### Dialog
+
+```javascript
+// Create a dialog instance
+const dialog = new Dialog('my-dialog');
+
+// Open the dialog
+dialog.open();
+
+// Close the dialog
+dialog.close();
+
+// Toggle the dialog
+dialog.toggle();
+
+// Listen for events
+document.getElementById('my-dialog').addEventListener('dialog:open', (e) => {
+ console.log('Dialog opened:', e.detail.dialogId);
+});
+
+document.getElementById('my-dialog').addEventListener('dialog:close', (e) => {
+ console.log('Dialog closed:', e.detail.dialogId);
+});
+```
+
+### ThemeSwitcher
+
+```javascript
+// Create a theme switcher instance
+const themeSwitcher = new ThemeSwitcher();
+
+// Get current theme
+const currentTheme = themeSwitcher.getTheme();
+
+// Set theme
+themeSwitcher.setTheme('dark');
+
+// Dispatch theme change event (triggers all listeners)
+document.dispatchEvent(new CustomEvent('theme:change', {
+ detail: { theme: 'dark' }
+}));
+```
+
+### Toast
+
+```javascript
+// Show a toast
+window.toast.show('This is a message!', {
+ duration: 3000,
+ variant: 'default', // 'default', 'success', 'destructive'
+ title: 'Optional Title'
+});
+
+// Success toast
+window.toast.show('Operation completed!', {
+ variant: 'success',
+ title: 'Success'
+});
+
+// Error toast
+window.toast.show('Something went wrong', {
+ variant: 'destructive',
+ title: 'Error'
+});
+```
+
+## 🎨 Theme System
+
+The design system includes 4 built-in themes:
+
+1. **Light** (default) - Clean, bright theme
+2. **Dark** - Dark mode with high contrast
+3. **ATXP** - ATXP brand theme with black primary color
+4. **DBG** - DBG brand theme with cyan/teal accent
+5. **Auto** - Automatically switches between light/dark based on system preference
+
+### Theme Switching
+
+#### Using Data Attributes
+
+```html
+
+
+
+
+
+
+```
+
+#### Programmatically
+
+```javascript
+// Change theme via JavaScript
+window.themeSwitcher.setTheme('dark');
+
+// Or dispatch event
+document.dispatchEvent(new CustomEvent('theme:change', {
+ detail: { theme: 'dark' }
+}));
+```
+
+### Custom Themes
+
+To create a custom theme, define CSS variables with the `data-theme` attribute:
+
+```css
+[data-theme="custom"] {
+ --theme-primary: #ff0000;
+ --theme-primary-foreground: #ffffff;
+ --theme-background: #ffffff;
+ --theme-foreground: #000000;
+ /* ... all other theme tokens */
+}
+```
+
+See `src/styles/themes/` for complete token lists.
+
+## 🛠️ Extraction Script
+
+Use the extraction script to automatically generate HTML templates from React components:
+
+```bash
+# Extract a single component
+node vanilla/extract-components.cjs Button
+
+# Extract all components
+node vanilla/extract-components.cjs --all
+```
+
+The script generates:
+- JSON files with extracted class names and variants
+- HTML template files
+- A comprehensive class reference guide
+
+## 📦 Distribution
+
+### For Static Sites
+
+1. Copy `/dist/styles.css` to your project
+2. Copy `/vanilla/js/components.js` to your project
+3. Copy component markup from `/vanilla/components/`
+
+### For CDN Usage
+
+```html
+
+
+
+
+
+```
+
+## 🔍 Browser Support
+
+- Chrome/Edge (latest 2 versions)
+- Firefox (latest 2 versions)
+- Safari (latest 2 versions)
+
+Requires:
+- CSS Variables support
+- ES6+ JavaScript features
+- LocalStorage (for theme persistence)
+
+## 📚 Full Documentation
+
+- [Main Documentation](../README.md)
+- [Theme Guide](../THEMES.md)
+- [Component Examples](./index.html)
+- [Individual Components](./components/)
+
+## 🤝 Contributing
+
+To add a new vanilla component:
+
+1. Create a new HTML file in `components/`
+2. Extract classes using `extract-components.cjs`
+3. Add JavaScript functionality to `js/components.js` if needed
+4. Update this README with examples
+5. Add link to main `index.html` showcase
+
+## 📄 License
+
+MIT License - see [LICENSE](../LICENSE) for details
+
+## 🙋 Support
+
+For issues and questions:
+- GitHub Issues: https://github.com/atxp/design-system/issues
+- Documentation: https://design-system.atxp.com
+
+---
+
+**Built with ❤️ using HTML, CSS, and vanilla JavaScript**
diff --git a/vanilla/build.sh b/vanilla/build.sh
new file mode 100755
index 0000000..66dbb57
--- /dev/null
+++ b/vanilla/build.sh
@@ -0,0 +1,73 @@
+#!/bin/bash
+
+# ATXP Design System - Vanilla Build Script
+# This script prepares the vanilla HTML/CSS/JS site for deployment
+
+set -e
+
+echo "🚀 Building ATXP Design System - Vanilla Version"
+echo "================================================"
+
+# Step 1: Build the main design system (generates dist/styles.css)
+echo "📦 Step 1: Building design system..."
+cd ..
+pnpm build:css
+pnpm build
+cd vanilla
+
+# Step 2: Copy dist/ into vanilla/dist/
+echo "📁 Step 2: Copying dist/ files into vanilla..."
+rm -rf dist
+cp -r ../dist ./dist
+
+# Step 3: Update all references from ../dist to ./dist
+echo "🔄 Step 3: Updating file references..."
+
+# Update all HTML files
+for file in *.html components/*.html; do
+ if [ -f "$file" ]; then
+ echo " Updating $file"
+ # macOS sed requires -i '' for in-place editing
+ if [[ "$OSTYPE" == "darwin"* ]]; then
+ sed -i '' 's|href="../dist/|href="./dist/|g' "$file"
+ sed -i '' 's|src="../dist/|src="./dist/|g' "$file"
+ else
+ sed -i 's|href="../dist/|href="./dist/|g' "$file"
+ sed -i 's|src="../dist/|src="./dist/|g' "$file"
+ fi
+ fi
+done
+
+# Step 4: Create downloadable GZIP archive
+echo "📦 Step 4: Creating downloadable archive..."
+
+# Create a temporary directory for the archive contents
+TEMP_DIR="atxp-design-system-vanilla"
+rm -rf "$TEMP_DIR"
+mkdir -p "$TEMP_DIR"
+
+# Copy all files to the temp directory
+cp -r dist "$TEMP_DIR/"
+cp -r components "$TEMP_DIR/"
+cp -r js "$TEMP_DIR/"
+cp *.html "$TEMP_DIR/" 2>/dev/null || true
+[ -f README.md ] && cp README.md "$TEMP_DIR/"
+
+# Create the tar.gz file
+ARCHIVE_NAME="atxp-design-system-vanilla.tar.gz"
+tar -czf "$ARCHIVE_NAME" "$TEMP_DIR"
+
+# Clean up temp directory
+rm -rf "$TEMP_DIR"
+
+echo "✅ Build complete!"
+echo ""
+echo "📊 Build output:"
+echo " - vanilla/dist/ ($(du -sh dist 2>/dev/null | cut -f1) - CSS and assets)"
+echo " - vanilla/*.html ($(ls -1 *.html | wc -l | tr -d ' ') files)"
+echo " - vanilla/components/*.html ($(ls -1 components/*.html 2>/dev/null | wc -l | tr -d ' ') files)"
+echo " - vanilla/js/*.js ($(ls -1 js/*.js 2>/dev/null | wc -l | tr -d ' ') file)"
+echo " - $ARCHIVE_NAME ($(du -sh $ARCHIVE_NAME 2>/dev/null | cut -f1))"
+echo ""
+echo "🌐 Site ready for deployment from ./vanilla directory"
+echo "📥 Download archive: ./$ARCHIVE_NAME"
diff --git a/vanilla/components/alert.html b/vanilla/components/alert.html
new file mode 100644
index 0000000..311bb61
--- /dev/null
+++ b/vanilla/components/alert.html
@@ -0,0 +1,126 @@
+
+
+
+
+
+ Alert Component - ATXP Design System
+
+
+
+
+
Alert Component
+
+
+
+
Default Alert
+
+
+
+
+
Heads up!
+
+
You can add components to your app using the cli.
+
+
+
+
+
+
+
+
Did you know?
+
+
This design system supports multiple themes including light, dark, ATXP, and DBG variants.
+
+
+
+
+
+
+
+
+
Destructive Alert
+
+
+
+
+
Error
+
+
Your session has expired. Please log in again.
+
+
+
+
+
+
+
+
Warning
+
+
This action cannot be undone. This will permanently delete your account and remove your data from our servers.
Organize content into separate views where only one view is visible at a time.
+
+
+
+
+
+
+
+
+
+
+
+
Account Settings
+
+ Make changes to your account here. Click save when you're done.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Change Password
+
+ Update your password here. After saving, you'll be logged out.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Notification Settings
+
+ Configure how you receive notifications.
+
+
+
+
+
Email Notifications
+
Receive email updates
+
+
+
+
+
+
Push Notifications
+
Receive push notifications
+
+
+
+
+
+
+
+
+
+
+
+
Accordion
+
Collapsible content sections for organizing information.
+
+
+
+
+
+
+
+
+
+ The ATXP Design System is a comprehensive collection of reusable components, design tokens, and guidelines that help teams build consistent and accessible user interfaces quickly.
+
+
+
+
+
+
+
+
+
+
+
+ You can install the design system using npm or yarn:
+ npm install @atxp/design-system
+ Then import the CSS in your application.
+
+
+
+
+
+
+
+
+
+
+
+ Yes! The design system supports multiple themes (light, dark, ATXP, DBG) and you can easily create custom themes by defining CSS variables. All theme tokens use CSS custom properties for maximum flexibility.
+
+
+
+
+
+
+
+
+
+
+
+ Absolutely! All components are built with accessibility in mind, following WAI-ARIA guidelines. Components include proper ARIA labels, keyboard navigation, focus management, and screen reader support.
+
+ <html data-theme="light"> <!-- or dark, atxp, dbg, auto -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to ATXP Design System
+
This is a demo dialog component.
+
+
+
+
This dialog demonstrates the interactive capabilities of the vanilla JavaScript components. You can close it by clicking the X button, clicking outside, or pressing ESC.