KTI / data /static /modern_style.css
noranisa's picture
Upload 63 files
b66f2ff verified
Raw
History Blame Contribute Delete
24.6 kB
/* =====================================================================
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 ===== */