* { margin: 0; padding: 0; box-sizing: border-box; } :root { --primary: #6366f1; --primary-dark: #4f46e5; --secondary: #10b981; --danger: #ef4444; --background: #f8fafc; --surface: #ffffff; --text: #1e293b; --text-muted: #64748b; --border: #e2e8f0; --shadow: 0 1px 3px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background-color: var(--background); color: var(--text); line-height: 1.6; } a { color: var(--primary); text-decoration: none; } a:hover { text-decoration: underline; } button { cursor: pointer; font-family: inherit; } input, button { font-size: 1rem; } .container { max-width: 1200px; margin: 0 auto; padding: 0 1rem; } /* Form styles */ .form-group { margin-bottom: 1rem; } .form-group label { display: block; margin-bottom: 0.5rem; font-weight: 500; color: var(--text); } .form-group input, .form-group select { width: 100%; padding: 0.75rem; border: 1px solid var(--border); border-radius: 0.5rem; font-size: 1rem; transition: border-color 0.2s, box-shadow 0.2s; } .form-group input:focus, .form-group select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); } /* Button styles */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.75rem 1.5rem; border: none; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s; } .btn-primary { background-color: var(--primary); color: white; } .btn-primary:hover { background-color: var(--primary-dark); } .btn-secondary { background-color: var(--surface); color: var(--text); border: 1px solid var(--border); } .btn-secondary:hover { background-color: var(--background); } .btn-danger { background-color: var(--danger); color: white; } .btn-danger:hover { background-color: #dc2626; } .btn:disabled { opacity: 0.6; cursor: not-allowed; } /* Card styles */ .card { background: var(--surface); border-radius: 0.75rem; box-shadow: var(--shadow); overflow: hidden; } .card-header { padding: 1rem 1.5rem; border-bottom: 1px solid var(--border); } .card-body { padding: 1.5rem; } /* Alert styles */ .alert { padding: 1rem; border-radius: 0.5rem; margin-bottom: 1rem; } .alert-error { background-color: #fef2f2; color: #991b1b; border: 1px solid #fecaca; } .alert-success { background-color: #f0fdf4; color: #166534; border: 1px solid #bbf7d0; } /* Loading spinner */ .spinner { display: inline-block; width: 1.5rem; height: 1.5rem; border: 2px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Utility classes */ .text-center { text-align: center; } .text-muted { color: var(--text-muted); } .mt-1 { margin-top: 0.25rem; } .mt-2 { margin-top: 0.5rem; } .mt-3 { margin-top: 1rem; } .mt-4 { margin-top: 1.5rem; } .mb-1 { margin-bottom: 0.25rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 1rem; } .mb-4 { margin-bottom: 1.5rem; } .flex { display: flex; } .flex-col { flex-direction: column; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: 0.5rem; } .gap-3 { gap: 1rem; } .gap-4 { gap: 1.5rem; }