/* ================================================================ AfterSales CRM — Design System v2 Material Design 3 inspired, Real-estate CRM ================================================================ */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap'); /* ---------- CSS Variables (Design Tokens) ---------- */ :root { /* Primary palette — Indigo */ --crm-primary: #1a56db; --crm-primary-hover: #1e40af; --crm-primary-light: #e8effc; --crm-primary-container: #dbeafe; --crm-on-primary: #ffffff; --crm-on-primary-container: #1e3a5f; /* Secondary palette — Slate */ --crm-secondary: #64748b; --crm-secondary-container: #f1f5f9; --crm-on-secondary: #ffffff; --crm-on-secondary-container: #334155; /* Accent */ --crm-accent: #7c3aed; --crm-accent-light: #ede9fe; /* Surface / Background */ --crm-background: #f1f5f9; --crm-surface: #ffffff; --crm-surface-dim: #f8fafc; --crm-surface-container: #f1f5f9; --crm-surface-container-high: #e2e8f0; --crm-surface-hover: #e8effc; /* Text */ --crm-text-primary: #0f172a; --crm-text-secondary: #475569; --crm-text-tertiary: #94a3b8; --crm-text-inverse: #ffffff; /* Borders */ --crm-border: #e2e8f0; --crm-border-strong: #cbd5e1; --crm-border-focus: #1a56db; /* Status colors */ --crm-pending: #d97706; --crm-pending-bg: #fffbeb; --crm-pending-border: #fde68a; --crm-processing: #2563eb; --crm-processing-bg: #eff6ff; --crm-processing-border: #bfdbfe; --crm-resolved: #059669; --crm-resolved-bg: #ecfdf5; --crm-resolved-border: #a7f3d0; --crm-closed: #6b7280; --crm-closed-bg: #f9fafb; --crm-closed-border: #e5e7eb; --crm-escalated: #dc2626; --crm-escalated-bg: #fef2f2; /* Spacing */ --crm-nav-height: 64px; --crm-sidebar-width: 260px; --crm-radius-sm: 6px; --crm-radius-md: 10px; --crm-radius-lg: 14px; --crm-radius-xl: 18px; --crm-radius-full: 9999px; /* Shadows */ --crm-shadow-sm: 0 1px 2px rgba(0,0,0,0.05); --crm-shadow-md: 0 4px 6px -1px rgba(0,0,0,0.07), 0 2px 4px -2px rgba(0,0,0,0.05); --crm-shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.08), 0 4px 6px -4px rgba(0,0,0,0.04); --crm-shadow-xl: 0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.06); /* Fonts */ --font-heading: 'Manrope', sans-serif; --font-body: 'Inter', sans-serif; } /* ---------- Reset ---------- */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: var(--font-body); background: var(--crm-background); color: var(--crm-text-primary); line-height: 1.6; -webkit-font-smoothing: antialiased; } /* ---------- Layout ---------- */ .app-layout { display: flex; min-height: 100vh; } /* Sidebar */ .sidebar { width: var(--crm-sidebar-width); background: var(--crm-surface); border-right: 1px solid var(--crm-border); display: flex; flex-direction: column; position: fixed; top: 0; left: 0; bottom: 0; z-index: 100; transition: transform 0.3s ease; } .sidebar-brand { padding: 20px 24px; border-bottom: 1px solid var(--crm-border); display: flex; align-items: center; gap: 12px; } .sidebar-brand-icon { width: 36px; height: 36px; background: linear-gradient(135deg, var(--crm-primary), #3b82f6); border-radius: var(--crm-radius-md); display: flex; align-items: center; justify-content: center; color: white; font-size: 20px; } .sidebar-brand-text { font-family: var(--font-heading); font-weight: 800; font-size: 18px; color: var(--crm-text-primary); letter-spacing: -0.02em; } .sidebar-brand-badge { font-size: 10px; font-weight: 600; background: var(--crm-primary-light); color: var(--crm-primary); padding: 2px 8px; border-radius: var(--crm-radius-full); margin-left: auto; } .sidebar-nav { flex: 1; padding: 16px 12px; overflow-y: auto; } .sidebar-group { margin-bottom: 24px; } .sidebar-group-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--crm-text-tertiary); padding: 0 12px; margin-bottom: 8px; } .sidebar-item { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: var(--crm-radius-md); color: var(--crm-text-secondary); text-decoration: none; font-size: 14px; font-weight: 500; transition: all 0.15s ease; cursor: pointer; position: relative; } .sidebar-item:hover { background: var(--crm-surface-container); color: var(--crm-text-primary); } .sidebar-item.active { background: var(--crm-primary-light); color: var(--crm-primary); font-weight: 600; } .sidebar-item.active::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 3px; height: 20px; background: var(--crm-primary); border-radius: 0 4px 4px 0; } .sidebar-item-icon { width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; } .sidebar-item-badge { margin-left: auto; background: var(--crm-escalated); color: white; font-size: 11px; font-weight: 700; padding: 1px 7px; border-radius: var(--crm-radius-full); min-width: 20px; text-align: center; } .sidebar-footer { padding: 16px; border-top: 1px solid var(--crm-border); } .sidebar-user { display: flex; align-items: center; gap: 12px; padding: 8px; border-radius: var(--crm-radius-md); cursor: pointer; transition: background 0.15s; } .sidebar-user:hover { background: var(--crm-surface-container); } .sidebar-user-avatar { width: 36px; height: 36px; border-radius: var(--crm-radius-full); background: linear-gradient(135deg, #6366f1, #8b5cf6); display: flex; align-items: center; justify-content: center; color: white; font-weight: 700; font-size: 14px; } .sidebar-user-info { flex: 1; min-width: 0; } .sidebar-user-name { font-size: 13px; font-weight: 600; color: var(--crm-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sidebar-user-role { font-size: 11px; color: var(--crm-text-tertiary); text-transform: capitalize; } /* Main Content */ .main-content { flex: 1; margin-left: var(--crm-sidebar-width); min-height: 100vh; } .topbar { height: var(--crm-nav-height); background: var(--crm-surface); border-bottom: 1px solid var(--crm-border); display: flex; align-items: center; justify-content: space-between; padding: 0 32px; position: sticky; top: 0; z-index: 50; backdrop-filter: blur(8px); background: rgba(255,255,255,0.9); } .topbar-left { display: flex; align-items: center; gap: 16px; } .breadcrumb { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--crm-text-tertiary); } .breadcrumb a { color: var(--crm-text-tertiary); text-decoration: none; transition: color 0.15s; } .breadcrumb a:hover { color: var(--crm-primary); } .breadcrumb-sep { font-size: 16px; } .breadcrumb-current { color: var(--crm-text-primary); font-weight: 600; } .topbar-right { display: flex; align-items: center; gap: 8px; } .topbar-btn { width: 40px; height: 40px; border-radius: var(--crm-radius-md); border: none; background: transparent; color: var(--crm-text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; position: relative; } .topbar-btn:hover { background: var(--crm-surface-container); color: var(--crm-text-primary); } .topbar-btn .material-symbols-outlined { font-size: 22px; } .topbar-btn-badge { position: absolute; top: 6px; right: 6px; width: 8px; height: 8px; background: var(--crm-escalated); border-radius: 50%; border: 2px solid var(--crm-surface); } .page-content { padding: 28px 32px; max-width: 1400px; } /* ---------- Page Header ---------- */ .page-header { margin-bottom: 28px; } .page-title { font-family: var(--font-heading); font-size: 28px; font-weight: 800; color: var(--crm-text-primary); letter-spacing: -0.02em; } .page-subtitle { font-size: 14px; color: var(--crm-text-secondary); margin-top: 4px; } /* ---------- Stat Cards ---------- */ .stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 28px; } .stat-card { background: var(--crm-surface); border-radius: var(--crm-radius-lg); padding: 24px; border: 1px solid var(--crm-border); position: relative; overflow: hidden; transition: all 0.2s ease; } .stat-card:hover { box-shadow: var(--crm-shadow-md); transform: translateY(-2px); } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; } .stat-card--success::before { background: linear-gradient(90deg, #059669, #34d399); } .stat-card--warning::before { background: linear-gradient(90deg, #d97706, #fbbf24); } .stat-card--info::before { background: linear-gradient(90deg, #2563eb, #60a5fa); } .stat-card--danger::before { background: linear-gradient(90deg, #dc2626, #f87171); } .stat-card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; } .stat-card-icon { width: 44px; height: 44px; border-radius: var(--crm-radius-md); display: flex; align-items: center; justify-content: center; font-size: 22px; } .stat-card--success .stat-card-icon { background: var(--crm-resolved-bg); color: var(--crm-resolved); } .stat-card--warning .stat-card-icon { background: var(--crm-pending-bg); color: var(--crm-pending); } .stat-card--info .stat-card-icon { background: var(--crm-processing-bg); color: var(--crm-processing); } .stat-card--danger .stat-card-icon { background: var(--crm-escalated-bg); color: var(--crm-escalated); } .stat-card-trend { display: flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 600; padding: 3px 8px; border-radius: var(--crm-radius-full); } .stat-card-trend--up { background: var(--crm-resolved-bg); color: var(--crm-resolved); } .stat-card-trend--down { background: var(--crm-escalated-bg); color: var(--crm-escalated); } .stat-card-value { font-family: var(--font-heading); font-size: 36px; font-weight: 800; color: var(--crm-text-primary); line-height: 1; letter-spacing: -0.02em; } .stat-card-label { font-size: 13px; font-weight: 500; color: var(--crm-text-secondary); margin-top: 6px; } /* ---------- Cards ---------- */ .card { background: var(--crm-surface); border-radius: var(--crm-radius-lg); border: 1px solid var(--crm-border); overflow: hidden; } .card-header { padding: 20px 24px; border-bottom: 1px solid var(--crm-border); display: flex; align-items: center; justify-content: space-between; } .card-title { font-family: var(--font-heading); font-size: 16px; font-weight: 700; color: var(--crm-text-primary); display: flex; align-items: center; gap: 10px; } .card-title-icon { width: 32px; height: 32px; border-radius: var(--crm-radius-sm); display: flex; align-items: center; justify-content: center; font-size: 18px; background: var(--crm-primary-light); color: var(--crm-primary); } .card-body { padding: 24px; } .card-body--compact { padding: 0; } /* ---------- Buttons ---------- */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 20px; border-radius: var(--crm-radius-md); font-family: var(--font-body); font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.15s ease; border: none; text-decoration: none; white-space: nowrap; } .btn:hover { transform: translateY(-1px); } .btn:active { transform: translateY(0); } .btn--primary { background: var(--crm-primary); color: var(--crm-on-primary); box-shadow: 0 1px 3px rgba(26,86,219,0.3); } .btn--primary:hover { background: var(--crm-primary-hover); box-shadow: 0 4px 12px rgba(26,86,219,0.3); } .btn--secondary { background: var(--crm-surface); color: var(--crm-text-secondary); border: 1px solid var(--crm-border); } .btn--secondary:hover { background: var(--crm-surface-container); border-color: var(--crm-border-strong); } .btn--danger { background: var(--crm-surface); color: var(--crm-escalated); border: 1px solid rgba(220,38,38,0.3); } .btn--danger:hover { background: var(--crm-escalated-bg); } .btn--ghost { background: transparent; color: var(--crm-text-secondary); } .btn--ghost:hover { background: var(--crm-surface-container); color: var(--crm-text-primary); } .btn--sm { padding: 6px 14px; font-size: 13px; } .btn--lg { padding: 12px 28px; font-size: 15px; } .btn .material-symbols-outlined { font-size: 18px; } .btn-group { display: flex; gap: 8px; } /* ---------- Badges ---------- */ .badge { display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px; border-radius: var(--crm-radius-full); font-size: 12px; font-weight: 600; white-space: nowrap; } .badge--pending { background: var(--crm-pending-bg); color: var(--crm-pending); border: 1px solid var(--crm-pending-border); } .badge--processing { background: var(--crm-processing-bg); color: var(--crm-processing); border: 1px solid var(--crm-processing-border); } .badge--resolved { background: var(--crm-resolved-bg); color: var(--crm-resolved); border: 1px solid var(--crm-resolved-border); } .badge--closed { background: var(--crm-closed-bg); color: var(--crm-closed); border: 1px solid var(--crm-closed-border); } .badge--escalated { background: var(--crm-escalated-bg); color: var(--crm-escalated); border: 1px solid rgba(220,38,38,0.2); } .badge--sale { background: #ecfdf5; color: #059669; border: 1px solid #a7f3d0; } .badge--lease { background: #eff6ff; color: #2563eb; border: 1px solid #bfdbfe; } .badge--bcc { background: #fffbeb; color: #d97706; border: 1px solid #fde68a; } .badge--dot::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; } /* ---------- Tables ---------- */ .table-container { overflow-x: auto; } table { width: 100%; border-collapse: collapse; } thead { background: var(--crm-surface-dim); } th { padding: 12px 16px; font-size: 12px; font-weight: 700; color: var(--crm-text-secondary); text-align: left; text-transform: uppercase; letter-spacing: 0.04em; border-bottom: 1px solid var(--crm-border); white-space: nowrap; } td { padding: 14px 16px; font-size: 14px; color: var(--crm-text-primary); border-bottom: 1px solid var(--crm-border); vertical-align: middle; } tbody tr { transition: background 0.12s ease; } tbody tr:hover { background: var(--crm-surface-hover); } tbody tr:nth-child(even) { background: var(--crm-surface-dim); } tbody tr:nth-child(even):hover { background: var(--crm-surface-hover); } .table-link { color: var(--crm-primary); text-decoration: none; font-weight: 600; } .table-link:hover { text-decoration: underline; } .table-meta { display: flex; align-items: center; gap: 8px; } .table-avatar { width: 28px; height: 28px; border-radius: var(--crm-radius-full); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; color: white; flex-shrink: 0; } .table-avatar--blue { background: linear-gradient(135deg, #3b82f6, #6366f1); } .table-avatar--green { background: linear-gradient(135deg, #10b981, #059669); } .table-avatar--purple { background: linear-gradient(135deg, #8b5cf6, #7c3aed); } .table-avatar--amber { background: linear-gradient(135deg, #f59e0b, #d97706); } .table-empty { text-align: center; padding: 48px 24px; color: var(--crm-text-tertiary); } .table-empty-icon { font-size: 48px; margin-bottom: 12px; opacity: 0.5; } /* ---------- Filter Bar ---------- */ .filter-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; } .search-input { display: flex; align-items: center; gap: 8px; background: var(--crm-surface); border: 1px solid var(--crm-border); border-radius: var(--crm-radius-md); padding: 0 14px; height: 40px; min-width: 280px; transition: all 0.15s; } .search-input:focus-within { border-color: var(--crm-primary); box-shadow: 0 0 0 3px rgba(26,86,219,0.1); } .search-input .material-symbols-outlined { font-size: 20px; color: var(--crm-text-tertiary); } .search-input input { border: none; background: transparent; outline: none; font-size: 14px; color: var(--crm-text-primary); flex: 1; font-family: var(--font-body); } .search-input input::placeholder { color: var(--crm-text-tertiary); } .filter-select { display: flex; align-items: center; gap: 6px; background: var(--crm-surface); border: 1px solid var(--crm-border); border-radius: var(--crm-radius-md); padding: 0 12px; height: 40px; font-size: 13px; font-weight: 500; color: var(--crm-text-secondary); cursor: pointer; transition: all 0.15s; } .filter-select:hover { border-color: var(--crm-border-strong); background: var(--crm-surface-dim); } .filter-select .material-symbols-outlined { font-size: 18px; } /* ---------- Charts placeholder ---------- */ .chart-placeholder { height: 280px; display: flex; align-items: flex-end; gap: 12px; padding: 20px 0; } .chart-bar { flex: 1; border-radius: var(--crm-radius-sm) var(--crm-radius-sm) 0 0; position: relative; transition: all 0.3s ease; cursor: pointer; min-width: 40px; } .chart-bar:hover { opacity: 0.85; transform: scaleY(1.02); transform-origin: bottom; } .chart-bar-label { position: absolute; bottom: -28px; left: 50%; transform: translateX(-50%); font-size: 11px; font-weight: 600; color: var(--crm-text-tertiary); white-space: nowrap; } .chart-bar-value { position: absolute; top: -24px; left: 50%; transform: translateX(-50%); font-size: 12px; font-weight: 700; color: var(--crm-text-primary); white-space: nowrap; } /* ---------- Interaction Timeline ---------- */ .timeline { display: flex; flex-direction: column; gap: 0; } .timeline-item { display: flex; gap: 16px; padding: 20px 0; position: relative; } .timeline-item:not(:last-child)::after { content: ''; position: absolute; left: 19px; top: 56px; bottom: 0; width: 2px; background: var(--crm-border); } .timeline-dot { width: 40px; height: 40px; border-radius: var(--crm-radius-full); display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 18px; z-index: 1; } .timeline-dot--note { background: var(--crm-processing-bg); color: var(--crm-processing); } .timeline-dot--status { background: var(--crm-resolved-bg); color: var(--crm-resolved); } .timeline-dot--assignment { background: var(--crm-accent-light); color: var(--crm-accent); } .timeline-dot--transfer { background: var(--crm-pending-bg); color: var(--crm-pending); } .timeline-content { flex: 1; min-width: 0; } .timeline-header { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; flex-wrap: wrap; } .timeline-author { font-size: 14px; font-weight: 600; color: var(--crm-text-primary); } .timeline-time { font-size: 12px; color: var(--crm-text-tertiary); } .timeline-type { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: var(--crm-radius-full); background: var(--crm-surface-container); color: var(--crm-text-secondary); } .timeline-body { font-size: 14px; color: var(--crm-text-secondary); line-height: 1.6; } .timeline-attachment { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; padding: 6px 12px; background: var(--crm-surface-dim); border: 1px solid var(--crm-border); border-radius: var(--crm-radius-sm); font-size: 12px; color: var(--crm-primary); text-decoration: none; transition: all 0.15s; } .timeline-attachment:hover { background: var(--crm-primary-light); border-color: var(--crm-primary); } .timeline-attachment .material-symbols-outlined { font-size: 16px; } /* ---------- Detail Sidebar ---------- */ .detail-grid { display: grid; grid-template-columns: 1fr 340px; gap: 24px; } .detail-main { min-width: 0; } .detail-sidebar { display: flex; flex-direction: column; gap: 20px; } /* ---------- Action Card ---------- */ .action-card { background: var(--crm-surface); border-radius: var(--crm-radius-lg); border: 1px solid var(--crm-border); padding: 20px; } .action-card-title { font-family: var(--font-heading); font-size: 14px; font-weight: 700; color: var(--crm-text-primary); margin-bottom: 16px; display: flex; align-items: center; gap: 8px; } .action-card-title .material-symbols-outlined { font-size: 20px; color: var(--crm-primary); } .action-btn { width: 100%; display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-radius: var(--crm-radius-md); border: 1px solid var(--crm-border); background: var(--crm-surface); font-size: 14px; font-weight: 600; color: var(--crm-text-primary); cursor: pointer; transition: all 0.15s; margin-bottom: 8px; } .action-btn:last-child { margin-bottom: 0; } .action-btn:hover { background: var(--crm-primary-light); border-color: var(--crm-primary); color: var(--crm-primary); } .action-btn--danger:hover { background: var(--crm-escalated-bg); border-color: var(--crm-escalated); color: var(--crm-escalated); } .action-btn .material-symbols-outlined { font-size: 20px; } /* ---------- Info List ---------- */ .info-list { display: flex; flex-direction: column; gap: 14px; } .info-item { display: flex; align-items: flex-start; gap: 12px; } .info-item-icon { width: 32px; height: 32px; border-radius: var(--crm-radius-sm); display: flex; align-items: center; justify-content: center; font-size: 18px; background: var(--crm-surface-container); color: var(--crm-text-secondary); flex-shrink: 0; } .info-item-content { flex: 1; min-width: 0; } .info-item-label { font-size: 11px; font-weight: 600; color: var(--crm-text-tertiary); text-transform: uppercase; letter-spacing: 0.04em; } .info-item-value { font-size: 14px; font-weight: 500; color: var(--crm-text-primary); margin-top: 2px; } /* ---------- Transfer Log ---------- */ .transfer-log { display: flex; flex-direction: column; gap: 12px; } .transfer-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: var(--crm-surface-dim); border-radius: var(--crm-radius-sm); font-size: 13px; } .transfer-arrow { color: var(--crm-text-tertiary); font-size: 18px; } .transfer-dept { font-weight: 600; color: var(--crm-text-primary); padding: 2px 8px; background: var(--crm-surface); border-radius: var(--crm-radius-sm); border: 1px solid var(--crm-border); } .transfer-meta { margin-left: auto; font-size: 11px; color: var(--crm-text-tertiary); text-align: right; } /* ---------- Forms ---------- */ .form-group { margin-bottom: 20px; } .form-label { display: block; font-size: 13px; font-weight: 600; color: var(--crm-text-primary); margin-bottom: 6px; } .form-input { width: 100%; padding: 10px 14px; border: 1px solid var(--crm-border); border-radius: var(--crm-radius-md); font-size: 14px; font-family: var(--font-body); color: var(--crm-text-primary); background: var(--crm-surface); transition: all 0.15s; outline: none; } .form-input:focus { border-color: var(--crm-primary); box-shadow: 0 0 0 3px rgba(26,86,219,0.1); } .form-input::placeholder { color: var(--crm-text-tertiary); } textarea.form-input { resize: vertical; min-height: 100px; line-height: 1.6; } select.form-input { cursor: pointer; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; padding-right: 40px; } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .form-toggle { display: flex; align-items: center; gap: 10px; cursor: pointer; } .toggle-switch { width: 44px; height: 24px; background: var(--crm-border-strong); border-radius: 12px; position: relative; transition: background 0.2s; } .toggle-switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; background: white; border-radius: 50%; transition: transform 0.2s; box-shadow: var(--crm-shadow-sm); } .toggle-switch.active { background: var(--crm-primary); } .toggle-switch.active::after { transform: translateX(20px); } .toggle-label { font-size: 14px; font-weight: 500; color: var(--crm-text-primary); } /* ---------- Login Page ---------- */ .login-layout { min-height: 100vh; display: flex; } .login-left { flex: 1; background: linear-gradient(135deg, #1a56db 0%, #3b82f6 50%, #6366f1 100%); display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 48px; position: relative; overflow: hidden; } .login-left::before { content: ''; position: absolute; top: -50%; right: -50%; width: 100%; height: 100%; background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%); } .login-left-content { position: relative; z-index: 1; text-align: center; color: white; max-width: 400px; } .login-left-icon { width: 80px; height: 80px; background: rgba(255,255,255,0.2); border-radius: var(--crm-radius-xl); display: flex; align-items: center; justify-content: center; margin: 0 auto 24px; font-size: 40px; backdrop-filter: blur(10px); } .login-left h1 { font-family: var(--font-heading); font-size: 32px; font-weight: 800; margin-bottom: 12px; letter-spacing: -0.02em; } .login-left p { font-size: 16px; opacity: 0.9; line-height: 1.6; } .login-right { width: 480px; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 48px; background: var(--crm-surface); } .login-form-container { width: 100%; max-width: 360px; } .login-form-header { margin-bottom: 32px; } .login-form-header h2 { font-family: var(--font-heading); font-size: 24px; font-weight: 800; color: var(--crm-text-primary); margin-bottom: 8px; } .login-form-header p { font-size: 14px; color: var(--crm-text-secondary); } .login-form .form-group { margin-bottom: 20px; } .login-form .btn--primary { width: 100%; padding: 12px; font-size: 15px; } .login-divider { display: flex; align-items: center; gap: 16px; margin: 24px 0; color: var(--crm-text-tertiary); font-size: 12px; } .login-divider::before, .login-divider::after { content: ''; flex: 1; height: 1px; background: var(--crm-border); } .login-demo { background: var(--crm-surface-dim); border: 1px solid var(--crm-border); border-radius: var(--crm-radius-md); padding: 16px; } .login-demo-title { font-size: 12px; font-weight: 700; color: var(--crm-text-tertiary); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 12px; } .login-demo-accounts { display: flex; flex-direction: column; gap: 8px; } .login-demo-account { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; background: var(--crm-surface); border-radius: var(--crm-radius-sm); border: 1px solid var(--crm-border); cursor: pointer; transition: all 0.15s; } .login-demo-account:hover { border-color: var(--crm-primary); background: var(--crm-primary-light); } .login-demo-role { font-size: 13px; font-weight: 600; color: var(--crm-text-primary); } .login-demo-email { font-size: 12px; color: var(--crm-text-tertiary); font-family: 'Courier New', monospace; } /* ---------- Pagination ---------- */ .pagination { display: flex; align-items: center; justify-content: space-between; padding: 16px 0; } .pagination-info { font-size: 13px; color: var(--crm-text-secondary); } .pagination-buttons { display: flex; gap: 4px; } .pagination-btn { width: 36px; height: 36px; border-radius: var(--crm-radius-sm); border: 1px solid var(--crm-border); background: var(--crm-surface); color: var(--crm-text-secondary); font-size: 13px; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; } .pagination-btn:hover { background: var(--crm-surface-container); } .pagination-btn.active { background: var(--crm-primary); color: white; border-color: var(--crm-primary); } /* ---------- Responsive ---------- */ @media (max-width: 1280px) { .stats-grid { grid-template-columns: repeat(2, 1fr); } .detail-grid { grid-template-columns: 1fr; } } @media (max-width: 768px) { .sidebar { transform: translateX(-100%); } .main-content { margin-left: 0; } .stats-grid { grid-template-columns: 1fr; } .page-content { padding: 20px 16px; } .filter-bar { flex-direction: column; align-items: stretch; } .search-input { min-width: auto; } } /* ---------- Utility ---------- */ .text-center { text-align: center; } .text-right { text-align: right; } .mt-4 { margin-top: 16px; } .mt-6 { margin-top: 24px; } .mb-4 { margin-bottom: 16px; } .mb-6 { margin-bottom: 24px; } .flex { display: flex; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: 8px; } .gap-3 { gap: 12px; } .gap-4 { gap: 16px; } .w-full { width: 100%; }