/* ============================== */ /* SECURE ADMIN DASHBOARD STYLES */ /* ============================== */ /* Only loaded after authentication for security */ /* Admin-specific CSS variables with security validation */ :root { /* Admin color palette - validated hex values only */ --admin-primary: #1a56db; --admin-primary-light: #3b82f6; --admin-primary-dark: #1e40af; --admin-success: #059669; --admin-warning: #d97706; --admin-error: #dc2626; /* Admin backgrounds */ --admin-bg: var(--color-bg); --admin-bg-secondary: var(--color-bg-secondary); --admin-bg-soft: var(--color-bg-soft); /* Admin text colors */ --admin-text: var(--color-text); --admin-text-light: var(--color-text-light); --admin-text-muted: var(--color-text-muted); /* Admin borders */ --admin-border: var(--color-border); --admin-border-light: var(--color-border-light); } /* Secure Admin Container - CSS containment for isolation */ .admin-container { background-color: var(--admin-bg); color: var(--admin-text); contain: layout style paint; min-height: 100vh; } /* Admin Header */ .admin-header { background-color: var(--admin-bg-soft); border-bottom: 1px solid var(--admin-border); color: var(--admin-text); } .admin-header-title { color: var(--admin-text); font-weight: 600; } .admin-header-user { color: var(--admin-text-light); } /* Admin Sidebar */ .admin-sidebar { background-color: var(--admin-bg-soft); border-right: 1px solid var(--admin-border); contain: layout style; } .admin-sidebar-header { border-bottom: 1px solid var(--admin-border); padding: 1.5rem; } .admin-sidebar-logo { color: var(--admin-text); font-weight: 600; text-decoration: none; transition: color 0.2s ease; } .admin-sidebar-logo:hover { color: var(--admin-primary); } /* Admin Navigation */ .admin-nav { padding: 1rem 0; } .admin-nav-item { display: flex; align-items: center; padding: 0.75rem 1rem; margin: 0.125rem 0.5rem; color: var(--admin-text-light); text-decoration: none; border-radius: 0.5rem; font-weight: 500; transition: all 0.2s ease; /* Prevent CSS injection via content */ background-image: none !important; content: none !important; } .admin-nav-item:hover { background-color: var(--admin-bg-secondary); color: var(--admin-primary); } .admin-nav-item-active { background-color: var(--admin-primary); color: white; font-weight: 600; border-left: 3px solid transparent; transition: all 0.2s ease; } .admin-nav-icon { margin-right: 0.75rem; width: 1.25rem; height: 1.25rem; flex-shrink: 0; } .admin-nav-item-active .admin-nav-icon { color: white; } .admin-nav-item:hover .admin-nav-icon { color: var(--admin-primary); } .admin-nav-item-active:hover .admin-nav-icon { color: white; } /* Admin Logout Button */ .admin-logout { padding: 1rem; border-top: 1px solid var(--admin-border); } .admin-logout-btn { display: flex; align-items: center; width: 100%; padding: 0.75rem 1rem; color: var(--admin-text-light); background: none; border: none; border-radius: 0.5rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; } .admin-logout-btn:hover { background-color: var(--admin-bg-secondary); color: var(--admin-error); } /* Admin Content Area */ .admin-content { background-color: var(--admin-bg); color: var(--admin-text); flex: 1; overflow-y: auto; } .admin-main { padding: 1rem 1.5rem 2rem; } /* Admin Page Titles */ .admin-page-title { color: var(--admin-text); font-weight: 600; margin-bottom: 1.5rem; } .admin-page-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; } .admin-page-header-title { color: var(--admin-text); font-size: 1.5rem; font-weight: 700; } .admin-page-header-subtitle { color: var(--admin-text-light); font-size: 0.875rem; margin-top: 0.25rem; } /* Admin Stat Cards */ .admin-stat-card { background-color: var(--admin-bg-soft); border: 1px solid var(--admin-border-light); border-radius: var(--border-radius-lg); padding: 1.5rem; transition: all 0.3s ease; contain: layout style; } .admin-stat-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-2px); } .admin-stat-icon { background-color: rgba(26, 86, 219, 0.1); color: var(--admin-primary); padding: 0.75rem; border-radius: 50%; display: flex; align-items: center; justify-content: center; width: 3rem; height: 3rem; } .admin-stat-title { color: var(--admin-text-muted); font-weight: 500; font-size: 0.875rem; margin-bottom: 0.25rem; } .admin-stat-value { color: var(--admin-text); font-weight: 600; font-size: 1.5rem; } /* Admin Cards */ .admin-card { background-color: var(--admin-bg-soft); border: 1px solid var(--admin-border-light); border-radius: var(--border-radius-lg); padding: 1.5rem; box-shadow: var(--shadow-md); contain: layout style; margin-bottom: 1.5rem; } .admin-card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .admin-card-title { color: var(--admin-text); font-weight: 600; font-size: 1.125rem; } .admin-card-link { color: var(--admin-primary); font-weight: 500; font-size: 0.875rem; text-decoration: none; transition: color 0.2s ease; } .admin-card-link:hover { color: var(--admin-primary-dark); } /* Admin List Items */ .admin-list { border-top: 1px solid var(--admin-border); } .admin-list-item { padding: 0.75rem 0; border-bottom: 1px solid var(--admin-border); } .admin-list-item:last-child { border-bottom: none; } .admin-list-title { color: var(--admin-text); font-weight: 500; font-size: 0.875rem; } .admin-list-subtitle { color: var(--admin-text-muted); font-size: 0.75rem; margin-top: 0.125rem; } /* Admin Status Badges - Secure with validation */ .admin-badge { padding: 0.25rem 0.625rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 500; /* Security: prevent content injection */ content: none !important; } .admin-badge-success { background-color: #dcfce7; color: #166534; } .admin-badge-warning { background-color: #fef3c7; color: #92400e; } .admin-badge-error { background-color: #fee2e2; color: #991b1b; } .admin-badge-default { background-color: var(--admin-bg-secondary); color: var(--admin-text-muted); } .admin-badge-social { background-color: #dbeafe; color: #1d4ed8; } .admin-badge-educational { background-color: #e9d5ff; color: #7c3aed; } .admin-badge-board { background-color: #fef3c7; color: #d97706; } .admin-badge-athletic { background-color: #e0e7ff; color: #4338ca; } /* Dark theme admin badge overrides */ .dark .admin-badge-success { background-color: #14532d; color: #bbf7d0; } .dark .admin-badge-warning { background-color: #92400e; color: #fde68a; } .dark .admin-badge-error { background-color: #991b1b; color: #fca5a5; } .dark .admin-badge-social { background-color: #1e3a8a; color: #93c5fd; } .dark .admin-badge-educational { background-color: #581c87; color: #c4b5fd; } .dark .admin-badge-board { background-color: #92400e; color: #fde68a; } .dark .admin-badge-athletic { background-color: #3730a3; color: #a5b4fc; } /* Admin Form Elements */ .admin-form-label { display: block; font-size: 0.875rem; font-weight: 500; color: var(--admin-text); margin-bottom: 0.25rem; } .admin-form-select, .admin-form-input { display: block; width: 100%; padding: 0.75rem; background-color: var(--admin-bg); border: 1px solid var(--admin-border); border-radius: 0.375rem; color: var(--admin-text); font-size: 0.875rem; transition: all 0.2s ease; } .admin-form-select:focus, .admin-form-input:focus { outline: none; border-color: var(--admin-primary); box-shadow: 0 0 0 3px rgba(26, 86, 219, 0.1); } .admin-form-select:focus-visible, .admin-form-input:focus-visible { outline: 2px solid var(--admin-primary); outline-offset: 2px; } /* Admin Button Styles */ .admin-btn-primary { display: inline-flex; align-items: center; padding: 0.5rem 1rem; background-color: var(--admin-primary); color: white; border: none; border-radius: 0.375rem; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; text-decoration: none; } .admin-btn-primary:hover { background-color: var(--admin-primary-dark); color: white; } .admin-btn-secondary { display: inline-flex; align-items: center; padding: 0.5rem 1rem; background-color: var(--admin-bg); color: var(--admin-text); border: 1px solid var(--admin-border); border-radius: 0.375rem; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; } .admin-btn-secondary:hover { background-color: var(--admin-bg-secondary); } /* Admin Table Styles */ .admin-table { min-width: 100%; border-collapse: separate; border-spacing: 0; } .admin-table-header { background-color: var(--admin-bg-secondary); } .admin-table-header-cell { padding: 0.75rem 1.5rem; text-align: left; font-size: 0.75rem; font-weight: 500; color: var(--admin-text-muted); text-transform: uppercase; letter-spacing: 0.05em; border-bottom: 1px solid var(--admin-border); } .admin-table-body { background-color: var(--admin-bg); } .admin-table-row { border-bottom: 1px solid var(--admin-border); transition: background-color 0.2s ease; } .admin-table-row:hover { background-color: var(--admin-bg-secondary); } .admin-table-cell { padding: 1rem 1.5rem; white-space: nowrap; color: var(--admin-text); font-size: 0.875rem; } .admin-table-cell-title { font-weight: 500; color: var(--admin-text); margin-bottom: 0.25rem; } .admin-table-cell-subtitle { color: var(--admin-text-light); font-size: 0.75rem; } /* Admin Action Links */ .admin-action-link { color: var(--admin-primary); text-decoration: none; font-weight: 500; transition: color 0.2s ease; margin-right: 0.5rem; } .admin-action-link:hover { color: var(--admin-primary-dark); } .admin-action-link-danger { color: var(--admin-error); text-decoration: none; font-weight: 500; transition: color 0.2s ease; } .admin-action-link-danger:hover { color: #b91c1c; } /* Loading and Error States */ .admin-loading { display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 3rem; } .admin-loading-spinner { width: 2rem; height: 2rem; border: 2px solid var(--admin-border); border-top: 2px solid var(--admin-primary); border-radius: 50%; animation: admin-spin 1s linear infinite; } .admin-loading-text { margin-top: 0.5rem; color: var(--admin-text-muted); } .admin-error-text { color: var(--admin-error); } .admin-empty-text { color: var(--admin-text-muted); } @keyframes admin-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Admin Quick Actions */ .admin-quick-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; } .admin-quick-action { background-color: var(--admin-bg-soft); border: 1px solid var(--admin-border-light); border-radius: var(--border-radius-lg); padding: 1rem; display: flex; align-items: center; text-decoration: none; color: var(--admin-text); transition: all 0.3s ease; contain: layout style; } .admin-quick-action:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); border-color: var(--admin-primary); } .admin-quick-action-icon { color: var(--admin-primary); margin-right: 0.75rem; width: 1.5rem; height: 1.5rem; } .admin-quick-action-text { font-weight: 500; font-size: 0.875rem; } /* Gold Accent System for Admin (Dark Theme Only) */ .admin-card.admin-gold-accent { border-left: 3px solid transparent; transition: all 0.3s ease; } .dark .admin-card.admin-gold-accent:hover { border-left-color: var(--color-accent-gold); } .admin-card-title.admin-gold-title { transition: color 0.3s ease; } .dark .admin-card.admin-gold-accent:hover .admin-gold-title { color: var(--color-accent-gold); } .admin-stat-card.admin-gold-accent { border-left: 3px solid transparent; transition: all 0.3s ease; } .dark .admin-stat-card.admin-gold-accent:hover { border-left-color: var(--color-accent-gold); } /* High Contrast Admin Themes */ .high-contrast-light .admin-card, .high-contrast-dark .admin-card { border: 3px solid var(--admin-border); font-weight: 600; } .high-contrast-light .admin-nav-item-active, .high-contrast-dark .admin-nav-item-active { border: 3px solid var(--color-border); font-weight: 700; } .high-contrast-light .admin-badge, .high-contrast-dark .admin-badge { border: 2px solid var(--color-border); font-weight: 600; } /* High Contrast Form Elements */ .high-contrast-light .admin-form-select, .high-contrast-light .admin-form-input { border: 3px solid var(--color-border); font-weight: 600; } .high-contrast-dark .admin-form-select, .high-contrast-dark .admin-form-input { border: 3px solid var(--color-border); font-weight: 600; } .high-contrast-light .admin-btn-primary, .high-contrast-dark .admin-btn-primary { border: 3px solid transparent; font-weight: 700; } .high-contrast-light .admin-btn-secondary, .high-contrast-dark .admin-btn-secondary { border: 3px solid var(--color-border); font-weight: 700; } .high-contrast-light .admin-table-header-cell, .high-contrast-dark .admin-table-header-cell { font-weight: 700; border-bottom: 3px solid var(--color-border); } .high-contrast-light .admin-table-cell, .high-contrast-dark .admin-table-cell { font-weight: 600; border-bottom: 2px solid var(--color-border); } /* High Contrast Focus Indicators for Admin */ .high-contrast-light .admin-nav-item:focus-visible, .high-contrast-dark .admin-nav-item:focus-visible { outline: 4px solid var(--color-accent-gold); outline-offset: 2px; } .high-contrast-light .admin-quick-action:focus-visible, .high-contrast-dark .admin-quick-action:focus-visible { outline: 4px solid var(--color-accent-gold); outline-offset: 2px; } /* ========================================== */ /* HIGH CONTRAST ADMIN THEME IMPLEMENTATION */ /* Following CSS Variable Strategy Guidelines */ /* ========================================== */ /* High Contrast Admin Navigation - CSS Variable Based */ .high-contrast-light .admin-nav-item-active { background-color: var(--color-text); color: var(--color-bg); border: 3px solid var(--color-border); border-left: 6px solid var(--color-accent-gold); font-weight: 700; } .high-contrast-light .admin-nav-item { background-color: var(--color-bg); color: var(--color-text); border: 2px solid var(--color-border); margin: 0.25rem 0.5rem; } .high-contrast-light .admin-nav-item:hover { background-color: var(--color-text-light); color: var(--color-bg); border-left: 4px solid var(--color-accent-gold); } /* High Contrast Dark Mode Admin Navigation */ .high-contrast-dark .admin-nav-item-active { background-color: var(--color-text); color: var(--color-bg); border: 3px solid var(--color-border); border-left: 6px solid var(--color-accent-gold); font-weight: 700; } .high-contrast-dark .admin-nav-item { background-color: var(--color-bg); color: var(--color-text); border: 2px solid var(--color-border); margin: 0.25rem 0.5rem; } .high-contrast-dark .admin-nav-item:hover { background-color: var(--color-text-light); color: var(--color-bg); border-left: 4px solid var(--color-accent-gold); } /* High Contrast Admin Sidebar Base */ .high-contrast-light .admin-sidebar { background-color: var(--color-bg); border-right: 3px solid var(--color-border); } .high-contrast-dark .admin-sidebar { background-color: var(--color-bg); border-right: 3px solid var(--color-border); } /* High Contrast Admin Navigation Icons */ .high-contrast-light .admin-nav-icon, .high-contrast-dark .admin-nav-icon { filter: none !important; } /* ========================================== */ /* HIGH CONTRAST ADMIN NAVIGATION FIX */ /* Force proper highlighting with !important */ /* ========================================== */ /* High Contrast Light - Active Menu Item - Maximum Specificity */ html.high-contrast-light .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active { background-color: #000000 !important; color: #FFFFFF !important; border: 3px solid #000000 !important; border-left: 6px solid #FFD700 !important; font-weight: 700 !important; border-radius: 0.5rem !important; } html.high-contrast-light .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active .admin-nav-icon { color: #FFFFFF !important; } html.high-contrast-light .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active:hover { background-color: #000000 !important; color: #FFFFFF !important; } /* High Contrast Dark - Active Menu Item - Maximum Specificity */ html.high-contrast-dark .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active { background-color: #FFFFFF !important; color: #000000 !important; border: 3px solid #FFFFFF !important; border-left: 6px solid #FFD700 !important; font-weight: 700 !important; border-radius: 0.5rem !important; } html.high-contrast-dark .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active .admin-nav-icon { color: #000000 !important; } html.high-contrast-dark .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active:hover { background-color: #FFFFFF !important; color: #000000 !important; } /* High Contrast Navigation Items */ .high-contrast-light .admin-nav-item { background-color: #FFFFFF !important; color: #000000 !important; border: 2px solid #000000 !important; margin: 0.25rem 0.5rem !important; } .high-contrast-dark .admin-nav-item { background-color: #000000 !important; color: #FFFFFF !important; border: 2px solid #FFFFFF !important; margin: 0.25rem 0.5rem !important; } /* High Contrast Hover States */ .high-contrast-light .admin-nav-item:hover { background-color: #333333 !important; color: #FFFFFF !important; border-left: 4px solid #FFD700 !important; } .high-contrast-light .admin-nav-item:hover .admin-nav-icon { color: #FFFFFF !important; } .high-contrast-dark .admin-nav-item:hover { background-color: #CCCCCC !important; color: #000000 !important; border-left: 4px solid #FFD700 !important; } .high-contrast-dark .admin-nav-item:hover .admin-nav-icon { color: #000000 !important; } /* ========================================== */ /* DEBUG: ULTRA HIGH SPECIFICITY TEST */ /* These should be impossible to override */ /* ========================================== */ /* Ultra-specific selectors for debugging */ body.high-contrast-light .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active, html.high-contrast-light body .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active, .high-contrast-light .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active { background-color: #000000 !important; /* Black background for high contrast light */ color: #FFFFFF !important; border: 5px solid #000000 !important; border-left: 10px solid #FFD700 !important; font-weight: 900 !important; } body.high-contrast-dark .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active, html.high-contrast-dark body .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active, .high-contrast-dark .admin-sidebar .admin-nav .admin-nav-item.admin-nav-item-active { background-color: #FFFFFF !important; /* White background for high contrast dark */ color: #000000 !important; border: 5px solid #FFFFFF !important; border-left: 10px solid #FFD700 !important; font-weight: 900 !important; } /* Admin Header Theme Selector - Ensure visibility in all themes */ .admin-header .relative button, .admin-header #theme-selector-button { color: var(--admin-text) !important; background-color: rgba(0, 0, 0, 0.05) !important; border: 1px solid var(--admin-border) !important; } .admin-header .relative button:hover, .admin-header #theme-selector-button:hover { background-color: var(--admin-bg-secondary) !important; color: var(--admin-text) !important; } /* Dark theme header theme selector */ .dark .admin-header .relative button, .dark .admin-header #theme-selector-button { background-color: rgba(255, 255, 255, 0.1) !important; color: var(--admin-text) !important; } .dark .admin-header .relative button:hover, .dark .admin-header #theme-selector-button:hover { background-color: var(--admin-bg-secondary) !important; } /* High contrast theme selector visibility */ .high-contrast-light .admin-header .relative button, .high-contrast-light .admin-header #theme-selector-button { background-color: #000000 !important; color: #FFFFFF !important; border: 3px solid #000000 !important; } .high-contrast-dark .admin-header .relative button, .high-contrast-dark .admin-header #theme-selector-button { background-color: #FFFFFF !important; color: #000000 !important; border: 3px solid #FFFFFF !important; } /* Admin Responsive Design */ @media (max-width: 768px) { .admin-stat-card { padding: 1rem; } .admin-main { padding: 1rem; } .admin-card { padding: 1rem; } .admin-table-cell { padding: 0.75rem; } .admin-table-header-cell { padding: 0.75rem; } }