/* ============================================================================ TV_APP - Component Styles Reusable components used across templates ============================================================================ */ /* ============================================================================ Cards ============================================================================ */ .card, .section, .archive-card, .tournament-info, .league-info { background: white; border-radius: var(--radius-lg); box-shadow: var(--shadow-md); padding: 20px; transition: all var(--transition-normal); margin-bottom: var(--spacing-lg); } .card:hover, .archive-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } .card-header { border-bottom: 1px solid var(--border); padding-bottom: var(--spacing-md); margin-bottom: var(--spacing-md); display: flex; justify-content: space-between; align-items: center; } .card-title { font-size: 1.3rem; font-weight: 600; color: var(--text); margin: 0; } .card-subtitle { font-size: 0.9rem; color: var(--text-muted); margin: 0; } .card-body { padding: 0; } .card-footer { border-top: 1px solid var(--border); padding-top: var(--spacing-md); margin-top: var(--spacing-md); display: flex; justify-content: flex-end; gap: var(--spacing-md); } /* ============================================================================ Status Badges ============================================================================ */ .status-badge, .badge { display: inline-block; padding: 4px 12px; border-radius: 12px; font-size: 0.85rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } /* Badge Colors */ .badge-primary { background: #cfe2ff; color: #084298; } .badge-secondary { background: #e2e3e5; color: #41464b; } .badge-success { background: #d1e7dd; color: #0f5132; } .badge-danger { background: #f8d7da; color: #842029; } .badge-warning { background: #fff3cd; color: #664d03; } .badge-info { background: #cff4fc; color: #055160; } .badge-light { background: #f8f9fa; color: #141619; } .badge-dark { background: #e2e3e5; color: #141619; } /* Status-specific badges */ .status-enabled { background: #d4edda; color: #155724; } .status-disabled { background: #f8d7da; color: #721c24; } .status-active { background: #d1ecf1; color: #0c5460; } .status-inactive { background: #e2e3e5; color: #383d41; } .status-pending { background: #fff3cd; color: #856404; } .status-completed { background: #d4edda; color: #155724; } /* ============================================================================ Forms & Inputs ============================================================================ */ .form-group { margin-bottom: var(--spacing-lg); } .form-group label { display: block; margin-bottom: var(--spacing-sm); font-weight: 600; color: var(--text); } .form-group small { display: block; margin-top: var(--spacing-xs); color: var(--text-muted); font-size: 0.85rem; } /* Text Inputs */ .form-input, .search-input, .camera-input, input[type="text"], input[type="email"], input[type="number"], input[type="password"], select, textarea { width: 100%; padding: 12px 15px; border: 2px solid var(--border); border-radius: var(--radius-md); background: white; color: var(--text); font-size: 0.95rem; font-family: inherit; transition: all var(--transition-normal); box-shadow: var(--shadow-sm); } .form-input:focus, .search-input:focus, .camera-input:focus, input:focus, select:focus, textarea:focus { border-color: var(--primary); box-shadow: 0 5px 12px rgba(0, 123, 255, 0.15); transform: translateY(-1px); outline: none; } .form-input:disabled, input:disabled, select:disabled, textarea:disabled { background: #f8f9fa; color: var(--text-muted); cursor: not-allowed; opacity: 0.6; } /* Error State */ .form-input.error, input.error, select.error, textarea.error { border-color: var(--danger); background: #fff5f5; } .form-input.error:focus, input.error:focus, select.error:focus, textarea.error:focus { box-shadow: 0 5px 12px rgba(220, 53, 69, 0.15); } /* Success State */ .form-input.success, input.success, select.success, textarea.success { border-color: var(--success); background: #f0fdf4; } .form-input.success:focus, input.success:focus, select.success:focus, textarea.success:focus { box-shadow: 0 5px 12px rgba(40, 167, 69, 0.15); } /* Form Error Message */ .error-message { color: var(--danger); font-size: 0.85rem; margin-top: var(--spacing-xs); display: block; } /* ============================================================================ Modals & Overlays ============================================================================ */ .modal-overlay, .modal-backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: var(--z-modal-backdrop); opacity: 0; visibility: hidden; transition: all var(--transition-normal); } .modal-overlay.active, .modal-backdrop.active { opacity: 1; visibility: visible; } .modal, .modal-content { background: white; border-radius: var(--radius-lg); box-shadow: var(--shadow-xl); max-width: 500px; width: 90%; max-height: 90vh; overflow-y: auto; animation: slideUp var(--transition-slow) ease; z-index: var(--z-modal); } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .modal-header { padding: 20px; border-bottom: 1px solid var(--border); display: flex; justify-content: space-between; align-items: center; } .modal-header h2 { margin: 0; font-size: 1.3rem; } .modal-close { background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--text-muted); padding: 0; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; transition: all var(--transition-normal); } .modal-close:hover { color: var(--text); background: var(--lighter); border-radius: var(--radius-md); } .modal-body { padding: 20px; } .modal-footer { padding: 20px; border-top: 1px solid var(--border); display: flex; justify-content: flex-end; gap: var(--spacing-md); } /* ============================================================================ Tables ============================================================================ */ .table { width: 100%; border-collapse: collapse; background: white; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-md); } .table thead { background: #f8f9fa; border-bottom: 2px solid var(--border); position: sticky; top: 0; z-index: 10; } .table th { padding: 12px 15px; text-align: left; font-weight: 600; color: var(--text); white-space: nowrap; } .table td { padding: 12px 15px; border-bottom: 1px solid var(--border); color: var(--text); } .table tbody tr:hover { background: #f8f9fa; } .table tbody tr:last-child td { border-bottom: none; } /* Striped Table */ .table.striped tbody tr:nth-child(odd) { background: #f8f9fa; } /* ============================================================================ Alerts ============================================================================ */ .alert { padding: 12px 15px; border-radius: var(--radius-md); border-left: 4px solid; margin-bottom: var(--spacing-lg); display: flex; align-items: center; gap: var(--spacing-md); } .alert-primary { background: #cfe2ff; border-color: #084298; color: #084298; } .alert-success { background: #d1e7dd; border-color: #0f5132; color: #0f5132; } .alert-danger { background: #f8d7da; border-color: #842029; color: #842029; } .alert-warning { background: #fff3cd; border-color: #664d03; color: #664d03; } .alert-info { background: #cff4fc; border-color: #055160; color: #055160; } .alert-close { background: none; border: none; cursor: pointer; font-size: 1.2rem; margin-left: auto; } /* ============================================================================ Responsive Components ============================================================================ */ @media (max-width: 768px) { .card, .section, .archive-card { padding: 15px; } .modal, .modal-content { max-width: 95%; width: 95%; } .table { font-size: 0.9rem; } .table th, .table td { padding: 10px 12px; } } @media (max-width: 480px) { .card, .section { padding: 12px; } .card-header { flex-direction: column; align-items: flex-start; gap: var(--spacing-md); } .card-footer { flex-direction: column; } .card-footer .btn { width: 100%; } .modal-footer { flex-direction: column; } .modal-footer .btn { width: 100%; } .form-group { margin-bottom: var(--spacing-md); } }