Rustelo/templates/shared/unocss.config.ts

273 lines
7.6 KiB
TypeScript
Raw Normal View History

// UnoCSS Configuration
// Generated by cargo rustelo v0.1.0 - Framework-managed file
// Template: content-website | Generation: 2025-10-28T18:46:17.145459+00:00
//
// This file provides the default Rustelo framework CSS configuration.
// To customize colors, fonts, or other design tokens, create a local override
// by copying specific sections to a new file: unocss.local.ts
//
// The framework will automatically merge local configurations with this base.
import { defineConfig, presetUno, presetTypography, presetWebFonts, presetIcons } from 'unocss';
export default defineConfig({
// Framework-provided presets
presets: [
presetUno(),
presetTypography({
cssExtend: {
'h1, h2, h3, h4, h5, h6': {
'font-weight': '600',
'line-height': '1.2',
},
'code': {
'background-color': '#f1f5f9',
'padding': '0.125rem 0.25rem',
'border-radius': '0.25rem',
'font-size': '0.875em',
},
'pre': {
'background-color': '#1e293b !important',
'padding': '1rem',
'border-radius': '0.5rem',
'overflow-x': 'auto',
},
},
}),
presetWebFonts({
fonts: {
sans: 'Inter:400,500,600,700',
mono: 'JetBrains Mono:400,500',
},
}),
presetIcons({
scale: 1.2,
warn: true,
}),
],
// Rustelo framework theme
theme: {
colors: {
// Primary brand colors
primary: {
50: '#eff6ff',
2026-02-08 20:37:49 +00:00
100: '#dbeafe',
200: '#bfdbfe',
300: '#93c5fd',
400: '#60a5fa',
500: '#3b82f6', // Primary
600: '#2563eb',
700: '#1d4ed8',
800: '#1e40af',
900: '#1e3a8a',
950: '#172554',
},
// Secondary/accent colors
secondary: {
50: '#f8fafc',
100: '#f1f5f9',
200: '#e2e8f0',
300: '#cbd5e1',
400: '#94a3b8',
500: '#64748b', // Secondary
600: '#475569',
700: '#334155',
800: '#1e293b',
900: '#0f172a',
950: '#020617',
},
// Success colors
success: {
50: '#f0fdf4',
500: '#22c55e', // Success
600: '#16a34a',
},
2026-02-08 20:37:49 +00:00
// Warning colors
warning: {
50: '#fffbeb',
500: '#f59e0b', // Warning
600: '#d97706',
},
// Error colors
error: {
50: '#fef2f2',
500: '#ef4444', // Error
600: '#dc2626',
},
// Framework rust-inspired colors
rust: {
50: '#fef7f0',
100: '#fdede0',
200: '#fbd9c0',
300: '#f8c295',
400: '#f4a261', // Rust orange
500: '#e76f51', // Rust red
600: '#d55e47',
700: '#b24936',
800: '#8f3a2d',
900: '#73302a',
},
},
2026-02-08 20:37:49 +00:00
// Typography scale
fontSize: {
'xs': ['0.75rem', { lineHeight: '1rem' }],
'sm': ['0.875rem', { lineHeight: '1.25rem' }],
'base': ['1rem', { lineHeight: '1.5rem' }],
'lg': ['1.125rem', { lineHeight: '1.75rem' }],
'xl': ['1.25rem', { lineHeight: '1.75rem' }],
'2xl': ['1.5rem', { lineHeight: '2rem' }],
'3xl': ['1.875rem', { lineHeight: '2.25rem' }],
'4xl': ['2.25rem', { lineHeight: '2.5rem' }],
'5xl': ['3rem', { lineHeight: '1' }],
'6xl': ['3.75rem', { lineHeight: '1' }],
},
// Spacing scale (extended)
spacing: {
'18': '4.5rem',
'88': '22rem',
'128': '32rem',
},
// Animation and transitions
animation: {
'fade-in': 'fadeIn 0.5s ease-in-out',
'slide-up': 'slideUp 0.3s ease-out',
'bounce-soft': 'bounceSoft 0.6s ease-in-out',
'spin-slow': 'spin 2s linear infinite',
},
},
// Custom keyframes
keyframes: {
fadeIn: {
'0%': { opacity: '0' },
'100%': { opacity: '1' },
},
slideUp: {
'0%': { transform: 'translateY(10px)', opacity: '0' },
'100%': { transform: 'translateY(0)', opacity: '1' },
},
bounceSoft: {
'0%, 100%': { transform: 'translateY(0)' },
'50%': { transform: 'translateY(-5px)' },
},
},
// Framework-provided shortcuts
shortcuts: {
// Layout shortcuts
'flex-center': 'flex items-center justify-center',
2026-02-08 20:37:49 +00:00
'flex-between': 'flex items-center justify-between',
'flex-col-center': 'flex flex-col items-center justify-center',
2026-02-08 20:37:49 +00:00
// Button shortcuts
'btn-base': 'inline-flex items-center justify-center rounded-md px-4 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
'btn-primary': 'btn-base bg-primary-600 text-white hover:bg-primary-700 focus-visible:ring-primary-500',
'btn-secondary': 'btn-base bg-secondary-100 text-secondary-900 hover:bg-secondary-200 focus-visible:ring-secondary-500',
'btn-outline': 'btn-base border border-primary-300 bg-transparent text-primary-700 hover:bg-primary-50 focus-visible:ring-primary-500',
'btn-ghost': 'btn-base text-secondary-600 hover:bg-secondary-100 focus-visible:ring-secondary-500',
2026-02-08 20:37:49 +00:00
// Card shortcuts
'card': 'rounded-lg border border-secondary-200 bg-white p-6 shadow-sm',
'card-hover': 'card hover:shadow-md transition-shadow duration-200',
2026-02-08 20:37:49 +00:00
// Input shortcuts
'input-base': 'block w-full rounded-md border-secondary-300 bg-white px-3 py-2 text-sm placeholder-secondary-400 shadow-sm focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500',
2026-02-08 20:37:49 +00:00
// Text shortcuts
'text-muted': 'text-secondary-600',
'text-subtle': 'text-secondary-500',
'heading-1': 'text-4xl font-bold text-secondary-900 tracking-tight',
'heading-2': 'text-3xl font-semibold text-secondary-800 tracking-tight',
'heading-3': 'text-2xl font-semibold text-secondary-800',
2026-02-08 20:37:49 +00:00
// Icon shortcuts
'icon-sm': 'w-4 h-4',
'icon-md': 'w-5 h-5',
'icon-lg': 'w-6 h-6',
},
// Content scanning for CSS generation
content: {
filesystem: [
'./src/**/*.{html,js,ts,jsx,tsx,rs}',
'./assets/**/*.{html,js,css}',
'./templates/**/*.{html,hbs}',
'./content/**/*.{md,mdx}',
],
},
// Framework-provided safelist (always include these classes)
safelist: [
// Common utility classes
'container',
'mx-auto',
'px-4',
'py-2',
'py-4',
'py-8',
2026-02-08 20:37:49 +00:00
// State classes
'hover:bg-primary-700',
'focus:ring-primary-500',
'disabled:opacity-50',
2026-02-08 20:37:49 +00:00
// Animation classes
'animate-fade-in',
'animate-slide-up',
'animate-spin-slow',
'transition-all',
'duration-200',
'duration-300',
2026-02-08 20:37:49 +00:00
// Icon classes
'i-heroicons-outline:home',
'i-heroicons-outline:user',
'i-heroicons-outline:cog',
],
// Development mode
dev: process.env.NODE_ENV === 'development',
});
/*
* CUSTOMIZATION GUIDE
* ===================
2026-02-08 20:37:49 +00:00
*
* To customize this configuration without losing changes during framework updates:
2026-02-08 20:37:49 +00:00
*
* 1. Create 'unocss.local.ts' in your project root
* 2. Export a partial configuration that will be merged:
2026-02-08 20:37:49 +00:00
*
* ```typescript
* // unocss.local.ts
* import { defineConfig } from 'unocss';
2026-02-08 20:37:49 +00:00
*
* export default defineConfig({
* theme: {
* colors: {
* // Override primary color
* primary: {
* 500: '#your-custom-color',
* },
* // Add custom colors
* brand: {
* 500: '#your-brand-color',
* },
* },
* },
* shortcuts: {
* // Add custom shortcuts
* 'btn-brand': 'btn-base bg-brand-500 text-white hover:bg-brand-600',
* },
* });
* ```
2026-02-08 20:37:49 +00:00
*
* 3. The framework will automatically detect and merge your local config.
2026-02-08 20:37:49 +00:00
*
* This approach ensures your customizations persist through framework updates!
2026-02-08 20:37:49 +00:00
*/