/* ======================================== CLQMS Frontend - Fun & Light Theme ======================================== */ /* ---------- CSS Variables ---------- */ :root { /* Fun Color Palette */ --primary: #6366f1; /* Indigo */ --primary-light: #818cf8; --primary-dark: #4f46e5; --secondary: #f472b6; /* Pink */ --secondary-light: #f9a8d4; --accent: #34d399; /* Emerald */ --accent-light: #6ee7b7; --warning: #fbbf24; /* Amber */ --danger: #f87171; /* Red */ --info: #38bdf8; /* Sky */ /* Neutrals */ --bg-primary: #fefefe; --bg-secondary: #f8fafc; --bg-card: #ffffff; --text-primary: #1e293b; --text-secondary: #64748b; --text-muted: #94a3b8; --border-color: #e2e8f0; --border-radius: 16px; --border-radius-sm: 10px; --border-radius-lg: 24px; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --shadow-md: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --shadow-lg: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --shadow-glow: 0 0 40px -10px var(--primary); /* Transitions */ --transition-fast: 150ms ease; --transition-normal: 250ms ease; --transition-slow: 350ms ease; } /* ---------- Reset & Base ---------- */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg-secondary); color: var(--text-primary); line-height: 1.6; min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ---------- Typography ---------- */ h1, h2, h3, h4, h5, h6 { font-weight: 700; line-height: 1.2; color: var(--text-primary); } h1 { font-size: 2.5rem; } h2 { font-size: 2rem; } h3 { font-size: 1.5rem; } h4 { font-size: 1.25rem; } p { color: var(--text-secondary); } a { color: var(--primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--primary-dark); } /* ---------- Fun Background Patterns ---------- */ .bg-pattern { background-color: var(--bg-secondary); background-image: radial-gradient(circle at 20% 80%, rgba(99, 102, 241, 0.08) 0%, transparent 50%), radial-gradient(circle at 80% 20%, rgba(244, 114, 182, 0.08) 0%, transparent 50%), radial-gradient(circle at 40% 40%, rgba(52, 211, 153, 0.06) 0%, transparent 40%); } .bg-gradient-fun { background: linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(244, 114, 182, 0.1) 50%, rgba(52, 211, 153, 0.1) 100%); } /* ---------- Card Component ---------- */ .card { background: var(--bg-card); border-radius: var(--border-radius); box-shadow: var(--shadow-md); padding: 2rem; transition: transform var(--transition-normal), box-shadow var(--transition-normal); } .card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } .card-glass { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.5); } /* ---------- Form Elements ---------- */ .form-group { margin-bottom: 1.5rem; } .form-label { display: block; font-size: 0.875rem; font-weight: 600; color: var(--text-primary); margin-bottom: 0.5rem; } .form-input { width: 100%; padding: 0.875rem 1rem; font-size: 1rem; font-family: inherit; color: var(--text-primary); background: var(--bg-secondary); border: 2px solid var(--border-color); border-radius: var(--border-radius-sm); transition: all var(--transition-fast); outline: none; } .form-input:focus { border-color: var(--primary); background: var(--bg-card); box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.15); } .form-input:hover:not(:focus) { border-color: var(--text-muted); } .form-input::placeholder { color: var(--text-muted); } .form-input-icon { position: relative; } .form-input-icon .icon { position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; transition: color var(--transition-fast); } .form-input-icon .form-input { padding-left: 2.75rem; } .form-input-icon:focus-within .icon { color: var(--primary); } /* Password toggle */ .password-toggle { position: absolute; right: 1rem; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--text-muted); cursor: pointer; padding: 0.25rem; transition: color var(--transition-fast); } .password-toggle:hover { color: var(--primary); } /* ---------- Buttons ---------- */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.875rem 1.5rem; font-size: 1rem; font-weight: 600; font-family: inherit; border: none; border-radius: var(--border-radius-sm); cursor: pointer; transition: all var(--transition-fast); outline: none; text-decoration: none; } .btn:disabled { opacity: 0.6; cursor: not-allowed; } .btn-primary { background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); color: white; box-shadow: 0 4px 14px -3px rgba(99, 102, 241, 0.5); } .btn-primary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 6px 20px -3px rgba(99, 102, 241, 0.6); } .btn-primary:active:not(:disabled) { transform: translateY(0); } .btn-secondary { background: var(--bg-secondary); color: var(--text-primary); border: 2px solid var(--border-color); } .btn-secondary:hover:not(:disabled) { background: var(--bg-card); border-color: var(--primary); color: var(--primary); } .btn-ghost { background: transparent; color: var(--text-secondary); } .btn-ghost:hover { background: var(--bg-secondary); color: var(--primary); } .btn-block { width: 100%; } .btn-lg { padding: 1rem 2rem; font-size: 1.125rem; border-radius: var(--border-radius); } /* ---------- Checkbox ---------- */ .checkbox-wrapper { display: flex; align-items: center; gap: 0.75rem; cursor: pointer; } .checkbox-input { width: 1.25rem; height: 1.25rem; accent-color: var(--primary); cursor: pointer; } .checkbox-label { font-size: 0.875rem; color: var(--text-secondary); user-select: none; } /* ---------- Alerts ---------- */ .alert { padding: 1rem 1.25rem; border-radius: var(--border-radius-sm); font-size: 0.875rem; font-weight: 500; display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1.5rem; } .alert-error { background: rgba(248, 113, 113, 0.15); color: #dc2626; border: 1px solid rgba(248, 113, 113, 0.3); } .alert-success { background: rgba(52, 211, 153, 0.15); color: #059669; border: 1px solid rgba(52, 211, 153, 0.3); } .alert-info { background: rgba(56, 189, 248, 0.15); color: #0284c7; border: 1px solid rgba(56, 189, 248, 0.3); } /* ---------- Spinner ---------- */ .spinner { width: 1.25rem; height: 1.25rem; border: 2px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ---------- Login Page Specific ---------- */ .login-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 2rem; } .login-card { width: 100%; max-width: 420px; } .login-header { text-align: center; margin-bottom: 2rem; } .login-logo { width: 80px; height: 80px; margin: 0 auto 1.5rem; background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); border-radius: 20px; display: flex; align-items: center; justify-content: center; font-size: 2rem; color: white; box-shadow: 0 10px 30px -10px rgba(99, 102, 241, 0.5); animation: float 3s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } .login-title { font-size: 1.75rem; margin-bottom: 0.5rem; background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .login-subtitle { color: var(--text-muted); font-size: 0.95rem; } .login-footer { text-align: center; margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--border-color); } .login-footer p { font-size: 0.875rem; } /* ---------- Decorative Elements ---------- */ .floating-shapes { position: fixed; inset: 0; pointer-events: none; overflow: hidden; z-index: -1; } .shape { position: absolute; border-radius: 50%; opacity: 0.5; animation: floatShape 20s ease-in-out infinite; } .shape-1 { width: 300px; height: 300px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.15) 0%, transparent 70%); top: -100px; right: -100px; animation-delay: 0s; } .shape-2 { width: 400px; height: 400px; background: linear-gradient(135deg, rgba(244, 114, 182, 0.12) 0%, transparent 70%); bottom: -150px; left: -150px; animation-delay: -7s; } .shape-3 { width: 200px; height: 200px; background: linear-gradient(135deg, rgba(52, 211, 153, 0.12) 0%, transparent 70%); top: 40%; left: 10%; animation-delay: -14s; } @keyframes floatShape { 0%, 100% { transform: translate(0, 0) rotate(0deg); } 25% { transform: translate(20px, -30px) rotate(5deg); } 50% { transform: translate(-10px, 20px) rotate(-5deg); } 75% { transform: translate(30px, 10px) rotate(3deg); } } /* ---------- Utilities ---------- */ .text-center { text-align: center; } .text-muted { color: var(--text-muted); } .text-primary { color: var(--primary); } .text-sm { font-size: 0.875rem; } .mt-1 { margin-top: 0.25rem; } .mt-2 { margin-top: 0.5rem; } .mt-4 { margin-top: 1rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-4 { margin-bottom: 1rem; } .flex { display: flex; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: 0.5rem; } /* ---------- Animations ---------- */ .fade-in { animation: fadeIn 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .shake { animation: shake 0.5s ease-in-out; } @keyframes shake { 0%, 100% { transform: translateX(0); } 20%, 60% { transform: translateX(-5px); } 40%, 80% { transform: translateX(5px); } } /* ---------- Responsive ---------- */ @media (max-width: 480px) { .login-container { padding: 1rem; } .card { padding: 1.5rem; } .login-logo { width: 64px; height: 64px; font-size: 1.5rem; } .login-title { font-size: 1.5rem; } }