/* ===================================================================== MODERN DESIGN SYSTEM - Semantic Literature Review App Premium Dark Theme with Glassmorphism ===================================================================== */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Poppins:wght@400;500;600;700;800&display=swap'); /* ===== 1. VARIABLES ===== */ :root { --bg-primary: #0a0a1a; --bg-secondary: #0f0f23; --bg-tertiary: #141432; --bg-card: rgba(20, 20, 50, 0.6); --bg-card-solid: #16163a; --bg-glass: rgba(255, 255, 255, 0.03); --bg-glass-hover: rgba(255, 255, 255, 0.06); --border-glass: rgba(255, 255, 255, 0.08); --border-glass-hover: rgba(255, 255, 255, 0.15); --accent-1: #6366f1; --accent-2: #8b5cf6; --accent-3: #06b6d4; --accent-4: #10b981; --accent-5: #f59e0b; --accent-6: #ef4444; --gradient-primary: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #06b6d4 100%); --gradient-accent: linear-gradient(135deg, #6366f1, #a855f7); --gradient-success: linear-gradient(135deg, #10b981, #06b6d4); --gradient-warning: linear-gradient(135deg, #f59e0b, #ef4444); --gradient-info: linear-gradient(135deg, #06b6d4, #6366f1); --gradient-danger: linear-gradient(135deg, #ef4444, #f59e0b); --text-primary: #f0f0ff; --text-secondary: #a0a0c0; --text-muted: #6b6b8d; --text-accent: #818cf8; --shadow-sm: 0 2px 8px rgba(0,0,0,0.3); --shadow-md: 0 4px 16px rgba(0,0,0,0.4); --shadow-lg: 0 8px 32px rgba(0,0,0,0.5); --shadow-glow: 0 0 20px rgba(99,102,241,0.15); --shadow-glow-hover: 0 0 30px rgba(99,102,241,0.25); --radius-sm: 6px; --radius-md: 10px; --radius-lg: 16px; --radius-xl: 20px; --radius-full: 9999px; --transition-fast: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 350ms cubic-bezier(0.4, 0, 0.2, 1); --font-display: 'Poppins', sans-serif; --font-body: 'Inter', sans-serif; --font-mono: 'JetBrains Mono', 'Courier New', monospace; } /* ===== LIGHT MODE ===== */ [data-theme="light"] { --bg-primary: #f5f7fb; --bg-secondary: #eef1f8; --bg-tertiary: #e8ecf4; --bg-card: rgba(255, 255, 255, 0.85); --bg-card-solid: #ffffff; --bg-glass: rgba(255, 255, 255, 0.7); --bg-glass-hover: rgba(255, 255, 255, 0.9); --border-glass: rgba(0, 0, 0, 0.08); --border-glass-hover: rgba(0, 0, 0, 0.15); --text-primary: #1a1a2e; --text-secondary: #4a4a6a; --text-muted: #7a7a9a; --text-accent: #4f46e5; --shadow-sm: 0 2px 8px rgba(0,0,0,0.06); --shadow-md: 0 4px 16px rgba(0,0,0,0.08); --shadow-lg: 0 8px 32px rgba(0,0,0,0.1); --shadow-glow: 0 0 20px rgba(99,102,241,0.08); --shadow-glow-hover: 0 0 30px rgba(99,102,241,0.12); } [data-theme="light"] body::before { background: radial-gradient(ellipse at 20% 0%, rgba(99,102,241,0.05) 0%, transparent 50%), radial-gradient(ellipse at 80% 100%, rgba(6,182,212,0.04) 0%, transparent 50%); } [data-theme="light"] .navbar { background: rgba(255,255,255,0.85) !important; border-bottom-color: rgba(0,0,0,0.06); box-shadow: 0 2px 15px rgba(0,0,0,0.06); } [data-theme="light"] .navbar .navbar-brand { color: #1a1a2e !important; } [data-theme="light"] .navbar .nav-link { color: #4a4a6a !important; } [data-theme="light"] .navbar .nav-link:hover { color: #1a1a2e !important; background: rgba(0,0,0,0.04); } [data-theme="light"] .navbar-toggler { border-color: rgba(0,0,0,0.1); } [data-theme="light"] .navbar-toggler-icon { filter: invert(1); } [data-theme="light"] footer { background: rgba(255,255,255,0.9); border-top-color: rgba(0,0,0,0.06); } [data-theme="light"] .card-header { background: rgba(99,102,241,0.06); } [data-theme="light"] .form-control, [data-theme="light"] .form-select { background: rgba(255,255,255,0.9); border-color: rgba(0,0,0,0.12); color: #1a1a2e; } [data-theme="light"] .form-control:focus, [data-theme="light"] .form-select:focus { background: #fff; } [data-theme="light"] .form-control::placeholder { color: #9a9ab0; } [data-theme="light"] .table { color: #4a4a6a; } [data-theme="light"] .table thead { background: rgba(99,102,241,0.04); } [data-theme="light"] .table thead th { color: #6a6a8a; } [data-theme="light"] .table td { border-bottom-color: rgba(0,0,0,0.05); color: #4a4a6a; } [data-theme="light"] .table tbody tr:hover { background: rgba(99,102,241,0.03); } [data-theme="light"] .table-striped tbody tr:nth-of-type(odd) { background: rgba(99,102,241,0.02); } [data-theme="light"] .list-group-item { border-color: rgba(0,0,0,0.06); color: #4a4a6a; } [data-theme="light"] .list-group-item:hover { background: rgba(99,102,241,0.03); } [data-theme="light"] .accordion-button { background: rgba(0,0,0,0.02); color: #1a1a2e; } [data-theme="light"] .accordion-button:not(.collapsed) { background: rgba(99,102,241,0.06); color: var(--accent-1); } [data-theme="light"] .accordion-button::after { filter: none; } [data-theme="light"] .accordion-body { background: #fff; color: #4a4a6a; } [data-theme="light"] .modal-content { background: #fff; } [data-theme="light"] .modal-header { background: rgba(99,102,241,0.06); color: #1a1a2e; } [data-theme="light"] .modal-header .btn-close { filter: none; } [data-theme="light"] .alert .btn-close { filter: none; } [data-theme="light"] .badge.bg-secondary { background: rgba(0,0,0,0.06) !important; color: #6a6a8a !important; } [data-theme="light"] .dataTables_wrapper .dataTables_length select, [data-theme="light"] .dataTables_wrapper .dataTables_filter input { background: #fff !important; color: #1a1a2e !important; border-color: rgba(0,0,0,0.12) !important; } [data-theme="light"] .dataTables_wrapper .dataTables_info, [data-theme="light"] .dataTables_wrapper .dataTables_length label, [data-theme="light"] .dataTables_wrapper .dataTables_filter label { color: #6a6a8a !important; } [data-theme="light"] .dataTables_wrapper .dataTables_paginate .paginate_button { color: #4a4a6a !important; border-color: rgba(0,0,0,0.1) !important; background: transparent !important; } [data-theme="light"] .dataTables_wrapper .dataTables_paginate .paginate_button:hover { background: rgba(99,102,241,0.08) !important; color: var(--accent-1) !important; } [data-theme="light"] .form-check-input { background-color: rgba(0,0,0,0.06); border-color: rgba(0,0,0,0.15); } [data-theme="light"] hr { border-color: rgba(0,0,0,0.08); } /* Theme toggle button */ .theme-toggle { background: transparent; border: 1px solid var(--border-glass-hover); color: var(--text-secondary); width: 38px; height: 38px; border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 200ms ease; font-size: 1.1rem; padding: 0; } .theme-toggle:hover { background: rgba(99,102,241,0.1); border-color: var(--accent-1); color: var(--accent-1); transform: scale(1.05); } /* ===== 2. GLOBAL ===== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { font-family: var(--font-body); background: var(--bg-primary); color: var(--text-primary); line-height: 1.7; -webkit-font-smoothing: antialiased; min-height: 100vh; } body::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(ellipse at 20% 0%, rgba(99,102,241,0.08) 0%, transparent 50%), radial-gradient(ellipse at 80% 100%, rgba(6,182,212,0.06) 0%, transparent 50%); pointer-events: none; z-index: 0; } main, .container, .container-fluid { position: relative; z-index: 1; } ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--bg-primary); } ::-webkit-scrollbar-thumb { background: rgba(99,102,241,0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(99,102,241,0.5); } ::selection { background: rgba(99,102,241,0.3); color: #fff; } a { color: var(--text-accent); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: #a5b4fc; } /* ===== 3. TYPOGRAPHY ===== */ h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); font-weight: 700; line-height: 1.25; color: var(--text-primary); margin-top: 1rem; margin-bottom: 0.75rem; } h1 { font-size: 2.25rem; letter-spacing: -0.03em; } h2 { font-size: 1.75rem; letter-spacing: -0.02em; } h3 { font-size: 1.375rem; } h4 { font-size: 1.125rem; } p { margin-bottom: 1rem; color: var(--text-secondary); } small, .small { font-size: 0.85rem; color: var(--text-muted); } .gradient-text { background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* ===== 4. NAVBAR ===== */ .navbar { background: rgba(10, 10, 26, 0.8) !important; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--border-glass); padding: 0.75rem 0; position: sticky; top: 0; z-index: 1030; box-shadow: 0 4px 30px rgba(0,0,0,0.3); } .navbar .navbar-brand { font-family: var(--font-display); font-size: 1.4rem; font-weight: 700; color: #fff !important; letter-spacing: -0.02em; } .navbar .nav-link { color: var(--text-secondary) !important; font-weight: 500; font-size: 0.9rem; padding: 0.5rem 1rem !important; border-radius: var(--radius-md); transition: all var(--transition-fast); } .navbar .nav-link:hover { color: #fff !important; background: rgba(255,255,255,0.05); } .navbar-dark .navbar-toggler { border-color: var(--border-glass); } .bg-dark { background-color: transparent !important; } /* ===== 5. CARDS (Glassmorphism) ===== */ .card { background: var(--bg-card); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid var(--border-glass); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); transition: all var(--transition-base); overflow: hidden; color: var(--text-primary); } .card:hover { border-color: var(--border-glass-hover); box-shadow: var(--shadow-glow); transform: translateY(-2px); } .card-header { background: rgba(99,102,241,0.1); border-bottom: 1px solid var(--border-glass); color: var(--text-primary); font-weight: 600; padding: 1rem 1.25rem; font-size: 1rem; font-family: var(--font-display); } .card-body { padding: 1.25rem; color: var(--text-secondary); } .card-footer { background: rgba(255,255,255,0.02); border-top: 1px solid var(--border-glass); padding: 0.85rem 1.25rem; color: var(--text-muted); } .card-title { color: var(--text-primary); } .bg-primary { background: var(--gradient-primary) !important; border: none !important; } .bg-success { background: var(--gradient-success) !important; border: none !important; } .bg-info { background: var(--gradient-info) !important; border: none !important; } .text-white { color: #fff !important; } /* Stat Cards */ .stat-card { background: var(--bg-card); backdrop-filter: blur(12px); border: 1px solid var(--border-glass); border-radius: var(--radius-lg); padding: 1.5rem; text-align: center; position: relative; overflow: hidden; transition: all var(--transition-base); } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--gradient-primary); } .stat-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-glow-hover); } .stat-card.success::before { background: var(--gradient-success); } .stat-card.warning::before { background: var(--gradient-warning); } .stat-card.info::before { background: var(--gradient-info); } .stat-card.danger::before { background: var(--gradient-danger); } .stat-value { font-size: 2.5rem; font-weight: 800; font-family: var(--font-display); background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin: 0.5rem 0; } .stat-card.success .stat-value { background: var(--gradient-success); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .stat-card.warning .stat-value { background: var(--gradient-warning); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .stat-card.info .stat-value { background: var(--gradient-info); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .stat-label { font-size: 0.8rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.08em; font-weight: 600; } /* Dashboard stat cards */ .card-value { font-size: 2.5rem; font-weight: 800; font-family: var(--font-display); } /* ===== 6. BUTTONS ===== */ .btn { border-radius: var(--radius-md); padding: 0.5rem 1.25rem; font-weight: 600; font-size: 0.9rem; font-family: var(--font-body); transition: all var(--transition-fast); border: 1px solid transparent; cursor: pointer; display: inline-flex; align-items: center; gap: 0.5rem; } .btn:hover { transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn:active { transform: translateY(0); } .btn-primary { background: var(--gradient-accent); color: #fff; border: none; } .btn-primary:hover { box-shadow: 0 4px 20px rgba(99,102,241,0.4); background: var(--gradient-accent); color: #fff; } .btn-success { background: var(--gradient-success); color: #fff; border: none; } .btn-success:hover { box-shadow: 0 4px 20px rgba(16,185,129,0.4); color: #fff; } .btn-info { background: var(--gradient-info); color: #fff; border: none; } .btn-info:hover { box-shadow: 0 4px 20px rgba(6,182,212,0.4); color: #fff; } .btn-danger { background: var(--gradient-danger); color: #fff; border: none; } .btn-danger:hover { box-shadow: 0 4px 20px rgba(239,68,68,0.4); color: #fff; } .btn-outline-primary { background: transparent; border: 1px solid var(--accent-1); color: var(--accent-1); } .btn-outline-primary:hover { background: rgba(99,102,241,0.1); border-color: var(--accent-1); color: #a5b4fc; } .btn-outline-secondary { border: 1px solid var(--border-glass-hover); color: var(--text-secondary); background: transparent; } .btn-outline-secondary:hover { background: rgba(255,255,255,0.05); border-color: rgba(255,255,255,0.2); color: var(--text-primary); } .btn-lg { padding: 0.75rem 2rem; font-size: 1rem; } .btn-sm { padding: 0.35rem 0.75rem; font-size: 0.8rem; } /* ===== 7. FORMS ===== */ .form-control, .form-select { background: rgba(255,255,255,0.04); border: 1px solid var(--border-glass); border-radius: var(--radius-md); padding: 0.65rem 1rem; font-family: var(--font-body); font-size: 0.95rem; color: var(--text-primary); transition: all var(--transition-fast); } .form-control:focus, .form-select:focus { background: rgba(255,255,255,0.06); border-color: var(--accent-1); box-shadow: 0 0 0 3px rgba(99,102,241,0.15); outline: none; color: var(--text-primary); } .form-control::placeholder { color: var(--text-muted); } .form-label { font-weight: 600; margin-bottom: 0.4rem; color: var(--text-secondary); font-size: 0.9rem; } .form-text { color: var(--text-muted); font-size: 0.8rem; } .form-check-label { color: var(--text-secondary); } .form-check-input { background-color: rgba(255,255,255,0.08); border-color: var(--border-glass-hover); } .form-check-input:checked { background-color: var(--accent-1); border-color: var(--accent-1); } .form-check-input:focus { box-shadow: 0 0 0 3px rgba(99,102,241,0.2); } .form-select option { background: var(--bg-secondary); color: var(--text-primary); } /* ===== 8. BADGES ===== */ .badge { border-radius: var(--radius-full); padding: 0.3em 0.75em; font-weight: 600; font-size: 0.75rem; letter-spacing: 0.03em; } .badge.bg-primary { background: var(--gradient-accent) !important; } .badge.bg-success { background: rgba(16,185,129,0.2) !important; color: #6ee7b7 !important; border: 1px solid rgba(16,185,129,0.3); } .badge.bg-warning { background: rgba(245,158,11,0.2) !important; color: #fcd34d !important; border: 1px solid rgba(245,158,11,0.3); } .badge.bg-danger { background: rgba(239,68,68,0.2) !important; color: #fca5a5 !important; border: 1px solid rgba(239,68,68,0.3); } .badge.bg-info { background: rgba(6,182,212,0.2) !important; color: #67e8f9 !important; border: 1px solid rgba(6,182,212,0.3); } .badge.bg-secondary { background: rgba(255,255,255,0.08) !important; color: var(--text-muted) !important; border: 1px solid var(--border-glass); } .badge.text-dark { color: inherit !important; } /* ===== 9. TABLES ===== */ .table { color: var(--text-secondary); border-color: var(--border-glass); } .table thead { background: rgba(99,102,241,0.08); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.06em; } .table thead th { color: var(--text-muted); border-bottom: 1px solid var(--border-glass); padding: 0.85rem 1rem; font-weight: 600; } .table td { padding: 0.85rem 1rem; border-bottom: 1px solid rgba(255,255,255,0.04); color: var(--text-secondary); vertical-align: middle; } .table tbody tr { transition: background var(--transition-fast); } .table tbody tr:hover { background: rgba(99,102,241,0.05); } .table-striped tbody tr:nth-of-type(odd) { background: rgba(255,255,255,0.02); } .table-striped tbody tr:nth-of-type(odd):hover { background: rgba(99,102,241,0.05); } .table-hover tbody tr:hover { color: var(--text-primary); } /* DataTables overrides */ .dataTables_wrapper .dataTables_length select, .dataTables_wrapper .dataTables_filter input { background: rgba(255,255,255,0.04) !important; border: 1px solid var(--border-glass) !important; color: var(--text-primary) !important; border-radius: var(--radius-md) !important; padding: 0.4rem 0.7rem !important; } .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_length label, .dataTables_wrapper .dataTables_filter label { color: var(--text-muted) !important; font-size: 0.85rem; } .dataTables_wrapper .dataTables_paginate .paginate_button { color: var(--text-secondary) !important; border: 1px solid var(--border-glass) !important; background: transparent !important; border-radius: var(--radius-sm) !important; margin: 0 2px; } .dataTables_wrapper .dataTables_paginate .paginate_button.current { background: var(--gradient-accent) !important; color: #fff !important; border: none !important; } .dataTables_wrapper .dataTables_paginate .paginate_button:hover { background: rgba(99,102,241,0.2) !important; color: #fff !important; } /* ===== 10. ALERTS ===== */ .alert { border-radius: var(--radius-md); padding: 1rem 1.25rem; border: 1px solid; backdrop-filter: blur(8px); } .alert-success { background: rgba(16,185,129,0.1); border-color: rgba(16,185,129,0.3); color: #6ee7b7; } .alert-danger { background: rgba(239,68,68,0.1); border-color: rgba(239,68,68,0.3); color: #fca5a5; } .alert-warning { background: rgba(245,158,11,0.1); border-color: rgba(245,158,11,0.3); color: #fcd34d; } .alert-info { background: rgba(6,182,212,0.1); border-color: rgba(6,182,212,0.3); color: #67e8f9; } .alert-primary { background: rgba(99,102,241,0.1); border-color: rgba(99,102,241,0.3); color: #a5b4fc; } .alert .btn-close { filter: invert(1) brightness(0.7); } /* ===== 11. LIST GROUPS ===== */ .list-group-item { background: transparent; border-color: var(--border-glass); color: var(--text-secondary); transition: background var(--transition-fast); } .list-group-item:hover { background: rgba(255,255,255,0.03); } .list-group-numbered > .list-group-item::before { color: var(--text-muted); } /* ===== 12. ACCORDION ===== */ .accordion-item { background: transparent; border: 1px solid var(--border-glass); } .accordion-button { background: rgba(255,255,255,0.03); color: var(--text-primary); font-weight: 600; font-size: 0.9rem; border: none; box-shadow: none; } .accordion-button:not(.collapsed) { background: rgba(99,102,241,0.1); color: var(--text-accent); box-shadow: none; } .accordion-button::after { filter: invert(1) brightness(0.7); } .accordion-button:focus { box-shadow: none; } .accordion-body { background: rgba(255,255,255,0.02); color: var(--text-secondary); } /* ===== 13. MODALS ===== */ .modal-content { background: var(--bg-card-solid); backdrop-filter: blur(20px); border: 1px solid var(--border-glass); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); } .modal-header { background: rgba(99,102,241,0.1); border-bottom: 1px solid var(--border-glass); color: var(--text-primary); padding: 1.25rem; } .modal-header .btn-close { filter: invert(1) brightness(0.7); } .modal-body { padding: 1.25rem; color: var(--text-secondary); } .modal-footer { background: rgba(255,255,255,0.02); border-top: 1px solid var(--border-glass); padding: 1rem 1.25rem; } /* ===== 14. LOADING & ANIMATIONS ===== */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 5px rgba(99,102,241,0.2); } 50% { box-shadow: 0 0 20px rgba(99,102,241,0.4); } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes gradient-shift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } } .fade-in { animation: fadeInUp 0.6s ease-out both; } .fade-in-delay-1 { animation-delay: 0.1s; } .fade-in-delay-2 { animation-delay: 0.2s; } .fade-in-delay-3 { animation-delay: 0.3s; } .spinner-border { border-width: 3px; border-color: var(--accent-1); border-right-color: transparent; } /* ===== 15. HERO SECTION ===== */ .hero-section { text-align: center; padding: 3rem 1rem; position: relative; border-radius: var(--radius-xl); background: var(--bg-card); border: 1px solid var(--border-glass); margin-bottom: 2rem; overflow: hidden; } .hero-section::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: conic-gradient(from 0deg, transparent 0deg 340deg, rgba(99,102,241,0.08) 340deg 360deg); animation: spin 15s linear infinite; pointer-events: none; } .hero-section h1 { position: relative; font-size: 2.5rem; margin-bottom: 0.75rem; } .hero-section p { position: relative; font-size: 1.1rem; color: var(--text-muted); max-width: 600px; margin: 0 auto; } /* ===== 16. FOOTER ===== */ footer { background: rgba(10,10,26,0.8); border-top: 1px solid var(--border-glass); color: var(--text-muted); padding: 1.5rem; text-align: center; margin-top: auto; position: relative; z-index: 1; } footer p { color: var(--text-muted); margin: 0; font-size: 0.85rem; } /* ===== 17. AUTH PAGES ===== */ .auth-wrapper { min-height: calc(100vh - 80px); display: flex; align-items: center; justify-content: center; padding: 2rem; } .auth-card { width: 100%; max-width: 440px; } .auth-card .card { background: var(--bg-card); border: 1px solid var(--border-glass); padding: 2rem; } .auth-card h2 { text-align: center; margin-bottom: 1.5rem; background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } /* ===== 18. PROFILE PAGE ===== */ .profile-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; } .profile-avatar { width: 60px; height: 60px; border-radius: 50%; background: var(--gradient-primary); display: flex; align-items: center; justify-content: center; font-size: 1.5rem; font-weight: 700; color: #fff; flex-shrink: 0; } /* ===== 19. UTILITY ===== */ .text-muted { color: var(--text-muted) !important; } .text-primary { color: var(--text-accent) !important; } .text-success { color: #6ee7b7 !important; } .text-danger { color: #fca5a5 !important; } .text-body-emphasis { color: var(--text-primary) !important; } .bg-body-tertiary { background: var(--bg-card) !important; border: 1px solid var(--border-glass); border-radius: var(--radius-xl); } .shadow-sm { box-shadow: var(--shadow-sm) !important; } .border-primary { border-color: var(--accent-1) !important; } .fw-bold { font-weight: 600 !important; } hr { border-color: var(--border-glass); opacity: 0.5; } /* API badge colors for dashboard */ .api-badge { font-size: 0.75em; margin-right: 4px; } /* ===== 20. RESPONSIVE ===== */ @media (max-width: 768px) { h1 { font-size: 1.75rem; } h2 { font-size: 1.375rem; } .hero-section { padding: 2rem 1rem; } .hero-section h1 { font-size: 1.75rem; } .stat-value { font-size: 2rem; } .btn { width: 100%; justify-content: center; } } /* ===== END ===== */