| |
| :root { |
| |
| --color-primary-50: #eff6ff; |
| --color-primary-100: #dbeafe; |
| --color-primary-200: #bfdbfe; |
| --color-primary-300: #93c5fd; |
| --color-primary-400: #60a5fa; |
| --color-primary-500: #3b82f6; |
| --color-primary-600: #2563eb; |
| --color-primary-700: #1d4ed8; |
| --color-primary-800: #1e40af; |
| --color-primary-900: #1e3a8a; |
| |
| |
| --color-success-50: #f0fdf4; |
| --color-success-100: #dcfce7; |
| --color-success-200: #bbf7d0; |
| --color-success-300: #86efac; |
| --color-success-400: #4ade80; |
| --color-success-500: #22c55e; |
| --color-success-600: #16a34a; |
| --color-success-700: #15803d; |
| --color-success-800: #166534; |
| --color-success-900: #14532d; |
| |
| |
| --color-warning-50: #fffbeb; |
| --color-warning-100: #fef3c7; |
| --color-warning-200: #fde68a; |
| --color-warning-300: #fcd34d; |
| --color-warning-400: #fbbf24; |
| --color-warning-500: #f59e0b; |
| --color-warning-600: #d97706; |
| --color-warning-700: #b45309; |
| --color-warning-800: #92400e; |
| --color-warning-900: #78350f; |
| |
| |
| --color-danger-50: #fef2f2; |
| --color-danger-100: #fee2e2; |
| --color-danger-200: #fecaca; |
| --color-danger-300: #fca5a5; |
| --color-danger-400: #f87171; |
| --color-danger-500: #ef4444; |
| --color-danger-600: #dc2626; |
| --color-danger-700: #b91c1c; |
| --color-danger-800: #991b1b; |
| --color-danger-900: #7f1d1d; |
| |
| |
| --color-neutral-50: #f8fafc; |
| --color-neutral-100: #f1f5f9; |
| --color-neutral-200: #e2e8f0; |
| --color-neutral-300: #cbd5e1; |
| --color-neutral-400: #94a3b8; |
| --color-neutral-500: #64748b; |
| --color-neutral-600: #475569; |
| --color-neutral-700: #334155; |
| --color-neutral-800: #1e293b; |
| --color-neutral-900: #0f172a; |
| |
| |
| --spacing-1: 0.25rem; |
| --spacing-2: 0.5rem; |
| --spacing-3: 0.75rem; |
| --spacing-4: 1rem; |
| --spacing-5: 1.25rem; |
| --spacing-6: 1.5rem; |
| --spacing-8: 2rem; |
| --spacing-10: 2.5rem; |
| --spacing-12: 3rem; |
| --spacing-16: 4rem; |
| --spacing-20: 5rem; |
| |
| |
| --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
| --font-mono: 'JetBrains Mono', 'SF Mono', Monaco, monospace; |
| |
| |
| --radius-sm: 0.25rem; |
| --radius-md: 0.5rem; |
| --radius-lg: 0.75rem; |
| --radius-xl: 1rem; |
| --radius-2xl: 1.5rem; |
| --radius-full: 9999px; |
| |
| |
| --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); |
| --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); |
| --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); |
| --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1); |
| |
| |
| --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); |
| --transition-normal: 250ms cubic-bezier(0.4, 0, 0.2, 1); |
| --transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1); |
| } |
|
|
| |
| :root { |
| --color-primary: var(--color-primary-500); |
| --color-success: var(--color-success-500); |
| --color-warning: var(--color-warning-500); |
| --color-danger: var(--color-danger-500); |
| --color-border: var(--color-neutral-200); |
| --color-bg: var(--color-neutral-50); |
| --color-text: var(--color-neutral-900); |
| --color-text-secondary: var(--color-neutral-600); |
| } |
|
|
| |
| [data-theme="dark"] { |
| --color-primary: var(--color-primary-400); |
| --color-success: var(--color-success-400); |
| --color-warning: var(--color-warning-400); |
| --color-danger: var(--color-danger-400); |
| --color-border: var(--color-neutral-700); |
| --color-bg: var(--color-neutral-900); |
| --color-text: var(--color-neutral-100); |
| --color-text-secondary: var(--color-neutral-400); |
| } |
|
|
| |
| * { |
| box-sizing: border-box; |
| } |
|
|
| body { |
| font-family: var(--font-sans); |
| color: var(--color-text); |
| background: var(--color-bg); |
| margin: 0; |
| padding: 0; |
| line-height: 1.5; |
| } |
|
|
| |
| .container { |
| width: 100%; |
| max-width: 1200px; |
| margin: 0 auto; |
| padding: 0 var(--spacing-4); |
| } |
|
|
| .container-sm { |
| max-width: 800px; |
| } |
|
|
| .container-lg { |
| max-width: 1400px; |
| } |
|
|
| |
| .grid { |
| display: grid; |
| gap: var(--spacing-4); |
| } |
|
|
| .grid-2 { |
| grid-template-columns: repeat(2, 1fr); |
| } |
|
|
| .grid-3 { |
| grid-template-columns: repeat(3, 1fr); |
| } |
|
|
| .grid-4 { |
| grid-template-columns: repeat(4, 1fr); |
| } |
|
|
| |
| .flex { |
| display: flex; |
| } |
|
|
| .flex-col { |
| flex-direction: column; |
| } |
|
|
| .items-center { |
| align-items: center; |
| } |
|
|
| .justify-between { |
| justify-content: space-between; |
| } |
|
|
| .justify-center { |
| justify-content: center; |
| } |
|
|
| .gap-2 { |
| gap: var(--spacing-2); |
| } |
|
|
| .gap-4 { |
| gap: var(--spacing-4); |
| } |
|
|
| .gap-6 { |
| gap: var(--spacing-6); |
| } |
|
|
| |
| .card { |
| background: white; |
| border-radius: var(--radius-lg); |
| border: 1px solid var(--color-border); |
| padding: var(--spacing-6); |
| transition: box-shadow var(--transition-normal); |
| } |
|
|
| .card:hover { |
| box-shadow: var(--shadow-md); |
| } |
|
|
| .card-elevated { |
| box-shadow: var(--shadow-lg); |
| border: none; |
| } |
|
|
| .card-outlined { |
| border: 2px solid var(--color-primary); |
| background: transparent; |
| } |
|
|
| |
| .btn { |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| padding: var(--spacing-2) var(--spacing-4); |
| border-radius: var(--radius-md); |
| font-weight: 500; |
| font-size: 0.875rem; |
| border: none; |
| cursor: pointer; |
| transition: all var(--transition-fast); |
| text-decoration: none; |
| gap: var(--spacing-2); |
| } |
|
|
| .btn:disabled { |
| opacity: 0.5; |
| cursor: not-allowed; |
| } |
|
|
| .btn-primary { |
| background: var(--color-primary); |
| color: white; |
| } |
|
|
| .btn-primary:hover:not(:disabled) { |
| background: var(--color-primary-600); |
| } |
|
|
| .btn-secondary { |
| background: var(--color-neutral-100); |
| color: var(--color-text); |
| border: 1px solid var(--color-border); |
| } |
|
|
| .btn-secondary:hover:not(:disabled) { |
| background: var(--color-neutral-200); |
| } |
|
|
| |
| .text-sm { |
| font-size: 0.875rem; |
| } |
|
|
| .text-base { |
| font-size: 1rem; |
| } |
|
|
| .text-lg { |
| font-size: 1.125rem; |
| } |
|
|
| .text-xl { |
| font-size: 1.25rem; |
| } |
|
|
| .text-2xl { |
| font-size: 1.5rem; |
| } |
|
|
| .font-medium { |
| font-weight: 500; |
| } |
|
|
| .font-semibold { |
| font-weight: 600; |
| } |
|
|
| .font-bold { |
| font-weight: 700; |
| } |
|
|
| .text-primary { |
| color: var(--color-primary); |
| } |
|
|
| .text-success { |
| color: var(--color-success); |
| } |
|
|
| .text-warning { |
| color: var(--color-warning); |
| } |
|
|
| .text-danger { |
| color: var(--color-danger); |
| } |
|
|
| .text-muted { |
| color: var(--color-text-secondary); |
| } |
|
|
| |
| .gradient-primary { |
| background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-700) 100%); |
| } |
|
|
| .gradient-success { |
| background: linear-gradient(135deg, var(--color-success) 0%, var(--color-success-700) 100%); |
| } |
|
|
| .gradient-warning { |
| background: linear-gradient(135deg, var(--color-warning) 0%, var(--color-warning-700) 100%); |
| } |
|
|
| |
| :focus { |
| outline: 2px solid var(--color-primary); |
| outline-offset: 2px; |
| } |
|
|
| :focus:not(:focus-visible) { |
| outline: none; |
| } |